@futdevpro/nts-dynamo 1.14.24 → 1.14.27

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 (146) hide show
  1. package/build/_modules/ai/_services/ai-provider.service-base.d.ts +1 -1
  2. package/build/_modules/ai/_services/ai-provider.service-base.d.ts.map +1 -1
  3. package/build/_modules/ai/_services/oai-to-ai-adapter.service.d.ts +39 -0
  4. package/build/_modules/ai/_services/oai-to-ai-adapter.service.d.ts.map +1 -0
  5. package/build/_modules/ai/_services/oai-to-ai-adapter.service.js +218 -0
  6. package/build/_modules/ai/_services/oai-to-ai-adapter.service.js.map +1 -0
  7. package/build/_modules/assistant/_services/ass-io.control-service.d.ts +4 -3
  8. package/build/_modules/assistant/_services/ass-io.control-service.d.ts.map +1 -1
  9. package/build/_modules/assistant/_services/ass-io.control-service.js +6 -6
  10. package/build/_modules/assistant/_services/ass-io.control-service.js.map +1 -1
  11. package/build/_modules/assistant/_services/ass-main.control-service.d.ts +2 -2
  12. package/build/_modules/assistant/_services/ass-main.control-service.d.ts.map +1 -1
  13. package/build/_modules/assistant/_services/ass.service-base.d.ts +7 -5
  14. package/build/_modules/assistant/_services/ass.service-base.d.ts.map +1 -1
  15. package/build/_modules/assistant/_services/ass.service-base.js +6 -4
  16. package/build/_modules/assistant/_services/ass.service-base.js.map +1 -1
  17. package/build/_modules/bot/_collections/bot-operations.util.d.ts +13 -13
  18. package/build/_modules/bot/_collections/bot-operations.util.d.ts.map +1 -1
  19. package/build/_modules/bot/_collections/bot-operations.util.js.map +1 -1
  20. package/build/_modules/bot/_enums/bot-message-provider.enum.d.ts +8 -0
  21. package/build/_modules/bot/_enums/bot-message-provider.enum.d.ts.map +1 -0
  22. package/build/_modules/bot/_enums/bot-message-provider.enum.js +12 -0
  23. package/build/_modules/bot/_enums/bot-message-provider.enum.js.map +1 -0
  24. package/build/_modules/bot/_models/bot-channel.interface.d.ts +2 -2
  25. package/build/_modules/bot/_models/bot-channel.interface.d.ts.map +1 -1
  26. package/build/_modules/bot/_models/bot-command.interface.d.ts +3 -3
  27. package/build/_modules/bot/_models/bot-command.interface.d.ts.map +1 -1
  28. package/build/_modules/bot/_models/bot-global-settings.interface.d.ts +7 -0
  29. package/build/_modules/bot/_models/bot-global-settings.interface.d.ts.map +1 -1
  30. package/build/_modules/bot/_models/bot-message-wrapper.interface.d.ts +21 -0
  31. package/build/_modules/bot/_models/bot-message-wrapper.interface.d.ts.map +1 -0
  32. package/build/_modules/bot/_models/bot-message-wrapper.interface.js +3 -0
  33. package/build/_modules/bot/_models/bot-message-wrapper.interface.js.map +1 -0
  34. package/build/_modules/bot/_models/bot-message.interface.d.ts +2 -2
  35. package/build/_modules/bot/_models/bot-message.interface.d.ts.map +1 -1
  36. package/build/_modules/bot/_models/bot-messaging-provider.interface.d.ts +68 -0
  37. package/build/_modules/bot/_models/bot-messaging-provider.interface.d.ts.map +1 -0
  38. package/build/_modules/bot/_models/bot-messaging-provider.interface.js +3 -0
  39. package/build/_modules/bot/_models/bot-messaging-provider.interface.js.map +1 -0
  40. package/build/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.d.ts +2 -2
  41. package/build/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.d.ts.map +1 -1
  42. package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.d.ts +2 -2
  43. package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.d.ts.map +1 -1
  44. package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.js.map +1 -1
  45. package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.service.d.ts +56 -0
  46. package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.service.d.ts.map +1 -0
  47. package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.service.js +379 -0
  48. package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.service.js.map +1 -0
  49. package/build/_modules/bot/_modules/discord-bot/index.d.ts +1 -1
  50. package/build/_modules/bot/_modules/discord-bot/index.d.ts.map +1 -1
  51. package/build/_modules/bot/_modules/discord-bot/index.js +1 -1
  52. package/build/_modules/bot/_modules/discord-bot/index.js.map +1 -1
  53. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.d.ts +3 -3
  54. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.d.ts.map +1 -1
  55. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.js.map +1 -1
  56. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.d.ts +2 -2
  57. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.d.ts.map +1 -1
  58. package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.js.map +1 -1
  59. package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.service.d.ts +55 -0
  60. package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.service.d.ts.map +1 -0
  61. package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.service.js +313 -0
  62. package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.service.js.map +1 -0
  63. package/build/_modules/bot/_modules/dynamo-bot/index.d.ts +1 -1
  64. package/build/_modules/bot/_modules/dynamo-bot/index.d.ts.map +1 -1
  65. package/build/_modules/bot/_modules/dynamo-bot/index.js +1 -1
  66. package/build/_modules/bot/_modules/dynamo-bot/index.js.map +1 -1
  67. package/build/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.d.ts +2 -2
  68. package/build/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.d.ts.map +1 -1
  69. package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.service.d.ts +41 -0
  70. package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.service.d.ts.map +1 -0
  71. package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.service.js +119 -0
  72. package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.service.js.map +1 -0
  73. package/build/_modules/bot/_modules/slack-bot/index.d.ts +1 -1
  74. package/build/_modules/bot/_modules/slack-bot/index.d.ts.map +1 -1
  75. package/build/_modules/bot/_modules/slack-bot/index.js +1 -1
  76. package/build/_modules/bot/_modules/slack-bot/index.js.map +1 -1
  77. package/build/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.d.ts +2 -2
  78. package/build/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.d.ts.map +1 -1
  79. package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.service.d.ts +41 -0
  80. package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.service.d.ts.map +1 -0
  81. package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.service.js +119 -0
  82. package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.service.js.map +1 -0
  83. package/build/_modules/bot/_modules/teams-bot/index.d.ts +1 -1
  84. package/build/_modules/bot/_modules/teams-bot/index.d.ts.map +1 -1
  85. package/build/_modules/bot/_modules/teams-bot/index.js +1 -1
  86. package/build/_modules/bot/_modules/teams-bot/index.js.map +1 -1
  87. package/build/_modules/bot/_services/bot-commands.control-service.d.ts +7 -6
  88. package/build/_modules/bot/_services/bot-commands.control-service.d.ts.map +1 -1
  89. package/build/_modules/bot/_services/bot-commands.control-service.js +3 -2
  90. package/build/_modules/bot/_services/bot-commands.control-service.js.map +1 -1
  91. package/build/_modules/bot/_services/bot-io.control-service.d.ts +13 -12
  92. package/build/_modules/bot/_services/bot-io.control-service.d.ts.map +1 -1
  93. package/build/_modules/bot/_services/bot-io.control-service.js +24 -17
  94. package/build/_modules/bot/_services/bot-io.control-service.js.map +1 -1
  95. package/build/_modules/bot/_services/bot-main.control-service.d.ts +25 -12
  96. package/build/_modules/bot/_services/bot-main.control-service.d.ts.map +1 -1
  97. package/build/_modules/bot/_services/bot-main.control-service.js +112 -2
  98. package/build/_modules/bot/_services/bot-main.control-service.js.map +1 -1
  99. package/build/_modules/bot/_services/bot-messaging-provider-factory.service.d.ts +6 -0
  100. package/build/_modules/bot/_services/bot-messaging-provider-factory.service.d.ts.map +1 -0
  101. package/build/_modules/bot/_services/bot-messaging-provider-factory.service.js +47 -0
  102. package/build/_modules/bot/_services/bot-messaging-provider-factory.service.js.map +1 -0
  103. package/build/_modules/bot/_services/bot-routines.control-service.d.ts +2 -2
  104. package/build/_modules/bot/_services/bot-routines.control-service.d.ts.map +1 -1
  105. package/build/_modules/bot/index.d.ts +4 -3
  106. package/build/_modules/bot/index.d.ts.map +1 -1
  107. package/build/_modules/bot/index.js +4 -3
  108. package/build/_modules/bot/index.js.map +1 -1
  109. package/build/_modules/discord-bot/_services/dibo-main.control-service.d.ts.map +1 -1
  110. package/build/_modules/discord-bot/_services/dibo-main.control-service.js +2 -0
  111. package/build/_modules/discord-bot/_services/dibo-main.control-service.js.map +1 -1
  112. package/package.json +1 -1
  113. package/src/_modules/ai/_services/ai-provider.service-base.ts +1 -1
  114. package/src/_modules/assistant/_services/ass-io.control-service.ts +14 -9
  115. package/src/_modules/assistant/_services/ass-main.control-service.ts +3 -3
  116. package/src/_modules/assistant/_services/ass.service-base.ts +22 -14
  117. package/src/_modules/bot/_collections/bot-operations.util.ts +14 -14
  118. package/src/_modules/bot/_enums/{bot-provider.enum.ts → bot-message-provider.enum.ts} +1 -1
  119. package/src/_modules/bot/_models/bot-channel.interface.ts +2 -2
  120. package/src/_modules/bot/_models/bot-command.interface.ts +3 -3
  121. package/src/_modules/bot/_models/bot-global-settings.interface.ts +9 -0
  122. package/src/_modules/bot/_models/bot-message-wrapper.interface.ts +31 -0
  123. package/src/_modules/bot/_models/bot-message.interface.ts +2 -2
  124. package/src/_modules/bot/_models/{bot-provider.interface.ts → bot-messaging-provider.interface.ts} +26 -23
  125. package/src/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.ts +2 -2
  126. package/src/_modules/bot/_modules/discord-bot/_collections/dib.util.ts +2 -2
  127. package/src/_modules/bot/_modules/discord-bot/_services/{dib-provider.service.ts → dib-messaging-provider.service.ts} +20 -7
  128. package/src/_modules/bot/_modules/discord-bot/index.ts +1 -1
  129. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +3 -3
  130. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.ts +2 -2
  131. package/src/_modules/bot/_modules/dynamo-bot/_services/{dyb-provider.service.ts → dyb-messaging-provider.service.ts} +12 -8
  132. package/src/_modules/bot/_modules/dynamo-bot/index.ts +1 -1
  133. package/src/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.ts +2 -2
  134. package/src/_modules/bot/_modules/slack-bot/_services/{slb-provider.service.ts → slb-messaging-provider.service.ts} +11 -7
  135. package/src/_modules/bot/_modules/slack-bot/index.ts +1 -1
  136. package/src/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.ts +2 -2
  137. package/src/_modules/bot/_modules/teams-bot/_services/{teb-provider.service.ts → teb-messaging-provider.service.ts} +11 -7
  138. package/src/_modules/bot/_modules/teams-bot/index.ts +1 -1
  139. package/src/_modules/bot/_services/bot-commands.control-service.ts +17 -15
  140. package/src/_modules/bot/_services/bot-io.control-service.ts +42 -33
  141. package/src/_modules/bot/_services/bot-main.control-service.ts +171 -39
  142. package/src/_modules/bot/_services/bot-messaging-provider-factory.service.ts +56 -0
  143. package/src/_modules/bot/_services/bot-routines.control-service.ts +3 -3
  144. package/src/_modules/bot/index.ts +4 -3
  145. package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +2 -0
  146. package/src/_modules/bot/_services/bot-provider-factory.service.ts +0 -34
