@futdevpro/fsm-dynamo 1.9.29 → 1.9.31

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 (72) hide show
  1. package/build/_collections/constants/global-settings.const.d.ts +3 -0
  2. package/build/_collections/constants/global-settings.const.d.ts.map +1 -0
  3. package/build/_collections/constants/global-settings.const.js +8 -0
  4. package/build/_collections/constants/global-settings.const.js.map +1 -0
  5. package/build/_collections/utils/log.util.d.ts +9 -4
  6. package/build/_collections/utils/log.util.d.ts.map +1 -1
  7. package/build/_collections/utils/log.util.js +19 -18
  8. package/build/_collections/utils/log.util.js.map +1 -1
  9. package/build/_collections/utils/math/math.util.d.ts +2 -0
  10. package/build/_collections/utils/math/math.util.d.ts.map +1 -1
  11. package/build/_collections/utils/math/math.util.js +17 -0
  12. package/build/_collections/utils/math/math.util.js.map +1 -1
  13. package/build/_enums/log-style.enum.d.ts +1 -0
  14. package/build/_enums/log-style.enum.d.ts.map +1 -1
  15. package/build/_enums/log-style.enum.js +1 -0
  16. package/build/_enums/log-style.enum.js.map +1 -1
  17. package/build/_models/control-models/error.control-model.js +1 -1
  18. package/build/_models/control-models/error.control-model.js.map +1 -1
  19. package/build/_models/interfaces/environment/global-log-settings.interface.d.ts +62 -0
  20. package/build/_models/interfaces/environment/global-log-settings.interface.d.ts.map +1 -0
  21. package/build/_models/interfaces/environment/global-log-settings.interface.js +3 -0
  22. package/build/_models/interfaces/environment/global-log-settings.interface.js.map +1 -0
  23. package/build/_models/interfaces/environment/global-settings.interface.d.ts +20 -0
  24. package/build/_models/interfaces/environment/global-settings.interface.d.ts.map +1 -0
  25. package/build/_models/interfaces/environment/global-settings.interface.js +3 -0
  26. package/build/_models/interfaces/environment/global-settings.interface.js.map +1 -0
  27. package/build/_modules/custom-data/_models/cud.data-model.d.ts +1 -1
  28. package/build/_modules/custom-data/_models/cud.data-model.d.ts.map +1 -1
  29. package/build/_modules/custom-data/_models/cud.data-model.js +2 -3
  30. package/build/_modules/custom-data/_models/cud.data-model.js.map +1 -1
  31. package/build/_modules/socket/_enums/sck-event-key.enum.d.ts +15 -0
  32. package/build/_modules/socket/_enums/sck-event-key.enum.d.ts.map +1 -0
  33. package/build/_modules/socket/_enums/sck-event-key.enum.js +19 -0
  34. package/build/_modules/socket/_enums/sck-event-key.enum.js.map +1 -0
  35. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts +61 -0
  36. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts.map +1 -0
  37. package/build/_modules/socket/_models/sck-socket-event.control-model.js +91 -0
  38. package/build/_modules/socket/_models/sck-socket-event.control-model.js.map +1 -0
  39. package/build/_modules/socket/_services/sck-client.service-base.d.ts +47 -0
  40. package/build/_modules/socket/_services/sck-client.service-base.d.ts.map +1 -0
  41. package/build/_modules/socket/_services/sck-client.service-base.js +230 -0
  42. package/build/_modules/socket/_services/sck-client.service-base.js.map +1 -0
  43. package/build/_modules/socket/index.d.ts +3 -0
  44. package/build/_modules/socket/index.d.ts.map +1 -1
  45. package/build/_modules/socket/index.js +5 -0
  46. package/build/_modules/socket/index.js.map +1 -1
  47. package/build/_modules/usage/_models/usg-session.data-model.d.ts +1 -1
  48. package/build/_modules/usage/_models/usg-session.data-model.d.ts.map +1 -1
  49. package/build/_modules/usage/_models/usg-session.data-model.js +2 -2
  50. package/build/_modules/usage/_models/usg-session.data-model.js.map +1 -1
  51. package/build/index.d.ts +3 -0
  52. package/build/index.d.ts.map +1 -1
  53. package/build/index.js +4 -0
  54. package/build/index.js.map +1 -1
  55. package/futdevpro-fsm-dynamo-01.09.31.tgz +0 -0
  56. package/package.json +1 -1
  57. package/src/_collections/constants/global-settings.const.ts +14 -0
  58. package/src/_collections/utils/log.util.ts +21 -24
  59. package/src/_collections/utils/math/math.util.ts +16 -0
  60. package/src/_enums/log-style.enum.ts +1 -0
  61. package/src/_models/control-models/error.control-model.ts +3 -3
  62. package/src/_models/interfaces/environment/global-log-settings.interface.ts +81 -0
  63. package/src/_models/interfaces/environment/global-settings.interface.ts +22 -0
  64. package/src/_modules/custom-data/_models/cud.data-model.ts +1 -2
  65. package/src/_modules/socket/_enums/sck-event-key.enum.ts +18 -0
  66. package/src/_modules/socket/_models/sck-client-params.control-model.ts +3 -1
  67. package/src/_modules/socket/_models/sck-socket-event.control-model.ts +151 -0
  68. package/src/_modules/socket/_services/sck-client.service-base.ts +303 -0
  69. package/src/_modules/socket/index.ts +8 -0
  70. package/src/_modules/usage/_models/usg-session.data-model.ts +1 -1
  71. package/src/index.ts +5 -0
  72. package/futdevpro-fsm-dynamo-01.09.29.tgz +0 -0
