@wabot-dev/framework 0.0.17 → 0.0.50

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 (110) hide show
  1. package/dist/src/_virtual/_commonjsHelpers.js +5 -0
  2. package/dist/src/_virtual/cjs.js +7 -0
  3. package/dist/src/ai/deepseek/DeepSeekChatBotAdapter.js +12 -13
  4. package/dist/src/ai/openia/OpenaiChatBotAdapter.js +9 -7
  5. package/dist/src/channels/cmd/@cmd.js +0 -4
  6. package/dist/src/channels/cmd/CmdChannel.js +0 -4
  7. package/dist/src/channels/express/ExpressProvider.js +46 -0
  8. package/dist/src/channels/http/HttpServerProvider.js +31 -0
  9. package/dist/src/channels/{socket-io → socket}/@socket.js +0 -4
  10. package/dist/src/channels/{socket-io → socket}/SocketChannel.js +12 -11
  11. package/dist/src/channels/socket/SocketServerProvider.js +50 -0
  12. package/dist/src/channels/telegram/@telegram.js +0 -4
  13. package/dist/src/channels/telegram/TelegramChannel.js +0 -4
  14. package/dist/src/channels/wabot/WabotDevConnection.js +57 -0
  15. package/dist/src/channels/{whatsapp/WhatsAppDevSocketContracts.js → wabot/WabotDevSocketContracts.js} +3 -3
  16. package/dist/src/channels/whatsapp/@whatsapp.js +0 -4
  17. package/dist/src/channels/whatsapp/EnvWhatsAppRepository.js +49 -0
  18. package/dist/src/channels/whatsapp/PgWhatsAppRepository.js +41 -0
  19. package/dist/src/channels/whatsapp/WhatsApp.js +32 -0
  20. package/dist/src/channels/whatsapp/WhatsAppChannel.js +33 -32
  21. package/dist/src/channels/whatsapp/{WhatsAppConnection.js → WhatsAppReceiver.js} +4 -6
  22. package/dist/src/channels/whatsapp/WhatsAppReceiverByDevConnection.js +32 -0
  23. package/dist/src/channels/whatsapp/WhatsAppReceiverByWebHook.js +63 -0
  24. package/dist/src/channels/whatsapp/WhatsAppRepository.js +10 -0
  25. package/dist/src/channels/whatsapp/WhatsAppSender.js +93 -17
  26. package/dist/src/channels/whatsapp/WhatsAppSenderByCloudApi.js +124 -0
  27. package/dist/src/channels/whatsapp/WhatsAppSenderByDevConnection.js +61 -0
  28. package/dist/src/chatbot/ChatBotAdapter.js +1 -5
  29. package/dist/src/chatbot/metadata/@chatBot.js +0 -5
  30. package/dist/src/chatbot/metadata/ChatBotMetadataStore.js +0 -5
  31. package/dist/src/controller/metadata/ControllerMetadataStore.js +0 -2
  32. package/dist/src/controller/metadata/controller/@chatController.js +0 -2
  33. package/dist/src/core/IMessageContext.js +0 -2
  34. package/dist/src/env/WabotEnv.js +6 -0
  35. package/dist/src/index.d.ts +419 -201
  36. package/dist/src/index.js +55 -28
  37. package/dist/src/mindset/MindsetOperator.js +1 -3
  38. package/dist/src/mindset/metadata/MindsetMetadataStore.js +0 -2
  39. package/dist/src/mindset/metadata/mindsets/@mindset.js +0 -2
  40. package/dist/src/mindset/metadata/modules/@mindsetModule.js +0 -2
  41. package/dist/src/node_modules/@selderee/plugin-htmlparser2/lib/hp2-builder.js +90 -0
  42. package/dist/src/node_modules/deepmerge/dist/cjs.js +142 -0
  43. package/dist/src/node_modules/dom-serializer/lib/esm/foreignNames.js +102 -0
  44. package/dist/src/node_modules/dom-serializer/lib/esm/index.js +186 -0
  45. package/dist/src/node_modules/domelementtype/lib/esm/index.js +53 -0
  46. package/dist/src/node_modules/domhandler/lib/esm/index.js +148 -0
  47. package/dist/src/node_modules/domhandler/lib/esm/node.js +334 -0
  48. package/dist/src/node_modules/entities/lib/esm/decode.js +458 -0
  49. package/dist/src/node_modules/entities/lib/esm/decode_codepoint.js +62 -0
  50. package/dist/src/node_modules/entities/lib/esm/escape.js +99 -0
  51. package/dist/src/node_modules/entities/lib/esm/generated/decode-data-html.js +8 -0
  52. package/dist/src/node_modules/entities/lib/esm/generated/decode-data-xml.js +8 -0
  53. package/dist/src/node_modules/html-to-text/lib/html-to-text.js +2147 -0
  54. package/dist/src/node_modules/htmlparser2/lib/esm/Parser.js +491 -0
  55. package/dist/src/node_modules/htmlparser2/lib/esm/Tokenizer.js +928 -0
  56. package/dist/src/node_modules/htmlparser2/lib/esm/index.js +18 -0
  57. package/dist/src/node_modules/leac/lib/leac.js +3 -0
  58. package/dist/src/node_modules/parseley/lib/parseley.js +270 -0
  59. package/dist/src/node_modules/peberminta/lib/core.js +171 -0
  60. package/dist/src/node_modules/selderee/lib/selderee.js +380 -0
  61. package/dist/src/pre-made/module/authentication/requests/SendOneTimePasswordRequest.js +0 -2
  62. package/dist/src/pre-made/module/authentication/requests/ValidateOneTimePasswordRequest.js +0 -2
  63. package/dist/src/pre-made/module/html/HtmlModule.js +70 -0
  64. package/dist/src/pre-made/module/register-user/requests/RegisterUserWithEmailRequest.js +0 -2
  65. package/dist/src/pre-made/repository/chat/pg/PgChatMemory.js +1 -7
  66. package/dist/src/pre-made/repository/chat/pg/PgChatRepository.js +0 -5
  67. package/dist/src/pre-made/repository/user/pg/PgUserRepository.js +0 -5
  68. package/dist/src/repository/pg/PgCrudRepository.js +0 -1
  69. package/dist/src/rest-controller/metadata/@get.js +19 -0
  70. package/dist/src/rest-controller/metadata/@post.js +19 -0
  71. package/dist/src/rest-controller/metadata/@restController.js +15 -0
  72. package/dist/src/rest-controller/metadata/RestControllerMetadataStore.js +37 -0
  73. package/dist/src/rest-controller/runRestControllers.js +74 -0
  74. package/dist/src/server/prepareChatContainer.js +4 -4
  75. package/dist/src/server/runChannel.js +2 -10
  76. package/dist/src/server/runServer.js +0 -43
  77. package/dist/src/validation/metadata/@isBoolean.js +17 -0
  78. package/dist/src/validation/metadata/@isDate.js +17 -0
  79. package/dist/src/validation/metadata/@isNotEmpty.js +17 -0
  80. package/dist/src/validation/metadata/@isNumber.js +17 -0
  81. package/dist/src/validation/metadata/@isOptional.js +17 -0
  82. package/dist/src/validation/metadata/@isPresent.js +17 -0
  83. package/dist/src/validation/metadata/@isString.js +17 -0
  84. package/dist/src/validation/metadata/@max.js +18 -0
  85. package/dist/src/validation/metadata/@min.js +18 -0
  86. package/dist/src/validation/metadata/@validable.js +14 -0
  87. package/dist/src/validation/metadata/ValidationMetadataStore.js +55 -0
  88. package/dist/src/validation/validateModel2.js +11 -0
  89. package/dist/src/validation/validators/validateIsBoolean.js +12 -0
  90. package/dist/src/validation/validators/validateIsDate.js +16 -0
  91. package/dist/src/validation/validators/validateIsNotEmpty.js +12 -0
  92. package/dist/src/validation/validators/validateIsNumber.js +12 -0
  93. package/dist/src/validation/validators/validateIsOptional.js +5 -0
  94. package/dist/src/validation/validators/validateIsPresent.js +12 -0
  95. package/dist/src/validation/validators/validateIsString.js +12 -0
  96. package/dist/src/validation/validators/validateMax.js +17 -0
  97. package/dist/src/validation/validators/validateMin.js +17 -0
  98. package/dist/src/validation/validators/validateModel.js +47 -0
  99. package/package.json +4 -6
  100. package/dist/src/channels/whatsapp/WhatsAppDevConnection.js +0 -69
  101. package/dist/src/channels/whatsapp/WhatsAppProdConnection.js +0 -39
  102. package/dist/src/controller/express/Express.js +0 -5
  103. package/dist/src/controller/socket.io/SocketIO.js +0 -5
  104. package/dist/src/mindset/metadata/params/@isOptional.js +0 -21
  105. package/dist/src/pre-made/repository/chat/sqlite/SqliteChatMemory.js +0 -23
  106. package/dist/src/pre-made/repository/chat/sqlite/SqliteChatRepository.js +0 -30
  107. package/dist/src/pre-made/repository/user/sqlite/SqliteUserRepository.js +0 -23
  108. package/dist/src/repository/sqlite/SqliteCrudRepository.js +0 -85
  109. package/dist/src/repository/sqlite/SqlitePersistentMapper.js +0 -17
  110. /package/dist/src/channels/{socket-io → socket}/SocketChannelConfig.js +0 -0
