diff --git a/.husky/commit-msg b/.husky/commit-msg index 4002db7..3d3fb52 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx --no -- commitlint --edit +npm run lint:fix && npx --no -- commitlint --edit diff --git a/.prettierignore b/.prettierignore index 547ec21..7fffea9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,5 @@ packages/**/lib -packages/docs/*.json +packages/docs/ **/.git **/.svn **/.hg diff --git a/.prettierrc.json b/.prettierrc.json index e74ed9f..f0db82f 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -2,5 +2,6 @@ "trailingComma": "es5", "tabWidth": 4, "semi": false, - "singleQuote": true + "singleQuote": true, + "printWidth": 120 } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 0d0e52b..1ace260 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["xyc.vscode-mdx-preview"] + "recommendations": ["xyc.vscode-mdx-preview", "vivaxy.vscode-conventional-commits", "mhutchie.git-graph"] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d3865b..01adb7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,98 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.1.20](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.19...v0.1.20) (2023-02-05) + + +### Features + +* **cli:** :fire: add regex expression in addKeyworkd ([e34560c](https://github.com/leifermendez/bot-whatsapp/commit/e34560c77d4852d2e90930f0858e51aa67d4eeab)) +* **provider:** :zap: possible get class provider ([76ba717](https://github.com/leifermendez/bot-whatsapp/commit/76ba717927a75b3d6299206aa0b8aee2bc25b726)) + + +### Bug Fixes + +* **cli:** :zap: working flowDynamic test ([c0113ca](https://github.com/leifermendez/bot-whatsapp/commit/c0113ca49295aff220d8defcb53f2ba7f2872d75)) +* **cli:** :zap: working flowDynamic test ([aef52d2](https://github.com/leifermendez/bot-whatsapp/commit/aef52d2694fa6616d614338643db198b4f7f1fe8)) +* **cli:** :zap: working flowDynamic test ([f769320](https://github.com/leifermendez/bot-whatsapp/commit/f76932021ce968d93241b55cfcdb8ae0e0e6c934)) +* **cli:** :zap: working flowDynamic test ([23e09ef](https://github.com/leifermendez/bot-whatsapp/commit/23e09efaeccaf51018c55da492edff45b625f0a9)) +* **database:** add support emoji in mysql ([9311aa0](https://github.com/leifermendez/bot-whatsapp/commit/9311aa0a65623a1bf40e96207a281625154dae90)) +* **database:** fix naming ([cd082f2](https://github.com/leifermendez/bot-whatsapp/commit/cd082f235012cd5f5844c6437f51711beee0c865)) +* **database:** fix naming ([1afc3ba](https://github.com/leifermendez/bot-whatsapp/commit/1afc3ba182070713b5bec40eaab0fa1f680830cd)) +* **database:** fix naming ([c9831d2](https://github.com/leifermendez/bot-whatsapp/commit/c9831d202ab2c85f15a0247cd2a2426bc435270c)) +* **provider:** :zap: baily wa.link ([96c2bff](https://github.com/leifermendez/bot-whatsapp/commit/96c2bffd093269be8e39474a84c156938504a6cb)) + +### [0.1.19](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.18...v0.1.19) (2023-01-29) + + +### Features + +* :fire: bailey add media ([eab39e4](https://github.com/leifermendez/bot-whatsapp/commit/eab39e4ac06fd46f1a4671f8c15d1456b4400b97)) +* :zap: more feature ([e19c3a2](https://github.com/leifermendez/bot-whatsapp/commit/e19c3a25a40259c74b4add9635af4844907eed26)) +* **provider:** :rocket: fix issues in providers venom and wwebjs ([cbe438b](https://github.com/leifermendez/bot-whatsapp/commit/cbe438b77854e8df48b9dafaf7a837d21124ac5f)) +* **provider:** :rocket: fix provider ([0ad4c58](https://github.com/leifermendez/bot-whatsapp/commit/0ad4c58457b548dc41c0f9e8470d59c48de7b95a)) +* **provider:** :rocket: fix provider ([f8c7184](https://github.com/leifermendez/bot-whatsapp/commit/f8c7184487065443ab10f77aaf585e8bd63ca441)) +* **provider:** :rocket: fix provider ([b2afa45](https://github.com/leifermendez/bot-whatsapp/commit/b2afa45352a7ab1f5d9775f3c1fde475bd8ca204)) +* **provider:** :rocket: fix provider venom and wwebjs ([dcb0566](https://github.com/leifermendez/bot-whatsapp/commit/dcb0566d2bc3da40cd0c71554bb5ea0ec115d9ca)) +* **provider:** :rocket: implements all send media to venom provider ([9dd7c02](https://github.com/leifermendez/bot-whatsapp/commit/9dd7c02b6a5474aff063f7d6be0ca8519504b93c)) +* **provider:** :rocket: send file wwebjs ([6ff1a3a](https://github.com/leifermendez/bot-whatsapp/commit/6ff1a3a980196c01c66ed04ee07d0e7e57256504)) +* **provider:** :zap: bailey add send file video audio ([14d1a61](https://github.com/leifermendez/bot-whatsapp/commit/14d1a61fa259c09135c37c55bd79e97c9c8367e4)) +* **provider:** :zap: venom wweb ([fd2847a](https://github.com/leifermendez/bot-whatsapp/commit/fd2847aea0db17a0bdf33b5bca67a4cb8db2da16)) +* **provider:** :zap: venom wweb ([f95331d](https://github.com/leifermendez/bot-whatsapp/commit/f95331d3dc70e76a3dfbe4c8d24059f0e7a164ef)) +* **provider:** 🚀 implements all send media to venom provider ([bd7d150](https://github.com/leifermendez/bot-whatsapp/commit/bd7d150c047af41fdbb47f0a50a21e82cd79ee85)) + + +### Bug Fixes + +* **bot:** :fire: endFlow with ctx ([f6114af](https://github.com/leifermendez/bot-whatsapp/commit/f6114affadfbc324536a86167d1fdfe8da3c8de6)) +* **bot:** :fire: endFlow with ctx ([b655ae4](https://github.com/leifermendez/bot-whatsapp/commit/b655ae449e7958ea940d8cc3c678fd66f60b6385)) +* **bot:** :zap: endFlow butons ([87a4203](https://github.com/leifermendez/bot-whatsapp/commit/87a4203cd5b88f566387a76d586248e4265d6e4e)) +* **bot:** :zap: fix fallback refactor ([e22780d](https://github.com/leifermendez/bot-whatsapp/commit/e22780d3faba94f71a70f1f201a20690608fa5bf)) +* **cli:** :zap: endflow ([1c66f17](https://github.com/leifermendez/bot-whatsapp/commit/1c66f178a56d284bb8cb9df5ca17685c7e5d1ddd)) +* **cli:** :zap: refactor fallback in child flow ([b33e346](https://github.com/leifermendez/bot-whatsapp/commit/b33e34692d3abcb6874308a9be79f74be4a2c3a8)) +* **cli:** :zap: refactor fallback in child flow ([8da4b20](https://github.com/leifermendez/bot-whatsapp/commit/8da4b204b41125b5d0fa0aee4fa87c1f5faf5568)) + +### [0.1.18](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.17...v0.1.18) (2023-01-24) + + +### Features + +* **bot:** :zap: add blacklist ([7078dc4](https://github.com/leifermendez/bot-whatsapp/commit/7078dc4c93d01bf90ef08ecb34e89a1abbe16fd2)) +* **bot:** :zap: flowDynamic buttons, media ([3c4b1c0](https://github.com/leifermendez/bot-whatsapp/commit/3c4b1c0fc4b6d98d67c67806d918d3604bb2209b)) + + +### Bug Fixes + +* **bot:** :bug: body undefined ([bb6ed4a](https://github.com/leifermendez/bot-whatsapp/commit/bb6ed4a084ae98070dfdf0c4ba1eca574c4092cc)) +* **bot:** :bug: body undefined ([9234cf1](https://github.com/leifermendez/bot-whatsapp/commit/9234cf1c5d00abdd35e62a826b3c450ab056987a)) +* **bot:** :bug: body undefined ([a118bbb](https://github.com/leifermendez/bot-whatsapp/commit/a118bbbf7f0a7023cb7f33c23f37db72adad151f)) +* **bot:** :bug: body undefined ([f54dea5](https://github.com/leifermendez/bot-whatsapp/commit/f54dea52b01063acd6122eeba1fbbe324aa7805d)) +* **bot:** :bug: body undefined ([72e0a91](https://github.com/leifermendez/bot-whatsapp/commit/72e0a910503e9643db7dfbc6e09c41c96934e1f7)) +* **bot:** :bug: body undefined ([70dd4d7](https://github.com/leifermendez/bot-whatsapp/commit/70dd4d73e814fc5636d19a887f3621c483b837c1)) +* **bot:** :bug: body undefined ([ecf0eef](https://github.com/leifermendez/bot-whatsapp/commit/ecf0eef928917d76c59bd23886cb7a4108b421f1)) +* **bot:** :bug: flowDynamic stranger behaviour ([877252b](https://github.com/leifermendez/bot-whatsapp/commit/877252bd4a8a7bbbbf083c3ceaeaeb952b0a1828)) +* **bot:** :bug: flowDynamic stranger behaviour ([f5a7de3](https://github.com/leifermendez/bot-whatsapp/commit/f5a7de3a003c012e2164e51fff26892cfc3144be)) +* **bot:** :memo: more docs ([98793d0](https://github.com/leifermendez/bot-whatsapp/commit/98793d0cfc1674830beaa3707f933c5a791eec14)) +* **cli:** :zap: refactor ([a29b9d4](https://github.com/leifermendez/bot-whatsapp/commit/a29b9d4e1f85fc163cf1d633c0857f0c8b7f03e1)) +* **cli:** :zap: refactor ([18ef4e9](https://github.com/leifermendez/bot-whatsapp/commit/18ef4e9d726575ca390ca24354825860328d3347)) +* **cli:** :zap: refactor ([3648757](https://github.com/leifermendez/bot-whatsapp/commit/3648757fa083bdb88a16bf6c2e90c828c233bdb1)) +* **cli:** :zap: refactor ([32f6a70](https://github.com/leifermendez/bot-whatsapp/commit/32f6a70f8f6fb26d8ea2a0f1a4aec4827b9d6a93)) +* **cli:** :zap: refactor ([8c825e7](https://github.com/leifermendez/bot-whatsapp/commit/8c825e7f6b7133f7cc7f3041ce331b80a9fe60e0)) +* **cli:** :zap: refactor ([0c0f437](https://github.com/leifermendez/bot-whatsapp/commit/0c0f4375b84549bee809340a85f9ce038ee2739e)) +* **cli:** :zap: refactor ([039ce5d](https://github.com/leifermendez/bot-whatsapp/commit/039ce5dd7cac8115b335ad5de05f7bd871e24140)) +* **cli:** :zap: refactor ([5e87918](https://github.com/leifermendez/bot-whatsapp/commit/5e879188b8bf9d486399b308a9a9c2612607d465)) +* **cli:** :zap: refactor ([21a7270](https://github.com/leifermendez/bot-whatsapp/commit/21a72702817bc6b344223b34ca4513a7ff45fc93)) +* **cli:** :zap: refactor ([82a99b2](https://github.com/leifermendez/bot-whatsapp/commit/82a99b2c80e6738566042ea738bbab8208a17758)) +* **cli:** :zap: refactor ([cc19974](https://github.com/leifermendez/bot-whatsapp/commit/cc19974579379777b05cb69c38cec0fce6740471)) +* **cli:** :zap: refactor ([56fcb8f](https://github.com/leifermendez/bot-whatsapp/commit/56fcb8fb72169bc21fce7c4fcdceccf2acd39c73)) +* **cli:** :zap: refactor ([f36cff1](https://github.com/leifermendez/bot-whatsapp/commit/f36cff1eefdd96be4ab531e1cb2d3b630b1a81c3)) +* **cli:** :zap: refactor ([b393c11](https://github.com/leifermendez/bot-whatsapp/commit/b393c11af6c0ebccb0a690be8b90b9df8877dad1)) +* **cli:** :zap: refactor ([6683715](https://github.com/leifermendez/bot-whatsapp/commit/6683715ad617ea1075654a475a1c62ea607c733f)) +* **contexts:** :bug: fixed [#524](https://github.com/leifermendez/bot-whatsapp/issues/524) issue ([79cc31a](https://github.com/leifermendez/bot-whatsapp/commit/79cc31a96f6a9836447cc4e6bb1e1521c54183fe)) +* **contexts:** :bug: fixed [#524](https://github.com/leifermendez/bot-whatsapp/issues/524) issue ([7067b4a](https://github.com/leifermendez/bot-whatsapp/commit/7067b4a80b7938ccfaf1ed141a37d645a1a3a062)) +* **provider:** wwebjs upgrade ([345f256](https://github.com/leifermendez/bot-whatsapp/commit/345f256a1b4a238519dafc15c9a31bc5e6bad4fe)) +* se agrego @bot-whatsapp/portal a package.json ([46a9fa6](https://github.com/leifermendez/bot-whatsapp/commit/46a9fa6793e06600335de998d2bd9d0691b02ca4)) + ### [0.1.17](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.16...v0.1.17) (2023-01-13) diff --git a/README.md b/README.md index b4a2271..af4b124 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # Chatbot Library ![](https://img.shields.io/npm/v/@bot-whatsapp/bot?color=%2300c200&label=%40bot-whatsapp) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) -[![BotWhatsapp Releases(Prod)](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml/badge.svg)](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml) - +[![](https://img.shields.io/discord/915193197645402142?logo=discord)](https://link.codigoencasa.com/DISCORD)

