diff --git a/.vscode/bot.code-snippets b/.vscode/bot.code-snippets
new file mode 100644
index 0000000..062383f
--- /dev/null
+++ b/.vscode/bot.code-snippets
@@ -0,0 +1,24 @@
+{
+ "Flow Bot (simple)": {
+ "scope": "javascript",
+ "prefix": "bot:flow",
+ "description": "Crear un flujo simple",
+ "body": [
+ "export const flow${1} = addKeyword(['hola', 'buenas'])",
+ " .addAnswer('Hola! 🚀 Bienvenido a este CHATBOT')",
+ " .addAnswer('¿Como puedo ayudarte?')"
+ ]
+ },
+ "Flow Bot (completo)": {
+ "scope": "javascript",
+ "prefix": "bot:flow completo",
+ "description": "Crear un flujo completo",
+ "body": [
+ "export const flow${1} = addKeyword(['categorias'])",
+ " .addAnswer('⚡ Tenemos las siguientes categorias')",
+ " .addAnswer(['🚀 Computadoras', '🚀 Celulares', '🚀 Otros'], {",
+ " delay: 1500, //Milisegundo 1500 = 1.5segundos",
+ "})"
+ ]
+ }
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4b1954d..176cfc7 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,7 +13,7 @@ __Requerimientos:__
__Clonar repo rama dev__
```
-git clone --branch dev https://github.com/leifermendez/bot-whatsapp
+git clone --branch dev https://github.com/codigoencasa/bot-whatsapp
```
__Instalar dependencias__
```
@@ -34,24 +34,55 @@ Se ejecuta el CLI (Command Line Interface) para ayudarte a crear un app-bot de e
yarn run cli
```
-Abrir carpeta __example-app-base__ y ejecutar
+Selecionas (mediante las flechas arriba y abajo) el proveedor que quieras usar y cuando estes sobre el presiona la barra de espacio, igualmente selecciona la base de datos que quieras usar.
+
+Se creó un subdirecorio con el nombre del proveedor y base de datos que seleccionaste, ejemplo: `base-bailey-mysql`
+
+Dentro de ese directorio necesitas editar el archivo package.json y borrar las siguientes lineas:
```
-cd example-app-base
-npm i
+ "@bot-whatsapp/bot": "latest",
+ "@bot-whatsapp/cli": "latest",
+ "@bot-whatsapp/database": "latest",
+ "@bot-whatsapp/provider": "latest",
+```
+
+Cambiate al directorio creado ejemplo: `base-bailey-mysql`
+```
+cd base-baileys-mysql
+```
+Ejecuta los comandos:
+```
+npm install
npm run pre-copy
npm start
```
+En el caso de MySql y Mongo es necesario especificar en app.js los datos de la conexión, ejemplo de MySql:
+```
+const BaileysProvider = require('@bot-whatsapp/provider/baileys')
+const MySQLAdapter = require('@bot-whatsapp/database/mysql')
-### __Commit y Push__
+/**
+ * Declaramos las conexiones de MySQL
+ */
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'usr'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+```
+
-El proyecto tiene implementado __[husky](https://typicode.github.io/husky/#/)__, es una herramienta que dispara unas acciones al momento de hacer commit y hacer push.
-
-__commit:__ Los commit son semánticos, esto quiere decir que deben cumplir un standar al momento de escribirlos ejemplo: ` feat(adapter): new adapter myqsl ` puede ver más info sobre esto __[aquí](https://github.com/conventional-changelog/commitlint/#what-is-commitlint)__
-
-__push:__ Cada push ejecutar `yarn run test` el cual realiza los test internos que tienen que cumplir con __95% de cobertura__.
+
-> Documento en constante actualización....
+### 🤔 Preguntas frecuentes
+- ¿Como puedo hacer aportaciones de código en el proyecto?: [Ver Video](https://youtu.be/Lxt8Acob6aU)
+- ¿Como ejecutar el entorno de pruebas?: [Ver Video](https://youtu.be/Mf9V-dloBfk)
+- ¿Como crear un nuevo proveedor?: [Ver Video](https://youtu.be/cahK9zH3SI8)
+- ¿Que son los GithubActions?: [Ver Video](https://youtu.be/nYBEBFKLiqw)
+
+
+> __NOTA:__ Documento en constante actualización....
------
- [Discord](https://link.codigoencasa.com/DISCORD)
diff --git a/GLOSSARY.md b/GLOSSARY.md
index ec85e10..d054e6f 100644
--- a/GLOSSARY.md
+++ b/GLOSSARY.md
@@ -1,2 +1,2 @@
CTX: Es el objeto que representa un mensaje, con opciones, id, ref
-messageInComming: Objeto entrante del provider {body, from,...}
\ No newline at end of file
+messageInComming: Objeto entrante del provider {body, from,to,...}
\ No newline at end of file
diff --git a/MIGRATION.md b/MIGRATION.md
new file mode 100644
index 0000000..5b5086e
--- /dev/null
+++ b/MIGRATION.md
@@ -0,0 +1,73 @@
+## MIGRANDO DE LA VERSIÓN 1 A LAS VERSIÓN 2
+
+Pasar los flujos del bot de la versión 1 a la 2 es muy fácil, supongamos que en tu initial.json y response.json tienes un flujo como el siguiente:
+
+```js
+//initial.json
+[
+ {
+ "keywords": [
+ "hola",
+ "ola",
+ "alo"
+ ],
+ "key": "hola"
+ },
+ {
+ "keywords": ["adios", "bye"],
+ "key": "adios"
+ }
+]
+```
+y
+
+```js
+//response.json
+{
+ "hola":{
+ "replyMessage":[
+ "Gracias a ti! \n"
+ ],
+ "media":null,
+ "trigger":null
+ },
+ "adios":{
+ "replyMessage":[
+ "Que te vaya bien!!"
+ ],
+ "media":null
+ }
+}
+```
+En la versión 2, no es necesario tener esos 2 archivos, los flujos se ponen directamente en app.js de la siguiente manera:
+
+```js
+//app.js
+/**
+ * Declarando flujos principales.
+ */
+const flowHola = addKeyword(['hola', 'ola', 'alo']) //Aqui van los "keywords" de initial.json
+ .addAnswer('Gracias a ti!') // Aquí va la respuesta del response.json, no es necesario especificar nuevamente los "keywords"
+ .addAnswer('Siempre un placer!!!') // Y se pueden agregar varias respuestas encadenadas ... TANTAS com sean necesarias.
+
+const flowAdios = addKeyword(['adios', 'bye']) //Aqui van los "keywords" de initial.json
+ .addAnswer('Que te vaya bien!!') // Aquí va la respuesta del response.json, no es necesario especificar nuevamente los "keywords"
+ .addAnswer('Hasta luego!', // Y se pueden agregar varias respuestas encadenadas ... TANTAS com sean necesarias.
+ null, null,[...addChild(flowHijo1)] // Y se pueden agregar flujos HIJOS (Sub Menus). Los flujos hijos se tienen que definir ANTES que los principales.
+ )
+
+
+##FALTAN EJEMPLOS DE ENVIOS DE IMAGENES!
+
+
+ const main = async () => {
+ const adapterDB = new MockAdapter()
+ const adapterFlow = createFlow([flowHola, flowAdios]) // Aqui se crean los flujos.
+ const adapterProvider = createProvider(BaileysProvider)
+ createBot({
+ flow: adapterFlow,
+ provider: adapterProvider,
+ database: adapterDB,
+ })
+}
+ ```
\ No newline at end of file
diff --git a/package.json b/package.json
index 8a8ebe0..92f2f3d 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"create-bot:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js ",
"bot:rollup": "rollup --config ./packages/bot/rollup-bot.config.js",
"provider:rollup": "rollup --config ./packages/provider/rollup-provider.config.js ",
+ "contexts:rollup": "rollup --config ./packages/contexts/rollup-contexts.config.js",
"database:rollup": "rollup --config ./packages/database/rollup-database.config.js",
"create-bot-whatsapp:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js",
"format:check": "prettier --check ./packages",
@@ -17,7 +18,7 @@
"fmt.staged": "pretty-quick --staged",
"lint:check": "eslint ./packages",
"lint:fix": "eslint --fix ./packages",
- "build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run create-bot-whatsapp:rollup",
+ "build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup",
"copy.lib": "node ./scripts/move.js",
"test.unit": "node ./node_modules/uvu/bin.js packages test",
"test.coverage": "node ./node_modules/c8/bin/c8.js npm run test.unit",
@@ -37,6 +38,7 @@
"packages/cli",
"packages/database",
"packages/provider",
+ "packages/contexts",
"packages/docs"
],
"keywords": [
diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js
index e04bd13..e545a55 100644
--- a/packages/bot/core/core.class.js
+++ b/packages/bot/core/core.class.js
@@ -58,13 +58,13 @@ class CoreClass {
]
/**
- *
- * @param {*} messageInComming
+ * GLOSSARY.md
+ * @param {*} messageCtxInComming
* @returns
*/
- handleMsg = async (messageInComming) => {
- logger.log(`[handleMsg]: `, messageInComming)
- const { body, from } = messageInComming
+ handleMsg = async (messageCtxInComming) => {
+ logger.log(`[handleMsg]: `, messageCtxInComming)
+ const { body, from } = messageCtxInComming
let msgToSend = []
let fallBackFlag = false
@@ -92,12 +92,26 @@ class CoreClass {
return refToContinue
}
+ // 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
+ const cbEveryCtx = (inRef) => {
+ const indexFlow = this.flowClass.findIndexByRef(inRef)
+ this.flowClass.allCallbacks[indexFlow].callback(
+ messageCtxInComming,
+ {
+ fallBack,
+ }
+ )
+ }
+
// 📄 [options: callback]: Si se tiene un callback se ejecuta
- if (!fallBackFlag && refToContinue && prevMsg?.options?.callback) {
- const indexFlow = this.flowClass.findIndexByRef(refToContinue?.ref)
- this.flowClass.allCallbacks[indexFlow].callback(messageInComming, {
- fallBack,
- })
+ if (!fallBackFlag) {
+ if (refToContinue && prevMsg?.options?.callback) {
+ cbEveryCtx(refToContinue?.ref)
+ } else {
+ for (const ite of this.flowClass.find(body)) {
+ cbEveryCtx(ite?.ref)
+ }
+ }
}
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
diff --git a/packages/bot/io/methods/addAnswer.js b/packages/bot/io/methods/addAnswer.js
index d5b53e6..a7db6d6 100644
--- a/packages/bot/io/methods/addAnswer.js
+++ b/packages/bot/io/methods/addAnswer.js
@@ -31,10 +31,7 @@ const addAnswer =
nested: Array.isArray(nested) ? nested : [],
})
- const callback =
- typeof cb === 'function'
- ? cb
- : () => console.log('Callback no definida')
+ const callback = typeof cb === 'function' ? cb : () => null
const lastCtx = inCtx.hasOwnProperty('ctx') ? inCtx.ctx : inCtx
diff --git a/packages/bot/package.json b/packages/bot/package.json
index 554f404..4079f55 100644
--- a/packages/bot/package.json
+++ b/packages/bot/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/bot",
- "version": "0.0.23-alpha.0",
+ "version": "0.0.24-alpha.0",
"description": "",
"main": "./lib/bundle.bot.cjs",
"scripts": {
diff --git a/packages/cli/interactive/index.js b/packages/cli/interactive/index.js
index f7360ce..3dc16c4 100644
--- a/packages/cli/interactive/index.js
+++ b/packages/cli/interactive/index.js
@@ -12,7 +12,7 @@ const bannerDone = () => {
[
`[Agradecimientos]: Este es un proyecto OpenSource, si tienes intenciones de colaborar puedes hacerlo:`,
`[😉] Comprando un cafe https://www.buymeacoffee.com/leifermendez`,
- `[⭐] Dar estrella https://github.com/leifermendez/bot-whatsapp`,
+ `[⭐] Dar estrella https://github.com/codigoencasa/bot-whatsapp`,
`[🚀] Realizando mejoras en el codigo`,
].join('\n')
)
@@ -85,7 +85,7 @@ const startInteractive = async () => {
const indexOfPath = possiblesPath.find((a) => existsSync(a))
await copyBaseApp(indexOfPath, join(process.cwd(), templateName))
console.log(``)
- console.log(bgMagenta(`⚡⚡⚡INSTRUCCIONES⚡⚡⚡`))
+ console.log(bgMagenta(`⚡⚡⚡ INSTRUCCIONES ⚡⚡⚡`))
console.log(yellow(`cd ${templateName}`))
console.log(yellow(`npm install`))
console.log(yellow(`npm start`))
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 39a11d2..6e76ff6 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/cli",
- "version": "0.0.30-alpha.0",
+ "version": "0.0.31-alpha.0",
"description": "",
"main": "index.js",
"devDependencies": {
diff --git a/packages/contexts/package.json b/packages/contexts/package.json
new file mode 100644
index 0000000..9d27195
--- /dev/null
+++ b/packages/contexts/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "@bot-whatsapp/contexts",
+ "version": "0.0.1",
+ "description": "",
+ "main": "./lib/bundle.contexts.cjs",
+ "files": [
+ "./lib/"
+ ],
+ "exports": {
+ "./mock": "./lib/mock/index.cjs",
+ "./dialogflow": "./lib/dialogflow/index.cjs"
+ },
+ "dependencies": {
+ "@bot-whatsapp/bot": "*"
+ }
+}
diff --git a/packages/contexts/rollup-contexts.config.js b/packages/contexts/rollup-contexts.config.js
new file mode 100644
index 0000000..59a7624
--- /dev/null
+++ b/packages/contexts/rollup-contexts.config.js
@@ -0,0 +1,24 @@
+const banner = require('../../config/banner.rollup.json')
+const commonjs = require('@rollup/plugin-commonjs')
+const { join } = require('path')
+
+module.exports = [
+ {
+ input: join(__dirname, 'src', 'mock', 'index.js'),
+ output: {
+ banner: banner['banner.output'].join(''),
+ file: join(__dirname, 'lib', 'mock', 'index.cjs'),
+ format: 'cjs',
+ },
+ plugins: [commonjs()],
+ },
+ {
+ input: join(__dirname, 'src', 'dialogflow', 'index.js'),
+ output: {
+ banner: banner['banner.output'].join(''),
+ file: join(__dirname, 'lib', 'dialogflow', 'index.cjs'),
+ format: 'cjs',
+ },
+ plugins: [commonjs()],
+ },
+]
diff --git a/packages/contexts/src/dialogflow/dialogflow.class.js b/packages/contexts/src/dialogflow/dialogflow.class.js
new file mode 100644
index 0000000..db34e50
--- /dev/null
+++ b/packages/contexts/src/dialogflow/dialogflow.class.js
@@ -0,0 +1,113 @@
+const { CoreClass } = require('@bot-whatsapp/bot')
+const dialogflow = require('@google-cloud/dialogflow')
+const { existsSync, readFileSync } = require('fs')
+const { join } = require('path')
+
+/**
+ * Necesita extender de core.class
+ * handleMsg(messageInComming) // const { body, from } = messageInComming
+ */
+
+const GOOGLE_ACCOUNT_PATH = join(process.cwd(), 'google-key.json')
+
+class DialogFlowContext extends CoreClass {
+ projectId = null
+ configuration = null
+ sessionClient = null
+ optionsDX = {
+ language: 'es',
+ }
+
+ constructor(_database, _provider, _optionsDX = {}) {
+ super(null, _database, _provider)
+ this.optionsDX = { ...this.optionsDX, ..._optionsDX }
+ this.init()
+ }
+
+ /**
+ * Verificar conexión con servicio de DialogFlow
+ */
+ init = () => {
+ if (!existsSync(GOOGLE_ACCOUNT_PATH)) {
+ console.log(`[ERROR]: No se encontro ${GOOGLE_ACCOUNT_PATH}`)
+ /**
+ * Emitir evento de error para que se mueste por consola dicinedo que no tiene el json
+ * */
+ }
+
+ const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8')
+ const { project_id, private_key, client_email } = JSON.parse(rawJson)
+
+ this.projectId = project_id
+ this.configuration = {
+ credentials: {
+ private_key,
+ client_email,
+ },
+ }
+
+ this.sessionClient = new dialogflow.SessionsClient(this.configuration)
+ }
+
+ /**
+ * GLOSSARY.md
+ * @param {*} messageCtxInComming
+ * @returns
+ */
+ handleMsg = async (messageCtxInComming) => {
+ const languageCode = this.optionsDX.language
+ const { from, body } = messageCtxInComming
+
+ let customPayload = {}
+
+ /**
+ * 📄 Creamos session de contexto basado en el numero de la persona
+ * para evitar este problema.
+ * https://github.com/codigoencasa/bot-whatsapp/pull/140
+ */
+ const session = this.sessionClient.projectAgentSessionPath(
+ this.projectId,
+ from
+ )
+ const reqDialog = {
+ session,
+ queryInput: {
+ text: {
+ text: body,
+ languageCode,
+ },
+ },
+ }
+
+ const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [
+ null,
+ ]
+
+ const { queryResult } = single
+
+ const msgPayload = queryResult?.fulfillmentMessages?.find(
+ (a) => a.message === 'payload'
+ )
+
+ // Revisamos si el dialogFlow tiene multimedia
+ if (msgPayload && msgPayload?.payload) {
+ const { fields } = msgPayload.payload
+ const mapButtons = fields?.buttons?.listValue?.values.map((m) => {
+ return m?.structValue?.fields?.body?.stringValue
+ })
+ customPayload = {
+ media: fields?.media?.stringValue,
+ buttons: mapButtons,
+ }
+ }
+
+ const ctxFromDX = {
+ ...customPayload,
+ answer: queryResult?.fulfillmentText,
+ }
+
+ this.sendFlow([ctxFromDX], from)
+ }
+}
+
+module.exports = DialogFlowContext
diff --git a/packages/contexts/src/dialogflow/index.js b/packages/contexts/src/dialogflow/index.js
new file mode 100644
index 0000000..e988f50
--- /dev/null
+++ b/packages/contexts/src/dialogflow/index.js
@@ -0,0 +1,14 @@
+const DialogFlowClass = require('./dialogflow.class')
+
+/**
+ * Crear instancia de clase Bot
+ * @param {*} args
+ * @returns
+ */
+const createBotDialog = async ({ database, provider }) =>
+ new DialogFlowClass(database, provider)
+
+module.exports = {
+ createBotDialog,
+ DialogFlowClass,
+}
diff --git a/packages/contexts/src/mock/index.js b/packages/contexts/src/mock/index.js
new file mode 100644
index 0000000..b609be5
--- /dev/null
+++ b/packages/contexts/src/mock/index.js
@@ -0,0 +1,14 @@
+const MockClass = require('./mock.class')
+
+/**
+ * Crear instancia de clase Bot
+ * @param {*} args
+ * @returns
+ */
+const createBotMock = async ({ database, provider }) =>
+ new MockClass(database, provider)
+
+module.exports = {
+ createBotMock,
+ MockClass,
+}
diff --git a/packages/contexts/src/mock/mock.class.js b/packages/contexts/src/mock/mock.class.js
new file mode 100644
index 0000000..6e5c9d2
--- /dev/null
+++ b/packages/contexts/src/mock/mock.class.js
@@ -0,0 +1,24 @@
+const { CoreClass } = require('@bot-whatsapp/bot')
+/**
+ * Necesita extender de core.class
+ * handleMsg(messageInComming) // const { body, from } = messageInComming
+ */
+
+class MockContext extends CoreClass {
+ constructor(_database, _provider) {
+ super(null, _database, _provider)
+ }
+
+ init = () => {}
+
+ /**
+ * GLOSSARY.md
+ * @param {*} messageCtxInComming
+ * @returns
+ */
+ handleMsg = async () => {
+ console.log('DEBUG:')
+ }
+}
+
+module.exports = MockContext
diff --git a/packages/create-bot-whatsapp/package.json b/packages/create-bot-whatsapp/package.json
index 678ba6c..7cfa3ea 100644
--- a/packages/create-bot-whatsapp/package.json
+++ b/packages/create-bot-whatsapp/package.json
@@ -1,6 +1,6 @@
{
"name": "create-bot-whatsapp",
- "version": "0.0.41-alpha.0",
+ "version": "0.0.42-alpha.0",
"description": "",
"main": "./lib/bundle.create-bot-whatsapp.cjs",
"files": [
diff --git a/packages/database/package.json b/packages/database/package.json
index f75a8cc..cfe467d 100644
--- a/packages/database/package.json
+++ b/packages/database/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/database",
- "version": "0.0.22-alpha.0",
+ "version": "0.0.23-alpha.0",
"description": "Esto es el conector a mysql, pg, mongo",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -18,7 +18,7 @@
"exports": {
"./mock": "./lib/mock/index.cjs",
"./mongo": "./lib/mongo/index.cjs",
- "./json-file": "./lib/json-file/index.cjs",
+ "./json": "./lib/json/index.cjs",
"./mysql": "./lib/mysql/index.cjs"
}
}
diff --git a/packages/database/rollup-database.config.js b/packages/database/rollup-database.config.js
index 1eecdba..844d414 100644
--- a/packages/database/rollup-database.config.js
+++ b/packages/database/rollup-database.config.js
@@ -31,10 +31,10 @@ module.exports = [
plugins: [commonjs()],
},
{
- input: join(__dirname, 'src', 'json-file', 'index.js'),
+ input: join(__dirname, 'src', 'json', 'index.js'),
output: {
banner: banner['banner.output'].join(''),
- file: join(__dirname, 'lib', 'json-file', 'index.cjs'),
+ file: join(__dirname, 'lib', 'json', 'index.cjs'),
},
plugins: [commonjs()],
},
diff --git a/packages/database/src/json-file/index.js b/packages/database/src/json/index.js
similarity index 88%
rename from packages/database/src/json-file/index.js
rename to packages/database/src/json/index.js
index af53df8..7aa8029 100644
--- a/packages/database/src/json-file/index.js
+++ b/packages/database/src/json/index.js
@@ -1,8 +1,7 @@
-const path = require('path')
const StormDB = require('stormdb')
-const engine = new StormDB.localFileEngine(
- path.join(process.cwd(), './db.stormdb')
-)
+const { join } = require('path')
+
+const engine = new StormDB.localFileEngine(join(process.cwd(), './db.stormdb'))
class JsonFileAdapter {
db
diff --git a/packages/database/src/mongo/index.js b/packages/database/src/mongo/index.js
index 21b7cf1..6af68f0 100644
--- a/packages/database/src/mongo/index.js
+++ b/packages/database/src/mongo/index.js
@@ -1,23 +1,20 @@
-require('dotenv').config()
const { MongoClient } = require('mongodb')
-const DB_URI = process.env.DB_URI || 'mongodb://0.0.0.0:27017'
-const DB_NAME = process.env.DB_NAME || 'db_bot'
-
class MongoAdapter {
db
listHistory = []
-
- constructor() {
+ credentials = { dbUri: null, dbName: null }
+ constructor(_credentials) {
+ this.credentials = _credentials
this.init().then()
}
init = async () => {
try {
- const client = new MongoClient(DB_URI, {})
+ const client = new MongoClient(this.credentials.dbUri, {})
await client.connect()
console.log('🆗 Conexión Correcta DB')
- const db = client.db(DB_NAME)
+ const db = client.db(this.credentials.dbName)
this.db = db
return true
} catch (e) {
diff --git a/packages/database/src/mysql/index.js b/packages/database/src/mysql/index.js
index a557f3e..e01b55a 100644
--- a/packages/database/src/mysql/index.js
+++ b/packages/database/src/mysql/index.js
@@ -3,7 +3,7 @@ const mysql = require('mysql2')
class MyslAdapter {
db
listHistory = []
- credentials = { host: null, user: null, database: null }
+ credentials = { host: null, user: null, database: null, password: null }
constructor(_credentials) {
this.credentials = _credentials
diff --git a/packages/docs/src/routes/index.tsx b/packages/docs/src/routes/index.tsx
index 4ae7f96..af63475 100644
--- a/packages/docs/src/routes/index.tsx
+++ b/packages/docs/src/routes/index.tsx
@@ -13,7 +13,7 @@ export default component$(() => {
clientes desde tu cuenta de Whatsapp automáticamente.
- Este bot esta programado en Javascript y usa NodeJS y es{' '}
+ Este bot esta hecho en Javascript y usa NodeJS y es{' '}
Open Source
@@ -25,7 +25,7 @@ export default component$(() => {
más.
- Si se quere cambiar la librería que se está usando, esto se
+ Si se quiere cambiar la librería que se está usando, esto se
puede hacer con solo cambiar unas lineas en el código.
@@ -183,18 +183,18 @@ export default component$(() => {
Instalación
-
- Abre VSCode y muevete al directorio en donde queres insralar
- el bot.
+ Abre VSCode y muevete al directorio en donde quieres
+ instalar el bot.
- Ejecuta este comando: npm create bot-whatsapp@latest
- - Contesta que SI queres crear un bot nuevo (Y)
+ - Contesta que SI quieres crear un bot nuevo (Y)
-
Selecciona con las flechas (arriba y abajo) la librería que
- quieres usar para el bot, cuando estes sobre la opción que
+ vas usar para el bot, cuando estes sobre la opción que
quieres, oprime la barra de espacio y luego la tecla "Enter"
-
- De igual forma selecciona la base de daros que quieres usar.
+ De igual forma selecciona la base de datos que quieres usar.
-
Cambiate al directorio que se creo dependiendo de la base de
@@ -210,7 +210,7 @@ export default component$(() => {
start"y espera a que te mande el mensaje de que necesitas
escanear el código QR, para esto ve al directorio en el que
se instaló y busca el archivo "qr.svg" y abrelo, te debe de
- mostrsr un código QR que tienes que escanear en el Whatsapp
+ mostrar un código QR que tienes que escanear en el Whatsapp
que quieres ligar con el bot, para esto ve a tu Whatsapp,
haz clic en los tres botones de arriba a la derecha y entra
en "Linked devices", y luego en el botón que dice "LINK
@@ -218,11 +218,11 @@ export default component$(() => {
código.
-
- Una vez ligado el Whatsapp vas a ver el mensaje de
+ Una vez ligado el Whatsapp, vas a ver el mensaje de
"Proveedor conectado y listo".
-
- Desde OTRO celular mandas un mensaje al numero del Whatsapp
+ Desde OTRO celular manda un mensaje al número del Whatsapp
que acabas de ligar al bot con la palabra "Hola" y LISTO.
- Debes de recibir una respuesta automática del bot.
diff --git a/packages/provider/package.json b/packages/provider/package.json
index 957193b..e59f80d 100644
--- a/packages/provider/package.json
+++ b/packages/provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/provider",
- "version": "0.0.28-alpha.0",
+ "version": "0.0.29-alpha.0",
"description": "Esto es el conector a Twilio, Meta, etc...",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -11,6 +11,7 @@
],
"dependencies": {
"@bot-whatsapp/bot": "*",
+ "combine-image": "^1.0.3",
"qr-image": "^3.2.0"
},
"exports": {
diff --git a/packages/provider/src/baileys/index.js b/packages/provider/src/baileys/index.js
index 8bd860e..3e5c446 100644
--- a/packages/provider/src/baileys/index.js
+++ b/packages/provider/src/baileys/index.js
@@ -1,7 +1,9 @@
const { ProviderClass } = require('@bot-whatsapp/bot')
const pino = require('pino')
const mime = require('mime-types')
-const fs = require('fs')
+const { existsSync, createWriteStream } = require('fs')
+const { Console } = require('console')
+
const {
default: makeWASocket,
useMultiFileAuthState,
@@ -12,6 +14,10 @@ const {
baileyIsValidNumber,
} = require('./utils')
+const logger = new Console({
+ stdout: createWriteStream(`${process.cwd()}/baileys.log`),
+})
+
/**
* ⚙️ BaileysProvider: Es una clase tipo adaptor
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
@@ -27,7 +33,7 @@ class BaileysProvider extends ProviderClass {
/**
* Iniciar todo Bailey
*/
- async initBailey() {
+ initBailey = async () => {
const { state, saveCreds } = await useMultiFileAuthState('sessions')
try {
@@ -49,7 +55,14 @@ class BaileysProvider extends ProviderClass {
}
)
} catch (e) {
- this.emit('error', e)
+ logger.log(e)
+ this.emit('auth_failure', [
+ `Algo inesperado ha ocurrido NO entres en pánico`,
+ `Reinicia el BOT`,
+ `Tambien puedes mirar un log que se ha creado baileys.log`,
+ `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
+ `(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
+ ])
}
}
@@ -70,7 +83,7 @@ class BaileysProvider extends ProviderClass {
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- baileyGenerateImage(qr)
+ await baileyGenerateImage(qr)
}
if (lastDisconnect?.error) {
@@ -87,7 +100,8 @@ class BaileysProvider extends ProviderClass {
},
{
event: 'messages.upsert',
- func: ({ messages }) => {
+ func: ({ messages, type }) => {
+ if (type !== 'notify') return
const [messageCtx] = messages
let payload = {
...messageCtx,
@@ -122,9 +136,10 @@ class BaileysProvider extends ProviderClass {
* @example await sendMessage('+XXXXXXXXXXX', 'https://dominio.com/imagen.jpg' | 'img/imagen.jpg')
*/
- sendMedia = async (number, imageUrl) => {
+ sendMedia = async (number, imageUrl, text) => {
await this.vendor.sendMessage(number, {
image: { url: imageUrl },
+ text,
})
}
@@ -153,21 +168,6 @@ class BaileysProvider extends ProviderClass {
sendText = async (number, message) => {
return this.vendor.sendMessage(number, { text: message })
}
- /**
- * TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
- * https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
- * @param {string} number
- * @param {string} message
- * @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
- */
- 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)
- return this.sendText(number, message)
- }
/**
*
@@ -177,7 +177,7 @@ class BaileysProvider extends ProviderClass {
*/
sendFile = async (number, filePath) => {
- if (fs.existsSync(filePath)) {
+ if (existsSync(filePath)) {
const mimeType = mime.lookup(filePath)
const numberClean = number.replace('+', '')
const fileName = filePath.split('/').pop()
@@ -211,6 +211,23 @@ class BaileysProvider extends ProviderClass {
await this.vendor.sendMessage(`${numberClean}@c.us`, buttonMessage)
}
+
+ /**
+ * TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
+ * https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
+ * @param {string} number
+ * @param {string} message
+ * @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
+ */
+ 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)
+ return this.sendText(number, message)
+ }
}
module.exports = BaileysProvider
diff --git a/packages/provider/src/baileys/utils.js b/packages/provider/src/baileys/utils.js
index 7da3c0a..40efa61 100644
--- a/packages/provider/src/baileys/utils.js
+++ b/packages/provider/src/baileys/utils.js
@@ -1,4 +1,5 @@
const { createWriteStream } = require('fs')
+const combineImage = require('combine-image')
const qr = require('qr-image')
const baileyCleanNumber = (number, full = false) => {
@@ -7,9 +8,28 @@ const baileyCleanNumber = (number, full = false) => {
return number
}
-const baileyGenerateImage = (base64) => {
+/**
+ * Hace promesa el write
+ * @param {*} base64
+ */
+const baileyGenerateImage = async (base64) => {
+ const PATH_QR = `${process.cwd()}/qr.png`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
- qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.png`))
+
+ const writeFilePromise = () =>
+ new Promise((resolve, reject) => {
+ const file = qr_svg.pipe(createWriteStream(PATH_QR))
+ file.on('finish', () => resolve(true))
+ file.on('error', reject)
+ })
+
+ await writeFilePromise()
+
+ const cleanImage = await combineImage([PATH_QR], {
+ margin: 15,
+ color: 0xffffffff,
+ })
+ cleanImage.write(PATH_QR)
}
const baileyIsValidNumber = (rawNumber) => {
diff --git a/packages/provider/src/venom/index.js b/packages/provider/src/venom/index.js
index bb167e4..645e809 100644
--- a/packages/provider/src/venom/index.js
+++ b/packages/provider/src/venom/index.js
@@ -1,11 +1,19 @@
const { ProviderClass } = require('@bot-whatsapp/bot')
const venom = require('venom-bot')
+const { createWriteStream } = require('fs')
+const { Console } = require('console')
+
const {
venomCleanNumber,
venomGenerateImage,
venomisValidNumber,
+ venomDownloadMedia,
} = require('./utils')
+const logger = new Console({
+ stdout: createWriteStream(`${process.cwd()}/venom.log`),
+})
+
/**
* ⚙️ VenomProvider: Es una clase tipo adaptor
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
@@ -34,13 +42,13 @@ class VenomProvider extends ProviderClass {
)
this.vendor = client
} catch (e) {
+ logger.log(e)
this.emit('auth_failure', {
instructions: [
`Ocurrio un error con la inicializacion de venom`,
- `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
- `(Puedes abrir un ISSUE) https://github.com/leifermendez/bot-whatsapp/issues/new/choose`,
- ``,
- `${e?.message}`,
+ `Reinicia el BOT`,
+ `Tambien puedes mirar un log que se ha creado venom.log`,
+ `(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
],
})
}
@@ -49,7 +57,7 @@ class VenomProvider extends ProviderClass {
/**
* Generamos QR Code pra escanear con el Whatsapp
*/
- generateQr = (qr) => {
+ generateQr = async (qr) => {
console.clear()
this.emit('require_action', {
instructions: [
@@ -58,7 +66,7 @@ class VenomProvider extends ProviderClass {
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- venomGenerateImage(qr)
+ await venomGenerateImage(qr)
}
/**
@@ -97,6 +105,19 @@ class VenomProvider extends ProviderClass {
}
}
+ /**
+ * Enviar imagen o multimedia
+ * @param {*} number
+ * @param {*} mediaInput
+ * @param {*} message
+ * @returns
+ */
+ sendMedia = async (number, mediaInput, message) => {
+ if (!mediaInput) throw new Error(`NO_SE_ENCONTRO: ${mediaInput}`)
+ const fileDownloaded = await venomDownloadMedia(mediaInput)
+ return this.vendor.sendImage(number, fileDownloaded, '.', message)
+ }
+
/**
* Enviar mensaje al usuario
* @param {*} userId
@@ -108,7 +129,8 @@ class VenomProvider extends ProviderClass {
const number = venomCleanNumber(userId)
if (options?.buttons?.length)
return this.sendButtons(number, message, options.buttons)
- if (options?.media) return this.sendMedia(number, options.media)
+ if (options?.media)
+ return this.sendMedia(number, options.media, message)
return this.vendor.sendText(number, message)
}
}
diff --git a/packages/provider/src/venom/utils.js b/packages/provider/src/venom/utils.js
index 151f7e0..cf1dc5f 100644
--- a/packages/provider/src/venom/utils.js
+++ b/packages/provider/src/venom/utils.js
@@ -1,4 +1,8 @@
-const { writeFile } = require('fs')
+const { writeFile, createWriteStream } = require('fs')
+const { tmpdir } = require('os')
+const http = require('http')
+const https = require('https')
+const combineImage = require('combine-image')
const venomCleanNumber = (number, full = false) => {
number = number.replace('@c.us', '')
@@ -6,7 +10,8 @@ const venomCleanNumber = (number, full = false) => {
return number
}
-const venomGenerateImage = (base) => {
+const venomGenerateImage = async (base) => {
+ const PATH_QR = `${process.cwd()}/qr.png`
const matches = base.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/)
if (matches.length !== 3) {
return new Error('Invalid input string')
@@ -16,16 +21,50 @@ const venomGenerateImage = (base) => {
response.type = matches[1]
response.data = new Buffer.from(matches[2], 'base64')
- var imageBuffer = response
- writeFile(
- `${process.cwd()}/qr.png`,
- imageBuffer['data'],
- 'binary',
- (err) => {
- if (err != null) throw new Error('ERROR_QR_GENERATE')
- return
- }
- )
+ const writeFilePromise = () =>
+ new Promise((resolve, reject) => {
+ writeFile(PATH_QR, response['data'], 'binary', (err) => {
+ if (err != null) reject('ERROR_QR_GENERATE')
+ resolve(true)
+ })
+ })
+
+ await writeFilePromise()
+
+ const cleanImage = await combineImage([PATH_QR], {
+ margin: 15,
+ color: 0xffffffff,
+ })
+ cleanImage.write(PATH_QR)
+}
+
+/**
+ * Incompleta
+ * Descargar archivo multimedia para enviar
+ * @param {*} url
+ * @returns
+ */
+const venomDownloadMedia = (url) => {
+ return new Promise((resolve, reject) => {
+ const ext = url.split('.').pop()
+ const checkProtocol = url.includes('https:')
+ const handleHttp = checkProtocol ? https : http
+ const name = `tmp-${Date.now()}.${ext}`
+ const fullPath = `${tmpdir()}/${name}`
+ const file = createWriteStream(fullPath)
+ handleHttp.get(url, function (response) {
+ response.pipe(file)
+ file.on('finish', function () {
+ file.close()
+ resolve(fullPath)
+ })
+ file.on('error', function () {
+ console.log('errro')
+ file.close()
+ reject(null)
+ })
+ })
+ })
}
const venomisValidNumber = (rawNumber) => {
@@ -33,4 +72,9 @@ const venomisValidNumber = (rawNumber) => {
const exist = rawNumber.match(regexGroup)
return !exist
}
-module.exports = { venomCleanNumber, venomGenerateImage, venomisValidNumber }
+module.exports = {
+ venomCleanNumber,
+ venomGenerateImage,
+ venomisValidNumber,
+ venomDownloadMedia,
+}
diff --git a/packages/provider/src/web-whatsapp/index.js b/packages/provider/src/web-whatsapp/index.js
index ae8747e..ef9427f 100644
--- a/packages/provider/src/web-whatsapp/index.js
+++ b/packages/provider/src/web-whatsapp/index.js
@@ -57,7 +57,7 @@ class WebWhatsappProvider extends ProviderClass {
},
{
event: 'qr',
- func: (qr) => {
+ func: async (qr) => {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
@@ -65,7 +65,7 @@ class WebWhatsappProvider extends ProviderClass {
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- wwebGenerateImage(qr)
+ await wwebGenerateImage(qr)
},
},
{
diff --git a/packages/provider/src/web-whatsapp/utils.js b/packages/provider/src/web-whatsapp/utils.js
index 4a29b35..e70bd65 100644
--- a/packages/provider/src/web-whatsapp/utils.js
+++ b/packages/provider/src/web-whatsapp/utils.js
@@ -1,4 +1,5 @@
const { createWriteStream } = require('fs')
+const combineImage = require('combine-image')
const qr = require('qr-image')
const { tmpdir } = require('os')
const http = require('http')
@@ -10,9 +11,24 @@ const wwebCleanNumber = (number, full = false) => {
return number
}
-const wwebGenerateImage = (base64) => {
+const wwebGenerateImage = async (base64) => {
+ const PATH_QR = `${process.cwd()}/qr.png`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
- qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.png`))
+
+ const writeFilePromise = () =>
+ new Promise((resolve, reject) => {
+ const file = qr_svg.pipe(createWriteStream(PATH_QR))
+ file.on('finish', () => resolve(true))
+ file.on('error', reject)
+ })
+
+ await writeFilePromise()
+
+ const cleanImage = await combineImage([PATH_QR], {
+ margin: 15,
+ color: 0xffffffff,
+ })
+ cleanImage.write(PATH_QR)
}
const wwebIsValidNumber = (rawNumber) => {
diff --git a/scripts/move.js b/scripts/move.js
index d92d233..078581a 100644
--- a/scripts/move.js
+++ b/scripts/move.js
@@ -15,4 +15,5 @@ Promise.all([
copyLibPkg('bot', appDir),
copyLibPkg('database', appDir),
copyLibPkg('provider', appDir),
+ copyLibPkg('contexts', appDir),
]).then(() => console.log('Todas las librerías copiadas'))
diff --git a/starters/apps/base-bailey-memory/README.md b/starters/apps/base-bailey-memory/README.md
index f8e0e90..d0e43d2 100644
--- a/starters/apps/base-bailey-memory/README.md
+++ b/starters/apps/base-bailey-memory/README.md
@@ -1,12 +1,34 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-bailey-memory/app.js b/starters/apps/base-bailey-memory/app.js
index fdc0fdd..624f70f 100644
--- a/starters/apps/base-bailey-memory/app.js
+++ b/starters/apps/base-bailey-memory/app.js
@@ -10,7 +10,15 @@ const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
- * Declarando flujo hijo
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,18 +60,17 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
diff --git a/starters/apps/base-bailey-memory/package.json b/starters/apps/base-bailey-memory/package.json
index ef0e2b3..5e3ee48 100644
--- a/starters/apps/base-bailey-memory/package.json
+++ b/starters/apps/base-bailey-memory/package.json
@@ -9,12 +9,12 @@
},
"keywords": [],
"dependencies": {
- "@adiwajshing/baileys": "^4.4.0",
- "mime-types": "^2.1.35",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "@adiwajshing/baileys": "^4.4.0",
+ "mime-types": "^2.1.35"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-bailey-mongo/README.md b/starters/apps/base-bailey-mongo/README.md
index f8e0e90..a22e43b 100644
--- a/starters/apps/base-bailey-mongo/README.md
+++ b/starters/apps/base-bailey-mongo/README.md
@@ -1,12 +1,42 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos:
+```js
+// app.js
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+```
+
+ Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+ Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-bailey-mongo/app.js b/starters/apps/base-bailey-mongo/app.js
index fdc0fdd..f71a425 100644
--- a/starters/apps/base-bailey-mongo/app.js
+++ b/starters/apps/base-bailey-mongo/app.js
@@ -7,10 +7,25 @@ const {
} = require('@bot-whatsapp/bot')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MongoAdapter = require('@bot-whatsapp/database/mongo')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de Mongo
+ */
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +67,26 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MongoAdapter({
+ dbUri: MONGO_DB_URI,
+ dbName: MONGO_DB_NAME,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
diff --git a/starters/apps/base-bailey-mongo/package.json b/starters/apps/base-bailey-mongo/package.json
index ad14f04..64660e7 100644
--- a/starters/apps/base-bailey-mongo/package.json
+++ b/starters/apps/base-bailey-mongo/package.json
@@ -9,12 +9,13 @@
},
"keywords": [],
"dependencies": {
- "@adiwajshing/baileys": "^4.4.0",
- "mime-types": "^2.1.35",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "@adiwajshing/baileys": "^4.4.0",
+ "mime-types": "^2.1.35",
+ "mongodb": "^4.12.1"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-bailey-mysql/README.md b/starters/apps/base-bailey-mysql/README.md
index f8e0e90..4a1cab2 100644
--- a/starters/apps/base-bailey-mysql/README.md
+++ b/starters/apps/base-bailey-mysql/README.md
@@ -1,12 +1,44 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos
+```js
+// app.js
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+```
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-bailey-mysql/app.js b/starters/apps/base-bailey-mysql/app.js
index fdc0fdd..88e1e11 100644
--- a/starters/apps/base-bailey-mysql/app.js
+++ b/starters/apps/base-bailey-mysql/app.js
@@ -7,10 +7,26 @@ const {
} = require('@bot-whatsapp/bot')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MySQLAdapter = require('@bot-whatsapp/database/mysql')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de MySQL
+ */
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'usr'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +37,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +51,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +68,28 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MySQLAdapter({
+ host: MYSQL_DB_HOST,
+ user: MYSQL_DB_USER,
+ database: MYSQL_DB_NAME,
+ password: MYSQL_DB_PASSWORD,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
diff --git a/starters/apps/base-bailey-mysql/package.json b/starters/apps/base-bailey-mysql/package.json
index c8c66de..cbf2eb5 100644
--- a/starters/apps/base-bailey-mysql/package.json
+++ b/starters/apps/base-bailey-mysql/package.json
@@ -9,12 +9,13 @@
},
"keywords": [],
"dependencies": {
- "@adiwajshing/baileys": "^4.4.0",
- "mime-types": "^2.1.35",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "@adiwajshing/baileys": "^4.4.0",
+ "mime-types": "^2.1.35",
+ "mysql2": "^2.3.3"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-meta-memory/README.md b/starters/apps/base-meta-memory/README.md
index f8e0e90..d0e43d2 100644
--- a/starters/apps/base-meta-memory/README.md
+++ b/starters/apps/base-meta-memory/README.md
@@ -1,12 +1,34 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-meta-memory/app.js b/starters/apps/base-meta-memory/app.js
index 6f932f0..ab26888 100644
--- a/starters/apps/base-meta-memory/app.js
+++ b/starters/apps/base-meta-memory/app.js
@@ -10,7 +10,15 @@ const TwilioProvider = require('@bot-whatsapp/provider/twilio')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
- * Declarando flujo hijo
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,18 +60,17 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
diff --git a/starters/apps/base-meta-memory/package.json b/starters/apps/base-meta-memory/package.json
index d0af65c..af95cf3 100644
--- a/starters/apps/base-meta-memory/package.json
+++ b/starters/apps/base-meta-memory/package.json
@@ -11,7 +11,6 @@
"dependencies": {
"body-parser": "^1.20.1",
"polka": "^0.5.2",
- "twilio": "^3.83.4",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
diff --git a/starters/apps/base-twilio-memory/README.md b/starters/apps/base-twilio-memory/README.md
index f8e0e90..d0e43d2 100644
--- a/starters/apps/base-twilio-memory/README.md
+++ b/starters/apps/base-twilio-memory/README.md
@@ -1,12 +1,34 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-twilio-memory/app.js b/starters/apps/base-twilio-memory/app.js
index 6f932f0..ab26888 100644
--- a/starters/apps/base-twilio-memory/app.js
+++ b/starters/apps/base-twilio-memory/app.js
@@ -10,7 +10,15 @@ const TwilioProvider = require('@bot-whatsapp/provider/twilio')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
- * Declarando flujo hijo
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,18 +60,17 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
diff --git a/starters/apps/base-twilio-mongo/README.md b/starters/apps/base-twilio-mongo/README.md
index f8e0e90..0791742 100644
--- a/starters/apps/base-twilio-mongo/README.md
+++ b/starters/apps/base-twilio-mongo/README.md
@@ -1,12 +1,42 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexion de la base de datos
+```js
+// app.js
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+```
+
+ Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+ Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-twilio-mongo/app.js b/starters/apps/base-twilio-mongo/app.js
index cd29140..f1e735c 100644
--- a/starters/apps/base-twilio-mongo/app.js
+++ b/starters/apps/base-twilio-mongo/app.js
@@ -7,10 +7,25 @@ const {
} = require('@bot-whatsapp/bot')
const TwilioProvider = require('@bot-whatsapp/provider/twilio')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MongoAdapter = require('@bot-whatsapp/database/mongo')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de Mongo
+ */
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +67,26 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MongoAdapter({
+ dbUri: MONGO_DB_URI,
+ dbName: MONGO_DB_NAME,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(TwilioProvider, {
accountSid: 'YOUR_ACCOUNT_SID',
diff --git a/starters/apps/base-twilio-mongo/package.json b/starters/apps/base-twilio-mongo/package.json
index 56f4600..c8ead10 100644
--- a/starters/apps/base-twilio-mongo/package.json
+++ b/starters/apps/base-twilio-mongo/package.json
@@ -15,7 +15,9 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mime-types": "^2.1.35",
+ "mongodb": "^4.12.1"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-twilio-mysql/README.md b/starters/apps/base-twilio-mysql/README.md
index f8e0e90..ad304ee 100644
--- a/starters/apps/base-twilio-mysql/README.md
+++ b/starters/apps/base-twilio-mysql/README.md
@@ -1,12 +1,43 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos
+```js
+// app.js
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+```
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-twilio-mysql/app.js b/starters/apps/base-twilio-mysql/app.js
index f405728..724b819 100644
--- a/starters/apps/base-twilio-mysql/app.js
+++ b/starters/apps/base-twilio-mysql/app.js
@@ -7,10 +7,27 @@ const {
} = require('@bot-whatsapp/bot')
const TwilioProvider = require('@bot-whatsapp/provider/twilio')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MySQLAdapter = require('@bot-whatsapp/database/mysql')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de MySQL
+ */
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +38,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +52,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +69,28 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MySQLAdapter({
+ host: MYSQL_DB_HOST,
+ user: MYSQL_DB_USER,
+ database: MYSQL_DB_NAME,
+ password: MYSQL_DB_PASSWORD,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(TwilioProvider, {
accountSid: 'YOUR_ACCOUNT_SID',
diff --git a/starters/apps/base-twilio-mysql/package.json b/starters/apps/base-twilio-mysql/package.json
index 14f73dd..1f5e5d0 100644
--- a/starters/apps/base-twilio-mysql/package.json
+++ b/starters/apps/base-twilio-mysql/package.json
@@ -15,7 +15,8 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mysql2": "^2.3.3"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-venom-memory/README.md b/starters/apps/base-venom-memory/README.md
index f8e0e90..d0e43d2 100644
--- a/starters/apps/base-venom-memory/README.md
+++ b/starters/apps/base-venom-memory/README.md
@@ -1,12 +1,34 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-venom-memory/app.js b/starters/apps/base-venom-memory/app.js
index 9dd87ef..b785def 100644
--- a/starters/apps/base-venom-memory/app.js
+++ b/starters/apps/base-venom-memory/app.js
@@ -3,21 +3,82 @@ const {
createProvider,
createFlow,
addKeyword,
+ addChild,
} = require('@bot-whatsapp/bot')
const VenomProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock')
-const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
- .addAnswer('Bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+ */
+
+const flowBolsos2 = addKeyword(['bolsos2', '2'])
+ .addAnswer('🤯 *MUCHOS* bolsos ...')
+ .addAnswer('y mas bolsos... bla bla')
+
+const flowZapatos2 = addKeyword(['zapatos2', '2'])
+ .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
+ .addAnswer('y algunas otras cosas.')
+
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
+ .addAnswer('🤯 Veo que elegiste zapatos')
+ .addAnswer('Tengo muchos zapatos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowZapatos2)]
+ )
+
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
+ .addAnswer('🙌 Veo que elegiste bolsos')
+ .addAnswer('Tengo muchos bolsos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos2)]
+ )
+
+/**
+ * Declarando flujo principal
+ */
+
+const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer(
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos), ...addChild(flowZapatos)]
+ )
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(VenomProvider)
-
createBot({
flow: adapterFlow,
provider: adapterProvider,
diff --git a/starters/apps/base-venom-mongo/README.md b/starters/apps/base-venom-mongo/README.md
index f8e0e90..b2bf791 100644
--- a/starters/apps/base-venom-mongo/README.md
+++ b/starters/apps/base-venom-mongo/README.md
@@ -1,12 +1,42 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos.
+```js
+// app.js
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+```
+
+ Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+ Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-venom-mongo/app.js b/starters/apps/base-venom-mongo/app.js
index 9dd87ef..d1ec8fc 100644
--- a/starters/apps/base-venom-mongo/app.js
+++ b/starters/apps/base-venom-mongo/app.js
@@ -3,21 +3,92 @@ const {
createProvider,
createFlow,
addKeyword,
+ addChild,
} = require('@bot-whatsapp/bot')
const VenomProvider = require('@bot-whatsapp/provider/venom')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MongoAdapter = require('@bot-whatsapp/database/mongo')
-const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
- .addAnswer('Bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+/**
+ * Declaramos las conexiones de Mongo
+ */
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+ */
+
+const flowBolsos2 = addKeyword(['bolsos2', '2'])
+ .addAnswer('🤯 *MUCHOS* bolsos ...')
+ .addAnswer('y mas bolsos... bla bla')
+
+const flowZapatos2 = addKeyword(['zapatos2', '2'])
+ .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
+ .addAnswer('y algunas otras cosas.')
+
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
+ .addAnswer('🤯 Veo que elegiste zapatos')
+ .addAnswer('Tengo muchos zapatos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowZapatos2)]
+ )
+
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
+ .addAnswer('🙌 Veo que elegiste bolsos')
+ .addAnswer('Tengo muchos bolsos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos2)]
+ )
+
+/**
+ * Declarando flujo principal
+ */
+
+const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer(
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos), ...addChild(flowZapatos)]
+ )
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MongoAdapter({
+ dbUri: MONGO_DB_URI,
+ dbName: MONGO_DB_NAME,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(VenomProvider)
-
createBot({
flow: adapterFlow,
provider: adapterProvider,
diff --git a/starters/apps/base-venom-mongo/package.json b/starters/apps/base-venom-mongo/package.json
index d516b9d..6586c9f 100644
--- a/starters/apps/base-venom-mongo/package.json
+++ b/starters/apps/base-venom-mongo/package.json
@@ -13,7 +13,9 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mime-types": "^2.1.35",
+ "mongodb": "^4.12.1"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-venom-mysql/README.md b/starters/apps/base-venom-mysql/README.md
index f8e0e90..ad304ee 100644
--- a/starters/apps/base-venom-mysql/README.md
+++ b/starters/apps/base-venom-mysql/README.md
@@ -1,12 +1,43 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos
+```js
+// app.js
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+```
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-venom-mysql/app.js b/starters/apps/base-venom-mysql/app.js
index 9dd87ef..304e6fa 100644
--- a/starters/apps/base-venom-mysql/app.js
+++ b/starters/apps/base-venom-mysql/app.js
@@ -3,21 +3,96 @@ const {
createProvider,
createFlow,
addKeyword,
+ addChild,
} = require('@bot-whatsapp/bot')
const VenomProvider = require('@bot-whatsapp/provider/venom')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MySQLAdapter = require('@bot-whatsapp/database/mysql')
-const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
- .addAnswer('Bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+/**
+ * Declaramos las conexiones de MySQL
+ */
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+ */
+
+const flowBolsos2 = addKeyword(['bolsos2', '2'])
+ .addAnswer('🤯 *MUCHOS* bolsos ...')
+ .addAnswer('y mas bolsos... bla bla')
+
+const flowZapatos2 = addKeyword(['zapatos2', '2'])
+ .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
+ .addAnswer('y algunas otras cosas.')
+
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
+ .addAnswer('🤯 Veo que elegiste zapatos')
+ .addAnswer('Tengo muchos zapatos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowZapatos2)]
+ )
+
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
+ .addAnswer('🙌 Veo que elegiste bolsos')
+ .addAnswer('Tengo muchos bolsos...bla bla')
+ .addAnswer(
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos2)]
+ )
+
+/**
+ * Declarando flujo principal
+ */
+
+const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer(
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
+ { capture: true },
+ (ctx) => {
+ console.log('Aqui puedes ver más info del usuario...')
+ console.log('Puedes enviar un mail, hook, etc..')
+ console.log(ctx)
+ },
+ [...addChild(flowBolsos), ...addChild(flowZapatos)]
+ )
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MySQLAdapter({
+ host: MYSQL_DB_HOST,
+ user: MYSQL_DB_USER,
+ database: MYSQL_DB_NAME,
+ password: MYSQL_DB_PASSWORD,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(VenomProvider)
-
createBot({
flow: adapterFlow,
provider: adapterProvider,
diff --git a/starters/apps/base-venom-mysql/package.json b/starters/apps/base-venom-mysql/package.json
index d08359a..c549d12 100644
--- a/starters/apps/base-venom-mysql/package.json
+++ b/starters/apps/base-venom-mysql/package.json
@@ -13,7 +13,8 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mysql2": "^2.3.3"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-wweb-memory/README.md b/starters/apps/base-wweb-memory/README.md
index f8e0e90..d0e43d2 100644
--- a/starters/apps/base-wweb-memory/README.md
+++ b/starters/apps/base-wweb-memory/README.md
@@ -1,12 +1,34 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-wweb-memory/app.js b/starters/apps/base-wweb-memory/app.js
index 3717be9..f968ba9 100644
--- a/starters/apps/base-wweb-memory/app.js
+++ b/starters/apps/base-wweb-memory/app.js
@@ -10,7 +10,15 @@ const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
- * Declarando flujo hijo
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,18 +60,17 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
diff --git a/starters/apps/base-wweb-mongo/README.md b/starters/apps/base-wweb-mongo/README.md
index f8e0e90..a22e43b 100644
--- a/starters/apps/base-wweb-mongo/README.md
+++ b/starters/apps/base-wweb-mongo/README.md
@@ -1,12 +1,42 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos:
+```js
+// app.js
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+```
+
+ Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+ Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-wweb-mongo/app.js b/starters/apps/base-wweb-mongo/app.js
index 3717be9..60f20e7 100644
--- a/starters/apps/base-wweb-mongo/app.js
+++ b/starters/apps/base-wweb-mongo/app.js
@@ -7,10 +7,25 @@ const {
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MongoAdapter = require('@bot-whatsapp/database/mongo')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de Mongo
+ */
+
+const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
+const MONGO_DB_NAME = 'db_bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +67,26 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MongoAdapter({
+ dbUri: MONGO_DB_URI,
+ dbName: MONGO_DB_NAME,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
diff --git a/starters/apps/base-wweb-mongo/package.json b/starters/apps/base-wweb-mongo/package.json
index 390f6c9..9e323dd 100644
--- a/starters/apps/base-wweb-mongo/package.json
+++ b/starters/apps/base-wweb-mongo/package.json
@@ -13,7 +13,9 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mime-types": "^2.1.35",
+ "mongodb": "^4.12.1"
},
"author": "",
"license": "ISC"
diff --git a/starters/apps/base-wweb-mysql/README.md b/starters/apps/base-wweb-mysql/README.md
index f8e0e90..ad304ee 100644
--- a/starters/apps/base-wweb-mysql/README.md
+++ b/starters/apps/base-wweb-mysql/README.md
@@ -1,12 +1,43 @@
-### BASE APP
+### CHATBOT Whatsapp
-Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
+Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
+
+Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
- Bienvenido a mi tienda
-- Como puedo ayudarte?
-- Tengo: Zapatos Bolsos etc..
+- ¿Como puedo ayudarte?
+- Tengo: Zapatos, Bolsos etc..
+
+__Iniciar__
+
+Recuerda configurar los parametros de conexión de la base de datos
+```js
+// app.js
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+```
+Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
+
+ Menu Principal
+ - SubMenu 1
+ - Submenu 1.1
+ - Submenu 2
+ - Submenu 2.1
+
+Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
+
+```
+npm install
+npm start
+```
+
+__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
------
-- [Discord](https://link.codigoencasa.com/DISCORD)
-- [Twitter](https://twitter.com/leifermendez)
-- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
-- [Telegram](https://t.me/leifermendez)
+> ¿Quieres se parte de este proyecto?
+> - [Discord](https://link.codigoencasa.com/DISCORD)
+> - [Twitter](https://twitter.com/leifermendez)
+> - [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
+> - [Telegram](https://t.me/leifermendez)
diff --git a/starters/apps/base-wweb-mysql/app.js b/starters/apps/base-wweb-mysql/app.js
index 3717be9..d8d6f80 100644
--- a/starters/apps/base-wweb-mysql/app.js
+++ b/starters/apps/base-wweb-mysql/app.js
@@ -7,10 +7,27 @@ const {
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
-const MockAdapter = require('@bot-whatsapp/database/mock')
+const MySQLAdapter = require('@bot-whatsapp/database/mysql')
/**
- * Declarando flujo hijo
+ * Declaramos las conexiones de MySQL
+ */
+
+const MYSQL_DB_HOST = 'localhost'
+const MYSQL_DB_USER = 'user'
+const MYSQL_DB_PASSWORD = 'pass'
+const MYSQL_DB_NAME = 'bot'
+
+/**
+ * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
+ *
+ * Menu Principal
+ * - SubMenu 1
+ * - Submenu 1.1
+ * - Submenu 2
+ * - Submenu 2.1
+ *
+ * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
@@ -21,11 +38,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
-const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
+const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
+ ['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -35,11 +52,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
[...addChild(flowZapatos2)]
)
-const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
+const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
- ['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
+ ['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
@@ -52,24 +69,28 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
/**
* Declarando flujo principal
*/
+
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer('Hola, bienvenido a mi tienda')
- .addAnswer('Como puedo ayudarte?')
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
+ .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
+ .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer(
- ['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
+ ['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
- console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
- const adapterDB = new MockAdapter()
+ const adapterDB = new MySQLAdapter({
+ host: MYSQL_DB_HOST,
+ user: MYSQL_DB_USER,
+ database: MYSQL_DB_NAME,
+ password: MYSQL_DB_PASSWORD,
+ })
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
diff --git a/starters/apps/base-wweb-mysql/package.json b/starters/apps/base-wweb-mysql/package.json
index 329f3ef..3ab73d5 100644
--- a/starters/apps/base-wweb-mysql/package.json
+++ b/starters/apps/base-wweb-mysql/package.json
@@ -13,7 +13,8 @@
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
- "@bot-whatsapp/provider": "latest"
+ "@bot-whatsapp/provider": "latest",
+ "mysql2": "^2.3.3"
},
"author": "",
"license": "ISC"
diff --git a/yarn.lock b/yarn.lock
index 68f5d42..a39adac 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -82,15 +82,15 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/client-cognito-identity@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/client-cognito-identity@npm:3.229.0"
+"@aws-sdk/client-cognito-identity@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/client-cognito-identity@npm:3.231.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
- "@aws-sdk/client-sts": 3.229.0
- "@aws-sdk/config-resolver": 3.226.0
- "@aws-sdk/credential-provider-node": 3.229.0
+ "@aws-sdk/client-sts": 3.231.0
+ "@aws-sdk/config-resolver": 3.231.0
+ "@aws-sdk/credential-provider-node": 3.231.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -114,7 +114,7 @@ __metadata:
"@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.226.0
- "@aws-sdk/util-defaults-mode-node": 3.226.0
+ "@aws-sdk/util-defaults-mode-node": 3.231.0
"@aws-sdk/util-endpoints": 3.226.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
@@ -122,17 +122,17 @@ __metadata:
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: 742e26278a61685b276e4dbaa15e3e3fc5702606ec2be72f59a210eedba99b8b66fabfd2d00927e76f7941dbe63701176f5e8c6cad82224f30dfeca2b125c186
+ checksum: 309c433d0005c072db5298d75df4f37826350ffc2bdab940c1147f719f5285207e9761ee8f87884b23ea2cf5f8bf7157fcf992008f0a838491954cbe6925a47a
languageName: node
linkType: hard
-"@aws-sdk/client-sso-oidc@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/client-sso-oidc@npm:3.229.0"
+"@aws-sdk/client-sso-oidc@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/client-sso-oidc@npm:3.231.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
- "@aws-sdk/config-resolver": 3.226.0
+ "@aws-sdk/config-resolver": 3.231.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -155,7 +155,7 @@ __metadata:
"@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.226.0
- "@aws-sdk/util-defaults-mode-node": 3.226.0
+ "@aws-sdk/util-defaults-mode-node": 3.231.0
"@aws-sdk/util-endpoints": 3.226.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
@@ -163,17 +163,17 @@ __metadata:
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: 031bedebd213f7f2522321abb55bb50a2271e4d63ad38e3596eab6daeddb39044a4d72f554fc3e716ea4108317b3169ffb681b6e75f45ec83f730619b588eac6
+ checksum: 4ec5e5f0f25969df5d5341cd1f291a763ed2edaeb317228a7873f18f16471f2cbd83bd575f766a4f0f22c3ebfcf69ecd75891fd0518a205c69eb20ded8734c98
languageName: node
linkType: hard
-"@aws-sdk/client-sso@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/client-sso@npm:3.229.0"
+"@aws-sdk/client-sso@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/client-sso@npm:3.231.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
- "@aws-sdk/config-resolver": 3.226.0
+ "@aws-sdk/config-resolver": 3.231.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -196,7 +196,7 @@ __metadata:
"@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.226.0
- "@aws-sdk/util-defaults-mode-node": 3.226.0
+ "@aws-sdk/util-defaults-mode-node": 3.231.0
"@aws-sdk/util-endpoints": 3.226.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
@@ -204,18 +204,18 @@ __metadata:
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: 970e6ea9666a6e976f0b4e7f693e286ade8c090aca1ae780835050623f5d8bd3ecbc0336d1b3f4037e92d50c48b5d18d5ad6d595ddb62db7efe38b90ab928129
+ checksum: 3551984b8c14f611daa93c7082f2a361caa0c8e985fbfc6d66674ec7f3624364aa7d3c8011aa334729022e3866e5323c6ac18a4ba3e840023128000994d99165
languageName: node
linkType: hard
-"@aws-sdk/client-sts@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/client-sts@npm:3.229.0"
+"@aws-sdk/client-sts@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/client-sts@npm:3.231.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
- "@aws-sdk/config-resolver": 3.226.0
- "@aws-sdk/credential-provider-node": 3.229.0
+ "@aws-sdk/config-resolver": 3.231.0
+ "@aws-sdk/credential-provider-node": 3.231.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -240,7 +240,7 @@ __metadata:
"@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.226.0
- "@aws-sdk/util-defaults-mode-node": 3.226.0
+ "@aws-sdk/util-defaults-mode-node": 3.231.0
"@aws-sdk/util-endpoints": 3.226.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
@@ -249,32 +249,32 @@ __metadata:
"@aws-sdk/util-utf8-node": 3.208.0
fast-xml-parser: 4.0.11
tslib: ^2.3.1
- checksum: 18d357f2433ef832948f867c0e22ba34ac57c096e8b5209e0203d892acab9de60d9114a513f8ec9354ec83a89652a8285a49f89ee3203cededc514a25eea67f5
+ checksum: 377eabf0ff0523b7847fe1677084293c322d5525443a859f522b83363eb647a87721245f7b48f7232e2f2f3b49dfdaefdf274e9578915c24617c5d7540624aca
languageName: node
linkType: hard
-"@aws-sdk/config-resolver@npm:3.226.0":
- version: 3.226.0
- resolution: "@aws-sdk/config-resolver@npm:3.226.0"
+"@aws-sdk/config-resolver@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/config-resolver@npm:3.231.0"
dependencies:
"@aws-sdk/signature-v4": 3.226.0
"@aws-sdk/types": 3.226.0
"@aws-sdk/util-config-provider": 3.208.0
"@aws-sdk/util-middleware": 3.226.0
tslib: ^2.3.1
- checksum: 08bfbc0528da98cba2b46bda05cd9af46f6eced3dbe5e415b11465501fe672d99b869adc9f08cfd2f138c9b61ac119b43eb9a90a490395aec705e1b795022d4d
+ checksum: 67ec8d1f547cdde45f9c0daec21864225cfc04fba732e5e157b59d23f987d588fdc1738e1ce43012f885bdb6e65da8105511f5816e5844a5b839192b5feecc64
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-cognito-identity@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.229.0"
+"@aws-sdk/credential-provider-cognito-identity@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.231.0"
dependencies:
- "@aws-sdk/client-cognito-identity": 3.229.0
+ "@aws-sdk/client-cognito-identity": 3.231.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: 37cc46249390dc5bc6cb39b014a2c9710fcbe53d22b8cf90452473712f7464dffcf286c3c7cb72ae268988c136710a1dbcb52006d93d2de8973c40953ef79058
+ checksum: f0c2059379f703e72538b00e52d2f5ce01c69a8adf3af370af2e72cc971ffe44963e6611917032326c0207b11fe34133780540e4ab0412e36e6c34b589f3dec3
languageName: node
linkType: hard
@@ -302,37 +302,37 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-ini@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/credential-provider-ini@npm:3.229.0"
+"@aws-sdk/credential-provider-ini@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/credential-provider-ini@npm:3.231.0"
dependencies:
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.229.0
+ "@aws-sdk/credential-provider-sso": 3.231.0
"@aws-sdk/credential-provider-web-identity": 3.226.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: fb573675c0c34c7fa0e207c78190bce73e42fc1713d93a25868b50002352a70f3584e2ab0a0b249103bcf25c3a60c26261ad3dcfc1d6280b4f5dc8ad4e4b3f49
+ checksum: f6b11d4876602e65464bc25804781b78a6e0c66b39c293178d7e97f2f11c151bd6e23e1e31158c0442dfbc3076f417aeecf44c315d4e509b48e7cfc3be2e7472
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-node@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/credential-provider-node@npm:3.229.0"
+"@aws-sdk/credential-provider-node@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/credential-provider-node@npm:3.231.0"
dependencies:
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
- "@aws-sdk/credential-provider-ini": 3.229.0
+ "@aws-sdk/credential-provider-ini": 3.231.0
"@aws-sdk/credential-provider-process": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.229.0
+ "@aws-sdk/credential-provider-sso": 3.231.0
"@aws-sdk/credential-provider-web-identity": 3.226.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: a8ad0f6aeb3c7ee03937e7389dbcabeb81f2a6e23c3bfeb84f518b063fb156a2d2f2e4a7267655c6bdfa178ba51e9e0ea74c98397dd6dd58b9a315d9e5a4a6de
+ checksum: e28266dce53130c6e28eb7e82028e29cb2db2f06e1f40c98ae7875bcf2e17553976899f02b93576070c7fd77c131046ec752f543f9aa7e32078e1f3a44c3acf5
languageName: node
linkType: hard
@@ -348,17 +348,17 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-sso@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/credential-provider-sso@npm:3.229.0"
+"@aws-sdk/credential-provider-sso@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/credential-provider-sso@npm:3.231.0"
dependencies:
- "@aws-sdk/client-sso": 3.229.0
+ "@aws-sdk/client-sso": 3.231.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
- "@aws-sdk/token-providers": 3.229.0
+ "@aws-sdk/token-providers": 3.231.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: 9497a8c5dfddf70a4740e9e485cea757070a6e9c5c94469cc51599918f2689f6ca794fcaba98320b20aa7b81e7e56c3b91f11d3cf8111335e445638825d0ee58
+ checksum: 0aa69ec7ea5b0115c53972c6ae0419687e0bebc7500fbefa77c1108ecb81e735227982b586180b2fe111427cba17fad75f6db61f69a8b5cf5ad079f7ee09107c
languageName: node
linkType: hard
@@ -374,25 +374,25 @@ __metadata:
linkType: hard
"@aws-sdk/credential-providers@npm:^3.186.0":
- version: 3.229.0
- resolution: "@aws-sdk/credential-providers@npm:3.229.0"
+ version: 3.231.0
+ resolution: "@aws-sdk/credential-providers@npm:3.231.0"
dependencies:
- "@aws-sdk/client-cognito-identity": 3.229.0
- "@aws-sdk/client-sso": 3.229.0
- "@aws-sdk/client-sts": 3.229.0
- "@aws-sdk/credential-provider-cognito-identity": 3.229.0
+ "@aws-sdk/client-cognito-identity": 3.231.0
+ "@aws-sdk/client-sso": 3.231.0
+ "@aws-sdk/client-sts": 3.231.0
+ "@aws-sdk/credential-provider-cognito-identity": 3.231.0
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
- "@aws-sdk/credential-provider-ini": 3.229.0
- "@aws-sdk/credential-provider-node": 3.229.0
+ "@aws-sdk/credential-provider-ini": 3.231.0
+ "@aws-sdk/credential-provider-node": 3.231.0
"@aws-sdk/credential-provider-process": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.229.0
+ "@aws-sdk/credential-provider-sso": 3.231.0
"@aws-sdk/credential-provider-web-identity": 3.226.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: 9acd1bfb97d5c45a3b02ed74540317791eb00a058bbe4ab2852099f59dff62ab6a7f834dcfdb1f75e80956b86d80a3b44c0574361a12473f8a3e493437a1b36a
+ checksum: edbf6a2821c5bf38d40a83f8d7c8ab967fff85d2c10af79f6f5df40cd52ef185f988c6499552a0294ca98cb7db34cb77e046a78e779e5ff5d362d104c29acc83
languageName: node
linkType: hard
@@ -678,16 +678,16 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/token-providers@npm:3.229.0":
- version: 3.229.0
- resolution: "@aws-sdk/token-providers@npm:3.229.0"
+"@aws-sdk/token-providers@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/token-providers@npm:3.231.0"
dependencies:
- "@aws-sdk/client-sso-oidc": 3.229.0
+ "@aws-sdk/client-sso-oidc": 3.231.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: b099537ba47f3c2520f8081590ef97d22279aea39fcb1f3883f611273c8f15f4190d7b44f3f2debfdb36900f124e5f188193b039ce95c45c6e20d3b48ef9a3da
+ checksum: 3fe2b2776232f2aad499d74ec540431db013520a1c4e3cee6ed4ab4d5cb2a402b1b50dd60f64d1c95e9ebb2bcc44c2244462d62453b9f6226b73082930dcc119
languageName: node
linkType: hard
@@ -770,17 +770,17 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/util-defaults-mode-node@npm:3.226.0":
- version: 3.226.0
- resolution: "@aws-sdk/util-defaults-mode-node@npm:3.226.0"
+"@aws-sdk/util-defaults-mode-node@npm:3.231.0":
+ version: 3.231.0
+ resolution: "@aws-sdk/util-defaults-mode-node@npm:3.231.0"
dependencies:
- "@aws-sdk/config-resolver": 3.226.0
+ "@aws-sdk/config-resolver": 3.231.0
"@aws-sdk/credential-provider-imds": 3.226.0
"@aws-sdk/node-config-provider": 3.226.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: cb34426f745aa3965fe25d5c8e38eb4d1c3f85f6f071995b15ecad48afcd0ca01a01b7f572c26dacd917134d9c676625492df8f6fb01d702ad6becb65bd34105
+ checksum: 6dca6704798145569f25002605c4918890ebd2b7bf56d20909192993eea5bcf8fdceff7f51484c9ab7e009a77c3d371e0935666d204c819e703128e857859e73
languageName: node
linkType: hard
@@ -963,6 +963,14 @@ __metadata:
languageName: unknown
linkType: soft
+"@bot-whatsapp/contexts@workspace:packages/contexts":
+ version: 0.0.0-use.local
+ resolution: "@bot-whatsapp/contexts@workspace:packages/contexts"
+ dependencies:
+ "@bot-whatsapp/bot": "*"
+ languageName: unknown
+ linkType: soft
+
"@bot-whatsapp/database@npm:*":
version: 0.1.2
resolution: "@bot-whatsapp/database@npm:0.1.2"
@@ -1001,6 +1009,7 @@ __metadata:
resolution: "@bot-whatsapp/provider@workspace:packages/provider"
dependencies:
"@bot-whatsapp/bot": "*"
+ combine-image: ^1.0.3
qr-image: ^3.2.0
languageName: unknown
linkType: soft
@@ -1315,20 +1324,20 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/eslintrc@npm:^1.3.3":
- version: 1.3.3
- resolution: "@eslint/eslintrc@npm:1.3.3"
+"@eslint/eslintrc@npm:^1.3.3, @eslint/eslintrc@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "@eslint/eslintrc@npm:1.4.0"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
espree: ^9.4.0
- globals: ^13.15.0
+ globals: ^13.19.0
ignore: ^5.2.0
import-fresh: ^3.2.1
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
- checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694
+ checksum: 73e39c833deafde8d8706e6fa9b52b6d99927c094ead8e405ea4174e8197ec24aac9ba88ae38cc8ad32eaccf07b9c7fc5dc70761d1fba6da41a928691447305f
languageName: node
linkType: hard
@@ -1339,14 +1348,14 @@ __metadata:
languageName: node
linkType: hard
-"@humanwhocodes/config-array@npm:^0.11.6":
- version: 0.11.7
- resolution: "@humanwhocodes/config-array@npm:0.11.7"
+"@humanwhocodes/config-array@npm:^0.11.6, @humanwhocodes/config-array@npm:^0.11.8":
+ version: 0.11.8
+ resolution: "@humanwhocodes/config-array@npm:0.11.8"
dependencies:
"@humanwhocodes/object-schema": ^1.2.1
debug: ^4.1.1
minimatch: ^3.0.5
- checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac
+ checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3
languageName: node
linkType: hard
@@ -1392,7 +1401,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10":
+"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13":
version: 1.4.14
resolution: "@jridgewell/sourcemap-codec@npm:1.4.14"
checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97
@@ -1693,21 +1702,21 @@ __metadata:
linkType: hard
"@rollup/plugin-commonjs@npm:^23.0.2":
- version: 23.0.4
- resolution: "@rollup/plugin-commonjs@npm:23.0.4"
+ version: 23.0.7
+ resolution: "@rollup/plugin-commonjs@npm:23.0.7"
dependencies:
"@rollup/pluginutils": ^5.0.1
commondir: ^1.0.1
estree-walker: ^2.0.2
glob: ^8.0.3
is-reference: 1.2.1
- magic-string: ^0.26.4
+ magic-string: ^0.27.0
peerDependencies:
rollup: ^2.68.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
- checksum: 32d84de06140d4d050c0b402c6a6d858a6f970c3d6f50ea1fba40495b0cd0f977486513639875058287885cfbddc6f8b1ab5ebbe0d28f0364506b372fd4b0bd6
+ checksum: 01d90947bd4aa664c568cec172399825921f29afc035a6d8aec153868ab151ce7901ad56a101c76655e31b21567ddc70313c4bca476685b872218f041757a8c9
languageName: node
linkType: hard
@@ -1745,17 +1754,17 @@ __metadata:
linkType: hard
"@rollup/plugin-replace@npm:^5.0.1":
- version: 5.0.1
- resolution: "@rollup/plugin-replace@npm:5.0.1"
+ version: 5.0.2
+ resolution: "@rollup/plugin-replace@npm:5.0.2"
dependencies:
"@rollup/pluginutils": ^5.0.1
- magic-string: ^0.26.4
+ magic-string: ^0.27.0
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
- checksum: d5f98a93dd24086ed1bf70e9299230d1fddae9b132280e2daaca855dba2307eccd5490553e2a03b701b7411593d2921d2d675e5d906b4754c57152f8c50adb07
+ checksum: 3a91b5fa2ce5acfe67c1faf8d479585da30f398f29499cf8a2d2153c899af0b2ef0363012db0e6edc2ebbb3d9fad6dd7ad591c9d977c1ae2ca3256b52e86d950
languageName: node
linkType: hard
@@ -1950,16 +1959,16 @@ __metadata:
linkType: hard
"@types/node@npm:*, @types/node@npm:latest":
- version: 18.11.15
- resolution: "@types/node@npm:18.11.15"
- checksum: cae8692a5cee0316f93ee0342237eb921f70c51afb37c661c711a925a4642654ae7e404c5a80899d481c0cfaff3a6891ef04bacd330a2e72734192bfc91dc2d8
+ version: 18.11.17
+ resolution: "@types/node@npm:18.11.17"
+ checksum: 1933afd068d5c75c068c6c4df6d10edb3b0b2bb6503d544e2f0496ac007c90596e6a5e284a8ef032451bc16f871b7e46719d7d2bea60e9b25d13a77d52161cac
languageName: node
linkType: hard
"@types/node@npm:^14.0.0":
- version: 14.18.34
- resolution: "@types/node@npm:14.18.34"
- checksum: 25ac3b456a0b7b82c76b37276ec86845849e8276fc81d1470a87227c105c619e299aa7165b6148aa11a4ea156b1452f6d3327935f3e7dc0067ff54dde0e3d4e0
+ version: 14.18.35
+ resolution: "@types/node@npm:14.18.35"
+ checksum: edaeea2735aa62a12b9f67311ef6efdb960560e055dc127a658b3571e0bbd52e020bd570227362bf255cd156ddfae18c18205515f1fb3599e34c06a914f167a1
languageName: node
linkType: hard
@@ -2250,7 +2259,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^6.10.0, ajv@npm:^6.12.4":
+"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4":
version: 6.12.6
resolution: "ajv@npm:6.12.6"
dependencies:
@@ -2398,6 +2407,22 @@ __metadata:
languageName: node
linkType: hard
+"asn1@npm:~0.2.3":
+ version: 0.2.6
+ resolution: "asn1@npm:0.2.6"
+ dependencies:
+ safer-buffer: ~2.1.0
+ checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d
+ languageName: node
+ linkType: hard
+
+"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "assert-plus@npm:1.0.0"
+ checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64
+ languageName: node
+ linkType: hard
+
"astring@npm:^1.8.0":
version: 1.8.3
resolution: "astring@npm:1.8.3"
@@ -2407,6 +2432,13 @@ __metadata:
languageName: node
linkType: hard
+"asynckit@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "asynckit@npm:0.4.0"
+ checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be
+ languageName: node
+ linkType: hard
+
"autoprefixer@npm:10.4.11":
version: 10.4.11
resolution: "autoprefixer@npm:10.4.11"
@@ -2425,6 +2457,20 @@ __metadata:
languageName: node
linkType: hard
+"aws-sign2@npm:~0.7.0":
+ version: 0.7.0
+ resolution: "aws-sign2@npm:0.7.0"
+ checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525
+ languageName: node
+ linkType: hard
+
+"aws4@npm:^1.8.0":
+ version: 1.11.0
+ resolution: "aws4@npm:1.11.0"
+ checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f
+ languageName: node
+ linkType: hard
+
"bail@npm:^2.0.0":
version: 2.0.2
resolution: "bail@npm:2.0.2"
@@ -2446,6 +2492,22 @@ __metadata:
languageName: node
linkType: hard
+"bcrypt-pbkdf@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "bcrypt-pbkdf@npm:1.0.2"
+ dependencies:
+ tweetnacl: ^0.14.3
+ checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291
+ languageName: node
+ linkType: hard
+
+"bignumber.js@npm:^2.1.0":
+ version: 2.4.0
+ resolution: "bignumber.js@npm:2.4.0"
+ checksum: 822c0318b8d077566f2ae1e3b3a78ebd0aa0a1f74a2dc4a5c0bab0fbcfc3e4af56489db814f64cdca973d4682468d99c251fe10dc81060225a1cfc19404a92c5
+ languageName: node
+ linkType: hard
+
"binary-extensions@npm:^2.0.0":
version: 2.2.0
resolution: "binary-extensions@npm:2.2.0"
@@ -2460,6 +2522,13 @@ __metadata:
languageName: node
linkType: hard
+"bmp-js@npm:0.0.1":
+ version: 0.0.1
+ resolution: "bmp-js@npm:0.0.1"
+ checksum: 6fa93734e9f8968f13871d39f112d76595097e3c8eb3ae948e944ebfef8723b5d87544134e0816e7f6a4ecb0d6cf61bb6653984d8854c15774d96c4998e188ab
+ languageName: node
+ linkType: hard
+
"bot-whatsapp-docs@workspace:packages/docs":
version: 0.0.0-use.local
resolution: "bot-whatsapp-docs@workspace:packages/docs"
@@ -2558,6 +2627,13 @@ __metadata:
languageName: node
linkType: hard
+"buffer-equal@npm:0.0.1":
+ version: 0.0.1
+ resolution: "buffer-equal@npm:0.0.1"
+ checksum: ca4b52e6c01143529d957a78cb9a93e4257f172bbab30d9eb87c20ae085ed23c5e07f236ac051202dacbf3d17aba42e1455f84cba21ea79b67d57f2b05e9a613
+ languageName: node
+ linkType: hard
+
"buffer-from@npm:^1.0.0":
version: 1.1.2
resolution: "buffer-from@npm:1.1.2"
@@ -2687,6 +2763,13 @@ __metadata:
languageName: node
linkType: hard
+"caseless@npm:~0.12.0":
+ version: 0.12.0
+ resolution: "caseless@npm:0.12.0"
+ checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751
+ languageName: node
+ linkType: hard
+
"ccount@npm:^2.0.0":
version: 2.0.1
resolution: "ccount@npm:2.0.1"
@@ -2863,6 +2946,25 @@ __metadata:
languageName: node
linkType: hard
+"combine-image@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "combine-image@npm:1.0.3"
+ dependencies:
+ is-plain-obj: ^1.1.0
+ jimp: 0.2.27
+ checksum: 5a70fcff187e98a988214c175490f7862bc6032e7b532bd8d52aa95d68f630c3c1740c3f8098137759463851a4b9332041be1f9c8a67c84e07e1650a4fb65531
+ languageName: node
+ linkType: hard
+
+"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6":
+ version: 1.0.8
+ resolution: "combined-stream@npm:1.0.8"
+ dependencies:
+ delayed-stream: ~1.0.0
+ checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c
+ languageName: node
+ linkType: hard
+
"comma-separated-tokens@npm:^2.0.0":
version: 2.0.3
resolution: "comma-separated-tokens@npm:2.0.3"
@@ -3148,6 +3250,13 @@ __metadata:
languageName: node
linkType: hard
+"core-util-is@npm:1.0.2":
+ version: 1.0.2
+ resolution: "core-util-is@npm:1.0.2"
+ checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab
+ languageName: node
+ linkType: hard
+
"core-util-is@npm:~1.0.0":
version: 1.0.3
resolution: "core-util-is@npm:1.0.3"
@@ -3243,6 +3352,15 @@ __metadata:
languageName: node
linkType: hard
+"dashdash@npm:^1.12.0":
+ version: 1.14.1
+ resolution: "dashdash@npm:1.14.1"
+ dependencies:
+ assert-plus: ^1.0.0
+ checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598
+ languageName: node
+ linkType: hard
+
"data-uri-to-buffer@npm:^4.0.0":
version: 4.0.0
resolution: "data-uri-to-buffer@npm:4.0.0"
@@ -3316,6 +3434,13 @@ __metadata:
languageName: node
linkType: hard
+"delayed-stream@npm:~1.0.0":
+ version: 1.0.0
+ resolution: "delayed-stream@npm:1.0.0"
+ checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020
+ languageName: node
+ linkType: hard
+
"delegates@npm:^1.0.0":
version: 1.0.0
resolution: "delegates@npm:1.0.0"
@@ -3426,6 +3551,13 @@ __metadata:
languageName: node
linkType: hard
+"dom-walk@npm:^0.1.0":
+ version: 0.1.2
+ resolution: "dom-walk@npm:0.1.2"
+ checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3
+ languageName: node
+ linkType: hard
+
"dot-prop@npm:^5.1.0":
version: 5.3.0
resolution: "dot-prop@npm:5.3.0"
@@ -3459,6 +3591,16 @@ __metadata:
languageName: node
linkType: hard
+"ecc-jsbn@npm:~0.1.1":
+ version: 0.1.2
+ resolution: "ecc-jsbn@npm:0.1.2"
+ dependencies:
+ jsbn: ~0.1.0
+ safer-buffer: ^2.1.0
+ checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a
+ languageName: node
+ linkType: hard
+
"electron-to-chromium@npm:^1.4.251":
version: 1.4.284
resolution: "electron-to-chromium@npm:1.4.284"
@@ -3514,6 +3656,13 @@ __metadata:
languageName: node
linkType: hard
+"es6-promise@npm:^3.0.2":
+ version: 3.3.1
+ resolution: "es6-promise@npm:3.3.1"
+ checksum: ce4044009c2b78db18b15212338eb711cd8a4d485961bc9ec18bb24e8c1e91c96d3295b0fcf63066fc0fa1b0ade36da05e6657827d4336dece382be2429b8398
+ languageName: node
+ linkType: hard
+
"esbuild-android-64@npm:0.14.51":
version: 0.14.51
resolution: "esbuild-android-64@npm:0.14.51"
@@ -4078,11 +4227,11 @@ __metadata:
linkType: hard
"eslint@npm:^8.26.0":
- version: 8.29.0
- resolution: "eslint@npm:8.29.0"
+ version: 8.30.0
+ resolution: "eslint@npm:8.30.0"
dependencies:
- "@eslint/eslintrc": ^1.3.3
- "@humanwhocodes/config-array": ^0.11.6
+ "@eslint/eslintrc": ^1.4.0
+ "@humanwhocodes/config-array": ^0.11.8
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
ajv: ^6.10.0
@@ -4101,7 +4250,7 @@ __metadata:
file-entry-cache: ^6.0.1
find-up: ^5.0.0
glob-parent: ^6.0.2
- globals: ^13.15.0
+ globals: ^13.19.0
grapheme-splitter: ^1.0.4
ignore: ^5.2.0
import-fresh: ^3.0.0
@@ -4122,7 +4271,7 @@ __metadata:
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
- checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab
+ checksum: b7525bb465b342665c3b8bab7e114d514ef1bc4e79f211c919863f9c71767e7412ec82383a22614a92d159783f91101018817000f7c61ce69a5e7015280cafaf
languageName: node
linkType: hard
@@ -4296,13 +4445,34 @@ __metadata:
languageName: node
linkType: hard
-"extend@npm:^3.0.0":
+"exif-parser@npm:^0.1.9":
+ version: 0.1.12
+ resolution: "exif-parser@npm:0.1.12"
+ checksum: 6ba50cb9e0b45a6efa37e966a9582ecd171b5c5b3ef0c47542f2b862c521f70d2f656dde85b4d2a5dd8e1163486b09049f4c412e9c6176bfbda1654a5b2f021c
+ languageName: node
+ linkType: hard
+
+"extend@npm:^3.0.0, extend@npm:~3.0.2":
version: 3.0.2
resolution: "extend@npm:3.0.2"
checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515
languageName: node
linkType: hard
+"extsprintf@npm:1.3.0":
+ version: 1.3.0
+ resolution: "extsprintf@npm:1.3.0"
+ checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2
+ languageName: node
+ linkType: hard
+
+"extsprintf@npm:^1.2.0":
+ version: 1.4.1
+ resolution: "extsprintf@npm:1.4.1"
+ checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33
+ languageName: node
+ linkType: hard
+
"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
version: 3.1.3
resolution: "fast-deep-equal@npm:3.1.3"
@@ -4385,6 +4555,13 @@ __metadata:
languageName: node
linkType: hard
+"file-type@npm:^3.1.0":
+ version: 3.9.0
+ resolution: "file-type@npm:3.9.0"
+ checksum: 1db70b2485ac77c4edb4b8753c1874ee6194123533f43c2651820f96b518f505fa570b093fedd6672eb105ba9fb89c62f84b6492e46788e39c3447aed37afa2d
+ languageName: node
+ linkType: hard
+
"fill-range@npm:^7.0.1":
version: 7.0.1
resolution: "fill-range@npm:7.0.1"
@@ -4459,6 +4636,24 @@ __metadata:
languageName: node
linkType: hard
+"forever-agent@npm:~0.6.1":
+ version: 0.6.1
+ resolution: "forever-agent@npm:0.6.1"
+ checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8
+ languageName: node
+ linkType: hard
+
+"form-data@npm:~2.3.2":
+ version: 2.3.3
+ resolution: "form-data@npm:2.3.3"
+ dependencies:
+ asynckit: ^0.4.0
+ combined-stream: ^1.0.6
+ mime-types: ^2.1.12
+ checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3
+ languageName: node
+ linkType: hard
+
"formdata-polyfill@npm:^4.0.10":
version: 4.0.10
resolution: "formdata-polyfill@npm:4.0.10"
@@ -4612,6 +4807,15 @@ __metadata:
languageName: node
linkType: hard
+"getpass@npm:^0.1.1":
+ version: 0.1.7
+ resolution: "getpass@npm:0.1.7"
+ dependencies:
+ assert-plus: ^1.0.0
+ checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046
+ languageName: node
+ linkType: hard
+
"git-cz@npm:^4.9.0":
version: 4.9.0
resolution: "git-cz@npm:4.9.0"
@@ -4743,7 +4947,17 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^13.15.0":
+"global@npm:~4.4.0":
+ version: 4.4.0
+ resolution: "global@npm:4.4.0"
+ dependencies:
+ min-document: ^2.19.0
+ process: ^0.11.10
+ checksum: 9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f
+ languageName: node
+ linkType: hard
+
+"globals@npm:^13.15.0, globals@npm:^13.19.0":
version: 13.19.0
resolution: "globals@npm:13.19.0"
dependencies:
@@ -4821,6 +5035,23 @@ __metadata:
languageName: node
linkType: hard
+"har-schema@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "har-schema@npm:2.0.0"
+ checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b
+ languageName: node
+ linkType: hard
+
+"har-validator@npm:~5.1.3":
+ version: 5.1.5
+ resolution: "har-validator@npm:5.1.5"
+ dependencies:
+ ajv: ^6.12.3
+ har-schema: ^2.0.0
+ checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280
+ languageName: node
+ linkType: hard
+
"hard-rejection@npm:^2.1.0":
version: 2.1.0
resolution: "hard-rejection@npm:2.1.0"
@@ -4936,6 +5167,17 @@ __metadata:
languageName: node
linkType: hard
+"http-signature@npm:~1.2.0":
+ version: 1.2.0
+ resolution: "http-signature@npm:1.2.0"
+ dependencies:
+ assert-plus: ^1.0.0
+ jsprim: ^1.2.2
+ sshpk: ^1.7.0
+ checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c
+ languageName: node
+ linkType: hard
+
"https-proxy-agent@npm:^5.0.0":
version: 5.0.1
resolution: "https-proxy-agent@npm:5.0.1"
@@ -5002,9 +5244,9 @@ __metadata:
linkType: hard
"ignore@npm:^5.1.1, ignore@npm:^5.1.4, ignore@npm:^5.2.0":
- version: 5.2.1
- resolution: "ignore@npm:5.2.1"
- checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5
+ version: 5.2.2
+ resolution: "ignore@npm:5.2.2"
+ checksum: 2086f12e8dca6978001b3861562272888fcf231f464696938049e0aa576d0562a8f31926630a973e302944c20c64639c14cfdd725bacd208dcda973021377420
languageName: node
linkType: hard
@@ -5070,6 +5312,13 @@ __metadata:
languageName: node
linkType: hard
+"ip-regex@npm:^1.0.1":
+ version: 1.0.3
+ resolution: "ip-regex@npm:1.0.3"
+ checksum: 9ce02e567949be9cf4d16c5c314cd241ce1edf78b2619e94b276cdff97eefe198970a224f9d1f0c22a92c4655997ad68fd34d82e41e7d19fafa47fe15108f22a
+ languageName: node
+ linkType: hard
+
"ip@npm:^2.0.0":
version: 2.0.0
resolution: "ip@npm:2.0.0"
@@ -5156,6 +5405,13 @@ __metadata:
languageName: node
linkType: hard
+"is-function@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "is-function@npm:1.0.2"
+ checksum: 7d564562e07b4b51359547d3ccc10fb93bb392fd1b8177ae2601ee4982a0ece86d952323fc172a9000743a3971f09689495ab78a1d49a9b14fc97a7e28521dc0
+ languageName: node
+ linkType: hard
+
"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
@@ -5276,6 +5532,13 @@ __metadata:
languageName: node
linkType: hard
+"is-typedarray@npm:~1.0.0":
+ version: 1.0.0
+ resolution: "is-typedarray@npm:1.0.0"
+ checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7
+ languageName: node
+ linkType: hard
+
"isarray@npm:~1.0.0":
version: 1.0.0
resolution: "isarray@npm:1.0.0"
@@ -5290,6 +5553,13 @@ __metadata:
languageName: node
linkType: hard
+"isstream@npm:~0.1.2":
+ version: 0.1.2
+ resolution: "isstream@npm:0.1.2"
+ checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963
+ languageName: node
+ linkType: hard
+
"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
version: 3.2.0
resolution: "istanbul-lib-coverage@npm:3.2.0"
@@ -5318,6 +5588,36 @@ __metadata:
languageName: node
linkType: hard
+"jimp@npm:0.2.27":
+ version: 0.2.27
+ resolution: "jimp@npm:0.2.27"
+ dependencies:
+ bignumber.js: ^2.1.0
+ bmp-js: 0.0.1
+ es6-promise: ^3.0.2
+ exif-parser: ^0.1.9
+ file-type: ^3.1.0
+ jpeg-js: ^0.2.0
+ load-bmfont: ^1.2.3
+ mime: ^1.3.4
+ pixelmatch: ^4.0.0
+ pngjs: ^3.0.0
+ read-chunk: ^1.0.1
+ request: ^2.65.0
+ stream-to-buffer: ^0.1.0
+ tinycolor2: ^1.1.2
+ url-regex: ^3.0.0
+ checksum: b64ded908f3b39f17706ce955073606fbb586609e3d336a794e11c998e42c6d0f5c938d81672ec6835fc94aaec3f9d0bc9541515efdf51e56c516d4499d45277
+ languageName: node
+ linkType: hard
+
+"jpeg-js@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "jpeg-js@npm:0.2.0"
+ checksum: 2a57b19e252a86b583e9b1e917ddb1c3617170493fee6dfd01bf8ff5e0e43123cb988c0066681f7ea19c093cf1b61d19c47c88258d03395f16946e35856135bc
+ languageName: node
+ linkType: hard
+
"js-cleanup@npm:^1.2.0":
version: 1.2.0
resolution: "js-cleanup@npm:1.2.0"
@@ -5354,6 +5654,13 @@ __metadata:
languageName: node
linkType: hard
+"jsbn@npm:~0.1.0":
+ version: 0.1.1
+ resolution: "jsbn@npm:0.1.1"
+ checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2
+ languageName: node
+ linkType: hard
+
"json-parse-better-errors@npm:^1.0.1":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
@@ -5382,6 +5689,13 @@ __metadata:
languageName: node
linkType: hard
+"json-schema@npm:0.4.0":
+ version: 0.4.0
+ resolution: "json-schema@npm:0.4.0"
+ checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72
+ languageName: node
+ linkType: hard
+
"json-stable-stringify-without-jsonify@npm:^1.0.1":
version: 1.0.1
resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
@@ -5389,7 +5703,7 @@ __metadata:
languageName: node
linkType: hard
-"json-stringify-safe@npm:^5.0.1":
+"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1":
version: 5.0.1
resolution: "json-stringify-safe@npm:5.0.1"
checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee
@@ -5397,11 +5711,11 @@ __metadata:
linkType: hard
"json5@npm:^2.2.1":
- version: 2.2.1
- resolution: "json5@npm:2.2.1"
+ version: 2.2.2
+ resolution: "json5@npm:2.2.2"
bin:
json5: lib/cli.js
- checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b
+ checksum: 9a878d66b72157b073cf0017f3e5d93ec209fa5943abcb38d37a54b208917c166bd473c26a24695e67a016ce65759aeb89946592991f8f9174fb96c8e2492683
languageName: node
linkType: hard
@@ -5437,6 +5751,18 @@ __metadata:
languageName: node
linkType: hard
+"jsprim@npm:^1.2.2":
+ version: 1.4.2
+ resolution: "jsprim@npm:1.4.2"
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.4.0
+ verror: 1.10.0
+ checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a
+ languageName: node
+ linkType: hard
+
"kind-of@npm:^6.0.3":
version: 6.0.3
resolution: "kind-of@npm:6.0.3"
@@ -5482,6 +5808,22 @@ __metadata:
languageName: node
linkType: hard
+"load-bmfont@npm:^1.2.3":
+ version: 1.4.1
+ resolution: "load-bmfont@npm:1.4.1"
+ dependencies:
+ buffer-equal: 0.0.1
+ mime: ^1.3.4
+ parse-bmfont-ascii: ^1.0.3
+ parse-bmfont-binary: ^1.0.5
+ parse-bmfont-xml: ^1.1.4
+ phin: ^2.9.1
+ xhr: ^2.0.1
+ xtend: ^4.0.0
+ checksum: 688d932fb0dc4c9333747736ccd926261f0b91734b7bdb6ff24f8659ef068a0f0b2278084b208851afac0beec79af7bd6664fe2ed5b6c5e1db88755fc25f785e
+ languageName: node
+ linkType: hard
+
"load-json-file@npm:^4.0.0":
version: 4.0.0
resolution: "load-json-file@npm:4.0.0"
@@ -5665,12 +6007,12 @@ __metadata:
languageName: node
linkType: hard
-"magic-string@npm:^0.26.4":
- version: 0.26.7
- resolution: "magic-string@npm:0.26.7"
+"magic-string@npm:^0.27.0":
+ version: 0.27.0
+ resolution: "magic-string@npm:0.27.0"
dependencies:
- sourcemap-codec: ^1.4.8
- checksum: 89b0d60cbb32bbf3d1e23c46ea93db082d18a8230b972027aecb10a40bba51be519ecce0674f995571e3affe917b76b09f59d8dbc9a1b2c9c4102a2b6e8a2b01
+ "@jridgewell/sourcemap-codec": ^1.4.13
+ checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e
languageName: node
linkType: hard
@@ -6251,6 +6593,31 @@ __metadata:
languageName: node
linkType: hard
+"mime-db@npm:1.52.0":
+ version: 1.52.0
+ resolution: "mime-db@npm:1.52.0"
+ checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f
+ languageName: node
+ linkType: hard
+
+"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19":
+ version: 2.1.35
+ resolution: "mime-types@npm:2.1.35"
+ dependencies:
+ mime-db: 1.52.0
+ checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836
+ languageName: node
+ linkType: hard
+
+"mime@npm:^1.3.4":
+ version: 1.6.0
+ resolution: "mime@npm:1.6.0"
+ bin:
+ mime: cli.js
+ checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557
+ languageName: node
+ linkType: hard
+
"mime@npm:^3.0.0":
version: 3.0.0
resolution: "mime@npm:3.0.0"
@@ -6274,6 +6641,15 @@ __metadata:
languageName: node
linkType: hard
+"min-document@npm:^2.19.0":
+ version: 2.19.0
+ resolution: "min-document@npm:2.19.0"
+ dependencies:
+ dom-walk: ^0.1.0
+ checksum: da6437562ea2228041542a2384528e74e22d1daa1a4ec439c165abf0b9d8a63e17e3b8a6dc6e0c731845e85301198730426932a0e813d23f932ca668340c9623
+ languageName: node
+ linkType: hard
+
"min-indent@npm:^1.0.0":
version: 1.0.1
resolution: "min-indent@npm:1.0.1"
@@ -6644,9 +7020,9 @@ __metadata:
linkType: hard
"node-releases@npm:^2.0.6":
- version: 2.0.7
- resolution: "node-releases@npm:2.0.7"
- checksum: d1c5af091d788b7f9dfce5aa77cbf76c28e8e326b891fe64a05b96943a90cd6ba19eae94ef32777c23f5898a7b00d9cf8266adba33d61ebe6611cca74ccfc0b1
+ version: 2.0.8
+ resolution: "node-releases@npm:2.0.8"
+ checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a
languageName: node
linkType: hard
@@ -6741,6 +7117,13 @@ __metadata:
languageName: node
linkType: hard
+"oauth-sign@npm:~0.9.0":
+ version: 0.9.0
+ resolution: "oauth-sign@npm:0.9.0"
+ checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64
+ languageName: node
+ linkType: hard
+
"object-assign@npm:^4.0.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
@@ -6903,6 +7286,30 @@ __metadata:
languageName: node
linkType: hard
+"parse-bmfont-ascii@npm:^1.0.3":
+ version: 1.0.6
+ resolution: "parse-bmfont-ascii@npm:1.0.6"
+ checksum: de3f6671f183c3e9d64bb4812b0407693b5fd0d24e9d16b2e106bb9eef809d64a6cc061f39ca29bb10c5c2e47e241e91b7aeefa587391fff7ccb27ab9db5012e
+ languageName: node
+ linkType: hard
+
+"parse-bmfont-binary@npm:^1.0.5":
+ version: 1.0.6
+ resolution: "parse-bmfont-binary@npm:1.0.6"
+ checksum: ca37fb1e92f5941fddc5342b45857fafd27f00d2bd5fa44dd504bec6faeab97536c95ad45260c2dd5fc4c63de71e525663d3cdac09d038cbca803d97c669add5
+ languageName: node
+ linkType: hard
+
+"parse-bmfont-xml@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "parse-bmfont-xml@npm:1.1.4"
+ dependencies:
+ xml-parse-from-string: ^1.0.0
+ xml2js: ^0.4.5
+ checksum: 879e5435be44f22b8c4934e2e1d2754a6d90a9ddb16309360daff965e1428d877b673f3d1fafaab4fef437c912a0db9f85545e0dd375ec62df7d4d328450d257
+ languageName: node
+ linkType: hard
+
"parse-entities@npm:^4.0.0":
version: 4.0.0
resolution: "parse-entities@npm:4.0.0"
@@ -6919,6 +7326,13 @@ __metadata:
languageName: node
linkType: hard
+"parse-headers@npm:^2.0.0":
+ version: 2.0.5
+ resolution: "parse-headers@npm:2.0.5"
+ checksum: 3e97f01e4c7f960bfbfd0ee489f0bd8d3c72b6c814f1f79b66abec2cca8eaf8e4ecd89deba0b6e61266469aed87350bc932001181c01ff8c29a59e696abe251f
+ languageName: node
+ linkType: hard
+
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
@@ -7020,6 +7434,13 @@ __metadata:
languageName: node
linkType: hard
+"performance-now@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "performance-now@npm:2.1.0"
+ checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550
+ languageName: node
+ linkType: hard
+
"periscopic@npm:^3.0.0":
version: 3.0.4
resolution: "periscopic@npm:3.0.4"
@@ -7030,6 +7451,13 @@ __metadata:
languageName: node
linkType: hard
+"phin@npm:^2.9.1":
+ version: 2.9.3
+ resolution: "phin@npm:2.9.3"
+ checksum: 7e2abd7be74a54eb7be92dccb1d7a019725c8adaa79ac22a38f25220f9a859393e654ea753a559d326aed7bbc966fadac88270cc8c39d78896f7784219560c47
+ languageName: node
+ linkType: hard
+
"picocolors@npm:^1.0.0":
version: 1.0.0
resolution: "picocolors@npm:1.0.0"
@@ -7065,6 +7493,24 @@ __metadata:
languageName: node
linkType: hard
+"pixelmatch@npm:^4.0.0":
+ version: 4.0.2
+ resolution: "pixelmatch@npm:4.0.2"
+ dependencies:
+ pngjs: ^3.0.0
+ bin:
+ pixelmatch: bin/pixelmatch
+ checksum: 9c5c1329001938cae6d01e2bb84a909ba767f8256bcafc075422cea2a4dbaa8bebd44fceaa4b4ce7cdc36d11f20d4f1ba0cf669851d5649b32d8d1d27e4f5a36
+ languageName: node
+ linkType: hard
+
+"pngjs@npm:^3.0.0":
+ version: 3.4.0
+ resolution: "pngjs@npm:3.4.0"
+ checksum: 8bd40bd698abd16b72c97b85cb858c80894fbedc76277ce72a784aa441e14795d45d9856e97333ca469b34b67528860ffc8a7317ca6beea349b645366df00bcd
+ languageName: node
+ linkType: hard
+
"postcss-import@npm:^14.1.0":
version: 14.1.0
resolution: "postcss-import@npm:14.1.0"
@@ -7196,6 +7642,13 @@ __metadata:
languageName: node
linkType: hard
+"process@npm:^0.11.10":
+ version: 0.11.10
+ resolution: "process@npm:0.11.10"
+ checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3
+ languageName: node
+ linkType: hard
+
"promise-inflight@npm:^1.0.1":
version: 1.0.1
resolution: "promise-inflight@npm:1.0.1"
@@ -7237,6 +7690,13 @@ __metadata:
languageName: node
linkType: hard
+"psl@npm:^1.1.28":
+ version: 1.9.0
+ resolution: "psl@npm:1.9.0"
+ checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d
+ languageName: node
+ linkType: hard
+
"pump@npm:^3.0.0":
version: 3.0.0
resolution: "pump@npm:3.0.0"
@@ -7268,6 +7728,13 @@ __metadata:
languageName: node
linkType: hard
+"qs@npm:~6.5.2":
+ version: 6.5.3
+ resolution: "qs@npm:6.5.3"
+ checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692
+ languageName: node
+ linkType: hard
+
"queue-microtask@npm:^1.2.2":
version: 1.2.3
resolution: "queue-microtask@npm:1.2.3"
@@ -7298,6 +7765,13 @@ __metadata:
languageName: node
linkType: hard
+"read-chunk@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "read-chunk@npm:1.0.1"
+ checksum: 9240d6a7dbef26d611f5e816dde890bbda99a4547c3edc2be60f8beab757023dfaaa6486004a20bc6d3f5fce90ff31da64eff131554e4250fc5182ed1e6b2a80
+ languageName: node
+ linkType: hard
+
"read-pkg-up@npm:^3.0.0":
version: 3.0.0
resolution: "read-pkg-up@npm:3.0.0"
@@ -7440,6 +7914,34 @@ __metadata:
languageName: node
linkType: hard
+"request@npm:^2.65.0":
+ version: 2.88.2
+ resolution: "request@npm:2.88.2"
+ dependencies:
+ aws-sign2: ~0.7.0
+ aws4: ^1.8.0
+ caseless: ~0.12.0
+ combined-stream: ~1.0.6
+ extend: ~3.0.2
+ forever-agent: ~0.6.1
+ form-data: ~2.3.2
+ har-validator: ~5.1.3
+ http-signature: ~1.2.0
+ is-typedarray: ~1.0.0
+ isstream: ~0.1.2
+ json-stringify-safe: ~5.0.1
+ mime-types: ~2.1.19
+ oauth-sign: ~0.9.0
+ performance-now: ^2.1.0
+ qs: ~6.5.2
+ safe-buffer: ^5.1.2
+ tough-cookie: ~2.5.0
+ tunnel-agent: ^0.6.0
+ uuid: ^3.3.2
+ checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983
+ languageName: node
+ linkType: hard
+
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"
@@ -7597,8 +8099,8 @@ __metadata:
linkType: hard
"rollup@npm:^3.2.3":
- version: 3.7.4
- resolution: "rollup@npm:3.7.4"
+ version: 3.7.5
+ resolution: "rollup@npm:3.7.5"
dependencies:
fsevents: ~2.3.2
dependenciesMeta:
@@ -7606,7 +8108,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
- checksum: 0f2478d740527cdc8f4d81a5676221b0ec9495147cae0e6643627f6ac3ac63bf92385e26936ed8ef9ed06678a2ff7d8398489a235581c590f149149a003870d8
+ checksum: 772f85e9f12c83091cbe8ef31dc563198566cfe536dc8099dd6d4e372daa370f9d455cc42c7993d22b02521e25d53733df7e98d2a993e5a22bf11b2591de4e2d
languageName: node
linkType: hard
@@ -7628,6 +8130,13 @@ __metadata:
languageName: node
linkType: hard
+"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
+ version: 5.2.1
+ resolution: "safe-buffer@npm:5.2.1"
+ checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
+ languageName: node
+ linkType: hard
+
"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
version: 5.1.2
resolution: "safe-buffer@npm:5.1.2"
@@ -7635,14 +8144,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:~5.2.0":
- version: 5.2.1
- resolution: "safe-buffer@npm:5.2.1"
- checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
- languageName: node
- linkType: hard
-
-"safer-buffer@npm:>= 2.1.2 < 3.0.0":
+"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
@@ -7658,6 +8160,13 @@ __metadata:
languageName: node
linkType: hard
+"sax@npm:>=0.6.0":
+ version: 1.2.4
+ resolution: "sax@npm:1.2.4"
+ checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe
+ languageName: node
+ linkType: hard
+
"selfsigned@npm:^2.0.0, selfsigned@npm:^2.0.1":
version: 2.1.1
resolution: "selfsigned@npm:2.1.1"
@@ -7920,6 +8429,27 @@ __metadata:
languageName: node
linkType: hard
+"sshpk@npm:^1.7.0":
+ version: 1.17.0
+ resolution: "sshpk@npm:1.17.0"
+ dependencies:
+ asn1: ~0.2.3
+ assert-plus: ^1.0.0
+ bcrypt-pbkdf: ^1.0.0
+ dashdash: ^1.12.0
+ ecc-jsbn: ~0.1.1
+ getpass: ^0.1.1
+ jsbn: ~0.1.0
+ safer-buffer: ^2.0.2
+ tweetnacl: ~0.14.0
+ bin:
+ sshpk-conv: bin/sshpk-conv
+ sshpk-sign: bin/sshpk-sign
+ sshpk-verify: bin/sshpk-verify
+ checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597
+ languageName: node
+ linkType: hard
+
"ssri@npm:^9.0.0":
version: 9.0.1
resolution: "ssri@npm:9.0.1"
@@ -7967,6 +8497,22 @@ __metadata:
languageName: node
linkType: hard
+"stream-to-buffer@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "stream-to-buffer@npm:0.1.0"
+ dependencies:
+ stream-to: ~0.2.0
+ checksum: 9adf4eadf245ac4bd2ce1b4cd879170714221d185798637b1b5e4f53aef304d5dccbbd180380932d6f3618f7e1972a0529732618ae5c8e33beb0ca51d6907aec
+ languageName: node
+ linkType: hard
+
+"stream-to@npm:~0.2.0":
+ version: 0.2.2
+ resolution: "stream-to@npm:0.2.2"
+ checksum: 06a3f163cfc609a7dc6952f0d953e67f5dabf68c75a7349cc0656ed4e211806e58c69ba1270263ec33c288aaf1468386c3055d592e18b76bc0f13e322ab78068
+ languageName: node
+ linkType: hard
+
"streamsearch@npm:^1.1.0":
version: 1.1.0
resolution: "streamsearch@npm:1.1.0"
@@ -8250,6 +8796,13 @@ __metadata:
languageName: node
linkType: hard
+"tinycolor2@npm:^1.1.2":
+ version: 1.4.2
+ resolution: "tinycolor2@npm:1.4.2"
+ checksum: 57ed262e08815a4ab0ed933edafdbc6555a17081781766149813b44a080ecbe58b3ee281e81c0e75b42e4d41679f138cfa98eabf043f829e0683c04adb12c031
+ languageName: node
+ linkType: hard
+
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
@@ -8259,6 +8812,16 @@ __metadata:
languageName: node
linkType: hard
+"tough-cookie@npm:~2.5.0":
+ version: 2.5.0
+ resolution: "tough-cookie@npm:2.5.0"
+ dependencies:
+ psl: ^1.1.28
+ punycode: ^2.1.1
+ checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977
+ languageName: node
+ linkType: hard
+
"tr46@npm:^3.0.0":
version: 3.0.0
resolution: "tr46@npm:3.0.0"
@@ -8370,6 +8933,22 @@ __metadata:
languageName: node
linkType: hard
+"tunnel-agent@npm:^0.6.0":
+ version: 0.6.0
+ resolution: "tunnel-agent@npm:0.6.0"
+ dependencies:
+ safe-buffer: ^5.0.1
+ checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711
+ languageName: node
+ linkType: hard
+
+"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0":
+ version: 0.14.5
+ resolution: "tweetnacl@npm:0.14.5"
+ checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487
+ languageName: node
+ linkType: hard
+
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@@ -8621,6 +9200,15 @@ __metadata:
languageName: node
linkType: hard
+"url-regex@npm:^3.0.0":
+ version: 3.2.0
+ resolution: "url-regex@npm:3.2.0"
+ dependencies:
+ ip-regex: ^1.0.1
+ checksum: 667c8b079491ea76360f54c707d3cbd486a9ec29d6723e47fcbf6b8515a8dcb347bf94c7b1bac8b5af5ce7a5eacb2211d2096aa82fd4f077e559fc70cab8abd0
+ languageName: node
+ linkType: hard
+
"urlpattern-polyfill@npm:^4.0.3":
version: 4.0.3
resolution: "urlpattern-polyfill@npm:4.0.3"
@@ -8635,6 +9223,15 @@ __metadata:
languageName: node
linkType: hard
+"uuid@npm:^3.3.2":
+ version: 3.4.0
+ resolution: "uuid@npm:3.4.0"
+ bin:
+ uuid: ./bin/uuid
+ checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f
+ languageName: node
+ linkType: hard
+
"uuid@npm:^8.3.2":
version: 8.3.2
resolution: "uuid@npm:8.3.2"
@@ -8695,6 +9292,17 @@ __metadata:
languageName: node
linkType: hard
+"verror@npm:1.10.0":
+ version: 1.10.0
+ resolution: "verror@npm:1.10.0"
+ dependencies:
+ assert-plus: ^1.0.0
+ core-util-is: 1.0.2
+ extsprintf: ^1.2.0
+ checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea
+ languageName: node
+ linkType: hard
+
"vfile-location@npm:^4.0.0":
version: 4.0.1
resolution: "vfile-location@npm:4.0.1"
@@ -8916,7 +9524,43 @@ __metadata:
languageName: node
linkType: hard
-"xtend@npm:^4.0.2, xtend@npm:~4.0.1":
+"xhr@npm:^2.0.1":
+ version: 2.6.0
+ resolution: "xhr@npm:2.6.0"
+ dependencies:
+ global: ~4.4.0
+ is-function: ^1.0.1
+ parse-headers: ^2.0.0
+ xtend: ^4.0.0
+ checksum: a1db277e37737caf3ed363d2a33ce4b4ea5b5fc190b663a6f70bc252799185b840ccaa166eaeeea4841c9c60b87741f0a24e29cbcf6708dd425986d4df186d2f
+ languageName: node
+ linkType: hard
+
+"xml-parse-from-string@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "xml-parse-from-string@npm:1.0.1"
+ checksum: 5155cb98e428409829f4060ce542c55438b2f7646d11fd306d850eaf12d35c06ffd9e86d76aa5230121a533b958fd1a319d6f90a5c113391853d0ff01f4da7bb
+ languageName: node
+ linkType: hard
+
+"xml2js@npm:^0.4.5":
+ version: 0.4.23
+ resolution: "xml2js@npm:0.4.23"
+ dependencies:
+ sax: ">=0.6.0"
+ xmlbuilder: ~11.0.0
+ checksum: ca0cf2dfbf6deeaae878a891c8fbc0db6fd04398087084edf143cdc83d0509ad0fe199b890f62f39c4415cf60268a27a6aed0d343f0658f8779bd7add690fa98
+ languageName: node
+ linkType: hard
+
+"xmlbuilder@npm:~11.0.0":
+ version: 11.0.1
+ resolution: "xmlbuilder@npm:11.0.1"
+ checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0
+ languageName: node
+ linkType: hard
+
+"xtend@npm:^4.0.0, xtend@npm:^4.0.2, xtend@npm:~4.0.1":
version: 4.0.2
resolution: "xtend@npm:4.0.2"
checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a