@futdevpro/nts-dynamo 1.11.30 → 1.11.32

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 (79) hide show
  1. package/.github/workflows/main.yml +1 -1
  2. package/build/_models/control-models/endpoint-params.control-model.d.ts +1 -1
  3. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  4. package/build/_models/control-models/endpoint-params.control-model.js +9 -9
  5. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  6. package/build/_modules/discord-assistant/_services/dias-main.control-service.d.ts.map +1 -1
  7. package/build/_modules/discord-assistant/_services/dias-main.control-service.js.map +1 -1
  8. package/build/_modules/discord-assistant-voiced/index.js +2 -2
  9. package/build/_modules/discord-assistant-voiced/index.js.map +1 -1
  10. package/build/_modules/discord-bot/_services/dibo-main.control-service.js +1 -1
  11. package/build/_modules/discord-bot/_services/dibo-main.control-service.js.map +1 -1
  12. package/build/_modules/discord-bot/_services/dibo-routines.control-service.js.map +1 -1
  13. package/build/_modules/discord-bot/index.js +1 -1
  14. package/build/_modules/discord-bot/index.js.map +1 -1
  15. package/build/_modules/oauth2/index.js +1 -1
  16. package/build/_modules/oauth2/index.js.map +1 -1
  17. package/build/_modules/open-ai/_collections/oai-chunking.util.d.ts.map +1 -1
  18. package/build/_modules/open-ai/_collections/oai-chunking.util.js +1 -1
  19. package/build/_modules/open-ai/_collections/oai-chunking.util.js.map +1 -1
  20. package/build/_modules/open-ai/_services/oai-chunk.service-base.d.ts.map +1 -1
  21. package/build/_modules/open-ai/_services/oai-chunk.service-base.js +1 -1
  22. package/build/_modules/open-ai/_services/oai-chunk.service-base.js.map +1 -1
  23. package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js +10 -10
  24. package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js.map +1 -1
  25. package/build/_modules/open-ai/_services/oai-llm.service-base.js +6 -6
  26. package/build/_modules/open-ai/_services/oai-vector-data.service.d.ts.map +1 -1
  27. package/build/_modules/open-ai/_services/oai-vector-data.service.js +2 -2
  28. package/build/_modules/open-ai/_services/oai-vector-data.service.js.map +1 -1
  29. package/build/_modules/open-ai/index.d.ts.map +1 -1
  30. package/build/_modules/open-ai/index.js +2 -3
  31. package/build/_modules/open-ai/index.js.map +1 -1
  32. package/build/_modules/server/errors/errors.control-service.d.ts.map +1 -1
  33. package/build/_modules/server/errors/errors.data-service.d.ts.map +1 -1
  34. package/build/_modules/server/errors/errors.data-service.js +3 -3
  35. package/build/_modules/server/errors/errors.data-service.js.map +1 -1
  36. package/build/_modules/socket/_services/socket-client.service.js +2 -2
  37. package/build/_modules/socket/_services/socket-client.service.js.map +1 -1
  38. package/build/_modules/socket/app-extended.server.d.ts.map +1 -1
  39. package/build/_modules/socket/app-extended.server.js +2 -2
  40. package/build/_modules/socket/app-extended.server.js.map +1 -1
  41. package/build/_modules/socket/app-extended.server.spec.js +19 -19
  42. package/build/_modules/socket/app-extended.server.spec.js.map +1 -1
  43. package/build/_modules/socket/index.js +2 -2
  44. package/build/_modules/socket/index.js.map +1 -1
  45. package/build/_services/route/routing-module.service.d.ts +4 -3
  46. package/build/_services/route/routing-module.service.d.ts.map +1 -1
  47. package/build/_services/route/routing-module.service.js +2 -0
  48. package/build/_services/route/routing-module.service.js.map +1 -1
  49. package/build/_services/server/app.server.d.ts.map +1 -1
  50. package/build/_services/server/app.server.js +9 -7
  51. package/build/_services/server/app.server.js.map +1 -1
  52. package/build/_services/server/app.server.spec.js +10 -10
  53. package/build/_services/server/app.server.spec.js.map +1 -1
  54. package/build/_services/shared.static-service.d.ts +2 -2
  55. package/build/_services/shared.static-service.js +1 -1
  56. package/package.json +3 -3
  57. package/src/_models/control-models/endpoint-params.control-model.ts +10 -10
  58. package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +1 -2
  59. package/src/_modules/discord-assistant-voiced/index.ts +2 -2
  60. package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +2 -2
  61. package/src/_modules/discord-bot/_services/dibo-routines.control-service.ts +1 -1
  62. package/src/_modules/discord-bot/index.ts +1 -1
  63. package/src/_modules/oauth2/index.ts +1 -1
  64. package/src/_modules/open-ai/_collections/oai-chunking.util.ts +2 -2
  65. package/src/_modules/open-ai/_services/oai-chunk.service-base.ts +2 -2
  66. package/src/_modules/open-ai/_services/oai-llm-chat.service-base.ts +11 -11
  67. package/src/_modules/open-ai/_services/oai-llm.service-base.ts +7 -7
  68. package/src/_modules/open-ai/_services/oai-vector-data.service.ts +3 -4
  69. package/src/_modules/open-ai/index.ts +2 -3
  70. package/src/_modules/server/errors/errors.control-service.ts +1 -1
  71. package/src/_modules/server/errors/errors.data-service.ts +4 -4
  72. package/src/_modules/socket/_services/socket-client.service.ts +3 -3
  73. package/src/_modules/socket/app-extended.server.spec.ts +20 -20
  74. package/src/_modules/socket/app-extended.server.ts +3 -4
  75. package/src/_modules/socket/index.ts +2 -2
  76. package/src/_services/route/routing-module.service.ts +9 -4
  77. package/src/_services/server/app.server.spec.ts +11 -12
  78. package/src/_services/server/app.server.ts +14 -11
  79. package/src/_services/shared.static-service.ts +2 -2
