@futdevpro/nts-dynamo 1.9.15 → 1.9.17

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 (132) hide show
  1. package/.copilot/patterns.json +7 -7
  2. package/.github/workflows/main.yml +221 -0
  3. package/HOWTO.md +15 -15
  4. package/README.md +140 -140
  5. package/build/_constants/mocks/auth-service.mock.d.ts.map +1 -1
  6. package/build/_models/control-models/app-params.control-model.d.ts +1 -0
  7. package/build/_models/control-models/app-params.control-model.d.ts.map +1 -1
  8. package/build/_models/control-models/app-params.control-model.js.map +1 -1
  9. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  10. package/build/_models/control-models/endpoint-params.control-model.js +2 -0
  11. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  12. package/build/_models/control-models/socket-event.control-model.js +1 -1
  13. package/build/_models/interfaces/certification-settings.interface.d.ts +0 -1
  14. package/build/_models/interfaces/certification-settings.interface.d.ts.map +1 -1
  15. package/build/_models/interfaces/global-service-settings.interface.d.ts +1 -1
  16. package/build/_models/interfaces/global-service-settings.interface.d.ts.map +1 -1
  17. package/build/_modules/custom-data/get-custom-data-routing-module.util.js +1 -2
  18. package/build/_modules/custom-data/get-custom-data-routing-module.util.js.map +1 -1
  19. package/build/_modules/test/get-test-routing-module.util.js +1 -2
  20. package/build/_modules/test/get-test-routing-module.util.js.map +1 -1
  21. package/build/_modules/usage/get-usage-routing-module.util.js +1 -2
  22. package/build/_modules/usage/get-usage-routing-module.util.js.map +1 -1
  23. package/build/_services/core/global.service.d.ts.map +1 -1
  24. package/build/_services/core/global.service.js +14 -6
  25. package/build/_services/core/global.service.js.map +1 -1
  26. package/build/_services/route/routing-module.service.d.ts +1 -1
  27. package/build/_services/route/routing-module.service.d.ts.map +1 -1
  28. package/build/_services/route/routing-module.service.js +19 -25
  29. package/build/_services/route/routing-module.service.js.map +1 -1
  30. package/build/_services/server/app.server.d.ts +0 -2
  31. package/build/_services/server/app.server.d.ts.map +1 -1
  32. package/build/_services/server/app.server.js +4 -1
  33. package/build/_services/server/app.server.js.map +1 -1
  34. package/build/_services/socket/socket-client.service.d.ts.map +1 -1
  35. package/build/_services/socket/socket-client.service.js +1 -0
  36. package/build/_services/socket/socket-client.service.js.map +1 -1
  37. package/nodemon.json +17 -15
  38. package/package.json +5 -5
  39. package/src/_constants/global-settings.const.ts +27 -27
  40. package/src/_constants/index.ts +2 -2
  41. package/src/_constants/mocks/app-extended-server.mock.ts +198 -198
  42. package/src/_constants/mocks/app-params.mock.ts +9 -9
  43. package/src/_constants/mocks/app-server.mock.ts +185 -185
  44. package/src/_constants/mocks/auth-service.mock.ts +28 -28
  45. package/src/_constants/mocks/controller.mock.ts +16 -16
  46. package/src/_constants/mocks/data-model.mock.ts +83 -83
  47. package/src/_constants/mocks/email-service-collection.mock.ts +13 -13
  48. package/src/_constants/mocks/email-service.mock.ts +19 -19
  49. package/src/_constants/mocks/email-template.mock.html +14 -14
  50. package/src/_constants/mocks/endpoint.mock.ts +90 -90
  51. package/src/_constants/mocks/socket-client.mock.ts +43 -43
  52. package/src/_constants/mocks/socket-server.mock.ts +43 -43
  53. package/src/_enums/data-model-type.enum.ts +14 -14
  54. package/src/_enums/data-service-function.enum.ts +15 -15
  55. package/src/_enums/http/http-call-type.enum.ts +12 -12
  56. package/src/_enums/http/http-response-type.enum.ts +7 -7
  57. package/src/_enums/http/socket-event-type.enum.ts +18 -18
  58. package/src/_enums/index.ts +13 -13
  59. package/src/_enums/predefined-data-types.enum.ts +27 -27
  60. package/src/_enums/route-security.enum.ts +12 -12
  61. package/src/_enums/socket-security.enum.ts +11 -11
  62. package/src/_models/control-models/api-call-params.control-model.ts +126 -126
  63. package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
  64. package/src/_models/control-models/app-params.control-model.ts +46 -45
  65. package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
  66. package/src/_models/control-models/endpoint-params.control-model.ts +309 -307
  67. package/src/_models/control-models/http-settings.control-model.ts +29 -29
  68. package/src/_models/control-models/index.ts +13 -13
  69. package/src/_models/control-models/socket-client-service-params.control-model.ts +28 -28
  70. package/src/_models/control-models/socket-event.control-model.ts +150 -150
  71. package/src/_models/control-models/socket-presence.control-model.ts +207 -207
  72. package/src/_models/control-models/socket-server-service-params.control-model.ts +20 -20
  73. package/src/_models/control-models/system-control.control-model.ts +12 -12
  74. package/src/_models/index.ts +9 -9
  75. package/src/_models/interfaces/certification-settings.interface.ts +7 -7
  76. package/src/_models/interfaces/global-service-settings.interface.ts +45 -45
  77. package/src/_models/interfaces/global-settings.interface.ts +83 -83
  78. package/src/_models/interfaces/index.ts +7 -7
  79. package/src/_models/interfaces/routing-module-settings.interface.ts +20 -20
  80. package/src/_models/types/db-filter.type.ts +108 -108
  81. package/src/_models/types/db-update.type.ts +100 -100
  82. package/src/_models/types/index.ts +5 -5
  83. package/src/_modules/api-service.index.ts +12 -12
  84. package/src/_modules/app-extended.index.ts +28 -28
  85. package/src/_modules/app.index.ts +24 -24
  86. package/src/_modules/auth.index.ts +7 -7
  87. package/src/_modules/constants.index.ts +2 -2
  88. package/src/_modules/controller.index.ts +10 -10
  89. package/src/_modules/custom-data/custom-data.controller.ts +69 -69
  90. package/src/_modules/custom-data/custom-data.data-service.ts +20 -20
  91. package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +23 -23
  92. package/src/_modules/custom-data/index.ts +6 -6
  93. package/src/_modules/custom-data-module.index.ts +2 -2
  94. package/src/_modules/data-service.index.ts +9 -9
  95. package/src/_modules/email.index.ts +8 -8
  96. package/src/_modules/enums.index.ts +2 -2
  97. package/src/_modules/extended.index.ts +8 -8
  98. package/src/_modules/models.index.ts +2 -2
  99. package/src/_modules/services.index.ts +2 -2
  100. package/src/_modules/test/get-test-routing-module.util.ts +23 -23
  101. package/src/_modules/test/index.ts +5 -5
  102. package/src/_modules/test/test.controller.ts +115 -115
  103. package/src/_modules/test-module.index.ts +2 -2
  104. package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
  105. package/src/_modules/usage/index.ts +7 -7
  106. package/src/_modules/usage/usage.controller.ts +120 -120
  107. package/src/_modules/usage/usage.data-service.ts +172 -172
  108. package/src/_modules/usage-module.index.ts +2 -2
  109. package/src/_services/base/data.service.ts +921 -921
  110. package/src/_services/base/db.service.spec.ts +32 -32
  111. package/src/_services/base/db.service.ts +1063 -1063
  112. package/src/_services/base/singleton.service.ts +21 -21
  113. package/src/_services/core/api.service.ts +453 -453
  114. package/src/_services/core/auth.service.ts +172 -172
  115. package/src/_services/core/email.service.ts +678 -678
  116. package/src/_services/core/global.service.ts +275 -269
  117. package/src/_services/core/service-collection.service.ts +5 -5
  118. package/src/_services/index.ts +23 -23
  119. package/src/_services/route/controller.service.ts +129 -129
  120. package/src/_services/route/routing-module.service.ts +293 -273
  121. package/src/_services/server/app-extended.server.spec.ts +76 -76
  122. package/src/_services/server/app-extended.server.ts +520 -520
  123. package/src/_services/server/app.server.spec.ts +67 -67
  124. package/src/_services/server/app.server.ts +1181 -1179
  125. package/src/_services/shared.service.spec.ts +19 -19
  126. package/src/_services/shared.static-service.ts +73 -73
  127. package/src/_services/socket/socket-client.service.ts +236 -235
  128. package/src/_services/socket/socket-server.service.spec.ts +11 -11
  129. package/src/_services/socket/socket-server.service.ts +761 -761
  130. package/src/index.ts +18 -18
  131. package/tsconfig.json +41 -41
  132. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,172 +1,172 @@