@@ -0,0 +1,303 @@
1
+
2
+ import * as SocketIOClient from 'socket.io-client';
3
+
4
+ import {
5
+ DyFM_global_settings
6
+ } from '../../../_collections/constants/global-settings.const';
7
+ import { DyFM_Error } from '../../../_models/control-models/error.control-model';
8
+ import { DyFM_Log } from '../../../_collections/utils/log.util';
9
+ import { DyFM_Array } from '../../../_collections/utils/array.util';
10
+ import { DyFM_delay } from '../../../_collections/utils/utilities.util';
11
+
12
+ import { DyFM_SocketEvent_Key } from '../_enums/sck-event-key.enum';
13
+ import { DyFM_SocketClient_Params } from '../_models/sck-client-params.control-model';
14
+ import { DyFM_SocketEvent } from '../_models/sck-socket-event.control-model';
15
+ import { BehaviorSubject } from 'rxjs';
16
+
17
+ export abstract class DyFM_SocketClient_ServiceBase<T_SubscriptionContent = any> {
18
+
19
+ private _params: DyFM_SocketClient_Params;
20
+ protected get params(): DyFM_SocketClient_Params { return this._params; }
21
+ get name(): string { return this.params.name; }
22
+
23
+ protected socket: SocketIOClient.Socket;
24
+
25
+ protected incomingEvents: DyFM_SocketEvent<any>[];
26
+
27
+ protected _connected_BS: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
28
+ get connected(): boolean { return this._connected_BS.value; }
29
+ readonly connected$ = this._connected_BS.asObservable();
30
+
31
+ private _subscribed_BS: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
32
+ get subscribed(): boolean { return this._subscribed_BS.value; }
33
+ readonly subscribed$ = this._subscribed_BS.asObservable();
34
+
35
+ protected debugLog: boolean = DyFM_global_settings.log_settings.setup;
36
+ protected logFn: boolean = DyFM_global_settings.log_settings.functions;
37
+
38
+ private defaultEvents: DyFM_SocketEvent<any>[] = [
39
+ new DyFM_SocketEvent<any>({
40
+ eventKey: DyFM_SocketEvent_Key.connect,
41
+ tasks: [
42
+ async (): Promise<void> => {
43
+ this._connected_BS.next(true);
44
+
45
+ if (this.subscribed) {
46
+ this._subscribed_BS.next(false);
47
+ }
48
+ DyFM_Log.success(`< > socket-client(${this.params.name}) connected!`);
49
+ },
50
+ ],
51
+ }),
52
+
53
+ new DyFM_SocketEvent<any>({
54
+ eventKey: DyFM_SocketEvent_Key.disconnect,
55
+ tasks: [
56
+ async (): Promise<void> => {
57
+ this._connected_BS.next(false);
58
+
59
+ if (this.subscribed) {
60
+ this._subscribed_BS.next(false);
61
+ }
62
+ DyFM_Log.warn(`<x > socket-client(${this.params.name}) disconnected!`);
63
+
64
+ if (this._params.reconnect) {
65
+ await DyFM_delay(this._params.reconnectDelay);
66
+ this.connectSocket();
67
+ }
68
+ },
69
+ ],
70
+ }),
71
+
72
+ new DyFM_SocketEvent<any>({
73
+ eventKey: DyFM_SocketEvent_Key.subscriptionSuccessful,
74
+ tasks: [
75
+ async (): Promise<void> => {
76
+ DyFM_Log.success(`<=--> socket-client(${this.params.name}) subscription successful!`);
77
+ this._subscribed_BS.next(true);
78
+ },
79
+ ],
80
+ }),
81
+
82
+ new DyFM_SocketEvent<any>({
83
+ eventKey: DyFM_SocketEvent_Key.unsubscribeSuccessful,
84
+ tasks: [
85
+ async (): Promise<void> => {
86
+ DyFM_Log.success(`<x--> socket-client(${this.params.name}) unsubscribe successful!`);
87
+ this._subscribed_BS.next(false);
88
+ },
89
+ ],
90
+ }),
91
+
92
+ new DyFM_SocketEvent<any>({
93
+ eventKey: DyFM_SocketEvent_Key.error,
94
+ tasks: [
95
+ async (content: any): Promise<void> => {
96
+ DyFM_Log.error(`=--> socket-client(${this.params.name}) ERROR!:`, content);
97
+ },
98
+ ],
99
+ }),
100
+ ];
101
+
102
+ protected constructor() {
103
+ this.asyncConstructor().catch((error: any): void => {
104
+ if (
105
+ DyFM_global_settings.log_settings.highDetailedLogs ||
106
+ !(error instanceof DyFM_Error)
107
+ ) {
108
+ DyFM_Log.H_error(
109
+ `socket-client "${this.params?.name}" Service setup failed! ` +
110
+ `(DyFM_SocketClientService constructor catch)`,
111
+ `\n ERROR:`, error
112
+ );
113
+ } else {
114
+ error.logSimple(
115
+ `socket-client "${this.params?.name}" Service setup failed! ` +
116
+ `(DyFM_SocketClientService constructor catch)`
117
+ );
118
+ }
119
+ });
120
+ }
121
+
122
+ async subscribe(): Promise<void> {
123
+ try {
124
+ const subscriptionContent: T_SubscriptionContent = await this.getSubscriptionContent();
125
+
126
+ await this.emitEvent(DyFM_SocketEvent_Key.subscribe, subscriptionContent);
127
+ } catch (error) {
128
+ DyFM_Log.error(`socket-client(${this.params.name}) Service Subscribe failed!`, error);
129
+
130
+ throw error;
131
+ }
132
+ }
133
+
134
+ async unsubscribe(): Promise<void> {
135
+ try {
136
+ await this.emitEvent(DyFM_SocketEvent_Key.unsubscribe, null);
137
+ } catch (error) {
138
+ DyFM_Log.error(`socket-client(${this.params.name}) Service Unsubscribe failed!`, error);
139
+
140
+ throw error;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Emit event to the socket
146
+ * @param eventType event name
147
+ * @param content event content
148
+ */
149
+ protected async emitEvent(eventType: string, content: any): Promise<void> {
150
+ try {
151
+ DyFM_Log.log(`<=-- outgoing socket-client(${this.params.name}) event: ${eventType}`);
152
+ this.socket.emit(eventType, content);
153
+ } catch (error) {
154
+ DyFM_Log.error(
155
+ `socket-client(${this.params.name}) ` +
156
+ `Service Emit Event failed: ${this.params?.name} (${this.params?.port})`, error
157
+ );
158
+
159
+ throw error;
160
+ }
161
+ }
162
+
163
+ private async asyncConstructor(): Promise<void> {
164
+ try {
165
+ this._params = this.getParams();
166
+ this.incomingEvents = this.getIncomingEvents() ?? [];
167
+ this.socket = SocketIOClient.io(
168
+ `${this.params.address}:${this.params.port}`,
169
+ {
170
+ /* reconnection: this.params.reconnect,
171
+ reconnectionDelay: this.params.reconnectDelay, */
172
+ ...this.params.socketOptions,
173
+ }
174
+ );
175
+
176
+ await this.setupDefaultEvents();
177
+
178
+ await this.setupSocketEvents();
179
+
180
+ DyFM_Log.success(`\nsocket-client(${this.params?.name}) Service setup finished`);
181
+
182
+ await this.connectSocket();
183
+ } catch (error) {
184
+ DyFM_Log.error(`socket-client(${this.params?.name}) Service setup failed!`, error);
185
+
186
+ throw new DyFM_Error({
187
+ errorCode: 'FM-SCS-001',
188
+ error: error,
189
+ });
190
+ }
191
+ }
192
+
193
+ private async setupDefaultEvents(): Promise<void> {
194
+ try {
195
+ if (this.logFn) console.log('\nFn:. setupDefaultEvents');
196
+
197
+ this.defaultEvents.forEach((defaultEvent: DyFM_SocketEvent<any>): void => {
198
+ defaultEvent.serviceName = this.params.name;
199
+ const eventDeclared = this.incomingEvents.find(
200
+ (event: DyFM_SocketEvent<any>): boolean => event.eventKey === defaultEvent.eventKey
201
+ );
202
+
203
+ if (!eventDeclared) {
204
+ this.incomingEvents.push(defaultEvent);
205
+ } else {
206
+ eventDeclared.tasks.unshift(...defaultEvent.tasks);
207
+ }
208
+ });
209
+ } catch (error) {
210
+ DyFM_Log.error(
211
+ `socket-client(${this.params.name}) Service Setup Default Events failed, ` +
212
+ `ERROR:`, error
213
+ );
214
+
215
+ throw error;
216
+ }
217
+ }
218
+
219
+ private async setupSocketEvents(): Promise<void> {
220
+ try {
221
+ if (this.debugLog) console.log(`Setup socket-client(${this.params.name}) Events...`);
222
+
223
+ await DyFM_Array.asyncForEach(
224
+ this.incomingEvents,
225
+ async (event: DyFM_SocketEvent<any>): Promise<void> => {
226
+ event.serviceName = this.params.name;
227
+ this.socket.on(event.eventKey, async (content: any): Promise<void> => {
228
+ try {
229
+ await event.executeEventTasks(content, this.params.service);
230
+ } catch (error) {
231
+ DyFM_Log.error(`socket-client(${this.params.name}) Event failed, ERROR:`, error);
232
+ await this.emitEvent(DyFM_SocketEvent_Key.error, error);
233
+ }
234
+ });
235
+ }
236
+ );
237
+ } catch (error) {
238
+ DyFM_Log.error(
239
+ `socket-client(${this.params.name}) Service Setup Socket Events failed, ` +
240
+ `ERROR:`, error
241
+ );
242
+
243
+ throw error;
244
+ }
245
+ }
246
+
247
+ private async connectSocket(): Promise<void> {
248
+ try {
249
+ DyFM_Log.info(
250
+ `< .. > socket-client(${this.params.name}) ` +
251
+ `connecting to ${this.params.address}:${this.params.port} ...`
252
+ );
253
+
254
+ this.socket.connect();
255
+
256
+ if (this.params.reconnect) {
257
+ await this.tryReconnectIfNeeded();
258
+ }
259
+ } catch (error) {
260
+ DyFM_Log.error(
261
+ `socket-client(${this.params.name}) Service Connect Socket failed, ` +
262
+ `ERROR:`, error
263
+ );
264
+
265
+ throw error;
266
+ }
267
+ }
268
+
269
+ private async tryReconnectIfNeeded(): Promise<void> {
270
+ try {
271
+ if (this.logFn) console.log(`\nFn:. tryReconnectIfNeeded`);
272
+ await DyFM_delay(this._params.reconnectDelay);
273
+
274
+ if (!this.connected) {
275
+ await this.connectSocket();
276
+ }
277
+ } catch (error) {
278
+ DyFM_Log.error(
279
+ `socket-client(${this.params.name}) Service Try Reconnect failed, ` +
280
+ `ERROR:`, error
281
+ );
282
+
283
+ throw error;
284
+ }
285
+ }
286
+
287
+ /**
288
+ * You must setup params for the service in this function
289
+ */
290
+ abstract getParams(): DyFM_SocketClient_Params;
291
+
292
+ /**
293
+ * You must setup events and required services in this function
294
+ */
295
+ abstract getIncomingEvents(): DyFM_SocketEvent<any>[];
296
+
297
+ /**
298
+ * You must setup subscription content for the service in this function
299
+ */
300
+ abstract getSubscriptionContent(): Promise<T_SubscriptionContent>;
301
+ }
302
+
303
+
@@ -1,6 +1,14 @@
1
1
 
2
2
 
3
+
4
+ // ENUMS
5
+ export * from './_enums/sck-event-key.enum';
6
+
7
+
3
8
  // MODELS
4
9
  export * from './_models/sck-client-params.control-model';
10
+ export * from './_models/sck-socket-event.control-model';
5
11
 
6
12
 
13
+ // SERVICES
14
+ export * from './_services/sck-client.service-base';
@@ -34,7 +34,7 @@ export class DyFM_UsageSession extends DyFM_Metadata {
34
34
  }
35
35
  }
36
36
 
37
- export const DyFM_usageSessionModel_params: DyFM_DataModel_Params =
37
+ export const DyFM_usageSession_dataParams: DyFM_DataModel_Params =
38
38
  new DyFM_DataModel_Params({
39
39
  dataName: 'usageSession',
40
40
  properties: [
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  // COLLECTIONS
3
3
  // collections/CONSTANTS
4
4
  export * from './_collections/constants/error-defaults.const';
5
+ export * from './_collections/constants/global-settings.const';
5
6
  export * from './_collections/constants/times.const';
6
7
 
7
8
  // collections/UTILS
@@ -57,3 +58,7 @@ export * from './_models/interfaces/random-weight.interface';
57
58
  export * from './_models/interfaces/route-settings.interface';
58
59
  export * from './_models/interfaces/vector2.interface';
59
60
 
61
+ // models/interfaces/ENVIRONMENT
62
+ export * from './_models/interfaces/environment/global-settings.interface';
63
+ export * from './_models/interfaces/environment/global-log-settings.interface';
64
+
Binary file