@@ -0,0 +1,74 @@
1
+ import '../injection/index.js';
2
+ import { RestControllerMetadataStore } from './metadata/RestControllerMetadataStore.js';
3
+ import '../controller/channel/ChatResolver.js';
4
+ import '../controller/channel/UserResolver.js';
5
+ import '../controller/metadata/ControllerMetadataStore.js';
6
+ import '../channels/cmd/CmdChannel.js';
7
+ import { ExpressProvider } from '../channels/express/ExpressProvider.js';
8
+ import '../channels/http/HttpServerProvider.js';
9
+ import '../channels/socket/SocketChannel.js';
10
+ import '../channels/socket/SocketChannelConfig.js';
11
+ import '../channels/socket/SocketServerProvider.js';
12
+ import '../channels/telegram/TelegramChannel.js';
13
+ import '../channels/whatsapp/WhatsAppChannel.js';
14
+ import '../core/chat/repository/IChatRepository.js';
15
+ import '../core/user/IUserRepository.js';
16
+ import '../channels/whatsapp/WhatsAppReceiverByDevConnection.js';
17
+ import '../channels/whatsapp/WhatsAppReceiverByWebHook.js';
18
+ import '../channels/whatsapp/WhatsAppSenderByDevConnection.js';
19
+ import '../channels/whatsapp/WhatsAppSenderByCloudApi.js';
20
+ import '../channels/whatsapp/PgWhatsAppRepository.js';
21
+ import '../channels/whatsapp/EnvWhatsAppRepository.js';
22
+ import path from 'path';
23
+ import { Logger } from '../logger/Logger.js';
24
+
25
+ function buildRequest(req) {
26
+ return Object.assign({}, req.body, req.query, req.params);
27
+ }
28
+ function runRestControllers(controllers, container) {
29
+ const logger = new Logger('wabot:rest');
30
+ const metadataStore = container.resolve(RestControllerMetadataStore);
31
+ const expressProvider = container.resolve(ExpressProvider);
32
+ const expressApp = expressProvider.getExpress();
33
+ controllers.forEach((controller) => {
34
+ const endPoints = metadataStore.getControllerEndPointsInfo(controller);
35
+ endPoints.forEach((endPoint) => {
36
+ const method = endPoint.method;
37
+ const route = path.join(endPoint.controller.path, endPoint.path ?? '');
38
+ logger.info(`config ${endPoint.method.toUpperCase()} ${route}`);
39
+ expressApp[method](route, async (req, res) => {
40
+ const requestContainer = container.createChildContainer();
41
+ const controllerInstance = requestContainer.resolve(endPoint.controllerConstructor);
42
+ const endPointArgs = [];
43
+ let defaultArgFound = false;
44
+ for (let paramIndex = 0; paramIndex < endPoint.paramsTypes.length; paramIndex++) {
45
+ const paramType = endPoint.paramsTypes[paramIndex];
46
+ if (defaultArgFound) {
47
+ throw new Error(`Cant determine de parameter ${paramIndex} value`);
48
+ }
49
+ defaultArgFound = true;
50
+ if (typeof paramType === 'function' && typeof paramType.__validate__ === 'function') {
51
+ const { value, error } = paramType.__validate__(buildRequest(req));
52
+ debugger;
53
+ if (error) {
54
+ res.status(400).json({ error });
55
+ return;
56
+ }
57
+ endPointArgs.push(value);
58
+ }
59
+ }
60
+ try {
61
+ const response = await controllerInstance[endPoint.functionName].apply(controllerInstance, endPointArgs);
62
+ res.status(200).json(response);
63
+ }
64
+ catch (err) {
65
+ res.sendStatus(500);
66
+ }
67
+ requestContainer.dispose();
68
+ });
69
+ });
70
+ });
71
+ expressProvider.listen();
72
+ }
73
+
74
+ export { runRestControllers };
@@ -1,12 +1,12 @@
1
- import { ChatMemory } from '../core/chat/repository/IChatMemory.js';
2
- import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
3
- import '../core/user/IUserRepository.js';
4
- import { MessageContext } from '../core/IMessageContext.js';
5
1
  import '../injection/index.js';