@@ -1,27 +1,27 @@
1
- import { DyNTS_Bot_Provider, DyNTS_Bot_Provider_Config } from '../../../_models/bot-provider.interface';
1
+ import { DyNTS_Bot_MessagingProvider, DyNTS_Bot_MessagingProvider_Config } from '../../../_models/bot-messaging-provider.interface';
2
2
  import { DyNTS_Bot_LastMessageDate } from '../../../_models/bot-last-message-date.interface';
3
3
  import { DyNTS_Bot_LastMentionDate } from '../../../_models/bot-last-mention-date.interface';
4
- import { DyNTS_Bot_Provider_Type } from '../../../_enums/bot-provider.enum';
4
+ import { DyNTS_Bot_MessageProvider_Type } from '../../../_enums/bot-message-provider.enum';
5
5
  import { DyNTS_TeB_Message, DyNTS_TeB_Channel, DyNTS_TeB_User } from '../_models/teb-platform.types';
6
6
 
7
- export class DyNTS_TeB_Provider implements DyNTS_Bot_Provider<
7
+ export class DyNTS_TeB_MessagingProvider implements DyNTS_Bot_MessagingProvider<
8
8
  DyNTS_TeB_Channel,
9
9
  DyNTS_TeB_Message,
10
10
  DyNTS_TeB_User