@@ -1,7 +1,7 @@
1
1
  import { OpenAI } from 'openai';
2
2
 
3
3
  import { DyFM_OpenAI_Settings, DyFM_OpenAIModel, DyFM_GPTCall_Settings } from '@futdevpro/fsm-dynamo/open-ai';
4
- import { DyFM_AnyError, DyFM_clone, DyFM_Error, DyFM_Error_Settings, DyFM_getLocalStackLocation, DyFM_Log, DyFM_notNull, DyFM_Shared } from '@futdevpro/fsm-dynamo';
4
+ import { DyFM_AnyError, DyFM_Error, DyFM_Error_Settings, DyFM_getLocalStackLocation, DyFM_Log, DyFM_notNull, DyFM_Object } from '@futdevpro/fsm-dynamo';
5
5
 
6
6
  import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
7
7
  import { DyNTS_OAI_GPT_Message } from '../_models/interfaces/oai-gpt-message.interface';
@@ -177,7 +177,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
177
177
 
178
178
  const answer = await this.getQuestionAnswerInConversation(set);
179
179
 
180
- return DyFM_Shared.safeParseJSON<T>(answer);
180
+ return DyFM_Object.safeParseJSON<T>(answer);
181
181
  }
182
182
  askRequestSelectInConversation: typeof this.requestSelectInConversation = this.requestSelectInConversation;
183
183
 
@@ -249,7 +249,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
249
249
 
250
250
  const answer = await this.getQuestionAnswerInConversation(set);
251
251
 
252
- return DyFM_Shared.safeParseList<T[]>(answer);
252
+ return DyFM_Object.safeParseList<T[]>(answer);
253
253
  }
254
254
  askRequestMultipleSelectInConversation: typeof this.requestMultipleSelectInConversation = this.requestMultipleSelectInConversation;
255
255
 
@@ -279,7 +279,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
279
279
 
280
280
  const answer = await this.getQuestionAnswerInConversation(set);
281
281
 
282
- return DyFM_Shared.safeParseJSON<T>(answer);
282
+ return DyFM_Object.safeParseJSON<T>(answer);
283
283
  }
284
284
  askJsonQuestionInConversation: typeof this.jsonQuestionInConversation = this.jsonQuestionInConversation;
285
285
 
@@ -314,7 +314,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
314
314
 
315
315
  const answer = await this.getQuestionAnswerInConversation(set);
316
316
 
317
- return DyFM_Shared.safeParseJSON<T>(answer);
317
+ return DyFM_Object.safeParseJSON<T>(answer);
318
318
  }
319
319
  askJsonQuestionWithKeysDescriptionInConversation: typeof this.jsonQuestionWithKeysDescriptionInConversation = this.jsonQuestionWithKeysDescriptionInConversation;
320
320
 
@@ -349,7 +349,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
349
349
 
350
350
  const answer = await this.getQuestionAnswerInConversation(set);
351
351
 
352
- return DyFM_Shared.safeParseJSON<T>(answer);
352
+ return DyFM_Object.safeParseJSON<T>(answer);
353
353
  }
354
354
  askJsonQuestionWithExactKeysInConversation: typeof this.jsonQuestionWithExactKeysInConversation = this.jsonQuestionWithExactKeysInConversation;
355
355
 
@@ -379,7 +379,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
379
379
 
380
380
  const answer = await this.getQuestionAnswerInConversation(set);
381
381
 
382
- return DyFM_Shared.safeParseList(answer);
382
+ return DyFM_Object.safeParseList(answer);
383
383
  }