6
2
  import 'reflect-metadata';
7
3
  import '../mindset/metadata/MindsetMetadataStore.js';
8
4
  import { Mindset } from '../mindset/IMindset.js';
9
5
  import '../mindset/MindsetOperator.js';
6
+ import { ChatMemory } from '../core/chat/repository/IChatMemory.js';
7
+ import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
8
+ import '../core/user/IUserRepository.js';
9
+ import { MessageContext } from '../core/IMessageContext.js';
10
10
  import 'uuid';
11
11
  import { ChatBotMetadataStore } from '../chatbot/metadata/ChatBotMetadataStore.js';
12
12
  import { ChatBot } from '../chatbot/ChatBot.js';
@@ -1,18 +1,10 @@
1
- import 'reflect-metadata';
2
1
  import { container } from '../injection/index.js';
3
- import '../mindset/metadata/MindsetMetadataStore.js';
4
- import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
5
- import '../core/user/IUserRepository.js';
6
- import '../mindset/MindsetOperator.js';
7
2
  import 'uuid';
8
3
  import '../chatbot/metadata/ChatBotMetadataStore.js';
9
4
  import { ChatBot } from '../chatbot/ChatBot.js';
10
5
  import { ChatBotAdapter } from '../chatbot/ChatBotAdapter.js';