11
11
  > {
12
12
  private isInitialized: boolean = false;
13
- private config: DyNTS_Bot_Provider_Config;
13
+ private config: DyNTS_Bot_MessagingProvider_Config;
14
14
 
15
15
  // Event handlers
16
16
  private messageHandlers: Array<(message: DyNTS_TeB_Message, issuer: string) => void> = [];
17
17
  private readyHandlers: Array<() => void> = [];
18
18
  private errorHandlers: Array<(error: Error) => void> = [];
19
19
 
20
- async initialize(config: DyNTS_Bot_Provider_Config): Promise<void> {
20
+ async initialize(config: DyNTS_Bot_MessagingProvider_Config): Promise<void> {
21
21
  this.config = config;
22
22
 
23
- if (config.provider !== DyNTS_Bot_Provider_Type.teams) {
24
- throw new Error(`Invalid provider type: ${config.provider}. Expected 'teams'`);
23
+ if (config.messageProvider !== DyNTS_Bot_MessageProvider_Type.teams) {
24
+ throw new Error(`Invalid provider type: ${config.messageProvider}. Expected 'teams'`);
25
25
  }
26
26
 
27
27
  if (!config.teams) {
@@ -146,6 +146,10 @@ export class DyNTS_TeB_Provider implements DyNTS_Bot_Provider<
146
146
  return 'teams';
147
147
  }
148
148
 
149
+ getProviderId(): string {
150
+ return this.config?.providerId || this.getProviderName();
151
+ }
152
+
149
153
  isReady(): boolean {
150
154
  return this.isInitialized;
151
155
  }
@@ -8,7 +8,7 @@
8
8
  export * from './_models/teb-platform.types';
9
9
 
10
10
  // SERVICES
11
- export * from './_services/teb-provider.service';
11
+ export * from './_services/teb-messaging-provider.service';
12
12
 
13
13
  // COLLECTIONS
14
14
  export * from './_collections/teb-operations.util';
@@ -7,28 +7,29 @@ import { DyNTS_Bot_Message } from '../_models/bot-message.interface';
7
7
  import { DyNTS_Bot_Global_Settings } from '../_models/bot-global-settings.interface';
8
8
  import { DyNTS_Bot_User } from '../_models/bot-user.interface';
9
9
  import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface';
10
- import { DyNTS_Bot_Provider, DyNTS_Bot_Provider_Config } from '../_models/bot-provider.interface';
10
+ import { DyNTS_Bot_MessagingProvider, DyNTS_Bot_MessagingProvider_Config } from '../_models/bot-messaging-provider.interface';
11
+ import { DyNTS_Bot_MessageWrapper } from '../_models/bot-message-wrapper.interface';
11
12
 
12
13
  export abstract class DyNTS_Bot_Commands_ControlService<
13
- T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
14
- T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
15
- T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
16
- T_PlatformProvider extends DyNTS_Bot_Provider<
17
- T_PlatformChannel,
18
- T_PlatformMessage,
19
- T_PlatformUser
20
- > = DyNTS_Bot_Provider<T_PlatformChannel, T_PlatformMessage, T_PlatformUser>
14
+ T_MessagingPlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
15
+ T_MessagingPlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
16
+ T_MessagingPlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
17
+ T_MessagingPlatformProvider extends DyNTS_Bot_MessagingProvider<
18
+ T_MessagingPlatformChannel,
19
+ T_MessagingPlatformMessage,
20
+ T_MessagingPlatformUser
21
+ > = DyNTS_Bot_MessagingProvider<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser>
21
22
  > extends DyNTS_SingletonService {
22
23
 
23
24
  static getInstance<T_PlatformMessage extends DyNTS_Bot_Message<any>>(): DyNTS_Bot_Commands_ControlService<T_PlatformMessage> {
24
25
  return DyNTS_Bot_Commands_ControlService.getSingletonInstance();
25
26
  }
26
27
 
27
- protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService<T_PlatformChannel, T_PlatformMessage, T_PlatformUser, T_PlatformProvider>;
28
- protected readonly mainBot_CS: DyNTS_Bot_Main_ControlService<T_PlatformChannel, T_PlatformMessage, T_PlatformUser, T_PlatformProvider> =
28
+ protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser, T_MessagingPlatformProvider>;
29
+ protected readonly mainBot_CS: DyNTS_Bot_Main_ControlService<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser, T_MessagingPlatformProvider> =
29
30
  this.getMainBotControlService();
30
31
 
31
- get provider(): T_PlatformProvider {
32
+ get provider(): T_MessagingPlatformProvider {
32
33
  return this.mainBot_CS?.provider;
33
34
  }
34
35
 
@@ -50,9 +51,9 @@ export abstract class DyNTS_Bot_Commands_ControlService<
50
51
  }
51
52
  }
52
53
 
53
- async handleCommand(message: T_PlatformMessage, issuer: string): Promise<void> {
54
+ async handleCommand(message: T_MessagingPlatformMessage, wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage>, issuer: string): Promise<void> {
54
55
  try {
55
- const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Provider_Config;
56
+ const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_MessagingProvider_Config;
56
57
  let haveCommandOperator = false;
57
58
  let msg = message.content.replace(
58
59
  `<@${this.mainBot_CS.botClientId}>`, ''
@@ -110,7 +111,8 @@ export abstract class DyNTS_Bot_Commands_ControlService<
110
111
 
111
112
  await commandExists.commandHandler(message);
112
113
  } catch (error) {
113
- this.provider.replyToMessage(
114
+ const provider = wrapper?.provider || this.provider;
115
+ provider.replyToMessage(
114
116
  message.id,
115
117
  message.channelId,
116
118
  `Error occurred while handling the command:\n` +
@@ -7,21 +7,22 @@ import { DyNTS_global_settings } from '../../../_collections/global-settings.con
7
7
  import { DyNTS_Bot_Message } from '../_models/bot-message.interface'
8
8
  import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface'
9
9
  import { DyNTS_Bot_User } from '../_models/bot-user.interface'
10
- import { DyNTS_Bot_Provider } from '../_models/bot-provider.interface'
10
+ import { DyNTS_Bot_MessagingProvider } from '../_models/bot-messaging-provider.interface'
11
11
  import { DyNTS_Bot_Global_Settings } from '../_models/bot-global-settings.interface'
12
+ import { DyNTS_Bot_MessageWrapper } from '../_models/bot-message-wrapper.interface'
12
13
  import { DyNTS_Msg_Integration_ControlService } from '../../messaging/_services/msg-integration.control-service'
13
14
 
14
15
  export abstract class DyNTS_Bot_IO_ControlService<
15
- T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
16
- T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
17
- T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
18
- T_PlatformProvider extends DyNTS_Bot_Provider<T_PlatformChannel, T_PlatformMessage, T_PlatformUser> = DyNTS_Bot_Provider<T_PlatformChannel, T_PlatformMessage, T_PlatformUser>
16
+ T_MessagingPlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
17
+ T_MessagingPlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
18
+ T_MessagingPlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
19
+ T_MessagingPlatformProvider extends DyNTS_Bot_MessagingProvider<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser> = DyNTS_Bot_MessagingProvider<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser>
19
20
  > extends DyNTS_SingletonService {
20
21
 
21
- protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService<T_PlatformChannel, T_PlatformMessage, T_PlatformUser, T_PlatformProvider>;
22
- protected abstract mainBot_CS: DyNTS_Bot_Main_ControlService<T_PlatformChannel, T_PlatformMessage, T_PlatformUser, T_PlatformProvider>;
22
+ protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser, T_MessagingPlatformProvider>;
23
+ protected abstract mainBot_CS: DyNTS_Bot_Main_ControlService<T_MessagingPlatformChannel, T_MessagingPlatformMessage, T_MessagingPlatformUser, T_MessagingPlatformProvider>;
23
24
 
24
- get provider(): T_PlatformProvider {
25
+ get provider(): T_MessagingPlatformProvider {
25
26
  return this.mainBot_CS?.provider;
26
27
  }
27
28
 
@@ -33,8 +34,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
33
34
  return this.mainBot_CS.botDisplayName;
34
35
  }
35
36
 
36
- protected abstract getCommandsControlService(): DyNTS_Bot_Commands_ControlService<T_PlatformMessage>;
37
- protected commands_CS: DyNTS_Bot_Commands_ControlService<T_PlatformMessage>;
37
+ protected abstract getCommandsControlService(): DyNTS_Bot_Commands_ControlService<T_MessagingPlatformMessage>;
38
+ protected commands_CS: DyNTS_Bot_Commands_ControlService<T_MessagingPlatformMessage>;
38
39
 
39
40
  dontSendErrorReply?: boolean;
40
41
 
@@ -64,27 +65,28 @@ export abstract class DyNTS_Bot_IO_ControlService<
64
65
  }
65
66
  }
66
67
 
67
- async handleNewMessage(message: T_PlatformMessage, issuer: string): Promise<void> {
68
+ async handleNewMessage(wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage>, issuer: string): Promise<void> {
68
69
  try {
70
+ const message = wrapper.message;
69
71
  const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
70
72
 
71
73
  if (botSettings?.debugLevel >= 1) {
72
- DyFM_Log.H_log(`incoming message (${message.authorDisplayName}):\n${message.content}`)
74
+ DyFM_Log.H_log(`incoming message (${message.authorDisplayName}) [${wrapper.providerId}]:\n${message.content}`)
73
75
  }
74
76
 
75
- const isForYou = await this.getMessageIsForBotToHandle(message, issuer);
77
+ const isForYou = await this.getMessageIsForBotToHandle(message, wrapper, issuer);
76
78
 
77
79
  if (!isForYou) {
78
80
  return;
79
81
  }
80
82
 
81
- const isHandledAsCommand = await this.handleIfCommand(message, issuer);
83
+ const isHandledAsCommand = await this.handleIfCommand(message, wrapper, issuer);
82
84
 
83
85
  if (isHandledAsCommand) {
84
86
  return;
85
87
  }
86
88
 
87
- await this.handleMessage(message, issuer);
89
+ await this.handleMessage(message, wrapper, issuer);
88
90
 
89
91
  // Sync message to messaging system if enabled
90
92
  try {
@@ -94,7 +96,7 @@ export abstract class DyNTS_Bot_IO_ControlService<
94
96
  // Find or create conversation for this channel
95
97
  const conversation = await messagingIntegration.findOrCreateBotConversation(
96
98
  message.channelId,
97
- this.provider.getProviderName(),
99
+ wrapper.providerType,
98
100
  issuer
99
101
  );
100
102
 
@@ -115,14 +117,16 @@ export abstract class DyNTS_Bot_IO_ControlService<
115
117
  const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
116
118
 
117
119
  if (!this.dontSendErrorReply && botSettings?.debugLevel >= 1) {
118
- await this.provider.replyToMessage(
119
- message.id,
120
- message.channelId,
121
- `[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-IO-H0] Error occurred while handling the message:\n` +
122
- DyFM_Error.getAnyMessage(error)
123
- ).catch(error => {
124
- DyFM_Error.logSimple('❌❌ Error sending message to report channel:', error);
125
- });
120
+ if (wrapper.provider && wrapper.message) {
121
+ await wrapper.provider.replyToMessage(
122
+ wrapper.message.id,
123
+ wrapper.message.channelId,
124
+ `[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-IO-H0] Error occurred while handling the message:\n` +
125
+ DyFM_Error.getAnyMessage(error)
126
+ ).catch(err => {
127
+ DyFM_Error.logSimple('❌❌ Error sending message to report channel:', err);
128
+ });
129
+ }
126
130
  }
127
131
 
128
132
  throw new DyFM_Error({
@@ -132,17 +136,19 @@ export abstract class DyNTS_Bot_IO_ControlService<
132
136
  }
133
137
  }
134
138
 
135
- abstract handleMessage(message: T_PlatformMessage, issuer: string): Promise<T_PlatformMessage>;
139
+ abstract handleMessage(message: T_MessagingPlatformMessage, wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage>, issuer: string): Promise<T_MessagingPlatformMessage>;
136
140
 
137
141
  async getMessageIsForBotToHandle(
138
- message: T_PlatformMessage,
142
+ message: T_MessagingPlatformMessage,
143
+ wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage>,
139
144
  issuer: string,
140
145
  dontRemovePing?: boolean
141
146
  ): Promise<boolean> {
142
147
  try {
143
148
  const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
144
149
 
145
- if (!this.provider || !this.mainBot_CS || !this.botClientId) {
150
+ const provider = wrapper.provider || this.provider;
151
+ if (!provider || !this.mainBot_CS || !this.botClientId) {
146
152
  DyFM_Log.H_error(
147
153
  '🚫❌ Bot not initialized yet. END wont respond to message:', message.content,
148
154
  new Error('Bot not initialized yet').stack
@@ -184,7 +190,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
184
190
  }
185
191
 
186
192
  if (!isOwnMessage && isPinged) {
187
- this.provider.replyToMessage(
193
+ const provider = wrapper.provider || this.provider;
194
+ provider.replyToMessage(
188
195
  message.id,
189
196
  message.channelId,
190
197
  `[SYSTEM|REFUSE|CHANNEL] I'm sorry, but I'm not allowed to answer you in this channel!`
@@ -221,7 +228,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
221
228
  ) {
222
229
  if (isPinged && botSettings?.debugLevel >= 2) {
223
230
  DyFM_Log.warn('🚫🤖❌ not for me; this message is from a bot')
224
- this.provider.replyToMessage(
231
+ const provider = wrapper.provider || this.provider;
232
+ provider.replyToMessage(
225
233
  message.id,
226
234
  message.channelId,
227
235
  '[SYSTEM|REFUSE|BOT] You should not ping me!'
@@ -247,7 +255,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
247
255
  if (!isAllowedUser) {
248
256
  if (botSettings?.debugLevel >= 2) {
249
257
  DyFM_Log.warn('🚫❌ not allowed user. END', message.authorName, message.authorDisplayName)
250
- this.provider.replyToMessage(
258
+ const provider = wrapper.provider || this.provider;
259
+ provider.replyToMessage(
251
260
  message.id,
252
261
  message.channelId,
253
262
  `[SYSTEM|REFUSE|USER] I'm sorry, but I'm not allowed to answer you!`
@@ -274,12 +283,12 @@ export abstract class DyNTS_Bot_IO_ControlService<
274
283
  }
275
284
  }
276
285
 
277
- async handleIfCommand(message: T_PlatformMessage, issuer: string): Promise<boolean> {
286
+ async handleIfCommand(message: T_MessagingPlatformMessage, wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage>, issuer: string): Promise<boolean> {
278
287
  try {
279
288
  const isCommand = await this.isCommand(message, issuer);
280
289
 
281
290
  if (isCommand) {
282
- await this.commands_CS.handleCommand(message, issuer);
291
+ await this.commands_CS.handleCommand(message, wrapper, issuer);
283
292
  }
284
293
 
285
294
  return Boolean(isCommand);
@@ -291,7 +300,7 @@ export abstract class DyNTS_Bot_IO_ControlService<
291
300
  }
292
301
  }
293
302
 
294
- async isCommand(message: T_PlatformMessage, issuer: string): Promise<boolean> {
303
+ async isCommand(message: T_MessagingPlatformMessage, issuer: string): Promise<boolean> {
295
304
  try {
296
305
  const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
297
306
  let haveCommandOperator = false;
@@ -1,14 +1,16 @@
1
1
  import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
2
2
  import { DyFM_Async, DyFM_Error, DyFM_Log } from '@futdevpro/fsm-dynamo';
3
3
  import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
4
- import { DyNTS_Bot_Provider } from '../_models/bot-provider.interface';
4
+ import { DyNTS_Bot_MessagingProvider, DyNTS_Bot_MessagingProvider_Config } from '../_models/bot-messaging-provider.interface';
5
5
  import { DyNTS_Bot_Message } from '../_models/bot-message.interface';
6
6
  import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface';
7
7
  import { DyNTS_Bot_User } from '../_models/bot-user.interface';
8
- import { DyNTS_Bot_Global_Settings } from '../_models/bot-global-settings.interface';
8
+ import { DyNTS_Bot_Global_Settings, DyNTS_Bot_Settings } from '../_models/bot-global-settings.interface';
9
9
  import { DyNTS_GlobalService } from '../../../_services/core/global.service';
10
10
  import { DyNTS_Bot_IO_ControlService } from './bot-io.control-service';
11
11
  import { DyNTS_Bot_Routines_ControlService } from './bot-routines.control-service';
12
+ import { DyNTS_Bot_MessageWrapper } from '../_models/bot-message-wrapper.interface';
13
+ import { DyNTS_Bot_MessagingProvider_Factory } from './bot-messaging-provider-factory.service';
12
14
 
13
15
  /**
14
16
  * This is the main control service for the Bot.
@@ -22,26 +24,35 @@ import { DyNTS_Bot_Routines_ControlService } from './bot-routines.control-servic
22
24
  */
23
25
 
24
26
  export abstract class DyNTS_Bot_Main_ControlService<
25
- T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
26
- T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
27
- T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
28
- T_PlatformProvider extends DyNTS_Bot_Provider<
29
- T_PlatformChannel,
30
- T_PlatformMessage,
31
- T_PlatformUser
32
- > = DyNTS_Bot_Provider<
33
- T_PlatformChannel,
34
- T_PlatformMessage,
35
- T_PlatformUser
27
+ T_MessagingPlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
28
+ T_MessagingPlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
29
+ T_MessagingPlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
30
+ T_MessagingPlatformProvider extends DyNTS_Bot_MessagingProvider<
31
+ T_MessagingPlatformChannel,
32
+ T_MessagingPlatformMessage,
33
+ T_MessagingPlatformUser
34
+ > = DyNTS_Bot_MessagingProvider<
35
+ T_MessagingPlatformChannel,
36
+ T_MessagingPlatformMessage,
37
+ T_MessagingPlatformUser
36
38
  >
37
39
  > extends DyNTS_SingletonService {
38
40
 
39
- protected _provider: T_PlatformProvider;
41
+ protected _provider: T_MessagingPlatformProvider;
42
+ protected _providers: Map<string, T_MessagingPlatformProvider> = new Map();
40
43
 
41
- get provider(): T_PlatformProvider {
44
+ get provider(): T_MessagingPlatformProvider {
42
45
  return this._provider;
43
46
  }
44
47
 
48
+ get providers(): Map<string, T_MessagingPlatformProvider> {
49
+ return this._providers;
50
+ }
51
+
52
+ getProviderById(providerId: string): T_MessagingPlatformProvider | undefined {
53
+ return this._providers.get(providerId);
54
+ }
55
+
45
56
  get botClientId(): string {
46
57
  return this.provider?.getBotId() ?? DyNTS_global_settings?.bot_settings?.discord?.clientId;
47
58
  }
@@ -51,35 +62,35 @@ export abstract class DyNTS_Bot_Main_ControlService<
51
62
  }
52
63
 
53
64
  protected abstract getBotIOControlService(): DyNTS_Bot_IO_ControlService<
54
- T_PlatformChannel,
55
- T_PlatformMessage,
56
- T_PlatformUser,
57
- T_PlatformProvider
65
+ T_MessagingPlatformChannel,
66
+ T_MessagingPlatformMessage,
67
+ T_MessagingPlatformUser,
68
+ T_MessagingPlatformProvider
58
69
  >;
59
70
  protected botIO_CS: DyNTS_Bot_IO_ControlService<
60
- T_PlatformChannel,
61
- T_PlatformMessage,
62
- T_PlatformUser,
63
- T_PlatformProvider
71
+ T_MessagingPlatformChannel,
72
+ T_MessagingPlatformMessage,
73
+ T_MessagingPlatformUser,
74
+ T_MessagingPlatformProvider
64
75
  >;
65
76
 
66
77
  protected abstract getRoutinesControlService(): DyNTS_Bot_Routines_ControlService<
67
- T_PlatformChannel,
68
- T_PlatformMessage,
69
- T_PlatformUser,
70
- T_PlatformProvider
78
+ T_MessagingPlatformChannel,
79
+ T_MessagingPlatformMessage,
80
+ T_MessagingPlatformUser,
81
+ T_MessagingPlatformProvider
71
82
  >;
72
83
  protected routines_CS: DyNTS_Bot_Routines_ControlService<
73
- T_PlatformChannel,
74
- T_PlatformMessage,
75
- T_PlatformUser,
76
- T_PlatformProvider
84
+ T_MessagingPlatformChannel,
85
+ T_MessagingPlatformMessage,
86
+ T_MessagingPlatformUser,
87
+ T_MessagingPlatformProvider
77
88
  >;
78
89
 
79
- protected abstract getProvider(): T_PlatformProvider;
90
+ protected abstract getProvider(): T_MessagingPlatformProvider;
80
91
 
81
92
  private _channelsByNames: {
82
- [key: string]: T_PlatformChannel;
93
+ [key: string]: T_MessagingPlatformChannel;
83
94
  } = {};
84
95
 
85
96
  private _rolesByNames: {
@@ -112,11 +123,39 @@ export abstract class DyNTS_Bot_Main_ControlService<
112
123
  }
113
124
  }
114
125
 
126
+ /**
127
+ * Check if the bot is configured for multiple providers
128
+ */
129
+ protected isMultiProviderMode(): boolean {
130
+ const settings = DyNTS_global_settings.bot_settings as any;
131
+ return Array.isArray(settings?.providers) && settings.providers.length > 0;
132
+ }
133
+
134
+ /**
135
+ * Get all provider configurations (supports both single and multi-provider mode)
136
+ */
137
+ protected getProviderConfigs(): DyNTS_Bot_MessagingProvider_Config[] {
138
+ const settings = DyNTS_global_settings.bot_settings as any;
139
+
140
+ if (this.isMultiProviderMode()) {
141
+ return settings.providers;
142
+ } else {
143
+ // Single provider mode - wrap existing config
144
+ const config = settings as DyNTS_Bot_MessagingProvider_Config;
145
+ if (!config.providerId) {
146
+ config.providerId = config.messageProvider || 'default';
147
+ }
148
+ return [config];
149
+ }
150
+ }
151
+
115
152
  async setup(issuer: string): Promise<void> {
116
153
  try {
117
154
  await DyFM_Async.delay(100);
118
155
 
119
- if (!DyNTS_global_settings.bot_settings?.provider) {
156
+ const configs = this.getProviderConfigs();
157
+
158
+ if (configs.length === 0) {
120
159
  throw new Error(
121
160
  `No bot provider configured!` +
122
161
  `\nPlease set the provider in DyNTS_global_settings.bot_settings.provider` +
@@ -124,6 +163,13 @@ export abstract class DyNTS_Bot_Main_ControlService<
124
163
  );
125
164
  }
126
165
 
166
+ // If multi-provider mode, initialize all providers
167
+ if (this.isMultiProviderMode()) {
168
+ await this.setupMultipleProviders(configs, issuer);
169
+ return;
170
+ }
171
+
172
+ // Single provider mode (backward compatible)
127
173
  if (!this.provider) {
128
174
  throw new Error(
129
175
  `No bot provider instance found!` +
@@ -163,9 +209,16 @@ export abstract class DyNTS_Bot_Main_ControlService<
163
209
  DyFM_Log.success('Ready event registered');
164
210
  }
165
211
 
166
- this.provider.onMessage((message: T_PlatformMessage, messageIssuer: string) => {
212
+ this.provider.onMessage((message: T_MessagingPlatformMessage, messageIssuer: string) => {
167
213
  try {
168
- this.botIO_CS.handleNewMessage(message, messageIssuer)
214
+ const wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage> = {
215
+ message: message,
216
+ providerId: 'default',
217
+ providerType: this.provider.getProviderName() as any,
218
+ provider: this.provider
219
+ };
220
+
221
+ this.botIO_CS.handleNewMessage(wrapper, messageIssuer)
169
222
  } catch (error) {
170
223
  DyFM_Error.logSimple('Error handling new message:', error);
171
224
  }
@@ -228,6 +281,85 @@ export abstract class DyNTS_Bot_Main_ControlService<
228
281
  }
229
282
  }
230
283
 
284
+ private async setupMultipleProviders(
285
+ configs: DyNTS_Bot_MessagingProvider_Config[],
286
+ issuer: string
287
+ ): Promise<void> {
288
+ const providers = DyNTS_Bot_MessagingProvider_Factory.createProviders(configs);
289
+ this._providers = providers as Map<string, T_MessagingPlatformProvider>;
290
+
291
+ const setupPromises = Array.from(providers.entries()).map(([providerId, provider]) => {
292
+ return new Promise<void>((resolve, reject) => {
293
+ provider.onError((error) => {
294
+ if (DyNTS_global_settings.bot_settings?.debugLevel >= 1) {
295
+ DyFM_Error.logSimple(`Bot provider error [${providerId}]:`, error);
296
+ }
297
+ DyNTS_GlobalService.globalErrorHandler(error);
298
+ reject(error);
299
+ });
300
+
301
+ provider.onReady(async () => {
302
+ if (DyNTS_global_settings.bot_settings?.debugLevel >= 1) {
303
+ DyFM_Log.success(`Bot logged in as ${provider.getBotDisplayName()} [${providerId}]`);
304
+ }
305
+ resolve();
306
+ });
307
+
308
+ provider.onMessage((message, messageIssuer, msgProviderId) => {
309
+ try {
310
+ const wrapper: DyNTS_Bot_MessageWrapper<T_MessagingPlatformMessage> = {
311
+ message: message as T_MessagingPlatformMessage,
312
+ providerId: msgProviderId || provider.getProviderId() || providerId,
313
+ providerType: provider.getProviderName() as any,
314
+ provider: provider as any
315
+ };
316
+
317
+ this.botIO_CS.handleNewMessage(wrapper, messageIssuer)
318
+ } catch (error) {
319
+ DyFM_Error.logSimple('Error handling new message:', error);
320
+ }
321
+ });
322
+
323
+ const config = configs.find(c => c.providerId === providerId);
324
+ if (!config) {
325
+ reject(new Error(`No config found for provider ${providerId}`));
326
+ return;
327
+ }
328
+
329
+ provider.initialize(config).then(() => {
330
+ const token = this.getTokenForProviderConfig(config);
331
+ return provider.login(token);
332
+ }).catch((error) => {
333
+ reject(error);
334
+ });
335
+ });
336
+ });
337
+
338
+ await Promise.all(setupPromises);
339
+
340
+ // Set default provider (first one) for backward compatibility
341
+ if (this._provider) {
342
+ this._provider = providers.values().next().value;
343
+ }
344
+
345
+ await this.start(issuer);
346
+
347
+ DyFM_Log.success('All bot providers setup complete');
348
+ }
349
+
350
+ private getTokenForProviderConfig(config: DyNTS_Bot_MessagingProvider_Config): string {
351
+ switch (config.messageProvider) {
352
+ case 'discord':
353
+ return config.discord?.token;
354
+ case 'slack':
355
+ return config.slack?.token;
356
+ case 'teams':
357
+ return config.teams?.appPassword;
358
+ default:
359
+ throw new Error(`Unsupported provider: ${config.messageProvider}`);
360
+ }
361
+ }
362
+
231
363
  async start(issuer: string): Promise<void> {
232
364
  try {
233
365
  this.botIO_CS = this.getBotIOControlService();
@@ -267,7 +399,7 @@ export abstract class DyNTS_Bot_Main_ControlService<
267
399
  return this._rolesByNames[roleName];
268
400
  }
269
401
 
270
- async getChannelByName(channelName: string): Promise<T_PlatformChannel> {
402
+ async getChannelByName(channelName: string): Promise<T_MessagingPlatformChannel> {
271
403
  if (!this._channelsByNames[channelName]) {
272
404
  this._channelsByNames[channelName] = await this.provider.getChannelByName(channelName);
273
405
  }
@@ -279,7 +411,7 @@ export abstract class DyNTS_Bot_Main_ControlService<
279
411
  channelName: string,
280
412
  message: string,
281
413
  issuer: string,
282
- ): Promise<T_PlatformMessage> {
414
+ ): Promise<T_MessagingPlatformMessage> {
283
415
  try {
284
416
  const channel = await this.getChannelByName(channelName);
285
417
 
@@ -317,7 +449,7 @@ export abstract class DyNTS_Bot_Main_ControlService<
317
449
  }
318
450
 
319
451
  async clearChannel(
320
- channel: T_PlatformChannel,
452
+ channel: T_MessagingPlatformChannel,
321
453
  issuer: string,
322
454
  ): Promise<void> {
323
455
  try {
@@ -0,0 +1,56 @@
1
+ import { DyNTS_Bot_MessagingProvider, DyNTS_Bot_MessagingProvider_Config } from '../_models/bot-messaging-provider.interface';
2
+ import { DyNTS_Bot_MessageProvider_Type } from '../_enums/bot-message-provider.enum';
3
+ import { DyNTS_DiB_MessagingProvider } from '../_modules/discord-bot/_services/dib-messaging-provider.service';
4
+ import { DyNTS_SlB_MessagingProvider } from '../_modules/slack-bot/_services/slb-messaging-provider.service';
5
+ import { DyNTS_TeB_MessagingProvider } from '../_modules/teams-bot/_services/teb-messaging-provider.service';
6
+ import { DyNTS_DyB_MessagingProvider } from '../_modules/dynamo-bot/_services/dyb-messaging-provider.service';
7
+
8
+ export class DyNTS_Bot_MessagingProvider_Factory {
9
+
10
+ static createProvider(config: DyNTS_Bot_MessagingProvider_Config): DyNTS_Bot_MessagingProvider {
11
+ switch (config.messageProvider) {
12
+ case DyNTS_Bot_MessageProvider_Type.discord:
13
+ return new DyNTS_DiB_MessagingProvider();
14
+
15
+ case DyNTS_Bot_MessageProvider_Type.slack:
16
+ return new DyNTS_SlB_MessagingProvider();
17
+
18
+ case DyNTS_Bot_MessageProvider_Type.teams:
19
+ return new DyNTS_TeB_MessagingProvider();
20
+
21
+ case DyNTS_Bot_MessageProvider_Type.dynamo:
22
+ return new DyNTS_DyB_MessagingProvider();
23
+
24
+ case DyNTS_Bot_MessageProvider_Type.custom:
25
+ if (!config.messageProviderInstance) {
26
+ throw new Error('Custom provider instance is required when provider type is "custom"');
27
+ }
28
+ return config.messageProviderInstance;
29
+
30
+ default:
31
+ throw new Error(`Unsupported provider type: ${config.messageProvider}`);
32
+ }
33
+ }
34
+
35
+ static createProviders(configs: DyNTS_Bot_MessagingProvider_Config[]): Map<string, DyNTS_Bot_MessagingProvider> {
36
+ const providers = new Map<string, DyNTS_Bot_MessagingProvider>();
37
+ const providerIds = new Set<string>();
38
+
39
+ for (const config of configs) {
40
+ if (!config.providerId) {
41
+ throw new Error('providerId is required when using multiple providers');
42
+ }
43
+
44
+ if (providerIds.has(config.providerId)) {
45
+ throw new Error(`Duplicate providerId detected: ${config.providerId}`);
46
+ }
47
+
48
+ providerIds.add(config.providerId);
49
+
50
+ const provider = this.createProvider(config);
51
+ providers.set(config.providerId, provider);
52
+ }
53
+
54
+ return providers;
55
+ }
56
+ }