384
384
  askListQuestionInConversation: typeof this.listQuestionInConversation = this.listQuestionInConversation;
385
385
 
@@ -449,7 +449,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
449
449
  }
450
450
  ): Promise<string> {
451
451
  if (set.newMessage) {
452
- set.conversation = DyFM_clone(set.conversation);
452
+ set.conversation = DyFM_Object.clone(set.conversation);
453
453
 
454
454
  set.conversation.push({
455
455
  role: DyNTS_OAI_GPT_Message_Role.user,
@@ -539,7 +539,7 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
539
539
  }
540
540
  ): DyNTS_OAI_GPT_Message[] {
541
541
  try {
542
- const clonedConversation = DyFM_clone(set.conversation);
542
+ const clonedConversation = DyFM_Object.clone(set.conversation);
543
543
  const systemMessages = clonedConversation.filter(
544
544
  message => message.role === DyNTS_OAI_GPT_Message_Role.system
545
545
  );
@@ -574,9 +574,9 @@ export class DyNTS_OAI_LLMChat_ServiceBase extends DyNTS_OAI_LLM_ServiceBase {
574
574
 
575
575
  if (!clonedConversation.length) {
576
576
  DyFM_Log.error('No conversation messages (left)', {
577
- /* conversation: DyFM_clone(conversation), */
577
+ /* conversation: DyFM_Object.clone(conversation), */
578
578
  conversationLength: set.conversation.length,
579
- clonedConversation: DyFM_clone(clonedConversation),
579
+ clonedConversation: DyFM_Object.clone(clonedConversation),
580
580
  });
581
581
  throw new Error('No conversation messages (left)');
582
582
  }
@@ -1,7 +1,7 @@
1
1
  import { OpenAI } from 'openai';
2
2
 
3
3
  import { DyFM_OpenAI_Settings, DyFM_OpenAIModel, DyFM_GPTCall_Settings } from '@futdevpro/fsm-dynamo/open-ai';
4
- import { DyFM_AnyError, DyFM_Error, DyFM_Error_Settings, DyFM_Log, DyFM_notNull, DyFM_Shared } from '@futdevpro/fsm-dynamo';
4
+ import { DyFM_AnyError, DyFM_Error, DyFM_Error_Settings, DyFM_Log, DyFM_notNull, DyFM_Object } from '@futdevpro/fsm-dynamo';
5
5
 
6
6
  import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
7
7
  import { DyNTS_OAI_GPT_Message } from '../_models/interfaces/oai-gpt-message.interface';
@@ -193,7 +193,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
193
193
 
194
194
  const answer = await this.askQuestion(set);
195
195
 
196
- return DyFM_Shared.safeParseJSON<T>(answer);
196
+ return DyFM_Object.safeParseJSON<T>(answer);
197
197
  }
198
198
  /** the exact same as {@link requestSelect} */
199
199
  selectRequest = this.requestSelect;
@@ -263,7 +263,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
263
263
 
264
264
  const answer = await this.askQuestion(set);
265
265
 
266
- return DyFM_Shared.safeParseList<T[]>(answer);
266
+ return DyFM_Object.safeParseList<T[]>(answer);
267
267
  }
268
268
  /** the exact same as {@link requestMultipleSelect} */
269
269
  multipleSelectRequest = this.requestMultipleSelect;
@@ -291,7 +291,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
291
291
 
292
292
  const answer = await this.askQuestion(set);
293
293
 
294
- return DyFM_Shared.safeParseJSON<T>(answer);
294
+ return DyFM_Object.safeParseJSON<T>(answer);
295
295
  }
296
296
  /** the exact same as {@link askJSONQuestion} */
297
297
  jsonQuestion = this.askJSONQuestion;
@@ -324,7 +324,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
324
324
 
325
325
  const answer = await this.askQuestion(set);
326
326
 
327
- return DyFM_Shared.safeParseJSON<T>(answer);
327
+ return DyFM_Object.safeParseJSON<T>(answer);
328
328
  }
329
329
  /** the exact same as {@link askJSONQuestionWithKeysDescription} */
330
330
  jsonQuestionWithKeysDescription = this.askJSONQuestionWithKeysDescription;
@@ -357,7 +357,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
357
357
 
358
358
  const answer = await this.askQuestion(set);
359
359
 
360
- return DyFM_Shared.safeParseJSON<T>(answer);
360
+ return DyFM_Object.safeParseJSON<T>(answer);
361
361
  }
362
362
  /** the exact same as {@link askJSONQuestionWithExactKeys} */
363
363
  jsonQuestionWithExactKeys = this.askJSONQuestionWithExactKeys;
