@futdevpro/nts-dynamo 1.11.26 → 1.11.28
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/build/_modules/discord-assistant/_collections/dias-global-settings.const.js +1 -1
- package/build/_modules/discord-assistant/_collections/dias-global-settings.const.js.map +1 -1
- package/build/_modules/discord-assistant/_collections/dias.util.d.ts +1 -0
- package/build/_modules/discord-assistant/_collections/dias.util.d.ts.map +1 -1
- package/build/_modules/discord-assistant/_collections/dias.util.js +1 -0
- package/build/_modules/discord-assistant/_collections/dias.util.js.map +1 -1
- package/build/_modules/discord-assistant/_models/dias-global-settings.interface.d.ts +1 -1
- package/build/_modules/discord-assistant/_services/dias-io.control-service.d.ts.map +1 -1
- package/build/_modules/discord-assistant/_services/dias-io.control-service.js +4 -2
- package/build/_modules/discord-assistant/_services/dias-io.control-service.js.map +1 -1
- package/build/_modules/discord-assistant/_services/dias-main.control-service.d.ts +0 -3
- package/build/_modules/discord-assistant/_services/dias-main.control-service.d.ts.map +1 -1
- package/build/_modules/discord-assistant/_services/dias.service-base.d.ts +6 -2
- package/build/_modules/discord-assistant/_services/dias.service-base.d.ts.map +1 -1
- package/build/_modules/discord-assistant/_services/dias.service-base.js +6 -4
- package/build/_modules/discord-assistant/_services/dias.service-base.js.map +1 -1
- package/build/_modules/discord-bot/_collections/dibo-global-settings.conts.js +1 -1
- package/build/_modules/discord-bot/_collections/dibo-global-settings.conts.js.map +1 -1
- package/build/_modules/discord-bot/_collections/dibo-operations.util.js +10 -10
- package/build/_modules/discord-bot/_collections/dibo-operations.util.js.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.d.ts +1 -1
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.d.ts.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.js +3 -3
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.js.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-io.control-service.d.ts +1 -0
- package/build/_modules/discord-bot/_services/dibo-io.control-service.d.ts.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-io.control-service.js +8 -6
- package/build/_modules/discord-bot/_services/dibo-io.control-service.js.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-main.control-service.d.ts +1 -1
- package/build/_modules/discord-bot/_services/dibo-main.control-service.d.ts.map +1 -1
- package/build/_modules/discord-bot/_services/dibo-main.control-service.js +27 -2
- package/build/_modules/discord-bot/_services/dibo-main.control-service.js.map +1 -1
- package/build/_modules/mock/socket-server.mock.d.ts +4 -0
- package/build/_modules/mock/socket-server.mock.d.ts.map +1 -1
- package/build/_modules/mock/socket-server.mock.js +11 -1
- package/build/_modules/mock/socket-server.mock.js.map +1 -1
- package/build/_modules/mock/socket-server.mock.spec.js +1 -1
- package/build/_modules/mock/socket-server.mock.spec.js.map +1 -1
- package/build/_modules/oauth2/_services/oauth2.control-service.d.ts.map +1 -1
- package/build/_modules/oauth2/_services/oauth2.control-service.js +7 -4
- package/build/_modules/oauth2/_services/oauth2.control-service.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/_services/oai-chunk.service-base.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-chunk.service-base.js +21 -0
- 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.d.ts +16 -141
- package/build/_modules/open-ai/_services/oai-llm-chat.service-base.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-llm-chat.service-base.js +9 -6
- 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.d.ts +1 -22
- package/build/_modules/open-ai/_services/oai-llm.service-base.d.ts.map +1 -1
- package/build/_modules/open-ai/_services/oai-llm.service-base.js +28 -75
- package/build/_modules/open-ai/_services/oai-llm.service-base.js.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.d.ts.map +1 -1
- package/build/_modules/socket/_services/socket-server.service.js +12 -3
- package/build/_modules/socket/_services/socket-server.service.js.map +1 -1
- package/build/_modules/socket/app-extended.server.spec.js +44 -7
- package/build/_modules/socket/app-extended.server.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +1 -1
- package/src/_modules/discord-assistant/_collections/dias.util.ts +3 -1
- package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +1 -1
- package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +4 -2
- package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +2 -2
- package/src/_modules/discord-assistant/_services/dias.service-base.ts +13 -6
- package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +1 -1
- package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +10 -10
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +3 -3
- package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +7 -5
- package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +23 -2
- package/src/_modules/mock/socket-server.mock.spec.ts +1 -1
- package/src/_modules/mock/socket-server.mock.ts +13 -3
- package/src/_modules/oauth2/_services/oauth2.control-service.ts +7 -4
- package/src/_modules/oauth2/index.ts +1 -1
- package/src/_modules/open-ai/_services/oai-chunk.service-base.ts +27 -0
- package/src/_modules/open-ai/_services/oai-llm-chat.service-base.ts +28 -23
- package/src/_modules/open-ai/_services/oai-llm.service-base.ts +31 -96
- package/src/_modules/socket/_services/socket-server.service.ts +15 -6
- package/src/_modules/socket/app-extended.server.spec.ts +50 -18
|
@@ -6,26 +6,51 @@ describe('| DyNTS_AppExtended;', () => {
|
|
|
6
6
|
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30 * fsm_dynamo_1.second;
|
|
7
7
|
process.setMaxListeners(20);
|
|
8
8
|
let app;
|
|
9
|
+
// Helper function to safely stop and cleanup app
|
|
10
|
+
const safeStopApp = async () => {
|
|
11
|
+
if (app) {
|
|
12
|
+
try {
|
|
13
|
+
await app.stop();
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
fsm_dynamo_1.DyFM_Log.testWarn('Error stopping app:', error);
|
|
17
|
+
}
|
|
18
|
+
app = null;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
// Helper function to wait for app to be ready with timeout
|
|
22
|
+
const waitForAppReady = async (appInstance, timeoutMs = 10000) => {
|
|
23
|
+
const startTime = Date.now();
|
|
24
|
+
while (!appInstance.started && (Date.now() - startTime) < timeoutMs) {
|
|
25
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
26
|
+
}
|
|
27
|
+
if (!appInstance.started) {
|
|
28
|
+
throw new Error(`App failed to start within ${timeoutMs}ms`);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
9
31
|
describe('| a extended-base instance;', () => {
|
|
10
32
|
beforeEach(async () => {
|
|
11
33
|
try {
|
|
12
34
|
await (0, fsm_dynamo_1.DyFM_waitUntil)(() => !app, fsm_dynamo_1.second);
|
|
35
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100); // Ensure previous instance is fully cleaned up
|
|
13
36
|
app = new app_extended_server_mock_1.DyNTS_AppExtendedBase_Mock();
|
|
14
37
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
15
38
|
await app.ready();
|
|
39
|
+
await waitForAppReady(app);
|
|
16
40
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
17
41
|
}
|
|
18
42
|
catch (error) {
|
|
19
43
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a extended-base instance; test beforeEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
20
44
|
error._message ??
|
|
21
45
|
error.message) ?? error?.additionalContent, '\n\n Stack:', (new Error()).stack, error?.additionalContent?.errors?.reverse()?.unshift()?.stack);
|
|
46
|
+
throw error; // Re-throw to fail the test
|
|
22
47
|
}
|
|
23
48
|
});
|
|
24
49
|
afterEach(async () => {
|
|
25
50
|
try {
|
|
26
51
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
27
|
-
await
|
|
28
|
-
|
|
52
|
+
await safeStopApp();
|
|
53
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
29
54
|
}
|
|
30
55
|
catch (error) {
|
|
31
56
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a extended-base instance; test afterEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
@@ -35,31 +60,36 @@ describe('| DyNTS_AppExtended;', () => {
|
|
|
35
60
|
});
|
|
36
61
|
it('| should be created', () => {
|
|
37
62
|
expect(app).toBeDefined();
|
|
63
|
+
expect(app).toBeInstanceOf(app_extended_server_mock_1.DyNTS_AppExtendedBase_Mock);
|
|
38
64
|
});
|
|
39
|
-
it('| should be started', () => {
|
|
65
|
+
it('| should be started', async () => {
|
|
40
66
|
expect(app.started).toBeTrue();
|
|
67
|
+
expect(app).toBeDefined();
|
|
41
68
|
});
|
|
42
69
|
});
|
|
43
70
|
describe('| a extended-full instance;', () => {
|
|
44
71
|
beforeEach(async () => {
|
|
45
72
|
try {
|
|
46
73
|
await (0, fsm_dynamo_1.DyFM_waitUntil)(() => !app, fsm_dynamo_1.second);
|
|
74
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100); // Ensure previous instance is fully cleaned up
|
|
47
75
|
app = new app_extended_server_mock_1.DyNTS_AppExtendedFull_Mock();
|
|
48
76
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
49
77
|
await app.ready();
|
|
78
|
+
await waitForAppReady(app);
|
|
50
79
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
51
80
|
}
|
|
52
81
|
catch (error) {
|
|
53
82
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a extended-full instance; test beforeEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
54
83
|
error._message ??
|
|
55
84
|
error.message) ?? error?.additionalContent, '\n\n Stack:', (new Error()).stack, error?.additionalContent?.errors?.reverse()?.unshift()?.stack);
|
|
85
|
+
throw error; // Re-throw to fail the test
|
|
56
86
|
}
|
|
57
87
|
});
|
|
58
88
|
afterEach(async () => {
|
|
59
89
|
try {
|
|
60
90
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
61
|
-
await
|
|
62
|
-
|
|
91
|
+
await safeStopApp();
|
|
92
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
63
93
|
}
|
|
64
94
|
catch (error) {
|
|
65
95
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a extended-full instance; test afterEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
@@ -69,31 +99,36 @@ describe('| DyNTS_AppExtended;', () => {
|
|
|
69
99
|
});
|
|
70
100
|
it('| should be created', async () => {
|
|
71
101
|
expect(app).toBeDefined();
|
|
102
|
+
expect(app).toBeInstanceOf(app_extended_server_mock_1.DyNTS_AppExtendedFull_Mock);
|
|
72
103
|
});
|
|
73
104
|
it('| should be started', async () => {
|
|
74
105
|
expect(app.started).toBeTrue();
|
|
106
|
+
expect(app).toBeDefined();
|
|
75
107
|
});
|
|
76
108
|
});
|
|
77
109
|
describe('| a wb-mock instance;', () => {
|
|
78
110
|
beforeEach(async () => {
|
|
79
111
|
try {
|
|
80
112
|
await (0, fsm_dynamo_1.DyFM_waitUntil)(() => !app, fsm_dynamo_1.second);
|
|
113
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100); // Ensure previous instance is fully cleaned up
|
|
81
114
|
app = new app_extended_server_mock_1.DyNTS_AppWbMock_Mock();
|
|
82
115
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
83
116
|
await app.ready();
|
|
117
|
+
await waitForAppReady(app);
|
|
84
118
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
85
119
|
}
|
|
86
120
|
catch (error) {
|
|
87
121
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a wb-mock instance; test beforeEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
88
122
|
error._message ??
|
|
89
123
|
error.message) ?? error?.additionalContent, '\n\n Stack:', (new Error()).stack, error?.additionalContent?.errors?.reverse()?.unshift()?.stack);
|
|
124
|
+
throw error; // Re-throw to fail the test
|
|
90
125
|
}
|
|
91
126
|
});
|
|
92
127
|
afterEach(async () => {
|
|
93
128
|
try {
|
|
94
129
|
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
95
|
-
await
|
|
96
|
-
|
|
130
|
+
await safeStopApp();
|
|
131
|
+
await (0, fsm_dynamo_1.DyFM_delay)(100);
|
|
97
132
|
}
|
|
98
133
|
catch (error) {
|
|
99
134
|
fsm_dynamo_1.DyFM_Log.testError('| DyNTS_AppExtended; | a wb-mock instance; test afterEach error:\n', error?._message, '\nadditionalContent:', error?.additionalContent?.errors?.reverse()?.map((error) => error._messages?.join('\n') ??
|
|
@@ -103,9 +138,11 @@ describe('| DyNTS_AppExtended;', () => {
|
|
|
103
138
|
});
|
|
104
139
|
it('| should be created', async () => {
|
|
105
140
|
expect(app).toBeDefined();
|
|
141
|
+
expect(app).toBeInstanceOf(app_extended_server_mock_1.DyNTS_AppWbMock_Mock);
|
|
106
142
|
});
|
|
107
143
|
it('| should be started', async () => {
|
|
108
144
|
expect(app.started).toBeTrue();
|
|
145
|
+
expect(app).toBeDefined();
|
|
109
146
|
});
|
|
110
147
|
});
|
|
111
148
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-extended.server.spec.js","sourceRoot":"","sources":["../../../src/_modules/socket/app-extended.server.spec.ts"],"names":[],"mappings":";;AAAA,sDAAiG;AACjG,+EAE0C;AAG1C,QAAQ,CAAC,sBAAsB,EAAE,GAAS,EAAE;IAC1C,OAAO,CAAC,wBAAwB,GAAG,EAAE,GAAG,mBAAM,CAAC;IAC/C,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,GAAsB,CAAC;IAE3B,QAAQ,CAAC,6BAA6B,EAAE,GAAS,EAAE;QACjD,UAAU,CAAC,KAAK,IAAmB,EAAE;YACnC,IAAI,CAAC;gBACH,MAAM,IAAA,2BAAc,EAAC,GAAY,EAAE,CAAC,CAAC,GAAG,EAAE,mBAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"app-extended.server.spec.js","sourceRoot":"","sources":["../../../src/_modules/socket/app-extended.server.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/nts-dynamo",
|
|
3
|
-
"version": "01.11.
|
|
3
|
+
"version": "01.11.28",
|
|
4
4
|
"description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "server-package",
|
|
@@ -164,12 +164,12 @@
|
|
|
164
164
|
},
|
|
165
165
|
"homepage": "https:/futdevpro.hu/projects/dynamo",
|
|
166
166
|
"DISABLED": {
|
|
167
|
-
"@futdevpro/fsm-dynamo": "file:../tgz-collection/dynamo-fsm/futdevpro-fsm-dynamo-01.11.
|
|
167
|
+
"@futdevpro/fsm-dynamo": "file:../tgz-collection/dynamo-fsm/futdevpro-fsm-dynamo-01.11.21.tgz",
|
|
168
168
|
|
|
169
169
|
"empty": ""
|
|
170
170
|
},
|
|
171
171
|
"peerDependencies": {
|
|
172
|
-
"@futdevpro/fsm-dynamo": "1.11.
|
|
172
|
+
"@futdevpro/fsm-dynamo": "1.11.21",
|
|
173
173
|
|
|
174
174
|
"@types/express": "4.17.21",
|
|
175
175
|
"@types/geoip-lite": "~1.4.1",
|
|
@@ -12,6 +12,7 @@ export class DyNTS_DiAs_Util {
|
|
|
12
12
|
messages: Message[],
|
|
13
13
|
botClientId: string,
|
|
14
14
|
botDisplayName: string,
|
|
15
|
+
issuer: string,
|
|
15
16
|
}
|
|
16
17
|
): DyNTS_OAI_GPT_Message[] {
|
|
17
18
|
|
|
@@ -53,12 +54,13 @@ export class DyNTS_DiAs_Util {
|
|
|
53
54
|
skipFlags?: string[],
|
|
54
55
|
}
|
|
55
56
|
): Promise<DyNTS_OAI_GPT_Message[]> {
|
|
56
|
-
const messages = await this.gatherMessagesForMessage(set/* message, botClientId, issuer, skipFlags */);
|
|
57
|
+
const messages: Message[] = await this.gatherMessagesForMessage(set/* message, botClientId, issuer, skipFlags */);
|
|
57
58
|
|
|
58
59
|
return DyNTS_DiAs_Util.convertDiscordMessagesToOAIConversation({
|
|
59
60
|
messages: messages,
|
|
60
61
|
botClientId: set.botClientId,
|
|
61
62
|
botDisplayName: set.botDisplayName,
|
|
63
|
+
issuer: set.issuer,
|
|
62
64
|
});
|
|
63
65
|
}
|
|
64
66
|
|
|
@@ -7,7 +7,7 @@ export interface DyNTS_DiAs_Global_Settings {
|
|
|
7
7
|
* These flags are used to skip messages from the conversation
|
|
8
8
|
* so these messages will not be included in the conversation for the LLM call
|
|
9
9
|
*
|
|
10
|
-
* default: [ '|NOISE]', '[VOICE|USER|
|
|
10
|
+
* default: [ '|NOISE]', '[VOICE|USER|OUTOFCONTEXT]', '[DEBUG|' ]
|
|
11
11
|
*/
|
|
12
12
|
skipConversationMessagesFlags: string[];
|
|
13
13
|
/**
|
|
@@ -20,6 +20,7 @@ export abstract class DyNTS_DiAs_IO_ControlService extends DyNTS_DiBo_IO_Control
|
|
|
20
20
|
protected abstract override mainDiscordBot_CS: DyNTS_DiAs_Main_ControlService;
|
|
21
21
|
/* =
|
|
22
22
|
this.getMainDiscordBotControlService(); */
|
|
23
|
+
/* protected dontSendErrorReply?: boolean; */
|
|
23
24
|
|
|
24
25
|
get llmChat_CS(): DyNTS_OAI_LLMChat_ServiceBase {
|
|
25
26
|
return this.mainDiscordBot_CS.llmChat_CS;
|
|
@@ -33,6 +34,7 @@ export abstract class DyNTS_DiAs_IO_ControlService extends DyNTS_DiBo_IO_Control
|
|
|
33
34
|
messages: messages,
|
|
34
35
|
botClientId: this.mainDiscordBot_CS.botClientId,
|
|
35
36
|
botDisplayName: this.mainDiscordBot_CS.botDisplayName,
|
|
37
|
+
issuer: issuer,
|
|
36
38
|
});
|
|
37
39
|
|
|
38
40
|
const gptResult: string = await this.llmChat_CS.resolveConversationMessage({
|
|
@@ -47,9 +49,9 @@ export abstract class DyNTS_DiAs_IO_ControlService extends DyNTS_DiBo_IO_Control
|
|
|
47
49
|
} catch (error) {
|
|
48
50
|
DyFM_Error.logSimple('❌❌ Error handleNewMessage:', error);
|
|
49
51
|
|
|
50
|
-
if (DyNTS_DiBo_global_settings.debugLevel >= 1) {
|
|
52
|
+
if (!this.dontSendErrorReply && DyNTS_DiBo_global_settings.debugLevel >= 1) {
|
|
51
53
|
await message.reply(
|
|
52
|
-
`[SYSTEM|ERROR] Error occurred while handling the message:\n` +
|
|
54
|
+
`[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-DiAs-IOCS-H0] Error occurred while handling the message:\n` +
|
|
53
55
|
DyFM_Error.getAnyMessage(error)
|
|
54
56
|
).catch(error => {
|
|
55
57
|
DyFM_Error.logSimple('❌❌ Error sending message to report channel:', error);
|
|
@@ -9,8 +9,8 @@ import { DyNTS_global_settings } from '../../..';
|
|
|
9
9
|
|
|
10
10
|
export abstract class DyNTS_DiAs_Main_ControlService extends DyNTS_DiAs_ServiceBase {
|
|
11
11
|
|
|
12
|
-
protected abstract override botIO_CS: DyNTS_DiAs_IO_ControlService;
|
|
13
|
-
protected abstract override getBotIOControlService(): DyNTS_DiAs_IO_ControlService;
|
|
12
|
+
/* protected abstract override botIO_CS: DyNTS_DiAs_IO_ControlService;
|
|
13
|
+
protected abstract override getBotIOControlService(): DyNTS_DiAs_IO_ControlService; */
|
|
14
14
|
|
|
15
15
|
/* override async start(issuer: string): Promise<void> {
|
|
16
16
|
try {
|
|
@@ -8,6 +8,7 @@ import { DyNTS_global_settings } from '../../../_collections/global-settings.con
|
|
|
8
8
|
import { DyNTS_OAI_GPT_Message } from '../../open-ai/_models/interfaces/oai-gpt-message.interface';
|
|
9
9
|
import { DyNTS_OAI_GPT_Message_Role } from '../../open-ai/_enums/oai-gpt-message-role.enum';
|
|
10
10
|
import { DyNTS_DiAs_Util } from '../_collections/dias.util';
|
|
11
|
+
import { DyNTS_DiAs_IO_ControlService } from './dias-io.control-service';
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
export abstract class DyNTS_DiAs_ServiceBase extends DyNTS_DiBo_Main_ControlService {
|
|
@@ -17,10 +18,15 @@ export abstract class DyNTS_DiAs_ServiceBase extends DyNTS_DiBo_Main_ControlServ
|
|
|
17
18
|
}
|
|
18
19
|
readonly llmChat_CS: DyNTS_OAI_LLMChat_ServiceBase = this.getLLMChatControlService();
|
|
19
20
|
|
|
21
|
+
protected abstract override botIO_CS: DyNTS_DiAs_IO_ControlService;
|
|
22
|
+
protected abstract override getBotIOControlService(): DyNTS_DiAs_IO_ControlService;
|
|
23
|
+
|
|
20
24
|
defaultSystemPrompt: string = DyNTS_DiAs_global_settings.defaultSystemPrompt;
|
|
21
25
|
|
|
22
|
-
protected constructor(
|
|
23
|
-
|
|
26
|
+
protected constructor(
|
|
27
|
+
setupAutomatically?: boolean,
|
|
28
|
+
) {
|
|
29
|
+
super(setupAutomatically);
|
|
24
30
|
|
|
25
31
|
DyNTS_global_settings.dias_settings ??= DyNTS_DiAs_global_settings;
|
|
26
32
|
|
|
@@ -28,9 +34,10 @@ export abstract class DyNTS_DiAs_ServiceBase extends DyNTS_DiBo_Main_ControlServ
|
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
async gatherDiscordMessagesForMessage(message: Message, limit: number = 100): Promise<Message[]> {
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
return this.gatherDiscordMessagesForChannel(message.channel as TextChannel, message.author.id, limit);
|
|
38
|
+
}
|
|
33
39
|
|
|
40
|
+
async gatherDiscordMessagesForChannel(channel: TextChannel, userId: string, limit: number = 100): Promise<Message[]> {
|
|
34
41
|
const messages: Message[] = await channel.messages.fetch({ limit: limit }).then(
|
|
35
42
|
messages => messages.filter(
|
|
36
43
|
msg => !DyNTS_DiAs_global_settings.skipConversationMessagesFlags.some(
|
|
@@ -54,13 +61,13 @@ export abstract class DyNTS_DiAs_ServiceBase extends DyNTS_DiBo_Main_ControlServ
|
|
|
54
61
|
message: Message,
|
|
55
62
|
issuer: string,
|
|
56
63
|
): Promise<DyNTS_OAI_GPT_Message[]> {
|
|
57
|
-
|
|
58
|
-
const messages = await this.gatherDiscordMessagesForMessage(message);
|
|
64
|
+
const messages: Message[] = await this.gatherDiscordMessagesForMessage(message);
|
|
59
65
|
|
|
60
66
|
return DyNTS_DiAs_Util.convertDiscordMessagesToOAIConversation({
|
|
61
67
|
messages: messages,
|
|
62
68
|
botClientId: this.botClientId,
|
|
63
69
|
botDisplayName: this.botDisplayName,
|
|
70
|
+
issuer: issuer,
|
|
64
71
|
});
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -19,7 +19,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
if (!channel) {
|
|
22
|
-
DyFM_Log.error(
|
|
22
|
+
DyFM_Log.error(`No text channel found with name "${name}"`)
|
|
23
23
|
return
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -30,7 +30,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
30
30
|
const channel = this.findChannelByName(channels, name)
|
|
31
31
|
|
|
32
32
|
if (!channel.isTextBased()) {
|
|
33
|
-
throw new Error(
|
|
33
|
+
throw new Error(`Channel is not text based with name "${name}"`)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
return channel as TextChannel
|
|
@@ -40,7 +40,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
40
40
|
const channel = this.findChannelByName(channels, name)
|
|
41
41
|
|
|
42
42
|
if (!channel.isVoiceBased()) {
|
|
43
|
-
throw new Error(
|
|
43
|
+
throw new Error(`Channel is not voice based with name "${name}"`)
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
return channel as VoiceChannel
|
|
@@ -55,7 +55,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
55
55
|
const reportMessage = `${client.user?.username} report for duty! ` +
|
|
56
56
|
`(v${DyNTS_global_settings.systemVersion} ${DyNTS_global_settings.env_settings?.environment})`;
|
|
57
57
|
|
|
58
|
-
if (lastReportMessage
|
|
58
|
+
if (lastReportMessage?.content === reportMessage) {
|
|
59
59
|
await this.deleteMessage(lastReportMessage).catch((error) => {
|
|
60
60
|
DyFM_Log.error('Failed to delete message', error);
|
|
61
61
|
});
|
|
@@ -78,7 +78,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
78
78
|
channel.send(message)
|
|
79
79
|
DyFM_Log.success('Message sent to channel', channel.name)
|
|
80
80
|
} else {
|
|
81
|
-
DyFM_Log.error(
|
|
81
|
+
DyFM_Log.error(`Channel is not text based "${channelName}"`)
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -140,7 +140,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
140
140
|
const channel = this.findChannelByName(guild.channels, channelName)
|
|
141
141
|
|
|
142
142
|
if (!channel?.isTextBased()) {
|
|
143
|
-
DyFM_Log.error(
|
|
143
|
+
DyFM_Log.error(`Channel is not text based "${channelName}"`)
|
|
144
144
|
return
|
|
145
145
|
}
|
|
146
146
|
|
|
@@ -232,7 +232,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
232
232
|
const channel = this.findChannelByName(guild.channels, channelName)
|
|
233
233
|
|
|
234
234
|
if (!channel?.isTextBased()) {
|
|
235
|
-
DyFM_Log.error(
|
|
235
|
+
DyFM_Log.error(`Channel is not text based "${channelName}"`)
|
|
236
236
|
return []
|
|
237
237
|
}
|
|
238
238
|
|
|
@@ -331,7 +331,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
331
331
|
const channel = this.findChannelByName(guild.channels, channelName)
|
|
332
332
|
|
|
333
333
|
if (!channel?.isTextBased()) {
|
|
334
|
-
DyFM_Log.error(
|
|
334
|
+
DyFM_Log.error(`Channel is not text based with name "${channelName}"`)
|
|
335
335
|
return
|
|
336
336
|
}
|
|
337
337
|
|
|
@@ -347,7 +347,7 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
347
347
|
const channel = this.findChannelByName(guild.channels, channelName)
|
|
348
348
|
|
|
349
349
|
if (!channel?.isTextBased()) {
|
|
350
|
-
DyFM_Log.error(
|
|
350
|
+
DyFM_Log.error(`Channel is not text based with name "${channelName}"`)
|
|
351
351
|
return
|
|
352
352
|
}
|
|
353
353
|
|
|
@@ -369,6 +369,6 @@ export class DyNTS_DiBo_Operations_Util {
|
|
|
369
369
|
DyFM_Log.error('Failed to delete message', error);
|
|
370
370
|
});
|
|
371
371
|
|
|
372
|
-
DyFM_Log.success('Message deleted', message.
|
|
372
|
+
DyFM_Log.success('Message deleted:', message.content);
|
|
373
373
|
}
|
|
374
374
|
}
|
|
@@ -16,11 +16,11 @@ export abstract class DyNTS_DiBo_Commands_ControlService extends DyNTS_Singleton
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
protected abstract getMainDiscordBotControlService(): DyNTS_DiBo_Main_ControlService;
|
|
19
|
-
protected readonly
|
|
19
|
+
protected readonly diAs_CS: DyNTS_DiBo_Main_ControlService =
|
|
20
20
|
this.getMainDiscordBotControlService();
|
|
21
21
|
|
|
22
22
|
get discordServer(): Guild {
|
|
23
|
-
return this.
|
|
23
|
+
return this.diAs_CS?.discordServer;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
protected constructor() {
|
|
@@ -45,7 +45,7 @@ export abstract class DyNTS_DiBo_Commands_ControlService extends DyNTS_Singleton
|
|
|
45
45
|
try {
|
|
46
46
|
let haveCommandOperator = false;
|
|
47
47
|
let msg = message.content.replace(
|
|
48
|
-
`<@${this.
|
|
48
|
+
`<@${this.diAs_CS.client.user.id}>`, ''
|
|
49
49
|
).trim();
|
|
50
50
|
|
|
51
51
|
if (!DyNTS_DiBo_global_settings.commandSettings.commandOperator) {
|
|
@@ -32,6 +32,8 @@ export abstract class DyNTS_DiBo_IO_ControlService extends DyNTS_SingletonServic
|
|
|
32
32
|
protected abstract getCommandsControlService(): DyNTS_DiBo_Commands_ControlService;
|
|
33
33
|
protected commands_CS: DyNTS_DiBo_Commands_ControlService;
|
|
34
34
|
|
|
35
|
+
dontSendErrorReply?: boolean;
|
|
36
|
+
|
|
35
37
|
/* protected constructor() {
|
|
36
38
|
super();
|
|
37
39
|
} */
|
|
@@ -86,9 +88,9 @@ export abstract class DyNTS_DiBo_IO_ControlService extends DyNTS_SingletonServic
|
|
|
86
88
|
} catch (error) {
|
|
87
89
|
DyFM_Error.logSimple('❌❌ Error handleNewMessage:', error);
|
|
88
90
|
|
|
89
|
-
if (DyNTS_DiBo_global_settings.debugLevel >= 1) {
|
|
91
|
+
if (!this.dontSendErrorReply && DyNTS_DiBo_global_settings.debugLevel >= 1) {
|
|
90
92
|
await message.reply(
|
|
91
|
-
`[SYSTEM|ERROR] Error occurred while handling the message:\n` +
|
|
93
|
+
`[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-DiBo-IO-H0] Error occurred while handling the message:\n` +
|
|
92
94
|
DyFM_Error.getAnyMessage(error)
|
|
93
95
|
).catch(error => {
|
|
94
96
|
DyFM_Error.logSimple('❌❌ Error sending message to report channel:', error);
|
|
@@ -185,8 +187,8 @@ export abstract class DyNTS_DiBo_IO_ControlService extends DyNTS_SingletonServic
|
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
if (
|
|
188
|
-
isPinged &&
|
|
189
|
-
|
|
190
|
+
//isPinged &&
|
|
191
|
+
//!isOwnMessage && vótmá
|
|
190
192
|
message.author.bot &&
|
|
191
193
|
!DyNTS_DiBo_global_settings.allowBotsInteractEachOther
|
|
192
194
|
) {
|
|
@@ -198,7 +200,7 @@ export abstract class DyNTS_DiBo_IO_ControlService extends DyNTS_SingletonServic
|
|
|
198
200
|
return false;
|
|
199
201
|
}
|
|
200
202
|
|
|
201
|
-
if (!isPinged && !isOwnMessage && !isInDefaultChannel) {
|
|
203
|
+
if (!isPinged /* && !isOwnMessage vótmá */ && !isInDefaultChannel) {
|
|
202
204
|
if (DyNTS_DiBo_global_settings.debugLevel >= 2) {
|
|
203
205
|
DyFM_Log.warn('🚫 not for me; not pinged, and not my message, and not in default channel')
|
|
204
206
|
}
|
|
@@ -81,7 +81,7 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
81
81
|
protected debugLog = false;
|
|
82
82
|
|
|
83
83
|
protected constructor(
|
|
84
|
-
|
|
84
|
+
setupAutomatically?: boolean,
|
|
85
85
|
) {
|
|
86
86
|
super();
|
|
87
87
|
|
|
@@ -102,8 +102,9 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
102
102
|
intents: DyNTS_global_settings.bot_settings.intents,
|
|
103
103
|
partials: DyNTS_global_settings.bot_settings.partials,
|
|
104
104
|
})
|
|
105
|
+
DyFM_Log.success('Discord client initialized');
|
|
105
106
|
|
|
106
|
-
if (
|
|
107
|
+
if (setupAutomatically) {
|
|
107
108
|
this.setup('system-init');
|
|
108
109
|
}
|
|
109
110
|
}
|
|
@@ -172,6 +173,11 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
172
173
|
DyNTS_GlobalService.globalErrorHandler(error);
|
|
173
174
|
reject(error);
|
|
174
175
|
});
|
|
176
|
+
if (this.debugLog) {
|
|
177
|
+
DyFM_Log.info('Error event registered\n\n', new Error().stack);
|
|
178
|
+
} else {
|
|
179
|
+
DyFM_Log.info('Error event registered');
|
|
180
|
+
}
|
|
175
181
|
|
|
176
182
|
this.client.on('ready', async () => {
|
|
177
183
|
if (DyNTS_DiBo_global_settings.debugLevel >= 1) {
|
|
@@ -193,6 +199,11 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
193
199
|
DyFM_Log.success('Discord Bot setup complete')
|
|
194
200
|
resolve();
|
|
195
201
|
});
|
|
202
|
+
if (this.debugLog) {
|
|
203
|
+
DyFM_Log.info('Ready event registered\n\n', new Error().stack);
|
|
204
|
+
} else {
|
|
205
|
+
DyFM_Log.info('Ready event registered');
|
|
206
|
+
}
|
|
196
207
|
|
|
197
208
|
this.client.on('messageCreate', (message: Message) => {
|
|
198
209
|
try {
|
|
@@ -201,6 +212,11 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
201
212
|
DyFM_Log.error('Error handling new message:', error);
|
|
202
213
|
}
|
|
203
214
|
});
|
|
215
|
+
if (this.debugLog) {
|
|
216
|
+
DyFM_Log.info('Message create event registered\n\n', new Error().stack);
|
|
217
|
+
} else {
|
|
218
|
+
DyFM_Log.info('Message create event registered');
|
|
219
|
+
}
|
|
204
220
|
|
|
205
221
|
process.on('exit', () => {
|
|
206
222
|
try {
|
|
@@ -214,6 +230,11 @@ export abstract class DyNTS_DiBo_Main_ControlService extends DyNTS_SingletonServ
|
|
|
214
230
|
DyFM_Log.error('Error sending message to report channel:', error);
|
|
215
231
|
}
|
|
216
232
|
});
|
|
233
|
+
if (this.debugLog) {
|
|
234
|
+
DyFM_Log.info('Exit event registered\n\n', new Error().stack);
|
|
235
|
+
} else {
|
|
236
|
+
DyFM_Log.info('Exit event registered');
|
|
237
|
+
}
|
|
217
238
|
|
|
218
239
|
this.client.login(DyNTS_global_settings.env_settings.discord.token).catch((error) => {
|
|
219
240
|
reject(error);
|
|
@@ -20,7 +20,7 @@ describe('| DyNTS_SocketServer_Mock', () => {
|
|
|
20
20
|
|
|
21
21
|
expect(params).toBeInstanceOf(DyNTS_SocketServerService_Params);
|
|
22
22
|
expect(params.name).toBe('test');
|
|
23
|
-
expect(params.port).toBe(
|
|
23
|
+
expect(params.port).toBe(19393); // Updated from 9393 to 19393
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
it('| should return an empty array for incoming events', () => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DyFM_SocketEvent } from '@futdevpro/fsm-dynamo/socket';
|
|
2
2
|
import { Socket } from 'socket.io';
|
|
3
|
+
import * as net from 'net';
|
|
3
4
|
|
|
4
5
|
import {
|
|
5
6
|
DyNTS_SocketPresence
|
|
@@ -9,8 +10,17 @@ import {
|
|
|
9
10
|
} from '../socket/_models/socket-server-service-params.control-model';
|
|
10
11
|
import { DyNTS_SocketServerService } from '../socket/_services/socket-server.service';
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Utility function to find an available port starting from a base port
|
|
15
|
+
*/
|
|
16
|
+
const findAvailablePort = (basePort: number): number => {
|
|
17
|
+
return basePort; // For now, return the base port, but this could be enhanced
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Mock Socket Server Service for testing purposes
|
|
22
|
+
* Uses a non-privileged port to avoid EACCES errors on Windows
|
|
23
|
+
*/
|
|
14
24
|
export class DyNTS_SocketServer_Mock extends
|
|
15
25
|
DyNTS_SocketServerService<DyNTS_SocketPresence> {
|
|
16
26
|
|
|
@@ -21,7 +31,7 @@ export class DyNTS_SocketServer_Mock extends
|
|
|
21
31
|
getServiceParams(): DyNTS_SocketServerService_Params<any> {
|
|
22
32
|
return new DyNTS_SocketServerService_Params({
|
|
23
33
|
name: 'test',
|
|
24
|
-
port: 9393
|
|
34
|
+
port: findAvailablePort(19393), // Changed from 9393 to 19393 (non-privileged port)
|
|
25
35
|
});
|
|
26
36
|
}
|
|
27
37
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
|
+
import { cryptoJs } from 'crypto-js';
|
|
2
3
|
import { DyFM_Error, DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
3
4
|
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
4
5
|
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
5
6
|
import { DyNTS_OAuth2_AuthService } from './oauth2.auth-service';
|
|
6
|
-
import { randomBytes } from 'crypto';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* OAuth2 Control Service implementation
|
|
@@ -528,7 +528,8 @@ export class DyNTS_OAuth2_ControlService extends DyNTS_SingletonService {
|
|
|
528
528
|
* @returns The generated authorization code
|
|
529
529
|
*/
|
|
530
530
|
private async generateAuthorizationCode(clientId: string, scope: string): Promise<string> {
|
|
531
|
-
const code = randomBytes(32).toString('hex');
|
|
531
|
+
//const code = randomBytes(32).toString('hex');
|
|
532
|
+
const code = cryptoJs.lib.WordArray.random(32).toString();
|
|
532
533
|
const expiresAt = Date.now() + 600000; // 10 minutes expiration
|
|
533
534
|
|
|
534
535
|
this.authorizationCodes.set(code, {
|
|
@@ -547,7 +548,8 @@ export class DyNTS_OAuth2_ControlService extends DyNTS_SingletonService {
|
|
|
547
548
|
* @returns The generated access token
|
|
548
549
|
*/
|
|
549
550
|
private async generateAccessToken(clientId: string, scope: string): Promise<string> {
|
|
550
|
-
const token = randomBytes(32).toString('hex');
|
|
551
|
+
//const token = randomBytes(32).toString('hex');
|
|
552
|
+
const token = cryptoJs.lib.WordArray.random(32).toString();
|
|
551
553
|
const expiresAt = Date.now() + 3600000; // 1 hour expiration
|
|
552
554
|
|
|
553
555
|
this.accessTokens.set(token, {
|
|
@@ -565,7 +567,8 @@ export class DyNTS_OAuth2_ControlService extends DyNTS_SingletonService {
|
|
|
565
567
|
* @returns The generated refresh token
|
|
566
568
|
*/
|
|
567
569
|
private async generateRefreshToken(clientId: string): Promise<string> {
|
|
568
|
-
const token = randomBytes(32).toString('hex');
|
|
570
|
+
//const token = randomBytes(32).toString('hex');
|
|
571
|
+
const token = cryptoJs.lib.WordArray.random(32).toString();
|
|
569
572
|
|
|
570
573
|
this.refreshTokens.set(token, {
|
|
571
574
|
clientId,
|