1
-
2
- import { Request } from 'express';
3
- import { DynamoFM_Error, DynamoFM_Time, DynamoFM_RelativeDate } from '@futdevpro/fsm-dynamo';
4
- import { DynamoFM_UsageSession, DynamoFM_usageSessionModel_params, DynamoFM_UsageData,
5
- DynamoFM_DailyUsageData } from '@futdevpro/fsm-dynamo/usage-module';
6
-
7
- import { DynamoNTS_DataService } from '../../_services/base/data.service';
8
- import { DynamoNTS_Shared } from '../../_services/shared.static-service';
9
-
10
- export class DynamoNTS_Usage_DataService extends DynamoNTS_DataService<DynamoFM_UsageSession> {
11
- usageData: DynamoFM_UsageData[] = [];
12
- simplifiedDailyUsage: DynamoFM_DailyUsageData[] = [];
13
-
14
- constructor(
15
- set?: {
16
- usageSession?: DynamoFM_UsageSession,
17
- usageData?: DynamoFM_UsageData[],
18
- issuer?: string,
19
- }
20
- ) {
21
- super(
22
- new DynamoFM_UsageSession(set?.usageSession),
23
- DynamoFM_usageSessionModel_params,
24
- set?.issuer
25
- );
26
- this.usageData = set?.usageData ? set?.usageData : [];
27
- }
28
-
29
- getLocationDataFromRequest(req: Request): void {
30
- try {
31
- this.data.address = DynamoNTS_Shared.getIpFromRequest(req);
32
- this.data.locationData = DynamoNTS_Shared.getLocationDataByRequest(req);
33
-
34
- /* console.log(`...getLocationDataFromRequest... ip: ${this.data.address}`, this.data.locationData); */
35
- } catch (error) {
36
- throw new DynamoFM_Error({
37
- ...this.getDefaultErrorSettings('getLocationDataFromRequest', error),
38
-
39
- errorCode: 'NTS-US0-GLD',
40
- userMessage: `We were unable to deep analyze your request.`,
41
- });
42
- }
43
- }
44
-
45
- async getUsage(range: DynamoFM_RelativeDate = DynamoFM_RelativeDate.lastWeek): Promise<void> {
46
- try {
47
- await this.dataDBService.find({
48
- sessionStart: { $gte: DynamoFM_Time.getDateByRelativeDate(range) },
49
- }).then((res: DynamoFM_UsageSession[]): void => {
50
- this.dataList = res;
51
- });
52
- this.simplifiedDailyUsage = [];
53
- this.dataList.forEach((session: DynamoFM_UsageSession): void => {
54
- let dateIndex = this.simplifiedDailyUsage.findIndex(
55
- (dailyData: DynamoFM_DailyUsageData): boolean => dailyData.date === session.date
56
- );
57
-
58
- if (-1 < dateIndex) {
59
- this.simplifiedDailyUsage[dateIndex].visitations.push(session);
60
- } else {
61
- const newUsageSimple = new DynamoFM_DailyUsageData({
62
- date: session.date,
63
- visitations: [ session ],
64
- });
65
-
66
- this.simplifiedDailyUsage.push(newUsageSimple);
67
- dateIndex = this.simplifiedDailyUsage.length - 1;
68
- }
69
-
70
- if (session?.locationData?.country) {
71
- if (session.locationData.country === 'HU') {
72
- this.simplifiedDailyUsage[dateIndex].visitorsHun++;
73
- } else {
74
- this.simplifiedDailyUsage[dateIndex].visitorsElse++;
75
- }
76
- }
77
- this.simplifiedDailyUsage[dateIndex].totalVisitTime += session.totalSessionTime;
78
- this.simplifiedDailyUsage[dateIndex].averageVisitTime = Math.round(
79
- (this.simplifiedDailyUsage[dateIndex].totalVisitTime /
80
- this.simplifiedDailyUsage[dateIndex].visitations.length) * 100
81
- ) / 100;
82
- });
83
-
84
- this.simplifiedDailyUsage.sort(
85
- (a: DynamoFM_DailyUsageData, b: DynamoFM_DailyUsageData): number =>
86
- +new Date(b.date) - +new Date(a.date)
87
- );
88
- this.simplifiedDailyUsage.forEach((daily: DynamoFM_DailyUsageData): void => {
89
- daily.visitations.sort(
90
- (a: DynamoFM_UsageSession, b: DynamoFM_UsageSession): number =>
91
- +a.sessionStart - +b.sessionStart
92
- );
93
- });
94
-
95
- } catch (error) {
96
- throw new DynamoFM_Error({
97
- ...this.getDefaultErrorSettings('getLastWeekUsage', error),
98
-
99
- errorCode: 'NTS-US0-GLW',
100
- userMessage: `We've failed to collect last week's usage data.`,
101
- });
102
- }
103
- }
104
-
105
- async updateUsageData(req: Request): Promise<void> {
106
- try {
107
- await this.getDataById();
108
- this.data.usageData = this.usageData;
109
- let totalTime = 0;
110
-
111
- this.data.usageData.forEach((data: DynamoFM_UsageData): void => {
112
- totalTime += data.timeSpentOnPage;
113
- });
114
-
115
- if (!this.data.locationData) {
116
- this.getLocationDataFromRequest(req);
117
- }
118
- this.data.totalSessionTime = totalTime;
119
- await this.saveData();
120
- } catch (error) {
121
- throw new DynamoFM_Error({
122
- ...this.getDefaultErrorSettings('updateUsageData', error),
123
-
124
- errorCode: 'NTS-US0-UU0',
125
- userMessage: `The attempt to update Usage Data was unsuccessful.`,
126
- });
127
- }
128
- }
129
-
130
- async closeSession(req: Request): Promise<void> {
131
- try {
132
- await this.getDataById();
133
- this.data.sessionEnd = new Date();
134
- const newTotalSessionTime = +this.data.sessionEnd - +this.data.sessionStart;
135
-
136
- this.data.usageData[this.data.usageData.length - 1].timeSpentOnPage =
137
- newTotalSessionTime - this.data.totalSessionTime;
138
-
139
- if (!this.data.locationData) {
140
- this.getLocationDataFromRequest(req);
141
- }
142
- this.data.usageData.sort(
143
- (a: DynamoFM_UsageData, b: DynamoFM_UsageData): number => +a.opened - +b.opened
144
- );
145
- this.data.totalSessionTime = newTotalSessionTime;
146
- await this.saveData();
147
- } catch (error) {
148
- throw new DynamoFM_Error({
149
- ...this.getDefaultErrorSettings('closeSession', error),
150
-
151
- errorCode: 'NTS-US0-CS0',
152
- userMessage: `The attempt to close Usage Session was unsuccessful.`,
153
- });
154
- }
155
- }
156
-
157
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
158
- private getDefaultErrorSettings(
159
- fnName: string,
160
- error: Error | DynamoFM_Error
161
- )/* : DynamoFM_ErrorSettings */ {
162
- return {
163
- status: (error as DynamoFM_Error)?.___status ?? 417,
164
- message: (error as Error)?.message ?? `${fnName} was UNSUCCESFUL (NTS; ${this.serviceName})`,
165
- addECToUserMsg: true,
166
- userMessage: this.defaultErrorUserMsg,
167
- issuer: this.issuer,
168
- issuerService: this.serviceName,
169
- error: error,
170
- };
171
- }
172
- }
1
+
2
+ import { Request } from 'express';
3
+ import { DynamoFM_Error, DynamoFM_Time, DynamoFM_RelativeDate } from '@futdevpro/fsm-dynamo';
4
+ import { DynamoFM_UsageSession, DynamoFM_usageSessionModel_params, DynamoFM_UsageData,
5
+ DynamoFM_DailyUsageData } from '@futdevpro/fsm-dynamo/usage-module';
6
+
7
+ import { DynamoNTS_DataService } from '../../_services/base/data.service';
8
+ import { DynamoNTS_Shared } from '../../_services/shared.static-service';
9
+
10
+ export class DynamoNTS_Usage_DataService extends DynamoNTS_DataService<DynamoFM_UsageSession> {
11
+ usageData: DynamoFM_UsageData[] = [];
12
+ simplifiedDailyUsage: DynamoFM_DailyUsageData[] = [];
13
+
14
+ constructor(
15
+ set?: {
16
+ usageSession?: DynamoFM_UsageSession,
17
+ usageData?: DynamoFM_UsageData[],
18
+ issuer?: string,
19
+ }
20
+ ) {
21
+ super(
22
+ new DynamoFM_UsageSession(set?.usageSession),
23
+ DynamoFM_usageSessionModel_params,
24
+ set?.issuer
25
+ );
26
+ this.usageData = set?.usageData ? set?.usageData : [];
27
+ }
28
+
29
+ getLocationDataFromRequest(req: Request): void {
30
+ try {
31
+ this.data.address = DynamoNTS_Shared.getIpFromRequest(req);
32
+ this.data.locationData = DynamoNTS_Shared.getLocationDataByRequest(req);
33
+
34
+ /* console.log(`...getLocationDataFromRequest... ip: ${this.data.address}`, this.data.locationData); */
35
+ } catch (error) {
36
+ throw new DynamoFM_Error({
37
+ ...this.getDefaultErrorSettings('getLocationDataFromRequest', error),
38
+
39
+ errorCode: 'NTS-US0-GLD',
40
+ userMessage: `We were unable to deep analyze your request.`,
41
+ });
42
+ }
43
+ }
44
+
45
+ async getUsage(range: DynamoFM_RelativeDate = DynamoFM_RelativeDate.lastWeek): Promise<void> {
46
+ try {
47
+ await this.dataDBService.find({
48
+ sessionStart: { $gte: DynamoFM_Time.getDateByRelativeDate(range) },
49
+ }).then((res: DynamoFM_UsageSession[]): void => {
50
+ this.dataList = res;
51
+ });
52
+ this.simplifiedDailyUsage = [];
53
+ this.dataList.forEach((session: DynamoFM_UsageSession): void => {
54
+ let dateIndex = this.simplifiedDailyUsage.findIndex(
55
+ (dailyData: DynamoFM_DailyUsageData): boolean => dailyData.date === session.date
56
+ );
57
+
58
+ if (-1 < dateIndex) {
59
+ this.simplifiedDailyUsage[dateIndex].visitations.push(session);
60
+ } else {
61
+ const newUsageSimple = new DynamoFM_DailyUsageData({
62
+ date: session.date,
63
+ visitations: [ session ],
64
+ });
65
+
66
+ this.simplifiedDailyUsage.push(newUsageSimple);
67
+ dateIndex = this.simplifiedDailyUsage.length - 1;
68
+ }
69
+
70
+ if (session?.locationData?.country) {
71
+ if (session.locationData.country === 'HU') {
72
+ this.simplifiedDailyUsage[dateIndex].visitorsHun++;
73
+ } else {
74
+ this.simplifiedDailyUsage[dateIndex].visitorsElse++;
75
+ }
76
+ }
77
+ this.simplifiedDailyUsage[dateIndex].totalVisitTime += session.totalSessionTime;
78
+ this.simplifiedDailyUsage[dateIndex].averageVisitTime = Math.round(
79
+ (this.simplifiedDailyUsage[dateIndex].totalVisitTime /
80
+ this.simplifiedDailyUsage[dateIndex].visitations.length) * 100
81
+ ) / 100;
82
+ });
83
+
84
+ this.simplifiedDailyUsage.sort(
85
+ (a: DynamoFM_DailyUsageData, b: DynamoFM_DailyUsageData): number =>
86
+ +new Date(b.date) - +new Date(a.date)
87
+ );
88
+ this.simplifiedDailyUsage.forEach((daily: DynamoFM_DailyUsageData): void => {
89
+ daily.visitations.sort(
90
+ (a: DynamoFM_UsageSession, b: DynamoFM_UsageSession): number =>
91
+ +a.sessionStart - +b.sessionStart
92
+ );
93
+ });
94
+
95
+ } catch (error) {
96
+ throw new DynamoFM_Error({
97
+ ...this.getDefaultErrorSettings('getLastWeekUsage', error),
98
+
99
+ errorCode: 'NTS-US0-GLW',
100
+ userMessage: `We've failed to collect last week's usage data.`,
101
+ });
102
+ }
103
+ }
104
+
105
+ async updateUsageData(req: Request): Promise<void> {
106
+ try {
107
+ await this.getDataById();
108
+ this.data.usageData = this.usageData;
109
+ let totalTime = 0;
110
+
111
+ this.data.usageData.forEach((data: DynamoFM_UsageData): void => {
112
+ totalTime += data.timeSpentOnPage;
113
+ });
114
+
115
+ if (!this.data.locationData) {
116
+ this.getLocationDataFromRequest(req);
117
+ }
118
+ this.data.totalSessionTime = totalTime;
119
+ await this.saveData();
120
+ } catch (error) {
121
+ throw new DynamoFM_Error({
122
+ ...this.getDefaultErrorSettings('updateUsageData', error),
123
+
124
+ errorCode: 'NTS-US0-UU0',
125
+ userMessage: `The attempt to update Usage Data was unsuccessful.`,
126
+ });
127
+ }
128
+ }
129
+
130
+ async closeSession(req: Request): Promise<void> {
131
+ try {
132
+ await this.getDataById();
133
+ this.data.sessionEnd = new Date();
134
+ const newTotalSessionTime = +this.data.sessionEnd - +this.data.sessionStart;
135
+
136
+ this.data.usageData[this.data.usageData.length - 1].timeSpentOnPage =
137
+ newTotalSessionTime - this.data.totalSessionTime;
138
+
139
+ if (!this.data.locationData) {
140
+ this.getLocationDataFromRequest(req);
141
+ }
142
+ this.data.usageData.sort(
143
+ (a: DynamoFM_UsageData, b: DynamoFM_UsageData): number => +a.opened - +b.opened
144
+ );
145
+ this.data.totalSessionTime = newTotalSessionTime;
146
+ await this.saveData();
147
+ } catch (error) {
148
+ throw new DynamoFM_Error({
149
+ ...this.getDefaultErrorSettings('closeSession', error),
150
+
151
+ errorCode: 'NTS-US0-CS0',
152
+ userMessage: `The attempt to close Usage Session was unsuccessful.`,
153
+ });
154
+ }
155
+ }
156
+
157
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
158
+ private getDefaultErrorSettings(
159
+ fnName: string,
160
+ error: Error | DynamoFM_Error
161
+ )/* : DynamoFM_ErrorSettings */ {
162
+ return {
163
+ status: (error as DynamoFM_Error)?.___status ?? 417,
164
+ message: (error as Error)?.message ?? `${fnName} was UNSUCCESFUL (NTS; ${this.serviceName})`,
165
+ addECToUserMsg: true,
166
+ userMessage: this.defaultErrorUserMsg,
167
+ issuer: this.issuer,
168
+ issuerService: this.serviceName,
169
+ error: error,
170
+ };
171
+ }
172
+ }
@@ -1,2 +1,2 @@
1
-
2
- export * from './usage';
1
+
2
+ export * from './usage';