@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.
Files changed (37) hide show
  1. package/build/_models/control-models/endpoint-params.control-model.js +1 -1
  2. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  3. package/build/_models/control-models/system-control.control-model.d.ts +1 -1
  4. package/build/_models/control-models/system-control.control-model.d.ts.map +1 -1
  5. package/build/_models/control-models/system-control.control-model.js +1 -1
  6. package/build/_models/control-models/system-control.control-model.js.map +1 -1
  7. package/build/_models/interfaces/global-service-settings.interface.d.ts +2 -1
  8. package/build/_models/interfaces/global-service-settings.interface.d.ts.map +1 -1
  9. package/build/_modules/socket/_services/app-extended.server.d.ts +1 -0
  10. package/build/_modules/socket/_services/app-extended.server.d.ts.map +1 -1
  11. package/build/_modules/socket/_services/app-extended.server.js +136 -105
  12. package/build/_modules/socket/_services/app-extended.server.js.map +1 -1
  13. package/build/_modules/socket/_services/app-extended.server.spec.js +51 -12
  14. package/build/_modules/socket/_services/app-extended.server.spec.js.map +1 -1
  15. package/build/_services/core/email.service.d.ts.map +1 -1
  16. package/build/_services/core/email.service.js +39 -34
  17. package/build/_services/core/email.service.js.map +1 -1
  18. package/build/_services/core/global.service.d.ts +18 -4
  19. package/build/_services/core/global.service.d.ts.map +1 -1
  20. package/build/_services/core/global.service.js +130 -20
  21. package/build/_services/core/global.service.js.map +1 -1
  22. package/build/_services/server/app.server.d.ts +2 -0
  23. package/build/_services/server/app.server.d.ts.map +1 -1
  24. package/build/_services/server/app.server.js +362 -297
  25. package/build/_services/server/app.server.js.map +1 -1
  26. package/build/_services/server/app.server.spec.js +21 -6
  27. package/build/_services/server/app.server.spec.js.map +1 -1
  28. package/package.json +2 -2
  29. package/src/_models/control-models/endpoint-params.control-model.ts +1 -1
  30. package/src/_models/control-models/system-control.control-model.ts +1 -1
  31. package/src/_models/interfaces/global-service-settings.interface.ts +3 -1
  32. package/src/_modules/socket/_services/app-extended.server.spec.ts +60 -16
  33. package/src/_modules/socket/_services/app-extended.server.ts +179 -132
  34. package/src/_services/core/email.service.ts +61 -51
  35. package/src/_services/core/global.service.ts +116 -37
  36. package/src/_services/server/app.server.spec.ts +26 -7
  37. 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
- set.dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
87
+ dbModels?.forEach((dbModel: DyFM_DataModel_Params): void => {
68
88
  if (!dbModel.constructed) {
69
89
  throw new DyFM_Error({
70
- message: `DyNTS_GlobalService.setServices failed, ` +
71
- `ERROR: dbModel is not constructed!`,
72
- errorCode: 'NTS-GS0-SS1',
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
- message: `Failed to create DyNTS_DBService (${dbModel.dataName}).`,
86
- issuerService: 'DyNTS_GlobalService',
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
- if (!set.authService) {
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 = set.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
- this.instance.emailServiceCollection = set.emailServiceCollection ?? {};
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
- set.errorHandler ??
167
+ errorHandler ??
113
168
  (async (error: any): Promise<void> => {
114
- DyFM_Log.warn(
115
- `globalErrorHandler not set! (set in app.getGlobalServiceCollection)`,
116
- '\nwill use default-logging',
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
- } else {
128
- error.logSimple(
129
- `Error caught by globalErrorHandler.`
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
- message: `Failed to setServices on DyNTS_GlobalService.`,
136
- error: error,
137
- errorCode: 'NTS-GS0-SS0',
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
- await app.stop();
26
+ try {
27
+ await DyFM_delay(100);
28
+
29
+ await app.stop();
25
30
 
26
- await DyFM_delay(100);
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
- await app.stop();
64
+ try {
65
+ await DyFM_delay(100);
66
+
67
+ await app.stop();
52
68
 
53
- await DyFM_delay(100);
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 => {