@@ -385,7 +385,7 @@ export class DyNTS_OAI_LLM_ServiceBase {
385
385
 
386
386
  const answer = await this.askQuestion(set);
387
387
 
388
- return DyFM_Shared.safeParseList<string[]>(answer);
388
+ return DyFM_Object.safeParseList<string[]>(answer);
389
389
  }
390
390
  /** the exact same as {@link askListQuestion} */
391
391
  listQuestion = this.askListQuestion;
@@ -6,8 +6,7 @@ import {
6
6
  DyFM_DBFilter,
7
7
  DyFM_Error,
8
8
  DyFM_Metadata,
9
- DyFM_sameObjects,
10
- DyFM_Shared
9
+ DyFM_Object,
11
10
  } from '@futdevpro/fsm-dynamo';
12
11
  import { DyFM_OpenAI_Settings, DyFM_OpenAIEmbeddingModel, DyFM_OpenAIModel } from '@futdevpro/fsm-dynamo/open-ai';
13
12
 
@@ -229,7 +228,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
229
228
  const vectorizingPropertyHaveValue: boolean = Boolean(newData[vectorizedFrom]);
230
229
  const newDataIsNewChanged: boolean =
231
230
  (!existingValue && vectorizingPropertyHaveValue) ||
232
- !DyFM_sameObjects(existingValue, newValue);
231
+ !DyFM_Object.sameObjects(existingValue, newValue);
233
232
 
234
233
  if (forceVectorize || (vectorizingPropertyHaveValue && newDataIsNewChanged)) {
235
234
  if (!vectorizedProperty.embeddingModel) {
@@ -455,7 +454,7 @@ export class DyNTS_OAI_VectorDataService<T extends DyFM_Metadata> extends DyNTS_
455
454
  });
456
455
  }
457
456
 
458
- DyFM_Shared.cleanObject(data);
457
+ DyFM_Object.cleanObject(data);
459
458
 
460
459
  return data;
