@futdevpro/nts-dynamo 1.9.32 → 1.9.34
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/_models/control-models/endpoint-params.control-model.js +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/control-models/system-control.control-model.d.ts +1 -1
- package/build/_models/control-models/system-control.control-model.d.ts.map +1 -1
- package/build/_models/control-models/system-control.control-model.js +1 -1
- package/build/_models/control-models/system-control.control-model.js.map +1 -1
- package/build/_models/interfaces/global-service-settings.interface.d.ts +2 -1
- package/build/_models/interfaces/global-service-settings.interface.d.ts.map +1 -1
- package/build/_modules/socket/_services/app-extended.server.d.ts +1 -0
- package/build/_modules/socket/_services/app-extended.server.d.ts.map +1 -1
- package/build/_modules/socket/_services/app-extended.server.js +136 -105
- package/build/_modules/socket/_services/app-extended.server.js.map +1 -1
- package/build/_modules/socket/_services/app-extended.server.spec.js +51 -12
- package/build/_modules/socket/_services/app-extended.server.spec.js.map +1 -1
- package/build/_services/core/email.service.d.ts.map +1 -1
- package/build/_services/core/email.service.js +39 -34
- package/build/_services/core/email.service.js.map +1 -1
- package/build/_services/core/global.service.d.ts +18 -4
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +130 -20
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts +2 -0
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +362 -297
- package/build/_services/server/app.server.js.map +1 -1
- package/build/_services/server/app.server.spec.js +21 -6
- package/build/_services/server/app.server.spec.js.map +1 -1
- package/package.json +2 -2
- package/src/_models/control-models/endpoint-params.control-model.ts +1 -1
- package/src/_models/control-models/system-control.control-model.ts +1 -1
- package/src/_models/interfaces/global-service-settings.interface.ts +3 -1
- package/src/_modules/socket/_services/app-extended.server.spec.ts +60 -16
- package/src/_modules/socket/_services/app-extended.server.ts +179 -132
- package/src/_services/core/email.service.ts +61 -51
- package/src/_services/core/global.service.ts +116 -37
- package/src/_services/server/app.server.spec.ts +26 -7
- package/src/_services/server/app.server.ts +483 -447
|
@@ -4,11 +4,14 @@ import { Request, Response } from 'express';
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
DyFM_Metadata, DyFM_DataModel_Params, DyFM_Log, DyFM_Error, DyFM_Array,
|
|
7
|
-
DyFM_errorFlag
|
|
7
|
+
DyFM_errorFlag,
|
|
8
|
+
DyFM_AnyError,
|
|
9
|
+
DyFM_Error_Settings
|
|
8
10
|
} from '@futdevpro/fsm-dynamo';
|
|
9
11
|
import { DyNTS_App_Params } from '../../_models/control-models/app-params.control-model';
|
|
10
12
|
|
|
11
13
|
import {
|
|
14
|
+
DyNTS_GlobalErrorHandlerFn,
|
|
12
15
|
DyNTS_GlobalService_Settings
|
|
13
16
|
} from '../../_models/interfaces/global-service-settings.interface';
|
|
14
17
|
|
|
@@ -48,13 +51,12 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
48
51
|
authService: DyNTS_AuthService;
|
|
49
52
|
dbServiceCollection: DyNTS_Service_Collection<DyNTS_DBService<any>>;
|
|
50
53
|
emailServiceCollection: DyNTS_Service_Collection<DyNTS_EmailService>;
|
|
54
|
+
|
|
55
|
+
static readonly defaultErrorUserMsg: string =
|
|
56
|
+
`We encountered an unhandled Control Service Error, ` +
|
|
57
|
+
`\nplease contact the responsible development team.`;
|
|
51
58
|
|
|
52
|
-
static globalErrorHandler?:
|
|
53
|
-
err: any,
|
|
54
|
-
req?: Request,
|
|
55
|
-
res?: Response,
|
|
56
|
-
issuer?: string
|
|
57
|
-
) => Promise<void>;
|
|
59
|
+
static globalErrorHandler?: DyNTS_GlobalErrorHandlerFn;
|
|
58
60
|
|
|
59
61
|
/**
|
|
60
62
|
* You need to setup global Services through this function
|
|
@@ -62,14 +64,36 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
62
64
|
static async setServices(set: DyNTS_GlobalService_Settings): Promise<void> {
|
|
63
65
|
this.getInstance();
|
|
64
66
|
|
|
67
|
+
try {
|
|
68
|
+
await this.setDBServices(set?.dbModels);
|
|
69
|
+
|
|
70
|
+
await this.setAuthService(set?.authService);
|
|
71
|
+
|
|
72
|
+
await this.setEmailServices(set?.emailServiceCollection);
|
|
73
|
+
|
|
74
|
+
await this.setErrorHandler(set?.errorHandler);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
throw new DyFM_Error({
|
|
77
|
+
...this.getDefaultErrorSettings('setServices', error, 'DyNTS_GlobalService'),
|
|
78
|
+
|
|
79
|
+
errorCode: 'NTS-GS0-SS0',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private static async setDBServices(dbModels?: DyFM_DataModel_Params[]): Promise<void> {
|
|
65
85
|
try {
|
|
66
86
|
this.instance.dbServiceCollection = {};
|
|
67
|
-
|
|
87
|
+
dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
|
|
68
88
|
if (!dbModel.constructed) {
|
|
69
89
|
throw new DyFM_Error({
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
90
|
+
...this.getDefaultErrorSettings(
|
|
91
|
+
'setDBServices',
|
|
92
|
+
new Error(`dbModel is not constructed!`),
|
|
93
|
+
'DyNTS_GlobalService'
|
|
94
|
+
),
|
|
95
|
+
|
|
96
|
+
errorCode: 'NTS-GS0-SDBS1',
|
|
73
97
|
additionalContent: {
|
|
74
98
|
dbModel: dbModel,
|
|
75
99
|
},
|
|
@@ -82,23 +106,44 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
82
106
|
DyFM_Log.error(`Failed to create DyNTS_DBService (${dbModel.dataName}).`, error);
|
|
83
107
|
|
|
84
108
|
throw new DyFM_Error({
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
error: error,
|
|
109
|
+
...this.getDefaultErrorSettings('setDBServices', error, 'DyNTS_GlobalService'),
|
|
110
|
+
|
|
88
111
|
additionalContent: {
|
|
89
112
|
dbModel: dbModel,
|
|
90
113
|
},
|
|
91
114
|
});
|
|
92
115
|
}
|
|
93
116
|
});
|
|
117
|
+
} catch (error) {
|
|
118
|
+
throw new DyFM_Error({
|
|
119
|
+
...this.getDefaultErrorSettings('setDBServices', error, 'DyNTS_GlobalService'),
|
|
120
|
+
|
|
121
|
+
errorCode: 'NTS-GS0-SDBS0',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
94
125
|
|
|
95
|
-
|
|
126
|
+
private static async setAuthService(authService?: DyNTS_AuthService): Promise<void> {
|
|
127
|
+
try {
|
|
128
|
+
if (!authService) {
|
|
96
129
|
DyFM_Log.warn(`Authentication Service missing!`);
|
|
97
130
|
} else {
|
|
98
|
-
this.instance.authService =
|
|
131
|
+
this.instance.authService = authService;
|
|
99
132
|
}
|
|
133
|
+
} catch (error) {
|
|
134
|
+
throw new DyFM_Error({
|
|
135
|
+
...this.getDefaultErrorSettings('setAuthService', error, 'DyNTS_GlobalService'),
|
|
136
|
+
|
|
137
|
+
errorCode: 'NTS-GS0-SAS0',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
100
141
|
|
|
101
|
-
|
|
142
|
+
private static async setEmailServices(
|
|
143
|
+
emailServiceCollection?: DyNTS_Service_Collection<DyNTS_EmailService>
|
|
144
|
+
): Promise<void> {
|
|
145
|
+
try {
|
|
146
|
+
this.instance.emailServiceCollection = emailServiceCollection ?? {};
|
|
102
147
|
await DyFM_Array.asyncForEach(
|
|
103
148
|
Object.keys(this.instance.emailServiceCollection),
|
|
104
149
|
async (key: string): Promise<void> => {
|
|
@@ -107,34 +152,51 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
107
152
|
).asyncPostConstruct();
|
|
108
153
|
}
|
|
109
154
|
);
|
|
110
|
-
|
|
155
|
+
} catch (error) {
|
|
156
|
+
throw new DyFM_Error({
|
|
157
|
+
...this.getDefaultErrorSettings('setEmailServices', error, 'DyNTS_GlobalService'),
|
|
158
|
+
|
|
159
|
+
errorCode: 'NTS-GS0-SS4',
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private static async setErrorHandler(errorHandler?: DyNTS_GlobalErrorHandlerFn): Promise<void> {
|
|
165
|
+
try {
|
|
111
166
|
DyNTS_GlobalService.globalErrorHandler =
|
|
112
|
-
|
|
167
|
+
errorHandler ??
|
|
113
168
|
(async (error: any): Promise<void> => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (
|
|
120
|
-
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
121
|
-
!(error instanceof DyFM_Error)
|
|
122
|
-
) {
|
|
123
|
-
DyFM_Log.H_error(
|
|
124
|
-
`Error caught by globalErrorHandler.`,
|
|
125
|
-
`\n ERROR:`, error
|
|
169
|
+
try {
|
|
170
|
+
DyFM_Log.warn(
|
|
171
|
+
`globalErrorHandler not set! (set in app.getGlobalServiceCollection)`,
|
|
172
|
+
'\nwill use default-logging',
|
|
126
173
|
);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
174
|
+
|
|
175
|
+
if (
|
|
176
|
+
DyNTS_global_settings.log_settings.highDetailedLogs ||
|
|
177
|
+
!(error instanceof DyFM_Error)
|
|
178
|
+
) {
|
|
179
|
+
DyFM_Log.H_error(
|
|
180
|
+
`Error caught by globalErrorHandler.`,
|
|
181
|
+
`\n ERROR:`, error
|
|
182
|
+
);
|
|
183
|
+
} else {
|
|
184
|
+
error.logSimple(
|
|
185
|
+
`Error caught by globalErrorHandler.`
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
} catch (error) {
|
|
189
|
+
DyFM_Log.error(
|
|
190
|
+
`NTS GLOBAL MULTILEVEL ERROR: \nFailed to handle error on globalErrorHandler.`,
|
|
191
|
+
error
|
|
130
192
|
);
|
|
131
193
|
}
|
|
132
194
|
});
|
|
133
195
|
} catch (error) {
|
|
134
196
|
throw new DyFM_Error({
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
errorCode: 'NTS-GS0-
|
|
197
|
+
...this.getDefaultErrorSettings('setErrorHandler', error, 'DyNTS_GlobalService'),
|
|
198
|
+
|
|
199
|
+
errorCode: 'NTS-GS0-SEH0',
|
|
138
200
|
});
|
|
139
201
|
}
|
|
140
202
|
}
|
|
@@ -280,4 +342,21 @@ export class DyNTS_GlobalService extends DyNTS_SingletonService {
|
|
|
280
342
|
${names}\n`);
|
|
281
343
|
}
|
|
282
344
|
} */
|
|
345
|
+
|
|
346
|
+
protected static getDefaultErrorSettings(
|
|
347
|
+
fnName: string,
|
|
348
|
+
error: DyFM_AnyError,
|
|
349
|
+
issuer: string
|
|
350
|
+
): DyFM_Error_Settings {
|
|
351
|
+
return {
|
|
352
|
+
status: (error as DyFM_Error)?.___status ?? 500,
|
|
353
|
+
message: (error as Error)?.message ??
|
|
354
|
+
`${fnName} was UNSUCCESSFUL (${DyNTS_global_settings.systemShortCodeName})`,
|
|
355
|
+
addECToUserMsg: !(error as DyFM_Error)?.__userMessage,
|
|
356
|
+
userMessage: (error as DyFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
|
|
357
|
+
issuer: issuer,
|
|
358
|
+
issuerService: this.constructor?.name,
|
|
359
|
+
error: error,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
283
362
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { DyFM_Log, DyFM_delay } from '@futdevpro/fsm-dynamo';
|
|
2
|
+
import { DyFM_Error, DyFM_Log, DyFM_delay } from '@futdevpro/fsm-dynamo';
|
|
3
3
|
import { DyNTS_AppBase_Mock, DyNTS_AppFull_Mock } from '../../_modules/mock/app-server.mock';
|
|
4
4
|
|
|
5
5
|
describe('DyNTS_App AND DyNTS_AppExtended?;', (): void => {
|
|
@@ -15,15 +15,23 @@ describe('DyNTS_App AND DyNTS_AppExtended?;', (): void => {
|
|
|
15
15
|
await DyFM_delay(100);
|
|
16
16
|
|
|
17
17
|
await app.ready();
|
|
18
|
+
|
|
19
|
+
await DyFM_delay(100);
|
|
18
20
|
} catch (error) {
|
|
19
|
-
DyFM_Log.test('error', error);
|
|
21
|
+
DyFM_Log.test('test beforeEach error:', (error as DyFM_Error)?._message);
|
|
20
22
|
}
|
|
21
23
|
});
|
|
22
24
|
|
|
23
25
|
afterEach(async (): Promise<void> => {
|
|
24
|
-
|
|
26
|
+
try {
|
|
27
|
+
await DyFM_delay(100);
|
|
28
|
+
|
|
29
|
+
await app.stop();
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
app = null;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
DyFM_Log.test('test afterEach error:', (error as DyFM_Error)?._message);
|
|
34
|
+
}
|
|
27
35
|
});
|
|
28
36
|
|
|
29
37
|
it('should be created', (): void => {
|
|
@@ -41,16 +49,27 @@ describe('DyNTS_App AND DyNTS_AppExtended?;', (): void => {
|
|
|
41
49
|
beforeEach(async (): Promise<void> => {
|
|
42
50
|
try {
|
|
43
51
|
app = new DyNTS_AppFull_Mock();
|
|
52
|
+
|
|
53
|
+
await DyFM_delay(100);
|
|
54
|
+
|
|
44
55
|
await app.ready();
|
|
56
|
+
|
|
57
|
+
await DyFM_delay(100);
|
|
45
58
|
} catch (error) {
|
|
46
|
-
DyFM_Log.test('error', error);
|
|
59
|
+
DyFM_Log.test('test beforeEach error:', (error as DyFM_Error)?._message);
|
|
47
60
|
}
|
|
48
61
|
});
|
|
49
62
|
|
|
50
63
|
afterEach(async (): Promise<void> => {
|
|
51
|
-
|
|
64
|
+
try {
|
|
65
|
+
await DyFM_delay(100);
|
|
66
|
+
|
|
67
|
+
await app.stop();
|
|
52
68
|
|
|
53
|
-
|
|
69
|
+
app = null;
|
|
70
|
+
} catch (error) {
|
|
71
|
+
DyFM_Log.test('test afterEach error:', (error as DyFM_Error)?._message);
|
|
72
|
+
}
|
|
54
73
|
});
|
|
55
74
|
|
|
56
75
|
it('should be created', (): void => {
|