@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.
Files changed (35) hide show
  1. package/dist/AutoUpdateManagerClass.d.ts +65 -0
  2. package/dist/AutoUpdateManagerClass.js +37 -0
  3. package/dist/AutoUpdateManagerClass.js.map +1 -1
  4. package/dist/AutoUpdateServerManagerClass.d.ts +94 -5
  5. package/dist/AutoUpdateServerManagerClass.js +102 -5
  6. package/dist/AutoUpdateServerManagerClass.js.map +1 -1
  7. package/dist/AutoUpdatedClientObjectClass.d.ts +114 -0
  8. package/dist/AutoUpdatedClientObjectClass.js +108 -0
  9. package/dist/AutoUpdatedClientObjectClass.js.map +1 -1
  10. package/dist/AutoUpdatedServerObjectClass.d.ts +94 -1
  11. package/dist/AutoUpdatedServerObjectClass.js +82 -1
  12. package/dist/AutoUpdatedServerObjectClass.js.map +1 -1
  13. package/dist/CommonTypes.d.ts +47 -1
  14. package/dist/CommonTypes.js +47 -1
  15. package/dist/CommonTypes.js.map +1 -1
  16. package/dist/DEMErrors.d.ts +22 -2
  17. package/dist/DEMErrors.js +22 -2
  18. package/dist/DEMErrors.js.map +1 -1
  19. package/dist/sync/ClientStateReconciler.d.ts +20 -0
  20. package/dist/sync/ClientStateReconciler.js +20 -0
  21. package/dist/sync/ClientStateReconciler.js.map +1 -1
  22. package/dist/sync/ServerChangeTracker.d.ts +46 -0
  23. package/dist/sync/ServerChangeTracker.js +46 -0
  24. package/dist/sync/ServerChangeTracker.js.map +1 -1
  25. package/dist/sync/storage/IndexedDbStorageAdapter.d.ts +31 -0
  26. package/dist/sync/storage/IndexedDbStorageAdapter.js +31 -0
  27. package/dist/sync/storage/IndexedDbStorageAdapter.js.map +1 -1
  28. package/dist/sync/storage/LocalStorageAdapter.d.ts +32 -0
  29. package/dist/sync/storage/LocalStorageAdapter.js +32 -0
  30. package/dist/sync/storage/LocalStorageAdapter.js.map +1 -1
  31. package/dist/sync/storage/MemoryStorageAdapter.d.ts +21 -0
  32. package/dist/sync/storage/MemoryStorageAdapter.js +21 -1
  33. package/dist/sync/storage/MemoryStorageAdapter.js.map +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. 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":"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"}
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
- * Inspect database states for all server managers.
68
- * Throws DEMError if any manager database is not connected.
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
- * Inspect current database connection state.
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
- * Verify database connection is active.
99
- * Throws DEMError if database is not connected.
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
- * Inspect database states for all server managers.
159
- * Throws DEMError if any manager database is not connected.
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
- * Inspect current database connection state.
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
- * Verify database connection is active.
306
- * Throws DEMError if database is not connected.
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;