@futdevpro/nts-dynamo 1.9.15 → 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.
- package/.copilot/patterns.json +7 -7
- package/.github/workflows/main.yml +206 -0
- package/HOWTO.md +15 -15
- package/README.md +140 -140
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +2 -0
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_models/control-models/socket-event.control-model.js +1 -1
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +1 -0
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/route/routing-module.service.d.ts +1 -0
- package/build/_services/route/routing-module.service.d.ts.map +1 -1
- package/build/_services/route/routing-module.service.js +17 -23
- package/build/_services/route/routing-module.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +4 -1
- package/build/_services/server/app.server.js.map +1 -1
- package/build/_services/socket/socket-client.service.d.ts.map +1 -1
- package/build/_services/socket/socket-client.service.js +1 -0
- package/build/_services/socket/socket-client.service.js.map +1 -1
- package/nodemon.json +17 -15
- package/package.json +5 -5
- package/src/_constants/global-settings.const.ts +27 -27
- package/src/_constants/index.ts +2 -2
- package/src/_constants/mocks/app-extended-server.mock.ts +198 -198
- package/src/_constants/mocks/app-params.mock.ts +9 -9
- package/src/_constants/mocks/app-server.mock.ts +185 -185
- package/src/_constants/mocks/auth-service.mock.ts +28 -28
- package/src/_constants/mocks/controller.mock.ts +16 -16
- package/src/_constants/mocks/data-model.mock.ts +83 -83
- package/src/_constants/mocks/email-service-collection.mock.ts +13 -13
- package/src/_constants/mocks/email-service.mock.ts +19 -19
- package/src/_constants/mocks/email-template.mock.html +14 -14
- package/src/_constants/mocks/endpoint.mock.ts +90 -90
- package/src/_constants/mocks/socket-client.mock.ts +43 -43
- package/src/_constants/mocks/socket-server.mock.ts +43 -43
- package/src/_enums/data-model-type.enum.ts +14 -14
- package/src/_enums/data-service-function.enum.ts +15 -15
- package/src/_enums/http/http-call-type.enum.ts +12 -12
- package/src/_enums/http/http-response-type.enum.ts +7 -7
- package/src/_enums/http/socket-event-type.enum.ts +18 -18
- package/src/_enums/index.ts +13 -13
- package/src/_enums/predefined-data-types.enum.ts +27 -27
- package/src/_enums/route-security.enum.ts +12 -12
- package/src/_enums/socket-security.enum.ts +11 -11
- package/src/_models/control-models/api-call-params.control-model.ts +126 -126
- package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/app-params.control-model.ts +45 -45
- package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/endpoint-params.control-model.ts +309 -307
- package/src/_models/control-models/http-settings.control-model.ts +29 -29
- package/src/_models/control-models/index.ts +13 -13
- package/src/_models/control-models/socket-client-service-params.control-model.ts +28 -28
- package/src/_models/control-models/socket-event.control-model.ts +150 -150
- package/src/_models/control-models/socket-presence.control-model.ts +207 -207
- package/src/_models/control-models/socket-server-service-params.control-model.ts +20 -20
- package/src/_models/control-models/system-control.control-model.ts +12 -12
- package/src/_models/index.ts +9 -9
- package/src/_models/interfaces/certification-settings.interface.ts +7 -7
- package/src/_models/interfaces/global-service-settings.interface.ts +45 -45
- package/src/_models/interfaces/global-settings.interface.ts +83 -83
- package/src/_models/interfaces/index.ts +7 -7
- package/src/_models/interfaces/routing-module-settings.interface.ts +20 -20
- package/src/_models/types/db-filter.type.ts +108 -108
- package/src/_models/types/db-update.type.ts +100 -100
- package/src/_models/types/index.ts +5 -5
- package/src/_modules/api-service.index.ts +12 -12
- package/src/_modules/app-extended.index.ts +28 -28
- package/src/_modules/app.index.ts +24 -24
- package/src/_modules/auth.index.ts +7 -7
- package/src/_modules/constants.index.ts +2 -2
- package/src/_modules/controller.index.ts +10 -10
- package/src/_modules/custom-data/custom-data.controller.ts +69 -69
- package/src/_modules/custom-data/custom-data.data-service.ts +20 -20
- package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +23 -23
- package/src/_modules/custom-data/index.ts +6 -6
- package/src/_modules/custom-data-module.index.ts +2 -2
- package/src/_modules/data-service.index.ts +9 -9
- package/src/_modules/email.index.ts +8 -8
- package/src/_modules/enums.index.ts +2 -2
- package/src/_modules/extended.index.ts +8 -8
- package/src/_modules/models.index.ts +2 -2
- package/src/_modules/services.index.ts +2 -2
- package/src/_modules/test/get-test-routing-module.util.ts +23 -23
- package/src/_modules/test/index.ts +5 -5
- package/src/_modules/test/test.controller.ts +115 -115
- package/src/_modules/test-module.index.ts +2 -2
- package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
- package/src/_modules/usage/index.ts +7 -7
- package/src/_modules/usage/usage.controller.ts +120 -120
- package/src/_modules/usage/usage.data-service.ts +172 -172
- package/src/_modules/usage-module.index.ts +2 -2
- package/src/_services/base/data.service.ts +921 -921
- package/src/_services/base/db.service.spec.ts +32 -32
- package/src/_services/base/db.service.ts +1063 -1063
- package/src/_services/base/singleton.service.ts +21 -21
- package/src/_services/core/api.service.ts +453 -453
- package/src/_services/core/auth.service.ts +172 -172
- package/src/_services/core/email.service.ts +678 -678
- package/src/_services/core/global.service.ts +270 -269
- package/src/_services/core/service-collection.service.ts +5 -5
- package/src/_services/index.ts +23 -23
- package/src/_services/route/controller.service.ts +129 -129
- package/src/_services/route/routing-module.service.ts +293 -273
- package/src/_services/server/app-extended.server.spec.ts +76 -76
- package/src/_services/server/app-extended.server.ts +520 -520
- package/src/_services/server/app.server.spec.ts +67 -67
- package/src/_services/server/app.server.ts +1181 -1179
- package/src/_services/shared.service.spec.ts +19 -19
- package/src/_services/shared.static-service.ts +73 -73
- package/src/_services/socket/socket-client.service.ts +236 -235
- package/src/_services/socket/socket-server.service.spec.ts +11 -11
- package/src/_services/socket/socket-server.service.ts +761 -761
- package/src/index.ts +18 -18
- package/tsconfig.json +41 -41
- package/build/tsconfig.tsbuildinfo +0 -1
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
|
|
2
|
-
import { Request, Response } from 'express';
|
|
3
|
-
|
|
4
|
-
import { DynamoFM_Error } from '@futdevpro/fsm-dynamo';
|
|
5
|
-
|
|
6
|
-
import { DynamoNTS_SingletonService } from '../base/singleton.service';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Extend this class as an Auth Service implementation
|
|
10
|
-
*
|
|
11
|
-
* You should use singleton instance getting function by implementing a
|
|
12
|
-
* static getInstance() function
|
|
13
|
-
* @example
|
|
14
|
-
* export class AuthService extends DynamoBEAuthService {
|
|
15
|
-
*
|
|
16
|
-
* static getInstance(): AuthService {
|
|
17
|
-
* return AuthService.getSingletonInstance();
|
|
18
|
-
* }
|
|
19
|
-
* ...
|
|
20
|
-
*/
|
|
21
|
-
export abstract class DynamoNTS_AuthService extends DynamoNTS_SingletonService {
|
|
22
|
-
|
|
23
|
-
readonly serviceName: string = 'AuthService';
|
|
24
|
-
|
|
25
|
-
readonly defaultErrorUserMsg =
|
|
26
|
-
`We encountered an unhandled BackEnd Auth Error, ` +
|
|
27
|
-
`\nplease contact the responsible development team.`;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* this function returns the 'authorization' header from the Request,
|
|
31
|
-
* or throws error, if its missing
|
|
32
|
-
*
|
|
33
|
-
* @param req
|
|
34
|
-
* @returns
|
|
35
|
-
*/
|
|
36
|
-
getTokenFromRequest(req: Request): string {
|
|
37
|
-
const authHeader = req?.headers?.['authorization'];
|
|
38
|
-
|
|
39
|
-
if (!authHeader) {
|
|
40
|
-
throw new DynamoFM_Error({
|
|
41
|
-
status: 401,
|
|
42
|
-
errorCode: 'NTS-AS0-GT0',
|
|
43
|
-
addECToUserMsg: true,
|
|
44
|
-
message: 'AuthHeader missing!',
|
|
45
|
-
userMessage: this.defaultErrorUserMsg,
|
|
46
|
-
issuerService: this.serviceName,
|
|
47
|
-
confidentialContent: { headers: req?.headers },
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const token = authHeader.split(' ')[1];
|
|
52
|
-
|
|
53
|
-
if (!token) {
|
|
54
|
-
throw new DynamoFM_Error({
|
|
55
|
-
status: 401,
|
|
56
|
-
errorCode: 'NTS-AS0-GT1',
|
|
57
|
-
addECToUserMsg: true,
|
|
58
|
-
message: 'Token missing!',
|
|
59
|
-
userMessage: this.defaultErrorUserMsg,
|
|
60
|
-
issuerService: this.serviceName,
|
|
61
|
-
confidentialContent: { headers: req?.headers },
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return token;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* You need to implement a token validation logic,
|
|
70
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
*
|
|
74
|
-
* async authenticateToken(req: Request, res: Response, next: NextFunction) {
|
|
75
|
-
* try {
|
|
76
|
-
* let token = AuthService.getTokenFromRequest(req);
|
|
77
|
-
* token = await AuthService.verifyToken(token);
|
|
78
|
-
*
|
|
79
|
-
* DynamoFM_Log.success('token authenticated');
|
|
80
|
-
* res.setHeader('authorization', `Bearer ${token}`);
|
|
81
|
-
* next();
|
|
82
|
-
* } catch (error) {
|
|
83
|
-
* error = new DynamoFM_Error({
|
|
84
|
-
* status: 401,
|
|
85
|
-
* message: `authenticateToken (WB-ERROR)`,
|
|
86
|
-
* addECToUserMsg: true,
|
|
87
|
-
* userMessage: `Authorization failed.`,
|
|
88
|
-
* error
|
|
89
|
-
* });
|
|
90
|
-
* DynamoFM_Log.error(error?.message, error);
|
|
91
|
-
*
|
|
92
|
-
* res.status(error.status);
|
|
93
|
-
* res.send(error);
|
|
94
|
-
* }
|
|
95
|
-
* }
|
|
96
|
-
* */
|
|
97
|
-
abstract authenticate_token: (req: Request, res: Response) => Promise<void>;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* You need to implement a token validation logic,
|
|
101
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
102
|
-
*
|
|
103
|
-
* @param req
|
|
104
|
-
* @param res
|
|
105
|
-
* @param next
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
*
|
|
109
|
-
* async authenticate_tokenSelf(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
110
|
-
* try {
|
|
111
|
-
* let token = AuthService.getTokenFromRequest(req);
|
|
112
|
-
* token = await AuthService.verifyTokenSelf(token, req?.params?.userId);
|
|
113
|
-
* DynamoFM_Log.success('selftoken authenticated');
|
|
114
|
-
*
|
|
115
|
-
* res.setHeader('authorization', `Bearer ${token}`);
|
|
116
|
-
* next();
|
|
117
|
-
* } catch (error) {
|
|
118
|
-
* error = new DynamoFM_Error({
|
|
119
|
-
* status: 401,
|
|
120
|
-
* message: `authenticate_tokenSelf (WB-ERROR)`,
|
|
121
|
-
* addECToUserMsg: true,
|
|
122
|
-
* userMessage: `Authorization failed.`,
|
|
123
|
-
* error
|
|
124
|
-
* });
|
|
125
|
-
* DynamoFM_Log.error(error?.message, error);
|
|
126
|
-
*
|
|
127
|
-
* res.status(error.status);
|
|
128
|
-
* res.send(error);
|
|
129
|
-
* }
|
|
130
|
-
* }
|
|
131
|
-
*
|
|
132
|
-
*/
|
|
133
|
-
abstract authenticate_tokenSelf: (req: Request, res: Response) => Promise<void>;
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Authenticate Token for Permission to Access UsageData
|
|
137
|
-
* @param req
|
|
138
|
-
* @param res
|
|
139
|
-
* @param next
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* You need to implement a token validation logic,
|
|
143
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
144
|
-
*
|
|
145
|
-
* async authTokenPermAccUsageData(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
146
|
-
* AuthService.authTokenAndPerm(req, res, next, Permission.accessUsageData);
|
|
147
|
-
* }
|
|
148
|
-
*/
|
|
149
|
-
abstract authenticate_tokenPerm_accUsageData: (req: Request, res: Response) => Promise<void>;
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* The DynamoBE System is using this to get issuer, that will be set on DBServices
|
|
153
|
-
* @param req
|
|
154
|
-
*
|
|
155
|
-
* @example
|
|
156
|
-
* getAccountIdFromRequest(req: Request): string {
|
|
157
|
-
* try {
|
|
158
|
-
* const authHeader = req.headers['authorization'];
|
|
159
|
-
* const token = authHeader.split(' ')[1];
|
|
160
|
-
* return this.getAccountIdFromToken(token);
|
|
161
|
-
* } catch {
|
|
162
|
-
* return undefined;
|
|
163
|
-
* }
|
|
164
|
-
* }
|
|
165
|
-
*/
|
|
166
|
-
abstract getIssuerFromRequest(req: Request): string;
|
|
167
|
-
/**
|
|
168
|
-
* Basic Module: UsageModule uses this function
|
|
169
|
-
* @param req
|
|
170
|
-
*/
|
|
171
|
-
abstract getUsernameFromRequest(req: Request): string;
|
|
172
|
-
}
|
|
1
|
+
|
|
2
|
+
import { Request, Response } from 'express';
|
|
3
|
+
|
|
4
|
+
import { DynamoFM_Error } from '@futdevpro/fsm-dynamo';
|
|
5
|
+
|
|
6
|
+
import { DynamoNTS_SingletonService } from '../base/singleton.service';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Extend this class as an Auth Service implementation
|
|
10
|
+
*
|
|
11
|
+
* You should use singleton instance getting function by implementing a
|
|
12
|
+
* static getInstance() function
|
|
13
|
+
* @example
|
|
14
|
+
* export class AuthService extends DynamoBEAuthService {
|
|
15
|
+
*
|
|
16
|
+
* static getInstance(): AuthService {
|
|
17
|
+
* return AuthService.getSingletonInstance();
|
|
18
|
+
* }
|
|
19
|
+
* ...
|
|
20
|
+
*/
|
|
21
|
+
export abstract class DynamoNTS_AuthService extends DynamoNTS_SingletonService {
|
|
22
|
+
|
|
23
|
+
readonly serviceName: string = 'AuthService';
|
|
24
|
+
|
|
25
|
+
readonly defaultErrorUserMsg =
|
|
26
|
+
`We encountered an unhandled BackEnd Auth Error, ` +
|
|
27
|
+
`\nplease contact the responsible development team.`;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* this function returns the 'authorization' header from the Request,
|
|
31
|
+
* or throws error, if its missing
|
|
32
|
+
*
|
|
33
|
+
* @param req
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
getTokenFromRequest(req: Request): string {
|
|
37
|
+
const authHeader = req?.headers?.['authorization'];
|
|
38
|
+
|
|
39
|
+
if (!authHeader) {
|
|
40
|
+
throw new DynamoFM_Error({
|
|
41
|
+
status: 401,
|
|
42
|
+
errorCode: 'NTS-AS0-GT0',
|
|
43
|
+
addECToUserMsg: true,
|
|
44
|
+
message: 'AuthHeader missing!',
|
|
45
|
+
userMessage: this.defaultErrorUserMsg,
|
|
46
|
+
issuerService: this.serviceName,
|
|
47
|
+
confidentialContent: { headers: req?.headers },
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const token = authHeader.split(' ')[1];
|
|
52
|
+
|
|
53
|
+
if (!token) {
|
|
54
|
+
throw new DynamoFM_Error({
|
|
55
|
+
status: 401,
|
|
56
|
+
errorCode: 'NTS-AS0-GT1',
|
|
57
|
+
addECToUserMsg: true,
|
|
58
|
+
message: 'Token missing!',
|
|
59
|
+
userMessage: this.defaultErrorUserMsg,
|
|
60
|
+
issuerService: this.serviceName,
|
|
61
|
+
confidentialContent: { headers: req?.headers },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return token;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* You need to implement a token validation logic,
|
|
70
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
*
|
|
74
|
+
* async authenticateToken(req: Request, res: Response, next: NextFunction) {
|
|
75
|
+
* try {
|
|
76
|
+
* let token = AuthService.getTokenFromRequest(req);
|
|
77
|
+
* token = await AuthService.verifyToken(token);
|
|
78
|
+
*
|
|
79
|
+
* DynamoFM_Log.success('token authenticated');
|
|
80
|
+
* res.setHeader('authorization', `Bearer ${token}`);
|
|
81
|
+
* next();
|
|
82
|
+
* } catch (error) {
|
|
83
|
+
* error = new DynamoFM_Error({
|
|
84
|
+
* status: 401,
|
|
85
|
+
* message: `authenticateToken (WB-ERROR)`,
|
|
86
|
+
* addECToUserMsg: true,
|
|
87
|
+
* userMessage: `Authorization failed.`,
|
|
88
|
+
* error
|
|
89
|
+
* });
|
|
90
|
+
* DynamoFM_Log.error(error?.message, error);
|
|
91
|
+
*
|
|
92
|
+
* res.status(error.status);
|
|
93
|
+
* res.send(error);
|
|
94
|
+
* }
|
|
95
|
+
* }
|
|
96
|
+
* */
|
|
97
|
+
abstract authenticate_token: (req: Request, res: Response) => Promise<void>;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* You need to implement a token validation logic,
|
|
101
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
102
|
+
*
|
|
103
|
+
* @param req
|
|
104
|
+
* @param res
|
|
105
|
+
* @param next
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
*
|
|
109
|
+
* async authenticate_tokenSelf(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
110
|
+
* try {
|
|
111
|
+
* let token = AuthService.getTokenFromRequest(req);
|
|
112
|
+
* token = await AuthService.verifyTokenSelf(token, req?.params?.userId);
|
|
113
|
+
* DynamoFM_Log.success('selftoken authenticated');
|
|
114
|
+
*
|
|
115
|
+
* res.setHeader('authorization', `Bearer ${token}`);
|
|
116
|
+
* next();
|
|
117
|
+
* } catch (error) {
|
|
118
|
+
* error = new DynamoFM_Error({
|
|
119
|
+
* status: 401,
|
|
120
|
+
* message: `authenticate_tokenSelf (WB-ERROR)`,
|
|
121
|
+
* addECToUserMsg: true,
|
|
122
|
+
* userMessage: `Authorization failed.`,
|
|
123
|
+
* error
|
|
124
|
+
* });
|
|
125
|
+
* DynamoFM_Log.error(error?.message, error);
|
|
126
|
+
*
|
|
127
|
+
* res.status(error.status);
|
|
128
|
+
* res.send(error);
|
|
129
|
+
* }
|
|
130
|
+
* }
|
|
131
|
+
*
|
|
132
|
+
*/
|
|
133
|
+
abstract authenticate_tokenSelf: (req: Request, res: Response) => Promise<void>;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Authenticate Token for Permission to Access UsageData
|
|
137
|
+
* @param req
|
|
138
|
+
* @param res
|
|
139
|
+
* @param next
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* You need to implement a token validation logic,
|
|
143
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
144
|
+
*
|
|
145
|
+
* async authTokenPermAccUsageData(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
146
|
+
* AuthService.authTokenAndPerm(req, res, next, Permission.accessUsageData);
|
|
147
|
+
* }
|
|
148
|
+
*/
|
|
149
|
+
abstract authenticate_tokenPerm_accUsageData: (req: Request, res: Response) => Promise<void>;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The DynamoBE System is using this to get issuer, that will be set on DBServices
|
|
153
|
+
* @param req
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* getAccountIdFromRequest(req: Request): string {
|
|
157
|
+
* try {
|
|
158
|
+
* const authHeader = req.headers['authorization'];
|
|
159
|
+
* const token = authHeader.split(' ')[1];
|
|
160
|
+
* return this.getAccountIdFromToken(token);
|
|
161
|
+
* } catch {
|
|
162
|
+
* return undefined;
|
|
163
|
+
* }
|
|
164
|
+
* }
|
|
165
|
+
*/
|
|
166
|
+
abstract getIssuerFromRequest(req: Request): string;
|
|
167
|
+
/**
|
|
168
|
+
* Basic Module: UsageModule uses this function
|
|
169
|
+
* @param req
|
|
170
|
+
*/
|
|
171
|
+
abstract getUsernameFromRequest(req: Request): string;
|
|
172
|
+
}
|