@prestizni-software/server-dem 0.5.16 → 0.5.17

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.
@@ -1,35 +1,34 @@
1
- import { AutoUpdatedClientObject } from "./AutoUpdatedClientObjectClass";
2
- import { Constructor, EventEmitter3, LoggersType, Cache } from "./CommonTypes";
1
+ import { IAutoUpdatedClientObjectBase, MongoId, IsData, IAutoUpdateManager, Constructor, EventEmitter3, LoggersType, DEMCache } from "./CommonTypes.js";
3
2
  import "reflect-metadata";
4
- export declare abstract class AutoUpdateManager<T extends AutoUpdatedClientObject<any>> {
3
+ export declare abstract class AutoUpdateManager<T extends IAutoUpdatedClientObjectBase, M extends Record<string, IAutoUpdateManager<any>> = Record<string, IAutoUpdateManager<any>>> implements IAutoUpdateManager<T> {
5
4
  protected abstract objects_: {
6
5
  [_id: string]: T;
7
6
  };
8
7
  protected isLoaded_: boolean;
9
- readonly socket: any;
8
+ readonly socket: unknown;
10
9
  protected classParam: Constructor<T>;
11
- protected properties: (keyof any)[];
10
+ protected properties: string[];
12
11
  readonly className: string;
13
- readonly cache: Cache<any>;
14
- readonly managers: Record<string, AutoUpdateManager<AutoUpdatedClientObject<any>>>;
12
+ readonly cache: DEMCache;
13
+ readonly managers: M;
15
14
  protected preloaded: boolean;
16
15
  protected waitingToResolveReferences: {
17
16
  [_id: string]: string;
18
17
  };
19
18
  protected loggers: LoggersType;
20
19
  protected emitter: EventEmitter3;
21
- constructor(classParam: Constructor<T>, className: string, socket: any, loggers: LoggersType, managers: Record<string, AutoUpdateManager<AutoUpdatedClientObject<any>>>, emitter: EventEmitter3);
20
+ constructor(classParam: Constructor<T>, className: string, socket: unknown, loggers: LoggersType, managers: M, emitter: EventEmitter3);
22
21
  get isLoaded(): boolean;
23
22
  close(): void;
24
23
  loadReferences(): Promise<void>;
25
- deleteObject(_id: string): Promise<{
24
+ deleteObject(_id: MongoId): Promise<{
26
25
  success: boolean;
27
26
  message: string;
28
27
  }>;
29
28
  get objectIDs(): string[];
30
- abstract handleGetMissingObject(_id: string): Promise<T>;
31
- abstract createObject(data: Omit<any, "_id">): Promise<T>;
32
- abstract getObject(_id?: string): T | null | undefined;
29
+ abstract handleGetMissingObject(_id: MongoId): Promise<T>;
30
+ abstract createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
31
+ abstract getObject(_id?: MongoId): T | null | undefined;
33
32
  abstract get objects(): {
34
33
  [_id: string]: T;
35
34
  };
@@ -1,4 +1,4 @@
1
- import { globalCache, } from "./CommonTypes";
1
+ import { globalCache, } from "./CommonTypes.js";
2
2
  import "reflect-metadata";
3
3
  export class AutoUpdateManager {
4
4
  isLoaded_ = false;
@@ -20,13 +20,16 @@ export class AutoUpdateManager {
20
20
  };
21
21
  emitter;
22
22
  constructor(classParam, className, socket, loggers, managers, emitter) {
23
- console.log("DEBUG: AutoUpdateManager constructor, className=" + className + ", socket keys=" + Object.keys(socket || {}).join(","));
23
+ console.log("DEBUG: AutoUpdateManager constructor, className=" +
24
+ className +
25
+ ", socket keys=" +
26
+ Object.keys(socket || {}).join(","));
24
27
  this.className = className;
25
28
  this.managers = managers;
26
29
  this.emitter = emitter;
27
30
  this.socket = socket;
28
31
  this.classParam = classParam;
29
- this.properties = Reflect.getMetadata("props", classParam.prototype);
32
+ this.properties = Reflect.getMetadata("props", classParam.prototype) || [];
30
33
  this.loggers.debug = (s) => loggers.debug?.("[DEM - " + className + " MANAGER] " + s);
31
34
  this.loggers.info = (s) => loggers.info?.("[DEM - " + className + " MANAGER] " + s);
32
35
  this.loggers.error = (s) => loggers.error?.("[DEM - " + className + " MANAGER] " + s);
@@ -40,7 +43,8 @@ export class AutoUpdateManager {
40
43
  delete this.objects_[id];
41
44
  delete globalCache.objects[id];
42
45
  }
43
- this.socket.disconnect?.() ?? this.socket.disconnectSockets?.(true);
46
+ this.socket.disconnect?.() ??
47
+ this.socket.disconnectSockets?.(true);
44
48
  this.loggers.info("Goodbye, see you next time!");
45
49
  }
46
50
  async loadReferences() {
@@ -50,13 +54,14 @@ export class AutoUpdateManager {
50
54
  this.isLoaded_ = true;
51
55
  }
52
56
  async deleteObject(_id) {
53
- const o = this.objects_[_id];
57
+ const _idStr = _id.toString();
58
+ const o = this.objects_[_idStr];
54
59
  const res = await o?.destroy(true);
55
60
  if (res?.success) {
56
- delete this.objects_[_id];
57
- delete globalCache.objects[_id];
61
+ delete this.objects_[_idStr];
62
+ delete globalCache.objects[_idStr];
58
63
  }
59
- await o?.callbacks?.delete?.(this);
64
+ o?.callbacks?.delete?.(this);
60
65
  return res ?? { success: true, message: "Already gone" };
61
66
  }
62
67
  get objectIDs() {
@@ -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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"}
@@ -1,37 +1,31 @@
1
1
  import { Server, Socket } from "socket.io";
2
- import { AutoUpdateManager } from "./AutoUpdateManagerClass";
3
- import { AutoUpdatedServerObject } from "./AutoUpdatedServerObjectClass";
4
- import { Constructor, EventEmitter3, IsData, LoggersType, Pure } from "./CommonTypes";
2
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
3
+ import { Constructor, IsData, LoggersType, IAutoUpdatedClientObject, EventEmitter3, MongoId, IAutoUpdateManager } from "./CommonTypes.js";
5
4
  import { BeAnObject, ReturnModelType } from "@typegoose/typegoose/lib/types";
6
- import { Paths, PathValueOf } from "./CommonTypes_server";
7
- export type WrappedInstances<T extends Record<string, AutoUpdatedServerObject<any>>> = {
5
+ export type WrappedInstances<T extends Record<string, IAutoUpdatedClientObject<any>>> = {
8
6
  [K in keyof T]: AutoUpdateServerManager<T[K]>;
9
7
  };
10
- export type AUSDefinitions<T extends Record<string, AutoUpdatedServerObject<any>>> = {
8
+ export type AUSDefinitions<T extends Record<string, IAutoUpdatedClientObject<any>>> = {
11
9
  [K in keyof T]: ServerManagerDefinition<T[K], T>;
12
10
  };
13
- export type EventMiddlewareFunction<T extends Record<string, AutoUpdatedServerObject<any>>, C extends AutoUpdatedServerObject<any>> = (event: DEMEvent<C>, managers: {
14
- [K in keyof T]: AutoUpdateServerManager<T[K]>;
15
- }, socket: Socket) => Promise<void>;
16
- export type StartupMiddlewareFunction<T extends Record<string, AutoUpdatedServerObject<any>>, C extends AutoUpdatedServerObject<any>> = (ids: C[], managers: {
17
- [K in keyof T]: AutoUpdateServerManager<T[K]>;
18
- }, socket: Socket) => Promise<C[]>;
19
- export type AccessMiddleware<T extends Record<string, AutoUpdatedServerObject<any>>, C extends AutoUpdatedServerObject<any>> = {
11
+ export type EventMiddlewareFunction<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = (event: DEMEvent<C>, managers: WrappedInstances<T>, socket: Socket) => Promise<void>;
12
+ export type StartupMiddlewareFunction<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = (ids: C[], managers: WrappedInstances<T>, socket: Socket) => Promise<C[]>;
13
+ export type AccessMiddleware<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = {
20
14
  eventMiddleware?: EventMiddlewareFunction<T, C>;
21
15
  startupMiddleware?: StartupMiddlewareFunction<T, C>;
22
16
  };
23
- export type AUSOption<C extends AutoUpdatedServerObject<any>, T extends Record<string, AutoUpdatedServerObject<any>>> = {
17
+ export type AUSOption<C extends IAutoUpdatedClientObject<any>, T extends Record<string, IAutoUpdatedClientObject<any>>> = {
24
18
  accessDefinitions?: AccessMiddleware<T, C>;
25
- onUpdate?: (obj: C, set: <K extends Paths<C, AutoUpdatedServerObject<C>>>(key: K, val: PathValueOf<C, K>) => Promise<{
19
+ onUpdate?: (obj: C, set: (key: string, val: any) => Promise<{
26
20
  success: boolean;
27
21
  msg: string;
28
22
  }>) => Promise<void>;
29
23
  };
30
- export type ServerManagerDefinition<C extends AutoUpdatedServerObject<any>, T extends Record<string, AutoUpdatedServerObject<any>>> = {
24
+ export type ServerManagerDefinition<C extends IAutoUpdatedClientObject<any>, T extends Record<string, IAutoUpdatedClientObject<any>>> = {
31
25
  class: Constructor<C>;
32
26
  options?: AUSOption<C, T>;
33
27
  };
34
- export type BaseManagers = Record<string, AutoUpdateServerManager<AutoUpdatedServerObject<any>>>;
28
+ export type BaseManagers = Record<string, IAutoUpdateManager<any>>;
35
29
  export declare enum DEMEventTypes {
36
30
  "new" = "new",
37
31
  "update" = "update",
@@ -39,48 +33,46 @@ export declare enum DEMEventTypes {
39
33
  "get" = "get",
40
34
  "startup" = "startup"
41
35
  }
42
- export type DEMEvent<C extends AutoUpdatedServerObject<any>> = {
36
+ export type DEMEvent<C extends IAutoUpdatedClientObject<any>> = {
43
37
  type: DEMEventTypes.delete | DEMEventTypes.get;
44
- manager: AutoUpdateServerManager<C>;
38
+ manager: IAutoUpdateManager<C>;
45
39
  object: C;
46
40
  data: never;
47
41
  } | {
48
42
  type: DEMEventTypes.update;
49
- manager: AutoUpdateServerManager<C>;
43
+ manager: IAutoUpdateManager<C>;
50
44
  object: C;
51
45
  data: {
52
46
  _id: string;
53
- key: Paths<C, AutoUpdatedServerObject<C>>;
54
- value: any;
47
+ key: string;
48
+ value: unknown;
55
49
  };
56
50
  } | {
57
51
  type: DEMEventTypes.startup;
58
- manager: AutoUpdateServerManager<C>;
52
+ manager: IAutoUpdateManager<C>;
59
53
  object: never;
60
54
  data: never;
61
55
  } | {
62
56
  type: DEMEventTypes.new;
63
- manager: AutoUpdateServerManager<C>;
57
+ manager: IAutoUpdateManager<C>;
64
58
  object: never;
65
- data: IsData<C>;
59
+ data: Omit<IsData<C>, "_id">;
66
60
  };
67
- export declare function AUSManagerFactory<T extends Record<string, AutoUpdatedServerObject<any>>>(defs: AUSDefinitions<T>, loggers: LoggersType, socket: Server, disableDEMDebugMessages?: boolean, emitter?: EventEmitter3, models?: any): Promise<{
68
- [K in keyof T]: AutoUpdateServerManager<T[K]>;
69
- }>;
70
- export declare class AutoUpdateServerManager<T extends AutoUpdatedServerObject<any>> extends AutoUpdateManager<T> {
71
- readonly model: ReturnModelType<Constructor<T>, BeAnObject>;
61
+ 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>>;
62
+ export declare class AutoUpdateServerManager<T extends IAutoUpdatedClientObject<T>, M extends Record<string, IAutoUpdateManager<any>> = any> extends AutoUpdateManager<T, M> {
63
+ readonly model: ReturnModelType<any, BeAnObject>;
72
64
  private readonly clientSockets;
73
- readonly options?: AUSOption<T, any>;
65
+ readonly options?: AUSOption<T, Record<string, IAutoUpdatedClientObject<any>>>;
74
66
  protected objects_: {
75
67
  [_id: string]: T;
76
68
  };
77
- readonly managers: Record<string, AutoUpdateServerManager<AutoUpdatedServerObject<any>>>;
78
- constructor(classParam: Constructor<T>, className: string, socket: Server, loggers: LoggersType, model: ReturnModelType<Constructor<T>, BeAnObject>, managers: Record<string, AutoUpdateServerManager<AutoUpdatedServerObject<any>>>, emitter: EventEmitter3, options?: AUSOption<T, any>);
69
+ readonly managers: M;
70
+ 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>>>);
79
71
  preLoad(): Promise<void>;
80
72
  registerSocket(socket: Socket): void;
81
- getObject(_id: string): T | null | undefined;
73
+ getObject(_id?: MongoId): T | null | undefined;
82
74
  get objects(): Record<string, T>;
83
75
  get objectsAsArray(): T[];
84
- handleGetMissingObject(_id: string): Promise<T>;
85
- createObject(data: Omit<IsData<Pure<T, AutoUpdatedServerObject<any>>>, "_id">): Promise<T>;
76
+ handleGetMissingObject(_id: MongoId): Promise<T>;
77
+ createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
86
78
  }
@@ -1,6 +1,6 @@
1
- import { AutoUpdateManager } from "./AutoUpdateManagerClass";
2
- import { createAutoUpdatedClass } from "./AutoUpdatedServerObjectClass";
3
- import { globalCache, EVENT_NEW, EVENT_UPDATE, EVENT_DELETE, EVENT_GET, EVENT_STARTUP } from "./CommonTypes";
1
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
2
+ import { createAutoUpdatedClass } from "./AutoUpdatedServerObjectClass.js";
3
+ import { globalCache, EVENT_NEW, EVENT_UPDATE, EVENT_DELETE, EVENT_GET, EVENT_STARTUP, } from "./CommonTypes.js";
4
4
  import { EventEmitter } from "eventemitter3";
5
5
  import * as machineId from "node-machine-id";
6
6
  import { getModelForClass } from "@typegoose/typegoose";
@@ -12,14 +12,16 @@ export var DEMEventTypes;
12
12
  DEMEventTypes["get"] = "get";
13
13
  DEMEventTypes["startup"] = "startup";
14
14
  })(DEMEventTypes || (DEMEventTypes = {}));
15
- function setupSocketMiddleware(socket_server, loggers, managers, models) {
15
+ function setupSocketMiddleware(socket_server, loggers, managers, _models) {
16
16
  socket_server.use(async (socket, next) => {
17
17
  socket.use((async (event, nextEvent) => {
18
18
  if (event.length !== 3 ||
19
19
  typeof event[0] !== "string" ||
20
20
  typeof event[2] !== "function") {
21
21
  loggers.warn?.("Invalid event: [" +
22
- event.map((e) => JSON.stringify(e)).join("], [") +
22
+ event
23
+ .map((e) => (typeof e === "object" ? "[object]" : String(e)))
24
+ .join("], [") +
23
25
  "]");
24
26
  return;
25
27
  }
@@ -28,7 +30,9 @@ function setupSocketMiddleware(socket_server, loggers, managers, models) {
28
30
  .some((e) => e.toString() === event[0] ||
29
31
  e.toString() === event[0].slice(0, -24))) {
30
32
  loggers.warn?.("Undefined event: [" +
31
- event.map((e) => JSON.stringify(e)).join("], [") +
33
+ event
34
+ .map((e) => (typeof e === "object" ? "[object]" : String(e)))
35
+ .join("], [") +
32
36
  "]");
33
37
  event[2]({
34
38
  success: false,
@@ -38,41 +42,66 @@ function setupSocketMiddleware(socket_server, loggers, managers, models) {
38
42
  }
39
43
  try {
40
44
  const e = event[0];
41
- let demEvent = {};
45
+ let demEvent;
42
46
  const id = e.slice(-24);
43
47
  switch (true) {
44
48
  case e.startsWith(EVENT_NEW):
45
- demEvent.type = DEMEventTypes.new;
46
- demEvent.manager = managers[e.replace(EVENT_NEW, "")];
47
- demEvent.data = event[1];
49
+ demEvent = {
50
+ type: DEMEventTypes.new,
51
+ manager: managers[e.replace(EVENT_NEW, "")],
52
+ data: event[1],
53
+ object: undefined,
54
+ };
48
55
  break;
49
56
  case e.startsWith(EVENT_UPDATE):
50
- demEvent.type = DEMEventTypes.update;
51
- demEvent.manager = managers[e.replace(EVENT_UPDATE, "").replace(id, "")];
52
- demEvent.object = demEvent.manager.getObject(id);
53
- demEvent.data = event[1];
57
+ {
58
+ const manager = managers[e.replace(EVENT_UPDATE, "").replace(id, "")];
59
+ demEvent = {
60
+ type: DEMEventTypes.update,
61
+ manager: manager,
62
+ object: manager.getObject(id),
63
+ data: event[1],
64
+ };
65
+ }
54
66
  break;
55
67
  case e.startsWith(EVENT_DELETE):
56
- demEvent.type = DEMEventTypes.delete;
57
- demEvent.manager = managers[e.replace(EVENT_DELETE, "")];
58
- demEvent.object = demEvent.manager.getObject(event[1]);
59
- if (!demEvent.object) {
60
- event[2]({
61
- success: true,
62
- message: "Object already deleted",
68
+ {
69
+ const manager = managers[e.replace(EVENT_DELETE, "")];
70
+ const obj = manager.getObject(event[1]);
71
+ if (!obj) {
72
+ event[2]({
73
+ success: true,
74
+ message: "Object already deleted",
75
+ data: undefined,
76
+ });
77
+ return;
78
+ }
79
+ demEvent = {
80
+ type: DEMEventTypes.delete,
81
+ manager: manager,
82
+ object: obj,
63
83
  data: undefined,
64
- });
65
- return;
84
+ };
66
85
  }
67
86
  break;
68
87
  case e.startsWith(EVENT_GET):
69
- demEvent.type = DEMEventTypes.get;
70
- demEvent.manager = managers[e.replace(EVENT_GET, "").replace(id, "")];
71
- demEvent.object = demEvent.manager.getObject(id);
88
+ {
89
+ const manager = managers[e.replace(EVENT_GET, "").replace(id, "")];
90
+ demEvent = {
91
+ type: DEMEventTypes.get,
92
+ manager: manager,
93
+ object: manager.getObject(id),
94
+ data: undefined,
95
+ };
96
+ }
72
97
  break;
73
98
  case e.startsWith(EVENT_STARTUP):
74
- demEvent.type = DEMEventTypes.startup;
75
- demEvent.manager = managers[e.replace(EVENT_STARTUP, "")];
99
+ demEvent = {
100
+ type: DEMEventTypes.startup,
101
+ manager: managers[e.replace(EVENT_STARTUP, "")],
102
+ object: undefined,
103
+ data: undefined,
104
+ };
76
105
  break;
77
106
  default:
78
107
  throw new Error("Unknown event: " +
@@ -95,14 +124,14 @@ function setupSocketMiddleware(socket_server, loggers, managers, models) {
95
124
  "'\nTo the event: '" +
96
125
  event[0] +
97
126
  "'\nFor: '" +
98
- error.message +
127
+ (error instanceof Error ? error.message : String(error)) +
99
128
  "'");
100
129
  event[2]({
101
130
  success: false,
102
131
  message: "You were denied access to this event '" +
103
132
  event[0] +
104
133
  "' by the server.\n" +
105
- error.message,
134
+ (error instanceof Error ? error.message : String(error)),
106
135
  });
107
136
  }
108
137
  }
@@ -110,18 +139,18 @@ function setupSocketMiddleware(socket_server, loggers, managers, models) {
110
139
  loggers.error?.("Error with event: " +
111
140
  event[0] +
112
141
  "\nError: " +
113
- error.message);
142
+ (error instanceof Error ? error.message : String(error)));
114
143
  return;
115
144
  }
116
145
  }));
117
146
  next();
118
147
  });
119
148
  }
120
- export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMessages = false, emitter = new EventEmitter(), models) {
149
+ export async function AUSManagerFactory(defs, loggers, socket, doDebug = true, emitter = new EventEmitter(), models) {
121
150
  readyLoggers(loggers);
122
- /* if (disableDEMDebugMessages) {
151
+ if (!doDebug) {
123
152
  loggers.debug = (_) => { };
124
- } */
153
+ }
125
154
  socket.use((socket, next) => {
126
155
  socket.onAny((event) => {
127
156
  loggers.debug?.("Recieved event: " + event + " from client: " + socket.id);
@@ -139,8 +168,9 @@ export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMe
139
168
  }
140
169
  catch (error) {
141
170
  loggers.error?.("Error creating manager: " + key);
142
- loggers.error?.(error.message);
143
- loggers.error?.(error.stack);
171
+ loggers.error?.(error instanceof Error ? error.message : String(error));
172
+ if (error instanceof Error && error.stack)
173
+ loggers.error?.(error.stack);
144
174
  continue;
145
175
  }
146
176
  loggers.debug?.("Loading DB for manager: " + key);
@@ -149,8 +179,9 @@ export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMe
149
179
  }
150
180
  catch (error) {
151
181
  loggers.error?.("Error loading DB for manager: " + key);
152
- loggers.error?.(error.message);
153
- loggers.error?.(error.stack);
182
+ loggers.error?.(error instanceof Error ? error.message : String(error));
183
+ if (error instanceof Error && error.stack)
184
+ loggers.error?.(error.stack);
154
185
  }
155
186
  }
156
187
  for (const manager of Object.values(managers)) {
@@ -161,8 +192,9 @@ export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMe
161
192
  loggers.error?.("Error loading DB for manager: " +
162
193
  manager.className +
163
194
  " (loadReferences)");
164
- loggers.error?.(error.message);
165
- loggers.error?.(error.stack);
195
+ loggers.error?.(error instanceof Error ? error.message : String(error));
196
+ if (error instanceof Error && error.stack)
197
+ loggers.error?.(error.stack);
166
198
  }
167
199
  }
168
200
  socket.on("connection", async (socket) => {
@@ -179,8 +211,9 @@ export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMe
179
211
  }
180
212
  catch (error) {
181
213
  loggers.error?.("Error setting up socket middleware");
182
- loggers.error?.(error.message);
183
- loggers.error?.(error.stack);
214
+ loggers.error?.(error instanceof Error ? error.message : String(error));
215
+ if (error instanceof Error && error.stack)
216
+ loggers.error?.(error.stack);
184
217
  }
185
218
  return managers;
186
219
  }
@@ -202,7 +235,7 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
202
235
  for (const doc of docs) {
203
236
  const id = doc._id?.toString();
204
237
  if (!id) {
205
- this.loggers.debug("Invalid document, no _id: " + JSON.stringify(doc));
238
+ this.loggers.debug("Invalid document, no _id: " + (doc?._id ?? "[no id]"));
206
239
  continue;
207
240
  }
208
241
  this.objects_[id] =
@@ -239,11 +272,12 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
239
272
  this.loggers.error("Error sending startup data for manager " +
240
273
  this.className +
241
274
  ": " +
242
- error.message);
243
- this.loggers.error(error.stack);
275
+ (error instanceof Error ? error.message : String(error)));
276
+ if (error instanceof Error && error.stack)
277
+ this.loggers.error(error.stack);
244
278
  ack({
245
279
  success: false,
246
- message: error.message,
280
+ message: error instanceof Error ? error.message : String(error),
247
281
  });
248
282
  }
249
283
  });
@@ -263,9 +297,13 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
263
297
  " - " +
264
298
  id +
265
299
  ": " +
266
- error.message);
267
- this.loggers.error(error.stack);
268
- ack({ success: false, message: error.message });
300
+ (error instanceof Error ? error.message : String(error)));
301
+ if (error instanceof Error && error.stack)
302
+ this.loggers.error(error.stack);
303
+ ack({
304
+ success: false,
305
+ message: error instanceof Error ? error.message : String(error),
306
+ });
269
307
  }
270
308
  });
271
309
  socket.on(EVENT_NEW + this.className, async (data, ack) => {
@@ -282,9 +320,13 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
282
320
  this.loggers.error("Error creating new object creation in manager " +
283
321
  this.className +
284
322
  " - " +
285
- error.message);
286
- this.loggers.error(error.stack);
287
- ack({ success: false, message: error.message });
323
+ (error instanceof Error ? error.message : String(error)));
324
+ if (error instanceof Error && error.stack)
325
+ this.loggers.error(error.stack);
326
+ ack({
327
+ success: false,
328
+ message: error instanceof Error ? error.message : String(error),
329
+ });
288
330
  }
289
331
  });
290
332
  socket.on(EVENT_UPDATE + this.className, async () => { });
@@ -297,7 +339,7 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
297
339
  ": " +
298
340
  event +
299
341
  " - " +
300
- JSON.stringify(data));
342
+ (typeof data === "object" ? "[object]" : String(data)));
301
343
  try {
302
344
  const id = event.replace(EVENT_UPDATE + this.className, "");
303
345
  let obj = this.objects_[id];
@@ -314,7 +356,10 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
314
356
  }
315
357
  catch (error) {
316
358
  this.loggers.warn("Failed to update object in manager " + this.className);
317
- ack({ success: false, message: error.message });
359
+ ack({
360
+ success: false,
361
+ message: error instanceof Error ? error.message : String(error),
362
+ });
318
363
  }
319
364
  }
320
365
  else if (event.startsWith(EVENT_GET + this.className) &&
@@ -322,6 +367,8 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
322
367
  try {
323
368
  const id = event.replace(EVENT_GET + this.className, "");
324
369
  let obj = this.objects_[id];
370
+ if (!obj)
371
+ throw new Error(`Object not found: ${id}`);
325
372
  ack({
326
373
  data: obj.extractedData,
327
374
  success: true,
@@ -332,9 +379,13 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
332
379
  this.loggers.error("Error sending startup data for manager " +
333
380
  this.className +
334
381
  ": " +
335
- error.message);
336
- this.loggers.error(error.stack);
337
- ack({ success: false, message: error.message });
382
+ (error instanceof Error ? error.message : String(error)));
383
+ if (error instanceof Error && error.stack)
384
+ this.loggers.error(error.stack);
385
+ ack({
386
+ success: false,
387
+ message: error instanceof Error ? error.message : String(error),
388
+ });
338
389
  }
339
390
  }
340
391
  });
@@ -345,7 +396,7 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
345
396
  getObject(_id) {
346
397
  if (!_id)
347
398
  return null;
348
- return this.objects_[_id] || undefined;
399
+ return this.objects_[_id.toString()] || undefined;
349
400
  }
350
401
  get objects() {
351
402
  return this.objects_;
@@ -354,17 +405,21 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
354
405
  return Object.values(this.objects_);
355
406
  }
356
407
  async handleGetMissingObject(_id) {
357
- if (this.getObject(_id))
358
- return this.getObject(_id);
359
- const document = await this.model.findById(_id);
408
+ const _idStr = _id.toString();
409
+ if (this.getObject(_idStr))
410
+ return this.getObject(_idStr);
411
+ const document = await this.model.findById(_idStr);
360
412
  if (!document)
361
- throw new Error(`No document with id ${_id} in DB.`);
413
+ throw new Error(`No document with id ${_idStr} in DB.`);
362
414
  if (!this.managers)
363
415
  throw new Error(`No managers.`);
364
416
  const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, document, this.loggers, this, this.emitter);
365
417
  await object.waitForPreloaded();
366
- this.objects_[object._id] = object;
367
- globalCache.objects[object._id] = { className: this.className, object: object };
418
+ this.objects_[object._id.toString()] = object;
419
+ globalCache.objects[object._id.toString()] = {
420
+ className: this.className,
421
+ object: object,
422
+ };
368
423
  await object.isPreLoadedAsync();
369
424
  await object.loadMissingReferences();
370
425
  await object.contactChildren();
@@ -374,27 +429,38 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
374
429
  if (!this.managers)
375
430
  throw new Error(`No managers.`);
376
431
  this.loggers.debug("Creating new object from manager " + this.className);
377
- delete data._id;
378
- const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, data, this.loggers, this, this.emitter);
432
+ const dataRec = { ...data };
433
+ if (dataRec._id === "" || dataRec._id === null)
434
+ delete dataRec._id;
435
+ const doc = await this.model.create(dataRec);
436
+ const id = doc._id.toString();
437
+ const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, id, this.loggers, this, this.emitter, doc);
379
438
  await object.waitForPreloaded();
380
- this.objects_[object._id] = object;
381
- globalCache.objects[object._id] = { className: this.className, object: object };
439
+ this.objects_[id] = object;
440
+ globalCache.objects[id] = {
441
+ className: this.className,
442
+ object: object,
443
+ };
382
444
  await object.isPreLoadedAsync();
383
445
  await object.loadMissingReferences();
384
446
  await object.onUpdate();
385
447
  await object.contactChildren();
386
448
  for (const socket of this.clientSockets) {
387
449
  try {
388
- const theTruth = (await this.options?.accessDefinitions?.startupMiddleware?.([object], this.managers, socket)) ?? ["gay"];
450
+ const theTruth = this.options?.accessDefinitions?.startupMiddleware
451
+ ? await this.options.accessDefinitions.startupMiddleware([object], this.managers, socket)
452
+ : [object];
389
453
  if (theTruth.length > 0) {
390
454
  this.loggers.debug("Emitting new object " + object._id);
391
- socket.emit("new" + this.className, object._id);
455
+ socket.emit("new" + this.className, object._id.toString());
392
456
  }
393
457
  }
394
458
  catch (error) {
395
- this.loggers.error("Error when emitting new object to client: " + error.name);
396
- this.loggers.error(error.message);
397
- this.loggers.error(error.stack);
459
+ this.loggers.error("Error when emitting new object to client: " +
460
+ (error instanceof Error ? error.name : "Error"));
461
+ this.loggers.error(error instanceof Error ? error.message : String(error));
462
+ if (error instanceof Error && error.stack)
463
+ this.loggers.error(error.stack);
398
464
  }
399
465
  }
400
466
  return object;