@futdevpro/nts-dynamo 1.9.40 → 1.9.41
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/build/_collections/archive.util.d.ts +1 -1
- package/build/_collections/archive.util.d.ts.map +1 -1
- package/build/_collections/archive.util.js +1 -1
- package/build/_collections/archive.util.js.map +1 -1
- package/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +1 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts +13 -8
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +52 -19
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/interfaces/global-settings.interface.d.ts +4 -0
- package/build/_models/interfaces/global-settings.interface.d.ts.map +1 -1
- package/build/_modules/socket/_services/app-extended.server.d.ts +3 -3
- package/build/_modules/socket/_services/app-extended.server.d.ts.map +1 -1
- package/build/_modules/socket/_services/app-extended.server.js +33 -21
- package/build/_modules/socket/_services/app-extended.server.js.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js +3 -3
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_services/base/data.service.js +1 -1
- package/build/_services/base/data.service.js.map +1 -1
- package/build/_services/base/singleton.service-base.d.ts +1 -1
- package/build/_services/base/singleton.service-base.d.ts.map +1 -1
- package/build/_services/base/singleton.service-base.js +1 -0
- package/build/_services/base/singleton.service-base.js.map +1 -1
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +35 -23
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/route/routing-module.service.d.ts +1 -1
- package/build/_services/route/routing-module.service.d.ts.map +1 -1
- package/build/_services/route/routing-module.service.js +19 -2
- package/build/_services/route/routing-module.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts +2 -2
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +12 -6
- package/build/_services/server/app.server.js.map +1 -1
- package/package.json +3 -3
- package/src/_collections/archive.util.ts +1 -1
- package/src/_collections/global-settings.const.ts +1 -0
- package/src/_models/control-models/endpoint-params.control-model.ts +79 -31
- package/src/_models/interfaces/global-settings.interface.ts +5 -0
- package/src/_modules/socket/_services/app-extended.server.ts +10 -8
- package/src/_modules/socket/_services/socket-server.service.ts +3 -3
- package/src/_services/base/data.service.ts +1 -1
- package/src/_services/base/singleton.service-base.ts +2 -1
- package/src/_services/core/global.service.ts +52 -34
- package/src/_services/route/routing-module.service.ts +23 -4
- package/src/_services/server/app.server.ts +18 -9
|
@@ -23,16 +23,17 @@ export class DyNTS_Endpoint_Params {
|
|
|
23
23
|
/* TODO: ENCRYPTION !!EZTET
|
|
24
24
|
useEncryptionKey?: string; */
|
|
25
25
|
|
|
26
|
-
private pathParams: string[];
|
|
26
|
+
private readonly pathParams: string[];
|
|
27
27
|
|
|
28
|
-
private preProcesses: ((req: Request, res: Response) => Promise<void>)[];
|
|
29
|
-
private tasks: ((req: Request, res: Response, issuer?: string) => Promise<void>)[];
|
|
28
|
+
private readonly preProcesses: ((req: Request, res: Response) => Promise<void>)[];
|
|
29
|
+
private readonly tasks: ((req: Request, res: Response, issuer?: string) => Promise<void>)[];
|
|
30
30
|
|
|
31
|
-
private logRequest: boolean;
|
|
32
|
-
private logRequestsParams: boolean;
|
|
33
|
-
private logRequestsContent: boolean;
|
|
34
|
-
private logResponseContent: boolean;
|
|
35
|
-
private stack: string;
|
|
31
|
+
private readonly logRequest: boolean;
|
|
32
|
+
private readonly logRequestsParams: boolean;
|
|
33
|
+
private readonly logRequestsContent: boolean;
|
|
34
|
+
private readonly logResponseContent: boolean;
|
|
35
|
+
private readonly stack: string;
|
|
36
|
+
private readonly autoResolveCirculation: boolean;
|
|
36
37
|
|
|
37
38
|
constructor(
|
|
38
39
|
set: {
|
|
@@ -85,6 +86,10 @@ export class DyNTS_Endpoint_Params {
|
|
|
85
86
|
* log settings for response content
|
|
86
87
|
*/
|
|
87
88
|
logResponseContent?: boolean,
|
|
89
|
+
/**
|
|
90
|
+
* auto resolve circulation errors
|
|
91
|
+
*/
|
|
92
|
+
autoResolveCirculation?: boolean,
|
|
88
93
|
}
|
|
89
94
|
) {
|
|
90
95
|
try {
|
|
@@ -101,6 +106,8 @@ export class DyNTS_Endpoint_Params {
|
|
|
101
106
|
set.logRequestsContent ?? DyNTS_global_settings.log_settings.requestsContent;
|
|
102
107
|
this.logResponseContent =
|
|
103
108
|
set.logResponseContent ?? DyNTS_global_settings.log_settings.responseContent;
|
|
109
|
+
this.autoResolveCirculation =
|
|
110
|
+
set.autoResolveCirculation ?? DyNTS_global_settings.autoResolveEndpointCirculationErrors;
|
|
104
111
|
|
|
105
112
|
if (!this.endpoint) {
|
|
106
113
|
throw new DyFM_Error({
|
|
@@ -233,7 +240,8 @@ export class DyNTS_Endpoint_Params {
|
|
|
233
240
|
req: Request,
|
|
234
241
|
res: Response,
|
|
235
242
|
error: Error | DyFM_Error,
|
|
236
|
-
issuer: string
|
|
243
|
+
issuer: string,
|
|
244
|
+
autoSecondTry?: boolean
|
|
237
245
|
): Promise<void> {
|
|
238
246
|
try {
|
|
239
247
|
let msg: string = `Endpoint caught an error. '${this.name}' (${this.endpoint})`;
|
|
@@ -284,10 +292,27 @@ export class DyNTS_Endpoint_Params {
|
|
|
284
292
|
|
|
285
293
|
try {
|
|
286
294
|
JSON.stringify(error);
|
|
287
|
-
} catch (
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
295
|
+
} catch (stringifyError) {
|
|
296
|
+
if (this.autoResolveCirculation) {
|
|
297
|
+
try {
|
|
298
|
+
error = DyFM_Shared.resolveCirculation(error);
|
|
299
|
+
JSON.stringify(error);
|
|
300
|
+
} catch (resolveError) {
|
|
301
|
+
DyFM_Log.H_error(
|
|
302
|
+
'DyNTS_Endpoint_Params: error object is not serializable, and not resolvable!'
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
error = new DyFM_Error({
|
|
306
|
+
error: new Error('UNRESOLVABLE UNSERIALIZABLE ERROR'),
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
} else {
|
|
310
|
+
DyFM_Log.H_error('DyNTS_Endpoint_Params: error object is not serializable!');
|
|
311
|
+
|
|
312
|
+
error = new DyFM_Error({
|
|
313
|
+
error: new Error('UNSERIALIZABLE ERROR'),
|
|
314
|
+
});
|
|
315
|
+
}
|
|
291
316
|
}
|
|
292
317
|
|
|
293
318
|
res.status((error as DyFM_Error)?.___status ?? 501);
|
|
@@ -310,21 +335,28 @@ export class DyNTS_Endpoint_Params {
|
|
|
310
335
|
|
|
311
336
|
DyFM_Log.error('');
|
|
312
337
|
|
|
313
|
-
} catch (
|
|
338
|
+
} catch (errorLvl2) {
|
|
314
339
|
this.multiLevelError(
|
|
315
|
-
|
|
316
|
-
{
|
|
340
|
+
errorLvl2,
|
|
341
|
+
{
|
|
342
|
+
req: req,
|
|
343
|
+
res: res,
|
|
344
|
+
error: error,
|
|
345
|
+
issuer: issuer,
|
|
346
|
+
autoSecondTry: autoSecondTry,
|
|
347
|
+
}
|
|
317
348
|
);
|
|
318
349
|
}
|
|
319
350
|
}
|
|
320
351
|
|
|
321
352
|
private multiLevelError(
|
|
322
|
-
|
|
353
|
+
errorLvl2: any,
|
|
323
354
|
errorInputs: {
|
|
324
355
|
req: Request,
|
|
325
356
|
res: Response,
|
|
326
357
|
error: Error | DyFM_Error,
|
|
327
|
-
issuer: string
|
|
358
|
+
issuer: string,
|
|
359
|
+
autoSecondTry: boolean
|
|
328
360
|
}
|
|
329
361
|
): void {
|
|
330
362
|
if (DyNTS_global_settings.log_settings.highDetailedLogs) {
|
|
@@ -333,7 +365,7 @@ export class DyNTS_Endpoint_Params {
|
|
|
333
365
|
`(${this.name}, ${this.endpoint})` +
|
|
334
366
|
`\n(DYNAMO MULTILEVEL ERROR means, that the ERROR HANDLING is ALSO FAILED, ` +
|
|
335
367
|
`and the error message was not sent.)` +
|
|
336
|
-
`\nERROR:`,
|
|
368
|
+
`\nERROR:`, errorLvl2,
|
|
337
369
|
'\n'
|
|
338
370
|
);
|
|
339
371
|
} else {
|
|
@@ -347,32 +379,48 @@ export class DyNTS_Endpoint_Params {
|
|
|
347
379
|
|
|
348
380
|
try {
|
|
349
381
|
JSON.stringify(errorInputs.error);
|
|
350
|
-
} catch (
|
|
351
|
-
DyFM_Log.error('
|
|
352
|
-
let
|
|
382
|
+
} catch (errorLvl2Replication) {
|
|
383
|
+
DyFM_Log.error(' ...response object is not serializable!');
|
|
384
|
+
let resolvedError: any;
|
|
353
385
|
|
|
354
386
|
try {
|
|
355
|
-
DyFM_Shared.resolveCirculation(errorInputs.error);
|
|
356
|
-
} catch (
|
|
357
|
-
|
|
358
|
-
DyFM_Log.error('
|
|
387
|
+
resolvedError = DyFM_Shared.resolveCirculation(errorInputs.error);
|
|
388
|
+
} catch (errorLvl3) {
|
|
389
|
+
DyFM_Log.error(' ...response object is not resolvable!');
|
|
390
|
+
DyFM_Log.error(' ...', errorLvl3);
|
|
359
391
|
}
|
|
360
392
|
|
|
361
|
-
if (
|
|
362
|
-
|
|
393
|
+
if (resolvedError) {
|
|
394
|
+
if (this.autoResolveCirculation && !errorInputs.autoSecondTry) {
|
|
395
|
+
this.error(
|
|
396
|
+
errorInputs.req,
|
|
397
|
+
errorInputs.res,
|
|
398
|
+
resolvedError,
|
|
399
|
+
errorInputs.issuer,
|
|
400
|
+
true
|
|
401
|
+
);
|
|
402
|
+
|
|
403
|
+
DyFM_Log.warn(' ...automatic circulation error resolution was successful!');
|
|
404
|
+
|
|
405
|
+
return;
|
|
406
|
+
} else {
|
|
407
|
+
DyFM_Log.error(
|
|
408
|
+
' ...response object is resolvable! (use DyFM_Shared.resolveCirculation)'
|
|
409
|
+
);
|
|
410
|
+
}
|
|
363
411
|
}
|
|
364
412
|
}
|
|
365
413
|
|
|
366
414
|
if (
|
|
367
415
|
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
368
|
-
!(
|
|
416
|
+
!(errorLvl2 instanceof DyFM_Error)
|
|
369
417
|
) {
|
|
370
418
|
DyFM_Log.H_error(
|
|
371
419
|
`Endpoint "${this.endpoint}" caught an error and FAILED TO RESOLVE. (${this.name})`,
|
|
372
|
-
'\n ERROR:',
|
|
420
|
+
'\n ERROR:', errorLvl2
|
|
373
421
|
);
|
|
374
422
|
} else {
|
|
375
|
-
|
|
423
|
+
errorLvl2.logSimple(
|
|
376
424
|
`Endpoint "${this.endpoint}" caught an error and FAILED TO RESOLVE. (${this.name})`
|
|
377
425
|
);
|
|
378
426
|
}
|
|
@@ -119,7 +119,7 @@ import { DyNTS_global_settings } from '../../../_collections/global-settings.con
|
|
|
119
119
|
*/
|
|
120
120
|
export abstract class DyNTS_AppExtended extends DyNTS_App {
|
|
121
121
|
|
|
122
|
-
private systemControlsExt: DyNTS_AppExtSysControls = new DyNTS_AppExtSysControls();
|
|
122
|
+
private readonly systemControlsExt: DyNTS_AppExtSysControls = new DyNTS_AppExtSysControls();
|
|
123
123
|
override get started(): boolean { return this.systemControlsExt.appExtended.started; }
|
|
124
124
|
private httpsSocketSettingUpCount: number = 0;
|
|
125
125
|
private httpSocketSettingUpCount: number = 0;
|
|
@@ -138,12 +138,12 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
|
|
|
138
138
|
* ];
|
|
139
139
|
*/
|
|
140
140
|
protected socketServices: DyNTS_SocketServerService<any>[];
|
|
141
|
-
private allSocketServers: SocketIO.Server[] = [];
|
|
141
|
+
private readonly allSocketServers: SocketIO.Server[] = [];
|
|
142
142
|
|
|
143
143
|
constructor(){
|
|
144
|
-
super(true);
|
|
144
|
+
super(/* true */);
|
|
145
145
|
|
|
146
|
-
this.asyncConstructExt().catch((error: DyFM_AnyError): void => {
|
|
146
|
+
/* this.asyncConstructExt().catch((error: DyFM_AnyError): void => {
|
|
147
147
|
if (
|
|
148
148
|
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
149
149
|
!(error instanceof DyFM_Error)
|
|
@@ -159,13 +159,15 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
|
|
|
159
159
|
`(DyNTS_AppExtended constructor catch)`
|
|
160
160
|
);
|
|
161
161
|
}
|
|
162
|
-
});
|
|
162
|
+
}); */
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
protected override async asyncConstruct(extended = true): Promise<void> {
|
|
166
166
|
if (this.fnLogs && this.deepLog) console.log('\nfn:. asyncConstruct-extended');
|
|
167
167
|
|
|
168
168
|
try {
|
|
169
|
+
await super.asyncConstruct(true);
|
|
170
|
+
|
|
169
171
|
this.systemControlsExt.appExtended.init = true;
|
|
170
172
|
|
|
171
173
|
this.socketServices = this.getSocketServices();
|
|
@@ -194,7 +196,7 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
|
|
|
194
196
|
DyFM_Log.H_success(`"${this.params.name}" started successfully.`);
|
|
195
197
|
|
|
196
198
|
} catch (error) {
|
|
197
|
-
if (
|
|
199
|
+
/* if (
|
|
198
200
|
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
199
201
|
!(error instanceof DyFM_Error)
|
|
200
202
|
) {
|
|
@@ -206,7 +208,7 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
|
|
|
206
208
|
error.logSimple(
|
|
207
209
|
`Extended Application: "${this.params?.name}" start failed. (asyncConstructExt catch)`
|
|
208
210
|
);
|
|
209
|
-
}
|
|
211
|
+
} */
|
|
210
212
|
|
|
211
213
|
throw new DyFM_Error({
|
|
212
214
|
errorCode: 'NTS-AES-001',
|
|
@@ -678,13 +678,13 @@ export abstract class DyNTS_SocketServerService<
|
|
|
678
678
|
if (DyNTS_global_settings.log_settings.socket_eventContent) {
|
|
679
679
|
DyFM_Log.success(
|
|
680
680
|
` <--= emitted socket(${this.params.name}) event: "${event}", ` +
|
|
681
|
-
`\n
|
|
682
|
-
`\n
|
|
681
|
+
`\n presenceId: "${id}", sockets: ${presence.sockets.length}` +
|
|
682
|
+
`\n content:`, content
|
|
683
683
|
);
|
|
684
684
|
} else {
|
|
685
685
|
DyFM_Log.success(
|
|
686
686
|
` <--= emitted socket(${this.params.name}) event: "${event}", ` +
|
|
687
|
-
`\n
|
|
687
|
+
`\n presenceId: ${id}, sockets: ${presence.sockets.length}`
|
|
688
688
|
);
|
|
689
689
|
}
|
|
690
690
|
} catch (error) {
|
|
@@ -84,7 +84,7 @@ export class DyNTS_DataService<T extends DyFM_Metadata> {
|
|
|
84
84
|
message:
|
|
85
85
|
`The dataService construction failed for "${dataParams?.dataName}". ` +
|
|
86
86
|
`at "${this.serviceName}" (${this.constructor.name})` +
|
|
87
|
-
`\nMaybe you forgot to add the dbService to the GlobalService
|
|
87
|
+
`\nMaybe you forgot to add the dbService to the GlobalService?`,
|
|
88
88
|
level: DyFM_ErrorLevel.critical,
|
|
89
89
|
});
|
|
90
90
|
/* DyFM_Log.error(
|
|
@@ -10,7 +10,8 @@ export class DyNTS_SingletonServiceBase {
|
|
|
10
10
|
/// --- --- --- SINGLETON --- --- --- \\\
|
|
11
11
|
protected static instance;
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
14
|
+
protected static getSingletonInstance() {
|
|
14
15
|
if (!this.instance) {
|
|
15
16
|
this.instance = new this();
|
|
16
17
|
}
|
|
@@ -88,6 +88,22 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
88
88
|
this.instance.dbServiceCollection = {};
|
|
89
89
|
|
|
90
90
|
dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
|
|
91
|
+
if (!dbModel) {
|
|
92
|
+
throw new DyFM_Error({
|
|
93
|
+
...this.getDefaultErrorSettings(
|
|
94
|
+
'setDBServices',
|
|
95
|
+
new Error(`given dbModel is empty!`),
|
|
96
|
+
'DyNTS_GlobalService'
|
|
97
|
+
),
|
|
98
|
+
|
|
99
|
+
errorCode: 'NTS-GS0-SDBS2',
|
|
100
|
+
additionalContent: {
|
|
101
|
+
dbModels: dbModels,
|
|
102
|
+
dbModelNames: dbModels.map((dbModel: DyFM_DataModel_Params) => dbModel.dataName),
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
91
107
|
if (dbModel.addArchive) {
|
|
92
108
|
const archiveModel: DyFM_DataModel_Params = new DyFM_DataModel_Params({
|
|
93
109
|
...dbModel,
|
|
@@ -178,35 +194,39 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
178
194
|
|
|
179
195
|
private static async setErrorHandler(errorHandler?: DyNTS_GlobalErrorHandlerFn): Promise<void> {
|
|
180
196
|
try {
|
|
181
|
-
DyNTS_GlobalService.globalErrorHandler =
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
197
|
+
DyNTS_GlobalService.globalErrorHandler = (async (error: any): Promise<void> => {
|
|
198
|
+
try {
|
|
199
|
+
if (errorHandler) {
|
|
200
|
+
await errorHandler(error);
|
|
201
|
+
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
DyFM_Log.warn(
|
|
206
|
+
`globalErrorHandler not set! (set in app.getGlobalServiceCollection)`,
|
|
207
|
+
'\nwill use default-logging',
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
if (
|
|
211
|
+
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
212
|
+
!(error instanceof DyFM_Error)
|
|
213
|
+
) {
|
|
214
|
+
DyFM_Log.H_error(
|
|
215
|
+
`Error caught by globalErrorHandler.`,
|
|
216
|
+
`\n ERROR:`, error?.replaceAll?.('at', ' at') ?? error
|
|
188
217
|
);
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
!(error instanceof DyFM_Error)
|
|
193
|
-
) {
|
|
194
|
-
DyFM_Log.H_error(
|
|
195
|
-
`Error caught by globalErrorHandler.`,
|
|
196
|
-
`\n ERROR:`, error?.replaceAll?.('at', ' at') ?? error
|
|
197
|
-
);
|
|
198
|
-
} else /* if (!error.___logged) */ {
|
|
199
|
-
error.logSimple(
|
|
200
|
-
`Error caught by globalErrorHandler.`
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
} catch (error) {
|
|
204
|
-
DyFM_Log.error(
|
|
205
|
-
`NTS GLOBAL MULTILEVEL ERROR: \nFailed to handle error on globalErrorHandler.`,
|
|
206
|
-
error
|
|
218
|
+
} else /* if (!error.___logged) */ {
|
|
219
|
+
error.logSimple(
|
|
220
|
+
`Error caught by globalErrorHandler.`
|
|
207
221
|
);
|
|
208
222
|
}
|
|
209
|
-
})
|
|
223
|
+
} catch (error) {
|
|
224
|
+
DyFM_Log.error(
|
|
225
|
+
`NTS GLOBAL MULTILEVEL ERROR: \nFailed to handle error on globalErrorHandler.`,
|
|
226
|
+
error
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
210
230
|
} catch (error) {
|
|
211
231
|
throw new DyFM_Error({
|
|
212
232
|
...this.getDefaultErrorSettings('setErrorHandler', error, 'DyNTS_GlobalService'),
|
|
@@ -275,15 +295,11 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
275
295
|
if (collection[key]) {
|
|
276
296
|
return collection[key] as DyNTS_DBService<T>;
|
|
277
297
|
} else {
|
|
278
|
-
let keys: string = `${Object.keys(collection)}`;
|
|
279
|
-
|
|
280
|
-
keys = keys.replace(/,/g, '\n ');
|
|
281
|
-
|
|
282
298
|
throw new Error(
|
|
283
299
|
`\n DyNTS_GlobalService.getDBService failed, ERROR: ` +
|
|
284
|
-
`\n no dbService on collection with this key: ${key}!` +
|
|
300
|
+
`\n no dbService on collection with this key: "${key}"!` +
|
|
285
301
|
`\n The available dbServices on collection:` +
|
|
286
|
-
`\n ${keys}\n`
|
|
302
|
+
`\n ${Object.keys(collection).join(', ')}\n`
|
|
287
303
|
);
|
|
288
304
|
}
|
|
289
305
|
}
|
|
@@ -293,12 +309,14 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
293
309
|
* @returns
|
|
294
310
|
*/
|
|
295
311
|
static getEmailServiceCollection(): DyNTS_Service_Collection<DyNTS_EmailService> {
|
|
296
|
-
if (!this.instance
|
|
312
|
+
if (!this.instance.emailServiceCollection) {
|
|
297
313
|
throw new Error(
|
|
298
314
|
`\n Unique Email Service Collection missing!` +
|
|
299
315
|
`\n Please create a Unique Email Service Collection extending ` +
|
|
300
316
|
`DynamoBEEmailServiceCollection, ` +
|
|
301
|
-
`\n and Setup with DyNTS_GlobalServiceC.setServices(...)\n`
|
|
317
|
+
`\n and Setup with DyNTS_GlobalServiceC.setServices(...)\n` +
|
|
318
|
+
`\n available emailServiceCollection: ` +
|
|
319
|
+
`${Object().keys(this.instance.emailServiceCollection).join(', ')}\n`
|
|
302
320
|
);
|
|
303
321
|
}
|
|
304
322
|
|
|
@@ -65,7 +65,7 @@ export class DyNTS_RoutingModule {
|
|
|
65
65
|
security: DyNTS_RouteSecurity;
|
|
66
66
|
route: string;
|
|
67
67
|
|
|
68
|
-
private controllers: DyNTS_Controller[];
|
|
68
|
+
private readonly controllers: DyNTS_Controller[];
|
|
69
69
|
endpoints: DyNTS_Endpoint_Params[] = [];
|
|
70
70
|
|
|
71
71
|
openRouter: Router = Router();
|
|
@@ -93,13 +93,29 @@ export class DyNTS_RoutingModule {
|
|
|
93
93
|
`routing module setup done: ${this.route} security: ${this.security}\n`
|
|
94
94
|
);
|
|
95
95
|
} catch (error) {
|
|
96
|
+
/* if (
|
|
97
|
+
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
98
|
+
!(error instanceof DyFM_Error)
|
|
99
|
+
) {
|
|
100
|
+
DyFM_Log.H_error(
|
|
101
|
+
`Routing module setup failed (${this.route}).`,
|
|
102
|
+
`\n ERROR:`, error
|
|
103
|
+
);
|
|
104
|
+
} else {
|
|
105
|
+
error.logSimple(
|
|
106
|
+
`Routing module setup failed (${this.route}).` +
|
|
107
|
+
'\nmessages:\n' + error._messages.join(' \n')
|
|
108
|
+
);
|
|
109
|
+
} */
|
|
110
|
+
|
|
96
111
|
/* DyFM_Log.error(`\nRouting module setup failed (${this.route})`, error); */
|
|
97
112
|
throw new DyFM_Error({
|
|
98
113
|
...this.getDefaultErrorSettings(
|
|
99
|
-
'constructor',
|
|
100
|
-
|
|
114
|
+
'DyNTS_RoutingModule.constructor',
|
|
115
|
+
error
|
|
101
116
|
),
|
|
102
117
|
|
|
118
|
+
message: `Routing module setup failed (${this.route}).`,
|
|
103
119
|
errorCode: 'NTS-RMS-000',
|
|
104
120
|
additionalContent: set,
|
|
105
121
|
});
|
|
@@ -117,9 +133,12 @@ export class DyNTS_RoutingModule {
|
|
|
117
133
|
throw new DyFM_Error({
|
|
118
134
|
...this.getDefaultErrorSettings(
|
|
119
135
|
'setupRoutes',
|
|
120
|
-
|
|
136
|
+
error
|
|
121
137
|
),
|
|
122
138
|
|
|
139
|
+
message:
|
|
140
|
+
`DyNTS_Controller setup failed. (${controller?.constructor?.name}) ` +
|
|
141
|
+
`Please check the setupEndpoints() method.`,
|
|
123
142
|
errorCode: 'NTS-RMS-SR1',
|
|
124
143
|
level: DyFM_ErrorLevel.critical,
|
|
125
144
|
});
|
|
@@ -268,14 +268,14 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
|
|
|
268
268
|
}
|
|
269
269
|
debugLog: boolean = DyNTS_global_settings.log_settings.server_debug;
|
|
270
270
|
|
|
271
|
-
constructor(extended?: boolean){
|
|
271
|
+
constructor(/* extended?: boolean */){
|
|
272
272
|
super();
|
|
273
273
|
|
|
274
274
|
process.on(
|
|
275
275
|
'unhandledRejection',
|
|
276
276
|
(reason_theError: object, p_passWhatIsThis_maybeThePromise: any): void => {
|
|
277
277
|
DyFM_Log.H_error(
|
|
278
|
-
'Unhandled Rejection:
|
|
278
|
+
'Unhandled Rejection:', (p_passWhatIsThis_maybeThePromise as Promise<any>)?.toString(),
|
|
279
279
|
'\n Rejection reason:', (reason_theError as Error)?.stack?.split('at')?.[0],
|
|
280
280
|
/* '\n ErrorCode:', (reason as any)?.code, */
|
|
281
281
|
'\n\n Stack:',
|
|
@@ -286,7 +286,10 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
|
|
|
286
286
|
DyNTS_GlobalService.globalErrorHandler?.(
|
|
287
287
|
new DyFM_Error({
|
|
288
288
|
errorCode: 'NTS-AS0-BASE-UR',
|
|
289
|
-
message:
|
|
289
|
+
message:
|
|
290
|
+
`Unhandled Rejection!: "${(reason_theError as Error)?.stack?.split('at')?.[0]}"`,
|
|
291
|
+
userMessage: this.defaultErrorUserMsg,
|
|
292
|
+
addECToUserMsg: true,
|
|
290
293
|
error: reason_theError as Error,
|
|
291
294
|
additionalContent: {
|
|
292
295
|
reason: reason_theError,
|
|
@@ -295,14 +298,20 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
|
|
|
295
298
|
level: DyFM_ErrorLevel.critical,
|
|
296
299
|
})
|
|
297
300
|
);
|
|
298
|
-
|
|
299
301
|
} catch (error) {
|
|
300
302
|
DyFM_Log.error('globalErrorHandler (MULTILEVEL) ERROR:', error);
|
|
301
303
|
}
|
|
302
304
|
}
|
|
303
305
|
);
|
|
304
306
|
|
|
305
|
-
this.asyncConstruct(extended).catch((error: any): void => {
|
|
307
|
+
this.asyncConstruct(/* extended */).catch((error: any): void => {
|
|
308
|
+
if (error instanceof DyFM_Error) {
|
|
309
|
+
DyFM_Log.H_warn(
|
|
310
|
+
'(constructor asyncConstruct.catch) additional error content:\n',
|
|
311
|
+
error?.additionalContent
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
|
|
306
315
|
if (
|
|
307
316
|
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
308
317
|
!(error instanceof DyFM_Error)
|
|
@@ -313,15 +322,15 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
|
|
|
313
322
|
);
|
|
314
323
|
} else {
|
|
315
324
|
error.logSimple(
|
|
316
|
-
`Application: "${this.params?.name}" start failed. (constructor asyncConstruct.catch)`
|
|
325
|
+
`Application: "${this.params?.name}" start failed. (constructor asyncConstruct.catch)` +
|
|
326
|
+
'\n all error messages (from this stack):\n\n"' +
|
|
327
|
+
error._messages.join('"\n\n"') + '"\n\n'
|
|
317
328
|
);
|
|
318
329
|
}
|
|
319
|
-
|
|
320
|
-
DyFM_Log.H_warn('asyncConstruct error\n', error?.additionalContent);
|
|
321
330
|
});
|
|
322
331
|
}
|
|
323
332
|
|
|
324
|
-
|
|
333
|
+
protected async asyncConstruct(extended?: boolean): Promise<void> {
|
|
325
334
|
if (this.fnLogs && this.deepLog) DyFM_Log.log('\nfn:. asyncConstruct');
|
|
326
335
|
|
|
327
336
|
try {
|