@futdevpro/nts-dynamo 1.9.14 → 1.9.16

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 (142) hide show
  1. package/.copilot/patterns.json +7 -7
  2. package/.eslintrc.json +1 -1
  3. package/.github/workflows/main.yml +206 -0
  4. package/HOWTO.md +15 -15
  5. package/README.md +140 -140
  6. package/build/_constants/mocks/auth-service.mock.d.ts +1 -1
  7. package/build/_constants/mocks/auth-service.mock.d.ts.map +1 -1
  8. package/build/_constants/mocks/auth-service.mock.js +1 -1
  9. package/build/_constants/mocks/auth-service.mock.js.map +1 -1
  10. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  11. package/build/_models/control-models/endpoint-params.control-model.js +2 -0
  12. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  13. package/build/_models/control-models/socket-event.control-model.js +1 -1
  14. package/build/_modules/usage/usage.controller.js +1 -1
  15. package/build/_modules/usage/usage.controller.js.map +1 -1
  16. package/build/_services/base/db.service.js +3 -3
  17. package/build/_services/base/db.service.js.map +1 -1
  18. package/build/_services/core/auth.service.d.ts +3 -3
  19. package/build/_services/core/auth.service.d.ts.map +1 -1
  20. package/build/_services/core/global.service.d.ts.map +1 -1
  21. package/build/_services/core/global.service.js +1 -0
  22. package/build/_services/core/global.service.js.map +1 -1
  23. package/build/_services/route/controller.service.d.ts +3 -3
  24. package/build/_services/route/controller.service.js +2 -2
  25. package/build/_services/route/routing-module.service.d.ts +1 -0
  26. package/build/_services/route/routing-module.service.d.ts.map +1 -1
  27. package/build/_services/route/routing-module.service.js +17 -23
  28. package/build/_services/route/routing-module.service.js.map +1 -1
  29. package/build/_services/server/app.server.d.ts.map +1 -1
  30. package/build/_services/server/app.server.js +4 -1
  31. package/build/_services/server/app.server.js.map +1 -1
  32. package/build/_services/socket/socket-client.service.d.ts.map +1 -1
  33. package/build/_services/socket/socket-client.service.js +1 -0
  34. package/build/_services/socket/socket-client.service.js.map +1 -1
  35. package/nodemon.json +17 -15
  36. package/package.json +6 -6
  37. package/src/_constants/global-settings.const.ts +27 -27
  38. package/src/_constants/index.ts +2 -2
  39. package/src/_constants/mocks/app-extended-server.mock.ts +198 -198
  40. package/src/_constants/mocks/app-params.mock.ts +9 -9
  41. package/src/_constants/mocks/app-server.mock.ts +185 -185
  42. package/src/_constants/mocks/auth-service.mock.ts +28 -28
  43. package/src/_constants/mocks/controller.mock.ts +16 -16
  44. package/src/_constants/mocks/data-model.mock.ts +83 -83
  45. package/src/_constants/mocks/email-service-collection.mock.ts +13 -13
  46. package/src/_constants/mocks/email-service.mock.ts +19 -19
  47. package/src/_constants/mocks/email-template.mock.html +14 -14
  48. package/src/_constants/mocks/endpoint.mock.ts +90 -90
  49. package/src/_constants/mocks/socket-client.mock.ts +43 -43
  50. package/src/_constants/mocks/socket-server.mock.ts +43 -43
  51. package/src/_enums/data-model-type.enum.ts +14 -14
  52. package/src/_enums/data-service-function.enum.ts +15 -15
  53. package/src/_enums/http/http-call-type.enum.ts +12 -12
  54. package/src/_enums/http/http-response-type.enum.ts +7 -7
  55. package/src/_enums/http/socket-event-type.enum.ts +18 -18
  56. package/src/_enums/index.ts +13 -13
  57. package/src/_enums/predefined-data-types.enum.ts +27 -27
  58. package/src/_enums/route-security.enum.ts +12 -12
  59. package/src/_enums/socket-security.enum.ts +11 -11
  60. package/src/_models/control-models/api-call-params.control-model.ts +126 -126
  61. package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
  62. package/src/_models/control-models/app-params.control-model.ts +45 -45
  63. package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
  64. package/src/_models/control-models/endpoint-params.control-model.ts +309 -307
  65. package/src/_models/control-models/http-settings.control-model.ts +29 -29
  66. package/src/_models/control-models/index.ts +13 -13
  67. package/src/_models/control-models/socket-client-service-params.control-model.ts +28 -28
  68. package/src/_models/control-models/socket-event.control-model.ts +150 -150
  69. package/src/_models/control-models/socket-presence.control-model.ts +207 -207
  70. package/src/_models/control-models/socket-server-service-params.control-model.ts +20 -20
  71. package/src/_models/control-models/system-control.control-model.ts +12 -12
  72. package/src/_models/index.ts +9 -9
  73. package/src/_models/interfaces/certification-settings.interface.ts +7 -7
  74. package/src/_models/interfaces/global-service-settings.interface.ts +45 -45
  75. package/src/_models/interfaces/global-settings.interface.ts +83 -83
  76. package/src/_models/interfaces/index.ts +7 -7
  77. package/src/_models/interfaces/routing-module-settings.interface.ts +20 -20
  78. package/src/_models/types/db-filter.type.ts +108 -108
  79. package/src/_models/types/db-update.type.ts +100 -100
  80. package/src/_models/types/index.ts +5 -5
  81. package/src/_modules/api-service.index.ts +12 -12
  82. package/src/_modules/app-extended.index.ts +28 -28
  83. package/src/_modules/app.index.ts +24 -24
  84. package/src/_modules/auth.index.ts +7 -7
  85. package/src/_modules/constants.index.ts +2 -2
  86. package/src/_modules/controller.index.ts +10 -10
  87. package/src/_modules/custom-data/custom-data.controller.ts +69 -69
  88. package/src/_modules/custom-data/custom-data.data-service.ts +20 -20
  89. package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +23 -23
  90. package/src/_modules/custom-data/index.ts +6 -6
  91. package/src/_modules/custom-data-module.index.ts +2 -2
  92. package/src/_modules/data-service.index.ts +9 -9
  93. package/src/_modules/email.index.ts +8 -8
  94. package/src/_modules/enums.index.ts +2 -2
  95. package/src/_modules/extended.index.ts +8 -8
  96. package/src/_modules/models.index.ts +2 -2
  97. package/src/_modules/services.index.ts +2 -2
  98. package/src/_modules/test/get-test-routing-module.util.ts +23 -23
  99. package/src/_modules/test/index.ts +5 -5
  100. package/src/_modules/test/test.controller.ts +115 -115
  101. package/src/_modules/test-module.index.ts +2 -2
  102. package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
  103. package/src/_modules/usage/index.ts +7 -7
  104. package/src/_modules/usage/usage.controller.ts +120 -120
  105. package/src/_modules/usage/usage.data-service.ts +172 -172
  106. package/src/_modules/usage-module.index.ts +2 -2
  107. package/src/_services/base/data.service.ts +921 -921
  108. package/src/_services/base/db.service.spec.ts +32 -32
  109. package/src/_services/base/db.service.ts +1063 -1063
  110. package/src/_services/base/singleton.service.ts +21 -21
  111. package/src/_services/core/api.service.ts +453 -453
  112. package/src/_services/core/auth.service.ts +172 -172
  113. package/src/_services/core/email.service.ts +678 -678
  114. package/src/_services/core/global.service.ts +270 -269
  115. package/src/_services/core/service-collection.service.ts +5 -5
  116. package/src/_services/index.ts +23 -23
  117. package/src/_services/route/controller.service.ts +129 -129
  118. package/src/_services/route/routing-module.service.ts +293 -273
  119. package/src/_services/server/app-extended.server.spec.ts +76 -76
  120. package/src/_services/server/app-extended.server.ts +520 -520
  121. package/src/_services/server/app.server.spec.ts +67 -67
  122. package/src/_services/server/app.server.ts +1181 -1179
  123. package/src/_services/shared.service.spec.ts +19 -19
  124. package/src/_services/shared.static-service.ts +73 -73
  125. package/src/_services/socket/socket-client.service.ts +236 -235
  126. package/src/_services/socket/socket-server.service.spec.ts +11 -11
  127. package/src/_services/socket/socket-server.service.ts +761 -761
  128. package/src/index.ts +18 -18
  129. package/tsconfig.json +41 -46
  130. package/build/tsconfig.tsbuildinfo +0 -1
  131. package/src/_enums/http/http-call-type.enum.d.ts +0 -12
  132. package/src/_enums/http/http-call-type.enum.d.ts.map +0 -1
  133. package/src/_enums/http/http-call-type.enum.js +0 -16
  134. package/src/_enums/http/http-call-type.enum.js.map +0 -1
  135. package/src/_enums/http/http-response-type.enum.d.ts +0 -7
  136. package/src/_enums/http/http-response-type.enum.d.ts.map +0 -1
  137. package/src/_enums/http/http-response-type.enum.js +0 -11
  138. package/src/_enums/http/http-response-type.enum.js.map +0 -1
  139. package/src/_enums/http/socket-event-type.enum.d.ts +0 -15
  140. package/src/_enums/http/socket-event-type.enum.d.ts.map +0 -1
  141. package/src/_enums/http/socket-event-type.enum.js +0 -19
  142. package/src/_enums/http/socket-event-type.enum.js.map +0 -1