@@ -34,6 +33,13 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación. + + + + - + + + + + + + + - + +
+ + cheveguerra +
+ Jose Alberto Guerra Ugalde +
+
leifermendez @@ -62,6 +68,21 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación. Leifer Mendez + + danielcasta0398 +
+ Juan Daniel Castaño +
+
+ + marianarolfo +
+ Null +
+
HKong31 @@ -75,8 +96,14 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación.
Zvi
-
+ + JosephVTX +
+ Joseph Vega Callupe +
+
Gonzalito87 @@ -84,6 +111,42 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación. Null + + devrlbusiness +
+ Developer RL Business +
+
+ + Gregoriotecnico +
+ Null +
+
+ + jlferrete +
+ Jose Luis Ferrete Olarte +
+
+ + lisandroprada +
+ Null +
+
+ + 6rak0 +
+ Null +
+
tonyvazgar @@ -91,20 +154,14 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación. Luis Antonio Vázquez García - - ulisesvina -
- Ulises Viña -
-
rrruuuyyy
Rodrigo Mendoza Cabrera
-
yond1994 diff --git a/__test__/01-case.test.js b/__test__/01-case.test.js index bce4a42..57ae08c 100644 --- a/__test__/01-case.test.js +++ b/__test__/01-case.test.js @@ -2,12 +2,7 @@ const { test } = require('uvu') const assert = require('uvu/assert') const MOCK_DB = require('../packages/database/src/mock') const PROVIDER_DB = require('../packages/provider/src/mock') -const { - addKeyword, - createBot, - createFlow, - createProvider, -} = require('../packages/bot') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') test(`[Caso - 01] Flow Basico`, async () => { const [VALUE_A, VALUE_B] = ['hola', 'buenas'] diff --git a/__test__/02-case.test.js b/__test__/02-case.test.js index a2a93ec..855a566 100644 --- a/__test__/02-case.test.js +++ b/__test__/02-case.test.js @@ -2,12 +2,7 @@ const { test } = require('uvu') const assert = require('uvu/assert') const MOCK_DB = require('../packages/database/src/mock') const PROVIDER_DB = require('../packages/provider/src/mock') -const { - addKeyword, - createBot, - createFlow, - createProvider, -} = require('../packages/bot/index') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') /** * Falsear peticion async diff --git a/__test__/03-case.test.js b/__test__/03-case.test.js index 45c399a..646b5d5 100644 --- a/__test__/03-case.test.js +++ b/__test__/03-case.test.js @@ -2,12 +2,7 @@ const { test } = require('uvu') const assert = require('uvu/assert') const MOCK_DB = require('../packages/database/src/mock') const PROVIDER_DB = require('../packages/provider/src/mock') -const { - addKeyword, - createBot, - createFlow, - createProvider, -} = require('../packages/bot/index') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') test(`[Caso - 03] Flow puro`, async () => { const MOCK_VALUES = ['Bienvenido a mi tienda', 'Como estas?'] @@ -15,9 +10,7 @@ test(`[Caso - 03] Flow puro`, async () => { const provider = createProvider(PROVIDER_DB) const database = new MOCK_DB() - const flujoPrincipal = addKeyword(['hola']) - .addAnswer(MOCK_VALUES[0]) - .addAnswer(MOCK_VALUES[1]) + const flujoPrincipal = addKeyword(['hola']).addAnswer(MOCK_VALUES[0]).addAnswer(MOCK_VALUES[1]) createBot({ database, diff --git a/__test__/04-case.test.js b/__test__/04-case.test.js index 2291a0c..8fcaeda 100644 --- a/__test__/04-case.test.js +++ b/__test__/04-case.test.js @@ -2,12 +2,7 @@ const { test } = require('uvu') const assert = require('uvu/assert') const MOCK_DB = require('../packages/database/src/mock') const PROVIDER_DB = require('../packages/provider/src/mock') -const { - addKeyword, - createBot, - createFlow, - createProvider, -} = require('../packages/bot/index') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') /** * Falsear peticion async diff --git a/__test__/05-case.test.js b/__test__/05-case.test.js new file mode 100644 index 0000000..f61d114 --- /dev/null +++ b/__test__/05-case.test.js @@ -0,0 +1,100 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_DB = require('../packages/provider/src/mock') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') + +/** + * Falsear peticion async + * @param {*} fakeData + * @returns + */ +const fakeHTTP = async (fakeData = []) => { + await delay(5) + const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) + return Promise.resolve(data) +} + +test(`[Caso - 05] Continuar Flujo (continueFlow)`, async () => { + const MOCK_VALUES = ['¿CUal es tu email?', 'Continuamos....', '¿Cual es tu edad?'] + const provider = createProvider(PROVIDER_DB) + const database = new MOCK_DB() + + const flujoPrincipal = addKeyword(['hola']) + .addAnswer( + MOCK_VALUES[0], + { + capture: true, + }, + async (ctx, { flowDynamic, fallBack }) => { + const validation = ctx.body.includes('@') + + if (validation) { + const getDataFromApi = await fakeHTTP(['Gracias por tu email se ha validado de manera correcta']) + return flowDynamic(getDataFromApi) + } + return fallBack(validation) + } + ) + .addAnswer(MOCK_VALUES[1]) + .addAnswer(MOCK_VALUES[2], { capture: true }, async (ctx, { flowDynamic, fallBack }) => { + if (ctx.body !== '18') { + await delay(50) + return fallBack(false, 'Ups creo que no eres mayor de edad') + } + return flowDynamic('Bien tu edad es correcta!') + }) + .addAnswer('Puedes pasar') + + createBot({ + database, + flow: createFlow([flujoPrincipal]), + provider, + }) + + provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + provider.delaySendMessage(10, 'message', { + from: '000', + body: 'this is not email value', + }) + + provider.delaySendMessage(20, 'message', { + from: '000', + body: 'test@test.com', + }) + + provider.delaySendMessage(90, 'message', { + from: '000', + body: '20', + }) + + provider.delaySendMessage(200, 'message', { + from: '000', + body: '18', + }) + + await delay(1200) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is(MOCK_VALUES[0], getHistory[0]) + assert.is('this is not email value', getHistory[1]) + assert.is(MOCK_VALUES[0], getHistory[2]) + assert.is('test@test.com', getHistory[3]) + assert.is('1 Gracias por tu email se ha validado de manera correcta', getHistory[4]) + assert.is(MOCK_VALUES[1], getHistory[5]) + assert.is(MOCK_VALUES[2], getHistory[6]) + assert.is('20', getHistory[7]) + assert.is('Ups creo que no eres mayor de edad', getHistory[8]) + assert.is('18', getHistory[9]) + assert.is('Bien tu edad es correcta!', getHistory[10]) + assert.is('Puedes pasar', getHistory[11]) +}) + +test.run() + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} diff --git a/__test__/06-case.test.js b/__test__/06-case.test.js new file mode 100644 index 0000000..355cbd4 --- /dev/null +++ b/__test__/06-case.test.js @@ -0,0 +1,93 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_DB = require('../packages/provider/src/mock') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') + +/** + * Falsear peticion async + * @param {*} fakeData + * @returns + */ +const fakeHTTP = async (fakeData = []) => { + await delay(5) + const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) + return Promise.resolve(data) +} + +test(`[Caso - 06] Finalizar Flujo (endFlow)`, async () => { + const MOCK_VALUES = ['¿CUal es tu email?', 'Continuamos....', '¿Cual es tu edad?'] + const provider = createProvider(PROVIDER_DB) + const database = new MOCK_DB() + + const flujoPrincipal = addKeyword(['hola']) + .addAnswer( + MOCK_VALUES[0], + { + capture: true, + }, + async (ctx, { flowDynamic, fallBack }) => { + const validation = ctx.body.includes('@') + + if (validation) { + const getDataFromApi = await fakeHTTP(['Gracias por tu email se ha validado de manera correcta']) + return flowDynamic(getDataFromApi) + } + return fallBack(validation) + } + ) + .addAnswer(MOCK_VALUES[1], null, async (_, { endFlow }) => { + return endFlow() + }) + .addAnswer(MOCK_VALUES[2], { capture: true }, async (ctx, { flowDynamic, fallBack }) => { + if (ctx.body !== '18') { + await delay(50) + return fallBack(false, 'Ups creo que no eres mayor de edad') + } + return flowDynamic('Bien tu edad es correcta!') + }) + .addAnswer('Puedes pasar') + + createBot({ + database, + flow: createFlow([flujoPrincipal]), + provider, + }) + + provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + provider.delaySendMessage(10, 'message', { + from: '000', + body: 'this is not email value', + }) + + provider.delaySendMessage(20, 'message', { + from: '000', + body: 'test@test.com', + }) + + provider.delaySendMessage(90, 'message', { + from: '000', + body: '20', + }) + + await delay(1200) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is(MOCK_VALUES[0], getHistory[0]) + assert.is('this is not email value', getHistory[1]) + assert.is(MOCK_VALUES[0], getHistory[2]) + assert.is('test@test.com', getHistory[3]) + assert.is('1 Gracias por tu email se ha validado de manera correcta', getHistory[4]) + assert.is(MOCK_VALUES[1], getHistory[5]) + assert.is('20', getHistory[6]) + assert.is(undefined, getHistory[7]) +}) + +test.run() + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} diff --git a/__test__/07-case.test.js b/__test__/07-case.test.js new file mode 100644 index 0000000..6eb8e42 --- /dev/null +++ b/__test__/07-case.test.js @@ -0,0 +1,92 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_DB = require('../packages/provider/src/mock') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') + +/** + * Falsear peticion async + * @param {*} fakeData + * @returns + */ +const fakeHTTP = async (fakeData = []) => { + await delay(5) + const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) + return Promise.resolve(data) +} + +let STATE_APP = {} + +test(`[Caso - 07] Retornar estado`, async () => { + const MOCK_VALUES = ['¿Cual es tu nombre?', '¿Cual es tu edad?', 'Tu datos son:'] + const provider = createProvider(PROVIDER_DB) + const database = new MOCK_DB() + + const flujoPrincipal = addKeyword(['hola']) + .addAnswer( + MOCK_VALUES[0], + { + capture: true, + }, + async (ctx, { flowDynamic, fallBack }) => { + STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], name: ctx.body } + + flowDynamic('Gracias por tu nombre!') + } + ) + .addAnswer( + MOCK_VALUES[1], + { + capture: true, + }, + async (ctx, { flowDynamic, endFlow }) => { + STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], age: ctx.body } + + await flowDynamic('Gracias por tu edad!') + } + ) + .addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => { + flowDynamic(`Nombre: ${STATE_APP[ctx.from].name} Edad: ${STATE_APP[ctx.from].age}`) + }) + .addAnswer('🤖🤖 Gracias por tu participacion') + + createBot({ + database, + flow: createFlow([flujoPrincipal]), + provider, + }) + + provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + provider.delaySendMessage(20, 'message', { + from: '000', + body: 'Leifer', + }) + + provider.delaySendMessage(40, 'message', { + from: '000', + body: '90', + }) + + await delay(1200) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is(MOCK_VALUES[0], getHistory[0]) + assert.is('Leifer', getHistory[1]) + assert.is('Gracias por tu nombre!', getHistory[2]) + assert.is('¿Cual es tu edad?', getHistory[3]) + assert.is('90', getHistory[4]) + assert.is('Gracias por tu edad!', getHistory[5]) + assert.is('Tu datos son:', getHistory[6]) + assert.is('Nombre: Leifer Edad: 90', getHistory[7]) + assert.is('🤖🤖 Gracias por tu participacion', getHistory[8]) + assert.is(undefined, getHistory[9]) +}) + +test.run() + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} diff --git a/__test__/08-case.test.js b/__test__/08-case.test.js new file mode 100644 index 0000000..82fc46a --- /dev/null +++ b/__test__/08-case.test.js @@ -0,0 +1,43 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_DB = require('../packages/provider/src/mock') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') + +test(`[Caso - 08] Regular expression on keyword`, async () => { + const provider = createProvider(PROVIDER_DB) + const database = new MOCK_DB() + + const REGEX_CREDIT_NUMBER = `/(^4[0-9]{12}(?:[0-9]{3})?$)|(^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$)|(3[47][0-9]{13})|(^3(?:0[0-5]|[68][0-9])[0-9]{11}$)|(^6(?:011|5[0-9]{2})[0-9]{12}$)|(^(?:2131|1800|35\d{3})\d{11}$)/gm` + const flujoPrincipal = addKeyword(REGEX_CREDIT_NUMBER, { regex: true }) + .addAnswer(`Gracias por proporcionar un numero de tarjeta valido`) + .addAnswer('Fin!') + + createBot({ + database, + flow: createFlow([flujoPrincipal]), + provider, + }) + + provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + provider.delaySendMessage(20, 'message', { + from: '000', + body: '374245455400126', + }) + + await delay(40) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is('Gracias por proporcionar un numero de tarjeta valido', getHistory[0]) + assert.is('Fin!', getHistory[1]) + assert.is(undefined, getHistory[2]) +}) + +test.run() + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} diff --git a/__test__/09-case.test.js b/__test__/09-case.test.js new file mode 100644 index 0000000..417ce31 --- /dev/null +++ b/__test__/09-case.test.js @@ -0,0 +1,41 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_MOCK = require('../packages/provider/src/mock') +const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') + +let PROVIDER = undefined + +test(`[Caso - 09] Check provider WS`, async () => { + const [VALUE_A, VALUE_B] = ['hola', 'buenas'] + + const flow = addKeyword(VALUE_A).addAnswer(VALUE_B, null, async (_, { provider }) => { + PROVIDER = provider + }) + const provider = createProvider(PROVIDER_MOCK) + const database = new MOCK_DB() + + createBot({ + database, + flow: createFlow([flow]), + provider, + }) + + provider.delaySendMessage(100, 'message', { + from: '000', + body: VALUE_A, + }) + + await delay(100) + + const prevMsg = database.getPrevByNumber('000') + + assert.is(prevMsg.answer, VALUE_B) + assert.is(typeof PROVIDER.sendMessage, 'function') +}) + +test.run() + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} diff --git a/changelog.config.js b/changelog.config.js index 70a500d..38c6f74 100644 --- a/changelog.config.js +++ b/changelog.config.js @@ -1,28 +1,10 @@ module.exports = { disableEmoji: false, format: '{type}{scope}: {emoji}{subject}', - list: [ - 'test', - 'feat', - 'fix', - 'chore', - 'docs', - 'refactor', - 'style', - 'ci', - 'perf', - ], + list: ['test', 'feat', 'fix', 'chore', 'docs', 'refactor', 'style', 'ci', 'perf'], maxMessageLength: 64, minMessageLength: 3, - questions: [ - 'type', - 'scope', - 'subject', - 'body', - 'breaking', - 'issues', - 'lerna', - ], + questions: ['type', 'scope', 'subject', 'body', 'breaking', 'issues', 'lerna'], scopes: [], types: { chore: { @@ -56,8 +38,7 @@ module.exports = { value: 'perf', }, refactor: { - description: - 'A code change that neither fixes a bug or adds a feature', + description: 'A code change that neither fixes a bug or adds a feature', emoji: '(💡)', value: 'refactor', }, @@ -67,8 +48,7 @@ module.exports = { value: 'release', }, style: { - description: - 'Markup, white-space, formatting, missing semi-colons...', + description: 'Markup, white-space, formatting, missing semi-colons...', emoji: '(💄)', value: 'style', }, @@ -80,8 +60,7 @@ module.exports = { messages: { type: "Select the type of change that you're committing:", customScope: 'Select the scope this component affects:', - subject: - 'Write a short, imperative mood description of the change:\n', + subject: 'Write a short, imperative mood description of the change:\n', body: 'Provide a longer description of the change:\n ', breaking: 'List any breaking changes:\n', footer: 'Issues this commit closes, e.g #123:', diff --git a/package.json b/package.json index 3f7f729..cc0b21a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/root", - "version": "0.1.17", + "version": "0.1.20", "description": "Bot de wahtsapp open source para MVP o pequeños negocios", "main": "app.js", "private": true, @@ -80,7 +80,6 @@ "eslint-config-prettier": "^8.5.0", "fs-extra": "^11.1.0", "git-cz": "^4.9.0", - "got": "11.8.3", "husky": "^8.0.2", "mime-types": "^2.1.35", "only-allow": "^1.1.1", diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index f7051b3..29cf5d1 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -43,8 +43,7 @@ class CoreClass { }, { event: 'require_action', - func: ({ instructions, title = '⚡⚡ ACCIÓN REQUERIDA ⚡⚡' }) => - printer(instructions, title), + func: ({ instructions, title = '⚡⚡ ACCIÓN REQUERIDA ⚡⚡' }) => printer(instructions, title), }, { event: 'ready', @@ -52,8 +51,7 @@ class CoreClass { }, { event: 'auth_failure', - func: ({ instructions }) => - printer(instructions, '⚡⚡ ERROR AUTH ⚡⚡'), + func: ({ instructions }) => printer(instructions, '⚡⚡ ERROR AUTH ⚡⚡'), }, { @@ -71,16 +69,14 @@ class CoreClass { logger.log(`[handleMsg]: `, messageCtxInComming) const { body, from } = messageCtxInComming let msgToSend = [] - let fallBackFlag = false let endFlowFlag = false + let fallBackFlag = false if (this.generalArgs.blackList.includes(from)) return if (!body) return if (!body.length) return let prevMsg = await this.databaseClass.getPrevByNumber(from) - const refToContinue = this.flowClass.findBySerialize( - prevMsg?.refSerialize - ) + const refToContinue = this.flowClass.findBySerialize(prevMsg?.refSerialize) if (prevMsg?.ref) { const ctxByNumber = toCtx({ @@ -91,6 +87,22 @@ class CoreClass { this.databaseClass.save(ctxByNumber) } + // 📄 Crar CTX de mensaje (uso private) + const createCtxMessage = (payload = {}, index = 0) => { + const body = typeof payload === 'string' ? payload : payload?.body ?? payload?.answer + const media = payload?.media ?? null + const buttons = payload?.buttons ?? [] + const capture = payload?.capture ?? false + + return toCtx({ + body, + from, + keyword: null, + index, + options: { media, buttons, capture }, + }) + } + // 📄 Limpiar cola de procesos const clearQueue = () => { QueuePrincipal.pendingPromise = false @@ -98,18 +110,18 @@ class CoreClass { } // 📄 Finalizar flujo - const endFlow = async () => { - prevMsg = null + const endFlow = async (message = null) => { endFlowFlag = true + if (message) this.sendProviderAndSave(from, createCtxMessage(message)) clearQueue() + sendFlow([]) return } // 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx - const sendFlow = async (messageToSend, numberOrId) => { - // [1 Paso] esto esta bien! + const sendFlow = async (messageToSend, numberOrId, options = { prev: prevMsg }) => { + if (options.prev?.options?.capture) await cbEveryCtx(options.prev?.ref) - if (prevMsg?.options?.capture) await cbEveryCtx(prevMsg?.ref) const queue = [] for (const ctxMessage of messageToSend) { if (endFlowFlag) return @@ -117,9 +129,7 @@ class CoreClass { if (delayMs) await delay(delayMs) QueuePrincipal.enqueue(() => Promise.all([ - this.sendProviderAndSave(numberOrId, ctxMessage).then( - () => resolveCbEveryCtx(ctxMessage) - ), + this.sendProviderAndSave(numberOrId, ctxMessage).then(() => resolveCbEveryCtx(ctxMessage)), ]) ) } @@ -127,57 +137,70 @@ class CoreClass { } // 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje - const fallBack = async () => { - fallBackFlag = true - await this.sendProviderAndSave(from, refToContinue) + const fallBack = async (validation = false, message = null) => { QueuePrincipal.queue = [] - return refToContinue + + if (validation) { + const currentPrev = await this.databaseClass.getPrevByNumber(from) + const nextFlow = await this.flowClass.find(refToContinue?.ref, true) + const filterNextFlow = nextFlow.filter((msg) => msg.refSerialize !== currentPrev?.refSerialize) + + return sendFlow(filterNextFlow, from, { prev: undefined }) + } + + await this.sendProviderAndSave(from, { + ...prevMsg, + answer: typeof message === 'string' ? message : message?.body ?? prevMsg.answer, + options: { + ...prevMsg.options, + buttons: prevMsg.options?.buttons, + }, + }) + return } // 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes // para evitar bloque de whatsapp - const flowDynamic = async ( - listMsg = [], - optListMsg = { limit: 5, fallback: false } - ) => { - if (!Array.isArray(listMsg)) - throw new Error('Esto debe ser un ARRAY') + const flowDynamic = async (listMsg = []) => { + if (!Array.isArray(listMsg)) listMsg = [listMsg] - fallBackFlag = optListMsg.fallback - const parseListMsg = listMsg - .map((opt, index) => { - const body = typeof opt === 'string' ? opt : opt.body - const media = opt?.media ?? null - const buttons = opt?.buttons ?? [] + const parseListMsg = listMsg.map((opt, index) => createCtxMessage(opt, index)) + const currentPrev = await this.databaseClass.getPrevByNumber(from) - return toCtx({ - body, - from, - keyword: null, - index, - options: { media, buttons }, - }) - }) - .slice(0, optListMsg.limit) + const skipContinueFlow = async () => { + const nextFlow = await this.flowClass.find(refToContinue?.ref, true) + const filterNextFlow = nextFlow.filter((msg) => msg.refSerialize !== currentPrev?.refSerialize) + const isContinueFlow = filterNextFlow.map((i) => i.keyword).includes(currentPrev?.ref) + return { + continue: !isContinueFlow, + contexts: filterNextFlow, + } + } if (endFlowFlag) return for (const msg of parseListMsg) { await this.sendProviderAndSave(from, msg) } + + const continueFlowData = await skipContinueFlow() + + if (continueFlowData.continue) return sendFlow(continueFlowData.contexts, from, { prev: undefined }) return } // 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback const resolveCbEveryCtx = async (ctxMessage) => { - if (!ctxMessage?.options?.capture) - return await cbEveryCtx(ctxMessage?.ref) + if (!ctxMessage?.options?.capture) return await cbEveryCtx(ctxMessage?.ref) } // 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo const cbEveryCtx = async (inRef) => { + const provider = this.providerClass + if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve() return this.flowClass.allCallbacks[inRef](messageCtxInComming, { + provider, fallBack, flowDynamic, endFlow, @@ -185,7 +208,7 @@ class CoreClass { } // 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa - if (!fallBackFlag && prevMsg?.options?.nested?.length) { + if (!endFlowFlag && prevMsg?.options?.nested?.length) { const nestedRef = prevMsg.options.nested const flowStandalone = nestedRef.map((f) => ({ ...nestedRef.find((r) => r.refSerialize === f.refSerialize), @@ -197,12 +220,11 @@ class CoreClass { return } - // 📄🤘(tiene return) [options: capture (boolean)]: Si se tiene option boolean - if (!fallBackFlag && !prevMsg?.options?.nested?.length) { + // 📄🤘(tiene return) Si el mensaje previo implementa capture + if (!endFlowFlag && !prevMsg?.options?.nested?.length) { const typeCapture = typeof prevMsg?.options?.capture - const valueCapture = prevMsg?.options?.capture - if (['string', 'boolean'].includes(typeCapture) && valueCapture) { + if (typeCapture === 'boolean' && fallBackFlag) { msgToSend = this.flowClass.find(refToContinue?.ref, true) || [] sendFlow(msgToSend, from) return @@ -221,13 +243,13 @@ class CoreClass { */ sendProviderAndSave = (numberOrId, ctxMessage) => { const { answer } = ctxMessage - return Promise.all([ - this.providerClass.sendMessage(numberOrId, answer, ctxMessage), - this.databaseClass.save({ ...ctxMessage, from: numberOrId }), - ]) + return this.providerClass + .sendMessage(numberOrId, answer, ctxMessage) + .then(() => this.databaseClass.save({ ...ctxMessage, from: numberOrId })) } /** + * @deprecated * @private * @param {*} message * @param {*} ref @@ -253,9 +275,7 @@ class CoreClass { for (const ctxMessage of messageToSend) { const delayMs = ctxMessage?.options?.delay || 0 if (delayMs) await delay(delayMs) - QueuePrincipal.enqueue(() => - this.sendProviderAndSave(numberOrId, ctxMessage) - ) + QueuePrincipal.enqueue(() => this.sendProviderAndSave(numberOrId, ctxMessage)) } return Promise.all(queue) } diff --git a/packages/bot/index.js b/packages/bot/index.js index ac96063..fe03d60 100644 --- a/packages/bot/index.js +++ b/packages/bot/index.js @@ -8,8 +8,7 @@ const { addKeyword, addAnswer, addChild, toSerialize } = require('./io/methods') * @param {*} args * @returns */ -const createBot = async ({ flow, database, provider }, args = {}) => - new CoreClass(flow, database, provider, args) +const createBot = async ({ flow, database, provider }, args = {}) => new CoreClass(flow, database, provider, args) /** * Crear instancia de clase Io (Flow) @@ -29,8 +28,7 @@ const createFlow = (args) => { */ const createProvider = (providerClass = class {}, args = null) => { const providerInstance = new providerClass(args) - if (!providerClass.prototype instanceof ProviderClass) - throw new Error('El provider no implementa ProviderClass') + if (!providerClass.prototype instanceof ProviderClass) throw new Error('El provider no implementa ProviderClass') return providerInstance } diff --git a/packages/bot/io/flow.class.js b/packages/bot/io/flow.class.js index 458c423..13de732 100644 --- a/packages/bot/io/flow.class.js +++ b/packages/bot/io/flow.class.js @@ -25,9 +25,17 @@ class FlowClass { let refSymbol = null overFlow = overFlow ?? this.flowSerialize + const customRegex = (str = null) => { + if (typeof str !== 'string') return + const instanceRegex = new RegExp(str) + return instanceRegex.test(str) + } + /** Retornar expresion regular para buscar coincidencia */ - const mapSensitive = (str, flag = false) => { - const regexSensitive = flag ? 'g' : 'i' + const mapSensitive = (str, mapOptions = { sensitive: false, regex: false }) => { + if (mapOptions.regex) return customRegex(str) + + const regexSensitive = mapOptions.sensitive ? 'g' : 'i' if (Array.isArray(str)) { return new RegExp(str.join('|'), regexSensitive) } @@ -36,6 +44,7 @@ class FlowClass { const findIn = (keyOrWord, symbol = false, flow = overFlow) => { const sensitive = refSymbol?.options?.sensitive || false + const regex = refSymbol?.options?.regex || false capture = refSymbol?.options?.capture || false if (capture) return messages @@ -46,7 +55,7 @@ class FlowClass { if (refSymbol?.ref) findIn(refSymbol.ref, true) } else { refSymbol = flow.find((c) => { - return mapSensitive(c.keyword, sensitive).test(keyOrWord) + return mapSensitive(c.keyword, { sensitive, regex }).test(keyOrWord) }) if (refSymbol?.ref) findIn(refSymbol.ref, true) return messages @@ -56,8 +65,7 @@ class FlowClass { return messages } - findBySerialize = (refSerialize) => - this.flowSerialize.find((r) => r.refSerialize === refSerialize) + findBySerialize = (refSerialize) => this.flowSerialize.find((r) => r.refSerialize === refSerialize) findIndexByRef = (ref) => this.flowSerialize.findIndex((r) => r.ref === ref) } diff --git a/packages/bot/io/methods/addAnswer.js b/packages/bot/io/methods/addAnswer.js index f0ccdad..5236c14 100644 --- a/packages/bot/io/methods/addAnswer.js +++ b/packages/bot/io/methods/addAnswer.js @@ -17,15 +17,10 @@ const addAnswer = * @returns */ const getAnswerOptions = () => ({ - media: - typeof options?.media === 'string' ? `${options?.media}` : null, + media: typeof options?.media === 'string' ? `${options?.media}` : null, buttons: Array.isArray(options?.buttons) ? options.buttons : [], - capture: - typeof options?.capture === 'boolean' - ? options?.capture - : false, - child: - typeof options?.child === 'string' ? `${options?.child}` : null, + capture: typeof options?.capture === 'boolean' ? options?.capture : false, + child: typeof options?.child === 'string' ? `${options?.child}` : null, delay: typeof options?.delay === 'number' ? options?.delay : 0, }) @@ -49,8 +44,7 @@ const addAnswer = * Esta funcion aplana y busca los callback anidados de los hijos * @returns */ - const getCbFromNested = () => - flatObject(Array.isArray(nested) ? nested : [nested]) + const getCbFromNested = () => flatObject(Array.isArray(nested) ? nested : [nested]) const callback = typeof cb === 'function' ? cb : () => null diff --git a/packages/bot/io/methods/addKeyword.js b/packages/bot/io/methods/addKeyword.js index e17f9be..50a5c0c 100644 --- a/packages/bot/io/methods/addKeyword.js +++ b/packages/bot/io/methods/addKeyword.js @@ -8,12 +8,14 @@ const { toJson } = require('./toJson') * @param {*} options {sensitive:boolean} default false */ const addKeyword = (keyword, options) => { + if (typeof keyword !== 'string' && !Array.isArray(keyword)) { + throw new Error('DEBE_SER_STRING_ARRAY_REGEX') + } + const parseOptions = () => { const defaultProperties = { - sensitive: - typeof options?.sensitive === 'boolean' - ? options?.sensitive - : false, + sensitive: typeof options?.sensitive === 'boolean' ? options?.sensitive : false, + regex: typeof options?.regex === 'boolean' ? options?.regex : false, } return defaultProperties diff --git a/packages/bot/package.json b/packages/bot/package.json index fe542c1..563cd74 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/bot", - "version": "0.0.73-alpha.0", + "version": "0.0.96-alpha.0", "description": "", "main": "./lib/bundle.bot.cjs", "scripts": { diff --git a/packages/bot/provider/provider.class.js b/packages/bot/provider/provider.class.js index 212f042..fde8221 100644 --- a/packages/bot/provider/provider.class.js +++ b/packages/bot/provider/provider.class.js @@ -20,10 +20,11 @@ class ProviderClass extends EventEmitter { */ sendMessage = async (userId, message) => { - if (NODE_ENV !== 'production') - console.log('[sendMessage]', { userId, message }) + if (NODE_ENV !== 'production') console.log('[sendMessage]', { userId, message }) return message } + + getInstance = () => this.vendor } module.exports = ProviderClass diff --git a/packages/bot/tests/bot.class.test.js b/packages/bot/tests/bot.class.test.js index d74fdad..4db4ca8 100644 --- a/packages/bot/tests/bot.class.test.js +++ b/packages/bot/tests/bot.class.test.js @@ -2,13 +2,7 @@ const { test } = require('uvu') const assert = require('uvu/assert') const FlowClass = require('../io/flow.class') const MockProvider = require('../../../__mocks__/mock.provider') -const { - createBot, - CoreClass, - createFlow, - createProvider, - ProviderClass, -} = require('../index') +const { createBot, CoreClass, createFlow, createProvider, ProviderClass } = require('../index') class MockFlow { allCallbacks = { ref: () => 1 } @@ -100,20 +94,13 @@ test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => { await createBot(setting) /// Escuchamos eventos - mockProvider.on( - 'require_action', - (r) => (responseEvents['require_action'] = r) - ) + mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r)) mockProvider.on('ready', (r) => (responseEvents['ready'] = r)) mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r)) mockProvider.on('message', (r) => (responseEvents['message'] = r)) /// Emitimos eventos - mockProvider.delaySendMessage( - 0, - 'require_action', - MOCK_EVENTS.require_action - ) + mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action) mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready) mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure) mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message) @@ -121,21 +108,12 @@ test(`[Bot] Eventos 'require_action,ready,auth_failure,message '`, async () => { await delay(0) /// Testeamos eventos - assert.is( - JSON.stringify(responseEvents.require_action), - JSON.stringify(MOCK_EVENTS.require_action) - ) + assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action)) assert.is(responseEvents.ready, MOCK_EVENTS.ready) - assert.is( - JSON.stringify(responseEvents.auth_failure), - JSON.stringify(MOCK_EVENTS.auth_failure) - ) + assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure)) - assert.is( - JSON.stringify(responseEvents.message), - JSON.stringify(MOCK_EVENTS.message) - ) + assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message)) }) test(`[Bot] Probando Flujos Internos`, async () => { @@ -166,20 +144,13 @@ test(`[Bot] Probando Flujos Internos`, async () => { await createBot(setting) /// Escuchamos eventos - mockProvider.on( - 'require_action', - (r) => (responseEvents['require_action'] = r) - ) + mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r)) mockProvider.on('ready', (r) => (responseEvents['ready'] = r)) mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r)) mockProvider.on('message', (r) => (responseEvents['message'] = r)) /// Emitimos eventos - mockProvider.delaySendMessage( - 0, - 'require_action', - MOCK_EVENTS.require_action - ) + mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action) mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready) mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure) mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message) @@ -187,21 +158,12 @@ test(`[Bot] Probando Flujos Internos`, async () => { await delay(0) /// Testeamos eventos - assert.is( - JSON.stringify(responseEvents.require_action), - JSON.stringify(MOCK_EVENTS.require_action) - ) + assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action)) assert.is(responseEvents.ready, MOCK_EVENTS.ready) - assert.is( - JSON.stringify(responseEvents.auth_failure), - JSON.stringify(MOCK_EVENTS.auth_failure) - ) + assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure)) - assert.is( - JSON.stringify(responseEvents.message), - JSON.stringify(MOCK_EVENTS.message) - ) + assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message)) }) test(`[Bot] Probando Flujos Nested`, async () => { @@ -234,20 +196,13 @@ test(`[Bot] Probando Flujos Nested`, async () => { botInstance.sendProviderAndSave('xxxxx', 'xxxxx') botInstance.continue('xxxxx', 'xxxxx') /// Escuchamos eventos - mockProvider.on( - 'require_action', - (r) => (responseEvents['require_action'] = r) - ) + mockProvider.on('require_action', (r) => (responseEvents['require_action'] = r)) mockProvider.on('ready', (r) => (responseEvents['ready'] = r)) mockProvider.on('auth_failure', (r) => (responseEvents['auth_failure'] = r)) mockProvider.on('message', (r) => (responseEvents['message'] = r)) /// Emitimos eventos - mockProvider.delaySendMessage( - 0, - 'require_action', - MOCK_EVENTS.require_action - ) + mockProvider.delaySendMessage(0, 'require_action', MOCK_EVENTS.require_action) mockProvider.delaySendMessage(0, 'ready', MOCK_EVENTS.ready) mockProvider.delaySendMessage(0, 'auth_failure', MOCK_EVENTS.auth_failure) mockProvider.delaySendMessage(0, 'message', MOCK_EVENTS.message) @@ -255,21 +210,12 @@ test(`[Bot] Probando Flujos Nested`, async () => { await delay(0) /// Testeamos eventos - assert.is( - JSON.stringify(responseEvents.require_action), - JSON.stringify(MOCK_EVENTS.require_action) - ) + assert.is(JSON.stringify(responseEvents.require_action), JSON.stringify(MOCK_EVENTS.require_action)) assert.is(responseEvents.ready, MOCK_EVENTS.ready) - assert.is( - JSON.stringify(responseEvents.auth_failure), - JSON.stringify(MOCK_EVENTS.auth_failure) - ) + assert.is(JSON.stringify(responseEvents.auth_failure), JSON.stringify(MOCK_EVENTS.auth_failure)) - assert.is( - JSON.stringify(responseEvents.message), - JSON.stringify(MOCK_EVENTS.message) - ) + assert.is(JSON.stringify(responseEvents.message), JSON.stringify(MOCK_EVENTS.message)) }) test.run() diff --git a/packages/bot/tests/methods.test.js b/packages/bot/tests/methods.test.js index 10b0977..f030731 100644 --- a/packages/bot/tests/methods.test.js +++ b/packages/bot/tests/methods.test.js @@ -35,10 +35,7 @@ test('Debere probar toSerialize', () => { const ARRANGE = { keyword: ['hola!', 'ole'], } - const MAIN_CTX = addKeyword(ARRANGE.keyword) - .addAnswer('Segundo!') - .addAnswer('Segundo!') - .toJson() + const MAIN_CTX = addKeyword(ARRANGE.keyword).addAnswer('Segundo!').addAnswer('Segundo!').toJson() const [ANSWER_A] = MAIN_CTX @@ -71,9 +68,7 @@ test('Debere probar la anidación', () => { answer_A: 'Bienvenido', answer_B: 'Continuar', } - const MAIN_CTX = addKeyword(ARRANGE.keyword) - .addAnswer(ARRANGE.answer_A) - .addAnswer(ARRANGE.answer_B) + const MAIN_CTX = addKeyword(ARRANGE.keyword).addAnswer(ARRANGE.answer_A).addAnswer(ARRANGE.answer_B) assert.is(MAIN_CTX.ctx.answer, ARRANGE.answer_B) }) @@ -107,10 +102,7 @@ test('Debere probar error las addAnswer', () => { }) test('Obtener toJson', () => { - const [ctxA, ctxB, ctxC] = addKeyword('hola') - .addAnswer('pera!') - .addAnswer('chao') - .toJson() + const [ctxA, ctxB, ctxC] = addKeyword('hola').addAnswer('pera!').addAnswer('chao').toJson() assert.is(ctxA.keyword, 'hola') assert.match(ctxA.ref, /^key_/) diff --git a/packages/bot/utils/delay.js b/packages/bot/utils/delay.js index 021fafe..a6534c0 100644 --- a/packages/bot/utils/delay.js +++ b/packages/bot/utils/delay.js @@ -1,4 +1,3 @@ -const delay = (miliseconds) => - new Promise((res) => setTimeout(res, miliseconds)) +const delay = (miliseconds) => new Promise((res) => setTimeout(res, miliseconds)) module.exports = { delay } diff --git a/packages/bot/utils/flattener.js b/packages/bot/utils/flattener.js index 875736d..ddc823f 100644 --- a/packages/bot/utils/flattener.js +++ b/packages/bot/utils/flattener.js @@ -3,9 +3,7 @@ const flatObject = (listArray = []) => { if (!listArray.length) return {} - const cbNestedObj = cbNestedList - .map(({ ctx }) => ctx?.callbacks) - .filter((i) => !!i) + const cbNestedObj = cbNestedList.map(({ ctx }) => ctx?.callbacks).filter((i) => !!i) const queueCb = cbNestedObj.reduce((acc, current) => { const getKeys = Object.keys(current) const parse = getKeys.map((icb, i) => ({ diff --git a/packages/bot/utils/hash.js b/packages/bot/utils/hash.js index 84a25db..6902d58 100644 --- a/packages/bot/utils/hash.js +++ b/packages/bot/utils/hash.js @@ -16,9 +16,6 @@ const generateRef = (prefix = false) => { * @returns */ const generateRefSerialize = ({ index, answer, keyword }) => - crypto - .createHash('md5') - .update(JSON.stringify({ index, answer, keyword })) - .digest('hex') + crypto.createHash('md5').update(JSON.stringify({ index, answer, keyword })).digest('hex') module.exports = { generateRef, generateRefSerialize } diff --git a/packages/bot/utils/interactive.js b/packages/bot/utils/interactive.js index c317a7f..44905cf 100644 --- a/packages/bot/utils/interactive.js +++ b/packages/bot/utils/interactive.js @@ -4,9 +4,7 @@ const printer = (message, title) => { if (NODE_ENV !== 'test') { // console.clear() if (title) console.log(bgRed(`${title}`)) - console.log( - yellow(Array.isArray(message) ? message.join('\n') : message) - ) + console.log(yellow(Array.isArray(message) ? message.join('\n') : message)) console.log(``) } } diff --git a/packages/cli/check/index.js b/packages/cli/check/index.js index 454f67c..5befb8a 100644 --- a/packages/cli/check/index.js +++ b/packages/cli/check/index.js @@ -5,15 +5,9 @@ const checkNodeVersion = () => { return new Promise((resolve, reject) => { console.log(bgCyan('🚀 Revisando tu Node.js')) const version = process.version - const majorVersion = parseInt( - version.replace('v', '').split('.').shift() - ) + const majorVersion = parseInt(version.replace('v', '').split('.').shift()) if (majorVersion < 16) { - console.error( - red( - `🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}` - ) - ) + console.error(red(`🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`)) console.log(``) reject('ERROR_NODE') } diff --git a/packages/cli/clean/index.js b/packages/cli/clean/index.js index 6b7f6fd..60b8092 100644 --- a/packages/cli/clean/index.js +++ b/packages/cli/clean/index.js @@ -2,10 +2,7 @@ const rimraf = require('rimraf') const { yellow } = require('kleur') const { join } = require('path') -const PATH_WW = [ - join(process.cwd(), '.wwebjs_auth'), - join(process.cwd(), 'session.json'), -] +const PATH_WW = [join(process.cwd(), '.wwebjs_auth'), join(process.cwd(), 'session.json')] const cleanSession = () => { const queue = [] diff --git a/packages/cli/configuration/index.js b/packages/cli/configuration/index.js index 50565d9..2ce6077 100644 --- a/packages/cli/configuration/index.js +++ b/packages/cli/configuration/index.js @@ -23,11 +23,7 @@ const JSON_TEMPLATE = { const PATH_CONFIG = join(process.cwd(), 'config.json') const jsonConfig = () => { - return writeFile( - PATH_CONFIG, - JSON.stringify(JSON_TEMPLATE, null, 2), - 'utf-8' - ) + return writeFile(PATH_CONFIG, JSON.stringify(JSON_TEMPLATE, null, 2), 'utf-8') } module.exports = { jsonConfig } diff --git a/packages/cli/install/tool.js b/packages/cli/install/tool.js index 8095cd0..a74cec6 100644 --- a/packages/cli/install/tool.js +++ b/packages/cli/install/tool.js @@ -20,13 +20,9 @@ const installDeps = (pkgManager, packageList) => { const installSingle = (pkgInstall) => () => { new Promise((resolve) => { try { - childProcess = spawn( - pkgManager, - [PKG_OPTION[pkgManager], pkgInstall], - { - stdio: 'inherit', - } - ) + childProcess = spawn(pkgManager, [PKG_OPTION[pkgManager], pkgInstall], { + stdio: 'inherit', + }) childProcess.on('error', (e) => { console.error(e) diff --git a/packages/cli/interactive/index.js b/packages/cli/interactive/index.js index 53cc885..d65ca19 100644 --- a/packages/cli/interactive/index.js +++ b/packages/cli/interactive/index.js @@ -30,9 +30,7 @@ const startInteractive = async () => { await nextSteps() } catch (e) { console.error(bgRed(`Ups! 🙄 algo no va bien.`)) - console.error( - bgRed(`Revisa los requerimientos minimos en la documentacion`) - ) + console.error(bgRed(`Revisa los requerimientos minimos en la documentacion`)) } } @@ -82,8 +80,7 @@ const nextSteps = async () => { const { outDir = '', providerDb = [], providerWs = [] } = response const createApp = async (templateName = null) => { - if (!templateName) - throw new Error('TEMPLATE_NAME_INVALID: ', templateName) + if (!templateName) throw new Error('TEMPLATE_NAME_INVALID: ', templateName) const possiblesPath = [ join(__dirname, '..', '..', 'starters', 'apps', templateName), @@ -115,11 +112,7 @@ const nextSteps = async () => { const vendorProvider = async () => { const [answer] = providerWs if (!providerWs.length) { - console.log( - red( - `Debes seleccionar un proveedor de whatsapp. Tecla [Space] para seleccionar` - ) - ) + console.log(red(`Debes seleccionar un proveedor de whatsapp. Tecla [Space] para seleccionar`)) process.exit(1) } return answer @@ -132,11 +125,7 @@ const nextSteps = async () => { const dbProvider = async () => { const [answer] = providerDb if (!providerDb.length) { - console.log( - red( - `Debes seleccionar un proveedor de base de datos. Tecla [Space] para seleccionar` - ) - ) + console.log(red(`Debes seleccionar un proveedor de base de datos. Tecla [Space] para seleccionar`)) process.exit(1) } return answer diff --git a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js index 2d0ebd2..6be4f9e 100644 --- a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js +++ b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js @@ -38,10 +38,8 @@ class DialogFlowCXContext extends CoreClass { * */ } - if (!this.optionsDX.location.length) - throw new Error('LOCATION_NO_ENCONTRADO') - if (!this.optionsDX.agentId.length) - throw new Error('AGENTID_NO_ENCONTRADO') + if (!this.optionsDX.location.length) throw new Error('LOCATION_NO_ENCONTRADO') + if (!this.optionsDX.agentId.length) throw new Error('AGENTID_NO_ENCONTRADO') const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8') const { project_id, private_key, client_email } = JSON.parse(rawJson) @@ -86,9 +84,7 @@ class DialogFlowCXContext extends CoreClass { }, } - const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [ - null, - ] + const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [null] const listMessages = single.queryResult.responseMessages.map((res) => { if (res.message == 'text') { @@ -96,17 +92,11 @@ class DialogFlowCXContext extends CoreClass { } if (res.message == 'payload') { - const { - media = null, - buttons = [], - answer = '', - } = res.payload.fields - const buttonsArray = buttons?.listValue?.values?.map( - (btnValue) => { - const { stringValue } = btnValue.structValue.fields.body - return { body: stringValue } - } - ) + const { media = null, buttons = [], answer = '' } = res.payload.fields + const buttonsArray = buttons?.listValue?.values?.map((btnValue) => { + const { stringValue } = btnValue.structValue.fields.body + return { body: stringValue } + }) return { answer: answer?.stringValue, options: { diff --git a/packages/contexts/src/dialogflow-cx/index.js b/packages/contexts/src/dialogflow-cx/index.js index 2a561c4..13c479e 100644 --- a/packages/contexts/src/dialogflow-cx/index.js +++ b/packages/contexts/src/dialogflow-cx/index.js @@ -5,8 +5,7 @@ const DialogCXFlowClass = require('./dialogflow-cx.class') * @param {*} args * @returns */ -const createBotDialog = async ({ database, provider }, _options) => - new DialogCXFlowClass(database, provider, _options) +const createBotDialog = async ({ database, provider }, _options) => new DialogCXFlowClass(database, provider, _options) module.exports = { createBotDialog, diff --git a/packages/contexts/src/dialogflow/dialogflow.class.js b/packages/contexts/src/dialogflow/dialogflow.class.js index 6a7cda0..33df66b 100644 --- a/packages/contexts/src/dialogflow/dialogflow.class.js +++ b/packages/contexts/src/dialogflow/dialogflow.class.js @@ -65,10 +65,7 @@ class DialogFlowContext extends CoreClass { * para evitar este problema. * https://github.com/codigoencasa/bot-whatsapp/pull/140 */ - const session = this.sessionClient.projectAgentSessionPath( - this.projectId, - from - ) + const session = this.sessionClient.projectAgentSessionPath(this.projectId, from) const reqDialog = { session, queryInput: { @@ -79,15 +76,11 @@ class DialogFlowContext extends CoreClass { }, } - const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [ - null, - ] + const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [null] const { queryResult } = single - const msgPayload = queryResult?.fulfillmentMessages?.find( - (a) => a.message === 'payload' - ) + const msgPayload = queryResult?.fulfillmentMessages?.find((a) => a.message === 'payload') // Revisamos si el dialogFlow tiene multimedia if (msgPayload && msgPayload?.payload) { diff --git a/packages/contexts/src/dialogflow/index.js b/packages/contexts/src/dialogflow/index.js index e988f50..377fd88 100644 --- a/packages/contexts/src/dialogflow/index.js +++ b/packages/contexts/src/dialogflow/index.js @@ -5,8 +5,7 @@ const DialogFlowClass = require('./dialogflow.class') * @param {*} args * @returns */ -const createBotDialog = async ({ database, provider }) => - new DialogFlowClass(database, provider) +const createBotDialog = async ({ database, provider }) => new DialogFlowClass(database, provider) module.exports = { createBotDialog, diff --git a/packages/contexts/src/mock/index.js b/packages/contexts/src/mock/index.js index b609be5..4e2e10f 100644 --- a/packages/contexts/src/mock/index.js +++ b/packages/contexts/src/mock/index.js @@ -5,8 +5,7 @@ const MockClass = require('./mock.class') * @param {*} args * @returns */ -const createBotMock = async ({ database, provider }) => - new MockClass(database, provider) +const createBotMock = async ({ database, provider }) => new MockClass(database, provider) module.exports = { createBotMock, diff --git a/packages/database/src/mock/index.js b/packages/database/src/mock/index.js index 4c07c03..2ab91a0 100644 --- a/packages/database/src/mock/index.js +++ b/packages/database/src/mock/index.js @@ -10,7 +10,10 @@ class MockDatabase { constructor() {} getPrevByNumber = (from) => { - const history = this.listHistory.slice().reverse() + const history = this.listHistory + .slice() + .reverse() + .filter((i) => !!i.keyword) return history.find((a) => a.from === from) } diff --git a/packages/database/src/mongo/index.js b/packages/database/src/mongo/index.js index 6af68f0..9ea3fa5 100644 --- a/packages/database/src/mongo/index.js +++ b/packages/database/src/mongo/index.js @@ -24,12 +24,7 @@ class MongoAdapter { } getPrevByNumber = async (from) => { - const result = await this.db - .collection('history') - .find({ from }) - .sort({ _id: -1 }) - .limit(1) - .toArray() + const result = await this.db.collection('history').find({ from }).sort({ _id: -1 }).limit(1).toArray() return result[0] } diff --git a/packages/database/src/mysql/index.js b/packages/database/src/mysql/index.js index e01b55a..0beea56 100644 --- a/packages/database/src/mysql/index.js +++ b/packages/database/src/mysql/index.js @@ -46,18 +46,8 @@ class MyslAdapter { }) save = (ctx) => { - const values = [ - [ - ctx.ref, - ctx.keyword, - ctx.answer, - ctx.refSerialize, - ctx.from, - JSON.stringify(ctx.options), - ], - ] - const sql = - 'INSERT INTO history (ref, keyword, answer, refSerialize, phone, options ) values ?' + const values = [[ctx.ref, ctx.keyword, ctx.answer, ctx.refSerialize, ctx.from, JSON.stringify(ctx.options)]] + const sql = 'INSERT INTO history (ref, keyword, answer, refSerialize, phone, options ) values ?' this.db.query(sql, [values], (err) => { if (err) throw err @@ -71,14 +61,14 @@ class MyslAdapter { const tableName = 'history' const sql = `CREATE TABLE ${tableName} - (id INT AUTO_INCREMENT PRIMARY KEY, - ref varchar(255) NOT NULL, - keyword varchar(255) NOT NULL, - answer longtext NOT NULL, - refSerialize varchar(255) NOT NULL, - phone varchar(255) NOT NULL, - options longtext NOT NULL - )` + (id INT AUTO_INCREMENT PRIMARY KEY, + ref varchar(255) NOT NULL, + keyword varchar(255) NOT NULL, + answer longtext NOT NULL, + refSerialize varchar(255) NOT NULL, + phone varchar(255) NOT NULL, + options longtext NOT NULL) + CHARACTER SET utf8mb4 COLLATE utf8mb4_General_ci` this.db.query(sql, (err) => { if (err) throw err diff --git a/packages/docs/src/assets/fonts/generated/IBMPlexMono-Regular.module.css b/packages/docs/src/assets/fonts/generated/IBMPlexMono-Regular.module.css index deddf7c..f0ab1c0 100644 --- a/packages/docs/src/assets/fonts/generated/IBMPlexMono-Regular.module.css +++ b/packages/docs/src/assets/fonts/generated/IBMPlexMono-Regular.module.css @@ -8,6 +8,5 @@ font-family: IBMPlexMono-Regular; src: url(IBMPlexMono-Regular-subset.woff2) format('woff2'), url(IBMPlexMono-Regular-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+2C, U+2E, U+41-43, U+46, U+49, U+4B-4F, U+53-55, U+58, - U+61-65, U+67-69, U+6C-76; + unicode-range: U+20, U+2C, U+2E, U+41-43, U+46, U+49, U+4B-4F, U+53-55, U+58, U+61-65, U+67-69, U+6C-76; } diff --git a/packages/docs/src/assets/fonts/generated/IBMPlexMono-SemiBold.module.css b/packages/docs/src/assets/fonts/generated/IBMPlexMono-SemiBold.module.css index e2fdf72..6b47965 100644 --- a/packages/docs/src/assets/fonts/generated/IBMPlexMono-SemiBold.module.css +++ b/packages/docs/src/assets/fonts/generated/IBMPlexMono-SemiBold.module.css @@ -8,6 +8,6 @@ font-family: IBMPlexMono-SemiBold; src: url(IBMPlexMono-SemiBold-subset.woff2) format('woff2'), url(IBMPlexMono-SemiBold-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+24, U+2E, U+30, U+38, U+39, U+41, U+42, U+44, U+47, - U+4E, U+4F, U+52-55, U+57, U+59, U+65, U+68, U+6F, U+72, U+74; + unicode-range: U+20, U+24, U+2E, U+30, U+38, U+39, U+41, U+42, U+44, U+47, U+4E, U+4F, U+52-55, U+57, U+59, U+65, + U+68, U+6F, U+72, U+74; } diff --git a/packages/docs/src/assets/fonts/generated/Pally-Variable.module.css b/packages/docs/src/assets/fonts/generated/Pally-Variable.module.css index 74aa400..e899bbf 100644 --- a/packages/docs/src/assets/fonts/generated/Pally-Variable.module.css +++ b/packages/docs/src/assets/fonts/generated/Pally-Variable.module.css @@ -6,9 +6,8 @@ @font-face { font-family: Pally-Variable; - src: url(Pally-Variable-subset.woff2) format('woff2'), - url(Pally-Variable-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+24, U+2C, U+2E, U+30, U+33, U+39, U+41-43, U+46, - U+49-4D, U+53, U+55, U+58, U+61-65, U+67-69, U+6B-77, U+79; + src: url(Pally-Variable-subset.woff2) format('woff2'), url(Pally-Variable-subset.zopfli.woff) format('woff'); + unicode-range: U+20, U+24, U+2C, U+2E, U+30, U+33, U+39, U+41-43, U+46, U+49-4D, U+53, U+55, U+58, U+61-65, U+67-69, + U+6B-77, U+79; font-weight: 400 700; } diff --git a/packages/docs/src/assets/fonts/generated/SourceSerifPro-Regular.module.css b/packages/docs/src/assets/fonts/generated/SourceSerifPro-Regular.module.css index b1a323f..a491d8c 100644 --- a/packages/docs/src/assets/fonts/generated/SourceSerifPro-Regular.module.css +++ b/packages/docs/src/assets/fonts/generated/SourceSerifPro-Regular.module.css @@ -8,6 +8,5 @@ font-family: SourceSerifPro-Regular; src: url(SourceSerifPro-Regular-subset.woff2) format('woff2'), url(SourceSerifPro-Regular-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+2C, U+2E, U+41-44, U+49, U+4A, U+4C, U+53, U+55, - U+61-65, U+67-69, U+6B-76, U+79; + unicode-range: U+20, U+2C, U+2E, U+41-44, U+49, U+4A, U+4C, U+53, U+55, U+61-65, U+67-69, U+6B-76, U+79; } diff --git a/packages/docs/src/assets/fonts/generated/Synonym-Variable.module.css b/packages/docs/src/assets/fonts/generated/Synonym-Variable.module.css index b834dbb..00cb8df 100644 --- a/packages/docs/src/assets/fonts/generated/Synonym-Variable.module.css +++ b/packages/docs/src/assets/fonts/generated/Synonym-Variable.module.css @@ -6,9 +6,8 @@ @font-face { font-family: Synonym-Variable; - src: url(Synonym-Variable-subset.woff2) format('woff2'), - url(Synonym-Variable-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+24, U+2C, U+2E, U+30, U+33, U+35, U+41-44, U+46, U+47, - U+49, U+4B-4F, U+53-55, U+57-59, U+61, U+63-65, U+67-69, U+6C-76; + src: url(Synonym-Variable-subset.woff2) format('woff2'), url(Synonym-Variable-subset.zopfli.woff) format('woff'); + unicode-range: U+20, U+24, U+2C, U+2E, U+30, U+33, U+35, U+41-44, U+46, U+47, U+49, U+4B-4F, U+53-55, U+57-59, U+61, + U+63-65, U+67-69, U+6C-76; font-weight: 400 700; } diff --git a/packages/docs/src/assets/fonts/generated/TenorSans-Regular.module.css b/packages/docs/src/assets/fonts/generated/TenorSans-Regular.module.css index 819cfa3..b3dbfc6 100644 --- a/packages/docs/src/assets/fonts/generated/TenorSans-Regular.module.css +++ b/packages/docs/src/assets/fonts/generated/TenorSans-Regular.module.css @@ -6,8 +6,7 @@ @font-face { font-family: TenorSans-Regular; - src: url(TenorSans-Regular-subset.woff2) format('woff2'), - url(TenorSans-Regular-subset.zopfli.woff) format('woff'); - unicode-range: U+20, U+24, U+2E, U+30, U+36, U+46, U+49, U+4A, U+53, U+54, - U+61, U+63, U+65, U+69, U+6B, U+6E, U+6F, U+72-75, U+79; + src: url(TenorSans-Regular-subset.woff2) format('woff2'), url(TenorSans-Regular-subset.zopfli.woff) format('woff'); + unicode-range: U+20, U+24, U+2E, U+30, U+36, U+46, U+49, U+4A, U+53, U+54, U+61, U+63, U+65, U+69, U+6B, U+6E, U+6F, + U+72-75, U+79; } diff --git a/packages/docs/src/assets/images/digital-ocean.png b/packages/docs/src/assets/images/digital-ocean.png new file mode 100644 index 0000000..0d0163b Binary files /dev/null and b/packages/docs/src/assets/images/digital-ocean.png differ diff --git a/packages/docs/src/components/atoms/DigitalOcean.tsx b/packages/docs/src/components/atoms/DigitalOcean.tsx new file mode 100644 index 0000000..fc97537 --- /dev/null +++ b/packages/docs/src/components/atoms/DigitalOcean.tsx @@ -0,0 +1,189 @@ +export const DigitalOcean = () => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +) diff --git a/packages/docs/src/components/atoms/Logo.tsx b/packages/docs/src/components/atoms/Logo.tsx index b5e1199..97a7fa1 100644 --- a/packages/docs/src/components/atoms/Logo.tsx +++ b/packages/docs/src/components/atoms/Logo.tsx @@ -5,14 +5,7 @@ import logoSrc from '~/assets/images/chatbot-whatsapp.png?width=64&height=64&png export default component$(() => ( - Qwind Logo + Qwind Logo Chatbot )) diff --git a/packages/docs/src/components/atoms/Netlify.tsx b/packages/docs/src/components/atoms/Netlify.tsx index 9047eab..3090113 100644 --- a/packages/docs/src/components/atoms/Netlify.tsx +++ b/packages/docs/src/components/atoms/Netlify.tsx @@ -1,11 +1,5 @@ export const Netlify = () => ( - + { {head.title} - + {head.meta.map((m) => ( diff --git a/packages/docs/src/components/core/Social.tsx b/packages/docs/src/components/core/Social.tsx index 43d6ac2..f620441 100644 --- a/packages/docs/src/components/core/Social.tsx +++ b/packages/docs/src/components/core/Social.tsx @@ -34,14 +34,8 @@ export const Social = () => { content="https://campaign.codigoencasa.com" /> */} - - + + @@ -52,10 +46,7 @@ export const Social = () => { name="twitter:title" content="💻 Conviértete en un Programador Backend aprendiendo todo de Cloud y Nodejs" /> - + ) } diff --git a/packages/docs/src/components/core/ToggleMenu.tsx b/packages/docs/src/components/core/ToggleMenu.tsx index 51779fc..567fd46 100644 --- a/packages/docs/src/components/core/ToggleMenu.tsx +++ b/packages/docs/src/components/core/ToggleMenu.tsx @@ -27,9 +27,7 @@ export default component$((props: ItemProps) => { // TODO: document.body.classList.toggle('overflow-hidden') document.getElementById('header')?.classList.toggle('h-screen') - document - .querySelector('#header nav') - ?.classList.toggle('hidden') + document.querySelector('#header nav')?.classList.toggle('hidden') }} > diff --git a/packages/docs/src/components/core/ToggleTheme.tsx b/packages/docs/src/components/core/ToggleTheme.tsx index 00de98e..6ef1196 100644 --- a/packages/docs/src/components/core/ToggleTheme.tsx +++ b/packages/docs/src/components/core/ToggleTheme.tsx @@ -10,16 +10,13 @@ interface ItemProps { export default component$((props: ItemProps) => { const { iconClass } = props const store = useStore({ - theme: - (typeof window !== 'undefined' && window?.localStorage?.theme) || - undefined, + theme: (typeof window !== 'undefined' && window?.localStorage?.theme) || undefined, }) useClientEffect$(() => { store.theme = window.localStorage.theme === 'dark' || - (!('theme' in window.localStorage) && - window.matchMedia('(prefers-color-scheme: dark)').matches) + (!('theme' in window.localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light' }) @@ -42,11 +39,7 @@ export default component$((props: ItemProps) => { } }} > - {store.theme == 'dark' ? ( - - ) : ( - - )} + {store.theme == 'dark' ? : } ) }) diff --git a/packages/docs/src/components/icons/IconArrowDownRight.tsx b/packages/docs/src/components/icons/IconArrowDownRight.tsx index 8adfab2..5fd5087 100644 --- a/packages/docs/src/components/icons/IconArrowDownRight.tsx +++ b/packages/docs/src/components/icons/IconArrowDownRight.tsx @@ -7,9 +7,7 @@ export const IconArrowDownRight = (props: ItemProps) => { return ( { diff --git a/packages/docs/src/components/icons/IconMoon.tsx b/packages/docs/src/components/icons/IconMoon.tsx index fa65ec0..296951f 100644 --- a/packages/docs/src/components/icons/IconMoon.tsx +++ b/packages/docs/src/components/icons/IconMoon.tsx @@ -7,9 +7,7 @@ export const IconMoon = (props: ItemProps) => { return (
-
- {props.user.login} -
+
{props.user.login}
diff --git a/packages/docs/src/components/widgets/Collaborators.tsx b/packages/docs/src/components/widgets/Collaborators.tsx index 23f2844..cfd2d24 100644 --- a/packages/docs/src/components/widgets/Collaborators.tsx +++ b/packages/docs/src/components/widgets/Collaborators.tsx @@ -32,8 +32,7 @@ export default component$((props: { users: User[] }) => { Super estrellas

- Todo es posible gracias a el mayor recursos de todos, el - recurso humano. Tu tambien puedes{' '} + Todo es posible gracias a el mayor recursos de todos, el recurso humano. Tu tambien puedes{' '} formar parte diff --git a/packages/docs/src/components/widgets/ExtraBar.tsx b/packages/docs/src/components/widgets/ExtraBar.tsx index fda47b2..0d9ae34 100644 --- a/packages/docs/src/components/widgets/ExtraBar.tsx +++ b/packages/docs/src/components/widgets/ExtraBar.tsx @@ -15,8 +15,8 @@ export default component$(() => { 📄 Editar esta pagina

- Forma parte de esta comunidad mejorando la documentación - siente libre de poder agregar o editar lo que quieras + Forma parte de esta comunidad mejorando la documentación siente libre de poder agregar o editar + lo que quieras

diff --git a/packages/docs/src/components/widgets/FAQs.tsx b/packages/docs/src/components/widgets/FAQs.tsx index 28aa2c1..5834e24 100644 --- a/packages/docs/src/components/widgets/FAQs.tsx +++ b/packages/docs/src/components/widgets/FAQs.tsx @@ -56,13 +56,9 @@ export default component$(() => { {question} - {answer - .split('\n\n') - .map((paragraph) => ( -

- {paragraph} -

- ))} + {answer.split('\n\n').map((paragraph) => ( +

{paragraph}

+ ))} ))} diff --git a/packages/docs/src/components/widgets/Features.tsx b/packages/docs/src/components/widgets/Features.tsx index 4888086..ddd3dc8 100644 --- a/packages/docs/src/components/widgets/Features.tsx +++ b/packages/docs/src/components/widgets/Features.tsx @@ -50,13 +50,11 @@ export default component$(() => { Caracteristicas

- Nuestras principales{' '} - funciones + Nuestras principales funciones

- El secreto es mantener los procesos repetitivos en - procesos automatizados simples, por eso te mostramos en - que destacamos. + El secreto es mantener los procesos repetitivos en procesos automatizados simples, por eso te + mostramos en que destacamos.

@@ -70,12 +68,8 @@ export default component$(() => {
-

- {title} -

-

- {description} -

+

{title}

+

{description}

))} diff --git a/packages/docs/src/components/widgets/Hero.tsx b/packages/docs/src/components/widgets/Hero.tsx index b3761f8..01ee042 100644 --- a/packages/docs/src/components/widgets/Hero.tsx +++ b/packages/docs/src/components/widgets/Hero.tsx @@ -9,36 +9,24 @@ import { src as placeholder } from '~/assets/images/chatbot-whatsapp.png?width=4 export default component$(() => { return ( -
+

- Crear chatbot{' '} - - WhatsApp - - {' '} - en minutos + Crear chatbot WhatsApp + en minutos

- - Con esta libreria,{' '} - + Con esta libreria, - puedes configurar respuestas - automatizadas para preguntas frecuentes + puedes configurar respuestas automatizadas para preguntas frecuentes {' '} - , recibir y responder mensajes de manera - automatizada, y hacer un seguimiento de las - interacciones con los clientes. Además, - nuestro Chatbot se integra fácilmente con - otros sistemas y herramientas que ya esté - utilizando en su negocio. + , recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las + interacciones con los clientes. Además, nuestro Chatbot se integra fácilmente con + otros sistemas y herramientas que ya esté utilizando en su negocio.

@@ -48,10 +36,7 @@ export default component$(() => {
- + Ver documentación { Miembros

- Conviértete en un miembro destacado y forma parte del - proyecto y disfruta de manera adelantada de las - actualizaciones{' '} - + Conviértete en un miembro destacado y forma parte del proyecto y disfruta de manera adelantada + de las actualizaciones{' '} + Únete

diff --git a/packages/docs/src/components/widgets/NavBar.tsx b/packages/docs/src/components/widgets/NavBar.tsx index 56915c9..5b332bc 100644 --- a/packages/docs/src/components/widgets/NavBar.tsx +++ b/packages/docs/src/components/widgets/NavBar.tsx @@ -5,55 +5,45 @@ import { DocumentationCtx } from '~/contexts' /** * options = [] array con la lista de opciones de la documentacion */ -export default component$( - ({ options = [] }: { options: DocumentationCtx[] }) => { - return ( -
- {options.map((item, i) => ( - - ))} -
- ) - } -) +export default component$(({ options = [] }: { options: DocumentationCtx[] }) => { + return ( +
+ {options.map((item, i) => ( + + ))} +
+ ) +}) -export const UlCompoent = component$( - (porps: { title: string; list: { link: string; name: string }[] }) => { - return ( -
    -
  • -
    - {porps.title} -
    - +export const UlCompoent = component$((porps: { title: string; list: { link: string; name: string }[] }) => { + return ( +
      +
    • +
      {porps.title}
      + +
    • +
    + ) +}) + +export const LiComponent = component$((porps: { list: { link: string; name: string }[] }) => { + const location = useLocation() + const currentPage = location.pathname + return ( +
      + {porps.list.map((opt) => ( +
    • + + {opt.name} +
    • -
    - ) - } -) - -export const LiComponent = component$( - (porps: { list: { link: string; name: string }[] }) => { - const location = useLocation() - const currentPage = location.pathname - return ( -
      - {porps.list.map((opt) => ( -
    • - - {opt.name} - -
    • - ))} -
    - ) - } -) + ))} +
+ ) +}) diff --git a/packages/docs/src/components/widgets/Navigation.tsx b/packages/docs/src/components/widgets/Navigation.tsx index 779a787..092ed93 100644 --- a/packages/docs/src/components/widgets/Navigation.tsx +++ b/packages/docs/src/components/widgets/Navigation.tsx @@ -1,74 +1,63 @@ import { component$ } from '@builder.io/qwik' -export const ButtonLink = component$( - (props: { name: string; link: string; direction: 'left' | 'right' }) => { - const ArrowRight = () => ( - - - - ) +export const ButtonLink = component$((props: { name: string; link: string; direction: 'left' | 'right' }) => { + const ArrowRight = () => ( + + + + ) - const ArrowLeft = () => ( - - - - ) + const ArrowLeft = () => ( + + + + ) - return ( - - {props.direction === 'left' ? ( - <> - - {props.name} - - ) : ( - <> - {props.name} - - - )} - - ) - } -) + return ( + + {props.direction === 'left' ? ( + <> + + {props.name} + + ) : ( + <> + {props.name} + + + )} + + ) +}) -export default component$( - (props: { pages: ({ name: string; link: string } | null)[] }) => { - const { pages } = props - return ( -
-
- {pages[0] ? ( - - ) : null} - {pages[1] ? ( - - ) : null} -
+export default component$((props: { pages: ({ name: string; link: string } | null)[] }) => { + const { pages } = props + return ( +
+
+ {pages[0] ? : null} + {pages[1] ? : null}
- ) - } -) +
+ ) +}) diff --git a/packages/docs/src/components/widgets/SearchModal.tsx b/packages/docs/src/components/widgets/SearchModal.tsx new file mode 100644 index 0000000..287a28b --- /dev/null +++ b/packages/docs/src/components/widgets/SearchModal.tsx @@ -0,0 +1,20 @@ +import { component$ } from '@builder.io/qwik' + +export const SearchModal = component$(() => { + // const state = useStore({ + // open: false, + // src: '', + // }) + + return ( +
+
+ +
+
+ ) +}) + +export const SingleModal = component$(() => { + return
Modal singlke
+}) diff --git a/packages/docs/src/components/widgets/SponsorBar.tsx b/packages/docs/src/components/widgets/SponsorBar.tsx index c0d8183..f355691 100644 --- a/packages/docs/src/components/widgets/SponsorBar.tsx +++ b/packages/docs/src/components/widgets/SponsorBar.tsx @@ -7,6 +7,8 @@ import { src as qwik } from '~/assets/images/qwik.png?width=100&metadata' import { src as leanga } from '~/assets/images/leanga.png?width=40&metadata' // @ts-ignore import { src as netlify } from '~/assets/images/full-logo-light.png?width=100&metadata' +// @ts-ignore +import { src as digitalOcean } from '~/assets/images/digital-ocean.png?width=100&metadata' /** * options = [] array con la lista de opciones de la documentacion @@ -41,7 +43,20 @@ export default component$(() => { Qwind Hero Image (Cool dog) + + + +
  • + + + DigitalOcean diff --git a/packages/docs/src/components/widgets/Stats.tsx b/packages/docs/src/components/widgets/Stats.tsx index c4dc31a..0721ba7 100644 --- a/packages/docs/src/components/widgets/Stats.tsx +++ b/packages/docs/src/components/widgets/Stats.tsx @@ -5,33 +5,25 @@ export default component$(() => {
    -
    - 132K -
    +
    132K

    Downloads

    -
    - 24.8K -
    +
    24.8K

    Stars

    -
    - 10.3K -
    +
    10.3K

    Forks

    -
    - 48.4K -
    +
    48.4K

    Users

    diff --git a/packages/docs/src/contexts/index.tsx b/packages/docs/src/contexts/index.tsx index 7282539..ca33495 100644 --- a/packages/docs/src/contexts/index.tsx +++ b/packages/docs/src/contexts/index.tsx @@ -13,5 +13,4 @@ export interface User { avatar_url: string } -export const GlobalStore = - createContext('documentation-site') +export const GlobalStore = createContext('documentation-site') diff --git a/packages/docs/src/root.tsx b/packages/docs/src/root.tsx index 2cddda0..61c3906 100644 --- a/packages/docs/src/root.tsx +++ b/packages/docs/src/root.tsx @@ -1,14 +1,5 @@ -import { - component$, - useContextProvider, - useStore, - useStyles$, -} from '@builder.io/qwik' -import { - QwikCityProvider, - RouterOutlet, - ServiceWorkerRegister, -} from '@builder.io/qwik-city' +import { component$, useContextProvider, useStore, useStyles$ } from '@builder.io/qwik' +import { QwikCityProvider, RouterOutlet, ServiceWorkerRegister } from '@builder.io/qwik-city' import { RouterHead } from '~/components/core/RouterHead' import { DarkThemeLauncher } from '~/components/core/DarkThemeLauncher' @@ -78,10 +69,7 @@ export default component$(() => { - + diff --git a/packages/docs/src/routes/docs/database/index.mdx b/packages/docs/src/routes/docs/database/index.mdx index dab499f..01eb796 100644 --- a/packages/docs/src/routes/docs/database/index.mdx +++ b/packages/docs/src/routes/docs/database/index.mdx @@ -4,11 +4,10 @@ import Navigation from '../../../components/widgets/Navigation' # DataBase (Base de datos) - ⚡ Dependiendo del tipo de conector que utlices puede que necesites pasar - algunas configuracion adicional como **user, host, password** para esos - casos te recomendamos guiarte de los - **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** - o si gustas puedes editar esta documentación para ir agregando más info + ⚡ Dependiendo del tipo de conector que utlices puede que necesites pasar algunas configuracion adicional como + **user, host, password** para esos casos te recomendamos guiarte de los + **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** o si gustas puedes editar esta + documentación para ir agregando más info Es la pieza encargada de mantener el **"estado"** de una conversación, para mayor facilidad la libreria te proporcia diferentes conectores que se de adapten mejor a tu desarrollo diff --git a/packages/docs/src/routes/docs/essential/index.mdx b/packages/docs/src/routes/docs/essential/index.mdx index 8187544..0f0dc45 100644 --- a/packages/docs/src/routes/docs/essential/index.mdx +++ b/packages/docs/src/routes/docs/essential/index.mdx @@ -22,12 +22,7 @@ Tan sencillo como decir **palabra/s clave** y **mensaje a responder** Ambos metodos **[addKeyword](https://github.com/codigoencasa/bot-whatsapp/blob/dev/packages/bot/io/methods/addKeyword.js)** y el **[addAnswer](https://github.com/codigoencasa/bot-whatsapp/blob/dev/packages/bot/io/methods/addAnswer.js)** tienen una serie opciones disponibles ```js -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const flowPrincipal = addKeyword(['hola', 'alo']) .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?']) @@ -39,11 +34,10 @@ const flowPrincipal = addKeyword(['hola', 'alo']) ## Provider (Proveedor) - ⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar - algunas configuracion adicional como **token, api, etc.** para esos casos te - recomendamos guiarte de los - **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** - o si gustas puedes editar esta documentación para ir agregando más info + ⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar algunas configuracion adicional como + **token, api, etc.** para esos casos te recomendamos guiarte de los + **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** o si gustas puedes editar esta + documentación para ir agregando más info Es la pieza que conectara tu flujo con Whatsapp. En este chatbot tenemos varios proveedores disponibles la mayoria gratis pero tambien tenemos integracion la api oficial de whatsapp o twilio @@ -71,11 +65,10 @@ Los proveedores disponibles hasta el momento son los siguientes: ## DataBase (Base de datos) - ⚡ Dependiendo del tipo de conector que utlices puede que necesites pasar - algunas configuracion adicional como **user, host, password** para esos - casos te recomendamos guiarte de los - **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** - o si gustas puedes editar esta documentación para ir agregando más info + ⚡ Dependiendo del tipo de conector que utlices puede que necesites pasar algunas configuracion adicional como + **user, host, password** para esos casos te recomendamos guiarte de los + **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** o si gustas puedes editar esta + documentación para ir agregando más info Es la pieza encargada de mantener el **"estado"** de una conversación, para mayor facilidad la libreria te proporcia diferentes conectores que se de adapten mejor a tu desarrollo diff --git a/packages/docs/src/routes/docs/example/index.mdx b/packages/docs/src/routes/docs/example/index.mdx index 8daded3..057fcc6 100644 --- a/packages/docs/src/routes/docs/example/index.mdx +++ b/packages/docs/src/routes/docs/example/index.mdx @@ -5,12 +5,7 @@ import Navigation from '../../../components/widgets/Navigation' Si copias y pegas este codigo y tu entorno de trabajo cumple con todos los requesitos te debe funcionar abajo explico muy por encima ```js -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') const MockAdapter = require('@bot-whatsapp/database/mock') @@ -42,12 +37,7 @@ main() En esta parte solo estamos declaramos las dependencias que vamos a utilizar. Si quieres saber a fondo cada una de las funciones te recomiendo pasarte por la seccion de **[conceptos](/docs/concepts)** ```js -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') const MockAdapter = require('@bot-whatsapp/database/mock') diff --git a/packages/docs/src/routes/docs/flows/index.mdx b/packages/docs/src/routes/docs/flows/index.mdx index 7a2171c..0c2cf0b 100644 --- a/packages/docs/src/routes/docs/flows/index.mdx +++ b/packages/docs/src/routes/docs/flows/index.mdx @@ -9,12 +9,7 @@ Tan sencillo como decir **palabra/s clave** y **mensaje a responder** Ambos metodos **[addKeyword](https://github.com/codigoencasa/bot-whatsapp/blob/dev/packages/bot/io/methods/addKeyword.js)** y el **[addAnswer](https://github.com/codigoencasa/bot-whatsapp/blob/dev/packages/bot/io/methods/addAnswer.js)** tienen una serie opciones disponibles ```js -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const flowPrincipal = addKeyword(['hola', 'alo']) .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?']) @@ -23,6 +18,26 @@ const flowPrincipal = addKeyword(['hola', 'alo']) --- +## blackList + +Éste argumento se utiliza para **evitar que el bot se active** cuando los números de la lista activen el bot. +Es importante que el número **vaya acompañado de su prefijo**, en el caso de España "34". + +```js +createBot( + { + flow: adapterFlow, + provider: adapterProvider, + database: adapterDB, + }, + { + blackList: ['34XXXXXXXXX', '34XXXXXXXXX', '34XXXXXXXXX', '34XXXXXXXXX'], + } +) +``` + +--- + ## addKeyword() Esta funcion se utliza para iniciar un flujo de conversion.
    Recibe un `string` o un `array` @@ -55,43 +70,27 @@ Esta funcion se utliza para responder un mensaje despues del `addKeyword()` - delay: 0 (milisegundos) - media: url de imagen - buttons: array `[{body:'Boton1'}, {body:'Boton2'}, {body:'Boton3'}]` -- capture: false (para esperar respuesta) +- capture: true (para esperar respuesta) - child: Objecto tipo flujo o arra de flujos hijos ```js const { addKeyword } = require('@bot-whatsapp/bot') -const flowString = addKeyword('hola').addAnswer( - 'Este mensaje se enviara 1 segundo despues', - { - delay: 1000, - } -) +const flowString = addKeyword('hola').addAnswer('Este mensaje se enviara 1 segundo despues', { + delay: 1000, +}) -const flowString = addKeyword('hola').addAnswer( - 'Este mensaje envia una imagen', - { - media: 'https://i.imgur.com/0HpzsEm.png', - } -) +const flowString = addKeyword('hola').addAnswer('Este mensaje envia una imagen', { + media: 'https://i.imgur.com/0HpzsEm.png', +}) -const flowString = addKeyword('hola').addAnswer( - 'Este mensaje envia tres botones', - { - buttons: [ - { body: 'Boton 1' }, - { body: 'Boton 2' }, - { body: 'Boton 3' }, - ], - } -) +const flowString = addKeyword('hola').addAnswer('Este mensaje envia tres botones', { + buttons: [{ body: 'Boton 1' }, { body: 'Boton 2' }, { body: 'Boton 3' }], +}) -const flowString = addKeyword('hola').addAnswer( - 'Este mensaje espera una respueta del usuario', - { - capture: true, - } -) +const flowString = addKeyword('hola').addAnswer('Este mensaje espera una respueta del usuario', { + capture: true, +}) ``` --- @@ -103,13 +102,9 @@ Este argumento se utiliza para obtener el contexto de la conversación ```js const { addKeyword } = require('@bot-whatsapp/bot') -const flowString = addKeyword('hola').addAnswer( - 'Indica cual es tu email', - null, - (ctx) => { - console.log('👉 Informacion del contexto: ', ctx) - } -) +const flowString = addKeyword('hola').addAnswer('Indica cual es tu email', null, (ctx) => { + console.log('👉 Informacion del contexto: ', ctx) +}) ``` --- @@ -123,13 +118,9 @@ se repetira el mensaje `Indica cual es tu email` ```js const { addKeyword } = require('@bot-whatsapp/bot') -const flowString = addKeyword('hola').addAnswer( - 'Indica cual es tu email', - null, - (ctx, { fallBack }) => { - if (!ctx.body.includes('@')) return fallBack() - } -) +const flowString = addKeyword('hola').addAnswer('Indica cual es tu email', null, (ctx, { fallBack }) => { + if (!ctx.body.includes('@')) return fallBack() +}) ``` --- @@ -159,6 +150,74 @@ const flowString = addKeyword('hola') --- +## endFlow() + +Esta funcion se utliza para finalizar un flujo con dos o más addAnswer. Un ejemplo de uso sería registrar 3 datos de un usuario en 3 preguntas distinas y +que el usuario pueda finalizar por él mismo el flujo. +Como podrás comprobar en el ejemplo siguiente, se puede vincular flowDynamic y todas sus funciones; como por ejemplo botones. + +```js +const flowFormulario = addKeyword(['Hola']) + .addAnswer( + ['Hola!', 'Escriba su *Nombre* para generar su solicitud'], + { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { + if (ctx.body == '❌ Cancelar solicitud') { + await flowDynamic([ + { + body: '❌ *Su solicitud de cita ha sido cancelada* ❌', + buttons: [{ body: '⬅️ Volver al Inicio' }], + }, + ]) + return endFlow() + } + } + ) + .addAnswer( + ['También necesito tus dos apellidos'], + { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { + if (ctx.body == '❌ Cancelar solicitud') { + await flowDynamic([ + { + body: '❌ *Su solicitud de cita ha sido cancelada* ❌', + buttons: [{ body: '⬅️ Volver al Inicio' }], + }, + ]) + return endFlow() + } + } + ) + .addAnswer( + ['Dejeme su número de teléfono y le llamaré lo antes posible.'], + { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { + if (ctx.body == '❌ Cancelar solicitud') { + await flowDynamic([ + { + body: '❌ *Su solicitud de cita ha sido cancelada* ❌', + buttons: [{ body: '⬅️ Volver al Inicio' }], + }, + ]) + return endFlow() + } + } + ) +``` + +--- + +# QRPortalWeb + +Argumento para asignar nombre y puerto al BOT + +```js +const BOTNAME = 'bot' +QRPortalWeb({ name: BOTNAME, port: 3005 }) +``` + +--- + - **Atención** estás leyendo la documentación de la **versión v2** de esta - librería, si vienes de la versión anterior te recomendamos pasarte por la - sección de **[migración](/docs/migration/)** para que puedas disfrutar de - las nuevas características. + **Atención** estás leyendo la documentación de la **versión v2** de esta librería, si vienes de la versión anterior + te recomendamos pasarte por la sección de **[migración](/docs/migration/)** para que puedas disfrutar de las nuevas + características. ## ¿Qué es esto? @@ -34,10 +33,7 @@ npm create bot-whatsapp@latest muted playsinline > - +
    diff --git a/packages/docs/src/routes/docs/install/index.mdx b/packages/docs/src/routes/docs/install/index.mdx index 342043a..4fa8575 100644 --- a/packages/docs/src/routes/docs/install/index.mdx +++ b/packages/docs/src/routes/docs/install/index.mdx @@ -28,10 +28,7 @@ El **CLI** te hace una revisión previa, de versión de Node y sistema operativo muted playsinline > - +
    @@ -54,10 +51,8 @@ Cada plantilla tiene sus dependencias necesarias basadas en tu previa selección ``` - 📄 Si deseas cambiar tu **proveedor o tu motor** de base de datos no es - necesario volver ejecutar el CLI (lo puedes hacer sin problema) aunque - tambien basta con solo modificar un par de lineas. [Ver - explicación](/docs/essential) + 📄 Si deseas cambiar tu **proveedor o tu motor** de base de datos no es necesario volver ejecutar el CLI (lo puedes + hacer sin problema) aunque tambien basta con solo modificar un par de lineas. [Ver explicación](/docs/essential) --- diff --git a/packages/docs/src/routes/docs/layout!.tsx b/packages/docs/src/routes/docs/layout!.tsx index cb34220..8fe70cb 100644 --- a/packages/docs/src/routes/docs/layout!.tsx +++ b/packages/docs/src/routes/docs/layout!.tsx @@ -3,6 +3,7 @@ import type { DocumentHead } from '@builder.io/qwik-city' import ExtraBar from '~/components/widgets/ExtraBar' import Header from '~/components/widgets/Header' import NavBar from '~/components/widgets/NavBar' +// import { SearchModal } from '~/components/widgets/SearchModal' import SponsorBar from '~/components/widgets/SponsorBar' import { GlobalStore } from '~/contexts' // import Navigation from '~/components/widgets/Navigation' @@ -14,6 +15,7 @@ export default component$(() => { return ( <> + {/* */}
    @@ -25,11 +27,7 @@ export default component$(() => {
    -
    +
    @@ -52,8 +50,7 @@ export const head: DocumentHead = { meta: [ { name: 'description', - content: - 'Crear chatbot WhatsApp en minutos — Servicio de chatbot para whatspp gratis proyecto OpenSource', + content: 'Crear chatbot WhatsApp en minutos — Servicio de chatbot para whatspp gratis proyecto OpenSource', }, ], } diff --git a/packages/docs/src/routes/docs/migration/index.mdx b/packages/docs/src/routes/docs/migration/index.mdx index 84a1658..2e09f97 100644 --- a/packages/docs/src/routes/docs/migration/index.mdx +++ b/packages/docs/src/routes/docs/migration/index.mdx @@ -49,11 +49,7 @@ En la **_versión (legacy)_** se implementas los flujos de esta manera, en dos a "title": "¿Que te interesa ver?", "message": "Abajo unos botons", "footer": "", - "buttons": [ - { "body": "Telefonos" }, - { "body": "Computadoras" }, - { "body": "Otros" } - ] + "buttons": [{ "body": "Telefonos" }, { "body": "Computadoras" }, { "body": "Otros" }] } }, "catalogo": { @@ -70,51 +66,28 @@ En esta versión es mucho más sencillo, abajo encontrarás un ejemplo del mismo ```js //app.js -const { - createBot, - createProvider, - createFlow, - addKeyword, - addChild, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword, addChild } = require('@bot-whatsapp/bot') const BaileysProvider = require('@bot-whatsapp/provider/baileys') //Provider const MockAdapter = require('@bot-whatsapp/database/mock') //Base de datos /** * Declarando flujos principales. */ -const flowHola = addKeyword(['hola', 'ola', 'alo']).addAnswer( - 'Bienvenido a tu tienda online!' -) +const flowHola = addKeyword(['hola', 'ola', 'alo']).addAnswer('Bienvenido a tu tienda online!') -const flowAdios = addKeyword(['adios', 'bye']) - .addAnswer('Que te vaya bien!!') - .addAnswer('Hasta luego!') +const flowAdios = addKeyword(['adios', 'bye']).addAnswer('Que te vaya bien!!').addAnswer('Hasta luego!') -const flowProductos = addKeyword(['productos', 'info']).addAnswer( - 'Te envio una imagen', - { - buttons: [ - { body: 'Telefonos' }, - { body: 'Computadoras' }, - { body: 'Otros' }, - ], - } -) +const flowProductos = addKeyword(['productos', 'info']).addAnswer('Te envio una imagen', { + buttons: [{ body: 'Telefonos' }, { body: 'Computadoras' }, { body: 'Otros' }], +}) -const flowCatalogo = addKeyword(['imagen', 'foto']).addAnswer( - 'Te envio una imagen', - { media: 'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif' } -) +const flowCatalogo = addKeyword(['imagen', 'foto']).addAnswer('Te envio una imagen', { + media: 'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif', +}) const main = async () => { const adapterDB = new MockAdapter() - const adapterFlow = createFlow([ - flowHola, - flowAdios, - flowProductos, - flowCatalogo, - ]) //Se crean los flujos. + const adapterFlow = createFlow([flowHola, flowAdios, flowProductos, flowCatalogo]) //Se crean los flujos. const adapterProvider = createProvider(BaileysProvider) createBot({ flow: adapterFlow, diff --git a/packages/docs/src/routes/docs/overview/index.mdx b/packages/docs/src/routes/docs/overview/index.mdx index 79830ff..7d2e57c 100644 --- a/packages/docs/src/routes/docs/overview/index.mdx +++ b/packages/docs/src/routes/docs/overview/index.mdx @@ -49,17 +49,15 @@ Qwik is a new kind of web framework that can deliver instant loading web applica

    Instant-on

    - Unlike other frameworks, Qwik is resumable which means Qwik - applications require 0 hydration. This allows Qwik apps to have - instant-on interactivity, regardless of size or complexity + Unlike other frameworks, Qwik is resumable which means Qwik applications require 0 hydration. This allows + Qwik apps to have instant-on interactivity, regardless of size or complexity

    Optimized for speed

    - Qwik has unprecedented performance, offering sub-second full page - loads even on mobile devices. Qwik achieves this by delivering pure - HTML, and incrementally loading JS only as-needed. + Qwik has unprecedented performance, offering sub-second full page loads even on mobile devices. Qwik + achieves this by delivering pure HTML, and incrementally loading JS only as-needed.

    diff --git a/packages/docs/src/routes/docs/providers/index.mdx b/packages/docs/src/routes/docs/providers/index.mdx index 0f6db6a..e534576 100644 --- a/packages/docs/src/routes/docs/providers/index.mdx +++ b/packages/docs/src/routes/docs/providers/index.mdx @@ -4,11 +4,10 @@ import Navigation from '../../../components/widgets/Navigation' # Proveedores - ⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar - algunas configuracion adicional como **token, api, etc.** para esos casos te - recomendamos guiarte de los - **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** - o si gustas puedes editar esta documentación para ir agregando más info + ⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar algunas configuracion adicional como + **token, api, etc.** para esos casos te recomendamos guiarte de los + **[starters](https://github.com/codigoencasa/bot-whatsapp/tree/dev/starters/apps)** o si gustas puedes editar esta + documentación para ir agregando más info Es la pieza que conectara tu flujo con Whatsapp. En este chatbot tenemos varios proveedores disponibles la mayoria gratis pero tambien tenemos integracion la api oficial de whatsapp o twilio diff --git a/packages/docs/src/routes/docs/providers/meta/index.mdx b/packages/docs/src/routes/docs/providers/meta/index.mdx index a44476f..d0f1d6f 100644 --- a/packages/docs/src/routes/docs/providers/meta/index.mdx +++ b/packages/docs/src/routes/docs/providers/meta/index.mdx @@ -59,10 +59,7 @@ En el **archivo principal** del bot donde estás implementando la función del a - **jwtToken:** Lo puedes encontrar en la pagina anterior - **verifyToken:** Puedes escribir lo que quieras es como una palabra clave - - En el ejemplo de abajo puedes ver como una sugerencia de como puede ser - utilizando variables de entorno - +En el ejemplo de abajo puedes ver como una sugerencia de como puede ser utilizando variables de entorno ```js const main = async () => { diff --git a/packages/docs/src/routes/docs/providers/twilio/index.mdx b/packages/docs/src/routes/docs/providers/twilio/index.mdx index 5548ad5..37fc6dd 100644 --- a/packages/docs/src/routes/docs/providers/twilio/index.mdx +++ b/packages/docs/src/routes/docs/providers/twilio/index.mdx @@ -5,10 +5,7 @@ import Navigation from '../../../../components/widgets/Navigation' Twilio es una plataforma de desarrollo que permite a los desarrolladores construir aplicaciones de comunicación en la nube y sistemas web. Las API de comunicaciones de Twilio permiten a las empresas proporcionar la experiencia de comunicación adecuada para sus clientes dentro de la web y las aplicaciones móviles. Al usar las API de Twilio, los desarrolladores pueden agregar rápidamente esta funcionalidad a una aplicación, como mensajes de voz, videollamadas, mensajes de texto y más. - - Twilio te proporciona una cuenta **Sandbox** para que puedas probar - gratuitamente el servicio - +Twilio te proporciona una cuenta **Sandbox** para que puedas probar gratuitamente el servicio ### Requerimientos @@ -66,10 +63,7 @@ En el **archivo principal** del bot donde estás implementando la función del a - **ACC_VENDOR:** Es el numero de whatsapp (si ya tienes el plan de pago de Twilio usa el numero que compraste), si aun estas en modo sandbox utliza el numero proporcionado en el paso numero 2 - - En el ejemplo de abajo puedes ver como una sugerencia de como puede ser - utilizando variables de entorno - +En el ejemplo de abajo puedes ver como una sugerencia de como puede ser utilizando variables de entorno ```js const main = async () => { diff --git a/packages/docs/src/routes/index.tsx b/packages/docs/src/routes/index.tsx index 8ad3b75..71fa15a 100644 --- a/packages/docs/src/routes/index.tsx +++ b/packages/docs/src/routes/index.tsx @@ -10,11 +10,10 @@ import { fetchGithub } from '~/services/github' import { fetchOpenCollective } from '~/services/opencollective' import { RequestHandlerNetlify } from '@builder.io/qwik-city/middleware/netlify-edge' import { GITHUB_TOKEN } from './docs/constant' +// import { SearchModal } from '~/components/widgets/SearchModal' export const onGet: RequestHandlerNetlify = async ({ platform }) => { - const CHECK_GITHUB_TOKEN = - (platform as any)?.['GITHUB_TOKEN'] ?? GITHUB_TOKEN - console.log(`[🚩 platform]: `, GITHUB_TOKEN) + const CHECK_GITHUB_TOKEN = (platform as any)?.['GITHUB_TOKEN'] ?? GITHUB_TOKEN const dataGithub = await fetchGithub(CHECK_GITHUB_TOKEN) const dataOpenCollective = await fetchOpenCollective() return { @@ -52,8 +51,7 @@ export const head: DocumentHead = { meta: [ { name: 'description', - content: - 'Crear chatbot WhatsApp en minutos — Servicio de chatbot para whatspp gratis proyecto OpenSource', + content: 'Crear chatbot WhatsApp en minutos — Servicio de chatbot para whatspp gratis proyecto OpenSource', }, ], } diff --git a/packages/docs/src/services/github.ts b/packages/docs/src/services/github.ts index e60d250..6ef1186 100644 --- a/packages/docs/src/services/github.ts +++ b/packages/docs/src/services/github.ts @@ -3,17 +3,14 @@ * @returns */ export const fetchGithub = async (token: string) => { - const data = await fetch( - `https://api.github.com/repos/codigoencasa/bot-whatsapp/contributors`, - { - method: 'GET', - headers: { - Accept: 'application/vnd.github+json', - 'X-GitHub-Api-Version': '2022-11-28', - Authorization: `Bearer ${token}`, - }, - } - ) + const data = await fetch(`https://api.github.com/repos/codigoencasa/bot-whatsapp/contributors`, { + method: 'GET', + headers: { + Accept: 'application/vnd.github+json', + 'X-GitHub-Api-Version': '2022-11-28', + Authorization: `Bearer ${token}`, + }, + }) const listUsers = await data.json() return listUsers.map((u: any) => ({ ...u, diff --git a/packages/docs/src/services/opencollective.ts b/packages/docs/src/services/opencollective.ts index 2eb60c8..55e7e75 100644 --- a/packages/docs/src/services/opencollective.ts +++ b/packages/docs/src/services/opencollective.ts @@ -3,12 +3,9 @@ * @returns */ export const fetchOpenCollective = async () => { - const data = await fetch( - `https://opencollective.com/bot-whatsapp/members/users.json?limit=10&offset=0`, - { - method: 'GET', - } - ) + const data = await fetch(`https://opencollective.com/bot-whatsapp/members/users.json?limit=22&offset=0`, { + method: 'GET', + }) const listUsers = await data.json() return listUsers.map((u: any) => ({ html_url: u.profile, diff --git a/packages/docs/tailwind.config.js b/packages/docs/tailwind.config.js index 1614b2e..a92fde1 100644 --- a/packages/docs/tailwind.config.js +++ b/packages/docs/tailwind.config.js @@ -76,9 +76,7 @@ module.exports = { a: { fontWeight: theme('fontWeight.semibold'), textDecoration: 'none', - borderBottom: `1px solid ${theme( - 'colors.sky.300' - )}`, + borderBottom: `1px solid ${theme('colors.sky.300')}`, }, 'a:hover': { borderBottomWidth: '2px', diff --git a/packages/portal/.vscode/qwik-city.code-snippets b/packages/portal/.vscode/qwik-city.code-snippets index b6c1c17..361ddf7 100644 --- a/packages/portal/.vscode/qwik-city.code-snippets +++ b/packages/portal/.vscode/qwik-city.code-snippets @@ -3,11 +3,7 @@ "scope": "javascriptreact,typescriptreact", "prefix": "q:onGet", "description": "onGet function for a route index", - "body": [ - "export const onGet: RequestHandler = (request) => {", - " $0", - "};" - ] + "body": ["export const onGet: RequestHandler = (request) => {", " $0", "};"] }, "onGet (typed)": { "scope": "javascriptreact,typescriptreact", diff --git a/packages/portal/.vscode/qwik.code-snippets b/packages/portal/.vscode/qwik.code-snippets index 4b89dbf..c2a8a8f 100644 --- a/packages/portal/.vscode/qwik.code-snippets +++ b/packages/portal/.vscode/qwik.code-snippets @@ -56,24 +56,13 @@ "scope": "javascriptreact,typescriptreact", "prefix": "q:useTask", "description": "useTask$() function hook", - "body": [ - "useTask$(({ track }) => {", - " track(() => $1);", - " $0", - "});", - "" - ] + "body": ["useTask$(({ track }) => {", " track(() => $1);", " $0", "});", ""] }, "useResource": { "scope": "javascriptreact,typescriptreact", "prefix": "q:useResource", "description": "useResource$() declaration", - "body": [ - "const $1 = useResource$(({ track, cleanup }) => {", - " $0", - "});", - "" - ] + "body": ["const $1 = useResource$(({ track, cleanup }) => {", " $0", "});", ""] }, "useServerMount": { "scope": "javascriptreact,typescriptreact", diff --git a/packages/portal/portal.http.js b/packages/portal/portal.http.js index 3066c12..122f2de 100644 --- a/packages/portal/portal.http.js +++ b/packages/portal/portal.http.js @@ -5,14 +5,9 @@ const polka = require('polka') const HTTP_PORT = process.env.PORT || 3000 const QR_FILE = process.env.QR_FILE ?? 'bot' -const PUBLIC_URL = - process.env.PUBLIC_URL ?? - process.env.RAILWAY_STATIC_URL ?? - 'http://localhost' +const PUBLIC_URL = process.env.PUBLIC_URL ?? process.env.RAILWAY_STATIC_URL ?? 'http://localhost' -const dir = [join(__dirname, 'dist'), join(__dirname, '..', 'dist')].find((i) => - existsSync(i) -) +const dir = [join(__dirname, 'dist'), join(__dirname, '..', 'dist')].find((i) => existsSync(i)) const serve = require('serve-static')(dir) /** @@ -32,14 +27,8 @@ const start = (args) => { console.log(``) console.log(bgYellow(`🚩 ESCANEAR QR 🚩`)) console.log(cyan(`Existen varias maneras de escanear el QR code`)) - console.log( - cyan(`- Tambien puedes visitar `), - yellow(`${publicSite}:${port}`) - ) - console.log( - cyan(`- Se ha creado un archivo que finaliza `), - yellow('qr.png') - ) + console.log(cyan(`- Tambien puedes visitar `), yellow(`${publicSite}:${port}`)) + console.log(cyan(`- Se ha creado un archivo que finaliza `), yellow('qr.png')) console.log(``) } diff --git a/packages/portal/server/@qwik-city-not-found-paths.js b/packages/portal/server/@qwik-city-not-found-paths.js index f5f657d..473076c 100644 --- a/packages/portal/server/@qwik-city-not-found-paths.js +++ b/packages/portal/server/@qwik-city-not-found-paths.js @@ -1,7 +1,7 @@ const notFounds = [ [ '/', - '\n\n\n \n \n 404 Resource Not Found\n \n \n\n\n

    404 Resource Not Found

    \n\n', + '\n\n \n \n \n 404 Resource Not Found\n \n \n \n \n

    404 Resource Not Found

    \n \n\n', ], ] function getNotFound(p) { diff --git a/packages/portal/server/@qwik-city-static-paths.js b/packages/portal/server/@qwik-city-static-paths.js index 1afa65f..1835f6b 100644 --- a/packages/portal/server/@qwik-city-static-paths.js +++ b/packages/portal/server/@qwik-city-static-paths.js @@ -1,5 +1,4 @@ const staticPaths = new Set([ - '/', '/favicon.svg', '/manifest.json', '/q-manifest.json', diff --git a/packages/portal/src/components/header/header.tsx b/packages/portal/src/components/header/header.tsx index f1c7fa7..ebaa11b 100644 --- a/packages/portal/src/components/header/header.tsx +++ b/packages/portal/src/components/header/header.tsx @@ -8,28 +8,18 @@ export default component$(() => { return (
    • - + Docs
    • - + Examples
    • diff --git a/packages/portal/src/components/icons/qwik.tsx b/packages/portal/src/components/icons/qwik.tsx index 3bd8d91..fc113f6 100644 --- a/packages/portal/src/components/icons/qwik.tsx +++ b/packages/portal/src/components/icons/qwik.tsx @@ -1,11 +1,5 @@ export const QwikLogo = () => ( - + { @@ -20,12 +15,7 @@ export const QR = component$(() => { return (
      - QR + QR
      ) }) diff --git a/packages/portal/src/components/router-head/router-head.tsx b/packages/portal/src/components/router-head/router-head.tsx index c0811e4..dee9459 100644 --- a/packages/portal/src/components/router-head/router-head.tsx +++ b/packages/portal/src/components/router-head/router-head.tsx @@ -10,10 +10,7 @@ export const RouterHead = component$(() => { {head.title} - + {head.meta.map((m) => ( diff --git a/packages/portal/src/global.css b/packages/portal/src/global.css index cc17b32..6b1eeb6 100644 --- a/packages/portal/src/global.css +++ b/packages/portal/src/global.css @@ -15,8 +15,7 @@ body { background-color: #fafafa; - font-family: 'Inter', sans-serif, ui-sans-serif, system-ui, -apple-system, - BlinkMacSystemFont, sans-serif; + font-family: 'Inter', sans-serif, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; padding: 20px 20px 40px 20px; } diff --git a/packages/portal/src/routes/index.css b/packages/portal/src/routes/index.css index f5ff37b..cf07671 100644 --- a/packages/portal/src/routes/index.css +++ b/packages/portal/src/routes/index.css @@ -12,8 +12,7 @@ .page .btn-link { background: white; - box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px, - rgb(0 0 0 / 6%) 0px 0px 0px 1px; + box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px, rgb(0 0 0 / 6%) 0px 0px 0px 1px; padding: 10px; border-radius: 5px; font-weight: 600; diff --git a/packages/portal/src/routes/index.tsx b/packages/portal/src/routes/index.tsx index 44c8117..2a26307 100644 --- a/packages/portal/src/routes/index.tsx +++ b/packages/portal/src/routes/index.tsx @@ -15,19 +15,13 @@ export default component$(() => {

      Whatsapp QR

      - Con esta libreria, puedes configurar respuestas - automatizadas para preguntas frecuentes, recibir y responder - mensajes de manera automatizada, y hacer un seguimiento de - las interacciones con los clientes.
      Además, nuestro - Chatbot se integra fácilmente con otros sistemas y - herramientas que ya esté utilizando en su negocio. + Con esta libreria, puedes configurar respuestas automatizadas para preguntas frecuentes, recibir y + responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los + clientes.
      Además, nuestro Chatbot se integra fácilmente con otros sistemas y herramientas que + ya esté utilizando en su negocio.

      diff --git a/packages/provider/src/baileys/index.js b/packages/provider/src/baileys/index.js index 6f33e53..dd0e671 100644 --- a/packages/provider/src/baileys/index.js +++ b/packages/provider/src/baileys/index.js @@ -7,18 +7,9 @@ const { join } = require('path') const { createWriteStream, readFileSync } = require('fs') const { Console } = require('console') -const { - default: makeWASocket, - useMultiFileAuthState, - Browsers, - DisconnectReason, -} = require('@adiwajshing/baileys') +const { default: makeWASocket, useMultiFileAuthState, Browsers, DisconnectReason } = require('@adiwajshing/baileys') -const { - baileyGenerateImage, - baileyCleanNumber, - baileyIsValidNumber, -} = require('./utils') +const { baileyGenerateImage, baileyCleanNumber, baileyIsValidNumber } = require('./utils') const { generalDownload } = require('../../common/download') @@ -46,9 +37,7 @@ class BaileysProvider extends ProviderClass { */ initBailey = async () => { const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions` - const { state, saveCreds } = await useMultiFileAuthState( - NAME_DIR_SESSION - ) + const { state, saveCreds } = await useMultiFileAuthState(NAME_DIR_SESSION) this.saveCredsGlobal = saveCreds try { @@ -57,7 +46,7 @@ class BaileysProvider extends ProviderClass { auth: state, browser: Browsers.macOS('Desktop'), syncFullHistory: false, - logger: pino({ level: 'error' }), + logger: pino({ level: 'fatal' }), }) sock.ev.on('connection.update', async (update) => { @@ -96,10 +85,7 @@ class BaileysProvider extends ProviderClass { `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`, ], }) - await baileyGenerateImage( - qr, - `${this.globalVendorArgs.name}.qr.png` - ) + await baileyGenerateImage(qr, `${this.globalVendorArgs.name}.qr.png`) } }) @@ -131,9 +117,10 @@ class BaileysProvider extends ProviderClass { const [messageCtx] = messages let payload = { ...messageCtx, - body: messageCtx?.message?.conversation, + body: messageCtx?.message?.extendedTextMessage?.text ?? messageCtx?.message?.conversation, from: messageCtx?.key?.remoteJid, } + if (payload.from === 'status@broadcast') return if (payload?.key?.fromMe) return @@ -142,9 +129,7 @@ class BaileysProvider extends ProviderClass { return } - const btnCtx = - payload?.message?.buttonsResponseMessage - ?.selectedDisplayText + const btnCtx = payload?.message?.buttonsResponseMessage?.selectedDisplayText if (btnCtx) payload.body = btnCtx @@ -168,8 +153,6 @@ class BaileysProvider extends ProviderClass { * @example await sendMessage('+XXXXXXXXXXX', 'Hello World') */ - sendRaw = () => this.vendor.sendMessage - /** * @alpha * @param {string} number @@ -181,12 +164,9 @@ class BaileysProvider extends ProviderClass { const fileDownloaded = await generalDownload(imageUrl) const mimeType = mime.lookup(fileDownloaded) - if (mimeType.includes('image')) - return this.sendImage(number, fileDownloaded, text) - if (mimeType.includes('video')) - return this.sendVideo(number, fileDownloaded, text) - if (mimeType.includes('audio')) - return this.sendAudio(number, fileDownloaded, text) + if (mimeType.includes('image')) return this.sendImage(number, fileDownloaded, text) + if (mimeType.includes('video')) return this.sendVideo(number, fileDownloaded, text) + if (mimeType.includes('audio')) return this.sendAudio(number, fileDownloaded, text) return this.sendFile(number, fileDownloaded) } @@ -302,10 +282,8 @@ class BaileysProvider extends ProviderClass { sendMessage = async (numberIn, message, { options }) => { const number = baileyCleanNumber(numberIn) - if (options?.buttons?.length) - return this.sendButtons(number, message, options.buttons) - if (options?.media) - return this.sendMedia(number, options.media, message) + if (options?.buttons?.length) return this.sendButtons(number, message, options.buttons) + if (options?.media) return this.sendMedia(number, options.media, message) return this.sendText(number, message) } @@ -340,12 +318,7 @@ class BaileysProvider extends ProviderClass { * @example await sendContact("xxxxxxxxxxx@c.us" || "xxxxxxxxxxxxxxxxxx@g.us", "+xxxxxxxxxxx", "Robin Smith", messages) */ - sendContact = async ( - remoteJid, - contactNumber, - displayName, - messages = null - ) => { + sendContact = async (remoteJid, contactNumber, displayName, messages = null) => { const cleanContactNumber = contactNumber.replaceAll(' ', '') const waid = cleanContactNumber.replace('+', '') diff --git a/packages/provider/src/meta/index.js b/packages/provider/src/meta/index.js index b3a106b..2b2e0e0 100644 --- a/packages/provider/src/meta/index.js +++ b/packages/provider/src/meta/index.js @@ -56,15 +56,11 @@ class MetaProvider extends ProviderClass { sendMessageMeta = async (body) => { try { - const response = await axios.post( - `${URL}/${this.numberId}/messages`, - body, - { - headers: { - Authorization: `Bearer ${this.jwtToken}`, - }, - } - ) + const response = await axios.post(`${URL}/${this.numberId}/messages`, body, { + headers: { + Authorization: `Bearer ${this.jwtToken}`, + }, + }) return response.data } catch (error) { return Promise.resolve(error) @@ -106,8 +102,7 @@ class MetaProvider extends ProviderClass { */ sendMessage = async (number, message, { options }) => { if (options?.buttons?.length) return console.log('Envio de botones') - if (options?.media) - return this.sendMedia(number, message, options.media) + if (options?.media) return this.sendMedia(number, message, options.media) this.sendtext(number, message) } diff --git a/packages/provider/src/meta/server.js b/packages/provider/src/meta/server.js index 3d6ef61..cbd59b0 100644 --- a/packages/provider/src/meta/server.js +++ b/packages/provider/src/meta/server.js @@ -81,9 +81,7 @@ class MetaWebHookServer extends EventEmitter { * @returns */ buildHTTPServer = () => { - this.metaServer - .use(urlencoded({ extended: true })) - .get('/webhook', this.verifyToken) + this.metaServer.use(urlencoded({ extended: true })).get('/webhook', this.verifyToken) this.metaServer .use(urlencoded({ extended: true })) @@ -99,9 +97,7 @@ class MetaWebHookServer extends EventEmitter { this.metaServer.listen(this.metaPort, () => { console.log(``) console.log(`[meta]: Agregar esta url "WHEN A MESSAGE COMES IN"`) - console.log( - `[meta]: POST http://localhost:${this.metaPort}/webhook` - ) + console.log(`[meta]: POST http://localhost:${this.metaPort}/webhook`) console.log(`[meta]: Más información en la documentacion`) console.log(``) }) diff --git a/packages/provider/src/twilio/index.js b/packages/provider/src/twilio/index.js index 7c25bb9..e1a50dc 100644 --- a/packages/provider/src/twilio/index.js +++ b/packages/provider/src/twilio/index.js @@ -86,12 +86,8 @@ class TwilioProvider extends ProviderClass { */ sendButtons = async () => { console.log(``) - console.log( - `[NOTA]: Actualmente enviar botons con Twilio esta en desarrollo` - ) - console.log( - `[NOTA]: https://www.twilio.com/es-mx/docs/whatsapp/buttons` - ) + console.log(`[NOTA]: Actualmente enviar botons con Twilio esta en desarrollo`) + console.log(`[NOTA]: https://www.twilio.com/es-mx/docs/whatsapp/buttons`) console.log(``) } @@ -104,10 +100,8 @@ class TwilioProvider extends ProviderClass { */ sendMessage = async (number, message, { options }) => { number = parseNumber(number) - if (options?.buttons?.length) - this.sendButtons(number, message, options.buttons) - if (options?.media) - return this.sendMedia(number, message, options.media) + if (options?.buttons?.length) this.sendButtons(number, message, options.buttons) + if (options?.media) return this.sendMedia(number, message, options.media) return this.vendor.messages.create({ body: message, from: `whatsapp:+${this.vendorNumber}`, diff --git a/packages/provider/src/twilio/server.js b/packages/provider/src/twilio/server.js index ae09da7..aaf49c2 100644 --- a/packages/provider/src/twilio/server.js +++ b/packages/provider/src/twilio/server.js @@ -51,9 +51,7 @@ class TwilioWebHookServer extends EventEmitter { this.twilioServer.listen(this.twilioPort, () => { console.log(``) console.log(`[Twilio]: Agregar esta url "WHEN A MESSAGE COMES IN"`) - console.log( - `[Twilio]: POST http://localhost:${this.twilioPort}/twilio-hook` - ) + console.log(`[Twilio]: POST http://localhost:${this.twilioPort}/twilio-hook`) console.log(`[Twilio]: Más información en la documentacion`) console.log(``) }) diff --git a/packages/provider/src/venom/index.js b/packages/provider/src/venom/index.js index edb8dcc..1369af2 100644 --- a/packages/provider/src/venom/index.js +++ b/packages/provider/src/venom/index.js @@ -4,11 +4,7 @@ const { createWriteStream } = require('fs') const { Console } = require('console') const mime = require('mime-types') -const { - venomCleanNumber, - venomGenerateImage, - venomisValidNumber, -} = require('./utils') +const { venomCleanNumber, venomGenerateImage, venomisValidNumber } = require('./utils') const logger = new Console({ stdout: createWriteStream(`${process.cwd()}/venom.log`), @@ -108,8 +104,7 @@ class VenomProvider extends ProviderClass { const listEvents = this.busEvents() for (const { event, func } of listEvents) { - if (this.vendor[event]) - this.vendor[event]((payload) => func(payload)) + if (this.vendor[event]) this.vendor[event]((payload) => func(payload)) } } @@ -122,16 +117,13 @@ class VenomProvider extends ProviderClass { * @returns */ sendButtons = async (number, message, buttons = []) => { - const NOTE_VENOM_BUTTON = [ - `Actualmente VENOM tiene problemas con la API`, - `para el envio de Botones`, - ].join('\n') + const NOTE_VENOM_BUTTON = [`Actualmente VENOM tiene problemas con la API`, `para el envio de Botones`].join( + '\n' + ) console.log(`[NOTA]: ${NOTE_VENOM_BUTTON}`) - const buttonToStr = [message] - .concat(buttons.map((btn) => `${btn.body}`)) - .join(`\n`) + const buttonToStr = [message].concat(buttons.map((btn) => `${btn.body}`)).join(`\n`) return this.vendor.sendText(number, buttonToStr) // return this.vendor.sendButtons(number, "Title", buttons1, "Description"); } @@ -194,25 +186,13 @@ class VenomProvider extends ProviderClass { const fileDownloaded = await generalDownload(mediaUrl) const mimeType = mime.lookup(fileDownloaded) - if (mimeType.includes('image')) - return this.sendImage(number, fileDownloaded, text) - if (mimeType.includes('video')) - return this.sendVideo(number, fileDownloaded, text) - if (mimeType.includes('audio')) - return this.sendAudio(number, fileDownloaded) + if (mimeType.includes('image')) return this.sendImage(number, fileDownloaded, text) + if (mimeType.includes('video')) return this.sendVideo(number, fileDownloaded, text) + if (mimeType.includes('audio')) return this.sendAudio(number, fileDownloaded) return this.sendFile(number, fileDownloaded, text) } - /** - * Funcion SendRaw envia opciones directamente del proveedor - * @param {string} number - * @param {string} message - * @example await sendMessage('+XXXXXXXXXXX', 'Hello World') - */ - - sendRaw = () => this.vendor.sendMessage - /** * Enviar mensaje al usuario * @param {*} userId @@ -222,10 +202,8 @@ class VenomProvider extends ProviderClass { */ sendMessage = async (userId, message, { options }) => { const number = venomCleanNumber(userId) - if (options?.buttons?.length) - return this.sendButtons(number, message, options.buttons) - if (options?.media) - return this.sendMedia(number, options.media, message) + if (options?.buttons?.length) return this.sendButtons(number, message, options.buttons) + if (options?.media) return this.sendMedia(number, options.media, message) return this.vendor.sendText(number, message) } } diff --git a/packages/provider/src/web-whatsapp/index.js b/packages/provider/src/web-whatsapp/index.js index caa95a2..4d566ee 100644 --- a/packages/provider/src/web-whatsapp/index.js +++ b/packages/provider/src/web-whatsapp/index.js @@ -2,11 +2,7 @@ const { Client, LocalAuth, MessageMedia, Buttons } = require('whatsapp-web.js') const { ProviderClass } = require('@bot-whatsapp/bot') const { Console } = require('console') const { createWriteStream, readFileSync } = require('fs') -const { - wwebCleanNumber, - wwebGenerateImage, - wwebIsValidNumber, -} = require('./utils') +const { wwebCleanNumber, wwebGenerateImage, wwebIsValidNumber } = require('./utils') const logger = new Console({ stdout: createWriteStream('./log'), @@ -32,11 +28,7 @@ class WebWhatsappProvider extends ProviderClass { }), puppeteer: { headless: true, - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--unhandled-rejections=strict', - ], + args: ['--no-sandbox', '--disable-setuid-sandbox', '--unhandled-rejections=strict'], //executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe', }, }) @@ -80,10 +72,7 @@ class WebWhatsappProvider extends ProviderClass { `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`, ], }) - await wwebGenerateImage( - qr, - `${this.globalVendorArgs.name}.qr.png` - ) + await wwebGenerateImage(qr, `${this.globalVendorArgs.name}.qr.png`) }, }, { @@ -116,6 +105,9 @@ class WebWhatsappProvider extends ProviderClass { * @returns */ sendButtons = async (number, message, buttons = []) => { + console.log(`🚩 ¿No te funciona los botones? Intenta instalar`) + console.log(`npm i github:pedroslopez/whatsapp-web.js#fix-buttons-list`) + const buttonMessage = new Buttons(message, buttons, '', '') return this.vendor.sendMessage(number, buttonMessage) } @@ -163,13 +155,11 @@ class WebWhatsappProvider extends ProviderClass { * @param {*} text * @returns */ - sendImage = async (number, filePath) => { + sendImage = async (number, filePath, caption) => { const base64 = readFileSync(filePath, { encoding: 'base64' }) const mimeType = mime.lookup(filePath) const media = new MessageMedia(mimeType, base64) - return this.vendor.sendMessage(number, media, { - caption: 'soy una imagen', - }) + return this.vendor.sendMessage(number, media, { caption }) } /** @@ -180,13 +170,11 @@ class WebWhatsappProvider extends ProviderClass { * @returns */ - sendAudio = async (number, filePath) => { + sendAudio = async (number, filePath, caption) => { const base64 = readFileSync(filePath, { encoding: 'base64' }) const mimeType = mime.lookup(filePath) const media = new MessageMedia(mimeType, base64) - return this.vendor.sendMessage(number, media, { - caption: 'soy un audio', - }) + return this.vendor.sendMessage(number, media, { caption }) } /** @@ -230,12 +218,9 @@ class WebWhatsappProvider extends ProviderClass { const fileDownloaded = await generalDownload(mediaUrl) const mimeType = mime.lookup(fileDownloaded) - if (mimeType.includes('image')) - return this.sendImage(number, fileDownloaded, text) - if (mimeType.includes('video')) - return this.sendVideo(number, fileDownloaded) - if (mimeType.includes('audio')) - return this.sendAudio(number, fileDownloaded) + if (mimeType.includes('image')) return this.sendImage(number, fileDownloaded, text) + if (mimeType.includes('video')) return this.sendVideo(number, fileDownloaded) + if (mimeType.includes('audio')) return this.sendAudio(number, fileDownloaded) return this.sendFile(number, fileDownloaded) } @@ -257,8 +242,7 @@ class WebWhatsappProvider extends ProviderClass { */ sendMessage = async (userId, message, { options }) => { const number = wwebCleanNumber(userId) - if (options?.buttons?.length) - return this.sendButtons(number, message, options.buttons) + if (options?.buttons?.length) return this.sendButtons(number, message, options.buttons) if (options?.media) return this.sendMedia(number, options.media) return this.sendText(number, message) } diff --git a/packages/provider/src/web-whatsapp/package.json b/packages/provider/src/web-whatsapp/package.json index d15dbe0..2fc0278 100644 --- a/packages/provider/src/web-whatsapp/package.json +++ b/packages/provider/src/web-whatsapp/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "whatsapp-web.js": "1.19.2" + "whatsapp-web.js": "1.19.3" } } diff --git a/scripts/checker.js b/scripts/checker.js index b68cd57..3cb4329 100644 --- a/scripts/checker.js +++ b/scripts/checker.js @@ -18,13 +18,9 @@ const [PKG_NAME, PKG_STABLE] = process.argv.slice(2) || [null, null] * @param {*} pkgName */ const checkPkg = async (pkgName = '') => { - const { stdout } = await cmd( - NPM_COMMAND, - ['show', `${pkgName}`, 'version'], - { - stdio: 'inherit', - } - ) + const { stdout } = await cmd(NPM_COMMAND, ['show', `${pkgName}`, 'version'], { + stdio: 'inherit', + }) return stdout.trim().replace('\n', '') } @@ -36,12 +32,7 @@ const checkPkg = async (pkgName = '') => { const checkPkgStable = async (pkgName = '', version = '') => { const { stdout } = await cmd( NPM_COMMAND, - [ - 'show', - `${pkgName}@${version.split('.').shift()}.*`, - 'version', - '--json', - ], + ['show', `${pkgName}@${version.split('.').shift()}.*`, 'version', '--json'], { stdio: 'inherit', } @@ -65,17 +56,14 @@ const checkPkgStable = async (pkgName = '', version = '') => { * @returns */ const checkEveryProvider = async (provider = '', stable = true) => { - const pkgDependencies = readFileSync( - join(PATH_PACKAGES, 'provider', 'src', provider, 'package.json') - ) + const pkgDependencies = readFileSync(join(PATH_PACKAGES, 'provider', 'src', provider, 'package.json')) try { const { dependencies } = JSON.parse(pkgDependencies) const devParse = Object.entries(dependencies) const newDevParse = {} for (const [pkgName, pkgVersion] of devParse) { if (!stable) newDevParse[pkgName] = await checkPkg(pkgName) - if (stable) - newDevParse[pkgName] = await checkPkgStable(pkgName, pkgVersion) + if (stable) newDevParse[pkgName] = await checkPkgStable(pkgName, pkgVersion) console.log(newDevParse) } @@ -93,25 +81,12 @@ const checkEveryProvider = async (provider = '', stable = true) => { * @returns */ const updateDependencies = async (provider = '', list = {}) => { - const pathProvider = join( - PATH_PACKAGES, - 'provider', - 'src', - provider, - 'package.json' - ) + const pathProvider = join(PATH_PACKAGES, 'provider', 'src', provider, 'package.json') try { const pkgDependencies = readFileSync(pathProvider) const { dependencies } = JSON.parse(pkgDependencies) - writeFileSync( - pathProvider, - JSON.stringify( - { dependencies: { ...dependencies, ...list } }, - null, - 2 - ) - ) + writeFileSync(pathProvider, JSON.stringify({ dependencies: { ...dependencies, ...list } }, null, 2)) } catch (e) { console.log(e) return {} @@ -125,15 +100,11 @@ const updateDependencies = async (provider = '', list = {}) => { */ const updateStarters = async (provider = '', updateDev = {}) => { provider = provider === 'web-whatsapp' ? 'wweb' : provider - const allStarters = readdirSync(PATH_STARTERS).filter((n) => - n.includes(provider) - ) + const allStarters = readdirSync(PATH_STARTERS).filter((n) => n.includes(provider)) try { for (const base of allStarters) { - const pkgDependenciesBase = readFileSync( - join(PATH_STARTERS, base, 'package.json') - ) + const pkgDependenciesBase = readFileSync(join(PATH_STARTERS, base, 'package.json')) const pkgBase = JSON.parse(pkgDependenciesBase) writeFileSync( join(PATH_STARTERS, base, 'package.json'), @@ -157,10 +128,7 @@ const main = async () => { if (PKG_NAME) { const providerName = PKG_NAME ? PKG_NAME.split('=').at(1) : null const providerStable = PKG_STABLE ? PKG_STABLE.split('=').at(1) : null - const list = await checkEveryProvider( - providerName, - providerStable === 'true' - ) + const list = await checkEveryProvider(providerName, providerStable === 'true') await updateDependencies(providerName, list) await updateStarters(providerName, list) } diff --git a/scripts/github.js b/scripts/github.js index 9277d83..71e8eac 100644 --- a/scripts/github.js +++ b/scripts/github.js @@ -39,8 +39,7 @@ const main = async () => { const githubToken = GITHUB_TOKEN ? GITHUB_TOKEN.split('=').at(1) : null const pkgNumber = PKG_ARG ? PKG_ARG.split('=').at(1) : null - if (pkgNumber) - await githubGithubRelease(`v${pkgNumber}`, pkgNumber, githubToken) + if (pkgNumber) await githubGithubRelease(`v${pkgNumber}`, pkgNumber, githubToken) } } diff --git a/scripts/move.js b/scripts/move.js index e59897b..f77fb38 100644 --- a/scripts/move.js +++ b/scripts/move.js @@ -10,14 +10,7 @@ const copyLibPkg = async (pkgName, to) => { await fs.copy(FROM, TO) } -const listLib = [ - 'create-bot-whatsapp', - 'bot', - 'database', - 'provider', - 'contexts', - 'portal', -] +const listLib = ['create-bot-whatsapp', 'bot', 'database', 'provider', 'contexts', 'portal'] const main = async () => { for (const iterator of listLib) { diff --git a/scripts/release.js b/scripts/release.js index 9dfcc62..5353e81 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -18,14 +18,10 @@ const cmd = util.promisify(execFile) */ const npmToken = (token = null) => new Promise((resolve, reject) => { - writeFile( - `${process.cwd()}/.npmrc`, - `//registry.npmjs.org/:_authToken=${token}`, - (error) => { - if (error) reject(error) - resolve() - } - ) + writeFile(`${process.cwd()}/.npmrc`, `//registry.npmjs.org/:_authToken=${token}`, (error) => { + if (error) reject(error) + resolve() + }) }) /** @@ -66,18 +62,11 @@ const updateVersion = async (packageName = null, number = null) => { const pkgJsonObject = readPackage(packageName) const { version } = pkgJsonObject - const newVersion = !number - ? semver.inc(version, 'prepatch', 'alpha') - : `${number}` + const newVersion = !number ? semver.inc(version, 'prepatch', 'alpha') : `${number}` - if (!semver.valid(newVersion)) - throw new Error(`VERSION_ERROR: ${newVersion}`) + if (!semver.valid(newVersion)) throw new Error(`VERSION_ERROR: ${newVersion}`) - const newPkgJson = JSON.stringify( - { ...pkgJsonObject, version: newVersion }, - null, - 2 - ) + const newPkgJson = JSON.stringify({ ...pkgJsonObject, version: newVersion }, null, 2) await updatePackage(packageName, newPkgJson) return { version: newVersion } } @@ -92,14 +81,10 @@ const checkExistVersion = async (packageName = null, version = null) => { try { const pkgJson = join(PATH_PACKAGES, packageName) const pkgJsonObject = readPackage(packageName) - const { stdout } = await cmd( - NPM_COMMAND, - ['view', `${pkgJsonObject.name}@${version}`], - { - stdio: 'inherit', - cwd: pkgJson, - } - ) + const { stdout } = await cmd(NPM_COMMAND, ['view', `${pkgJsonObject.name}@${version}`], { + stdio: 'inherit', + cwd: pkgJson, + }) return true } catch (e) { return false @@ -149,9 +134,7 @@ const main = async () => { let EXIST_VERSION = true const tokenNpm = NPM_TOKEN ? NPM_TOKEN.split('=').at(1) : null const pkgName = PKG_ARG ? PKG_ARG.split('=').at(1) : null - const pkgNumber = PKG_ARG_VERSION - ? PKG_ARG_VERSION.split('=').at(1) - : null + const pkgNumber = PKG_ARG_VERSION ? PKG_ARG_VERSION.split('=').at(1) : null if (tokenNpm) await npmToken(tokenNpm) while (EXIST_VERSION) { diff --git a/starters/apps/base-baileys-json/app.js b/starters/apps/base-baileys-json/app.js index b06887c..5fc0ba1 100644 --- a/starters/apps/base-baileys-json/app.js +++ b/starters/apps/base-baileys-json/app.js @@ -1,23 +1,12 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') const JsonFileAdapter = require('@bot-whatsapp/database/json') -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -53,11 +42,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-baileys-memory/app.js b/starters/apps/base-baileys-memory/app.js index 3d05e79..7b07e11 100644 --- a/starters/apps/base-baileys-memory/app.js +++ b/starters/apps/base-baileys-memory/app.js @@ -1,23 +1,12 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') const MockAdapter = require('@bot-whatsapp/database/mock') -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -53,11 +42,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-baileys-mongo/app.js b/starters/apps/base-baileys-mongo/app.js index 2de3ad6..048fa5c 100644 --- a/starters/apps/base-baileys-mongo/app.js +++ b/starters/apps/base-baileys-mongo/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') @@ -28,15 +23,9 @@ const MONGO_DB_NAME = 'db_bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -72,11 +61,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-baileys-mysql/app.js b/starters/apps/base-baileys-mysql/app.js index d3dbbe5..2b3a2fe 100644 --- a/starters/apps/base-baileys-mysql/app.js +++ b/starters/apps/base-baileys-mysql/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') @@ -29,15 +24,9 @@ const MYSQL_DB_NAME = 'bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -73,11 +62,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-meta-json/app.js b/starters/apps/base-meta-json/app.js index cc4c7ac..4bc73e1 100644 --- a/starters/apps/base-meta-json/app.js +++ b/starters/apps/base-meta-json/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const MetaProvider = require('@bot-whatsapp/provider/meta') const JsonFileAdapter = require('@bot-whatsapp/database/json') @@ -20,15 +15,9 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -64,11 +53,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-meta-memory/app.js b/starters/apps/base-meta-memory/app.js index c8201e8..94c5e43 100644 --- a/starters/apps/base-meta-memory/app.js +++ b/starters/apps/base-meta-memory/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const MetaProvider = require('@bot-whatsapp/provider/meta') const MockAdapter = require('@bot-whatsapp/database/mock') @@ -20,15 +15,9 @@ const MockAdapter = require('@bot-whatsapp/database/mock') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -64,11 +53,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-meta-mongo/app.js b/starters/apps/base-meta-mongo/app.js index 18cd9ac..c287df4 100644 --- a/starters/apps/base-meta-mongo/app.js +++ b/starters/apps/base-meta-mongo/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const MetaProvider = require('@bot-whatsapp/provider/meta') const MongoAdapter = require('@bot-whatsapp/database/mongo') @@ -27,15 +22,9 @@ const MONGO_DB_NAME = 'db_bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -71,11 +60,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-meta-mysql/app.js b/starters/apps/base-meta-mysql/app.js index 102f977..1c2ff53 100644 --- a/starters/apps/base-meta-mysql/app.js +++ b/starters/apps/base-meta-mysql/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const MetaProvider = require('@bot-whatsapp/provider/meta') const MySQLAdapter = require('@bot-whatsapp/database/mysql') @@ -28,15 +23,9 @@ const MYSQL_DB_NAME = 'bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -72,11 +61,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-twilio-json/app.js b/starters/apps/base-twilio-json/app.js index 047a126..28cbbbe 100644 --- a/starters/apps/base-twilio-json/app.js +++ b/starters/apps/base-twilio-json/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const TwilioProvider = require('@bot-whatsapp/provider/twilio') const JsonFileAdapter = require('@bot-whatsapp/database/json') @@ -20,15 +15,9 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -64,11 +53,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-twilio-memory/app.js b/starters/apps/base-twilio-memory/app.js index cc1d16b..db712e8 100644 --- a/starters/apps/base-twilio-memory/app.js +++ b/starters/apps/base-twilio-memory/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const TwilioProvider = require('@bot-whatsapp/provider/twilio') const MockAdapter = require('@bot-whatsapp/database/mock') @@ -20,15 +15,9 @@ const MockAdapter = require('@bot-whatsapp/database/mock') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -64,11 +53,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-twilio-mongo/app.js b/starters/apps/base-twilio-mongo/app.js index dcabb99..41f22cb 100644 --- a/starters/apps/base-twilio-mongo/app.js +++ b/starters/apps/base-twilio-mongo/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const TwilioProvider = require('@bot-whatsapp/provider/twilio') const MongoAdapter = require('@bot-whatsapp/database/mongo') @@ -27,15 +22,9 @@ const MONGO_DB_NAME = 'db_bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -71,11 +60,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-twilio-mysql/app.js b/starters/apps/base-twilio-mysql/app.js index 4725cd3..2a9eaa3 100644 --- a/starters/apps/base-twilio-mysql/app.js +++ b/starters/apps/base-twilio-mysql/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const TwilioProvider = require('@bot-whatsapp/provider/twilio') const MySQLAdapter = require('@bot-whatsapp/database/mysql') @@ -29,15 +24,9 @@ const MYSQL_DB_NAME = 'bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -73,11 +62,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-venom-json/app.js b/starters/apps/base-venom-json/app.js index 120deee..1b07b6b 100644 --- a/starters/apps/base-venom-json/app.js +++ b/starters/apps/base-venom-json/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const VenomProvider = require('@bot-whatsapp/provider/venom') @@ -21,15 +16,9 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -65,11 +54,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-venom-memory/app.js b/starters/apps/base-venom-memory/app.js index 8402cf9..fc68953 100644 --- a/starters/apps/base-venom-memory/app.js +++ b/starters/apps/base-venom-memory/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const VenomProvider = require('@bot-whatsapp/provider/venom') @@ -21,15 +16,9 @@ const MockAdapter = require('@bot-whatsapp/database/mock') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -65,11 +54,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-venom-mongo/app.js b/starters/apps/base-venom-mongo/app.js index 2f4f16a..7bec798 100644 --- a/starters/apps/base-venom-mongo/app.js +++ b/starters/apps/base-venom-mongo/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const VenomProvider = require('@bot-whatsapp/provider/venom') @@ -28,15 +23,9 @@ const MONGO_DB_NAME = 'db_bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -72,11 +61,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-venom-mysql/app.js b/starters/apps/base-venom-mysql/app.js index 8c5c2db..48a47c8 100644 --- a/starters/apps/base-venom-mysql/app.js +++ b/starters/apps/base-venom-mysql/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const VenomProvider = require('@bot-whatsapp/provider/venom') @@ -30,15 +25,9 @@ const MYSQL_DB_NAME = 'bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -74,11 +63,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-wweb-json/app.js b/starters/apps/base-wweb-json/app.js index 729ac2a..77ca714 100644 --- a/starters/apps/base-wweb-json/app.js +++ b/starters/apps/base-wweb-json/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') @@ -21,15 +16,9 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -65,11 +54,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-wweb-memory/app.js b/starters/apps/base-wweb-memory/app.js index d6a567a..bdec9f9 100644 --- a/starters/apps/base-wweb-memory/app.js +++ b/starters/apps/base-wweb-memory/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') @@ -21,15 +16,9 @@ const MockAdapter = require('@bot-whatsapp/database/mock') * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -65,11 +54,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-wweb-mongo/app.js b/starters/apps/base-wweb-mongo/app.js index a8e8aad..361cbe8 100644 --- a/starters/apps/base-wweb-mongo/app.js +++ b/starters/apps/base-wweb-mongo/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') @@ -28,15 +23,9 @@ const MONGO_DB_NAME = 'db_bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -72,11 +61,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/starters/apps/base-wweb-mysql/app.js b/starters/apps/base-wweb-mysql/app.js index 68f7f37..97ceadc 100644 --- a/starters/apps/base-wweb-mysql/app.js +++ b/starters/apps/base-wweb-mysql/app.js @@ -1,9 +1,4 @@ -const { - createBot, - createProvider, - createFlow, - addKeyword, -} = require('@bot-whatsapp/bot') +const { createBot, createProvider, createFlow, addKeyword } = require('@bot-whatsapp/bot') const QRPortalWeb = require('@bot-whatsapp/portal') const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') @@ -30,15 +25,9 @@ const MYSQL_DB_NAME = 'bot' * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. */ -const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ - '📄 Aquí tenemos el flujo secundario', -]) +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer(['📄 Aquí tenemos el flujo secundario']) -const flowDocs = addKeyword([ - 'doc', - 'documentacion', - 'documentación', -]).addAnswer( +const flowDocs = addKeyword(['doc', 'documentacion', 'documentación']).addAnswer( [ '📄 Aquí encontras las documentación recuerda que puedes mejorarla', 'https://bot-whatsapp.netlify.app/', @@ -74,11 +63,7 @@ const flowGracias = addKeyword(['gracias', 'grac']).addAnswer( ) const flowDiscord = addKeyword(['discord']).addAnswer( - [ - '🤪 Únete al discord', - 'https://link.codigoencasa.com/DISCORD', - '\n*2* Para siguiente paso.', - ], + ['🤪 Únete al discord', 'https://link.codigoencasa.com/DISCORD', '\n*2* Para siguiente paso.'], null, null, [flowSecundario] diff --git a/yarn.lock b/yarn.lock index 7140699..4fab282 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,359 +68,359 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/abort-controller@npm:3.257.0" +"@aws-sdk/abort-controller@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/abort-controller@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: fca54be92f6cbfe8f0675aba19a50960376506a4c9aaa9c44220e8c29a7b3c8c74198537f831c1d4818ec686df97af86d055d8f3265c3a6fde56bbf593241c47 + checksum: f9d4f96b2095e1a35fd3e4474b75afba1f4f1349270b5b29611c53962ed1dddd24b1eabd06af7393fe615828a2af0986f58c25b50a8a09c0a5c11a21b7733481 languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.264.0" +"@aws-sdk/client-cognito-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-cognito-identity@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.264.0 - "@aws-sdk/config-resolver": 3.259.0 - "@aws-sdk/credential-provider-node": 3.264.0 - "@aws-sdk/fetch-http-handler": 3.257.0 - "@aws-sdk/hash-node": 3.257.0 - "@aws-sdk/invalid-dependency": 3.257.0 - "@aws-sdk/middleware-content-length": 3.257.0 - "@aws-sdk/middleware-endpoint": 3.264.0 - "@aws-sdk/middleware-host-header": 3.257.0 - "@aws-sdk/middleware-logger": 3.257.0 - "@aws-sdk/middleware-recursion-detection": 3.257.0 - "@aws-sdk/middleware-retry": 3.259.0 - "@aws-sdk/middleware-serde": 3.257.0 - "@aws-sdk/middleware-signing": 3.257.0 - "@aws-sdk/middleware-stack": 3.257.0 - "@aws-sdk/middleware-user-agent": 3.257.0 - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/node-http-handler": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/smithy-client": 3.261.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/client-sts": 3.266.1 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.261.0 - "@aws-sdk/util-defaults-mode-node": 3.261.0 - "@aws-sdk/util-endpoints": 3.257.0 - "@aws-sdk/util-retry": 3.257.0 - "@aws-sdk/util-user-agent-browser": 3.257.0 - "@aws-sdk/util-user-agent-node": 3.259.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: c99523da5911e3a94d9c835748e223cfbdd0f988f3fade40c848de5a7c7c03ae7731169358db0847ebf38166205b23124a6bdbdde9ea59e5623323d7b1f24f3c + checksum: cb2514999120bcd7ec3bc41190ef9ddf9e7446e642045c41fd4a1119171ee4cb6fcbd013b958ceecf219adc2530bd77d5637c94ec63bce3a75dfe56272de9066 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.264.0" +"@aws-sdk/client-sso-oidc@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sso-oidc@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.259.0 - "@aws-sdk/fetch-http-handler": 3.257.0 - "@aws-sdk/hash-node": 3.257.0 - "@aws-sdk/invalid-dependency": 3.257.0 - "@aws-sdk/middleware-content-length": 3.257.0 - "@aws-sdk/middleware-endpoint": 3.264.0 - "@aws-sdk/middleware-host-header": 3.257.0 - "@aws-sdk/middleware-logger": 3.257.0 - "@aws-sdk/middleware-recursion-detection": 3.257.0 - "@aws-sdk/middleware-retry": 3.259.0 - "@aws-sdk/middleware-serde": 3.257.0 - "@aws-sdk/middleware-stack": 3.257.0 - "@aws-sdk/middleware-user-agent": 3.257.0 - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/node-http-handler": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/smithy-client": 3.261.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.261.0 - "@aws-sdk/util-defaults-mode-node": 3.261.0 - "@aws-sdk/util-endpoints": 3.257.0 - "@aws-sdk/util-retry": 3.257.0 - "@aws-sdk/util-user-agent-browser": 3.257.0 - "@aws-sdk/util-user-agent-node": 3.259.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 48132545b420ef47e0c547a462571a821efe764754812ed9792e2190e3173ffa73262473be50743e423dacb2ccdc0d51acc6d1ac57cb30020964f14c5840261a + checksum: ef3a2ac06aac3662120ced57ff3c0d543c9a85c332529366debdab3fcbd6b95144c6ecd2403f3d003c4af23ec68bb469cb86ab281851d8bee96d872bf4e148b6 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/client-sso@npm:3.264.0" +"@aws-sdk/client-sso@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sso@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.259.0 - "@aws-sdk/fetch-http-handler": 3.257.0 - "@aws-sdk/hash-node": 3.257.0 - "@aws-sdk/invalid-dependency": 3.257.0 - "@aws-sdk/middleware-content-length": 3.257.0 - "@aws-sdk/middleware-endpoint": 3.264.0 - "@aws-sdk/middleware-host-header": 3.257.0 - "@aws-sdk/middleware-logger": 3.257.0 - "@aws-sdk/middleware-recursion-detection": 3.257.0 - "@aws-sdk/middleware-retry": 3.259.0 - "@aws-sdk/middleware-serde": 3.257.0 - "@aws-sdk/middleware-stack": 3.257.0 - "@aws-sdk/middleware-user-agent": 3.257.0 - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/node-http-handler": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/smithy-client": 3.261.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.261.0 - "@aws-sdk/util-defaults-mode-node": 3.261.0 - "@aws-sdk/util-endpoints": 3.257.0 - "@aws-sdk/util-retry": 3.257.0 - "@aws-sdk/util-user-agent-browser": 3.257.0 - "@aws-sdk/util-user-agent-node": 3.259.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: e02f0829b02974c824ee698932944b8f9ab2940951ce4b1689749bce22e66e03d8e9f36591343c5bea79c250e68566e471a38562b9cebc96a7d2a91e7e64e1d8 + checksum: 72b25db3f5830815cdf3e2cd4274255cc6a46f0c12ff8cdf0a4d5289bcf129c1c7d8ebaaf64cdcb64eae81a83ff4b921b38eabc39df57114941d143d3c8fc88e languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/client-sts@npm:3.264.0" +"@aws-sdk/client-sts@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sts@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.259.0 - "@aws-sdk/credential-provider-node": 3.264.0 - "@aws-sdk/fetch-http-handler": 3.257.0 - "@aws-sdk/hash-node": 3.257.0 - "@aws-sdk/invalid-dependency": 3.257.0 - "@aws-sdk/middleware-content-length": 3.257.0 - "@aws-sdk/middleware-endpoint": 3.264.0 - "@aws-sdk/middleware-host-header": 3.257.0 - "@aws-sdk/middleware-logger": 3.257.0 - "@aws-sdk/middleware-recursion-detection": 3.257.0 - "@aws-sdk/middleware-retry": 3.259.0 - "@aws-sdk/middleware-sdk-sts": 3.257.0 - "@aws-sdk/middleware-serde": 3.257.0 - "@aws-sdk/middleware-signing": 3.257.0 - "@aws-sdk/middleware-stack": 3.257.0 - "@aws-sdk/middleware-user-agent": 3.257.0 - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/node-http-handler": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/smithy-client": 3.261.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-sdk-sts": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.261.0 - "@aws-sdk/util-defaults-mode-node": 3.261.0 - "@aws-sdk/util-endpoints": 3.257.0 - "@aws-sdk/util-retry": 3.257.0 - "@aws-sdk/util-user-agent-browser": 3.257.0 - "@aws-sdk/util-user-agent-node": 3.259.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 806988abffe493b52f801ed1f70943e3195d7d71964e9ed25bb4a24c3f086e399c29b064b07c1fe61b6270fd8017d666c1b47d33d319efea4791d24cd7248ba3 + checksum: d699e3393035c59a38d7081ad217ff54188fe01470f939fbd73dad6eebd53d4a5d63512700e4079bdbb5d7e947498f1897c67ee7935618371e06cefed4490894 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.259.0": - version: 3.259.0 - resolution: "@aws-sdk/config-resolver@npm:3.259.0" +"@aws-sdk/config-resolver@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/config-resolver@npm:3.266.1" dependencies: - "@aws-sdk/signature-v4": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.257.0 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: c461dfd62291c8dbc3394d586aa44a14326c0a9f02e4cc84dfa6569c6003890d21343aaa28a067337949837f7e2c2e3533465e3e2e5f2ee3e42bb30cc69de0d4 + checksum: 32632b7bfdc3d6fcf2f51bf6f1c064694df47735c3998011803b359901d59dd95953366fed45ee7c3f345dfdd53fd2a1d25a3fabecaca5df52fdb5524ac381ef languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.264.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.266.1" dependencies: - "@aws-sdk/client-cognito-identity": 3.264.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/client-cognito-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 22255c44f8aa2ce9c51ee20d723c35e9d32ef714f00819e67ccb3552573da0f86efc0c8db1712c4e615e0bf69265f4d2251ca54918a27524728c385e2ba6bdea + checksum: d9d213a62b8177a2608031cd40cce2f1d6ac1b2ed78d12a59d4ef72aa995485e9fe1a3e64274aad47f859ad7fe310a2d9e08acccd6c1e1deae6fe55f31b5c43f languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.257.0" +"@aws-sdk/credential-provider-env@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-env@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: e268c46ff374eddb5cd5bef62a8b969a5bfd5202e15122ecbd2baa7882c99f75c2e2b6dfc0c294fcfc331e9e2028620c827278f1eec6f7158c30f079ae67dc5f + checksum: 65e95dcdaf99c6fe78a5be7d8e9d9325911436be4f2e00864e69a5656d767178206acb54902712d49b2cffe1183f5f110c53e246e7dc5e61e489214523dad43c languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.259.0": - version: 3.259.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.259.0" +"@aws-sdk/credential-provider-imds@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-imds@npm:3.266.1" dependencies: - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 tslib: ^2.3.1 - checksum: 7149bb155e9f169f6d9a4e17d16c683b5eed6f71871230f1c786b884f22fe438b3f29e6179a5538ad540f025d2eb3cfa1a4d9a1bd1e1ec495a539f8d164903da + checksum: 23e0e235ee5475a203f10016afb2d3382a8eb6e9132a68bbbb2f349a2d2457765837c68537080d75984509d59376569889036a800bb93234b4ad449368f0fe70 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.264.0" +"@aws-sdk/credential-provider-ini@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-ini@npm:3.266.1" dependencies: - "@aws-sdk/credential-provider-env": 3.257.0 - "@aws-sdk/credential-provider-imds": 3.259.0 - "@aws-sdk/credential-provider-process": 3.257.0 - "@aws-sdk/credential-provider-sso": 3.264.0 - "@aws-sdk/credential-provider-web-identity": 3.257.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: e890aeca3f215d8358cf0821abbcde5e26d6abbb421cf17dec71af57fb5d49dfc6793f257ba7810b4bc6091d9c36926009cd521d4cc116eeb71ee9614e654f39 + checksum: 0efbd9a4cd9cfb247122ac3c423fed50633a998b2e4b9ccca402b20e9a531d6205899e32f6926bbe61af7e2041646e79edc4ab2212c3e202e275c31483d70183 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.264.0" +"@aws-sdk/credential-provider-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-node@npm:3.266.1" dependencies: - "@aws-sdk/credential-provider-env": 3.257.0 - "@aws-sdk/credential-provider-imds": 3.259.0 - "@aws-sdk/credential-provider-ini": 3.264.0 - "@aws-sdk/credential-provider-process": 3.257.0 - "@aws-sdk/credential-provider-sso": 3.264.0 - "@aws-sdk/credential-provider-web-identity": 3.257.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-ini": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 4c7f4283c942c11389b0e2d06ac2099a2168b8b8e322da8f97d755e4867ae3af10881f2d05840015e6c09be42e28893b1c71132e6368ec42ab64cabe4ba43232 + checksum: b47065f93372a5565da6d76ea162e3698e8ef00bc356741c20b1d0dcf71a3e125d2b50dcde9d91d6ff29182acc109ef48c68e1834bbb2e67f528dffe7a30f2cf languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.257.0" +"@aws-sdk/credential-provider-process@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-process@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: cb34261ae87463245e4cc3ddab306201c52a8fbcfedc122ae9782bdf9263ab8fabc33cde028def52d069452a842338033829aaecfec2d0fc00547513a76c9b6f + checksum: 33f8a76a0d0fed97620dbd4afa70fffb99cc606118fa5eff1da68d16b6dc6559a15e3d4f09c96bdf2ec3db9f66b5cc0d0fb480bbd782d8c34a1b68155b1610dc languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.264.0" +"@aws-sdk/credential-provider-sso@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-sso@npm:3.266.1" dependencies: - "@aws-sdk/client-sso": 3.264.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/token-providers": 3.264.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/client-sso": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/token-providers": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 1513a9bc4dd3b1f7dcfca512c8b18d91b8a8fc741ef7b324a8a14b1d93b96c46056c319778659d10e8a523624adceb9929a81fb5dfbf48ba9cb224bc6e4db18f + checksum: e7371c6c00be75c20042ac32cc02cdeb9b054af77702490f2d75c26d6c914952be8555f3cf16956f8b0dd18603764bbf1b70ffc73e1e451e5395396e27ddaee0 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.257.0" +"@aws-sdk/credential-provider-web-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 2d3ee4975af680337cd6a9f25b6eb874201f4787ddc0217f80cb7ebb36c70424108fa8c04e5a9f0f8c2130d06685a3de3938c41b8c78e238b9faeb348c0cd361 + checksum: 16244c7a6112992b86ab1761ea150cc2652db98c8c31d0cca1f56ecaab0c9e2f38255338a0a472ba54c7ded1109a6abf86696ac624095ab3d0d264c46a99c00f languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.186.0": - version: 3.264.0 - resolution: "@aws-sdk/credential-providers@npm:3.264.0" + version: 3.266.1 + resolution: "@aws-sdk/credential-providers@npm:3.266.1" dependencies: - "@aws-sdk/client-cognito-identity": 3.264.0 - "@aws-sdk/client-sso": 3.264.0 - "@aws-sdk/client-sts": 3.264.0 - "@aws-sdk/credential-provider-cognito-identity": 3.264.0 - "@aws-sdk/credential-provider-env": 3.257.0 - "@aws-sdk/credential-provider-imds": 3.259.0 - "@aws-sdk/credential-provider-ini": 3.264.0 - "@aws-sdk/credential-provider-node": 3.264.0 - "@aws-sdk/credential-provider-process": 3.257.0 - "@aws-sdk/credential-provider-sso": 3.264.0 - "@aws-sdk/credential-provider-web-identity": 3.257.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/client-cognito-identity": 3.266.1 + "@aws-sdk/client-sso": 3.266.1 + "@aws-sdk/client-sts": 3.266.1 + "@aws-sdk/credential-provider-cognito-identity": 3.266.1 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-ini": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: f337f54ec51f10c15be66771dc37b5f71ac525d1b5bba82ba75f22c40825df6befbbdece88b1d847d3f6f2391977ff03666bbb920ad2257b49cd49757eac237e + checksum: c40dbec2449692c99020c796b025a51cc97cf08118853d4c270ece4aaf38c4ff8c89f5035cb226103d5e32c60b993da2e0c461733a42370566d3986d14456b8b languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.257.0" +"@aws-sdk/fetch-http-handler@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/fetch-http-handler@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/querystring-builder": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/querystring-builder": 3.266.1 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-base64": 3.208.0 tslib: ^2.3.1 - checksum: de25f542db072225c23403254be7ff4e642f12e348eb703cdb30a5e9b0ac5e4f18930947490f6bb27a31b8f8a462abfdd7b9344b16e41b6b52e1fe969ac95396 + checksum: 51e648770e87006390aa1f77ff253881c4128bc93304da0737666535d82e7fdf2c4335cfb9b9248bd3cc7b98bdf77624d448e1a71b81b435ab8e26eb93affb2f languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/hash-node@npm:3.257.0" +"@aws-sdk/hash-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/hash-node@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-buffer-from": 3.208.0 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 26f8f2fca7ad13a1dc64753ee1ef85014eb89adfef9f500f5003e479807c5f2ec6ee185ae8e88d6bcb68e26512702fd6886fe211486531e4388e40fd003678a5 + checksum: 86029d4041ed2e123a9667ff0e5ebdf93ab0f0a8ccf7b0e6ccfab6da83af439c4fb4289d9c3590e6b4c074fcd88af32fb3c5569e374992cb82b0421da180970a languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.257.0" +"@aws-sdk/invalid-dependency@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/invalid-dependency@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: fe99f546cc041a9ccc8b29654fd3e8e466aef41697d4c69f4afc1aab1f1f83f2e7f0b9e0e20b3fe23843a01008902f00aeeb24cf26b7df0594c75a4ebf3bb3f3 + checksum: 23b7abf4113e5220a5707fee9339428aec4142832aa658ea41f57014b906b6dfd004a0f6243941716fa8fdf960c9e67139a1632a34aab3ddce061b5d2ac79aeb languageName: node linkType: hard @@ -433,277 +433,277 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.257.0" +"@aws-sdk/middleware-content-length@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-content-length@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 4f6129653b98185624c66bf2114417d492ec3cf91063da4cbce0e07ad3b1831766ff684491f0c14f92c8b9b39599a9781ca883f2d5ee42c3d38b273b6664f361 + checksum: 967a71c66192645e4c0079d346104340350719e67bbf9500d439285a5a25cfe971f3bf2e1f1b0917c0295dcedbbf59548cb262badc812cd670794addd9d97e0f languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.264.0" +"@aws-sdk/middleware-endpoint@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-endpoint@npm:3.266.1" dependencies: - "@aws-sdk/middleware-serde": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/signature-v4": 3.257.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/url-parser": 3.257.0 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.257.0 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: acc16091000c5b6fec37d3376c24768aa5a52a27b1cfcc7f2348735227e5e53c4d2c4aba27b9ec80b450d51e6c70358cc72c3104716c7e1a02df00c97bcdf896 + checksum: a257923e92cd3c7a666b3eb4979a084b46174b5b8ce5d472ea85616c5cdc8a5eaf2c09f37fa08b3cbd8721480f81c1ee2421358066f44904a1acb527a39ab802 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.257.0" +"@aws-sdk/middleware-host-header@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-host-header@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 426f6a6a9964ef993d4e7d8401162b62f758a7247872c6b58163d40ec8320738a84dbd2dbaccd008b24801642f6fd2d24b6af11331f00a204ed48e814f1e6e3c + checksum: 6129af9e5727c261110332cf585a5210109ed979b2214e2c8a446d0840eb7733184ae372d36bbcb02b53f29f27da7da819e13041e3255ee6302a562d65f63290 languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-logger@npm:3.257.0" +"@aws-sdk/middleware-logger@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-logger@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 3b4ac39d4be50dde9b806500a50a6d2c4ab267f6e02e780fe70adf0d07f4026c09131e3f787d86833f4295987cbad6858839884d1c5f1ea56df729fc4a8d7d49 + checksum: 73e080974f40de5e0208b8075138abcbc2e15af9ac18c78c31a635b5e000445ca2e4f8d11807dc5333f44fb9620b35027f3d1c1994df8f55dbacf4b3a156ae33 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.257.0" +"@aws-sdk/middleware-recursion-detection@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: ce972140735fb040d00e1356409beac6dc5d9c477f975c73776de8294a91f81ac2a87e11c02581ff6c8b8c6f84e455e77a081291bbc536d22c9e128b07928fcd + checksum: 87a9c6678e12930ec722aaf8bc5698274d4c397a37846ea1e66e2beeecf5833e27366981c43e5c67a6b7704c62ce53dc135813ac8eb0bba47ee43de31834c666 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.259.0": - version: 3.259.0 - resolution: "@aws-sdk/middleware-retry@npm:3.259.0" +"@aws-sdk/middleware-retry@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-retry@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/service-error-classification": 3.257.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/util-middleware": 3.257.0 - "@aws-sdk/util-retry": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/service-error-classification": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/util-middleware": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: 22ae9d575cafbc9c3806a10871e2b6749d12b8109bc15e8eabe82e24613dc60196c2ab48df62fcf39e3dae33319146a58d3983c51a68c6c1da89e941ac2d4efa + checksum: a98e28dbd6f1f41224cc06f303f5d75015b42155faced7e93eeed8e2fe8e88783c4d244502a3f2b3c18917cc75c75c0547935d99cbeaa943131ca06156f66c7c languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.257.0" +"@aws-sdk/middleware-sdk-sts@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.266.1" dependencies: - "@aws-sdk/middleware-signing": 3.257.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/signature-v4": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 9171f0fc8a9518b8344c58f26446c9b39a19d00b747f2ae02b92b022d8fdcdb65528f05e753999676b3c04bffa38d008a599d86c2e0fa65b2196cd9633ab4308 + checksum: 4240ab1728aee65de365416a43194b3171f1010b1000e1ef0c3581c8994ad53e756a60a8f80fdad40322f8cf2ca47074d7de7b0728edfa7e922d617fcddb3d34 languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-serde@npm:3.257.0" +"@aws-sdk/middleware-serde@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-serde@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: ceda3cb7bb7ceced0d5b69363dca51fa92b4f6defcd8299910eee0fe65d557871aa7777dade4abc64aa91347d038727fa65ff7ff0cc3d9716d0065dfd939c724 + checksum: 7512e4fc336f132d0ee816def4eb69caefc89b13dd553a075d2463bc552577b04aef543ae0629fd20b1114a0b78f46c073fda94e7ed617b5115575ecee8fab89 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-signing@npm:3.257.0" +"@aws-sdk/middleware-signing@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-signing@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/signature-v4": 3.257.0 - "@aws-sdk/types": 3.257.0 - "@aws-sdk/util-middleware": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: dfa31f59675427f7aff83852f24e2393bd7d1295421d68c2bb060faca001ce385d7a1d7231c92c48e841e58581ceeffef0209c7c91b51b19361af29120342a50 + checksum: f5e7fbd258566016e2a70f8b683d4feddbdd8401fa6a0842911879f1b5ec5543473a05b6b1ae1c4d8116cb2f596ceb169bf80b01798bf1363cc8800a2554e363 languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-stack@npm:3.257.0" +"@aws-sdk/middleware-stack@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-stack@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: f7520d3e53d026f46c6504bcebef2a5732b724ab79079ccd2db0c052f6d4fd3cc4f06b951ff02723ef9ba46c6a0a0deca3282f152172ae7b1c3b2f493d35d584 + checksum: 112eee2473ce83d4f994adc6d7ae64b0f41d5d331dbcce3db2af7576d7a6be25dd0b8c1fad1758b6db904276e4c18d30a7bdb886c9edb76853e2cd44c215060d languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.257.0" +"@aws-sdk/middleware-user-agent@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-user-agent@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: b2fc45a734845d40d1e69bf7f0890613aad8357d4830f704c7ee6c1339ab51cbb0cef51920dc22718d29eb258fc1024f8c23cbc53a4f93b9b857f8bcacc442a1 + checksum: 78b45ba6aacc2329eb604e186490e15d16f7566320e216c36983a68393d4ffdfe08ed5a6bbc5f920546c86fd0a1b4eebd859520e0beb9a4e097c0bbbb01d32ee languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.259.0": - version: 3.259.0 - resolution: "@aws-sdk/node-config-provider@npm:3.259.0" +"@aws-sdk/node-config-provider@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/node-config-provider@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 72e4818b1ab641d1aa3b85c7901f7d64ad0399eb384cda1c875b41a37021c2be9e68021e6b0aa3f7298d2d46017259ee10356f07c314b4bc40146a44f355135a + checksum: 43b0d7090f468d944668efe97b17fa7eb939ee6eb653ab50d9953d5d13bffd552430c29c0c1a29bf11ecd788c4ce5e4ba19f699176994a5e51f7b90e6b2e98cc languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/node-http-handler@npm:3.257.0" +"@aws-sdk/node-http-handler@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/node-http-handler@npm:3.266.1" dependencies: - "@aws-sdk/abort-controller": 3.257.0 - "@aws-sdk/protocol-http": 3.257.0 - "@aws-sdk/querystring-builder": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/abort-controller": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/querystring-builder": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 37531827bc9e0b590c67ce57b87315fab8639a5feff1cb6cda8effdf6ac2d2fbc8a645765f004b52b03ff39c896da88a090b0dbcf5cfcf5d3d65d0b995f628fb + checksum: ba25899f96bfd9f19b655dd0c750720570a9ff73686694b15452a5d096cf0cb4f2aed78797744ba7928660170ebda3a9e891a47d18377bb6a51d0aee3f9c1c77 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/property-provider@npm:3.257.0" +"@aws-sdk/property-provider@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/property-provider@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 066290e9b88bcbc7d6bace37482ce955c782386a6cd75dc789efeb368bc87d0c410d01fd6b25bf66918e3328c6ffe1942aa643f4fdd4fa604feee36af9114894 + checksum: 0c235a18fa09db1475da0d4138dbd4d78b4941d9c7e79291fbd7858b98431c2c88bafd3b62b30e7800ffd4f19dd4f0bb5fd540cb1ab4deeafd25b55f0b5116a1 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/protocol-http@npm:3.257.0" +"@aws-sdk/protocol-http@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/protocol-http@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: c51539e2f617d5d84e51ad9feeb93d51a310d808da18ceb53317aaf35af99bb8bea52eca532ab68d546b0ff5156b92cef5c3e98245f0b425795bd7910b608dad + checksum: 9b8121561f7c00cf3b8bcf3ff998e6368b81c38069f9e93f84bb28c4c895166e8f94ce278fa89cb9aecbb35b5cc773fbbde12bd30c74868b74df8fc8e22b23b0 languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/querystring-builder@npm:3.257.0" +"@aws-sdk/querystring-builder@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/querystring-builder@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: a66b07cd1c4af544c7c6f903a735d1e8359f7d3b5c74803fc63b16b854eafec21f4b1c8874761edeebc4c2341f1f0b72190f03e0a005e8fff7b619e30cd59896 + checksum: a0a6c16b304f82b68720f2b9ceb82c86f404f5de68df196688c334b1827bf459c08a4a5404b81a3c9f241c943b16e1f4e37aa49266eba730f4b2a73e25c66749 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/querystring-parser@npm:3.257.0" +"@aws-sdk/querystring-parser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/querystring-parser@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: cd391b7993a8e2397e3f0abd25e9b0b43747fe1b1415e9c5af6a3895567bb8dc9267d97e7d494c504f721b0b868bf9e0b93ec3677a5a7bc4ef2ff7252a402985 + checksum: 2299ddf861304609384b05e88c1bc51eb88d38635b117a1f8f1a29418b3baee761deb62f7cb2bb01c45e48d723aaaef6b4f28a6fc7bd7def27dc4ce1287e9dcd languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/service-error-classification@npm:3.257.0" - checksum: 231440f52a1c6c6d5ab62c13491736273fda49bb68bc278954dfaa3b7fa874946576c87a529504d6268472e646b3235cacb5c0fe5acc9af2398d87a56fabda3d +"@aws-sdk/service-error-classification@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/service-error-classification@npm:3.266.1" + checksum: a850854dba4fc0db74338bb3651900bd32c6ccd12ae15e1747a9a93487188a63ce7908b55af9d1a1354dc3d763fc957f0287665965a3b2b2f44fbcfc0af79d1b languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.257.0" +"@aws-sdk/shared-ini-file-loader@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 27738db81e2b9c8e0bd248e1c0ed7f21b65b52204b247cb8119b3b48b55844c2450e5fe20bb1193311177a8a18e8bb99594d3bfde71dacd1ee9ed8bbad9a915b + checksum: abafbdcc580688726a36879f30e875b3d5e1780a8a47054cdd0f9ae9289f325de19d3c23c6c94f94abf57685c02a5950e69d389c66a0b8eb7e7e33e53da4c4bc languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/signature-v4@npm:3.257.0" +"@aws-sdk/signature-v4@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/signature-v4@npm:3.266.1" dependencies: "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.257.0 + "@aws-sdk/util-middleware": 3.266.1 "@aws-sdk/util-uri-escape": 3.201.0 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 6faf6a3d8f51603240f6375b76bfd031223aa5cf1f0385cfa97833e6b188fb9b746caab53a45d0e7a311ca9735c82b56c67aed68b1fbcdf4bbcbf93e288fd09f + checksum: e225a352293a7ed869e8dd4a65a763b828375a40ef71b17ac453fcca551350b1b792924b8f4f5e3bdb1fabf8b2e5647b457f5a333bf31eb1cbb17a8481b2064b languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.261.0": - version: 3.261.0 - resolution: "@aws-sdk/smithy-client@npm:3.261.0" +"@aws-sdk/smithy-client@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/smithy-client@npm:3.266.1" dependencies: - "@aws-sdk/middleware-stack": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 1394ce351d52bc3bd17b484acbfb9171a57203b64741a21d1f8c9d89443f165186539194d463ccdd2dfad18a981ff9561088d2d2c52e0467d8225400312b5486 + checksum: 5a988a7c49aa098fdcfc5448931690d7b1c13600df4277a17c3d0436519a99148222d0a813f1f22d7eb7f835d2a824d76ced2798859b4bca4b99088a07c8df89 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.264.0": - version: 3.264.0 - resolution: "@aws-sdk/token-providers@npm:3.264.0" +"@aws-sdk/token-providers@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/token-providers@npm:3.266.1" dependencies: - "@aws-sdk/client-sso-oidc": 3.264.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/shared-ini-file-loader": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/client-sso-oidc": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 394d495dbd2561c88ee8a9abbe0e2a44a558f876dddb345f660a37ece01e04e321e616d3973475dd2efd972e382bb89ea7ac8a60e8be6c20a855daf5981ad5c9 + checksum: a908c921b0178983f2bf32e7f40ba6800371776b826af1a530640922c4ee6eedd5e3bc99d25c2ecac3af3cbf36c63d564a342bfc6992d550899499043debdb83 languageName: node linkType: hard -"@aws-sdk/types@npm:3.257.0, @aws-sdk/types@npm:^3.222.0": - version: 3.257.0 - resolution: "@aws-sdk/types@npm:3.257.0" +"@aws-sdk/types@npm:3.266.1, @aws-sdk/types@npm:^3.222.0": + version: 3.266.1 + resolution: "@aws-sdk/types@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: eab2154f7d27d0bec29df41374481652525e1658ad987c64ed02cbe7b7388c563e6a8d317c8fc564ac6fbd97c98be700a29352c9acebc3903cf3305431bf0a86 + checksum: 3557812663158ce0bcabdc00ecd25e97d4ba046aa68cf4aaf21e01a75743591299218822b5bcb23468755bb063f452eedc087e692af0f913d0ae97faf978029a languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/url-parser@npm:3.257.0" +"@aws-sdk/url-parser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/url-parser@npm:3.266.1" dependencies: - "@aws-sdk/querystring-parser": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/querystring-parser": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 3b781c7fe94572e673e0651a47806cf023f60fb1268d2abbad9364c70112b1ad37d2261f631e0d7ce5c5ec543faa7e316d987e519091db68bf121384ad557043 + checksum: 01f76b3fec2d1a5a2597d4f92704796ce689f9c2621f68e4f02fa0081c5ecc0e4459a17bd8fa4882bec41f14f059fa322620b949ab3bd39bea4c27eb5081cc4d languageName: node linkType: hard @@ -754,39 +754,39 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.261.0": - version: 3.261.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.261.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 218c97dc362549796a318048d496f8e105d023dd040ecf811c1cab8bc807c80afb43b8cae8bb6ac3c87f5bdfe07f9248fccd825554287cb5c39f84dddcb521b1 + checksum: 8b3169915d2fd281bbab245ed6e2544bd0c7723994eff30ec6ca0bd777751aa5075b25fe6c4ef371332321c368542d2dc5e2113613b4444c669ed9ba6a6ac30f languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.261.0": - version: 3.261.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.261.0" +"@aws-sdk/util-defaults-mode-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.266.1" dependencies: - "@aws-sdk/config-resolver": 3.259.0 - "@aws-sdk/credential-provider-imds": 3.259.0 - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/property-provider": 3.257.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: d784ae1aaf51640b0b591028b91522c8c6dc58558245c6dfcd253adbfcc42e2496d4f8139df47b8b9932edd5eccbcdf8829a5d0adcf91b634ff8a506934d4399 + checksum: 80a72df6f16d2b43cf6223ffc46b4f3d7835f5b600bb21d4cd30f87416b726ca27a5f8ab66ad92a2bf78b8f279698bf5a5c8e0802ce4899dd974f30d8c7b9ac6 languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/util-endpoints@npm:3.257.0" +"@aws-sdk/util-endpoints@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-endpoints@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: ba1aec13c8ceb9519400f2c77db1743b34dec4380b27598a8862e94c9df43e3e8b4e183f230fb6bdaaeb89653d232e6a13dcc2016c6a9d12246f58b630fd3ec0 + checksum: 6455e89e44da247d288b83ee21c1c5d10e69d1e0c8419a4b3c765ef57015461e5193c9f40b5348975650efbda832ed51455b903836fa2d81906a232b9b7b7422 languageName: node linkType: hard @@ -808,22 +808,22 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/util-middleware@npm:3.257.0" +"@aws-sdk/util-middleware@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-middleware@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: 77ac007288fa98ec55c10af5a097f7f829d7ec53b6eecc43bc00a18b9ea011194aec42fb69e58421f87363490cef89b811330eaf174739fdf6b810b40cd46768 + checksum: fbd023ff6bf828bc6d117316dc2fa79273c5dede1e9cb493e40b890dbcf362d2fe1252a3a99f4f5458e3e8262acee4887def23ec3575e88410b1f307eaaecb3f languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/util-retry@npm:3.257.0" +"@aws-sdk/util-retry@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-retry@npm:3.266.1" dependencies: - "@aws-sdk/service-error-classification": 3.257.0 + "@aws-sdk/service-error-classification": 3.266.1 tslib: ^2.3.1 - checksum: 7d7054c5a73f3acaf59b620386ad0a6226ec6b2761e5c59f304694f8a7f5cb8ab0eb7d51be102e81d6e2a5ec97b20bd8814cf245ff44fcc5587d4e5b80a3b892 + checksum: ab3e0c2b3d41ffa3f623d8dfbf3af7b34e876f5a049edf0ec2c5a4054143c0d8adb3bc75309e2ad416bae9b52fb9b51bd688c0b32a85c9b210cc1af1e1d4a41a languageName: node linkType: hard @@ -836,30 +836,30 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.257.0": - version: 3.257.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.257.0" +"@aws-sdk/util-user-agent-browser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.257.0 + "@aws-sdk/types": 3.266.1 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: f475d6096ff92ba2292de6cc78e2e1512df96c7fff3d8ef39148884533c14cc341a84ce3c4969f78cca2d8d4098c4cefefd72edf7cb480c33f8597f5828245c3 + checksum: 41470a0c939499c26d6b474246dfed2e3152ce987d375550101c7257a6c698af94f3c39bc627e0bef37e73d7504570a0228d1e602fed9f1b7810f4f2f562a51f languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.259.0": - version: 3.259.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.259.0" +"@aws-sdk/util-user-agent-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-user-agent-node@npm:3.266.1" dependencies: - "@aws-sdk/node-config-provider": 3.259.0 - "@aws-sdk/types": 3.257.0 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: ed2ae75ef0ccd5f58f16887c8cfd521006e8efaa8431420d1b55c3f885c501bbb06e6a4f262c0239a88fbec9100923cd277b4539838df9fe9f391c411c5767ee + checksum: 81af2cf5c3cf622fb74db4e3a7f4fd937373d272e5845e8bd5beea38200b703e4322fbb637a0872a6de425306eb75d045f4a8fb32dd55fb5b685097b0ee8c8f0 languageName: node linkType: hard @@ -962,11 +962,11 @@ __metadata: linkType: hard "@bot-whatsapp/bot@npm:*": - version: 0.1.20 - resolution: "@bot-whatsapp/bot@npm:0.1.20" + version: 0.1.21 + resolution: "@bot-whatsapp/bot@npm:0.1.21" dependencies: dotenv: ^16.0.3 - checksum: ae60019b03a59cce075bb348ae620d6452ee7cc143a512e2f471fb9b28f46bc1e51c01ae694d37d6a1e5164833ea16010127651b7d104944fddcba3d93dd3780 + checksum: 36ea185ea7d60653373a6ef8f594257bcb7f14f66f07f9ceec4483c9ca2126aa4e6d4b6c28df7c558a59200b63a2b1d7c251686073e6d4d0e7d4ee66c3504381 languageName: node linkType: hard @@ -983,11 +983,11 @@ __metadata: linkType: soft "@bot-whatsapp/cli@npm:*": - version: 0.1.20 - resolution: "@bot-whatsapp/cli@npm:0.1.20" + version: 0.1.21 + resolution: "@bot-whatsapp/cli@npm:0.1.21" bin: bot: bin/cli.js - checksum: 1453df4eb9e8707fd906e5b841e71948c40362efbe7a9f2a98419fdd21c5ac114efc7dd441cd2fba28892f601482100af44f8aae98122af1dcbea31fd8680330 + checksum: 495da00960837b0581a23335ed0193e3a725599b9ed95ae66922c78106559f46fc6e047d9d2ff8abbc76a072f335ef7bd744d5a402e52c80321674b9b323e1f1 languageName: node linkType: hard @@ -1013,13 +1013,13 @@ __metadata: linkType: soft "@bot-whatsapp/database@npm:*": - version: 0.1.20 - resolution: "@bot-whatsapp/database@npm:0.1.20" + version: 0.1.21 + resolution: "@bot-whatsapp/database@npm:0.1.21" dependencies: dotenv: ^16.0.3 mongodb: ^4.11.0 mysql2: ^2.3.3 - checksum: 179a4af011fa8920041a35484f518021b7b1fc8f1ddd2e32c7ca62e0a8b8d5ad98f0946cceb95fc1ebeae3b07227691d145311e9dad9613af0f7e2ee4fa38de7 + checksum: 8be2e79b4d5344432d28c6cc088c36a46aa86aa2609b2c279280a45f4a2c34c53460f3752fc1abca1667b1eb979819ef29d7d9def3dd38e09b929bd828c097f2 languageName: node linkType: hard @@ -1059,14 +1059,14 @@ __metadata: linkType: soft "@bot-whatsapp/provider@npm:*": - version: 0.1.20 - resolution: "@bot-whatsapp/provider@npm:0.1.20" + version: 0.1.21 + resolution: "@bot-whatsapp/provider@npm:0.1.21" dependencies: "@bot-whatsapp/bot": "*" combine-image: ^1.0.3 qr-image: ^3.2.0 rimraf: ^3.0.2 - checksum: abe92dc0e2043aad576dd95c449af73f0c02ac3c66d2cb977a473bd7a9a60347ad7d2452afa989c41bc8d0d0183bbbf0e67d087ded26e97e5ec9fa55a79d7575 + checksum: 0e45faa755ab973820d95be964d4079d8cb9b98599e8d30c5bb774c2dc348d90820bcf03f23f92f16f34cee2e0c884c69376ac55019a805fc9b230be3e2b1b44 languageName: node linkType: hard @@ -1099,7 +1099,6 @@ __metadata: eslint-config-prettier: ^8.5.0 fs-extra: ^11.1.0 git-cz: ^4.9.0 - got: 11.8.3 husky: ^8.0.2 mime-types: ^2.1.35 only-allow: ^1.1.1 @@ -1805,11 +1804,11 @@ __metadata: linkType: hard "@iconify-json/tabler@npm:^1.1.49": - version: 1.1.57 - resolution: "@iconify-json/tabler@npm:1.1.57" + version: 1.1.58 + resolution: "@iconify-json/tabler@npm:1.1.58" dependencies: "@iconify/types": "*" - checksum: 63d837bd77889df99b8aa6684efb105da86049e4e0093a4fc699b21703675f8faab529f64a88b680e422f46ef0a4175d8a72c69d2b4d65676b4a8e205dbbdec1 + checksum: 4ffa89fcf9ca4b45be4ebebc3b7a2c576bbf5575566077dc5502ec73599fd22e2e1153f3fdd8748fe557489b4bdec32d929aa95f4fd583b65b6a4a395b40abb5 languageName: node linkType: hard @@ -2914,13 +2913,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 - languageName: node - linkType: hard - "@sindresorhus/is@npm:^5.2.0": version: 5.3.0 resolution: "@sindresorhus/is@npm:5.3.0" @@ -2965,7 +2957,7 @@ __metadata: languageName: node linkType: hard -"@szmarczak/http-timer@npm:^4.0.0, @szmarczak/http-timer@npm:^4.0.5": +"@szmarczak/http-timer@npm:^4.0.0": version: 4.0.6 resolution: "@szmarczak/http-timer@npm:4.0.6" dependencies: @@ -3179,7 +3171,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.31": +"@types/express-serve-static-core@npm:^4.17.33": version: 4.17.33 resolution: "@types/express-serve-static-core@npm:4.17.33" dependencies: @@ -3191,14 +3183,14 @@ __metadata: linkType: hard "@types/express@npm:*": - version: 4.17.16 - resolution: "@types/express@npm:4.17.16" + version: 4.17.17 + resolution: "@types/express@npm:4.17.17" dependencies: "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.31 + "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 43f3ed2cea6e5e83c7c1098c5152f644e975fd764443717ff9c812a1518416a9e7e9f824ffe852c118888cbfb994ed023cad08331f49b19ced469bb185cdd5cd + checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da languageName: node linkType: hard @@ -3359,7 +3351,7 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@latest, @types/node-fetch@npm:^2.1.6": +"@types/node-fetch@npm:^2.1.6, @types/node-fetch@npm:latest": version: 2.6.2 resolution: "@types/node-fetch@npm:2.6.2" dependencies: @@ -3369,10 +3361,10 @@ __metadata: languageName: node linkType: hard -"@types/node@latest, @types/node@npm:*, @types/node@npm:^18.11.18": - version: 18.11.18 - resolution: "@types/node@npm:18.11.18" - checksum: 03f17f9480f8d775c8a72da5ea7e9383db5f6d85aa5fefde90dd953a1449bd5e4ffde376f139da4f3744b4c83942166d2a7603969a6f8ea826edfb16e6e3b49d +"@types/node@npm:*, @types/node@npm:^18.11.18, @types/node@npm:latest": + version: 18.13.0 + resolution: "@types/node@npm:18.13.0" + checksum: 4ea10f8802848b01672bce938f678b6774ca2cee0c9774f12275ab064ae07818419c3e2e41d6257ce7ba846d1ea26c63214aa1dfa4166fa3746291752b8c6416 languageName: node linkType: hard @@ -3444,6 +3436,13 @@ __metadata: languageName: node linkType: hard +"@types/triple-beam@npm:^1.3.2": + version: 1.3.2 + resolution: "@types/triple-beam@npm:1.3.2" + checksum: dd7b4a563fb710abc992e5d59eac481bed9e303fada2e276e37b00be31c392e03300ee468e57761e616512872e77935f92472877d0704a19688d15a726cee17b + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" @@ -3650,10 +3649,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.50.0": - version: 5.50.0 - resolution: "@typescript-eslint/types@npm:5.50.0" - checksum: 1189c63d35abeec685dd519fd923926b884e63d5e10e4a9fe995aebfde59b8a2e10773090ec3ba32a0ec408746b18f6a454d9bedb0b6c7ce8b6066547144fb4d +"@typescript-eslint/types@npm:5.51.0": + version: 5.51.0 + resolution: "@typescript-eslint/types@npm:5.51.0" + checksum: b31021a0866f41ba5d71b6c4c7e20cc9b99d49c93bb7db63b55b2e51542fb75b4e27662ee86350da3c1318029e278a5a807facaf4cb5aeea724be8b0e021e836 languageName: node linkType: hard @@ -3694,11 +3693,11 @@ __metadata: linkType: hard "@typescript-eslint/typescript-estree@npm:^5.13.0": - version: 5.50.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.50.0" + version: 5.51.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.51.0" dependencies: - "@typescript-eslint/types": 5.50.0 - "@typescript-eslint/visitor-keys": 5.50.0 + "@typescript-eslint/types": 5.51.0 + "@typescript-eslint/visitor-keys": 5.51.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -3707,7 +3706,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: cb1ac8d39647da6d52750c713d9635750ed41245ec82f937a159a71ad3bf490ebabfad3b43eeca07bca39d60df30d3a2f31f8bed0061381731d92a62e284b867 + checksum: aec23e5cab48ee72fefa6d1ac266639ebabf6cebec1e0207ad47011d3a48186ac9a632c8e34c3bac896155f54895a497230c11d789fd81263b08eb267d7113ce languageName: node linkType: hard @@ -3767,13 +3766,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.50.0": - version: 5.50.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.50.0" +"@typescript-eslint/visitor-keys@npm:5.51.0": + version: 5.51.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.51.0" dependencies: - "@typescript-eslint/types": 5.50.0 + "@typescript-eslint/types": 5.51.0 eslint-visitor-keys: ^3.3.0 - checksum: 55319cb7ee7b78d07d9dc67a388d69fe0b7f11cbc79190e17e7f87a39c9992d08dab3b5872d5a7f01094dda28ad6ac61d3573e59015ef70bf138d4c4f8c45b88 + checksum: b49710f3c6b3b62a846a163afffd81be5eb2b1f44e25bec51ff3c9f4c3b579d74aa4cbd3753b4fc09ea3dbc64a7062f9c658c08d22bb2740a599cb703d876220 languageName: node linkType: hard @@ -5096,13 +5095,6 @@ __metadata: languageName: node linkType: hard -"cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d - languageName: node - linkType: hard - "cacheable-lookup@npm:^7.0.0": version: 7.0.0 resolution: "cacheable-lookup@npm:7.0.0" @@ -5111,17 +5103,17 @@ __metadata: linkType: hard "cacheable-request@npm:^10.2.1": - version: 10.2.6 - resolution: "cacheable-request@npm:10.2.6" + version: 10.2.7 + resolution: "cacheable-request@npm:10.2.7" dependencies: "@types/http-cache-semantics": ^4.0.1 get-stream: ^6.0.1 - http-cache-semantics: ^4.1.0 + http-cache-semantics: ^4.1.1 keyv: ^4.5.2 mimic-response: ^4.0.0 normalize-url: ^8.0.0 responselike: ^3.0.0 - checksum: 273d6cbcec025d2922a641c72eeb7e566963cc68da99248ff83053c9b140fe46ae1a856e7e8855378112d8d342ff2ec9398d1552a3a8ce4af8fbc21c606bda1f + checksum: 25cfbe0cab755bcee3bf6610b0253414e583289f795a28035616bf3186ecb303e8caf1943cbf42d92410b3f24124a1cdd663dd8ff52ac2c997a5129de5e9557a languageName: node linkType: hard @@ -5155,7 +5147,7 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^7.0.1, cacheable-request@npm:^7.0.2": +"cacheable-request@npm:^7.0.1": version: 7.0.2 resolution: "cacheable-request@npm:7.0.2" dependencies: @@ -5270,9 +5262,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001426, caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001450 - resolution: "caniuse-lite@npm:1.0.30001450" - checksum: 511b360bfc907b2e437699364cf96b83507bc45043926450056642332bcd6f65a1e72540c828534ae15e0ac906e3e9af46cb2bb84458dd580bc31478e9dce282 + version: 1.0.30001451 + resolution: "caniuse-lite@npm:1.0.30001451" + checksum: 48a06a7881093bb4d8a08ed5428f24a1cbdaa544b0a6f0c3614287d4f34b6c853e79a0f608a5bd901c27995f5e951825606fba11e7930251cc422bd61de9d849 languageName: node linkType: hard @@ -7437,9 +7429,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.284": - version: 1.4.284 - resolution: "electron-to-chromium@npm:1.4.284" - checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + version: 1.4.289 + resolution: "electron-to-chromium@npm:1.4.289" + checksum: 1f67b7f247d3212d91439e37ba36ddc9e0e410ff679047a16ce2ff1b264280ce4b3ddaa22c290a3f2eee54764d53ccf49db791bf23dd43a8fbd350f46ba3e7a8 languageName: node linkType: hard @@ -7610,9 +7602,9 @@ __metadata: linkType: hard "es-module-lexer@npm:^1.0.0": - version: 1.1.0 - resolution: "es-module-lexer@npm:1.1.0" - checksum: 3e9f5019b69c6b2f04eb8478c4fdb4ed72cb8b4c97511b5dd39c1f498386ed8f5083c32067c15efcfabc7e8460cb65ed4627dd32405475715a898009922f41fa + version: 1.1.1 + resolution: "es-module-lexer@npm:1.1.1" + checksum: 1eba6029faa74b8bf6ab0619f8e5a407ded87be6df3ea3831325166ecf9323d69e389b2a4403339e79c94f43e9dd9823580d5bbc5dfad7c6920ed4830575dc75 languageName: node linkType: hard @@ -8761,11 +8753,11 @@ __metadata: linkType: hard "fast-querystring@npm:^1.0.0": - version: 1.1.0 - resolution: "fast-querystring@npm:1.1.0" + version: 1.1.1 + resolution: "fast-querystring@npm:1.1.1" dependencies: fast-decode-uri-component: ^1.0.1 - checksum: 912e55326733004ac15ee6c759a319ed01117c23953d93ff28f64b230e76ba22cdf14722fb01c1045d80c6d565e39a6ae18b89f05faa576862036e0a4ccff473 + checksum: 86d2b75b9b299a552353532fb1a542f09730ee2a61e657d68710971d9a2afc9a3c5c7b7e106b6534f4cc506d2ff1c08ab0fda4ae614b4e7720798c9ac2a88e02 languageName: node linkType: hard @@ -9989,25 +9981,6 @@ __metadata: languageName: node linkType: hard -"got@npm:11.8.3": - version: 11.8.3 - resolution: "got@npm:11.8.3" - dependencies: - "@sindresorhus/is": ^4.0.0 - "@szmarczak/http-timer": ^4.0.5 - "@types/cacheable-request": ^6.0.1 - "@types/responselike": ^1.0.0 - cacheable-lookup: ^5.0.3 - cacheable-request: ^7.0.2 - decompress-response: ^6.0.0 - http2-wrapper: ^1.0.0-beta.5.2 - lowercase-keys: ^2.0.0 - p-cancelable: ^2.0.0 - responselike: ^2.0.0 - checksum: 3b6db107d9765470b18e4cb22f7c7400381be7425b9be5823f0168d6c21b5d6b28b023c0b3ee208f73f6638c3ce251948ca9b54a1e8f936d3691139ac202d01b - languageName: node - linkType: hard - "got@npm:^10.7.0": version: 10.7.0 resolution: "got@npm:10.7.0" @@ -10366,8 +10339,8 @@ __metadata: linkType: hard "hast-util-to-estree@npm:^2.0.0": - version: 2.2.1 - resolution: "hast-util-to-estree@npm:2.2.1" + version: 2.3.0 + resolution: "hast-util-to-estree@npm:2.3.0" dependencies: "@types/estree": ^1.0.0 "@types/estree-jsx": ^1.0.0 @@ -10384,7 +10357,7 @@ __metadata: style-to-object: ^0.4.1 unist-util-position: ^4.0.0 zwitch: ^2.0.0 - checksum: 999107a387cac66c56ac4b214dc73918b6618a3f10dfb1ed40bf10c325595127835cfec5d71a1be925250d5d96f22b6d04af90cb7616b8f01ba7d4f5e2df33ed + checksum: 22b59f9ae1dc5f8dd6dd5d187640055fa8919cc98dd55484554a7e81cc7c0fb1b16221043e168a877ce177efdd4fc98df1db877be5c5a005324bb06e6b1b85d0 languageName: node linkType: hard @@ -10472,7 +10445,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 @@ -10567,16 +10540,6 @@ __metadata: languageName: node linkType: hard -"http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" - dependencies: - quick-lru: ^5.1.1 - resolve-alpn: ^1.0.0 - checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e - languageName: node - linkType: hard - "http2-wrapper@npm:^2.1.10": version: 2.2.0 resolution: "http2-wrapper@npm:2.2.0" @@ -12638,15 +12601,16 @@ __metadata: linkType: hard "logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.4.2 - resolution: "logform@npm:2.4.2" + version: 2.5.1 + resolution: "logform@npm:2.5.1" dependencies: "@colors/colors": 1.5.0 + "@types/triple-beam": ^1.3.2 fecha: ^4.2.0 ms: ^2.1.1 safe-stable-stringify: ^2.3.1 triple-beam: ^1.3.0 - checksum: 3d00f4e1ccaf0a86886aabbf66d1f1d207441d5b408f103457da6d64d055aee76c02af4b40a31ca77a1db4cbcdecb007149f731536c39cbd89b7b6ba3dda6d7b + checksum: 08fdf03be5bb69af33bac214eb4f6a0c83ad3821a30de498925fccb61e993e5a4a87470aab356ca2110c11e4643685bed5597ca5f46dd1cd11437c44a0e0e3c2 languageName: node linkType: hard @@ -12958,13 +12922,15 @@ __metadata: linkType: hard "mdast-util-mdx@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-mdx@npm:2.0.0" + version: 2.0.1 + resolution: "mdast-util-mdx@npm:2.0.1" dependencies: + mdast-util-from-markdown: ^1.0.0 mdast-util-mdx-expression: ^1.0.0 mdast-util-mdx-jsx: ^2.0.0 mdast-util-mdxjs-esm: ^1.0.0 - checksum: 4744bfbbd337c2a99a3ef339673c549a670d6496e0d3a6d747d2451e112d6fef7d27613549b0bd62a5f92ea7919e3bacd78c731e8a3d80552a09b80896554cf6 + mdast-util-to-markdown: ^1.0.0 + checksum: 7303149230a26e524e319833b782bffca94e49cdab012996618701259bd056e014ca22a35d25ffa8880ba9064ee126a2a002f01e5c90a31ca726339ed775875e languageName: node linkType: hard @@ -12992,19 +12958,18 @@ __metadata: linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.2.6 - resolution: "mdast-util-to-hast@npm:12.2.6" + version: 12.3.0 + resolution: "mdast-util-to-hast@npm:12.3.0" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 mdast-util-definitions: ^5.0.0 micromark-util-sanitize-uri: ^1.1.0 trim-lines: ^3.0.0 - unist-builder: ^3.0.0 unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: abc3ab03ed00715df58f87b3b5abaeb5ed01d1bf92940a9856c35a022ef6a41a220b3543a8c1238804a63b602057817de16666aaae177efa07e4d65d8ca6e13d + checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb languageName: node linkType: hard @@ -13726,9 +13691,9 @@ __metadata: linkType: hard "minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass@npm:4.0.1" - checksum: 48eb3141cc247b44f738944cbd789aedeed9288ebdb64c7de9b3bf23e9e71d611381bfecf643d877d25f7ca9f3d5ab7b6757ef6f46282086812ac5372b7cd291 + version: 4.0.3 + resolution: "minipass@npm:4.0.3" + checksum: a09f405e2f380ae7f6ee0cbb53b45c1fcc1b6c70fc3896f4d20649d92a10e61892c57bd9960a64cedf6c90b50022cb6c195905b515039c335b423202f99e6f18 languageName: node linkType: hard @@ -13819,8 +13784,8 @@ __metadata: linkType: hard "mongodb@npm:^4.11.0": - version: 4.13.0 - resolution: "mongodb@npm:4.13.0" + version: 4.14.0 + resolution: "mongodb@npm:4.14.0" dependencies: "@aws-sdk/credential-providers": ^3.186.0 bson: ^4.7.0 @@ -13832,7 +13797,7 @@ __metadata: optional: true saslprep: optional: true - checksum: 4c30eed40f639ac64069623cf7a4954e98eab81b91d61df90e7813dd2a745259cdc698f3b60bd7f37c123242b7eb0aaae6ee4e29ff2e48f5d13f187931d51f36 + checksum: ab3b8f27e99fab4ea0c163067158ad360a161edf9ebf74368b9b561da7b75d23c09282d530cb4e2fac32ea30eae29620e861d837d334ddbdfa50d57240c1bd8e languageName: node linkType: hard @@ -14205,11 +14170,11 @@ __metadata: linkType: hard "node-abi@npm:^3.3.0": - version: 3.31.0 - resolution: "node-abi@npm:3.31.0" + version: 3.32.0 + resolution: "node-abi@npm:3.32.0" dependencies: semver: ^7.3.5 - checksum: 38fa63c689ef50b4b8f576d5f843107e2d25bd7e7d4ed56dc0adb9db7eda945fc433a7a432beca4b9decf62ff05395f0e84f46e7ab7f275f85e5fde213353950 + checksum: 321fd4b174908fa2b33a411f92dd878b7752547c2bdf516cd2ee6a9dbedef4981b8227e280db5e76db946fa7321038f9996e44147f8d62b9407ed05748393615 languageName: node linkType: hard @@ -14286,9 +14251,9 @@ __metadata: linkType: hard "node-releases@npm:^2.0.8": - version: 2.0.9 - resolution: "node-releases@npm:2.0.9" - checksum: 3ae6b1b300dc72c1a628861093d339a01aa017d3ad9017b0478384be29d6f9c93b9e26c91fce79728cecaadc04d0f16834b7ae1a018730e3e54962ec8c6aa86f + version: 2.0.10 + resolution: "node-releases@npm:2.0.10" + checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc languageName: node linkType: hard @@ -14697,13 +14662,13 @@ __metadata: linkType: hard "open@npm:^8.0.4": - version: 8.4.0 - resolution: "open@npm:8.4.0" + version: 8.4.1 + resolution: "open@npm:8.4.1" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 - checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + checksum: dbe8e1d98889df60b5179eab8b94b9591744d1f0033bce1a9a10738ba140bd9d625d6bcde7ff9f043e379aafb918975c2daa03b87cef13eb046ac18ed807f06d languageName: node linkType: hard @@ -15464,8 +15429,8 @@ __metadata: linkType: hard "pino@npm:^8.5.0": - version: 8.8.0 - resolution: "pino@npm:8.8.0" + version: 8.9.0 + resolution: "pino@npm:8.9.0" dependencies: atomic-sleep: ^1.0.0 fast-redact: ^3.1.1 @@ -15480,7 +15445,7 @@ __metadata: thread-stream: ^2.0.0 bin: pino: bin.js - checksum: 69256469221b332776333069d637100053eb15dc7baa3f95897d7864bf2e6fd99f15cfd9cfc94b56e7b00da2e6b349c49affcff1abaca9a3d4b7ba63ff86b4f0 + checksum: c7eb9345280383b9af4661b34ae2156c94e535eb33c8deaf525e00212fa9e4f0b9797cdeda17b80b333325d8a0aec6e7566618071506e944736822022b671fa8 languageName: node linkType: hard @@ -15632,13 +15597,13 @@ __metadata: linkType: hard "postcss-js@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-js@npm:4.0.0" + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" dependencies: camelcase-css: ^2.0.1 peerDependencies: - postcss: ^8.3.3 - checksum: 14be8a58670b4c5d037d40f179240a4f736d53530db727e2635638fa296bc4bff18149ca860928398aace422e55d07c9f5729eeccd395340944985199cdc82a5 + postcss: ^8.4.21 + checksum: 5c1e83efeabeb5a42676193f4357aa9c88f4dc1b3c4a0332c132fe88932b33ea58848186db117cf473049fc233a980356f67db490bd0a7832ccba9d0b3fd3491 languageName: node linkType: hard @@ -15898,7 +15863,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.11 resolution: "postcss-selector-parser@npm:6.0.11" dependencies: @@ -15958,7 +15923,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19, postcss@npm:^8.4.20": +"postcss@npm:^8.0.9, postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19, postcss@npm:^8.4.20": version: 8.4.21 resolution: "postcss@npm:8.4.21" dependencies: @@ -16060,11 +16025,11 @@ __metadata: linkType: hard "prettier@npm:^2.8.0": - version: 2.8.3 - resolution: "prettier@npm:2.8.3" + version: 2.8.4 + resolution: "prettier@npm:2.8.4" bin: prettier: bin-prettier.js - checksum: 92f2ceb522d454370e02082aa74ad27388672f7cee8975028b59517c069fe643bdc73e322675c8faf2ff173d7a626d1a6389f26b474000308e793aa25fff46e5 + checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e languageName: node linkType: hard @@ -16916,7 +16881,7 @@ __metadata: languageName: node linkType: hard -"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0": +"resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 @@ -17171,8 +17136,8 @@ __metadata: linkType: hard "rollup@npm:^3.2.3, rollup@npm:^3.7.0": - version: 3.12.1 - resolution: "rollup@npm:3.12.1" + version: 3.14.0 + resolution: "rollup@npm:3.14.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -17180,7 +17145,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: b6b3aa4bcc13b1f15c1945201f3837be07b249854ed8a73bd67411ffe56f691b808d5b563246b78ecea4110afdb9e9e6cc7d5a3f82965a5592187dbb10d3671f + checksum: 48f4da224753b8022529256243b74b3f6f41d9b4358ba079ac42f2a2cf07e4bd01b5d94579338194238e3c575487974ca508e144cf6195123293e7fdf82506cb languageName: node linkType: hard @@ -18467,8 +18432,8 @@ __metadata: linkType: hard "tailwindcss@npm:^3.1.8": - version: 3.2.4 - resolution: "tailwindcss@npm:3.2.4" + version: 3.2.6 + resolution: "tailwindcss@npm:3.2.6" dependencies: arg: ^5.0.2 chokidar: ^3.5.3 @@ -18484,12 +18449,12 @@ __metadata: normalize-path: ^3.0.0 object-hash: ^3.0.0 picocolors: ^1.0.0 - postcss: ^8.4.18 + postcss: ^8.0.9 postcss-import: ^14.1.0 postcss-js: ^4.0.0 postcss-load-config: ^3.1.4 postcss-nested: 6.0.0 - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^6.0.11 postcss-value-parser: ^4.2.0 quick-lru: ^5.1.1 resolve: ^1.22.1 @@ -18498,7 +18463,7 @@ __metadata: bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: ec187d180c722ec4f57537f2216c7b21269b525f12aaf353cea464d939c3e6286a1221eb3e1206e45d1f015f296171309ad4d9952899b0245cd07d9500a9401f + checksum: 908451ff7b334b2aec2a0ba5bf426a786a3f190b440a1f8ede206d889448ffda3b77349829f06dc297336fd0b5edc696ae5f23b808d6444bb5c689f218e95323 languageName: node linkType: hard @@ -18771,9 +18736,9 @@ __metadata: linkType: hard "tinycolor2@npm:^1.1.2": - version: 1.5.2 - resolution: "tinycolor2@npm:1.5.2" - checksum: 9df1ea9a986b03f1aebb1c1ac17fc561e358493f61b56d73ef2d7207fe7bd74eb71cf745b70487b2b5bb1ce33c9e8af7101088bb0b5fc532eaa1f9d1eda4ef31 + version: 1.6.0 + resolution: "tinycolor2@npm:1.6.0" + checksum: 6df4d07fceeedc0a878d7bac47e2cd47c1ceeb1078340a9eb8a295bc0651e17c750f73d47b3028d829f30b85c15e0572c0fd4142083e4c21a30a597e47f47230 languageName: node linkType: hard @@ -19334,11 +19299,11 @@ __metadata: linkType: hard "undici@npm:^5.14.0": - version: 5.16.0 - resolution: "undici@npm:5.16.0" + version: 5.18.0 + resolution: "undici@npm:5.18.0" dependencies: busboy: ^1.6.0 - checksum: bc22e797cbf469351713c88af33e65e21952a75f431b78b0e75fb2411426ab38b888ec0761d4b81eadf8f6e8872ed23fb75641cc7319c6a7f08bd083899fa1cc + checksum: 74e0f357c376c745fcca612481a5742866ae36086ad387e626255f4c4a15fc5357d9d0fa4355271b6a633d50f5556c3e85720844680c44861c66e23afca7245f languageName: node linkType: hard @@ -19425,15 +19390,6 @@ __metadata: languageName: node linkType: hard -"unist-builder@npm:^3.0.0": - version: 3.0.1 - resolution: "unist-builder@npm:3.0.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: d8c42fe69aa55a3e9aed3c581007ec5371349bf9885bfa8b0b787634f8d12fa5081f066b205ded379b6d0aeaa884039bae9ebb65a3e71784005fb110aef30d0f - languageName: node - linkType: hard - "unist-util-generated@npm:^2.0.0": version: 2.0.1 resolution: "unist-util-generated@npm:2.0.1" @@ -19840,22 +19796,22 @@ __metadata: linkType: hard "vfile-location@npm:^4.0.0": - version: 4.0.1 - resolution: "vfile-location@npm:4.0.1" + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" dependencies: "@types/unist": ^2.0.0 vfile: ^5.0.0 - checksum: cc0df62075c741beee699e651374aeb56c4c1f4333398c0ba924281c2b51d4b7669c69c5b837ea395775626ad030d6f1bd27fd0a7eaf3f9f1bbd55393948ad6c + checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 languageName: node linkType: hard "vfile-message@npm:^3.0.0": - version: 3.1.3 - resolution: "vfile-message@npm:3.1.3" + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: f5ec2afbc1d5589fc45729209bdcaf01e3fc520fdac693557e62bd91cc8d6f915a6397c2f4d5f7a129ffc6c7511cb77eaf9e0932be1a70e39bed584ef7c86dbd + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 languageName: node linkType: hard