@wabot-dev/framework 0.0.6 → 0.0.8

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 (36) hide show
  1. package/dist/src/ai/openia/OpenaiChatBotAdapter.js +10 -8
  2. package/dist/src/channels/cmd/@cmd.js +1 -0
  3. package/dist/src/channels/cmd/CmdChannel.js +32 -12
  4. package/dist/src/channels/telegram/@telegram.js +1 -0
  5. package/dist/src/channels/telegram/TelegramChannel.js +27 -14
  6. package/dist/src/chatbot/ChatBot.js +7 -5
  7. package/dist/src/chatbot/ChatBotAdapter.js +12 -4
  8. package/dist/src/chatbot/metadata/@chatBot.js +3 -0
  9. package/dist/src/chatbot/metadata/ChatBotMetadataStore.js +3 -0
  10. package/dist/src/controller/channel/ChatResolver.js +9 -10
  11. package/dist/src/controller/channel/UserResolver.js +23 -0
  12. package/dist/src/core/IMessageContext.js +15 -0
  13. package/dist/src/{chatbot → core}/chat/Chat.js +1 -1
  14. package/dist/src/{chatbot → core}/chat/repository/ram/RamChatRepository.js +1 -0
  15. package/dist/src/core/user/User.js +42 -0
  16. package/dist/src/core/user/repository/IUserRepository.js +19 -0
  17. package/dist/src/core/user/repository/ram/RamUserRepository.js +28 -0
  18. package/dist/src/index.d.ts +249 -146
  19. package/dist/src/index.js +25 -13
  20. package/dist/src/mindset/IMindset.js +3 -3
  21. package/dist/src/mindset/metadata/params/@isOptional.js +1 -1
  22. package/dist/src/pre-made/modules/authentication/AuthenticationModule.js +99 -0
  23. package/dist/src/pre-made/modules/authentication/requests/SendOneTimePasswordRequest.js +25 -0
  24. package/dist/src/pre-made/modules/authentication/requests/ValidateOneTimePasswordRequest.js +25 -0
  25. package/dist/src/pre-made/modules/register-user/RegisterUserModule.js +58 -0
  26. package/dist/src/pre-made/modules/register-user/requests/RegisterUserWithEmailRequest.js +25 -0
  27. package/dist/src/pre-made/services/EmailService.js +13 -0
  28. package/dist/src/pre-made/services/OtpService.js +14 -0
  29. package/dist/src/server/prepareChatContainer.js +14 -10
  30. package/dist/src/server/runChannel.js +12 -4
  31. package/dist/src/server/runServer.js +15 -11
  32. package/package.json +8 -2
  33. package/dist/src/context/IContext.js +0 -10
  34. /package/dist/src/{chatbot → core}/chat/repository/IChatMemory.js +0 -0
  35. /package/dist/src/{chatbot → core}/chat/repository/IChatRepository.js +0 -0
  36. /package/dist/src/{chatbot → core}/chat/repository/ram/RamChatMemory.js +0 -0