461
460
  } catch (error) {
@@ -7,9 +7,8 @@
7
7
 
8
8
 
9
9
  try {
10
- // import { OpenAI } from 'open-ai';
11
- require('open-ai');
12
- } catch (error) {
10
+ require.resolve('open-ai');
11
+ } catch {
13
12
  console.log(
14
13
  '❌ OpenAI package not found, please install it with: pnpm add open-ai'
15
14
  );
@@ -10,7 +10,7 @@ import {
10
10
  DyFM_AnyError,
11
11
  DyFM_DBFilter,
12
12
  DyFM_DataModel_Params, DyFM_Error, DyFM_ErrorLevel, DyFM_Error_Settings,
13
- DyFM_Log, DyFM_Shared, DyFM_clone, DyFM_errorFlag, DyFM_Errors,
13
+ DyFM_Log, DyFM_Object, DyFM_errorFlag, DyFM_Errors,
14
14
  DyFM_RelativeDate,
15
15
  DyFM_Paged,
16
16
  DyFM_SearchQuery,
@@ -6,7 +6,7 @@ import {
6
6
  DyFM_AnyError,
7
7
  DyFM_DBFilter,
8
8
  DyFM_DataModel_Params, DyFM_Error, DyFM_ErrorLevel, DyFM_Error_Settings,
9
- DyFM_Log, DyFM_Shared, DyFM_clone, DyFM_errorFlag, DyFM_Errors,
9
+ DyFM_Log, DyFM_Object, DyFM_errorFlag, DyFM_Errors,
10
10
  DyFM_RelativeDate,
11
11
  DyFM_Array,
12
12
  DyFM_Paged,
@@ -140,7 +140,7 @@ export class DyNTS_Errors_DataService<
140
140
  await this.updateData({
141
141
  filterBy: { _id: duplicateError._id } as DyFM_DBFilter<Error_T>,
142
142
  update: {
143
- $push: { duplications: DyFM_clone(data) },
143
+ $push: { duplications: DyFM_Object.clone(data) },
144
144
  } as DyNTS_DBUpdate<Error_T>,
145
145
  }).catch((pushError) => {
146
146
  DyFM_Log.error('pushError:', pushError);
@@ -165,7 +165,7 @@ export class DyNTS_Errors_DataService<
165
165
  if (this.debugLog) DyFM_Log.error('Error:', errorsRecord);
166
166
 
167
167
  errorsRecord.priority = this.getPriorityMultiplierByLevel(errorsRecord?.level);
168
- errorsRecord.duplications.push(DyFM_clone(errorsRecord));
168
+ errorsRecord.duplications.push(DyFM_Object.clone(errorsRecord));
169
169
 
170
170
  this.duplicationCounter = 1;
171
171
 
@@ -315,7 +315,7 @@ export class DyNTS_Errors_DataService<
315
315
  DyFM_Log.error('checkErrorIsStringifyableOrResolvable error:', err);
316
316
  }
317
317
 
318
- error = DyFM_Shared.resolveCirculation(error);
318
+ error = DyFM_Object.resolveCirculation(error);
319
319
 
320
320
  try {
321
321
  JSON.stringify(error);
@@ -4,7 +4,7 @@
4
4
  import * as SocketIOClient from 'socket.io-client';
5
5
 
6
6
  import {
7
- DyFM_Error, DyFM_Log, DyFM_delay, DyFM_Array, DyFM_errorFlag
7
+ DyFM_Error, DyFM_Log, DyFM_Async, DyFM_Array, DyFM_errorFlag
8
8
  } from '@futdevpro/fsm-dynamo';
9
9
  import { DyFM_SocketEvent, DyFM_SocketEvent_Key } from '@futdevpro/fsm-dynamo/socket';
10
10
 
@@ -49,7 +49,7 @@ export abstract class DyNTS_SocketClient_ServiceBase extends DyNTS_SingletonServ
49
49
  DyFM_Log.warn(`<x > socket-client (${this.params.name}) disconnected!`);
50
50
 
51
51
  if (this._params.reconnect) {
52
- await DyFM_delay(this._params.reconnectDelay);
52
+ await DyFM_Async.delay(this._params.reconnectDelay);
53
53
  this.connectSocket();
54
54
  }
55
55
  },
@@ -212,7 +212,7 @@ export abstract class DyNTS_SocketClient_ServiceBase extends DyNTS_SingletonServ
212
212
  try {
213
213
  if (this.logFn) console.log(`\nFn:. tryReconnectIfNeeded`);
214
214
  this.tryingToReconnect = true;
215
- await DyFM_delay(this._params.reconnectDelay);
215
+ await DyFM_Async.delay(this._params.reconnectDelay);
216
216
 
217
217
  this.tryingToReconnect = false;
218
218
  if (!this._connected) {
@@ -1,4 +1,4 @@
1
- import { DyFM_delay, DyFM_Error, DyFM_Log, DyFM_waitUntil, second } from '@futdevpro/fsm-dynamo';
1
+ import { DyFM_Async, DyFM_Error, DyFM_Log, second } from '@futdevpro/fsm-dynamo';
2
2
  import {
3
3
  DyNTS_AppExtendedBase_Mock, DyNTS_AppExtendedFull_Mock, DyNTS_AppWbMock_Mock
4
4
  } from '../mock/app-extended-server.mock';
@@ -25,7 +25,7 @@ describe('| DyNTS_AppExtended;', (): void => {
25
25
  const waitForAppReady = async (appInstance: DyNTS_AppExtended, timeoutMs: number = 10000): Promise<void> => {
26
26
  const startTime = Date.now();
27
27
  while (!appInstance.started && (Date.now() - startTime) < timeoutMs) {
28
- await DyFM_delay(100);
28
+ await DyFM_Async.delay(100);
29
29
  }
30
30
 
31
31
  if (!appInstance.started) {
@@ -36,16 +36,16 @@ describe('| DyNTS_AppExtended;', (): void => {
36
36
  describe('| a extended-base instance;', (): void => {
37
37
  beforeEach(async (): Promise<void> => {
38
38
  try {
39
- await DyFM_waitUntil((): boolean => !app, second);
40
- await DyFM_delay(100); // Ensure previous instance is fully cleaned up
39
+ await DyFM_Async.waitUntil((): boolean => !app, second);
40
+ await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
41
41
 
42
42
  app = new DyNTS_AppExtendedBase_Mock();
43
- await DyFM_delay(100);
43
+ await DyFM_Async.delay(100);
44
44
 
45
45
  await app.ready();
46
46
  await waitForAppReady(app);
47
47
 
48
- await DyFM_delay(100);
48
+ await DyFM_Async.delay(100);
49
49
  } catch (error) {
50
50
  DyFM_Log.testError(
51
51
  '| DyNTS_AppExtended; | a extended-base instance; test beforeEach error:\n',
@@ -66,9 +66,9 @@ describe('| DyNTS_AppExtended;', (): void => {
66
66
 
67
67
  afterEach(async (): Promise<void> => {
68
68
  try {
69
- await DyFM_delay(100);
69
+ await DyFM_Async.delay(100);
70
70
  await safeStopApp();
71
- await DyFM_delay(100);
71
+ await DyFM_Async.delay(100);
72
72
  } catch (error) {
73
73
  DyFM_Log.testError(
74
74
  '| DyNTS_AppExtended; | a extended-base instance; test afterEach error:\n',
@@ -100,16 +100,16 @@ describe('| DyNTS_AppExtended;', (): void => {
100
100
  describe('| a extended-full instance;', (): void => {
101
101
  beforeEach(async (): Promise<void> => {
102
102
  try {
103
- await DyFM_waitUntil((): boolean => !app, second);
104
- await DyFM_delay(100); // Ensure previous instance is fully cleaned up
103
+ await DyFM_Async.waitUntil((): boolean => !app, second);
104
+ await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
105
105
 
106
106
  app = new DyNTS_AppExtendedFull_Mock();
107
- await DyFM_delay(100);
107
+ await DyFM_Async.delay(100);
108
108
 
109
109
  await app.ready();
110
110
  await waitForAppReady(app);
111
111
 
112
- await DyFM_delay(100);
112
+ await DyFM_Async.delay(100);
113
113
  } catch (error) {
114
114
  DyFM_Log.testError(
115
115
  '| DyNTS_AppExtended; | a extended-full instance; test beforeEach error:\n',
@@ -130,9 +130,9 @@ describe('| DyNTS_AppExtended;', (): void => {
130
130
 
131
131
  afterEach(async (): Promise<void> => {
132
132
  try {
133
- await DyFM_delay(100);
133
+ await DyFM_Async.delay(100);
134
134
  await safeStopApp();
135
- await DyFM_delay(100);
135
+ await DyFM_Async.delay(100);
136
136
  } catch (error) {
137
137
  DyFM_Log.testError(
138
138
  '| DyNTS_AppExtended; | a extended-full instance; test afterEach error:\n',
@@ -164,16 +164,16 @@ describe('| DyNTS_AppExtended;', (): void => {
164
164
  describe('| a wb-mock instance;', (): void => {
165
165
  beforeEach(async (): Promise<void> => {
166
166
  try {
167
- await DyFM_waitUntil((): boolean => !app, second);
168
- await DyFM_delay(100); // Ensure previous instance is fully cleaned up
167
+ await DyFM_Async.waitUntil((): boolean => !app, second);
168
+ await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
169
169
 
170
170
  app = new DyNTS_AppWbMock_Mock();
171
- await DyFM_delay(100);
171
+ await DyFM_Async.delay(100);
172
172
 
173
173
  await app.ready();
174
174
  await waitForAppReady(app);
175
175
 
176
- await DyFM_delay(100);
176
+ await DyFM_Async.delay(100);
177
177
  } catch (error) {
178
178
  DyFM_Log.testError(
179
179
  '| DyNTS_AppExtended; | a wb-mock instance; test beforeEach error:\n',
@@ -194,9 +194,9 @@ describe('| DyNTS_AppExtended;', (): void => {
194
194
 
195
195
  afterEach(async (): Promise<void> => {
196
196
  try {
197
- await DyFM_delay(100);
197
+ await DyFM_Async.delay(100);
198
198
  await safeStopApp();
199
- await DyFM_delay(100);
199
+ await DyFM_Async.delay(100);
200
200
  } catch (error) {
201
201
  DyFM_Log.testError(
202
202
  '| DyNTS_AppExtended; | a wb-mock instance; test afterEach error:\n',
@@ -5,12 +5,11 @@ import * as SocketIO from 'socket.io';
5
5
  import {
6
6
  DyFM_AnyError,
7
7
  DyFM_Array,
8
- DyFM_delay,
8
+ DyFM_Async,
9
9
  DyFM_Error,
10
10
  DyFM_Error_Settings,
11
11
  DyFM_ErrorLevel,
12
12
  DyFM_Log,
13
- DyFM_wait
14
13
  } from '@futdevpro/fsm-dynamo';
15
14
 
16
15
  import { DyNTS_global_settings } from '../../_collections/global-settings.const';
@@ -283,7 +282,7 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
283
282
  }
284
283
 
285
284
  if (!ready) {
286
- await DyFM_wait(100);
285
+ await DyFM_Async.wait(100);
287
286
  }
288
287
  }
289
288
 
@@ -400,7 +399,7 @@ export abstract class DyNTS_AppExtended extends DyNTS_App {
400
399
  this.systemControlsExt.httpSocketServer.init = false;
401
400
  this.systemControlsExt.httpsSocketServer.init = false;
402
401
 
403
- await DyFM_delay(100);
402
+ await DyFM_Async.delay(100);
404
403
 
405
404
  DyFM_Log.H_info(`"${this.params.name}" stopped successfully.`);
406
405
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  try {
4
- require('socket.io');
4
+ require.resolve('socket.io');
5
5
  } catch (error) {
6
6
  console.log(
7
7
  '❌ Socket.io package not found, please install it with: pnpm add socket.io'
@@ -9,7 +9,7 @@ try {
9
9
  }
10
10
 
11
11
  try {
12
- require('socket.io-client');
12
+ require.resolve('socket.io-client');
13
13
  } catch (error) {
14
14
  console.log(
15
15
  '❌ Socket.io-client package not found, please install it with: pnpm add socket.io-client'
@@ -4,7 +4,9 @@ import { Router } from 'express';
4
4
  import {
5
5
  DyFM_AnyError, DyFM_Error, DyFM_ErrorLevel, DyFM_Error_Settings,
6
6
  DyFM_HttpCallType,
7
- DyFM_Log
7
+ DyFM_Log,
8
+ DyFM_getConstructionStackLocation,
9
+ DyFM_getLocalStackLocation
8
10
  } from '@futdevpro/fsm-dynamo';
9
11
 
10
12
  import { DyNTS_global_settings } from '../../_collections/global-settings.const';
@@ -66,13 +68,15 @@ export class DyNTS_RoutingModule {
66
68
  /* serviceName: string; */
67
69
 
68
70
  security: DyNTS_RouteSecurity;
69
- route: string;
71
+ readonly route: string;
70
72
 
71
73
  private readonly controllers: DyNTS_Controller[];
72
74
  endpoints: DyNTS_Endpoint_Params[] = [];
73
75
 
74
- openRouter: Router = Router();
75
- secureRouter: Router = Router();
76
+ readonly openRouter: Router = Router();
77
+ readonly secureRouter: Router = Router();
78
+
79
+ readonly stackLocation: string;
76
80
 
77
81
  get logSetup(): boolean {
78
82
  return DyNTS_global_settings.log_settings.setup;
@@ -91,6 +95,7 @@ export class DyNTS_RoutingModule {
91
95
  this.controllers = set.controllers ?? [];
92
96
  this.setupRoutes();
93
97
  this.mountRoutes(set.securityOverride);
98
+ this.stackLocation = DyFM_getConstructionStackLocation();
94
99
 
95
100
  if (this.logSetup) console.log(
96
101
  `routing module setup done: ${this.route} security: ${this.security}\n`
@@ -1,5 +1,4 @@
1
-
2
- import { DyFM_Error, DyFM_Log, DyFM_delay, DyFM_waitUntil, second } from '@futdevpro/fsm-dynamo';
1
+ import { DyFM_Error, DyFM_Log, DyFM_Async, second } from '@futdevpro/fsm-dynamo';
3
2
  import { DyNTS_AppBase_Mock, DyNTS_AppFull_Mock } from '../../_modules/mock/app-server.mock';
4
3
  import { DyNTS_App } from './app.server';
5
4
 
@@ -11,15 +10,15 @@ describe('| DyNTS_App AND DyNTS_AppExtended?;', (): void => {
11
10
  describe('| a base instance;', (): void => {
12
11
  beforeEach(async (): Promise<void> => {
13
12
  try {
14
- await DyFM_waitUntil((): boolean => !app, second);
13
+ await DyFM_Async.waitUntil((): boolean => !app, second);
15
14
 
16
15
  app = new DyNTS_AppBase_Mock();
17
16
 
18
- await DyFM_delay(100);
17
+ await DyFM_Async.delay(100);
19
18
 
20
19
  await app.ready();
21
20
 
22
- await DyFM_delay(100);
21
+ await DyFM_Async.delay(100);
23
22
  } catch (error) {
24
23
  DyFM_Log.testError(
25
24
  '| DyNTS_App; | a base instance; test beforeEach error:\n',
@@ -39,13 +38,13 @@ describe('| DyNTS_App AND DyNTS_AppExtended?;', (): void => {
39
38
 
40
39
  afterEach(async (): Promise<void> => {
41
40
  try {
42
- await DyFM_delay(100);
41
+ await DyFM_Async.delay(100);
43
42
 
44
43
  await app.stop();
45
44
 
46
45
  app = null;
47
46
 
48
- await DyFM_delay(100);
47
+ await DyFM_Async.delay(100);
49
48
  } catch (error) {
50
49
  DyFM_Log.testError(
51
50
  '| DyNTS_App; | a base instance; test afterEach error:\n',
@@ -75,15 +74,15 @@ describe('| DyNTS_App AND DyNTS_AppExtended?;', (): void => {
75
74
  describe('| a full instance;', (): void => {
76
75
  beforeEach(async (): Promise<void> => {
77
76
  try {
78
- await DyFM_waitUntil((): boolean => !app, second);
77
+ await DyFM_Async.waitUntil((): boolean => !app, second);
79
78
 
80
79
  app = new DyNTS_AppFull_Mock();
81
80
 
82
- await DyFM_delay(100);
81
+ await DyFM_Async.delay(100);
83
82
 
84
83
  await app.ready();
85
84
 
86
- await DyFM_delay(100);
85
+ await DyFM_Async.delay(100);
87
86
  } catch (error) {
88
87
  DyFM_Log.testError(
89
88
  '| DyNTS_App; | a full instance; test beforeEach error:\n',
@@ -103,13 +102,13 @@ describe('| DyNTS_App AND DyNTS_AppExtended?;', (): void => {
103
102
 
104
103
  afterEach(async (): Promise<void> => {
105
104
  try {
106
- await DyFM_delay(100);
105
+ await DyFM_Async.delay(100);
107
106
 
108
107
  await app.stop();
109
108
 
110
109
  app = null;
111
110
 
112
- await DyFM_delay(100);
111
+ await DyFM_Async.delay(100);
113
112
  } catch (error) {
114
113
  DyFM_Log.testError(
115
114
  '| DyNTS_App; | a full instance; test afterEach error:\n',
@@ -15,11 +15,12 @@ import dotenv from 'dotenv'
15
15
  import {
16
16
  DyFM_AnyError,
17
17
  DyFM_Array,
18
- DyFM_delay,
19
- DyFM_Error, DyFM_error_defaults,
18
+ DyFM_Async,
19
+ DyFM_Error,
20
+ DyFM_error_defaults,
20
21
  DyFM_Error_Settings,
21
- DyFM_ErrorLevel, DyFM_Log,
22
- DyFM_wait,
22
+ DyFM_ErrorLevel,
23
+ DyFM_Log,
23
24
  second
24
25
  } from '@futdevpro/fsm-dynamo';
25
26
 
@@ -530,7 +531,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
530
531
  try {
531
532
  if (this.fnLogs) DyFM_Log.log('\nfn:. ready');
532
533
 
533
- await DyFM_delay(100);
534
+ await DyFM_Async.delay(100);
534
535
 
535
536
  let ready: boolean = false;
536
537
  const start: number = +new Date();
@@ -576,7 +577,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
576
577
  }
577
578
 
578
579
  if (!ready) {
579
- await DyFM_wait(100);
580
+ await DyFM_Async.wait(100);
580
581
  }
581
582
  }
582
583
 
@@ -720,7 +721,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
720
721
  tryCount++ < 10
721
722
  ) {
722
723
  DyFM_Log.warn(`Mongoose not even started yet....`);
723
- await DyFM_wait(second);
724
+ await DyFM_Async.wait(second);
724
725
  }
725
726
  this.systemControls.mongoose.started = false;
726
727
 
@@ -749,7 +750,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
749
750
  !this.constructErrors.length
750
751
  ) {
751
752
  DyFM_Log.warn(`\nMongoose still not disconnected....`);
752
- await DyFM_wait(second);
753
+ await DyFM_Async.wait(second);
753
754
  }
754
755
  } else {
755
756
  DyFM_Log.error(`\nMongoose not found.`);
@@ -783,7 +784,7 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
783
784
  this.systemControls.httpsServer.init = false;
784
785
  }
785
786
 
786
- await DyFM_wait(second);
787
+ await DyFM_Async.wait(second);
787
788
 
788
789
  if (!dontLog) {
789
790
  DyFM_Log.H_log(`"${this._params.name}" stopped successfully.`);
@@ -968,10 +969,12 @@ export abstract class DyNTS_App extends DyNTS_SingletonService {
968
969
  this._routingModules.forEach((module: DyNTS_RoutingModule): void => {
969
970
  if (module.security && module.security !== DyNTS_RouteSecurity.open) {
970
971
  errorMsg += `\n ${module.route} (security: ${module.security})`;
971
- errorMsg += `\n subroutes using secure sever:`;
972
+ errorMsg += `\n location: ${module.stackLocation}`;
973
+ errorMsg += `\n subroutes using secure sever:`;
972
974
  module.endpoints.forEach((endpoint: DyNTS_Endpoint_Params): void => {
973
975
  if (endpoint.security && endpoint.security !== DyNTS_RouteSecurity.open) {
974
- errorMsg += `\n ${endpoint.endpoint} (security: ${endpoint.security})`;
976
+ errorMsg += `\n ${endpoint.endpoint} (security: ${endpoint.security})`;
977
+ errorMsg += `\n location: ${endpoint.stackLocation}`;
975
978
  }
976
979
  });
977
980
  }
@@ -3,13 +3,13 @@ import * as ReadLine from 'readline';
3
3
  import * as GeoIp from 'geoip-lite';
4
4
  import { Request } from 'express';
5
5
 
6
- import { DyFM_Shared } from '@futdevpro/fsm-dynamo';
6
+ import { DyFM_Object } from '@futdevpro/fsm-dynamo';
7
7
  import { DyFM_GeoIpLocation } from '@futdevpro/fsm-dynamo/location';
8
8
 
9
9
  /**
10
10
  * Collection of static helper utilities shared across modules.
11
11
  */
12
- export class DyNTS_Shared extends DyFM_Shared {
12
+ export class DyNTS_Shared extends DyFM_Object {
13
13
 
14
14
  /**
15
15
  * Extract the IP address from an Express request.