11
- import '../controller/channel/ChatResolver.js';
12
- import '../controller/channel/UserResolver.js';
13
- import '../controller/metadata/ControllerMetadataStore.js';
14
- import 'express';
15
- import 'socket.io';
6
+ import { ChatRepository } from '../core/chat/repository/IChatRepository.js';
7
+ import '../core/user/IUserRepository.js';
16
8
  import { prepareChatContainer } from './prepareChatContainer.js';
17
9
 
18
10
  function runChannel(props) {
@@ -1,49 +1,10 @@
1
1
  import '../controller/channel/ChatResolver.js';
2
2
  import '../controller/channel/UserResolver.js';
3
3
  import { container } from '../injection/index.js';
4
- import '../core/chat/repository/IChatRepository.js';
5
- import '../core/user/IUserRepository.js';
6
4
  import { ControllerMetadataStore } from '../controller/metadata/ControllerMetadataStore.js';
7
- import { ExpressApp } from '../controller/express/Express.js';
8
- import { SocketIoApp } from '../controller/socket.io/SocketIO.js';
9
5
  import { prepareChatContainer } from './prepareChatContainer.js';
10
- import express from 'express';
11
- import { Server } from 'socket.io';
12
- import http from 'http';
13
- import bodyParser from 'body-parser';
14
- import { Logger } from '../logger/Logger.js';
15
6
 
16
7
  function runServer(config) {
17
- const httpLogger = new Logger('wabot:http');
18
- const socketLogger = new Logger('wabot:socket');
19
- const expressApp = express();
20
- const httpServer = http.createServer(expressApp);
21
- const io = new Server(httpServer, {
22
- cors: {
23
- origin: '*',
24
- },
25
- });
26
- expressApp.use(bodyParser.json());
27
- expressApp.use((req, res, next) => {
28
- const start = process.hrtime();
29
- res.on('finish', () => {
30
- const [seconds, nanoseconds] = process.hrtime(start);
31
- const ms = (seconds * 1000 + nanoseconds / 1e6).toFixed(2);
32
- httpLogger.trace(`${req.method} ${req.originalUrl} ${res.statusCode} - ${ms}ms`);
33
- });
34
- next();
35
- });
36
- io.on('connection', (socket) => {
37
- socketLogger.trace(`socket:${socket.id} connection`);
38
- socket.onAny((event) => {
39
- socketLogger.trace(`socket:${socket.id} emmits ${event}`);
40
- });
41
- socket.on('disconnect', (reason) => {
42
- socketLogger.trace(`socket:${socket.id} disconnect with reason: ${reason}`);
43
- });
44
- });
45
- container.register(ExpressApp, { useValue: expressApp });
46
- container.register(SocketIoApp, { useValue: io });
47
8
  for (const provider of config.providers ?? []) {
48
9
  if (provider.singleton) {
49
10
  container.registerSingleton(provider.replace, provider.with);
@@ -74,10 +35,6 @@ function runServer(config) {
74
35
  channel.connect();
75
36
  }
76
37
  }
77
- const PORT = process.env.PORT || 3000;
78
- httpServer.listen(PORT, () => {
79
- httpLogger.info(`server listenig on port ${PORT}`);
80
- });
81
38
  }
82
39
 
83
40
  export { runServer };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateIsBoolean } from '../validators/validateIsBoolean.js';
4
+
5
+ function isBoolean() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsBoolean,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isBoolean };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { validateIsDate } from '../validators/validateIsDate.js';
3
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
4
+
5
+ function isDate() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsDate,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isDate };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateIsNotEmpty } from '../validators/validateIsNotEmpty.js';
4
+
5
+ function isNotEmpty() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsNotEmpty,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isNotEmpty };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { validateIsNumber } from '../validators/validateIsNumber.js';
3
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
4
+
5
+ function isNumber() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsNumber,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isNumber };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { _IS_OPTIONAL_DUMMY_VALIDATOR_ } from '../validators/validateIsOptional.js';
4
+
5
+ function isOptional() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: _IS_OPTIONAL_DUMMY_VALIDATOR_,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isOptional };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateIsPresent } from '../validators/validateIsPresent.js';
4
+
5
+ function isPresent() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsPresent,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isPresent };
@@ -0,0 +1,17 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateIsString } from '../validators/validateIsString.js';
4
+
5
+ function isString() {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateIsString,
13
+ });
14
+ };
15
+ }
16
+
17
+ export { isString };
@@ -0,0 +1,18 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateMax } from '../validators/validateMax.js';
4
+
5
+ function max(limit) {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateMax,
13
+ validatorOptions: { limit },
14
+ });
15
+ };
16
+ }
17
+
18
+ export { max };
@@ -0,0 +1,18 @@
1
+ import { container } from '../../injection/index.js';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateMin } from '../validators/validateMin.js';
4
+
5
+ function min(limit) {
6
+ return function (target, propertyKey) {
7
+ const propertyName = propertyKey.toString();
8
+ const store = container.resolve(ValidationMetadataStore);
9
+ store.saveValidatorMetadata({
10
+ modelConstructor: target.constructor,
11
+ propertyName,
12
+ validator: validateMin,
13
+ validatorOptions: { limit },
14
+ });
15
+ };
16
+ }
17
+
18
+ export { min };
@@ -0,0 +1,14 @@
1
+ import { container } from 'tsyringe';
2
+ import { ValidationMetadataStore } from './ValidationMetadataStore.js';
3
+ import { validateModel } from '../validators/validateModel.js';
4
+
5
+ function validable() {
6
+ return function (target) {
7
+ target.__validate__ = function (value) {
8
+ const info = container.resolve(ValidationMetadataStore).getModelValidatorsInfo(target);
9
+ return validateModel(value, info);
10
+ };
11
+ };
12
+ }
13
+
14
+ export { validable };
@@ -0,0 +1,55 @@
1
+ import { __decorate } from 'tslib';
2
+ import { singleton } from '../../injection/index.js';
3
+ import { _IS_OPTIONAL_DUMMY_VALIDATOR_ } from '../validators/validateIsOptional.js';
4
+
5
+ let ValidationMetadataStore = class ValidationMetadataStore {
6
+ validators = new Map();
7
+ saveValidatorMetadata(validatorMetadata) {
8
+ let modelValidators = this.validators.get(validatorMetadata.modelConstructor);
9
+ if (!modelValidators) {
10
+ this.validators.set(validatorMetadata.modelConstructor, (modelValidators = new Map()));
11
+ }
12
+ let propertyValidators = modelValidators.get(validatorMetadata.propertyName);
13
+ if (!propertyValidators) {
14
+ propertyValidators = [];
15
+ modelValidators.set(validatorMetadata.propertyName, propertyValidators);
16
+ }
17
+ propertyValidators.unshift(validatorMetadata);
18
+ }
19
+ getModelValidatorsInfo(modelConstructor) {
20
+ const modelValidators = {
21
+ modelConstructor: modelConstructor,
22
+ properties: {},
23
+ };
24
+ [...(this.validators.get(modelConstructor)?.values() ?? [])].forEach((propertyValidatorsMetadata) => {
25
+ const propertyName = propertyValidatorsMetadata.at(0)?.propertyName;
26
+ if (!propertyName) {
27
+ return;
28
+ }
29
+ let propertyInfo = modelValidators.properties[propertyName];
30
+ if (!propertyInfo) {
31
+ propertyInfo = {};
32
+ modelValidators.properties[propertyName] = propertyInfo;
33
+ }
34
+ let validators = propertyInfo.validators;
35
+ if (!validators) {
36
+ validators = [];
37
+ propertyInfo.validators = validators;
38
+ }
39
+ propertyValidatorsMetadata.forEach((propertyValidatorMetadata) => {
40
+ if (propertyValidatorMetadata.validator === _IS_OPTIONAL_DUMMY_VALIDATOR_) {
41
+ propertyInfo.isOptional = true;
42
+ }
43
+ else {
44
+ validators.push(propertyValidatorMetadata);
45
+ }
46
+ });
47
+ });
48
+ return modelValidators;
49
+ }
50
+ };
51
+ ValidationMetadataStore = __decorate([
52
+ singleton()
53
+ ], ValidationMetadataStore);
54
+
55
+ export { ValidationMetadataStore };
@@ -0,0 +1,11 @@
1
+ import { container } from '../injection/index.js';
2
+ import { ValidationMetadataStore } from './metadata/ValidationMetadataStore.js';
3
+ import { validateModel } from './validators/validateModel.js';
4
+
5
+ function validateModel2(value, modelConstructor) {
6
+ const metadataStore = container.resolve(ValidationMetadataStore);
7
+ const info = metadataStore.getModelValidatorsInfo(modelConstructor);
8
+ return validateModel(value, info);
9
+ }
10
+
11
+ export { validateModel2 };
@@ -0,0 +1,12 @@
1
+ function validateIsBoolean(value) {
2
+ if (typeof value !== 'boolean') {
3
+ return {
4
+ error: { description: `boolean value is required` },
5
+ };
6
+ }
7
+ return {
8
+ value,
9
+ };
10
+ }
11
+
12
+ export { validateIsBoolean };
@@ -0,0 +1,16 @@
1
+ function validateIsDate(value) {
2
+ const _value = new Date(value);
3
+ const time = _value.getTime();
4
+ if ((typeof value !== 'number' && typeof value !== 'string' && !(value instanceof Date)) ||
5
+ isNaN(time) ||
6
+ time < 0) {
7
+ return {
8
+ error: { description: `Date value is not valid` },
9
+ };
10
+ }
11
+ return {
12
+ value: _value,
13
+ };
14
+ }
15
+
16
+ export { validateIsDate };
@@ -0,0 +1,12 @@
1
+ function validateIsNotEmpty(value) {
2
+ if (value === '' || (Array.isArray(value) && value.length === 0)) {
3
+ return {
4
+ error: { description: `empty value not allowed` },
5
+ };
6
+ }
7
+ return {
8
+ value,
9
+ };
10
+ }
11
+
12
+ export { validateIsNotEmpty };
@@ -0,0 +1,12 @@
1
+ function validateIsNumber(value) {
2
+ if (typeof value !== 'number') {
3
+ return {
4
+ error: { description: `number value is required` },
5
+ };
6
+ }
7
+ return {
8
+ value,
9
+ };
10
+ }
11
+
12
+ export { validateIsNumber };
@@ -0,0 +1,5 @@
1
+ const _IS_OPTIONAL_DUMMY_VALIDATOR_ = (value) => {
2
+ return { value, errors: [] };
3
+ };
4
+
5
+ export { _IS_OPTIONAL_DUMMY_VALIDATOR_ };
@@ -0,0 +1,12 @@
1
+ function validateIsPresent(value) {
2
+ if (value == null) {
3
+ return {
4
+ error: { description: `not present` },
5
+ };
6
+ }
7
+ return {
8
+ value,
9
+ };
10
+ }
11
+
12
+ export { validateIsPresent };
@@ -0,0 +1,12 @@
1
+ function validateIsString(value) {
2
+ if (typeof value !== 'string') {
3
+ return {
4
+ error: { description: `string value is required` },
5
+ };
6
+ }
7
+ return {
8
+ value,
9
+ };
10
+ }
11
+
12
+ export { validateIsString };
@@ -0,0 +1,17 @@
1
+ function validateMax(value, options) {
2
+ if (value == null) {
3
+ return {
4
+ error: { description: `null or undefined value can't be validated with max` },
5
+ };
6
+ }
7
+ if (Number(value) > Number(options.limit)) {
8
+ return {
9
+ error: { description: `exceeds the established max limit` },
10
+ };
11
+ }
12
+ return {
13
+ value,
14
+ };
15
+ }
16
+
17
+ export { validateMax };
@@ -0,0 +1,17 @@
1
+ function validateMin(value, options) {
2
+ if (value == null) {
3
+ return {
4
+ error: { description: `null or undefined value can't be validated with min` },
5
+ };
6
+ }
7
+ if (Number(value) < Number(options.limit)) {
8
+ return {
9
+ error: { description: `exceeds the established min limit` },
10
+ };
11
+ }
12
+ return {
13
+ value,
14
+ };
15
+ }
16
+
17
+ export { validateMin };
@@ -0,0 +1,47 @@
1
+ function validateModel(value, info) {
2
+ const result = {};
3
+ if (typeof value !== 'object') {
4
+ result.error = {
5
+ model: [
6
+ {
7
+ description: `the value should be an object`,
8
+ },
9
+ ],
10
+ properties: [],
11
+ };
12
+ return result;
13
+ }
14
+ const validatedValue = new info.modelConstructor();
15
+ for (const propertyName in info.properties) {
16
+ const propertyInfo = info.properties[propertyName];
17
+ const propertyValidators = propertyInfo.validators ?? [];
18
+ validatedValue[propertyName] = value[propertyName] ?? validatedValue[propertyName];
19
+ if (validatedValue[propertyName] == null && propertyInfo.isOptional) {
20
+ validatedValue[propertyName] = null;
21
+ continue;
22
+ }
23
+ for (let propertyValidatorInfo of propertyValidators) {
24
+ const propertyValidatorResult = propertyValidatorInfo.validator(validatedValue[propertyName], propertyValidatorInfo.validatorOptions);
25
+ validatedValue[propertyName] = propertyValidatorResult.value;
26
+ if (propertyValidatorResult.error) {
27
+ let resultError = result.error;
28
+ if (!resultError) {
29
+ resultError = { model: [], properties: [] };
30
+ result.error = resultError;
31
+ }
32
+ let propertyErrors = resultError.properties.find((x) => x.name === propertyName);
33
+ if (!propertyErrors) {
34
+ propertyErrors = { name: propertyName, errors: [] };
35
+ resultError.properties.push(propertyErrors);
36
+ }
37
+ propertyErrors.errors.push(propertyValidatorResult.error);
38
+ }
39
+ }
40
+ }
41
+ if (!result.error) {
42
+ result.value = validatedValue;
43
+ }
44
+ return result;
45
+ }
46
+
47
+ export { validateModel };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wabot-dev/framework",
3
- "version": "0.0.17",
3
+ "version": "0.0.50",
4
4
  "description": "Framework for IA Chat Bots",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -16,7 +16,7 @@
