@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.
- package/dist/AutoUpdateManagerClass.d.ts +11 -12
- package/dist/AutoUpdateManagerClass.js +13 -8
- package/dist/AutoUpdateManagerClass.js.map +1 -1
- package/dist/AutoUpdateServerManagerClass.d.ts +28 -36
- package/dist/AutoUpdateServerManagerClass.js +139 -73
- package/dist/AutoUpdateServerManagerClass.js.map +1 -1
- package/dist/AutoUpdatedClientObjectClass.d.ts +31 -33
- package/dist/AutoUpdatedClientObjectClass.js +86 -45
- package/dist/AutoUpdatedClientObjectClass.js.map +1 -1
- package/dist/AutoUpdatedServerObjectClass.d.ts +11 -17
- package/dist/AutoUpdatedServerObjectClass.js +101 -98
- package/dist/AutoUpdatedServerObjectClass.js.map +1 -1
- package/dist/CommonTypes.d.ts +77 -32
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CommonTypes_server.d.ts +3 -3
- package/dist/server.d.ts +5 -6
- package/dist/server.js +5 -6
- package/dist/server.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,35 +1,34 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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:
|
|
8
|
+
readonly socket: unknown;
|
|
10
9
|
protected classParam: Constructor<T>;
|
|
11
|
-
protected properties:
|
|
10
|
+
protected properties: string[];
|
|
12
11
|
readonly className: string;
|
|
13
|
-
readonly cache:
|
|
14
|
-
readonly managers:
|
|
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:
|
|
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:
|
|
24
|
+
deleteObject(_id: MongoId): Promise<{
|
|
26
25
|
success: boolean;
|
|
27
26
|
message: string;
|
|
28
27
|
}>;
|
|
29
28
|
get objectIDs(): string[];
|
|
30
|
-
abstract handleGetMissingObject(_id:
|
|
31
|
-
abstract createObject(data: Omit<
|
|
32
|
-
abstract getObject(_id?:
|
|
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=" +
|
|
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?.() ??
|
|
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
|
|
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_[
|
|
57
|
-
delete globalCache.objects[
|
|
61
|
+
delete this.objects_[_idStr];
|
|
62
|
+
delete globalCache.objects[_idStr];
|
|
58
63
|
}
|
|
59
|
-
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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,
|
|
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,
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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:
|
|
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
|
|
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,
|
|
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
|
|
36
|
+
export type DEMEvent<C extends IAutoUpdatedClientObject<any>> = {
|
|
43
37
|
type: DEMEventTypes.delete | DEMEventTypes.get;
|
|
44
|
-
manager:
|
|
38
|
+
manager: IAutoUpdateManager<C>;
|
|
45
39
|
object: C;
|
|
46
40
|
data: never;
|
|
47
41
|
} | {
|
|
48
42
|
type: DEMEventTypes.update;
|
|
49
|
-
manager:
|
|
43
|
+
manager: IAutoUpdateManager<C>;
|
|
50
44
|
object: C;
|
|
51
45
|
data: {
|
|
52
46
|
_id: string;
|
|
53
|
-
key:
|
|
54
|
-
value:
|
|
47
|
+
key: string;
|
|
48
|
+
value: unknown;
|
|
55
49
|
};
|
|
56
50
|
} | {
|
|
57
51
|
type: DEMEventTypes.startup;
|
|
58
|
-
manager:
|
|
52
|
+
manager: IAutoUpdateManager<C>;
|
|
59
53
|
object: never;
|
|
60
54
|
data: never;
|
|
61
55
|
} | {
|
|
62
56
|
type: DEMEventTypes.new;
|
|
63
|
-
manager:
|
|
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,
|
|
68
|
-
|
|
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:
|
|
78
|
-
constructor(classParam: Constructor<T>, className: string, socket: Server, loggers: LoggersType, model: ReturnModelType<
|
|
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
|
|
73
|
+
getObject(_id?: MongoId): T | null | undefined;
|
|
82
74
|
get objects(): Record<string, T>;
|
|
83
75
|
get objectsAsArray(): T[];
|
|
84
|
-
handleGetMissingObject(_id:
|
|
85
|
-
createObject(data: Omit<IsData<
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
|
75
|
-
|
|
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,
|
|
149
|
+
export async function AUSManagerFactory(defs, loggers, socket, doDebug = true, emitter = new EventEmitter(), models) {
|
|
121
150
|
readyLoggers(loggers);
|
|
122
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: " +
|
|
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
|
-
|
|
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
|
-
|
|
268
|
-
|
|
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
|
-
|
|
287
|
-
|
|
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
|
-
|
|
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({
|
|
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
|
-
|
|
337
|
-
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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 ${
|
|
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] = {
|
|
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
|
-
|
|
378
|
-
|
|
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_[
|
|
381
|
-
globalCache.objects[
|
|
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 =
|
|
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: " +
|
|
396
|
-
|
|
397
|
-
this.loggers.error(error.
|
|
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;
|