@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.
- package/.github/workflows/main.yml +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts +1 -1
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +9 -9
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/build/_modules/discord-assistant/_services/dias-main.control-service.d.ts.map +1 -1
- package/build/_modules/discord-assistant/_services/dias-main.control-service.js.map +1 -1
- package/build/_modules/discord-assistant-voiced/index.js +2 -2
- package/build/_modules/discord-assistant-voiced/index.js.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-main.control-service.js +1 -1
- package/build/_modules/discord-bot/_services/dibo-main.control-service.js.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-routines.control-service.js.map +1 -1
- package/build/_modules/discord-bot/index.js +1 -1
- package/build/_modules/discord-bot/index.js.map +1 -1
- package/build/_modules/oauth2/index.js +1 -1
- package/build/_modules/oauth2/index.js.map +1 -1
- package/build/_modules/open-ai/_collections/oai-chunking.util.d.ts.map +1 -1
- package/build/_modules/open-ai/_collections/oai-chunking.util.js +1 -1
- package/build/_modules/open-ai/_collections/oai-chunking.util.js.map +1 -1
- package/build/_modules/open-ai/_services/oai-chunk.service-base.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-chunk.service-base.js +1 -1
- package/build/_modules/open-ai/_services/oai-chunk.service-base.js.map +1 -1
- package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js +10 -10
- package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js.map +1 -1
- package/build/_modules/open-ai/_services/oai-llm.service-base.js +6 -6
- package/build/_modules/open-ai/_services/oai-vector-data.service.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-vector-data.service.js +2 -2
- package/build/_modules/open-ai/_services/oai-vector-data.service.js.map +1 -1
- package/build/_modules/open-ai/index.d.ts.map +1 -1
- package/build/_modules/open-ai/index.js +2 -3
- package/build/_modules/open-ai/index.js.map +1 -1
- package/build/_modules/server/errors/errors.control-service.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.data-service.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.data-service.js +3 -3
- package/build/_modules/server/errors/errors.data-service.js.map +1 -1
- package/build/_modules/socket/_services/socket-client.service.js +2 -2
- package/build/_modules/socket/_services/socket-client.service.js.map +1 -1
- package/build/_modules/socket/app-extended.server.d.ts.map +1 -1
- package/build/_modules/socket/app-extended.server.js +2 -2
- package/build/_modules/socket/app-extended.server.js.map +1 -1
- package/build/_modules/socket/app-extended.server.spec.js +19 -19
- package/build/_modules/socket/app-extended.server.spec.js.map +1 -1
- package/build/_modules/socket/index.js +2 -2
- package/build/_modules/socket/index.js.map +1 -1
- package/build/_services/route/routing-module.service.d.ts +4 -3
- package/build/_services/route/routing-module.service.d.ts.map +1 -1
- package/build/_services/route/routing-module.service.js +2 -0
- 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 +9 -7
- package/build/_services/server/app.server.js.map +1 -1
- package/build/_services/server/app.server.spec.js +10 -10
- package/build/_services/server/app.server.spec.js.map +1 -1
- package/build/_services/shared.static-service.d.ts +2 -2
- package/build/_services/shared.static-service.js +1 -1
- package/package.json +3 -3
- package/src/_models/control-models/endpoint-params.control-model.ts +10 -10
- package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +1 -2
- package/src/_modules/discord-assistant-voiced/index.ts +2 -2
- package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +2 -2
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.ts +1 -1
- package/src/_modules/discord-bot/index.ts +1 -1
- package/src/_modules/oauth2/index.ts +1 -1
- package/src/_modules/open-ai/_collections/oai-chunking.util.ts +2 -2
- package/src/_modules/open-ai/_services/oai-chunk.service-base.ts +2 -2
- package/src/_modules/open-ai/_services/oai-llm-chat.service-base.ts +11 -11
- package/src/_modules/open-ai/_services/oai-llm.service-base.ts +7 -7
- package/src/_modules/open-ai/_services/oai-vector-data.service.ts +3 -4
- package/src/_modules/open-ai/index.ts +2 -3
- package/src/_modules/server/errors/errors.control-service.ts +1 -1
- package/src/_modules/server/errors/errors.data-service.ts +4 -4
- package/src/_modules/socket/_services/socket-client.service.ts +3 -3
- package/src/_modules/socket/app-extended.server.spec.ts +20 -20
- package/src/_modules/socket/app-extended.server.ts +3 -4
- package/src/_modules/socket/index.ts +2 -2
- package/src/_services/route/routing-module.service.ts +9 -4
- package/src/_services/server/app.server.spec.ts +11 -12
- package/src/_services/server/app.server.ts +14 -11
- 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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
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:
|
|
577
|
+
/* conversation: DyFM_Object.clone(conversation), */
|
|
578
578
|
conversationLength: set.conversation.length,
|
|
579
|
-
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
!
|
|
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
|
-
|
|
457
|
+
DyFM_Object.cleanObject(data);
|
|
459
458
|
|
|
460
459
|
return data;
|
|
461
460
|
} catch (error) {
|
|
@@ -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,
|
|
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,
|
|
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:
|
|
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(
|
|
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 =
|
|
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,
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
40
|
-
await
|
|
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
|
|
43
|
+
await DyFM_Async.delay(100);
|
|
44
44
|
|
|
45
45
|
await app.ready();
|
|
46
46
|
await waitForAppReady(app);
|
|
47
47
|
|
|
48
|
-
await
|
|
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
|
|
69
|
+
await DyFM_Async.delay(100);
|
|
70
70
|
await safeStopApp();
|
|
71
|
-
await
|
|
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
|
|
104
|
-
await
|
|
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
|
|
107
|
+
await DyFM_Async.delay(100);
|
|
108
108
|
|
|
109
109
|
await app.ready();
|
|
110
110
|
await waitForAppReady(app);
|
|
111
111
|
|
|
112
|
-
await
|
|
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
|
|
133
|
+
await DyFM_Async.delay(100);
|
|
134
134
|
await safeStopApp();
|
|
135
|
-
await
|
|
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
|
|
168
|
-
await
|
|
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
|
|
171
|
+
await DyFM_Async.delay(100);
|
|
172
172
|
|
|
173
173
|
await app.ready();
|
|
174
174
|
await waitForAppReady(app);
|
|
175
175
|
|
|
176
|
-
await
|
|
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
|
|
197
|
+
await DyFM_Async.delay(100);
|
|
198
198
|
await safeStopApp();
|
|
199
|
-
await
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
13
|
+
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
15
14
|
|
|
16
15
|
app = new DyNTS_AppBase_Mock();
|
|
17
16
|
|
|
18
|
-
await
|
|
17
|
+
await DyFM_Async.delay(100);
|
|
19
18
|
|
|
20
19
|
await app.ready();
|
|
21
20
|
|
|
22
|
-
await
|
|
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
|
|
41
|
+
await DyFM_Async.delay(100);
|
|
43
42
|
|
|
44
43
|
await app.stop();
|
|
45
44
|
|
|
46
45
|
app = null;
|
|
47
46
|
|
|
48
|
-
await
|
|
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
|
|
77
|
+
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
79
78
|
|
|
80
79
|
app = new DyNTS_AppFull_Mock();
|
|
81
80
|
|
|
82
|
-
await
|
|
81
|
+
await DyFM_Async.delay(100);
|
|
83
82
|
|
|
84
83
|
await app.ready();
|
|
85
84
|
|
|
86
|
-
await
|
|
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
|
|
105
|
+
await DyFM_Async.delay(100);
|
|
107
106
|
|
|
108
107
|
await app.stop();
|
|
109
108
|
|
|
110
109
|
app = null;
|
|
111
110
|
|
|
112
|
-
await
|
|
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
|
-
|
|
19
|
-
DyFM_Error,
|
|
18
|
+
DyFM_Async,
|
|
19
|
+
DyFM_Error,
|
|
20
|
+
DyFM_error_defaults,
|
|
20
21
|
DyFM_Error_Settings,
|
|
21
|
-
DyFM_ErrorLevel,
|
|
22
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
12
|
+
export class DyNTS_Shared extends DyFM_Object {
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Extract the IP address from an Express request.
|