@@ -1,273 +1,293 @@
1
-
2
- import { Router } from 'express';
3
-
4
- import { DynamoFM_Error, DynamoFM_ErrorLevel, DynamoFM_Log } from '@futdevpro/fsm-dynamo';
5
-
6
- import { DynamoNTS_globalSettings } from '../../_constants/global-settings.const';
7
- import { DynamoNTS_RouteSecurity } from '../../_enums/route-security.enum';
8
- import { DynamoNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
9
- import { DynamoNTS_Controller } from './controller.service';
10
- import {
11
- DynamoNTS_RoutingModule_Settings
12
- } from '../../_models/interfaces/routing-module-settings.interface';
13
- import {
14
- DynamoNTS_Endpoint_Params
15
- } from '../../_models/control-models/endpoint-params.control-model';
16
-
17
- /**
18
- * Routing Module
19
- * Handling route setup and control
20
- *
21
- * You can add routes and controllers for them
22
- * @example
23
- * // Setting up Routes
24
- * setupRoutingModules(): void {
25
- * this.httpPort = env.port;
26
-
27
- * this.routingModules = [
28
- * new DynamoNTS_RoutingModule({
29
- * route: '/user',
30
- * controllers: [
31
- * UserController.getInstance(),
32
- * UserDataController.getInstance(),
33
- * UserOptionsController.getInstance(),
34
- * UserStatisticsController.getInstance(),
35
- * UserAchievementsController.getInstance(),
36
- * UserNotificationsController.getInstance()
37
- * ]
38
- * }),
39
- * new DynamoNTS_RoutingModule({
40
- * route: '/match',
41
- * controllers: [
42
- * MatchController.getInstance(),
43
- * MatchDistributionController.getInstance(),
44
- * MatchStatisticsController.getInstance(),
45
- * ]
46
- * }),
47
- * new DynamoNTS_RoutingModule({
48
- * route: '/server',
49
- * controllers: [
50
- * ServerController.getInstance(),
51
- * ]
52
- * }),
53
-
54
- * getTestRoutingModule(),
55
- * getUsageRoutingModule()
56
- * ];
57
- * }
58
- */
59
- export class DynamoNTS_RoutingModule {
60
-
61
- serviceName: string;
62
-
63
- security: DynamoNTS_RouteSecurity;
64
- route: string;
65
-
66
- private controllers: DynamoNTS_Controller[];
67
- endpoints: DynamoNTS_Endpoint_Params[] = [];
68
-
69
- openRouter: Router = Router();
70
- secureRouter: Router = Router();
71
-
72
- protected log: boolean = DynamoNTS_globalSettings.logSetup;
73
-
74
- defaultErrorUserMsg =
75
- `We encountered an uncaught BackEnd Build Error, ` +
76
- `\nplease contact the responsible development team.`;
77
-
78
- constructor(
79
- set: DynamoNTS_RoutingModule_Settings
80
- ){
81
- try {
82
- this.serviceName = set.route.replace('/', '') + 'RoutingModule';
83
- this.route = DynamoNTS_globalSettings.baseUrl + set.route;
84
- this.controllers = set.controllers ?? [];
85
- this.setupRoutes();
86
- this.mountRoutes(set.securityOverride);
87
-
88
- if (this.log) console.log(
89
- `routing module setup done: ${this.route} security: ${this.security}\n`
90
- );
91
- } catch (error) {
92
- /* DynamoFM_Log.error(`\nRouting module setup failed (${this.route})`, error); */
93
- throw new DynamoFM_Error({
94
- errorCode: 'NTS-RMS-000',
95
- addECToUserMsg: true,
96
- message: `Routing module setup failed (${this.route}).`,
97
- userMessage: this.defaultErrorUserMsg,
98
- issuerService: this.serviceName + ' - ' + this.route,
99
- error,
100
- additionalContent: set,
101
- });
102
- }
103
- }
104
-
105
- /**
106
- * You must setup endpoints and required services for this function
107
- */
108
- private setupRoutes(): void {
109
- this.controllers.forEach((controller: DynamoNTS_Controller): void => {
110
- try {
111
- controller.setupEndpoints();
112
- } catch (error) {
113
- throw new DynamoFM_Error({
114
- message: 'DynamoBEController setup failed. Please check the setupEndpoints() method.',
115
- errorCode: 'NTS-RMS-SR1',
116
- issuerService: `${this?.constructor?.name} > ${controller?.constructor?.name}`,
117
- error: error,
118
- level: DynamoFM_ErrorLevel.critical,
119
- });
120
- }
121
-
122
- if (controller?.endpoints?.length) {
123
- this.endpoints.push(...controller.endpoints);
124
- }
125
- });
126
- }
127
-
128
- /**
129
- *
130
- * @param securityOverride
131
- */
132
- private mountRoutes(securityOverride?: DynamoNTS_RouteSecurity): void {
133
- if (securityOverride) {
134
- this.security = securityOverride;
135
- }
136
-
137
- this.endpoints.forEach((endpoint: DynamoNTS_Endpoint_Params): void => {
138
- if (securityOverride) {
139
- endpoint.security = securityOverride;
140
- } else {
141
- if (!endpoint.security) {
142
- DynamoFM_Log.error(`Endpoint security not set: ${endpoint.endpoint}\n`);
143
- } else if (!this.security) {
144
- this.security = endpoint.security;
145
- } else if (this.security !== endpoint.security) {
146
- this.security = DynamoNTS_RouteSecurity.both;
147
- }
148
- }
149
-
150
- if (this.log) console.log(
151
- `endpoint mount (${endpoint.security}): ${this.route}${endpoint.endpoint}`
152
- );
153
- const existingEndPoints: DynamoNTS_Endpoint_Params[] = this.endpoints.filter(
154
- (e_params: DynamoNTS_Endpoint_Params): boolean => e_params.endpoint === endpoint.endpoint
155
- );
156
-
157
- if (1 < existingEndPoints.length) {
158
- const error = new Error(`ENDPOINT DUPLICATION: ${endpoint.endpoint}`);
159
- const errorStack: string[] = error.stack.split('\n');
160
-
161
- errorStack.splice(1, 4);
162
- error.stack = errorStack.join('\n');
163
-
164
- throw error;
165
- }
166
-
167
- try {
168
- if (endpoint.security !== DynamoNTS_RouteSecurity.secure) {
169
- this.mountOpenRoute(endpoint);
170
- }
171
-
172
- if (endpoint.security !== DynamoNTS_RouteSecurity.open) {
173
- this.mountSecureRoute(endpoint);
174
- }
175
- } catch (error) {
176
- DynamoFM_Log.error(`\nRouting module setup failed (${this.route})`, error);
177
-
178
- throw new DynamoFM_Error({
179
- errorCode: 'NTS-RMS-100',
180
- addECToUserMsg: true,
181
- message: `DYNAMO-NTS ERROR: Failed to mount routes.`,
182
- userMessage: this.defaultErrorUserMsg,
183
- issuerService: this.serviceName + ' - ' + this.route,
184
- error,
185
- });
186
- }
187
- });
188
- }
189
-
190
- /**
191
- *
192
- * @param endpointParams
193
- */
194
- private mountOpenRoute(endpointParams: DynamoNTS_Endpoint_Params): void {
195
- switch (endpointParams.type) {
196
- case DynamoNTS_HttpCallType.get:
197
- this.openRouter.get(endpointParams.endpoint, endpointParams.getFullExecution());
198
- break;
199
-
200
- case DynamoNTS_HttpCallType.post:
201
- this.openRouter.post(endpointParams.endpoint, endpointParams.getFullExecution());
202
- break;
203
-
204
- case DynamoNTS_HttpCallType.put:
205
- this.openRouter.put(endpointParams.endpoint, endpointParams.getFullExecution());
206
- break;
207
-
208
- case DynamoNTS_HttpCallType.patch:
209
- this.openRouter.patch(endpointParams.endpoint, endpointParams.getFullExecution());
210
- break;
211
-
212
- case DynamoNTS_HttpCallType.delete:
213
- this.openRouter.delete(endpointParams.endpoint, endpointParams.getFullExecution());
214
- break;
215
-
216
- default:
217
- DynamoFM_Log.error(`INVALID route type: ${endpointParams.type} - ${endpointParams.name}`);
218
-
219
- throw new DynamoFM_Error({
220
- errorCode: 'NTS-RMS-200',
221
- addECToUserMsg: true,
222
- message:
223
- `DYNAMO-NTS ERROR: INVALID route type: ${endpointParams.type} - ${endpointParams.name}`,
224
- userMessage: this.defaultErrorUserMsg,
225
- issuerService: this.serviceName + ' - ' + this.route,
226
- error: new Error(),
227
- });
228
- }
229
- }
230
-
231
- /**
232
- *
233
- * @param endpointParams
234
- */
235
- private mountSecureRoute(endpointParams: DynamoNTS_Endpoint_Params): void {
236
- switch (endpointParams.type) {
237
- case DynamoNTS_HttpCallType.get:
238
- this.secureRouter.get(endpointParams.endpoint, endpointParams.getFullExecution());
239
- break;
240
-
241
- case DynamoNTS_HttpCallType.post:
242
- this.secureRouter.post(endpointParams.endpoint, endpointParams.getFullExecution());
243
- break;
244
-
245
- case DynamoNTS_HttpCallType.put:
246
- this.secureRouter.put(endpointParams.endpoint, endpointParams.getFullExecution());
247
- break;
248
-
249
- case DynamoNTS_HttpCallType.patch:
250
- this.secureRouter.patch(endpointParams.endpoint, endpointParams.getFullExecution());
251
- break;
252
-
253
- case DynamoNTS_HttpCallType.delete:
254
- this.secureRouter.delete(endpointParams.endpoint, endpointParams.getFullExecution());
255
- break;
256
-
257
- default:
258
- DynamoFM_Log.error(
259
- `DYNAMO-NTS ERROR: INVALID route type: ${endpointParams.type} - ${endpointParams.name}`
260
- );
261
-
262
- throw new DynamoFM_Error({
263
- errorCode: 'NTS-RMS-300',
264
- addECToUserMsg: true,
265
- message:
266
- `DYNAMO-NTS ERROR: INVALID route type: ${endpointParams.type} - ${endpointParams.name}`,
267
- userMessage: this.defaultErrorUserMsg,
268
- issuerService: this.serviceName + ' - ' + this.route,
269
- error: new Error(),
270
- });
271
- }
272
- }
273
- }
1
+
2
+ import { Router } from 'express';
3
+
4
+ import { DynamoFM_AnyError, DynamoFM_Error, DynamoFM_ErrorLevel, DynamoFM_Error_Settings, DynamoFM_Log } from '@futdevpro/fsm-dynamo';
5
+
6
+ import { DynamoNTS_globalSettings } from '../../_constants/global-settings.const';
7
+ import { DynamoNTS_RouteSecurity } from '../../_enums/route-security.enum';
8
+ import { DynamoNTS_HttpCallType } from '../../_enums/http/http-call-type.enum';
9
+ import { DynamoNTS_Controller } from './controller.service';
10
+ import {
11
+ DynamoNTS_RoutingModule_Settings
12
+ } from '../../_models/interfaces/routing-module-settings.interface';
13
+ import {
14
+ DynamoNTS_Endpoint_Params
15
+ } from '../../_models/control-models/endpoint-params.control-model';
16
+
17
+ /**
18
+ * Routing Module
19
+ * Handling route setup and control
20
+ *
21
+ * You can add routes and controllers for them
22
+ * @example
23
+ * // Setting up Routes
24
+ * setupRoutingModules(): void {
25
+ * this.httpPort = env.port;
26
+
27
+ * this.routingModules = [
28
+ * new DynamoNTS_RoutingModule({
29
+ * route: '/user',
30
+ * controllers: [
31
+ * UserController.getInstance(),
32
+ * UserDataController.getInstance(),
33
+ * UserOptionsController.getInstance(),
34
+ * UserStatisticsController.getInstance(),
35
+ * UserAchievementsController.getInstance(),
36
+ * UserNotificationsController.getInstance()
37
+ * ]
38
+ * }),
39
+ * new DynamoNTS_RoutingModule({
40
+ * route: '/match',
41
+ * controllers: [
42
+ * MatchController.getInstance(),
43
+ * MatchDistributionController.getInstance(),
44
+ * MatchStatisticsController.getInstance(),
45
+ * ]
46
+ * }),
47
+ * new DynamoNTS_RoutingModule({
48
+ * route: '/server',
49
+ * controllers: [
50
+ * ServerController.getInstance(),
51
+ * ]
52
+ * }),
53
+
54
+ * getTestRoutingModule(),
55
+ * getUsageRoutingModule()
56
+ * ];
57
+ * }
58
+ */
59
+ export class DynamoNTS_RoutingModule {
60
+
61
+ serviceName: string;
62
+
63
+ security: DynamoNTS_RouteSecurity;
64
+ route: string;
65
+
66
+ private controllers: DynamoNTS_Controller[];
67
+ endpoints: DynamoNTS_Endpoint_Params[] = [];
68
+
69
+ openRouter: Router = Router();
70
+ secureRouter: Router = Router();
71
+
72
+ protected log: boolean = DynamoNTS_globalSettings.logSetup;
73
+
74
+ defaultErrorUserMsg =
75
+ `We encountered an uncaught BackEnd Build Error, ` +
76
+ `\nplease contact the responsible development team.`;
77
+
78
+ constructor(
79
+ set: DynamoNTS_RoutingModule_Settings
80
+ ){
81
+ try {
82
+ this.serviceName = set.route.replace('/', '') + 'RoutingModule';
83
+ this.route = DynamoNTS_globalSettings.baseUrl + set.route;
84
+ this.controllers = set.controllers ?? [];
85
+ this.setupRoutes();
86
+ this.mountRoutes(set.securityOverride);
87
+
88
+ if (this.log) console.log(
89
+ `routing module setup done: ${this.route} security: ${this.security}\n`
90
+ );
91
+ } catch (error) {
92
+ /* DynamoFM_Log.error(`\nRouting module setup failed (${this.route})`, error); */
93
+ throw new DynamoFM_Error({
94
+ ...this.getDefaultErrorSettings(
95
+ 'constructor',
96
+ new Error(`Routing module setup failed (${this.route}).`)
97
+ ),
98
+
99
+ errorCode: 'NTS-RMS-000',
100
+ additionalContent: set,
101
+ });
102
+ }
103
+ }
104
+
105
+ /**
106
+ * You must setup endpoints and required services for this function
107
+ */
108
+ private setupRoutes(): void {
109
+ this.controllers.forEach((controller: DynamoNTS_Controller): void => {
110
+ try {
111
+ controller.setupEndpoints();
112
+ } catch (error) {
113
+ throw new DynamoFM_Error({
114
+ ...this.getDefaultErrorSettings(
115
+ 'setupRoutes',
116
+ new Error(`DynamoBEController setup failed. Please check the setupEndpoints() method.`)
117
+ ),
118
+
119
+ errorCode: 'NTS-RMS-SR1',
120
+ level: DynamoFM_ErrorLevel.critical,
121
+ });
122
+ }
123
+
124
+ if (controller?.endpoints?.length) {
125
+ this.endpoints.push(...controller.endpoints);
126
+ }
127
+ });
128
+ }
129
+
130
+ /**
131
+ *
132
+ * @param securityOverride
133
+ */
134
+ private mountRoutes(securityOverride?: DynamoNTS_RouteSecurity): void {
135
+ if (securityOverride) {
136
+ this.security = securityOverride;
137
+ }
138
+
139
+ this.endpoints.forEach((endpoint: DynamoNTS_Endpoint_Params): void => {
140
+ if (securityOverride) {
141
+ endpoint.security = securityOverride;
142
+ } else {
143
+ if (!endpoint.security) {
144
+ DynamoFM_Log.error(`Endpoint security not set: ${endpoint.endpoint}\n`);
145
+ } else if (!this.security) {
146
+ this.security = endpoint.security;
147
+ } else if (this.security !== endpoint.security) {
148
+ this.security = DynamoNTS_RouteSecurity.both;
149
+ }
150
+ }
151
+
152
+ if (this.log) console.log(
153
+ `endpoint mount (${endpoint.security}): ${this.route}${endpoint.endpoint}`
154
+ );
155
+ const existingEndPoints: DynamoNTS_Endpoint_Params[] = this.endpoints.filter(
156
+ (e_params: DynamoNTS_Endpoint_Params): boolean => e_params.endpoint === endpoint.endpoint
157
+ );
158
+
159
+ if (1 < existingEndPoints.length) {
160
+ const error = new Error(`ENDPOINT DUPLICATION: ${endpoint.endpoint}`);
161
+ const errorStack: string[] = error.stack.split('\n');
162
+
163
+ errorStack.splice(1, 4);
164
+ error.stack = errorStack.join('\n');
165
+
166
+ throw error;
167
+ }
168
+
169
+ try {
170
+ if (endpoint.security !== DynamoNTS_RouteSecurity.secure) {
171
+ this.mountOpenRoute(endpoint);
172
+ }
173
+
174
+ if (endpoint.security !== DynamoNTS_RouteSecurity.open) {
175
+ this.mountSecureRoute(endpoint);
176
+ }
177
+ } catch (error) {
178
+ DynamoFM_Log.error(`\nRouting module setup failed (${this.route})`, error);
179
+
180
+ throw new DynamoFM_Error({
181
+ ...this.getDefaultErrorSettings(
182
+ 'mountRoutes',
183
+ new Error(`DYNAMO-NTS ERROR: Failed to mount routes.`)
184
+ ),
185
+
186
+ errorCode: 'NTS-RMS-100',
187
+ });
188
+ }
189
+ });
190
+ }
191
+
192
+ /**
193
+ *
194
+ * @param endpointParams
195
+ */
196
+ private mountOpenRoute(endpointParams: DynamoNTS_Endpoint_Params): void {
197
+ switch (endpointParams.type) {
198
+ case DynamoNTS_HttpCallType.get:
199
+ this.openRouter.get(endpointParams.endpoint, endpointParams.getFullExecution());
200
+ break;
201
+
202
+ case DynamoNTS_HttpCallType.post:
203
+ this.openRouter.post(endpointParams.endpoint, endpointParams.getFullExecution());
204
+ break;
205
+
206
+ case DynamoNTS_HttpCallType.put:
207
+ this.openRouter.put(endpointParams.endpoint, endpointParams.getFullExecution());
208
+ break;
209
+
210
+ case DynamoNTS_HttpCallType.patch:
211
+ this.openRouter.patch(endpointParams.endpoint, endpointParams.getFullExecution());
212
+ break;
213
+
214
+ case DynamoNTS_HttpCallType.delete:
215
+ this.openRouter.delete(endpointParams.endpoint, endpointParams.getFullExecution());
216
+ break;
217
+
218
+ default:
219
+ DynamoFM_Log.error(`INVALID route type: ${endpointParams.type} - ${endpointParams.name}`);
220
+
221
+ throw new DynamoFM_Error({
222
+ ...this.getDefaultErrorSettings(
223
+ 'mountOpenRoute',
224
+ new Error(
225
+ `DYNAMO-NTS ERROR: INVALID route type: ` +
226
+ `${endpointParams.type} - ${endpointParams.name}`
227
+ ),
228
+ ),
229
+
230
+ errorCode: 'NTS-RMS-200',
231
+ });
232
+ }
233
+ }
234
+
235
+ /**
236
+ *
237
+ * @param endpointParams
238
+ */
239
+ private mountSecureRoute(endpointParams: DynamoNTS_Endpoint_Params): void {
240
+ switch (endpointParams.type) {
241
+ case DynamoNTS_HttpCallType.get:
242
+ this.secureRouter.get(endpointParams.endpoint, endpointParams.getFullExecution());
243
+ break;
244
+
245
+ case DynamoNTS_HttpCallType.post:
246
+ this.secureRouter.post(endpointParams.endpoint, endpointParams.getFullExecution());
247
+ break;
248
+
249
+ case DynamoNTS_HttpCallType.put:
250
+ this.secureRouter.put(endpointParams.endpoint, endpointParams.getFullExecution());
251
+ break;
252
+
253
+ case DynamoNTS_HttpCallType.patch:
254
+ this.secureRouter.patch(endpointParams.endpoint, endpointParams.getFullExecution());
255
+ break;
256
+
257
+ case DynamoNTS_HttpCallType.delete:
258
+ this.secureRouter.delete(endpointParams.endpoint, endpointParams.getFullExecution());
259
+ break;
260
+
261
+ default:
262
+ DynamoFM_Log.error(
263
+ `DYNAMO-NTS ERROR: INVALID route type: ${endpointParams.type} - ${endpointParams.name}`
264
+ );
265
+
266
+ throw new DynamoFM_Error({
267
+ ...this.getDefaultErrorSettings(
268
+ 'mountSecureRoute',
269
+ new Error(
270
+ `DYNAMO-NTS ERROR: INVALID route type: ` +
271
+ `${endpointParams.type} - ${endpointParams.name}`
272
+ ),
273
+ ),
274
+
275
+ errorCode: 'NTS-RMS-300',
276
+ });
277
+ }
278
+ }
279
+
280
+ private getDefaultErrorSettings(
281
+ fnName: string,
282
+ error: DynamoFM_AnyError
283
+ ): DynamoFM_Error_Settings {
284
+ return {
285
+ status: 500,
286
+ message: (error as Error)?.message ?? `${fnName} was UNSUCCESSFUL (NTS)`,
287
+ issuerService: this.constructor?.name,
288
+ userMessage: (error as DynamoFM_Error)?.__userMessage ?? this.defaultErrorUserMsg,
289
+ addECToUserMsg: true,
290
+ error: error,
291
+ };
292
+ }
293
+ }