@@ -0,0 +1,25 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import 'reflect-metadata';
3
+ import '../../../../injection/index.js';
4
+ import '../../../../mindset/metadata/MindsetMetadataStore.js';
5
+ import { param } from '../../../../mindset/metadata/params/@param.js';
6
+ import '../../../../mindset/MindsetOperator.js';
7
+
8
+ class SendOneTimePasswordRequest {
9
+ fromEmail = '';
10
+ toEmail = '';
11
+ }
12
+ __decorate([
13
+ param({
14
+ description: 'Sender Email address',
15
+ }),
16
+ __metadata("design:type", String)
17
+ ], SendOneTimePasswordRequest.prototype, "fromEmail", void 0);
18
+ __decorate([
19
+ param({
20
+ description: 'Recipient Email Address, to send one time password',
21
+ }),
22
+ __metadata("design:type", String)
23
+ ], SendOneTimePasswordRequest.prototype, "toEmail", void 0);
24
+
25
+ export { SendOneTimePasswordRequest };
@@ -0,0 +1,25 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import 'reflect-metadata';
3
+ import '../../../../injection/index.js';
4
+ import '../../../../mindset/metadata/MindsetMetadataStore.js';
5
+ import { param } from '../../../../mindset/metadata/params/@param.js';
6
+ import '../../../../mindset/MindsetOperator.js';
7
+
8
+ class ValidateOneTimePasswordRequest {
9
+ userEmail = '';
10
+ otp = '';
11
+ }
12
+ __decorate([
13
+ param({
14
+ description: 'User Email',
15
+ }),
16
+ __metadata("design:type", String)
17
+ ], ValidateOneTimePasswordRequest.prototype, "userEmail", void 0);
18
+ __decorate([
19
+ param({
20
+ description: 'Otp provided by the User',
21
+ }),
22
+ __metadata("design:type", String)
23
+ ], ValidateOneTimePasswordRequest.prototype, "otp", void 0);
24
+
25
+ export { ValidateOneTimePasswordRequest };
@@ -0,0 +1,58 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import '../../../core/chat/repository/ram/RamChatRepository.js';
3
+ import '../../../core/chat/repository/IChatRepository.js';
4
+ import { User } from '../../../core/user/User.js';
5
+ import '../../../core/user/repository/ram/RamUserRepository.js';
6
+ import { UserRepository } from '../../../core/user/repository/IUserRepository.js';
7
+ import { MessageContext } from '../../../core/IMessageContext.js';
8
+ import { mindsetFunction } from '../../../mindset/metadata/functions/@mindsetFunction.js';
9
+ import 'reflect-metadata';
10
+ import '../../../injection/index.js';
11
+ import '../../../mindset/metadata/MindsetMetadataStore.js';
12
+ import { mindsetModule } from '../../../mindset/metadata/modules/@mindsetModule.js';
13
+ import '../../../mindset/MindsetOperator.js';
14
+ import { RegisterUserWithEmailRequest } from './requests/RegisterUserWithEmailRequest.js';
15
+
16
+ let RegisterUserModule = class RegisterUserModule {
17
+ userRepository;
18
+ context;
19
+ constructor(userRepository, context) {
20
+ this.userRepository = userRepository;
21
+ this.context = context;
22
+ }
23
+ async registerUserWithEmail(request) {
24
+ if (this.context.user) {
25
+ throw new Error('The User is already authenticated');
26
+ }
27
+ const user = new User({
28
+ shortName: request.shortName,
29
+ connections: [
30
+ {
31
+ channelName: 'EmailChannel',
32
+ id: request.email,
33
+ },
34
+ ],
35
+ keyValueData: {},
36
+ });
37
+ await this.userRepository.create(user);
38
+ return 'success';
39
+ }
40
+ };
41
+ __decorate([
42
+ mindsetFunction({
43
+ description: 'Register a new user using email',
44
+ }),
45
+ __metadata("design:type", Function),
46
+ __metadata("design:paramtypes", [RegisterUserWithEmailRequest]),
47
+ __metadata("design:returntype", Promise)
48
+ ], RegisterUserModule.prototype, "registerUserWithEmail", null);
49
+ RegisterUserModule = __decorate([
50
+ mindsetModule({
51
+ description: 'Provide functions to register an user',
52
+ language: 'english',
53
+ }),
54
+ __metadata("design:paramtypes", [UserRepository,
55
+ MessageContext])
56
+ ], RegisterUserModule);
57
+
58
+ export { RegisterUserModule };
@@ -0,0 +1,25 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import 'reflect-metadata';
3
+ import '../../../../injection/index.js';
4
+ import '../../../../mindset/metadata/MindsetMetadataStore.js';
5
+ import { param } from '../../../../mindset/metadata/params/@param.js';
6
+ import '../../../../mindset/MindsetOperator.js';
7
+
8
+ class RegisterUserWithEmailRequest {
9
+ email = '';
10
+ shortName = '';
11
+ }
12
+ __decorate([
13
+ param({
14
+ description: 'Email of the User',
15
+ }),
16
+ __metadata("design:type", String)
17
+ ], RegisterUserWithEmailRequest.prototype, "email", void 0);
18
+ __decorate([
19
+ param({
20
+ description: 'ShortName for the new User',
21
+ }),
22
+ __metadata("design:type", String)
23
+ ], RegisterUserWithEmailRequest.prototype, "shortName", void 0);
24
+
25
+ export { RegisterUserWithEmailRequest };
@@ -0,0 +1,13 @@
1
+ import { __decorate } from 'tslib';
2
+ import { injectable } from '../../injection/index.js';
3
+
4
+ let EmailService = class EmailService {
5
+ async sendEmail(request) {
6
+ throw new Error('Not implemented');
7
+ }
8
+ };
9
+ EmailService = __decorate([
10
+ injectable()
11
+ ], EmailService);
12
+
13
+ export { EmailService };
@@ -0,0 +1,14 @@
1
+ import { __decorate } from 'tslib';
2
+ import { injectable } from '../../injection/index.js';
3
+ import { randomInt } from 'crypto';
4
+
5
+ let OtpService = class OtpService {
6
+ async generate() {
7
+ return randomInt(100000, 999999).toString();
8
+ }
9
+ };
10
+ OtpService = __decorate([
11
+ injectable()
12
+ ], OtpService);
13
+
14
+ export { OtpService };
@@ -1,25 +1,29 @@
1
- import { Context } from '../context/IContext.js';
2
- import '../chatbot/chat/repository/ram/RamChatRepository.js';
3
- import { ChatMemory } from '../chatbot/chat/repository/IChatMemory.js';
4
- import { ChatRepository } from '../chatbot/chat/repository/IChatRepository.js';
5
1
  import '../injection/index.js';
