@prestizni-software/server-dem 0.7.3 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoUpdateManagerClass.d.ts +65 -0
- package/dist/AutoUpdateManagerClass.js +37 -0
- package/dist/AutoUpdateManagerClass.js.map +1 -1
- package/dist/AutoUpdateServerManagerClass.d.ts +94 -5
- package/dist/AutoUpdateServerManagerClass.js +102 -5
- package/dist/AutoUpdateServerManagerClass.js.map +1 -1
- package/dist/AutoUpdatedClientObjectClass.d.ts +114 -0
- package/dist/AutoUpdatedClientObjectClass.js +108 -0
- package/dist/AutoUpdatedClientObjectClass.js.map +1 -1
- package/dist/AutoUpdatedServerObjectClass.d.ts +94 -1
- package/dist/AutoUpdatedServerObjectClass.js +82 -1
- package/dist/AutoUpdatedServerObjectClass.js.map +1 -1
- package/dist/CommonTypes.d.ts +47 -1
- package/dist/CommonTypes.js +47 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/DEMErrors.d.ts +22 -2
- package/dist/DEMErrors.js +22 -2
- package/dist/DEMErrors.js.map +1 -1
- package/dist/sync/ClientStateReconciler.d.ts +20 -0
- package/dist/sync/ClientStateReconciler.js +20 -0
- package/dist/sync/ClientStateReconciler.js.map +1 -1
- package/dist/sync/ServerChangeTracker.d.ts +46 -0
- package/dist/sync/ServerChangeTracker.js +46 -0
- package/dist/sync/ServerChangeTracker.js.map +1 -1
- package/dist/sync/storage/IndexedDbStorageAdapter.d.ts +31 -0
- package/dist/sync/storage/IndexedDbStorageAdapter.js +31 -0
- package/dist/sync/storage/IndexedDbStorageAdapter.js.map +1 -1
- package/dist/sync/storage/LocalStorageAdapter.d.ts +32 -0
- package/dist/sync/storage/LocalStorageAdapter.js +32 -0
- package/dist/sync/storage/LocalStorageAdapter.js.map +1 -1
- package/dist/sync/storage/MemoryStorageAdapter.d.ts +21 -0
- package/dist/sync/storage/MemoryStorageAdapter.js +21 -1
- package/dist/sync/storage/MemoryStorageAdapter.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -17,21 +17,86 @@ export declare abstract class AutoUpdateManager<T extends IAutoUpdatedClientObje
|
|
|
17
17
|
};
|
|
18
18
|
protected loggers: LoggersType;
|
|
19
19
|
protected emitter: EventEmitter3;
|
|
20
|
+
/**
|
|
21
|
+
* Initializes the base AutoUpdateManager instance.
|
|
22
|
+
* Extracts registered property metadata from the class prototype.
|
|
23
|
+
*
|
|
24
|
+
* @param classParam - The constructor function of the managed object class.
|
|
25
|
+
* @param className - The name identifier of the managed class.
|
|
26
|
+
* @param socket - The socket instance (client Socket.IO or server Server).
|
|
27
|
+
* @param loggers - Logging interfaces for info, debug, warn, and error levels.
|
|
28
|
+
* @param managers - Registry of sibling managers.
|
|
29
|
+
* @param emitter - Event emitter for manager and lifecycle events.
|
|
30
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ARGUMENT when classParam is omitted.
|
|
31
|
+
*/
|
|
20
32
|
constructor(classParam: Constructor<T>, className: string, socket: unknown, loggers: LoggersType, managers: M, emitter: EventEmitter3);
|
|
33
|
+
/**
|
|
34
|
+
* Indicates whether the manager has completed its initialization and reference loading.
|
|
35
|
+
*
|
|
36
|
+
* @returns True when the manager is fully loaded.
|
|
37
|
+
*/
|
|
21
38
|
get isLoaded(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Closes the manager, purges cached objects, and disconnects the underlying socket.
|
|
41
|
+
*/
|
|
22
42
|
close(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Asynchronously loads unresolved references across all managed objects.
|
|
45
|
+
* Marks the manager as loaded upon completion.
|
|
46
|
+
*
|
|
47
|
+
* @returns A promise that resolves when all references are loaded.
|
|
48
|
+
*/
|
|
23
49
|
loadReferences(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Deletes an object by its identifier, destroys the instance, and clears global caches.
|
|
52
|
+
*
|
|
53
|
+
* @param _id - The unique identifier of the object to delete.
|
|
54
|
+
* @returns A promise resolving to the deletion result object.
|
|
55
|
+
*/
|
|
24
56
|
deleteObject(_id: MongoId): Promise<{
|
|
25
57
|
success: boolean;
|
|
26
58
|
message: string;
|
|
27
59
|
code?: DEMErrorCode;
|
|
28
60
|
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Retrieves an array of all managed object string identifiers.
|
|
63
|
+
*
|
|
64
|
+
* @returns Array of object ID strings.
|
|
65
|
+
*/
|
|
29
66
|
get objectIDs(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Fetches an object missing from local memory.
|
|
69
|
+
*
|
|
70
|
+
* @param _id - Identifier of the missing object.
|
|
71
|
+
* @returns A promise resolving to the retrieved object instance.
|
|
72
|
+
*/
|
|
30
73
|
abstract handleGetMissingObject(_id: MongoId): Promise<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a new object instance.
|
|
76
|
+
*
|
|
77
|
+
* @param data - Object initial data properties without the `_id` field.
|
|
78
|
+
* @returns A promise resolving to the created object instance.
|
|
79
|
+
*/
|
|
31
80
|
abstract createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
|
|
81
|
+
/**
|
|
82
|
+
* Retrieves a managed object from local state by ID.
|
|
83
|
+
*
|
|
84
|
+
* @param _id - Optional identifier of the object.
|
|
85
|
+
* @returns The object instance, null, or undefined.
|
|
86
|
+
*/
|
|
32
87
|
abstract getObject(_id?: MongoId): T | null | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Retrieves the dictionary of all managed objects keyed by their identifier.
|
|
90
|
+
*
|
|
91
|
+
* @returns Map of objects keyed by string ID.
|
|
92
|
+
*/
|
|
33
93
|
abstract get objects(): {
|
|
34
94
|
[_id: string]: T;
|
|
35
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* Retrieves all managed objects as an array.
|
|
98
|
+
*
|
|
99
|
+
* @returns Array containing all managed object instances.
|
|
100
|
+
*/
|
|
36
101
|
abstract get objectsAsArray(): T[];
|
|
37
102
|
}
|
|
@@ -19,6 +19,18 @@ export class AutoUpdateManager {
|
|
|
19
19
|
warn: () => { },
|
|
20
20
|
};
|
|
21
21
|
emitter;
|
|
22
|
+
/**
|
|
23
|
+
* Initializes the base AutoUpdateManager instance.
|
|
24
|
+
* Extracts registered property metadata from the class prototype.
|
|
25
|
+
*
|
|
26
|
+
* @param classParam - The constructor function of the managed object class.
|
|
27
|
+
* @param className - The name identifier of the managed class.
|
|
28
|
+
* @param socket - The socket instance (client Socket.IO or server Server).
|
|
29
|
+
* @param loggers - Logging interfaces for info, debug, warn, and error levels.
|
|
30
|
+
* @param managers - Registry of sibling managers.
|
|
31
|
+
* @param emitter - Event emitter for manager and lifecycle events.
|
|
32
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ARGUMENT when classParam is omitted.
|
|
33
|
+
*/
|
|
22
34
|
constructor(classParam, className, socket, loggers, managers, emitter) {
|
|
23
35
|
if (!classParam)
|
|
24
36
|
throw new DEMError(DEMErrorCode.MISSING_ARGUMENT, "Missing required argument: classParam");
|
|
@@ -43,9 +55,17 @@ export class AutoUpdateManager {
|
|
|
43
55
|
this.loggers.error = (s) => loggers.error?.("[DEM - " + className + " MANAGER] " + s);
|
|
44
56
|
this.loggers.warn = (s) => loggers.warn?.("[DEM - " + className + " MANAGER] " + s);
|
|
45
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Indicates whether the manager has completed its initialization and reference loading.
|
|
60
|
+
*
|
|
61
|
+
* @returns True when the manager is fully loaded.
|
|
62
|
+
*/
|
|
46
63
|
get isLoaded() {
|
|
47
64
|
return this.isLoaded_;
|
|
48
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Closes the manager, purges cached objects, and disconnects the underlying socket.
|
|
68
|
+
*/
|
|
49
69
|
close() {
|
|
50
70
|
for (const id of this.objectIDs) {
|
|
51
71
|
delete this.objects_[id];
|
|
@@ -55,10 +75,22 @@ export class AutoUpdateManager {
|
|
|
55
75
|
this.socket.disconnectSockets?.(true);
|
|
56
76
|
this.loggers.info("Goodbye, see you next time!");
|
|
57
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Asynchronously loads unresolved references across all managed objects.
|
|
80
|
+
* Marks the manager as loaded upon completion.
|
|
81
|
+
*
|
|
82
|
+
* @returns A promise that resolves when all references are loaded.
|
|
83
|
+
*/
|
|
58
84
|
async loadReferences() {
|
|
59
85
|
await Promise.all(this.objectsAsArray.map((obj) => obj.loadMissingReferences()));
|
|
60
86
|
this.isLoaded_ = true;
|
|
61
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Deletes an object by its identifier, destroys the instance, and clears global caches.
|
|
90
|
+
*
|
|
91
|
+
* @param _id - The unique identifier of the object to delete.
|
|
92
|
+
* @returns A promise resolving to the deletion result object.
|
|
93
|
+
*/
|
|
62
94
|
async deleteObject(_id) {
|
|
63
95
|
const _idStr = _id.toString();
|
|
64
96
|
const o = this.objects_[_idStr];
|
|
@@ -73,6 +105,11 @@ export class AutoUpdateManager {
|
|
|
73
105
|
o?.callbacks?.delete?.(this);
|
|
74
106
|
return res ?? { success: true, message: "Already gone" };
|
|
75
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Retrieves an array of all managed object string identifiers.
|
|
110
|
+
*
|
|
111
|
+
* @returns Array of object ID strings.
|
|
112
|
+
*/
|
|
76
113
|
get objectIDs() {
|
|
77
114
|
return Object.keys(this.objects_);
|
|
78
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,WAAW,EACX,QAAQ,EACR,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,MAAM,OAAgB,iBAAiB;IAQ3B,SAAS,GAAG,KAAK,CAAC;IACZ,MAAM,CAAU;IACtB,UAAU,CAAiB;IAC3B,UAAU,CAAW;IACf,SAAS,CAAS;IAClB,KAAK,GAAa;QAChC,UAAU,EAAE,EAAE;KACf,CAAC;IACc,QAAQ,CAAI;IAClB,SAAS,GAAG,KAAK,CAAC;IAClB,0BAA0B,GAA8B,EAAE,CAAC;IAC3D,OAAO,GAAgB;QAC/B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC;IACQ,OAAO,CAAgB;IAEjC,YACE,UAA0B,EAC1B,SAAiB,EACjB,MAAe,EACf,OAAoB,EACpB,QAAW,EACX,OAAsB;QAEtB,IAAI,CAAC,UAAU;YACb,MAAM,IAAI,QAAQ,CAChB,YAAY,CAAC,gBAAgB,EAC7B,uCAAuC,CACxC,CAAC;QACJ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,IAAI,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;QAClC,OAAO,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,KAAK,GACT,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC;gBACvC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;gBACpC,EAAE,CAAC;YACL,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CACjC,OAAO,CAAC,KAAK,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CACjC,OAAO,CAAC,KAAK,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,10 +64,25 @@ export type DEMEvent<C extends IAutoUpdatedClientObject<any>> = {
|
|
|
64
64
|
data: Omit<IsData<C>, "_id">;
|
|
65
65
|
};
|
|
66
66
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
67
|
+
* Inspects database readiness states across all configured server managers.
|
|
68
|
+
*
|
|
69
|
+
* @param managers - Registry of server managers to inspect.
|
|
70
|
+
* @param loggers - Optional logger callbacks.
|
|
71
|
+
* @param emitter - Optional event emitter for error events.
|
|
72
|
+
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if any database is disconnected.
|
|
69
73
|
*/
|
|
70
74
|
export declare function checkServerDbStates(managers: Record<string, AutoUpdateServerManager<any>>, loggers?: LoggersType, emitter?: EventEmitter3): void;
|
|
75
|
+
/**
|
|
76
|
+
* Initializes and starts all server managers, executes DB state assertions, preloads data, and attaches sockets.
|
|
77
|
+
*
|
|
78
|
+
* @param defs - Server manager definitions including class constructors and options.
|
|
79
|
+
* @param loggers_ - Loggers interface.
|
|
80
|
+
* @param socket - Socket.IO server instance.
|
|
81
|
+
* @param doDebug - Flag indicating whether debug logging is enabled.
|
|
82
|
+
* @param emitter - Shared event emitter.
|
|
83
|
+
* @param models - Optional model registry.
|
|
84
|
+
* @returns Promise resolving to the map of initialized server managers.
|
|
85
|
+
*/
|
|
71
86
|
export declare function AUSManagerFactory<T extends Record<string, IAutoUpdatedClientObject<any>>>(defs: AUSDefinitions<T>, loggers_: LoggersType, socket: Server, doDebug?: boolean, emitter?: EventEmitter3, models?: unknown): Promise<WrappedInstances<T>>;
|
|
72
87
|
export declare class AutoUpdateServerManager<T extends IAutoUpdatedClientObject<T>, M extends Record<string, IAutoUpdateManager<any>> = any> extends AutoUpdateManager<T, M> {
|
|
73
88
|
readonly model: ReturnModelType<any, BeAnObject>;
|
|
@@ -85,9 +100,23 @@ export declare class AutoUpdateServerManager<T extends IAutoUpdatedClientObject<
|
|
|
85
100
|
} | null;
|
|
86
101
|
private _cachedObjectsArray;
|
|
87
102
|
readonly changeTracker?: ServerChangeTracker;
|
|
103
|
+
/**
|
|
104
|
+
* Initializes an AutoUpdateServerManager instance.
|
|
105
|
+
*
|
|
106
|
+
* @param classParam - Target server object class constructor.
|
|
107
|
+
* @param className - Managed entity class name.
|
|
108
|
+
* @param socket - Socket.IO Server instance.
|
|
109
|
+
* @param loggers - Logger callbacks interface.
|
|
110
|
+
* @param model - Typegoose Mongoose model for database operations.
|
|
111
|
+
* @param managers - Sibling server managers registry.
|
|
112
|
+
* @param emitter - Shared event emitter.
|
|
113
|
+
* @param options - Server manager options including access middlewares and delta sync settings.
|
|
114
|
+
*/
|
|
88
115
|
constructor(classParam: Constructor<T>, className: string, socket: Server, loggers: LoggersType, model: ReturnModelType<any, BeAnObject>, managers: M, emitter: EventEmitter3, options?: AUSOption<T, Record<string, IAutoUpdatedClientObject<any>>>);
|
|
89
116
|
/**
|
|
90
|
-
*
|
|
117
|
+
* Inspects current database connection state.
|
|
118
|
+
*
|
|
119
|
+
* @returns Object describing connected flag, numeric readyState, and stateName.
|
|
91
120
|
*/
|
|
92
121
|
checkDbState(): {
|
|
93
122
|
connected: boolean;
|
|
@@ -95,25 +124,85 @@ export declare class AutoUpdateServerManager<T extends IAutoUpdatedClientObject<
|
|
|
95
124
|
stateName: string;
|
|
96
125
|
};
|
|
97
126
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
127
|
+
* Verifies database connection is active.
|
|
128
|
+
*
|
|
129
|
+
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if database is not connected.
|
|
100
130
|
*/
|
|
101
131
|
assertDbConnected(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Preloads all database documents into memory for the manager class.
|
|
134
|
+
*
|
|
135
|
+
* @param options - Optional batch loading options.
|
|
136
|
+
* @returns Promise resolving when all entities are loaded and populated in globalCache.
|
|
137
|
+
*/
|
|
102
138
|
preLoad(options?: {
|
|
103
139
|
batchSize?: number;
|
|
104
140
|
}): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Resolves back-references and pointers across loaded objects.
|
|
143
|
+
*
|
|
144
|
+
* @returns Promise resolving when reference resolution completes.
|
|
145
|
+
*/
|
|
105
146
|
loadReferences(): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Registers a client socket with the manager and binds startup, delete, and new event listeners.
|
|
149
|
+
*
|
|
150
|
+
* @param socket - Connected client Socket instance.
|
|
151
|
+
*/
|
|
106
152
|
registerSocket(socket: Socket): void;
|
|
153
|
+
/**
|
|
154
|
+
* Retrieves a server managed object by identifier.
|
|
155
|
+
*
|
|
156
|
+
* @param _id - Optional entity identifier.
|
|
157
|
+
* @returns Managed entity instance, null, or undefined.
|
|
158
|
+
*/
|
|
107
159
|
getObject(_id?: MongoId): T | null | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* Dictionary of all managed entities keyed by their string IDs.
|
|
162
|
+
*
|
|
163
|
+
* @returns Map of managed entities.
|
|
164
|
+
*/
|
|
108
165
|
get objects(): Record<string, T>;
|
|
166
|
+
/**
|
|
167
|
+
* Array representation of all managed entities.
|
|
168
|
+
*
|
|
169
|
+
* @returns Array containing all managed entities.
|
|
170
|
+
*/
|
|
109
171
|
get objectsAsArray(): T[];
|
|
172
|
+
/**
|
|
173
|
+
* Deletes an entity from database, manager cache, and mutation tracker.
|
|
174
|
+
*
|
|
175
|
+
* @param _id - Identifier of entity to delete.
|
|
176
|
+
* @returns Promise resolving to deletion outcome object.
|
|
177
|
+
*/
|
|
110
178
|
deleteObject(_id: MongoId): Promise<{
|
|
111
179
|
success: boolean;
|
|
112
180
|
message: string;
|
|
113
181
|
code?: DEMErrorCode;
|
|
114
182
|
}>;
|
|
115
183
|
private pendingMissingFetches;
|
|
184
|
+
/**
|
|
185
|
+
* Retrieves an entity missing from memory by querying MongoDB directly.
|
|
186
|
+
*
|
|
187
|
+
* @param _id - Identifier of missing entity.
|
|
188
|
+
* @returns Promise resolving to the retrieved server object.
|
|
189
|
+
* @throws {DEMError} Throws DEMErrorCode.DOCUMENT_NOT_FOUND or MANAGERS_NOT_INITIALIZED.
|
|
190
|
+
*/
|
|
116
191
|
handleGetMissingObject(_id: MongoId): Promise<T>;
|
|
192
|
+
/**
|
|
193
|
+
* Creates a new entity document in MongoDB and instantiates its manager wrapper.
|
|
194
|
+
* Broadcasts creation event to client sockets with authorized access.
|
|
195
|
+
*
|
|
196
|
+
* @param data - Initial entity properties.
|
|
197
|
+
* @returns Promise resolving to the created server entity.
|
|
198
|
+
* @throws {DEMError} Throws DEMErrorCode.MANAGERS_NOT_INITIALIZED.
|
|
199
|
+
*/
|
|
117
200
|
createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
|
|
201
|
+
/**
|
|
202
|
+
* Re-evaluates client socket permissions against dynamic startup middleware rules.
|
|
203
|
+
* Emits 'new' or 'delete' socket events when client access changes dynamically.
|
|
204
|
+
*
|
|
205
|
+
* @param object - Entity to evaluate.
|
|
206
|
+
*/
|
|
118
207
|
checkPermissionBoundaries(object: T): Promise<void>;
|
|
119
208
|
}
|
|
@@ -12,6 +12,14 @@ export var DEMEventTypes;
|
|
|
12
12
|
DEMEventTypes["get"] = "get";
|
|
13
13
|
DEMEventTypes["startup"] = "startup";
|
|
14
14
|
})(DEMEventTypes || (DEMEventTypes = {}));
|
|
15
|
+
/**
|
|
16
|
+
* Configures event whitelisting and permission middleware for the Socket.IO server.
|
|
17
|
+
*
|
|
18
|
+
* @param socket_server - Socket.IO server instance.
|
|
19
|
+
* @param loggers - Logging interfaces.
|
|
20
|
+
* @param managers - Registry of server managers.
|
|
21
|
+
* @param _models - Optional models registry.
|
|
22
|
+
*/
|
|
15
23
|
function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
16
24
|
socket_server.use(async (socket, next) => {
|
|
17
25
|
socket.use((async (event, nextEvent) => {
|
|
@@ -155,8 +163,12 @@ function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
|
155
163
|
});
|
|
156
164
|
}
|
|
157
165
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
166
|
+
* Inspects database readiness states across all configured server managers.
|
|
167
|
+
*
|
|
168
|
+
* @param managers - Registry of server managers to inspect.
|
|
169
|
+
* @param loggers - Optional logger callbacks.
|
|
170
|
+
* @param emitter - Optional event emitter for error events.
|
|
171
|
+
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if any database is disconnected.
|
|
160
172
|
*/
|
|
161
173
|
export function checkServerDbStates(managers, loggers, emitter) {
|
|
162
174
|
for (const [key, manager] of Object.entries(managers)) {
|
|
@@ -171,6 +183,17 @@ export function checkServerDbStates(managers, loggers, emitter) {
|
|
|
171
183
|
}
|
|
172
184
|
}
|
|
173
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Initializes and starts all server managers, executes DB state assertions, preloads data, and attaches sockets.
|
|
188
|
+
*
|
|
189
|
+
* @param defs - Server manager definitions including class constructors and options.
|
|
190
|
+
* @param loggers_ - Loggers interface.
|
|
191
|
+
* @param socket - Socket.IO server instance.
|
|
192
|
+
* @param doDebug - Flag indicating whether debug logging is enabled.
|
|
193
|
+
* @param emitter - Shared event emitter.
|
|
194
|
+
* @param models - Optional model registry.
|
|
195
|
+
* @returns Promise resolving to the map of initialized server managers.
|
|
196
|
+
*/
|
|
174
197
|
export async function AUSManagerFactory(defs, loggers_, socket, doDebug = true, emitter = new EventEmitter(), models) {
|
|
175
198
|
// Use delegation instead of cloning or direct mutation to ensure late-added spies work
|
|
176
199
|
const loggers = {
|
|
@@ -266,6 +289,18 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
266
289
|
startupPayloadCache = null;
|
|
267
290
|
_cachedObjectsArray = null;
|
|
268
291
|
changeTracker;
|
|
292
|
+
/**
|
|
293
|
+
* Initializes an AutoUpdateServerManager instance.
|
|
294
|
+
*
|
|
295
|
+
* @param classParam - Target server object class constructor.
|
|
296
|
+
* @param className - Managed entity class name.
|
|
297
|
+
* @param socket - Socket.IO Server instance.
|
|
298
|
+
* @param loggers - Logger callbacks interface.
|
|
299
|
+
* @param model - Typegoose Mongoose model for database operations.
|
|
300
|
+
* @param managers - Sibling server managers registry.
|
|
301
|
+
* @param emitter - Shared event emitter.
|
|
302
|
+
* @param options - Server manager options including access middlewares and delta sync settings.
|
|
303
|
+
*/
|
|
269
304
|
constructor(classParam, className, socket, loggers, model, managers, emitter, options) {
|
|
270
305
|
super(classParam, className, socket, loggers, managers, emitter);
|
|
271
306
|
this.managers = managers;
|
|
@@ -279,7 +314,9 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
279
314
|
}
|
|
280
315
|
}
|
|
281
316
|
/**
|
|
282
|
-
*
|
|
317
|
+
* Inspects current database connection state.
|
|
318
|
+
*
|
|
319
|
+
* @returns Object describing connected flag, numeric readyState, and stateName.
|
|
283
320
|
*/
|
|
284
321
|
checkDbState() {
|
|
285
322
|
const db = this.model?.db;
|
|
@@ -302,8 +339,9 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
302
339
|
};
|
|
303
340
|
}
|
|
304
341
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
342
|
+
* Verifies database connection is active.
|
|
343
|
+
*
|
|
344
|
+
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if database is not connected.
|
|
307
345
|
*/
|
|
308
346
|
assertDbConnected() {
|
|
309
347
|
const status = this.checkDbState();
|
|
@@ -314,6 +352,12 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
314
352
|
throw err;
|
|
315
353
|
}
|
|
316
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Preloads all database documents into memory for the manager class.
|
|
357
|
+
*
|
|
358
|
+
* @param options - Optional batch loading options.
|
|
359
|
+
* @returns Promise resolving when all entities are loaded and populated in globalCache.
|
|
360
|
+
*/
|
|
317
361
|
async preLoad(options) {
|
|
318
362
|
this.assertDbConnected();
|
|
319
363
|
this.loggers.debug("Loading manager DB " + this.className);
|
|
@@ -342,6 +386,11 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
342
386
|
docs.length +
|
|
343
387
|
"] entries");
|
|
344
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Resolves back-references and pointers across loaded objects.
|
|
391
|
+
*
|
|
392
|
+
* @returns Promise resolving when reference resolution completes.
|
|
393
|
+
*/
|
|
345
394
|
async loadReferences() {
|
|
346
395
|
// Phase 1: Initial reference resolution (including back-references/createdWithParent)
|
|
347
396
|
// This MUST happen after all managers have finished preLoad so that all objects exist in globalCache.
|
|
@@ -349,6 +398,11 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
349
398
|
// Phase 2: Resolve missing references (pointers) and set isLoaded_ = true
|
|
350
399
|
await super.loadReferences();
|
|
351
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Registers a client socket with the manager and binds startup, delete, and new event listeners.
|
|
403
|
+
*
|
|
404
|
+
* @param socket - Connected client Socket instance.
|
|
405
|
+
*/
|
|
352
406
|
registerSocket(socket) {
|
|
353
407
|
this.clientSockets.add(socket);
|
|
354
408
|
socket.on(EVENT_STARTUP + this.className, async (req, ack) => {
|
|
@@ -616,20 +670,42 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
616
670
|
this.knownObjectIdsBySocket.delete(socket);
|
|
617
671
|
});
|
|
618
672
|
}
|
|
673
|
+
/**
|
|
674
|
+
* Retrieves a server managed object by identifier.
|
|
675
|
+
*
|
|
676
|
+
* @param _id - Optional entity identifier.
|
|
677
|
+
* @returns Managed entity instance, null, or undefined.
|
|
678
|
+
*/
|
|
619
679
|
getObject(_id) {
|
|
620
680
|
if (!_id)
|
|
621
681
|
return null;
|
|
622
682
|
return this.objects_[_id.toString()] || undefined;
|
|
623
683
|
}
|
|
684
|
+
/**
|
|
685
|
+
* Dictionary of all managed entities keyed by their string IDs.
|
|
686
|
+
*
|
|
687
|
+
* @returns Map of managed entities.
|
|
688
|
+
*/
|
|
624
689
|
get objects() {
|
|
625
690
|
return this.objects_;
|
|
626
691
|
}
|
|
692
|
+
/**
|
|
693
|
+
* Array representation of all managed entities.
|
|
694
|
+
*
|
|
695
|
+
* @returns Array containing all managed entities.
|
|
696
|
+
*/
|
|
627
697
|
get objectsAsArray() {
|
|
628
698
|
if (!this._cachedObjectsArray) {
|
|
629
699
|
this._cachedObjectsArray = Object.values(this.objects_);
|
|
630
700
|
}
|
|
631
701
|
return this._cachedObjectsArray;
|
|
632
702
|
}
|
|
703
|
+
/**
|
|
704
|
+
* Deletes an entity from database, manager cache, and mutation tracker.
|
|
705
|
+
*
|
|
706
|
+
* @param _id - Identifier of entity to delete.
|
|
707
|
+
* @returns Promise resolving to deletion outcome object.
|
|
708
|
+
*/
|
|
633
709
|
async deleteObject(_id) {
|
|
634
710
|
this._cachedObjectsArray = null;
|
|
635
711
|
const idStr = _id.toString();
|
|
@@ -645,6 +721,13 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
645
721
|
return super.deleteObject(_id);
|
|
646
722
|
}
|
|
647
723
|
pendingMissingFetches = new Map();
|
|
724
|
+
/**
|
|
725
|
+
* Retrieves an entity missing from memory by querying MongoDB directly.
|
|
726
|
+
*
|
|
727
|
+
* @param _id - Identifier of missing entity.
|
|
728
|
+
* @returns Promise resolving to the retrieved server object.
|
|
729
|
+
* @throws {DEMError} Throws DEMErrorCode.DOCUMENT_NOT_FOUND or MANAGERS_NOT_INITIALIZED.
|
|
730
|
+
*/
|
|
648
731
|
async handleGetMissingObject(_id) {
|
|
649
732
|
const _idStr = _id.toString();
|
|
650
733
|
if (this.getObject(_idStr))
|
|
@@ -679,6 +762,14 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
679
762
|
this.pendingMissingFetches.set(_idStr, fetchPromise);
|
|
680
763
|
return fetchPromise;
|
|
681
764
|
}
|
|
765
|
+
/**
|
|
766
|
+
* Creates a new entity document in MongoDB and instantiates its manager wrapper.
|
|
767
|
+
* Broadcasts creation event to client sockets with authorized access.
|
|
768
|
+
*
|
|
769
|
+
* @param data - Initial entity properties.
|
|
770
|
+
* @returns Promise resolving to the created server entity.
|
|
771
|
+
* @throws {DEMError} Throws DEMErrorCode.MANAGERS_NOT_INITIALIZED.
|
|
772
|
+
*/
|
|
682
773
|
async createObject(data) {
|
|
683
774
|
if (!this.managers)
|
|
684
775
|
throw new DEMError(DEMErrorCode.MANAGERS_NOT_INITIALIZED, `No managers.`);
|
|
@@ -763,6 +854,12 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
763
854
|
}
|
|
764
855
|
return object;
|
|
765
856
|
}
|
|
857
|
+
/**
|
|
858
|
+
* Re-evaluates client socket permissions against dynamic startup middleware rules.
|
|
859
|
+
* Emits 'new' or 'delete' socket events when client access changes dynamically.
|
|
860
|
+
*
|
|
861
|
+
* @param object - Entity to evaluate.
|
|
862
|
+
*/
|
|
766
863
|
async checkPermissionBoundaries(object) {
|
|
767
864
|
if (!this.options?.accessDefinitions?.startupMiddleware)
|
|
768
865
|
return;
|