16
16
  "fmt": "prettier --write .",
17
17
  "fmt:check": "prettier --check .",
18
18
  "types:check": "tsc --noEmit",
19
- "elia:dev": "yts --import ./dotenv.config.mjs ./test/elia/runElia.ts"
19
+ "elia:dev": "yts --import ./env.mjs ./test/elia/runElia.ts"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@rollup/plugin-alias": "5.1.1",
@@ -24,6 +24,7 @@
24
24
  "@rollup/plugin-json": "6.1.0",
25
25
  "@rollup/plugin-node-resolve": "16.0.1",
26
26
  "@rollup/plugin-typescript": "12.1.2",
27
+ "@types/html-to-text": "^9.0.4",
27
28
  "@types/node": "22.14.1",
28
29
  "@types/react": "^19.1.2",
29
30
  "@yucacodes/ts": "^0.0.4",
@@ -39,20 +40,17 @@
39
40
  "@types/pg": "^8.11.14",
40
41
  "@yucacodes/ts": "^0.0.4",
41
42
  "body-parser": "^2.2.0",
42
- "class-transformer": "^0.5.1",
43
- "class-validator": "^0.14.1",
44
43
  "debug": "^4.4.0",
45
44
  "dotenv": "^16.5.0",
46
45
  "express": "^5.1.0",
47
46
  "grammy": "^1.36.0",
47
+ "html-to-text": "^9.0.5",
48
48
  "openai": "^4.93.0",
49
49
  "pg": "^8.15.6",
50
50
  "reflect-metadata": "^0.2.2",
51
51
  "short-uuid": "^5.2.0",
52
52
  "socket.io": "^4.8.1",
53
53
  "socket.io-client": "^4.8.1",
54
- "sqlite": "^5.1.1",
55
- "sqlite3": "^5.1.7",
56
54
  "tslib": "^2.8.1",
57
55
  "tsyringe": "^4.9.1",
58
56
  "uuid": "^11.1.0"