6
- import 'uuid';
7
- import { ChatBotMetadataStore } from '../chatbot/metadata/ChatBotMetadataStore.js';
8
- import { ChatBot } from '../chatbot/ChatBot.js';
9
2
  import 'reflect-metadata';
10
3
  import '../mindset/metadata/MindsetMetadataStore.js';
11
4
  import { Mindset } from '../mindset/IMindset.js';
12
5
  import '../mindset/MindsetOperator.js';
6
+ import { ChatMemory } from '../core/chat/repository/IChatMemory.js';
7
+ import '../core/chat/repository/ram/RamChatRepository.js';
8
+ import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
9
+ import '../core/user/repository/ram/RamUserRepository.js';
10
+ import '../core/user/repository/IUserRepository.js';
11
+ import { MessageContext } from '../core/IMessageContext.js';
12
+ import 'uuid';
13
+ import { ChatBotMetadataStore } from '../chatbot/metadata/ChatBotMetadataStore.js';
14
+ import { ChatBot } from '../chatbot/ChatBot.js';
13
15
  import { Container } from '../injection/Container.js';
14
16
 
15
17
  async function prepareChatContainer(container, context, mindsetCtor) {
16
18
  const chatContainer = container.createChildContainer();
17
19
  chatContainer.register(Container, { useValue: chatContainer });
18
- chatContainer.register(Context, { useValue: new Context(context.chat, context.user) });
20
+ chatContainer.register(MessageContext, {
21
+ useValue: new MessageContext(context.message, context.chat, context.user),
22
+ });
19
23
  const chatRepository = container.resolve(ChatRepository);
20
- const chatMemory = await chatRepository.findMemory(context.chat.chatId);
24
+ const chatMemory = await chatRepository.findMemory(context.chat.getId());
21
25
  if (!chatMemory) {
22
- throw new Error('Not found Chat Memory for Chat with Id=' + context.chat.chatId);
26
+ throw new Error('Not found Chat Memory for Chat with Id=' + context.chat.getId());
23
27
  }
24
28
  chatContainer.register(ChatMemory, { useValue: chatMemory });
25
29
  const chatBotMetadataStore = container.resolve(ChatBotMetadataStore);
@@ -1,12 +1,20 @@
1
1
  import dotenv from 'dotenv';
2
- import '../chatbot/chat/repository/ram/RamChatRepository.js';
3
- import { ChatRepository } from '../chatbot/chat/repository/IChatRepository.js';
2
+ import '../controller/channel/ChatResolver.js';
3
+ import '../controller/channel/UserResolver.js';
4
4
  import { container } from '../injection/index.js';
5
+ import '../controller/metadata/ControllerMetadataStore.js';
6
+ import 'reflect-metadata';
7
+ import '../mindset/metadata/MindsetMetadataStore.js';
8
+ import '../mindset/MindsetOperator.js';
9
+ import { prepareChatContainer } from './prepareChatContainer.js';
10
+ import '../core/chat/repository/ram/RamChatRepository.js';
11
+ import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
12
+ import '../core/user/repository/ram/RamUserRepository.js';
13
+ import '../core/user/repository/IUserRepository.js';
5
14
  import 'uuid';
6
15
  import '../chatbot/metadata/ChatBotMetadataStore.js';
7
16
  import { ChatBot } from '../chatbot/ChatBot.js';
8
17
  import { ChatBotAdapter } from '../chatbot/ChatBotAdapter.js';
9
- import { prepareChatContainer } from './prepareChatContainer.js';
10
18
 
11
19
  dotenv.config();
12
20
  function runChannel(props) {
@@ -17,7 +25,7 @@ function runChannel(props) {
17
25
  }
18
26
  const channel = container.resolve(props.channel);
19
27
  channel.listen(async (context) => {
20
- const channelContainer = await prepareChatContainer(container, { chat: context }, props.mindset);
28
+ const channelContainer = await prepareChatContainer(container, context, props.mindset);
21
29
  const chatBot = channelContainer.resolve(ChatBot);
22
30
  chatBot.sendMessage(context.message, (replyMessage) => {
23
31
  context.reply(replyMessage);
@@ -1,20 +1,24 @@
1
1
  import dotenv from 'dotenv';
2
- import { RamChatRepository } from '../chatbot/chat/repository/ram/RamChatRepository.js';
3
- import { ChatRepository } from '../chatbot/chat/repository/IChatRepository.js';
4
- import { container } from '../injection/index.js';
5
- import 'uuid';
6
- import '../chatbot/metadata/ChatBotMetadataStore.js';
7
- import '../chatbot/ChatBot.js';
8
- import { ChatBotAdapter } from '../chatbot/ChatBotAdapter.js';
9
2
  import '../controller/channel/ChatResolver.js';
3
+ import '../controller/channel/UserResolver.js';
4
+ import { container } from '../injection/index.js';
10
5
  import { ControllerMetadataStore } from '../controller/metadata/ControllerMetadataStore.js';
11
- import { OpenaiChatBotAdapter } from '../ai/openia/OpenaiChatBotAdapter.js';
6
+ import '../core/chat/repository/ram/RamChatRepository.js';
7
+ import '../core/chat/repository/IChatRepository.js';
8
+ import '../core/user/repository/ram/RamUserRepository.js';
9
+ import '../core/user/repository/IUserRepository.js';
12
10
  import { prepareChatContainer } from './prepareChatContainer.js';
13
11
 
14
12
  dotenv.config();
15
13
  function runServer(config) {
16
- container.registerSingleton(ChatRepository, config.chatRepository ?? RamChatRepository);
17
- container.register(ChatBotAdapter, config.chatBotAdapter ?? OpenaiChatBotAdapter);
14
+ for (const provider of config.providers ?? []) {
15
+ if (provider.singleton) {
16
+ container.registerSingleton(provider.replace, provider.with);
17
+ }
18
+ else {
19
+ container.register(provider.replace, provider.with);
20
+ }
21
+ }
18
22
  const metadataStore = container.resolve(ControllerMetadataStore);
19
23
  for (const controllerCtor of config.controllers) {
20
24
  const chatControllerMetadata = metadataStore.getChatControllerMetadata(controllerCtor);
@@ -30,7 +34,7 @@ function runServer(config) {
30
34
  }
31
35
  const channel = channelContainer.resolve(channelMetadata.channelConstructor);
32
36
  channel.listen(async (messageContext) => {
33
- const chatContainer = await prepareChatContainer(channelContainer, { chat: messageContext });
37
+ const chatContainer = await prepareChatContainer(channelContainer, messageContext);
34
38
  const chatController = chatContainer.resolve(channelMetadata.controllerConstructor);
35
39
  chatController[channelMetadata.functionName](messageContext);
36
40
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wabot-dev/framework",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Framework for IA Chat Bots",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -26,8 +26,10 @@
26
26
  "@rollup/plugin-node-resolve": "16.0.1",
27
27
  "@rollup/plugin-typescript": "12.1.2",
28
28
  "@types/node": "22.14.1",
29
+ "@types/react": "^19.1.2",
29
30
  "@yucacodes/ts": "^0.0.4",
30
31
  "prettier": "^3.5.3",
32
+ "resend": "^4.4.1",
31
33
  "rollup": "4.39.0",
32
34
  "tsup": "^8.4.0",
33
35
  "typescript": "5.8.3"
@@ -35,13 +37,17 @@
35
37
  "peerDependencies": {
36
38
  "class-transformer": "^0.5.1",
37
39
  "class-validator": "^0.14.1",
40
+ "dotenv": "^16.5.0",
38
41
  "express": "^5.1.0",
39
42
  "grammy": "^1.36.0",
40
43
  "openai": "^4.93.0",
41
44
  "reflect-metadata": "^0.2.2",
45
+ "sqlite": "^5.1.1",
46
+ "sqlite3": "npm:sqlite3-offline-next@^5.0.3",
47
+ "sqlite3-offline-next": "^5.0.3",
42
48
  "tslib": "^2.8.1",
43
49
  "tsyringe": "^4.9.1",
44
50
  "uuid": "^11.1.0",
45
- "dotenv": "^16.5.0"
51
+ "@yucacodes/ts": "^0.0.4"
46
52
  }
47
53
  }
@@ -1,10 +0,0 @@
1
- class Context {
2
- chat;
3
- user;
4
- constructor(chat, user) {
5
- this.chat = chat;
6
- this.user = user;
7
- }
8
- }
9
-
10
- export { Context };