fix(types,client,server): improve type safety and harden client/server message handling

This commit is contained in:
2026-05-01 11:22:06 +00:00
parent 496fd9a81a
commit 3ac4c2e708
22 changed files with 9276 additions and 3895 deletions
+12 -11
View File
@@ -1,6 +1,5 @@
import * as plugins from './smartuniverse.plugins.js';
import * as interfaces from './interfaces/index.js';
import { Universe } from './smartuniverse.classes.universe.js';
import { UniverseChannel } from './smartuniverse.classes.universechannel.js';
import { UniverseCache } from './smartuniverse.classes.universecache.js';
import { SocketConnection } from '@push.rocks/smartsocket';
@@ -10,12 +9,12 @@ import { logger } from './smartuniverse.logging.js';
* represents a message within a universe
* acts as a container to save message states like authentication status
*/
export class UniverseMessage<T> implements interfaces.IUniverseMessage {
public static createMessageFromPayload(
export class UniverseMessage<T = any> implements interfaces.IUniverseMessage<T> {
public static createMessageFromPayload<T = any>(
socketConnectionArg: SocketConnection,
dataArg: interfaces.IUniverseMessage
dataArg: interfaces.IUniverseMessage<T>
) {
const universeMessageInstance = new UniverseMessage(dataArg);
const universeMessageInstance = new UniverseMessage<T>(dataArg);
universeMessageInstance.socketConnection = socketConnectionArg;
return universeMessageInstance;
}
@@ -27,12 +26,12 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
public passphrase: string;
public payload: T;
public targetChannelName: string;
public socketConnection: SocketConnection;
public socketConnection?: SocketConnection;
/**
* the UniverseCache the message is attached to
*/
public universeCache: UniverseCache;
public universeCache?: UniverseCache;
/**
* enables unprotected grouping of messages for efficiency purposes.
@@ -47,19 +46,21 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
/**
* a destruction timer for this message
*/
public destructionTimer: plugins.smarttime.Timer; // a timer to take care of message destruction
public destructionTimer?: plugins.smarttime.Timer; // a timer to take care of message destruction
/**
* the constructor to create a universe message
* @param messageArg
* @param attachedPayloadArg
*/
constructor(messageDescriptor: interfaces.IUniverseMessage) {
constructor(messageDescriptor: interfaces.IUniverseMessage<T>) {
this.id = messageDescriptor.id;
this.timestamp = messageDescriptor.timestamp;
this.smartTimestamp = new plugins.smarttime.TimeStamp(this.timestamp);
this.messageText = messageDescriptor.messageText;
this.targetChannelName = messageDescriptor.targetChannelName;
this.passphrase = messageDescriptor.passphrase;
this.payload = messageDescriptor.payload;
this.payload = messageDescriptor.payload as T;
// prevent memory issues
this.setDestructionTimer();
}
@@ -77,7 +78,7 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
// set up self destruction by removing this from the parent messageCache
this.destructionTimer.completed
.then(async () => {
this.universeCache.messageMap.remove(this);
this.universeCache?.messageMap.remove(this);
})
.catch((err) => {
console.log(err);