diff --git a/.eslintignore b/.eslintignore
index c6f157a..6c4b500 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1,2 @@
-packages/docs/*
\ No newline at end of file
+packages/docs/*
+packages/portal/*
\ No newline at end of file
diff --git a/.github/workflows/check-providers.yml b/.github/workflows/check-providers.yml
deleted file mode 100644
index 5811dc2..0000000
--- a/.github/workflows/check-providers.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-name: Rev Providers
-
-on:
- pull_request:
- branches:
- - dev
-
-jobs:
- check-npm:
- name: Install Dependencies
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Setup Node
- uses: actions/setup-node@v3
- with:
- node-version: 16.x
- cache: 'yarn'
- registry-url: https://registry.npmjs.org/
-
- - run: corepack enable
-
- - name: Install NPM Dependencies
- run: yarn install --immutable --network-timeout 300000
-
- - name: Check Baileys
- run: yarn node ./scripts/checker.js --name=baileys --stable=true
-
- - name: Check Venom
- run: yarn node ./scripts/checker.js --name=venom --stable=true
-
- - name: Check web-whatsapp
- run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
-
- - name: Check Meta
- run: yarn node ./scripts/checker.js --name=meta --stable=true
-
- - name: Check Twilio
- run: yarn node ./scripts/checker.js --name=twilio --stable=true
-
- - name: Add and commit changes to gh-pages branch
- run: |
- git config --local user.email 'action@github.com'
- git config --local user.name 'GitHub Action'
- git add .
- git commit -m 'major'
-
- - name: Push changes
- uses: ad-m/github-push-action@master
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- branch: feature/providers-major
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8fd8fa3..56dcd60 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,7 +29,7 @@ jobs:
run: yarn install --immutable --network-timeout 300000
- name: Build Package
- run: yarn build
+ run: yarn build:full
- name: Build Eslint rules
run: yarn lint:fix
@@ -56,3 +56,51 @@ jobs:
- name: Unit Tests
run: yarn test
+
+ ############ UNIT TEST ############
+ check-providers:
+ name: Check Providers Versions
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16.x
+ cache: 'yarn'
+ registry-url: https://registry.npmjs.org/
+
+ - run: corepack enable
+
+ - name: Install NPM Dependencies
+ run: yarn install --immutable --network-timeout 300000
+
+ - name: Check Baileys
+ run: yarn node ./scripts/checker.js --name=baileys --stable=true
+
+ - name: Check Venom
+ run: yarn node ./scripts/checker.js --name=venom --stable=true
+
+ - name: Check web-whatsapp
+ run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
+
+ - name: Check Meta
+ run: yarn node ./scripts/checker.js --name=meta --stable=true
+
+ - name: Check Twilio
+ run: yarn node ./scripts/checker.js --name=twilio --stable=true
+
+ - name: Add and commit changes to gh-pages branch
+ run: |
+ git config --local user.email 'action@github.com'
+ git config --local user.name 'GitHub Action'
+ git add .
+ git commit -m 'major'
+
+ - name: Push changes
+ uses: ad-m/github-push-action@master
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ branch: feature/providers-major
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 86178fd..a1fed1b 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -13,7 +13,7 @@ name: 'CodeQL'
on:
push:
- branches: ['main', dev, next-release]
+ branches: [release/next]
pull_request:
# The branches below must be a subset of the branches above
branches: ['main']
@@ -22,6 +22,7 @@ on:
jobs:
analyze:
+ if: ${{ !github.event.act }}
name: Analyze
runs-on: ubuntu-latest
permissions:
diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml
index 9f9e814..b126e98 100644
--- a/.github/workflows/contributors.yml
+++ b/.github/workflows/contributors.yml
@@ -1,12 +1,8 @@
name: Revisando Colaboradores
+
on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - dev
- types: [closed]
+ schedule:
+ - cron: '0 9 * * *'
jobs:
contrib-readme-job:
diff --git a/.github/workflows/netlify-dev.yml b/.github/workflows/netlify-dev.yml
index e3e8200..1820da5 100644
--- a/.github/workflows/netlify-dev.yml
+++ b/.github/workflows/netlify-dev.yml
@@ -13,6 +13,7 @@ on:
jobs:
############ DOCUMENTATION BUILD ############
build-documentation:
+ if: ${{ !github.event.act }}
name: Build Package
runs-on: ubuntu-latest
diff --git a/.github/workflows/netlify.yml b/.github/workflows/netlify.yml
index bdb51ab..2dac101 100644
--- a/.github/workflows/netlify.yml
+++ b/.github/workflows/netlify.yml
@@ -3,12 +3,11 @@ name: 📄 (PROD) Desplegando documentacion
on:
push:
branches:
- - main
- - next-release
+ - release/next
jobs:
############ DOCUMENTATION BUILD ############
- build-documentation:
+ build-documentation-prod:
name: Build Package
runs-on: ubuntu-latest
diff --git a/.github/workflows/releases-dev.yml b/.github/workflows/releases-dev.yml
index a2d9979..4e5c169 100644
--- a/.github/workflows/releases-dev.yml
+++ b/.github/workflows/releases-dev.yml
@@ -3,7 +3,7 @@ name: 🚀 (DEV) Liberando versiones
on:
push:
branches:
- - next-release
+ - release/next
jobs:
############ RELEASE ############
@@ -27,7 +27,7 @@ jobs:
run: yarn install --immutable --network-timeout 300000
- name: Build Package
- run: yarn build
+ run: yarn build:full
- name: Release @bot-whatsapp/bot
run: yarn node ./scripts/release.js --name=bot --version= --token="${{ secrets.NPM_TOKEN }}"
@@ -44,6 +44,12 @@ jobs:
- name: Release @bot-whatsapp/provider
run: yarn node ./scripts/release.js --name=provider --version= --token="${{ secrets.NPM_TOKEN }}"
+ - name: Release @bot-whatsapp/contexts
+ run: yarn node ./scripts/release.js --name=contexts --version= --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/portal
+ run: yarn node ./scripts/release.js --name=portal --version= --token="${{ secrets.NPM_TOKEN }}"
+
- name: Commit Versioning & Push changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml
index daafe13..d587c64 100644
--- a/.github/workflows/releases.yml
+++ b/.github/workflows/releases.yml
@@ -2,12 +2,12 @@ name: 🚀⚡ Liberando versiones
on:
push:
- tags:
- - 'v*.*.*'
-
+ branches:
+ - release/production
jobs:
############ RELEASE ############
- release:
+ release-prod:
+ if: ${{ !github.event.act }}
name: Release
runs-on: ubuntu-latest
steps:
@@ -27,32 +27,53 @@ jobs:
- run: corepack enable
+ - name: Set User
+ run: git config --global user.email "leifer.contacto@gmail.com" && git config --global user.name "Leifer Mendez"
+
- name: Install NPM Dependencies
run: yarn install --immutable --network-timeout 300000
- - name: Build Package
- run: yarn build
-
- - name: Release @bot-whatsapp/bot
- run: yarn node ./scripts/release.js --name=bot --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
-
- - name: Release @bot-whatsapp/cli
- run: yarn node ./scripts/release.js --name=cli --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
-
- - name: Release @bot-whatsapp/create-bot-whatsapp
- run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
-
- - name: Release @bot-whatsapp/database
- run: yarn node ./scripts/release.js --name=database --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
-
- - name: Release @bot-whatsapp/provider
- run: yarn node ./scripts/release.js --name=provider --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
-
- name: Set CHANGELOG
run: yarn release
+ - name: get-npm-version
+ id: package-version
+ uses: martinbeentjes/npm-get-version-action@main
+
+ - name: Build Package
+ run: yarn build:full
+
+ - name: Release @bot-whatsapp/bot
+ run: yarn node ./scripts/release.js --name=bot --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/cli
+ run: yarn node ./scripts/release.js --name=cli --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/create-bot-whatsapp
+ run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/database
+ run: yarn node ./scripts/release.js --name=database --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/provider
+ run: yarn node ./scripts/release.js --name=provider --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/contexts
+ run: yarn node ./scripts/release.js --name=contexts --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release @bot-whatsapp/portal
+ run: yarn node ./scripts/release.js --name=portal --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
+
+ - name: Release Github
+ run: yarn node ./scripts/github.js --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.OCTO_TOKEN }}"
+
+ - name: 'Run if changes have been detected'
+ run: |
+ git add .
+ git commit -m "chore(version): pre release"
+
- name: Commit Versioning & Push changes
+ if: github.event_name == 'push'
uses: stefanzweifel/git-auto-commit-action@v4
with:
- commit_message: 'release(version): 🚀 - "${{ steps.vars.outputs.tag }}" release'
- branch: dev
+ commit_message: 'chore(version): launch release 🚀 "${{ steps.package-version.outputs.current-version}}"'
diff --git a/.gitignore b/.gitignore
index 2a3fcb7..1cc3038 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,10 @@ mediaSend/*
!mediaSend/nota-de-voz.mp3
.env
.wwebjs_auth
+/session
+/session/*
+/tokens
+/tokens/*
packages/cli/config.json
config.json
.yarnrc.yml
@@ -38,3 +42,4 @@ yarn-error.log
.npmrc
# Local Netlify folder
.netlify
+.secrets
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dafc64e..8d3865b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,107 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+### [0.1.17](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.16...v0.1.17) (2023-01-13)
+
+
+### Features
+
+* mod de starters para habiltar portal ([eceb170](https://github.com/leifermendez/bot-whatsapp/commit/eceb170df03721dca4183b658c863b94fa04bc84))
+
+
+### Bug Fixes
+
+* **ci:** pre-release ([aaec075](https://github.com/leifermendez/bot-whatsapp/commit/aaec0751408ab49483d428810d94aaf7d46acb94))
+* correccion en starters app.js para portal QR ([f430380](https://github.com/leifermendez/bot-whatsapp/commit/f430380b4f23d41702395c96c628bf13bf443278))
+* **starters:** :zap: added dockerfile ([230981e](https://github.com/leifermendez/bot-whatsapp/commit/230981e2676361149cb2a99def7f705e75009260))
+
+### [0.1.16](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.15...v0.1.16) (2023-01-11)
+
+### [0.1.15](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.14...v0.1.15) (2023-01-11)
+
+### [0.1.14](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.13...v0.1.14) (2023-01-11)
+
+### [0.1.13](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.12...v0.1.13) (2023-01-11)
+
+### [0.1.12](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.12) (2023-01-11)
+
+### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
+
+### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
+
+### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
+
+### [0.1.11](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.11) (2023-01-11)
+
+### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
+
+### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
+
+### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
+
+### [0.1.10](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.8...v0.1.10) (2023-01-11)
+
+
+### Bug Fixes
+
+* :fire: update qr package ([ecde23f](https://github.com/leifermendez/bot-whatsapp/commit/ecde23fdea65def209aa874af35a3f293e6b1a91))
+
+### [0.1.8](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.8) (2023-01-10)
+
+### [0.1.7](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7) (2023-01-10)
+
+### [0.1.6](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.6) (2023-01-10)
+
+
+### Features
+
+* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
+* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
+* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
+* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
+* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
+* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
+* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
+* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
+* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
+
+
+### Bug Fixes
+
+* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
+* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
+* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
+* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
+* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
+* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
+* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
+
+### [0.1.4](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.4) (2023-01-10)
+
+
+### Features
+
+* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
+* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
+* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
+* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
+* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
+* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
+* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
+* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
+* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
+
+
+### Bug Fixes
+
+* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
+* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
+* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
+* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
+* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
+* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
+* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
+
### [0.1.3](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.2...v0.1.3) (2023-01-04)
diff --git a/package.json b/package.json
index 72109ae..354bc44 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/root",
- "version": "0.1.3",
+ "version": "0.1.17",
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
"main": "app.js",
"private": true,
@@ -13,12 +13,15 @@
"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",
+ "portal:rollup": "rollup --config ./packages/portal/rollup-portal.config.js",
"format:check": "prettier --check ./packages",
"format:write": "prettier --write ./packages",
"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 contexts:rollup && yarn run create-bot-whatsapp:rollup",
+ "build:portal-web": "cd ./packages/portal/ && yarn run build.types && yarn run build.client && yarn run build.server && yarn run lint --fix",
+ "build:full": "yarn run build:portal-web && 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 && yarn run portal: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 && yarn run portal: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",
@@ -39,6 +42,7 @@
"packages/database",
"packages/provider",
"packages/contexts",
+ "packages/portal",
"packages/docs"
],
"keywords": [
@@ -63,6 +67,7 @@
"devDependencies": {
"@commitlint/cli": "^17.3.0",
"@commitlint/config-conventional": "^17.3.0",
+ "@octokit/core": "^4.1.0",
"@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-json": "^5.0.1",
"@rollup/plugin-node-resolve": "^15.0.1",
diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js
index 7550dd0..79d996b 100644
--- a/packages/bot/core/core.class.js
+++ b/packages/bot/core/core.class.js
@@ -8,6 +8,9 @@ const { createWriteStream } = require('fs')
const logger = new Console({
stdout: createWriteStream(`${process.cwd()}/core.class.log`),
})
+
+const QueuePrincipal = new Queue()
+
/**
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
* [ ] Guardar historial en db
@@ -84,20 +87,40 @@ class CoreClass {
this.databaseClass.save(ctxByNumber)
}
+ // 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
+ const sendFlow = async (messageToSend, numberOrId) => {
+ const queue = []
+ for (const ctxMessage of messageToSend) {
+ const delayMs = ctxMessage?.options?.delay || 0
+ if (delayMs) await delay(delayMs)
+ QueuePrincipal.enqueue(() =>
+ Promise.all([
+ this.sendProviderAndSave(numberOrId, ctxMessage),
+ resolveCbEveryCtx(ctxMessage),
+ ])
+ )
+ }
+ return Promise.all(queue)
+ }
+
// 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje
- const fallBack = () => {
+ const fallBack = async () => {
fallBackFlag = true
- msgToSend = this.flowClass.find(refToContinue?.keyword, true) || []
- this.sendFlow(msgToSend, from)
+ await this.sendProviderAndSave(from, refToContinue)
+ QueuePrincipal.queue = []
return refToContinue
}
// 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes
// para evitar bloque de whatsapp
- const flowDynamic = (listMsg = [], optListMsg = { limit: 3 }) => {
+ const flowDynamic = async (
+ listMsg = [],
+ optListMsg = { limit: 5, fallback: false }
+ ) => {
if (!Array.isArray(listMsg))
throw new Error('Esto debe ser un ARRAY')
+ fallBackFlag = optListMsg.fallback
const parseListMsg = listMsg
.map(({ body }, index) =>
toCtx({
@@ -108,26 +131,38 @@ class CoreClass {
})
)
.slice(0, optListMsg.limit)
- msgToSend = parseListMsg
- this.sendFlow(msgToSend, from)
+ for (const msg of parseListMsg) {
+ await this.sendProviderAndSave(from, msg)
+ }
return
}
+ // 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback
+ const resolveCbEveryCtx = async (ctxMessage) => {
+ if (prevMsg?.options?.capture) return cbEveryCtx(prevMsg?.ref)
+ if (!ctxMessage?.options?.capture)
+ return await cbEveryCtx(ctxMessage?.ref)
+ }
+
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
- const cbEveryCtx = (inRef) => {
- this.flowClass.allCallbacks[inRef](messageCtxInComming, {
+ const cbEveryCtx = async (inRef) => {
+ if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve()
+ return this.flowClass.allCallbacks[inRef](messageCtxInComming, {
fallBack,
flowDynamic,
})
}
+ if (prevMsg?.ref) resolveCbEveryCtx(prevMsg)
+
// 📄 [options: callback]: Si se tiene un callback se ejecuta
- if (!fallBackFlag) {
- if (refToContinue?.options?.capture) cbEveryCtx(refToContinue?.ref)
- for (const ite of this.flowClass.find(body)) {
- if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
- }
- }
+ //TODO AQUI
+ // if (!fallBackFlag) {
+ // if (prevMsg?.options?.capture) cbEveryCtx(prevMsg?.ref)
+ // for (const ite of this.flowClass.find(body)) {
+ // if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
+ // }
+ // }
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
if (!fallBackFlag && prevMsg?.options?.nested?.length) {
@@ -138,11 +173,12 @@ class CoreClass {
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
- for (const ite of msgToSend) {
- cbEveryCtx(ite?.ref)
- }
+ // //TODO AQUI
+ // for (const ite of msgToSend) {
+ // cbEveryCtx(ite?.ref)
+ // }
- this.sendFlow(msgToSend, from)
+ sendFlow(msgToSend, from)
return
}
@@ -153,13 +189,13 @@ class CoreClass {
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
- this.sendFlow(msgToSend, from)
+ sendFlow(msgToSend, from)
return
}
}
msgToSend = this.flowClass.find(body) || []
- this.sendFlow(msgToSend, from)
+ sendFlow(msgToSend, from)
}
/**
@@ -176,18 +212,6 @@ class CoreClass {
])
}
- sendFlow = async (messageToSend, numberOrId) => {
- const queue = []
- for (const ctxMessage of messageToSend) {
- const delayMs = ctxMessage?.options?.delay || 0
- if (delayMs) await delay(delayMs)
- Queue.enqueue(() =>
- this.sendProviderAndSave(numberOrId, ctxMessage)
- )
- }
- return Promise.all(queue)
- }
-
/**
* @private
* @param {*} message
diff --git a/packages/bot/package.json b/packages/bot/package.json
index fa7dc12..d3f004e 100644
--- a/packages/bot/package.json
+++ b/packages/bot/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/bot",
- "version": "0.0.41-alpha.0",
+ "version": "0.0.66-alpha.0",
"description": "",
"main": "./lib/bundle.bot.cjs",
"scripts": {
@@ -28,5 +28,9 @@
},
"dependencies": {
"dotenv": "^16.0.3"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/bot"
}
}
diff --git a/packages/bot/rollup-bot.config.js b/packages/bot/rollup-bot.config.js
index f8ffa2a..36bbb87 100644
--- a/packages/bot/rollup-bot.config.js
+++ b/packages/bot/rollup-bot.config.js
@@ -10,6 +10,7 @@ module.exports = [
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
format: 'cjs',
+ sourcemap: true,
},
plugins: [commonjs(), nodeResolve()],
},
diff --git a/packages/bot/utils/queue.js b/packages/bot/utils/queue.js
index 1f610e9..873024a 100644
--- a/packages/bot/utils/queue.js
+++ b/packages/bot/utils/queue.js
@@ -1,8 +1,8 @@
class Queue {
- static queue = []
- static pendingPromise = false
+ queue = []
+ pendingPromise = false
- static enqueue(promise) {
+ enqueue(promise) {
return new Promise((resolve, reject) => {
this.queue.push({
promise,
@@ -13,7 +13,7 @@ class Queue {
})
}
- static dequeue() {
+ dequeue() {
if (this.workingOnPromise) {
return false
}
diff --git a/packages/cli/check/index.js b/packages/cli/check/index.js
index 73d5924..cbd8e08 100644
--- a/packages/cli/check/index.js
+++ b/packages/cli/check/index.js
@@ -1,38 +1,65 @@
const { red, yellow, green, bgCyan } = require('kleur')
+const { exec } = require('node:child_process')
const checkNodeVersion = () => {
- console.log(bgCyan('🚀 Revisando tu Node.js'))
- const version = process.version
- const majorVersion = parseInt(version.replace('v', '').split('.').shift())
- if (majorVersion < 16) {
- console.error(
- red(
- `🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
- )
+ return new Promise((resolve, reject) => {
+ console.log(bgCyan('🚀 Revisando tu Node.js'))
+ const version = process.version
+ const majorVersion = parseInt(
+ version.replace('v', '').split('.').shift()
)
- process.exit(1)
- }
- console.log(green(`Node.js compatible ${version}`))
- console.log(``)
+ if (majorVersion < 16) {
+ console.error(
+ red(
+ `🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
+ )
+ )
+ console.log(``)
+ reject('ERROR_NODE')
+ }
+ console.log(green(`Node.js: ${version} compatible ✅`))
+ console.log(``)
+ resolve()
+ })
}
const checkOs = () => {
- console.log(bgCyan('🙂 Revisando tu sistema operativo'))
- const os = process.platform
- if (!os.includes('win32')) {
- const messages = [
- `El sistema operativo actual (${os}) posiblemente requiera`,
- `una configuración adicional referente al puppeteer`,
- ``,
- `Recuerda pasar por el WIKI`,
- `🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalación`,
- ``,
- ]
+ return new Promise((resolve, reject) => {
+ console.log(bgCyan('🙂 Revisando tu sistema operativo'))
+ const os = process.platform
+ if (!os.includes('win32')) {
+ const messages = [
+ `El sistema operativo actual (${os}) posiblemente requiera`,
+ `una configuración adicional referente al puppeteer`,
+ ``,
+ `Recuerda pasar por el WIKI`,
+ `🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalación`,
+ ``,
+ ]
- console.log(yellow(messages.join(' \n')))
- }
-
- console.log(``)
+ console.log(yellow(messages.join(' \n')))
+ }
+ console.log(green(`OS: compatible ✅`))
+ console.log(``)
+ resolve()
+ })
}
-module.exports = { checkNodeVersion, checkOs }
+const checkGit = () => {
+ return new Promise((resolve, reject) => {
+ console.log(bgCyan('🤓 Revisando GIT'))
+ exec('git --version', (error) => {
+ if (error) {
+ console.error(red(`🔴 Se require instalar GIT`))
+ console.log(``)
+ reject('ERROR_GIT')
+ } else {
+ console.log(green(`Git: Compatible ✅`))
+ console.log(``)
+ resolve()
+ }
+ })
+ })
+}
+
+module.exports = { checkNodeVersion, checkOs, checkGit }
diff --git a/packages/cli/interactive/index.js b/packages/cli/interactive/index.js
index a0a4034..b3f063d 100644
--- a/packages/cli/interactive/index.js
+++ b/packages/cli/interactive/index.js
@@ -1,9 +1,9 @@
const prompts = require('prompts')
const { join } = require('path')
-const { yellow, red, cyan, bgMagenta } = require('kleur')
+const { yellow, red, cyan, bgMagenta, bgRed } = require('kleur')
const { existsSync } = require('fs')
const { copyBaseApp } = require('../create-app')
-const { checkNodeVersion, checkOs } = require('../check')
+const { checkNodeVersion, checkOs, checkGit } = require('../check')
const bannerDone = () => {
console.log(``)
@@ -21,6 +21,22 @@ const bannerDone = () => {
}
const startInteractive = async () => {
+ try {
+ console.clear()
+ await checkNodeVersion()
+ checkOs()
+ await checkGit()
+ console.clear()
+ await nextSteps()
+ } catch (e) {
+ console.error(bgRed(`Ups! 🙄 algo no va bien.`))
+ console.error(
+ bgRed(`Revisa los requerimientos minimos en la documentacion`)
+ )
+ }
+}
+
+const nextSteps = async () => {
const questions = [
{
type: 'text',
@@ -58,9 +74,6 @@ const startInteractive = async () => {
},
]
- console.clear()
- checkNodeVersion()
- checkOs()
const onCancel = () => {
console.log('¡Proceso cancelado!')
return true
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 5a86b89..60361be 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/cli",
- "version": "0.0.48-alpha.0",
+ "version": "0.0.72-alpha.0",
"description": "",
"main": "index.js",
"devDependencies": {
@@ -15,5 +15,9 @@
],
"bin": {
"bot": "./bin/cli.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/cli"
}
}
diff --git a/packages/contexts/package.json b/packages/contexts/package.json
index 29c2dcd..c186a5f 100644
--- a/packages/contexts/package.json
+++ b/packages/contexts/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/contexts",
- "version": "0.0.1",
+ "version": "0.0.16-alpha.0",
"description": "",
"main": "./lib/bundle.contexts.cjs",
"files": [
@@ -13,5 +13,9 @@
},
"dependencies": {
"@bot-whatsapp/bot": "*"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/contexts"
}
}
diff --git a/packages/contexts/src/dialogflow/dialogflow.class.js b/packages/contexts/src/dialogflow/dialogflow.class.js
index ffe50e7..ebd92bc 100644
--- a/packages/contexts/src/dialogflow/dialogflow.class.js
+++ b/packages/contexts/src/dialogflow/dialogflow.class.js
@@ -97,13 +97,21 @@ class DialogFlowContext extends CoreClass {
})
customPayload = {
- media: fields?.media?.stringValue,
- buttons: mapButtons,
+ options: {
+ media: fields?.media?.stringValue,
+ buttons: mapButtons,
+ },
}
+
+ const ctxFromDX = {
+ ...customPayload,
+ answer: fields?.answer?.stringValue,
+ }
+ this.sendFlow([ctxFromDX], from)
+ return
}
const ctxFromDX = {
- ...customPayload,
answer: queryResult?.fulfillmentText,
}
diff --git a/packages/create-bot-whatsapp/package.json b/packages/create-bot-whatsapp/package.json
index c96f366..3b372ca 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.59-alpha.0",
+ "version": "0.0.93-alpha.0",
"description": "",
"main": "./lib/bundle.create-bot-whatsapp.cjs",
"files": [
@@ -11,5 +11,9 @@
"bin": "./bin/create.js",
"dependencies": {
"@bot-whatsapp/cli": "*"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/create-bot-whatsapp"
}
}
diff --git a/packages/database/package.json b/packages/database/package.json
index 50a5cee..f69d0c9 100644
--- a/packages/database/package.json
+++ b/packages/database/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/database",
- "version": "0.0.40-alpha.0",
+ "version": "0.0.64-alpha.0",
"description": "Esto es el conector a mysql, pg, mongo",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -19,5 +19,9 @@
"./mongo": "./lib/mongo/index.cjs",
"./json": "./lib/json/index.cjs",
"./mysql": "./lib/mysql/index.cjs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/database"
}
}
diff --git a/packages/docs/src/components/widgets/Hero.tsx b/packages/docs/src/components/widgets/Hero.tsx
index 4700421..0e7cc5e 100644
--- a/packages/docs/src/components/widgets/Hero.tsx
+++ b/packages/docs/src/components/widgets/Hero.tsx
@@ -47,13 +47,20 @@ export default component$(() => {
npm create bot-whatsapp@latest
-
diff --git a/packages/docs/src/routes/docs/flows/index.mdx b/packages/docs/src/routes/docs/flows/index.mdx
index 027c793..7a2171c 100644
--- a/packages/docs/src/routes/docs/flows/index.mdx
+++ b/packages/docs/src/routes/docs/flows/index.mdx
@@ -1,6 +1,6 @@
import Navigation from '../../../components/widgets/Navigation'
-# Flow (Flujos)
+# Flow
Los flujos hace referencia al hecho de construir un flujo de conversion. Esto es un flow podemos observar que estan presente dos metodos importantes **addKeyword** y el **addAnswer**.
@@ -23,6 +23,142 @@ const flowPrincipal = addKeyword(['hola', 'alo'])
---
+## addKeyword()
+
+Esta funcion se utliza para iniciar un flujo de conversion. Recibe un `string` o un `array`
+de string `['hola','buenas']`.
+
+**Opciones**
+
+- sensitive: Sensible a mayusculas y minusculas por defecto `false`
+
+```js
+const { addKeyword } = require('@bot-whatsapp/bot')
+
+const flowString = addKeyword('hola')
+
+const flowArray = addKeyword(['hola', 'alo'])
+
+const flowSensitive = addKeyword(['hola', 'alo'], {
+ sensitive: true,
+})
+```
+
+---
+
+## addAnswer()
+
+Esta funcion se utliza para responder un mensaje despues del `addKeyword()`
+
+**Opciones**
+
+- delay: 0 (milisegundos)
+- media: url de imagen
+- buttons: array `[{body:'Boton1'}, {body:'Boton2'}, {body:'Boton3'}]`
+- capture: false (para esperar respuesta)
+- child: Objecto tipo flujo o arra de flujos hijos
+
+```js
+const { addKeyword } = require('@bot-whatsapp/bot')
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Este mensaje se enviara 1 segundo despues',
+ {
+ delay: 1000,
+ }
+)
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Este mensaje envia una imagen',
+ {
+ media: 'https://i.imgur.com/0HpzsEm.png',
+ }
+)
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Este mensaje envia tres botones',
+ {
+ buttons: [
+ { body: 'Boton 1' },
+ { body: 'Boton 2' },
+ { body: 'Boton 3' },
+ ],
+ }
+)
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Este mensaje espera una respueta del usuario',
+ {
+ capture: true,
+ }
+)
+```
+
+---
+
+## ctx
+
+Este argumento se utiliza para obtener el contexto de la conversación
+
+```js
+const { addKeyword } = require('@bot-whatsapp/bot')
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Indica cual es tu email',
+ null,
+ (ctx) => {
+ console.log('👉 Informacion del contexto: ', ctx)
+ }
+)
+```
+
+---
+
+## fallBack()
+
+Esta funcion se utliza para volver a enviar el ultimo mensaje abajo un ejemplo.
+En el ejemplo de abajo esperamos que el usuario ingrese un mensaje que contenga `@` sino contiene
+se repetira el mensaje `Indica cual es tu email`
+
+```js
+const { addKeyword } = require('@bot-whatsapp/bot')
+
+const flowString = addKeyword('hola').addAnswer(
+ 'Indica cual es tu email',
+ null,
+ (ctx, { fallBack }) => {
+ if (!ctx.body.includes('@')) return fallBack()
+ }
+)
+```
+
+---
+
+## flowDynamic()
+
+Esta funcion se utliza para devolver mensajes dinamicos que pueden venir de una API o Base de datos.
+La funcion recibe un array que debe contener la siguiente estrucutura:
+
+`[{body:'Mensaje}, {body:'Mensaje2}]`
+
+```js
+const { addKeyword } = require('@bot-whatsapp/bot')
+
+const flowString = addKeyword('hola')
+ .addAnswer('Indica cual es tu email', null, async (ctx, {flowDynamic}) => {
+ const mensajesDB = () => {
+ const categories = db.find(...)
+ const mapDatos = categories.map((c) => ({body:c.name}))
+ return mapDatos
+ }
+ await flowDynamic(mensajesDB())
+ })
+
+
+```
+
+---
+
⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar
@@ -33,9 +33,21 @@ Los proveedores disponibles hasta el momento son los siguientes:
---
+### Twilio: Configuración
+
+Estamos trabajando en el apartado de la documentación lo más claro posible. Puedes encontrar los [detalles aquí](/docs/providers/twilio)
+
+---
+
+### Meta: Configuración
+
+Estamos trabajando en el apartado de la documentación lo más claro posible. Puedes encontrar los [detalles aquí](/docs/providers/meta)
+
+---
+
diff --git a/packages/docs/src/routes/docs/providers/meta/index.mdx b/packages/docs/src/routes/docs/providers/meta/index.mdx
new file mode 100644
index 0000000..a44476f
--- /dev/null
+++ b/packages/docs/src/routes/docs/providers/meta/index.mdx
@@ -0,0 +1,159 @@
+import Alert from '../../../../components/widgets/Alert'
+import Navigation from '../../../../components/widgets/Navigation'
+
+# Meta
+
+La Plataforma de WhatsApp Business permite a medianas y grandes empresas comunicarse con sus clientes a gran escala.
+Puedes iniciar conversaciones con clientes en apenas unos minutos, enviarles notificaciones de atención al cliente o actualizaciones de compras, ofrecerles un nivel de servicio personalizado y
+prestarles ayuda a través del canal que ellos prefieran.
+
+### Requerimientos
+
+- Registrar una cuenta de [facebook developers](https://developers.facebook.com/apps)
+
+---
+
+### Requerimientos
+
+Debes crear una aplicación nueva. Para ello haz clic en el botón **Crear aplicación**
+
+
+
+---
+
+En esta pantalla debes de seleccionar **Empresa o Business**
+
+
+
+---
+
+En el siguiente paso debes escribir un nombre al tu aplicación también colocar un email de contacto y seleccionar la aplicación de Test Business
+
+
+
+---
+
+Ahora dirígete a la sección de Ajustes de WhatsApp.
+
+
+
+---
+
+Está la parte donde encontraras el token acceso y también puedes ver el número **desde donde** se envía los mensajes de WhatsApp
+y **a donde** se va a enviar.
+Como estás en la versión de prueba, deberás dar de alta los números a los que quieres enviar.
+
+
+
+---
+
+En esta misma página puedes encontrar el apartado de **Webhook** que pronto necesitaremos usar
+
+
+
+---
+
+En el **archivo principal** del bot donde estás implementando la función del adaptador de meta vas a colocar los siguientes datos:
+
+- **numberId:** Lo puedes encontrar en la pagina anterior
+- **jwtToken:** Lo puedes encontrar en la pagina anterior
+- **verifyToken:** Puedes escribir lo que quieras es como una palabra clave
+
+
+ En el ejemplo de abajo puedes ver como una sugerencia de como puede ser
+ utilizando variables de entorno
+
+
+```js
+const main = async () => {
+ const adapterDB = new MockAdapter()
+ const adapterFlow = createFlow([flowPrincipal])
+
+ const adapterProvider = createProvider(MetaProvider, {
+ jwtToken: process.env.JWTOKEN, //EAARBW3ZBGU0UBAACDjtQIzI8JuEa.............
+ numberId: process.env.NUMBER_ID, //103975305758520
+ verifyToken: process.env.VERIFY_TOKEN, //LO_QUE_SEA
+ })
+
+ createBot({
+ flow: adapterFlow,
+ provider: adapterProvider,
+ database: adapterDB,
+ })
+}
+
+main()
+```
+
+---
+
+Luego de ejecutar el bot encontraras un mensaje en la consola similar al siguiente.
+Donde podrás encontrar la URL para tu **webhook**
+
+```shell
+$ npm start
+
+> bot-whatsapp-base-meta-memory@1.0.0 start
+> node app.js
+
+
+[meta]: Agregar esta url "WHEN A MESSAGE COMES IN"
+[meta]: POST http://localhost:3000/webhook
+[meta]: Más información en la documentacion
+```
+
+---
+
+## ¿Ahora que hago?
+
+Podrás observar que el bot inicia un servicio HTTP (endpoint) que debe estar en un servidor en linea para que puedas conectarlo con Meta.
+
+---
+
+### Opción 1:
+
+Puedes hacer pruebas en local atrevés de un servidor proxy tunnel.
+Descarga **[ngork](https://ngrok.com/download)** es una herramienta gratuita que nos ayudara con esto.
+
+
+
+---
+
+Esto genera una URL en línea que podemos usar en la parte de **WebHook** de Meta
+
+
+
+---
+
+
+
+---
+
+
+
+---
+
+
+
+---
+
+### Opción 2:
+
+Si ya tienes desplegado tu bot en un servidor tienes que obtener la IP publica o subdominio que te proporcionaron. **Ejemplo** si estas usando
+[Railway](https://railway.app/) puedes ir a la seccion de ajustes y generar un subdominio. Ya tendriamos el **WebHook**
+`https://base-twilio-memory-production.up.railway.app/twilio-hook`
+
+
+
+---
+
+
+
+---
+
+
diff --git a/packages/docs/src/routes/docs/providers/twilio/index.mdx b/packages/docs/src/routes/docs/providers/twilio/index.mdx
new file mode 100644
index 0000000..5548ad5
--- /dev/null
+++ b/packages/docs/src/routes/docs/providers/twilio/index.mdx
@@ -0,0 +1,152 @@
+import Alert from '../../../../components/widgets/Alert'
+import Navigation from '../../../../components/widgets/Navigation'
+
+# Twilio
+
+Twilio es una plataforma de desarrollo que permite a los desarrolladores construir aplicaciones de comunicación en la nube y sistemas web. Las API de comunicaciones de Twilio permiten a las empresas proporcionar la experiencia de comunicación adecuada para sus clientes dentro de la web y las aplicaciones móviles. Al usar las API de Twilio, los desarrolladores pueden agregar rápidamente esta funcionalidad a una aplicación, como mensajes de voz, videollamadas, mensajes de texto y más.
+
+
+ Twilio te proporciona una cuenta **Sandbox** para que puedas probar
+ gratuitamente el servicio
+
+
+### Requerimientos
+
+- Registrar una cuenta de [twilio](https://www.twilio.com/try-twilio)
+
+---
+
+### Requerimientos
+
+Debemos aceptar los términos y condiciones y luego activar la cuenta sandbox
+
+
+
+---
+
+Observamos que ahora tenemos un número de WhatsApp y una frase. El número proporcionado es un **número de pruebas** que te ofrece Twilio, luego que actives un plan de pago puedes comprar un número para tu uso.
+Guarda ese número como un contacto de WhatsApp en tu móvil y después envíale el mensaje que te asignan. En el ejemplo de la pantalla sale **join score-state**
+
+
+
+---
+
+Luego Twilio te responde con un mensaje confirmando la verificación de la conexión. **Este paso solo es necesario cuando estás en modo Sandbox.**
+
+
+
+---
+
+Ahora dirígete a la sección de Ajustes de WhatsApp ubicada en la consola de Twilio.
+
+
+
+---
+
+En esta sección puedes configurar los **Webhook** que conectaran con el chatbot.
+
+**¿No sabes cuál es tu link?** continúa leyendo esta guía más adelante entenderás
+
+
+
+---
+
+También necesitarás el **Account SID y Auth Token** estos datos los consigues [console.twilio.com](https://console.twilio.com).
+
+**¿Que hago con estos datos?** guardalos o tenlos ubicados porque los necesitaremos en las siguientes pantallas
+
+
+
+---
+
+En el **archivo principal** del bot donde estás implementando la función del adaptador de twilio vas a colocar los siguientes datos:
+
+- **ACC_SID:** Lo encontraras en console.twilio puedes ver la pantalla anterior
+- **ACC_TOKEN:** Lo encontraras en console.twilio puedes ver la pantalla anterior
+- **ACC_VENDOR:** Es el numero de whatsapp (si ya tienes el plan de pago de Twilio usa el numero que compraste), si aun estas en modo
+ sandbox utliza el numero proporcionado en el paso numero 2
+
+
+ En el ejemplo de abajo puedes ver como una sugerencia de como puede ser
+ utilizando variables de entorno
+
+
+```js
+const main = async () => {
+ const adapterDB = new MockAdapter()
+ const adapterFlow = createFlow([flowPrincipal])
+
+ const adapterProvider = createProvider(TwilioProvider, {
+ accountSid: process.env.ACC_SID, //AC4695aa720b4d700a***************
+ authToken: process.env.ACC_TOKEN, //3f6fae09f7a1c3534***************
+ vendorNumber: process.env.ACC_VENDOR, //+14155238886
+ })
+
+ createBot({
+ flow: adapterFlow,
+ provider: adapterProvider,
+ database: adapterDB,
+ })
+}
+```
+
+---
+
+Luego de ejecutar el bot encontraras un mensaje en la consola similar al siguiente.
+Donde podrás encontrar la URL para tu **webhook**
+
+```shell
+$ npm start
+
+> bot-whatsapp-base-twilio-memory@1.0.0 start
+> node app.js
+
+
+[Twilio]: Agregar esta url "WHEN A MESSAGE COMES IN"
+[Twilio]: POST http://localhost:3000/twilio-hook
+[Twilio]: Más información en la documentacion
+```
+
+---
+
+## ¿Ahora que hago?
+
+Podrás observar que el bot inicia un servicio HTTP (endpoint) que debe estar en un servidor en linea para que puedas conectarlo con Twilio.
+
+---
+
+### Opción 1:
+
+Puedes hacer pruebas en local atrevés de un servidor proxy tunnel.
+Descarga **[ngork](https://ngrok.com/download)** es una herramienta gratuita que nos ayudara con esto.
+
+
+
+---
+
+Esto genera una URL en línea que podemos usar en la parte de **WebHook** de Twilio
+
+
+
+---
+
+### Opción 2:
+
+Si ya tienes desplegado tu bot en un servidor tienes que obtener la IP publica o subdominio que te proporcionaron. **Ejemplo** si estas usando
+[Railway](https://railway.app/) puedes ir a la seccion de ajustes y generar un subdominio. Ya tendriamos el **WebHook**
+`https://base-twilio-memory-production.up.railway.app/twilio-hook`
+
+
+
+---
+
+
+
+---
+
+
diff --git a/packages/docs/src/routes/docs/requirements/index.mdx b/packages/docs/src/routes/docs/requirements/index.mdx
index 03718d2..8f1ef96 100644
--- a/packages/docs/src/routes/docs/requirements/index.mdx
+++ b/packages/docs/src/routes/docs/requirements/index.mdx
@@ -4,14 +4,8 @@ import Navigation from '../../../components/widgets/Navigation'
A continuación se describen los puntos técnicos que debes de tener en cuenta antes de trabajar con esta herramienta
-- Node v16 o superior **[descargar node](https://nodejs.org/es/download/)**
-
----
-
-## ¿Como instalar Node?
-
-- **Windows**: [Ver video](https://youtu.be/xRXHQlqA3Ak?t=376). Necesita ayuda para instalar Node en Windows. A continuación te comparto un video en el minuto exacto donde explico como instalar.
-- **Ubuntu**: Te comparto un recurso de **[Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-es)** donde explica como instalar node en Ubuntu.
+- Node v16 o superior - **[descargar node](https://nodejs.org/es/download/)**
+- Git - **[descargar Git](https://git-scm.com/download/win)**
---
@@ -26,6 +20,34 @@ v18.12.1
---
+## ¿Como instalar Node?
+
+- **Windows**: [Ver video](https://youtu.be/xRXHQlqA3Ak?t=376). Si necesitas ayuda para instalar Node en Windows. A continuación te comparto un video en el minuto exacto donde explico como instalar.
+- **Ubuntu**: Te comparto un recurso de **[Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-es)** donde explica como instalar node en Ubuntu.
+
+---
+
+## ¿Como saber que tengo Git?
+
+Solo debes ejecutar el siguiente comando y esperar que te mande la versión que tienes instalada, si te manda un error de comando no reconocido es que no lo tienes instalado.
+
+```shell
+$ git -v
+git
+```
+
+---
+
+## ¿Como instalar Git?
+
+- Solo es necesario instalar Git si estás usando **Windows**, ya que Mac y Linux lo traen preinstalado.
+- Lo puedes descargar desde esta **[liga](https://git-scm.com/download/win)** .
+- Descarga la versión necesaria para tu sistema operativo (32-bit o 64-bit).
+- Una vez terminada la descarga, ejecuta el archivo descargado y dale "Siguiente" en todas las pantallas.
+- Haz clic en el botón de "Finalizar".
+
+---
+
Note: during dev mode, Vite may request a significant number of `.js` files. This does not represent a Qwik production build.
+
+## Preview
+
+The preview command will create a production build of the client modules, a production build of `src/entry.preview.tsx`, and run a local server. The preview server is only for convenience to locally preview a production build, and it should not be used as a production server.
+
+```shell
+npm run preview # or `yarn preview`
+```
+
+## Production
+
+The production build will generate client and server modules by running both client and server build commands. Additionally, the build command will use Typescript to run a type check on the source code.
+
+```shell
+npm run build # or `yarn build`
+```
+
+## Static Site Generator (Node.js)
+
+```
+npm run build.server
+```
diff --git a/packages/portal/adaptors/static/vite.config.ts b/packages/portal/adaptors/static/vite.config.ts
new file mode 100644
index 0000000..dba968a
--- /dev/null
+++ b/packages/portal/adaptors/static/vite.config.ts
@@ -0,0 +1,19 @@
+import { staticAdaptor } from '@builder.io/qwik-city/adaptors/static/vite'
+import { extendConfig } from '@builder.io/qwik-city/vite'
+import baseConfig from '../../vite.config'
+
+export default extendConfig(baseConfig, () => {
+ return {
+ build: {
+ ssr: true,
+ rollupOptions: {
+ input: ['@qwik-city-plan'],
+ },
+ },
+ plugins: [
+ staticAdaptor({
+ origin: 'https://bot-whatsapp.netlify.app',
+ }),
+ ],
+ }
+})
diff --git a/packages/portal/package.json b/packages/portal/package.json
new file mode 100644
index 0000000..c26ab32
--- /dev/null
+++ b/packages/portal/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@bot-whatsapp/portal",
+ "version": "0.0.22-alpha.0",
+ "description": "Portal WEB para escanear QR",
+ "main": "./lib/portal.http.cjs",
+ "scripts": {
+ "build": "qwik build",
+ "build.client": "vite build",
+ "build.preview": "vite build --ssr src/entry.preview.tsx",
+ "build.server": "vite build -c adaptors/static/vite.config.ts",
+ "build.types": "tsc --incremental --noEmit",
+ "deploy": "echo 'Run \"npm run qwik add\" to install a server adaptor'",
+ "dev": "vite --mode ssr",
+ "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
+ "fmt": "prettier --write .",
+ "fmt.check": "prettier --check .",
+ "lint": "eslint \"src/**/*.ts*\"",
+ "preview": "qwik build preview && vite preview --open",
+ "start": "vite --open --mode ssr",
+ "qwik": "qwik"
+ },
+ "files": [
+ "./dist/*",
+ "./lib/portal.http.cjs"
+ ],
+ "devDependencies": {
+ "@builder.io/qwik": "0.16.2",
+ "@builder.io/qwik-city": "0.0.128",
+ "@types/eslint": "8.4.10",
+ "@types/node": "^18.11.18",
+ "@types/node-fetch": "latest",
+ "@typescript-eslint/eslint-plugin": "5.48.0",
+ "@typescript-eslint/parser": "5.48.0",
+ "eslint": "8.31.0",
+ "eslint-plugin-qwik": "0.16.2",
+ "node-fetch": "3.3.0",
+ "prettier": "2.8.1",
+ "typescript": "4.9.4",
+ "undici": "5.14.0",
+ "vite": "4.0.3",
+ "vite-tsconfig-paths": "3.5.0"
+ },
+ "dependencies": {
+ "kleur": "^4.1.5",
+ "polka": "^0.5.2",
+ "serve-static": "^1.13.1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/portal"
+ }
+}
diff --git a/packages/portal/portal.http.js b/packages/portal/portal.http.js
new file mode 100644
index 0000000..3066c12
--- /dev/null
+++ b/packages/portal/portal.http.js
@@ -0,0 +1,67 @@
+const { join } = require('path')
+const { createReadStream, existsSync } = require('fs')
+const { bgYellow, cyan, yellow } = require('kleur')
+const polka = require('polka')
+
+const HTTP_PORT = process.env.PORT || 3000
+const QR_FILE = process.env.QR_FILE ?? 'bot'
+const PUBLIC_URL =
+ process.env.PUBLIC_URL ??
+ process.env.RAILWAY_STATIC_URL ??
+ 'http://localhost'
+
+const dir = [join(__dirname, 'dist'), join(__dirname, '..', 'dist')].find((i) =>
+ existsSync(i)
+)
+const serve = require('serve-static')(dir)
+
+/**
+ * Iniciamos Portal WEB para escanear QR
+ * @param {port:3000, publicSite:'http://mistio.com', qrFile:'qr.png', dir:__dirname}
+ */
+const start = (args) => {
+ const injectArgs = {
+ port: HTTP_PORT,
+ publicSite: PUBLIC_URL,
+ name: QR_FILE,
+ ...args,
+ }
+ const { port, publicSite, name } = injectArgs
+
+ const banner = () => {
+ console.log(``)
+ console.log(bgYellow(`🚩 ESCANEAR QR 🚩`))
+ console.log(cyan(`Existen varias maneras de escanear el QR code`))
+ console.log(
+ cyan(`- Tambien puedes visitar `),
+ yellow(`${publicSite}:${port}`)
+ )
+ console.log(
+ cyan(`- Se ha creado un archivo que finaliza `),
+ yellow('qr.png')
+ )
+ console.log(``)
+ }
+
+ polka()
+ .use(serve)
+ .get('qr.png', (_, res) => {
+ const qrSource = [
+ join(process.cwd(), `${name}.qr.png`),
+ join(__dirname, '..', `${name}.qr.png`),
+ join(__dirname, `${name}.qr.png`),
+ ].find((i) => existsSync(i))
+
+ const qrMark = [
+ join(__dirname, 'dist', 'water-mark.png'),
+ join(__dirname, '..', 'dist', 'water-mark.png'),
+ ].find((i) => existsSync(i))
+ const fileStream = createReadStream(qrSource ?? qrMark)
+
+ res.writeHead(200, { 'Content-Type': 'image/png' })
+ fileStream.pipe(res)
+ })
+ .listen(port, () => banner())
+}
+
+module.exports = start
diff --git a/packages/portal/public/favicon.svg b/packages/portal/public/favicon.svg
new file mode 100644
index 0000000..0ded7c1
--- /dev/null
+++ b/packages/portal/public/favicon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/portal/public/manifest.json b/packages/portal/public/manifest.json
new file mode 100644
index 0000000..44825fa
--- /dev/null
+++ b/packages/portal/public/manifest.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://json.schemastore.org/web-manifest-combined.json",
+ "name": "qwik-project-name",
+ "short_name": "Welcome to Qwik",
+ "start_url": ".",
+ "display": "standalone",
+ "background_color": "#fff",
+ "description": "A Qwik project app."
+}
diff --git a/packages/portal/public/robots.txt b/packages/portal/public/robots.txt
new file mode 100644
index 0000000..e69de29
diff --git a/packages/portal/public/water-mark.png b/packages/portal/public/water-mark.png
new file mode 100644
index 0000000..e44ada3
Binary files /dev/null and b/packages/portal/public/water-mark.png differ
diff --git a/packages/portal/rollup-portal.config.js b/packages/portal/rollup-portal.config.js
new file mode 100644
index 0000000..ee955ff
--- /dev/null
+++ b/packages/portal/rollup-portal.config.js
@@ -0,0 +1,13 @@
+const banner = require('../../config/banner.rollup.json')
+const { join } = require('path')
+const commonjs = require('@rollup/plugin-commonjs')
+
+module.exports = {
+ input: join(__dirname, 'portal.http.js'),
+ output: {
+ banner: banner['banner.output'].join(''),
+ file: join(__dirname, 'lib', 'portal.http.cjs'),
+ format: 'cjs',
+ },
+ plugins: [commonjs()],
+}
diff --git a/packages/portal/src/components/header/header.css b/packages/portal/src/components/header/header.css
new file mode 100644
index 0000000..b88f3da
--- /dev/null
+++ b/packages/portal/src/components/header/header.css
@@ -0,0 +1,36 @@
+header {
+ display: flex;
+ background: white;
+}
+
+header .logo a {
+ display: inline-block;
+ padding: 10px 10px 7px 20px;
+ text-decoration: none;
+}
+
+header ul {
+ margin: 0;
+ padding: 3px 10px 0 0;
+ list-style: none;
+ flex: 1;
+ text-align: right;
+}
+
+header li {
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+}
+
+header li a {
+ display: inline-block;
+ padding: 15px 10px;
+ text-decoration: none;
+ color: #1a1a1a;
+ font-weight: 500;
+}
+
+header li a:hover {
+ text-decoration: underline;
+}
diff --git a/packages/portal/src/components/header/header.tsx b/packages/portal/src/components/header/header.tsx
new file mode 100644
index 0000000..f1c7fa7
--- /dev/null
+++ b/packages/portal/src/components/header/header.tsx
@@ -0,0 +1,47 @@
+import { component$, useStylesScoped$ } from '@builder.io/qwik'
+import { BotLogo } from '../icons/bot'
+import styles from './header.css?inline'
+
+export default component$(() => {
+ useStylesScoped$(styles)
+
+ return (
+
+ )
+})
diff --git a/packages/portal/src/components/icons/bot.css b/packages/portal/src/components/icons/bot.css
new file mode 100644
index 0000000..481f167
--- /dev/null
+++ b/packages/portal/src/components/icons/bot.css
@@ -0,0 +1,12 @@
+.logo {
+ display: flex;
+ gap: 0.5rem;
+ align-items: center;
+ align-content: center;
+ color: #1a1a1a;
+}
+
+.logo h1 {
+ font-size: 1.5rem;
+ margin: 0;
+}
diff --git a/packages/portal/src/components/icons/bot.tsx b/packages/portal/src/components/icons/bot.tsx
new file mode 100644
index 0000000..3c69ef7
--- /dev/null
+++ b/packages/portal/src/components/icons/bot.tsx
@@ -0,0 +1,18 @@
+import { component$, useStylesScoped$ } from '@builder.io/qwik'
+
+import styles from './bot.css?inline'
+
+export const BotLogo = component$(() => {
+ useStylesScoped$(styles)
+ return (
+
+
+
Chatbot
+
+ )
+})
diff --git a/packages/portal/src/components/icons/qwik.tsx b/packages/portal/src/components/icons/qwik.tsx
new file mode 100644
index 0000000..3bd8d91
--- /dev/null
+++ b/packages/portal/src/components/icons/qwik.tsx
@@ -0,0 +1,38 @@
+export const QwikLogo = () => (
+
+
+
+
+
+
+
+
+
+)
diff --git a/packages/portal/src/components/qr/qr.css b/packages/portal/src/components/qr/qr.css
new file mode 100644
index 0000000..37d8779
--- /dev/null
+++ b/packages/portal/src/components/qr/qr.css
@@ -0,0 +1,12 @@
+div img {
+ display: block;
+ background-color: #f0f0f0;
+ width: 350px;
+ height: 350px;
+ object-fit: contain;
+ border-radius: 10px;
+}
+div {
+ display: flex;
+ justify-content: center;
+}
diff --git a/packages/portal/src/components/qr/qr.tsx b/packages/portal/src/components/qr/qr.tsx
new file mode 100644
index 0000000..52ebe01
--- /dev/null
+++ b/packages/portal/src/components/qr/qr.tsx
@@ -0,0 +1,31 @@
+import {
+ component$,
+ useClientEffect$,
+ useStore,
+ useStylesScoped$,
+} from '@builder.io/qwik'
+import style from './qr.css?inline'
+
+export const QR = component$(() => {
+ useStylesScoped$(style)
+ const state = useStore({
+ count: 0,
+ })
+
+ useClientEffect$(() => {
+ setInterval(() => {
+ state.count++
+ }, 800)
+ })
+
+ return (
+
+
+
+ )
+})
diff --git a/packages/portal/src/components/router-head/router-head.tsx b/packages/portal/src/components/router-head/router-head.tsx
new file mode 100644
index 0000000..c0811e4
--- /dev/null
+++ b/packages/portal/src/components/router-head/router-head.tsx
@@ -0,0 +1,32 @@
+import { component$ } from '@builder.io/qwik'
+import { useDocumentHead, useLocation } from '@builder.io/qwik-city'
+
+export const RouterHead = component$(() => {
+ const head = useDocumentHead()
+ const loc = useLocation()
+
+ return (
+ <>
+ {head.title}
+
+
+
+
+
+ {head.meta.map((m) => (
+
+ ))}
+
+ {head.links.map((l) => (
+
+ ))}
+
+ {head.styles.map((s) => (
+
+ ))}
+ >
+ )
+})
diff --git a/packages/portal/src/entry.dev.tsx b/packages/portal/src/entry.dev.tsx
new file mode 100644
index 0000000..c4e4252
--- /dev/null
+++ b/packages/portal/src/entry.dev.tsx
@@ -0,0 +1,18 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * Development entry point using only client-side modules:
+ * - Do not use this mode in production!
+ * - No SSR
+ * - No portion of the application is pre-rendered on the server.
+ * - All of the application is running eagerly in the browser.
+ * - More code is transferred to the browser than in SSR mode.
+ * - Optimizer/Serialization/Deserialization code is not exercised!
+ */
+import type { RenderOptions } from '@builder.io/qwik'
+import { render } from '@builder.io/qwik'
+import Root from './root'
+
+export default function (opts: RenderOptions) {
+ return render(document, , opts)
+}
diff --git a/packages/portal/src/entry.preview.tsx b/packages/portal/src/entry.preview.tsx
new file mode 100644
index 0000000..2a9c613
--- /dev/null
+++ b/packages/portal/src/entry.preview.tsx
@@ -0,0 +1,20 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * It's the bundle entry point for `npm run preview`.
+ * That is, serving your app built in production mode.
+ *
+ * Feel free to modify this file, but don't remove it!
+ *
+ * Learn more about Vite's preview command:
+ * - https://vitejs.dev/config/preview-options.html#preview-options
+ *
+ */
+import { createQwikCity } from '@builder.io/qwik-city/middleware/node'
+import render from './entry.ssr'
+import qwikCityPlan from '@qwik-city-plan'
+
+/**
+ * The default export is the QwikCity adaptor used by Vite preview.
+ */
+export default createQwikCity({ render, qwikCityPlan })
diff --git a/packages/portal/src/entry.ssr.tsx b/packages/portal/src/entry.ssr.tsx
new file mode 100644
index 0000000..8fc41c6
--- /dev/null
+++ b/packages/portal/src/entry.ssr.tsx
@@ -0,0 +1,28 @@
+/**
+ * WHAT IS THIS FILE?
+ *
+ * SSR entry point, in all cases the application is render outside the browser, this
+ * entry point will be the common one.
+ *
+ * - Server (express, cloudflare...)
+ * - npm run start
+ * - npm run preview
+ * - npm run build
+ *
+ */
+import type { RenderToStreamOptions } from '@builder.io/qwik/server'
+import { renderToStream } from '@builder.io/qwik/server'
+import { manifest } from '@qwik-client-manifest'
+import Root from './root'
+
+export default function (opts: RenderToStreamOptions) {
+ return renderToStream( , {
+ manifest,
+ ...opts,
+ // Use container attributes to set attributes on the html tag.
+ containerAttributes: {
+ lang: 'en-us',
+ ...opts.containerAttributes,
+ },
+ })
+}
diff --git a/packages/portal/src/global.css b/packages/portal/src/global.css
new file mode 100644
index 0000000..cc17b32
--- /dev/null
+++ b/packages/portal/src/global.css
@@ -0,0 +1,125 @@
+/**
+ * WHAT IS THIS FILE?
+ *
+ * Globally applied styles. No matter which components are in the page or matching route,
+ * the styles in here will be applied to the Document, without any sort of CSS scoping.
+ *
+ */
+
+:root {
+ --qwik-dark-blue: #1a1a1a;
+ --qwik-light-blue: #349713;
+ --qwik-light-purple: #73da51;
+ --qwik-dark-purple: #3f9622;
+}
+
+body {
+ background-color: #fafafa;
+ font-family: 'Inter', sans-serif, ui-sans-serif, system-ui, -apple-system,
+ BlinkMacSystemFont, sans-serif;
+ padding: 20px 20px 40px 20px;
+}
+
+main {
+ max-width: 760px;
+ margin: 0 auto;
+ background-color: white;
+ border-radius: 5px;
+ box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px;
+ overflow: hidden;
+}
+
+h1,
+h2 {
+ margin: 0 0 5px 0;
+}
+
+.lightning {
+ filter: hue-rotate(180deg);
+}
+
+section {
+ padding: 20px;
+}
+
+ul {
+ list-style-type: square;
+ margin: 5px 0 30px 0;
+ padding-left: 25px;
+}
+
+li {
+ padding: 8px 0;
+}
+
+li::marker {
+ color: var(--qwik-light-blue);
+}
+
+a,
+a:visited {
+ color: var(--qwik-dark-blue);
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+table.commands {
+ margin: 0 0 30px 0;
+}
+
+.commands td {
+ padding: 5px;
+}
+
+.commands td:first-child {
+ white-space: nowrap;
+ padding-right: 20px;
+}
+
+code {
+ font-family: Menlo, Monaco, Courier New, monospace;
+ font-size: 0.9em;
+ background-color: rgb(224, 224, 224);
+ padding: 2px 4px;
+ border-radius: 3px;
+ border-bottom: 2px solid #bfbfbf;
+}
+
+footer {
+ padding: 15px;
+ text-align: center;
+ font-size: 0.8em;
+}
+
+footer a {
+ text-decoration: none;
+}
+
+footer a:hover {
+ text-decoration: underline;
+}
+
+a.mindblow {
+ margin: 0 auto;
+ display: block;
+ background: var(--qwik-dark-purple);
+ padding: 10px 20px;
+ border-radius: 10px;
+ border: 0;
+ color: white;
+ text-decoration: none;
+ font-size: 20px;
+ width: fit-content;
+ border-bottom: 4px solid black;
+ cursor: url("data:image/svg+xml;utf8,🤯 ")
+ 16 0,
+ auto; /*!emojicursor.app*/
+}
+
+a.mindblow:hover {
+ border-bottom-width: 0px;
+ margin-bottom: 4px;
+ transform: translateY(4px);
+}
diff --git a/packages/portal/src/root.tsx b/packages/portal/src/root.tsx
new file mode 100644
index 0000000..4652ded
--- /dev/null
+++ b/packages/portal/src/root.tsx
@@ -0,0 +1,29 @@
+import { component$, useStyles$ } from '@builder.io/qwik'
+import { QwikCityProvider, RouterOutlet } from '@builder.io/qwik-city'
+import { RouterHead } from './components/router-head/router-head'
+
+import globalStyles from './global.css?inline'
+
+export default component$(() => {
+ /**
+ * The root of a QwikCity site always start with the component,
+ * immediately followed by the document's and .
+ *
+ * Dont remove the `` and `` elements.
+ */
+ useStyles$(globalStyles)
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ )
+})
diff --git a/packages/portal/src/routes/index.css b/packages/portal/src/routes/index.css
new file mode 100644
index 0000000..f5ff37b
--- /dev/null
+++ b/packages/portal/src/routes/index.css
@@ -0,0 +1,23 @@
+.page {
+ display: grid;
+ padding: 1rem;
+ gap: 2rem;
+}
+
+.page .qr-section.links {
+ display: flex;
+ gap: 1rem;
+ flex-wrap: wrap;
+}
+
+.page .btn-link {
+ background: white;
+ box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
+ rgb(0 0 0 / 6%) 0px 0px 0px 1px;
+ padding: 10px;
+ border-radius: 5px;
+ font-weight: 600;
+ text-decoration: none;
+ color: #1a1a1a;
+ border: solid 1px #afafaf;
+}
diff --git a/packages/portal/src/routes/index.tsx b/packages/portal/src/routes/index.tsx
new file mode 100644
index 0000000..44c8117
--- /dev/null
+++ b/packages/portal/src/routes/index.tsx
@@ -0,0 +1,61 @@
+import { component$, useStylesScoped$ } from '@builder.io/qwik'
+import type { DocumentHead } from '@builder.io/qwik-city'
+import { QR } from '~/components/qr/qr'
+
+import style from './index.css?inline'
+
+export default component$(() => {
+ useStylesScoped$(style)
+
+ return (
+
+
+
+
+
+
Whatsapp QR
+
+ Con esta libreria, puedes configurar respuestas
+ automatizadas para preguntas frecuentes, recibir y responder
+ mensajes de manera automatizada, y hacer un seguimiento de
+ las interacciones con los clientes. Además, nuestro
+ Chatbot se integra fácilmente con otros sistemas y
+ herramientas que ya esté utilizando en su negocio.
+
+
+
+
+ )
+})
+
+export const head: DocumentHead = {
+ title: '🤖 Crear chatbot WhatsApp en minutos',
+ meta: [
+ {
+ name: 'description',
+ content: '🤖 Crear chatbot WhatsApp en minutos',
+ },
+ ],
+}
diff --git a/packages/portal/src/routes/layout.tsx b/packages/portal/src/routes/layout.tsx
new file mode 100644
index 0000000..444656d
--- /dev/null
+++ b/packages/portal/src/routes/layout.tsx
@@ -0,0 +1,20 @@
+import { component$, Slot } from '@builder.io/qwik'
+import Header from '../components/header/header'
+
+export default component$(() => {
+ return (
+ <>
+
+
+
+
+
+ >
+ )
+})
diff --git a/packages/portal/src/routes/service-worker.ts b/packages/portal/src/routes/service-worker.ts
new file mode 100644
index 0000000..61fde0e
--- /dev/null
+++ b/packages/portal/src/routes/service-worker.ts
@@ -0,0 +1,18 @@
+/*
+ * WHAT IS THIS FILE?
+ *
+ * The service-worker.ts file is used to have state of the art prefetching.
+ * https://qwik.builder.io/qwikcity/prefetching/overview/
+ *
+ * Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline.
+ * You can also use this file to add more functionality that runs in the service worker.
+ */
+import { setupServiceWorker } from '@builder.io/qwik-city/service-worker'
+
+setupServiceWorker()
+
+addEventListener('install', () => self.skipWaiting())
+
+addEventListener('activate', () => self.clients.claim())
+
+declare const self: ServiceWorkerGlobalScope
diff --git a/packages/portal/tsconfig.json b/packages/portal/tsconfig.json
new file mode 100644
index 0000000..b51e023
--- /dev/null
+++ b/packages/portal/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "target": "ES2017",
+ "module": "ES2020",
+ "lib": ["es2020", "DOM", "WebWorker", "DOM.Iterable"],
+ "jsx": "react-jsx",
+ "jsxImportSource": "@builder.io/qwik",
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "resolveJsonModule": true,
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "incremental": true,
+ "isolatedModules": true,
+ "outDir": "tmp",
+ "noEmit": true,
+ "types": ["node", "vite/client"],
+ "paths": {
+ "~/*": ["./src/*"]
+ }
+ },
+ "files": ["./.eslintrc.cjs"],
+ "include": ["src"]
+}
diff --git a/packages/portal/vite.config.ts b/packages/portal/vite.config.ts
new file mode 100644
index 0000000..e04f994
--- /dev/null
+++ b/packages/portal/vite.config.ts
@@ -0,0 +1,23 @@
+import { defineConfig } from 'vite'
+import { qwikVite } from '@builder.io/qwik/optimizer'
+import { qwikCity } from '@builder.io/qwik-city/vite'
+import tsconfigPaths from 'vite-tsconfig-paths'
+
+export default defineConfig(() => {
+ return {
+ plugins: [
+ qwikCity(),
+ qwikVite({
+ entryStrategy: {
+ type: 'single',
+ },
+ }),
+ tsconfigPaths(),
+ ],
+ preview: {
+ headers: {
+ 'Cache-Control': 'public, max-age=600',
+ },
+ },
+ }
+})
diff --git a/packages/provider/package.json b/packages/provider/package.json
index 9fb35b8..5c3ef0a 100644
--- a/packages/provider/package.json
+++ b/packages/provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/provider",
- "version": "0.0.46-alpha.0",
+ "version": "0.0.70-alpha.0",
"description": "Esto es el conector a Twilio, Meta, etc...",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -22,5 +22,9 @@
"./venom": "./lib/venom/index.cjs",
"./baileys": "./lib/baileys/index.cjs",
"./meta": "./lib/meta/index.cjs"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/provider"
}
}
diff --git a/packages/provider/src/baileys/index.js b/packages/provider/src/baileys/index.js
index 3b46135..de6c66d 100644
--- a/packages/provider/src/baileys/index.js
+++ b/packages/provider/src/baileys/index.js
@@ -4,7 +4,7 @@ const pino = require('pino')
const rimraf = require('rimraf')
const mime = require('mime-types')
const { join } = require('path')
-const { existsSync, createWriteStream } = require('fs')
+const { existsSync, createWriteStream, readFileSync } = require('fs')
const { Console } = require('console')
const {
@@ -24,19 +24,18 @@ const logger = new Console({
stdout: createWriteStream(`${process.cwd()}/baileys.log`),
})
-const NAME_DIR_SESSION = `sessions`
-const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION)
-
/**
* ⚙️ BaileysProvider: Es una clase tipo adaptor
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
* https://github.com/adiwajshing/Baileys
*/
class BaileysProvider extends ProviderClass {
+ globalVendorArgs = { name: `bot` }
vendor
saveCredsGlobal = null
- constructor() {
+ constructor(args) {
super()
+ this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.initBailey().then()
}
@@ -44,6 +43,7 @@ class BaileysProvider extends ProviderClass {
* Iniciar todo Bailey
*/
initBailey = async () => {
+ const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions`
const { state, saveCreds } = await useMultiFileAuthState(
NAME_DIR_SESSION
)
@@ -70,6 +70,7 @@ class BaileysProvider extends ProviderClass {
}
if (statusCode === DisconnectReason.loggedOut) {
+ const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION)
rimraf(PATH_BASE, (err) => {
if (err) return
})
@@ -88,12 +89,15 @@ class BaileysProvider extends ProviderClass {
if (qr) {
this.emit('require_action', {
instructions: [
- `Debes escanear el QR Code para iniciar session reivsa qr.png`,
+ `Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- await baileyGenerateImage(qr)
+ await baileyGenerateImage(
+ qr,
+ `${this.globalVendorArgs.name}.qr.png`
+ )
}
})
@@ -137,7 +141,7 @@ class BaileysProvider extends ProviderClass {
}
const btnCtx =
- payload?.message?.templateButtonReplyMessage
+ payload?.message?.buttonsResponseMessage
?.selectedDisplayText
if (btnCtx) payload.body = btnCtx
@@ -167,8 +171,8 @@ class BaileysProvider extends ProviderClass {
sendMedia = async (number, imageUrl, text) => {
const fileDownloaded = await baileyDownloadMedia(imageUrl)
return this.vendor.sendMessage(number, {
- image: { url: fileDownloaded },
- text,
+ image: readFileSync(fileDownloaded),
+ caption: text,
})
}
@@ -229,20 +233,22 @@ class BaileysProvider extends ProviderClass {
*/
sendButtons = async (number, text, buttons) => {
- const numberClean = number.replace('+', '')
+ const numberClean = baileyCleanNumber(number)
+
const templateButtons = buttons.map((btn, i) => ({
- index: `${i}`,
- quickReplyButton: {
- displayText: btn.body,
- id: `id-btn-${i}`,
- },
+ buttonId: `id-btn-${i}`,
+ buttonText: { displayText: btn.body },
+ type: 1,
}))
- return this.vendor.sendMessage(`${numberClean}@c.us`, {
+ const buttonMessage = {
text,
footer: '',
- templateButtons: templateButtons,
- })
+ buttons: templateButtons,
+ headerType: 1,
+ }
+
+ return this.vendor.sendMessage(numberClean, buttonMessage)
}
/**
diff --git a/packages/provider/src/baileys/utils.js b/packages/provider/src/baileys/utils.js
index ab5b18d..433ddee 100644
--- a/packages/provider/src/baileys/utils.js
+++ b/packages/provider/src/baileys/utils.js
@@ -15,8 +15,8 @@ const baileyCleanNumber = (number, full = false) => {
* Hace promesa el write
* @param {*} base64
*/
-const baileyGenerateImage = async (base64) => {
- const PATH_QR = `${process.cwd()}/qr.png`
+const baileyGenerateImage = async (base64, name = 'qr.png') => {
+ const PATH_QR = `${process.cwd()}/${name}`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
const writeFilePromise = () =>
diff --git a/packages/provider/src/twilio/package.json b/packages/provider/src/twilio/package.json
index dd0a9bf..e4bb7d4 100644
--- a/packages/provider/src/twilio/package.json
+++ b/packages/provider/src/twilio/package.json
@@ -1,5 +1,5 @@
{
"dependencies": {
- "twilio": "3.84.0"
+ "twilio": "3.84.1"
}
}
diff --git a/packages/provider/src/venom/index.js b/packages/provider/src/venom/index.js
index 375e2d4..4b7c231 100644
--- a/packages/provider/src/venom/index.js
+++ b/packages/provider/src/venom/index.js
@@ -20,9 +20,11 @@ const logger = new Console({
* https://github.com/orkestral/venom
*/
class VenomProvider extends ProviderClass {
+ globalVendorArgs = { name: `bot` }
vendor
- constructor() {
+ constructor(args) {
super()
+ this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.init().then(() => this.initBusEvents())
}
@@ -30,15 +32,19 @@ class VenomProvider extends ProviderClass {
* Iniciamos el Proveedor Venom
*/
init = async () => {
+ const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions`
try {
const client = await venom.create(
{
- session: 'session-base',
+ session: NAME_DIR_SESSION,
multidevice: true,
+ disableSpins: true,
+ disableWelcome: true,
+ logger,
+ logQR: false,
},
(base) => this.generateQr(base),
- undefined,
- { logQR: false }
+ undefined
)
this.vendor = client
} catch (e) {
@@ -61,12 +67,12 @@ class VenomProvider extends ProviderClass {
console.clear()
this.emit('require_action', {
instructions: [
- `Debes escanear el QR Code para iniciar session reivsa qr.png`,
+ `Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- await venomGenerateImage(qr)
+ await venomGenerateImage(qr, `${this.globalVendorArgs.name}.qr.png`)
}
/**
diff --git a/packages/provider/src/venom/utils.js b/packages/provider/src/venom/utils.js
index cf1dc5f..0eb54a4 100644
--- a/packages/provider/src/venom/utils.js
+++ b/packages/provider/src/venom/utils.js
@@ -10,8 +10,8 @@ const venomCleanNumber = (number, full = false) => {
return number
}
-const venomGenerateImage = async (base) => {
- const PATH_QR = `${process.cwd()}/qr.png`
+const venomGenerateImage = async (base, name = 'qr.png') => {
+ const PATH_QR = `${process.cwd()}/${name}`
const matches = base.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/)
if (matches.length !== 3) {
return new Error('Invalid input string')
diff --git a/packages/provider/src/web-whatsapp/index.js b/packages/provider/src/web-whatsapp/index.js
index ef9427f..f7f8bd0 100644
--- a/packages/provider/src/web-whatsapp/index.js
+++ b/packages/provider/src/web-whatsapp/index.js
@@ -19,11 +19,23 @@ const logger = new Console({
* https://github.com/pedroslopez/whatsapp-web.js
*/
class WebWhatsappProvider extends ProviderClass {
+ globalVendorArgs = { name: `bot` }
vendor
- constructor() {
+ constructor(args) {
super()
+ this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.vendor = new Client({
- authStrategy: new LocalAuth(),
+ authStrategy: new LocalAuth({
+ clientId: `${this.globalVendorArgs.name}_sessions`,
+ }),
+ puppeteer: {
+ headless: true,
+ args: [
+ '--no-sandbox',
+ '--disable-setuid-sandbox',
+ '--unhandled-rejections=strict',
+ ],
+ },
})
const listEvents = this.busEvents()
@@ -60,12 +72,15 @@ class WebWhatsappProvider extends ProviderClass {
func: async (qr) => {
this.emit('require_action', {
instructions: [
- `Debes escanear el QR Code para iniciar session reivsa qr.png`,
+ `Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
- await wwebGenerateImage(qr)
+ await wwebGenerateImage(
+ qr,
+ `${this.globalVendorArgs.name}.qr.png`
+ )
},
},
{
diff --git a/packages/provider/src/web-whatsapp/utils.js b/packages/provider/src/web-whatsapp/utils.js
index e70bd65..df2fd27 100644
--- a/packages/provider/src/web-whatsapp/utils.js
+++ b/packages/provider/src/web-whatsapp/utils.js
@@ -11,8 +11,8 @@ const wwebCleanNumber = (number, full = false) => {
return number
}
-const wwebGenerateImage = async (base64) => {
- const PATH_QR = `${process.cwd()}/qr.png`
+const wwebGenerateImage = async (base64, name = 'qr.png') => {
+ const PATH_QR = `${process.cwd()}/${name}`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
const writeFilePromise = () =>
diff --git a/scripts/github.js b/scripts/github.js
new file mode 100644
index 0000000..9277d83
--- /dev/null
+++ b/scripts/github.js
@@ -0,0 +1,47 @@
+const process = require('node:process')
+const { Octokit } = require('@octokit/core')
+
+const [PKG_ARG, GITHUB_TOKEN] = process.argv.slice(2) || [null]
+
+/**
+ * Publicar Release en Github
+ * @param {*} name
+ * @param {*} tag_name
+ * @param {*} auth
+ * @param {*} owner
+ * @param {*} repo
+ */
+const githubGithubRelease = async (
+ name = '',
+ tag_name = '',
+ auth = '',
+ owner = 'codigoencasa',
+ repo = 'bot-whatsapp'
+) => {
+ const octokit = new Octokit({
+ auth,
+ })
+
+ await octokit.request(`POST /repos/${owner}/${repo}/releases`, {
+ owner,
+ repo,
+ tag_name,
+ name,
+ body: 'Description of the release',
+ draft: false,
+ prerelease: false,
+ generate_release_notes: true,
+ })
+}
+
+const main = async () => {
+ if (PKG_ARG) {
+ const githubToken = GITHUB_TOKEN ? GITHUB_TOKEN.split('=').at(1) : null
+ const pkgNumber = PKG_ARG ? PKG_ARG.split('=').at(1) : null
+
+ if (pkgNumber)
+ await githubGithubRelease(`v${pkgNumber}`, pkgNumber, githubToken)
+ }
+}
+
+main()
diff --git a/scripts/move.js b/scripts/move.js
index 078581a..e59897b 100644
--- a/scripts/move.js
+++ b/scripts/move.js
@@ -10,10 +10,20 @@ const copyLibPkg = async (pkgName, to) => {
await fs.copy(FROM, TO)
}
-Promise.all([
- copyLibPkg('create-bot-whatsapp', appDir),
- copyLibPkg('bot', appDir),
- copyLibPkg('database', appDir),
- copyLibPkg('provider', appDir),
- copyLibPkg('contexts', appDir),
-]).then(() => console.log('Todas las librerías copiadas'))
+const listLib = [
+ 'create-bot-whatsapp',
+ 'bot',
+ 'database',
+ 'provider',
+ 'contexts',
+ 'portal',
+]
+
+const main = async () => {
+ for (const iterator of listLib) {
+ await copyLibPkg(iterator, appDir)
+ console.log(`${iterator}: Copiado ✅`)
+ }
+}
+
+main()
diff --git a/starters/apps/base-baileys-json/Dockerfile b/starters/apps/base-baileys-json/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-baileys-json/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-baileys-json/README.md b/starters/apps/base-baileys-json/README.md
index a31dc9f..13d73f2 100644
--- a/starters/apps/base-baileys-json/README.md
+++ b/starters/apps/base-baileys-json/README.md
@@ -5,26 +5,8 @@
-**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
+**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)**
-```js
-const main = async () => {
- const adapterDB = new MockAdapter()
- const adapterFlow = createFlow([flowPrincipal])
-
- const adapterProvider = createProvider(BaileysProvider, {
- accountSid: process.env.ACC_SID,
- authToken: process.env.ACC_TOKEN,
- vendorNumber: process.env.ACC_VENDOR,
- })
-
- createBot({
- flow: adapterFlow,
- provider: adapterProvider,
- database: adapterDB,
- })
-}
-```
```
npm install
diff --git a/starters/apps/base-baileys-json/app.js b/starters/apps/base-baileys-json/app.js
index 267d860..b06887c 100644
--- a/starters/apps/base-baileys-json/app.js
+++ b/starters/apps/base-baileys-json/app.js
@@ -5,84 +5,90 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const JsonFileAdapter = require('@bot-whatsapp/database/json')
-/**
- * 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
-
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
const adapterDB = new JsonFileAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
+
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
+
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-baileys-json/package.json b/starters/apps/base-baileys-json/package.json
index 7693630..1ecbe56 100644
--- a/starters/apps/base-baileys-json/package.json
+++ b/starters/apps/base-baileys-json/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-bailey-json",
+ "name": "base-bailey-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"wa-sticker-formatter": "4.3.2"
diff --git a/starters/apps/base-baileys-memory/Dockerfile b/starters/apps/base-baileys-memory/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-baileys-memory/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-baileys-memory/README.md b/starters/apps/base-baileys-memory/README.md
index a31dc9f..13d73f2 100644
--- a/starters/apps/base-baileys-memory/README.md
+++ b/starters/apps/base-baileys-memory/README.md
@@ -5,26 +5,8 @@
-**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
+**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)**
-```js
-const main = async () => {
- const adapterDB = new MockAdapter()
- const adapterFlow = createFlow([flowPrincipal])
-
- const adapterProvider = createProvider(BaileysProvider, {
- accountSid: process.env.ACC_SID,
- authToken: process.env.ACC_TOKEN,
- vendorNumber: process.env.ACC_VENDOR,
- })
-
- createBot({
- flow: adapterFlow,
- provider: adapterProvider,
- database: adapterDB,
- })
-}
-```
```
npm install
diff --git a/starters/apps/base-baileys-memory/app.js b/starters/apps/base-baileys-memory/app.js
index 3b967a8..3d05e79 100644
--- a/starters/apps/base-baileys-memory/app.js
+++ b/starters/apps/base-baileys-memory/app.js
@@ -5,84 +5,90 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
-/**
- * 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
-
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
+
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
+
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-baileys-memory/package.json b/starters/apps/base-baileys-memory/package.json
index 481e00a..2d01103 100644
--- a/starters/apps/base-baileys-memory/package.json
+++ b/starters/apps/base-baileys-memory/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-bailey-memory",
+ "name": "base-bailey-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"wa-sticker-formatter": "4.3.2"
diff --git a/starters/apps/base-baileys-mongo/Dockerfile b/starters/apps/base-baileys-mongo/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-baileys-mongo/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-baileys-mongo/app.js b/starters/apps/base-baileys-mongo/app.js
index 96f04b0..2de3ad6 100644
--- a/starters/apps/base-baileys-mongo/app.js
+++ b/starters/apps/base-baileys-mongo/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MongoAdapter = require('@bot-whatsapp/database/mongo')
@@ -27,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -93,6 +108,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-baileys-mongo/package.json b/starters/apps/base-baileys-mongo/package.json
index d828a88..92f84a8 100644
--- a/starters/apps/base-baileys-mongo/package.json
+++ b/starters/apps/base-baileys-mongo/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-bailey-mongo",
+ "name": "base-bailey-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"mongodb": "^4.12.1",
diff --git a/starters/apps/base-baileys-mysql/Dockerfile b/starters/apps/base-baileys-mysql/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-baileys-mysql/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-baileys-mysql/app.js b/starters/apps/base-baileys-mysql/app.js
index 6982000..d3dbbe5 100644
--- a/starters/apps/base-baileys-mysql/app.js
+++ b/starters/apps/base-baileys-mysql/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
@@ -28,58 +29,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -96,6 +111,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-baileys-mysql/package.json b/starters/apps/base-baileys-mysql/package.json
index 4a7b07a..8bb2c71 100644
--- a/starters/apps/base-baileys-mysql/package.json
+++ b/starters/apps/base-baileys-mysql/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-bailey-mysql",
+ "name": "base-bailey-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"mysql2": "^2.3.3",
diff --git a/starters/apps/base-meta-json/Dockerfile b/starters/apps/base-meta-json/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-meta-json/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-meta-json/app.js b/starters/apps/base-meta-json/app.js
index 49dd430..cc4c7ac 100644
--- a/starters/apps/base-meta-json/app.js
+++ b/starters/apps/base-meta-json/app.js
@@ -20,58 +20,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-meta-json/package.json b/starters/apps/base-meta-json/package.json
index 3243406..e034a53 100644
--- a/starters/apps/base-meta-json/package.json
+++ b/starters/apps/base-meta-json/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-meta-json",
+ "name": "base-meta-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
diff --git a/starters/apps/base-meta-memory/Dockerfile b/starters/apps/base-meta-memory/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-meta-memory/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-meta-memory/app.js b/starters/apps/base-meta-memory/app.js
index 288929c..c8201e8 100644
--- a/starters/apps/base-meta-memory/app.js
+++ b/starters/apps/base-meta-memory/app.js
@@ -20,58 +20,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-meta-memory/package.json b/starters/apps/base-meta-memory/package.json
index f86e916..51da345 100644
--- a/starters/apps/base-meta-memory/package.json
+++ b/starters/apps/base-meta-memory/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-meta-memory",
+ "name": "base-meta-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
diff --git a/starters/apps/base-meta-mongo/Dockerfile b/starters/apps/base-meta-mongo/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-meta-mongo/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-meta-mongo/app.js b/starters/apps/base-meta-mongo/app.js
index f40a6a2..18cd9ac 100644
--- a/starters/apps/base-meta-mongo/app.js
+++ b/starters/apps/base-meta-mongo/app.js
@@ -27,58 +27,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-meta-mongo/package.json b/starters/apps/base-meta-mongo/package.json
index 94055f8..686ac63 100644
--- a/starters/apps/base-meta-mongo/package.json
+++ b/starters/apps/base-meta-mongo/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-meta-mongo",
+ "name": "base-meta-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
diff --git a/starters/apps/base-meta-mysql/Dockerfile b/starters/apps/base-meta-mysql/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-meta-mysql/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-meta-mysql/app.js b/starters/apps/base-meta-mysql/app.js
index 25b171c..102f977 100644
--- a/starters/apps/base-meta-mysql/app.js
+++ b/starters/apps/base-meta-mysql/app.js
@@ -28,58 +28,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-meta-mysql/package.json b/starters/apps/base-meta-mysql/package.json
index a9a71b0..45fe39e 100644
--- a/starters/apps/base-meta-mysql/package.json
+++ b/starters/apps/base-meta-mysql/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-meta-mysql",
+ "name": "base-meta-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
diff --git a/starters/apps/base-twilio-json/Dockerfile b/starters/apps/base-twilio-json/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-twilio-json/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-twilio-json/app.js b/starters/apps/base-twilio-json/app.js
index 190e842..047a126 100644
--- a/starters/apps/base-twilio-json/app.js
+++ b/starters/apps/base-twilio-json/app.js
@@ -20,58 +20,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-twilio-json/package.json b/starters/apps/base-twilio-json/package.json
index 4f5fdf4..15367a6 100644
--- a/starters/apps/base-twilio-json/package.json
+++ b/starters/apps/base-twilio-json/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-twilio-json",
+ "name": "base-twilio-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -11,7 +11,7 @@
"dependencies": {
"body-parser": "^1.20.1",
"polka": "^0.5.2",
- "twilio": "3.84.0",
+ "twilio": "3.84.1",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
diff --git a/starters/apps/base-twilio-memory/Dockerfile b/starters/apps/base-twilio-memory/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-twilio-memory/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-twilio-memory/app.js b/starters/apps/base-twilio-memory/app.js
index 9730709..cc1d16b 100644
--- a/starters/apps/base-twilio-memory/app.js
+++ b/starters/apps/base-twilio-memory/app.js
@@ -20,58 +20,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-twilio-memory/package.json b/starters/apps/base-twilio-memory/package.json
index e71ca5a..bf1501c 100644
--- a/starters/apps/base-twilio-memory/package.json
+++ b/starters/apps/base-twilio-memory/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-twilio-memory",
+ "name": "base-twilio-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -11,7 +11,7 @@
"dependencies": {
"body-parser": "^1.20.1",
"polka": "^0.5.2",
- "twilio": "3.84.0",
+ "twilio": "3.84.1",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
diff --git a/starters/apps/base-twilio-mongo/Dockerfile b/starters/apps/base-twilio-mongo/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-twilio-mongo/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-twilio-mongo/app.js b/starters/apps/base-twilio-mongo/app.js
index 9e5e3f7..dcabb99 100644
--- a/starters/apps/base-twilio-mongo/app.js
+++ b/starters/apps/base-twilio-mongo/app.js
@@ -27,58 +27,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-twilio-mongo/package.json b/starters/apps/base-twilio-mongo/package.json
index 4a8c063..06bdef2 100644
--- a/starters/apps/base-twilio-mongo/package.json
+++ b/starters/apps/base-twilio-mongo/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-twilio-mongo",
+ "name": "base-twilio-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -11,7 +11,7 @@
"dependencies": {
"body-parser": "^1.20.1",
"polka": "^0.5.2",
- "twilio": "3.84.0",
+ "twilio": "3.84.1",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
diff --git a/starters/apps/base-twilio-mysql/Dockerfile b/starters/apps/base-twilio-mysql/Dockerfile
new file mode 100644
index 0000000..7fb6d5d
--- /dev/null
+++ b/starters/apps/base-twilio-mysql/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-bullseye as bot
+WORKDIR /app
+COPY package*.json ./
+RUN npm i
+COPY . .
+ARG RAILWAY_STATIC_URL
+ARG PUBLIC_URL
+ARG PORT
+CMD ["npm", "start"]
diff --git a/starters/apps/base-twilio-mysql/app.js b/starters/apps/base-twilio-mysql/app.js
index 7100f9c..4725cd3 100644
--- a/starters/apps/base-twilio-mysql/app.js
+++ b/starters/apps/base-twilio-mysql/app.js
@@ -29,58 +29,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
diff --git a/starters/apps/base-twilio-mysql/package.json b/starters/apps/base-twilio-mysql/package.json
index d4c4d37..90149e2 100644
--- a/starters/apps/base-twilio-mysql/package.json
+++ b/starters/apps/base-twilio-mysql/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-twilio-mysql",
+ "name": "base-twilio-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -11,7 +11,7 @@
"dependencies": {
"body-parser": "^1.20.1",
"polka": "^0.5.2",
- "twilio": "3.84.0",
+ "twilio": "3.84.1",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
diff --git a/starters/apps/base-venom-json/Dockerfile b/starters/apps/base-venom-json/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-venom-json/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-venom-json/app.js b/starters/apps/base-venom-json/app.js
index 8a223b2..120deee 100644
--- a/starters/apps/base-venom-json/app.js
+++ b/starters/apps/base-venom-json/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const VenomProvider = require('@bot-whatsapp/provider/venom')
const JsonFileAdapter = require('@bot-whatsapp/database/json')
@@ -20,58 +21,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -83,6 +98,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-venom-json/package.json b/starters/apps/base-venom-json/package.json
index 88d7f6f..87b993b 100644
--- a/starters/apps/base-venom-json/package.json
+++ b/starters/apps/base-venom-json/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-venom-json",
+ "name": "base-venom-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mime-types": "2.1.35"
},
"author": "",
diff --git a/starters/apps/base-venom-memory/Dockerfile b/starters/apps/base-venom-memory/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-venom-memory/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-venom-memory/app.js b/starters/apps/base-venom-memory/app.js
index 44750c4..8402cf9 100644
--- a/starters/apps/base-venom-memory/app.js
+++ b/starters/apps/base-venom-memory/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const VenomProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock')
@@ -20,58 +21,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -83,6 +98,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-venom-memory/package.json b/starters/apps/base-venom-memory/package.json
index dfe5408..228c623 100644
--- a/starters/apps/base-venom-memory/package.json
+++ b/starters/apps/base-venom-memory/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-venom-memory",
+ "name": "base-venom-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mime-types": "2.1.35"
},
"author": "",
diff --git a/starters/apps/base-venom-mongo/Dockerfile b/starters/apps/base-venom-mongo/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-venom-mongo/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-venom-mongo/app.js b/starters/apps/base-venom-mongo/app.js
index 266e2e0..2f4f16a 100644
--- a/starters/apps/base-venom-mongo/app.js
+++ b/starters/apps/base-venom-mongo/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const VenomProvider = require('@bot-whatsapp/provider/venom')
const MongoAdapter = require('@bot-whatsapp/database/mongo')
@@ -27,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -93,6 +108,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-venom-mongo/package.json b/starters/apps/base-venom-mongo/package.json
index 3b46613..d6b5693 100644
--- a/starters/apps/base-venom-mongo/package.json
+++ b/starters/apps/base-venom-mongo/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-venom-mongo",
+ "name": "base-venom-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mime-types": "2.1.35",
"mongodb": "^4.12.1"
},
diff --git a/starters/apps/base-venom-mysql/Dockerfile b/starters/apps/base-venom-mysql/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-venom-mysql/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-venom-mysql/app.js b/starters/apps/base-venom-mysql/app.js
index fe19fa5..8c5c2db 100644
--- a/starters/apps/base-venom-mysql/app.js
+++ b/starters/apps/base-venom-mysql/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const VenomProvider = require('@bot-whatsapp/provider/venom')
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
@@ -29,58 +30,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -97,6 +112,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-venom-mysql/package.json b/starters/apps/base-venom-mysql/package.json
index 670fd00..d8d5466 100644
--- a/starters/apps/base-venom-mysql/package.json
+++ b/starters/apps/base-venom-mysql/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-venom-mysql",
+ "name": "base-venom-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mysql2": "^2.3.3",
"mime-types": "2.1.35"
},
diff --git a/starters/apps/base-wweb-json/Dockerfile b/starters/apps/base-wweb-json/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-wweb-json/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-wweb-json/app.js b/starters/apps/base-wweb-json/app.js
index 2b8a55d..729ac2a 100644
--- a/starters/apps/base-wweb-json/app.js
+++ b/starters/apps/base-wweb-json/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const JsonFileAdapter = require('@bot-whatsapp/database/json')
@@ -20,58 +21,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -83,6 +98,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-wweb-json/package.json b/starters/apps/base-wweb-json/package.json
index 9abc893..f52ab5a 100644
--- a/starters/apps/base-wweb-json/package.json
+++ b/starters/apps/base-wweb-json/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-wweb-json",
+ "name": "base-wweb-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"whatsapp-web.js": "1.18.4"
},
"author": "",
diff --git a/starters/apps/base-wweb-memory/Dockerfile b/starters/apps/base-wweb-memory/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-wweb-memory/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-wweb-memory/app.js b/starters/apps/base-wweb-memory/app.js
index 1e47221..d6a567a 100644
--- a/starters/apps/base-wweb-memory/app.js
+++ b/starters/apps/base-wweb-memory/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
@@ -20,58 +21,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -83,6 +98,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-wweb-memory/package.json b/starters/apps/base-wweb-memory/package.json
index fbf9400..b9c4712 100644
--- a/starters/apps/base-wweb-memory/package.json
+++ b/starters/apps/base-wweb-memory/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-wweb-memory",
+ "name": "base-wweb-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"whatsapp-web.js": "1.18.4"
},
"author": "",
diff --git a/starters/apps/base-wweb-mongo/Dockerfile b/starters/apps/base-wweb-mongo/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-wweb-mongo/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-wweb-mongo/app.js b/starters/apps/base-wweb-mongo/app.js
index e78f1b1..a8e8aad 100644
--- a/starters/apps/base-wweb-mongo/app.js
+++ b/starters/apps/base-wweb-mongo/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MongoAdapter = require('@bot-whatsapp/database/mongo')
@@ -27,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -93,6 +108,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-wweb-mongo/package.json b/starters/apps/base-wweb-mongo/package.json
index c58767a..9c51d8a 100644
--- a/starters/apps/base-wweb-mongo/package.json
+++ b/starters/apps/base-wweb-mongo/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-wweb-mongo",
+ "name": "base-wweb-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mime-types": "^2.1.35",
"mongodb": "^4.12.1"
},
diff --git a/starters/apps/base-wweb-mysql/Dockerfile b/starters/apps/base-wweb-mysql/Dockerfile
new file mode 100644
index 0000000..3a9aa17
--- /dev/null
+++ b/starters/apps/base-wweb-mysql/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:18-alpine as node
+
+WORKDIR /app
+# Installs latest Chromium (92) package.
+RUN apk add --no-cache \
+ chromium \
+ nss \
+ freetype \
+ harfbuzz \
+ ca-certificates \
+ ttf-freefont \
+ nodejs \
+ yarn
+
+# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
+ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
+
+# Puppeteer v10.0.0 works with Chromium 92.
+COPY . .
+RUN npm install puppeteer@10.0.0
+RUN npm install
+
+CMD ["npm", "start"]
diff --git a/starters/apps/base-wweb-mysql/app.js b/starters/apps/base-wweb-mysql/app.js
index 2d92136..68f7f37 100644
--- a/starters/apps/base-wweb-mysql/app.js
+++ b/starters/apps/base-wweb-mysql/app.js
@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
+const QRPortalWeb = require('@bot-whatsapp/portal')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
@@ -29,58 +30,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
-const flowBolsos2 = addKeyword(['bolsos2', '2'])
- .addAnswer('🤯 *MUCHOS* bolsos ...')
- .addAnswer('y mas bolsos... bla bla')
+const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
+ '📄 Aquí tenemos el flujo secundario',
+])
-const flowZapatos2 = addKeyword(['zapatos2', '2'])
- .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
- .addAnswer('y algunas otras cosas.')
+const flowDocs = addKeyword([
+ 'doc',
+ 'documentacion',
+ 'documentación',
+]).addAnswer(
+ [
+ '📄 Aquí encontras las documentación recuerda que puedes mejorarla',
+ 'https://bot-whatsapp.netlify.app/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowZapatos2]
- )
+const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
+ [
+ '🙌 Aquí encontras un ejemplo rapido',
+ 'https://bot-whatsapp.netlify.app/docs/example/',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-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)
- },
- [flowBolsos2]
- )
+const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
+ [
+ '🚀 Puedes aportar tu granito de arena a este proyecto',
+ '[*opencollective*] https://opencollective.com/bot-whatsapp',
+ '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
+ '[*patreon*] https://www.patreon.com/leifermendez',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
-/**
- * Declarando flujo principal
- */
+const flowDiscord = addKeyword(['discord']).addAnswer(
+ [
+ '🤪 Únete al discord',
+ 'https://link.codigoencasa.com/DISCORD',
+ '\n*2* Para siguiente paso.',
+ ],
+ null,
+ null,
+ [flowSecundario]
+)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
- .addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
- .addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
+ .addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.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)
- },
- [flowBolsos, flowZapatos]
+ [
+ 'te comparto los siguientes links de interes sobre el proyecto',
+ '👉 *doc* para ver la documentación',
+ '👉 *gracias* para ver la lista de videos',
+ '👉 *discord* unirte al discord',
+ ],
+ null,
+ null,
+ [flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -97,6 +112,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
+ QRPortalWeb()
}
main()
diff --git a/starters/apps/base-wweb-mysql/package.json b/starters/apps/base-wweb-mysql/package.json
index b1c44ff..e95ec1a 100644
--- a/starters/apps/base-wweb-mysql/package.json
+++ b/starters/apps/base-wweb-mysql/package.json
@@ -1,5 +1,5 @@
{
- "name": "bot-whatsapp-base-wweb-mysql",
+ "name": "base-wweb-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -14,6 +14,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
+ "@bot-whatsapp/portal": "latest",
"mysql2": "^2.3.3"
},
"author": "",
diff --git a/yarn.lock b/yarn.lock
index afbf29e..cf802d5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5,6 +5,13 @@ __metadata:
version: 6
cacheKey: 8
+"@arr/every@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "@arr/every@npm:1.0.1"
+ checksum: fc33cd8f3244db7053b89898fc0d1753dd17f40328a443d8640dc15578ed74c59d8e12fe8de87ddb20a2cee578dc0dd9fbb94eb77ef209158fb615bb904b684f
+ languageName: node
+ linkType: hard
+
"@aws-crypto/ie11-detection@npm:^2.0.0":
version: 2.0.2
resolution: "@aws-crypto/ie11-detection@npm:2.0.2"
@@ -82,15 +89,15 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/client-cognito-identity@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/client-cognito-identity@npm:3.241.0"
+"@aws-sdk/client-cognito-identity@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/client-cognito-identity@npm:3.245.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
- "@aws-sdk/client-sts": 3.241.0
+ "@aws-sdk/client-sts": 3.245.0
"@aws-sdk/config-resolver": 3.234.0
- "@aws-sdk/credential-provider-node": 3.241.0
+ "@aws-sdk/credential-provider-node": 3.245.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -115,20 +122,20 @@ __metadata:
"@aws-sdk/util-body-length-node": 3.208.0
"@aws-sdk/util-defaults-mode-browser": 3.234.0
"@aws-sdk/util-defaults-mode-node": 3.234.0
- "@aws-sdk/util-endpoints": 3.241.0
+ "@aws-sdk/util-endpoints": 3.245.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
"@aws-sdk/util-user-agent-node": 3.226.0
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: 6523a2d30ab0a234311eee5f16b20a21e0def89da53a53713caf66f1b502b56b9e40c8f5cd4180ffe4049756e7b3d939fbc35d34da0fbe6ef954a190ce3a579a
+ checksum: 4142ba1b7a3c11f785d5da527a743d6a9352f6f97ae983e6f3ee0abf5a1cd755c2196981cbc2f6052686bf820a68f062117c682a5126e55acaacebc5cab862e6
languageName: node
linkType: hard
-"@aws-sdk/client-sso-oidc@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/client-sso-oidc@npm:3.241.0"
+"@aws-sdk/client-sso-oidc@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/client-sso-oidc@npm:3.245.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
@@ -156,20 +163,20 @@ __metadata:
"@aws-sdk/util-body-length-node": 3.208.0
"@aws-sdk/util-defaults-mode-browser": 3.234.0
"@aws-sdk/util-defaults-mode-node": 3.234.0
- "@aws-sdk/util-endpoints": 3.241.0
+ "@aws-sdk/util-endpoints": 3.245.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
"@aws-sdk/util-user-agent-node": 3.226.0
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: e8a8a99f2234dd011f662a42c9e137bd8aa959db85644487560681aab102ee16b356c4ca8838529086b88e63384c0f7e105b3a1bcf05a7162e8cd1484e60b259
+ checksum: 6f72ee0df276f8c4019be4d9b3fa1b2cbab7744b13f434f07c9314303290334296be1148276266715ef3cfb37e83ced448fd9d6bb34d09bd21ed41d0a83598dc
languageName: node
linkType: hard
-"@aws-sdk/client-sso@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/client-sso@npm:3.241.0"
+"@aws-sdk/client-sso@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/client-sso@npm:3.245.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
@@ -197,25 +204,25 @@ __metadata:
"@aws-sdk/util-body-length-node": 3.208.0
"@aws-sdk/util-defaults-mode-browser": 3.234.0
"@aws-sdk/util-defaults-mode-node": 3.234.0
- "@aws-sdk/util-endpoints": 3.241.0
+ "@aws-sdk/util-endpoints": 3.245.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
"@aws-sdk/util-user-agent-node": 3.226.0
"@aws-sdk/util-utf8-browser": 3.188.0
"@aws-sdk/util-utf8-node": 3.208.0
tslib: ^2.3.1
- checksum: 3c9e006aa7993a81b40c05e26ce57654db50bcbf4c10fe2a3e6f2a6ac806f631ba1784db5b1d33d4060d12a76331a98932bc1fab7ef1fe21578a56206015adab
+ checksum: e7dd235ee13465438a181c5de2f5bfc1acdaa12a07db74a3255dbb580004c33544d6773252b164dda2e2357ea83f3985afd060dfe42d6064732d36750764eda1
languageName: node
linkType: hard
-"@aws-sdk/client-sts@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/client-sts@npm:3.241.0"
+"@aws-sdk/client-sts@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/client-sts@npm:3.245.0"
dependencies:
"@aws-crypto/sha256-browser": 2.0.0
"@aws-crypto/sha256-js": 2.0.0
"@aws-sdk/config-resolver": 3.234.0
- "@aws-sdk/credential-provider-node": 3.241.0
+ "@aws-sdk/credential-provider-node": 3.245.0
"@aws-sdk/fetch-http-handler": 3.226.0
"@aws-sdk/hash-node": 3.226.0
"@aws-sdk/invalid-dependency": 3.226.0
@@ -241,7 +248,7 @@ __metadata:
"@aws-sdk/util-body-length-node": 3.208.0
"@aws-sdk/util-defaults-mode-browser": 3.234.0
"@aws-sdk/util-defaults-mode-node": 3.234.0
- "@aws-sdk/util-endpoints": 3.241.0
+ "@aws-sdk/util-endpoints": 3.245.0
"@aws-sdk/util-retry": 3.229.0
"@aws-sdk/util-user-agent-browser": 3.226.0
"@aws-sdk/util-user-agent-node": 3.226.0
@@ -249,7 +256,7 @@ __metadata:
"@aws-sdk/util-utf8-node": 3.208.0
fast-xml-parser: 4.0.11
tslib: ^2.3.1
- checksum: 35dc5dd7950aa2f8ef2efe8674b25dc48a5108e1cb6299d66dc79a4ecb2d5905224ca7f26908a82650060cc3a11a7198c22e49879dfd3f1104c04d6b43f5ab1d
+ checksum: 3b052be86063978b47b2f4459062ea23a6d94c81951a97428a5445ff062d642a3460114cbf1b20d3925db0667d893db40cbe30b1b8b58a4d749c75d117aab460
languageName: node
linkType: hard
@@ -266,15 +273,15 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-cognito-identity@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.241.0"
+"@aws-sdk/credential-provider-cognito-identity@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.245.0"
dependencies:
- "@aws-sdk/client-cognito-identity": 3.241.0
+ "@aws-sdk/client-cognito-identity": 3.245.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: bd4c2600ddc20b69050e6f79ea95b255bced0c614e503945a0fa63adf5b0dfc1f4c43286d8b101e587f609317e409a041fabb4a277831e753852bd8ee8195b64
+ checksum: af9ce2a19426056139c380fa2a016d5abb42117e262dc5c3f4741eb1f2d15b394e9b178d6efb2e32f59cd723c6090da769975505368fbbe79b8eb9258c6961a8
languageName: node
linkType: hard
@@ -302,38 +309,38 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-ini@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/credential-provider-ini@npm:3.241.0"
+"@aws-sdk/credential-provider-ini@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/credential-provider-ini@npm:3.245.0"
dependencies:
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
"@aws-sdk/credential-provider-process": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.241.0
+ "@aws-sdk/credential-provider-sso": 3.245.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: 532af26415644ebcef2c0714e6c894bb6e7d571abb4330a35e70b4d19c5f90ffd61f352f6d0e9cd58cef97b32946edf821d9fb82d0d6d0836f2dfbc5f280b56a
+ checksum: 35fcdb231efb573c60c25e67a27f64ca892ebab7931e715406826a4d3f87caecd525945f45ecaf7fb7e09a87a744678aba60249c74681160c9fb9d66c0490bf5
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-node@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/credential-provider-node@npm:3.241.0"
+"@aws-sdk/credential-provider-node@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/credential-provider-node@npm:3.245.0"
dependencies:
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
- "@aws-sdk/credential-provider-ini": 3.241.0
+ "@aws-sdk/credential-provider-ini": 3.245.0
"@aws-sdk/credential-provider-process": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.241.0
+ "@aws-sdk/credential-provider-sso": 3.245.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: f485933f514ab2a14204a231a4bde77e22034329e90b4d797f18625bca8836462d19e7d88365380d57c8c80a3510bc135671da25457481a6f7cecba1ad4764e3
+ checksum: a9bd115016fc7ce7f2cb50c5cafcd759f861362bb9dd9629e4ea0056519d5b26ad256f6d1d84ef3327c75bef442de8c0e4b54b215870512b43c92866ed0f1403
languageName: node
linkType: hard
@@ -349,17 +356,17 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/credential-provider-sso@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/credential-provider-sso@npm:3.241.0"
+"@aws-sdk/credential-provider-sso@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/credential-provider-sso@npm:3.245.0"
dependencies:
- "@aws-sdk/client-sso": 3.241.0
+ "@aws-sdk/client-sso": 3.245.0
"@aws-sdk/property-provider": 3.226.0
"@aws-sdk/shared-ini-file-loader": 3.226.0
- "@aws-sdk/token-providers": 3.241.0
+ "@aws-sdk/token-providers": 3.245.0
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: 7e7e45024788e27c09f4885a402b7ae4c2e72a01accb6117f44474a9d89bd00c75df42f6060252747ba9415a77046b47c5c38015564bea8f1240bbaf8bb959df
+ checksum: 95358504631d5451520d5090e7fb337b40dfc12ab30dd84d979165d881f2762798828003b13adcb35921223bf3a498b0e70b7a94ebc14e8b16a4f0adacded8f1
languageName: node
linkType: hard
@@ -375,25 +382,25 @@ __metadata:
linkType: hard
"@aws-sdk/credential-providers@npm:^3.186.0":
- version: 3.241.0
- resolution: "@aws-sdk/credential-providers@npm:3.241.0"
+ version: 3.245.0
+ resolution: "@aws-sdk/credential-providers@npm:3.245.0"
dependencies:
- "@aws-sdk/client-cognito-identity": 3.241.0
- "@aws-sdk/client-sso": 3.241.0
- "@aws-sdk/client-sts": 3.241.0
- "@aws-sdk/credential-provider-cognito-identity": 3.241.0
+ "@aws-sdk/client-cognito-identity": 3.245.0
+ "@aws-sdk/client-sso": 3.245.0
+ "@aws-sdk/client-sts": 3.245.0
+ "@aws-sdk/credential-provider-cognito-identity": 3.245.0
"@aws-sdk/credential-provider-env": 3.226.0
"@aws-sdk/credential-provider-imds": 3.226.0
- "@aws-sdk/credential-provider-ini": 3.241.0
- "@aws-sdk/credential-provider-node": 3.241.0
+ "@aws-sdk/credential-provider-ini": 3.245.0
+ "@aws-sdk/credential-provider-node": 3.245.0
"@aws-sdk/credential-provider-process": 3.226.0
- "@aws-sdk/credential-provider-sso": 3.241.0
+ "@aws-sdk/credential-provider-sso": 3.245.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: a3425f193c651066138682efcecf55bc6bef74c18bcac0a76e1ce177615a0936b76052263695454f4a04b8207e184a23c5cf407ab38161ccf96d560168138557
+ checksum: a6923907ce97232cf87565e5fc0dac872061d2f065f530f7c91d1693472dd26667a91a662283994b3886a84b557f45e8627d0c847a88ffa0fdf2458a0180bd43
languageName: node
linkType: hard
@@ -680,16 +687,16 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/token-providers@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/token-providers@npm:3.241.0"
+"@aws-sdk/token-providers@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/token-providers@npm:3.245.0"
dependencies:
- "@aws-sdk/client-sso-oidc": 3.241.0
+ "@aws-sdk/client-sso-oidc": 3.245.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: 7897380a0bf8790b66e17633a6b510785876193f3bd481773afd7179ebbd0ec6849ec88ea873f9ee634fca55fac49f881bddc09133c380f2113eb5d67761c31d
+ checksum: 900a73b999c50eb35b3eda594210448329f5068b57a2d8d57ee8e4f3d960116ece36952ca1fbe43b5e8e9119927de916033f73ff969bae3a8394d4ef98f1d0c7
languageName: node
linkType: hard
@@ -786,13 +793,13 @@ __metadata:
languageName: node
linkType: hard
-"@aws-sdk/util-endpoints@npm:3.241.0":
- version: 3.241.0
- resolution: "@aws-sdk/util-endpoints@npm:3.241.0"
+"@aws-sdk/util-endpoints@npm:3.245.0":
+ version: 3.245.0
+ resolution: "@aws-sdk/util-endpoints@npm:3.245.0"
dependencies:
"@aws-sdk/types": 3.226.0
tslib: ^2.3.1
- checksum: d4743ef1a2cd2128f33da61466f9749b9e43bdee1bc01ffaead6839571506e559936f6a82192dcdce65553841f7c74ed8a9ba219e0331fbd783af012711b341b
+ checksum: 22783fb178e8901385b20b0d19b944ad41297cc19f0561ac1722e86757ca6910fd3766626a0493372f718a0726bef920a5b39cc41fdceb1012f14e833541041b
languageName: node
linkType: hard
@@ -968,11 +975,11 @@ __metadata:
linkType: hard
"@bot-whatsapp/bot@npm:*":
- version: 0.1.3
- resolution: "@bot-whatsapp/bot@npm:0.1.3"
+ version: 0.1.5
+ resolution: "@bot-whatsapp/bot@npm:0.1.5"
dependencies:
dotenv: ^16.0.3
- checksum: c15ded2b0b82a916b5185ef4d77c4f19e495f618975bbddfafb8d858b683bb1146841590d0eb148fe4a4555e4e2ae70f8ab38282e73512b271c947f008e5a9a4
+ checksum: 5131587aba502cd1feaf61ff2f0778aa32b1b267f1e01646c6a9b43a4948e50b770ff8dddd434977d1603e46aeddaffc577b440e4848d899863a026b92ca57eb
languageName: node
linkType: hard
@@ -989,11 +996,11 @@ __metadata:
linkType: soft
"@bot-whatsapp/cli@npm:*":
- version: 0.1.3
- resolution: "@bot-whatsapp/cli@npm:0.1.3"
+ version: 0.1.5
+ resolution: "@bot-whatsapp/cli@npm:0.1.5"
bin:
bot: bin/cli.js
- checksum: 7d977c9bde3adc5f8faa2d83703ee1f4ecce3adaa4fdf14f30b157432edff5d3a2e92aae41644371313939be41238d3d324e94697cf04e30f11110f5dfec8817
+ checksum: 2ff67f9c6f8402b25e0b2cc72c17fb1b163e61d8baa897b564d4b388bc0dfadf0f42c2dee42d55c3f63feff1de9b65c8e46c547a3c6dd0d74e5d95bd3d18613a
languageName: node
linkType: hard
@@ -1019,13 +1026,13 @@ __metadata:
linkType: soft
"@bot-whatsapp/database@npm:*":
- version: 0.1.3
- resolution: "@bot-whatsapp/database@npm:0.1.3"
+ version: 0.1.5
+ resolution: "@bot-whatsapp/database@npm:0.1.5"
dependencies:
dotenv: ^16.0.3
mongodb: ^4.11.0
mysql2: ^2.3.3
- checksum: 65e0609d46e7994a97b7ba1e63110cea6ea9cf02ea59da8589a1d855599d1641c764bbffa4485bda185523799c9a2619b0c5db9dc95192224ce2e6cf1efe0b99
+ checksum: 4ddc5282c4b15d45126729fd1cf4adbd36328d71c82812f3f7c187ee6af4e8ee8c98cf7ead3bbf7fbb6631f22cdb608dad4a08b271a312b71a699bb35687da34
languageName: node
linkType: hard
@@ -1039,15 +1046,40 @@ __metadata:
languageName: unknown
linkType: soft
+"@bot-whatsapp/portal@workspace:packages/portal":
+ version: 0.0.0-use.local
+ resolution: "@bot-whatsapp/portal@workspace:packages/portal"
+ dependencies:
+ "@builder.io/qwik": 0.16.2
+ "@builder.io/qwik-city": 0.0.128
+ "@types/eslint": 8.4.10
+ "@types/node": ^18.11.18
+ "@types/node-fetch": latest
+ "@typescript-eslint/eslint-plugin": 5.48.0
+ "@typescript-eslint/parser": 5.48.0
+ eslint: 8.31.0
+ eslint-plugin-qwik: 0.16.2
+ kleur: ^4.1.5
+ node-fetch: 3.3.0
+ polka: ^0.5.2
+ prettier: 2.8.1
+ serve-static: ^1.13.1
+ typescript: 4.9.4
+ undici: 5.14.0
+ vite: 4.0.3
+ vite-tsconfig-paths: 3.5.0
+ languageName: unknown
+ linkType: soft
+
"@bot-whatsapp/provider@npm:*":
- version: 0.1.3
- resolution: "@bot-whatsapp/provider@npm:0.1.3"
+ version: 0.1.5
+ resolution: "@bot-whatsapp/provider@npm:0.1.5"
dependencies:
"@bot-whatsapp/bot": "*"
combine-image: ^1.0.3
qr-image: ^3.2.0
rimraf: ^3.0.2
- checksum: 49425ffe4ba869b913ba1885de8ca0cde4ec936e4619978b4bf175b7fee644a6672a1f2d5b85ebf3144cb57915712a138907c92d304208d4aac43dcd78e132a9
+ checksum: 87ab0ba27a4566ea882810fad1fe4be391d3a264646675e432b3dea860514bfa538f39d77e5dfa33b0daa3ed6f8540054c75f51a50c733155a9b86bbc13ac5e1
languageName: node
linkType: hard
@@ -1068,6 +1100,7 @@ __metadata:
dependencies:
"@commitlint/cli": ^17.3.0
"@commitlint/config-conventional": ^17.3.0
+ "@octokit/core": ^4.1.0
"@rollup/plugin-commonjs": ^23.0.2
"@rollup/plugin-json": ^5.0.1
"@rollup/plugin-node-resolve": ^15.0.1
@@ -1177,6 +1210,17 @@ __metadata:
languageName: node
linkType: hard
+"@builder.io/qwik@npm:0.16.2":
+ version: 0.16.2
+ resolution: "@builder.io/qwik@npm:0.16.2"
+ peerDependencies:
+ undici: ^5.14.0
+ bin:
+ qwik: qwik.cjs
+ checksum: e83e0c99589ed68463bf674954df1ce63de8396dcc081f79e9abe5ec6a116182e947fa6a822f277c53afbd3b03841fbfc3b1cbc4d18a8465af438be98155e322
+ languageName: node
+ linkType: hard
+
"@colors/colors@npm:1.5.0":
version: 1.5.0
resolution: "@colors/colors@npm:1.5.0"
@@ -1185,12 +1229,12 @@ __metadata:
linkType: hard
"@commitlint/cli@npm:^17.3.0":
- version: 17.4.0
- resolution: "@commitlint/cli@npm:17.4.0"
+ version: 17.4.1
+ resolution: "@commitlint/cli@npm:17.4.1"
dependencies:
"@commitlint/format": ^17.4.0
"@commitlint/lint": ^17.4.0
- "@commitlint/load": ^17.4.0
+ "@commitlint/load": ^17.4.1
"@commitlint/read": ^17.4.0
"@commitlint/types": ^17.4.0
execa: ^5.0.0
@@ -1200,7 +1244,7 @@ __metadata:
yargs: ^17.0.0
bin:
commitlint: cli.js
- checksum: ca4eea3264f2c1481378e1c9a70c6d0f499b7a0e49e22668bb0b61f808cc0277bae15555bb73fa9f9600618da453c94e6feb29020af6488ff2571e474f999b72
+ checksum: a0f3d26f06fa751be6009f76b76fee83e2394f6b528b38f375b3119be41a39c851a053e9dd93385a5274feff471bd0984e626bb23624d72e231f66125e222fd5
languageName: node
linkType: hard
@@ -1276,14 +1320,15 @@ __metadata:
languageName: node
linkType: hard
-"@commitlint/load@npm:^17.4.0":
- version: 17.4.0
- resolution: "@commitlint/load@npm:17.4.0"
+"@commitlint/load@npm:^17.4.1":
+ version: 17.4.1
+ resolution: "@commitlint/load@npm:17.4.1"
dependencies:
"@commitlint/config-validator": ^17.4.0
"@commitlint/execute-rule": ^17.4.0
"@commitlint/resolve-extends": ^17.4.0
"@commitlint/types": ^17.4.0
+ "@types/node": "*"
chalk: ^4.1.0
cosmiconfig: ^8.0.0
cosmiconfig-typescript-loader: ^4.0.0
@@ -1293,7 +1338,7 @@ __metadata:
resolve-from: ^5.0.0
ts-node: ^10.8.1
typescript: ^4.6.4
- checksum: 2225030e2261c111bec1bd17a4e01e5466129bd4d12701019dd422f0b9ca8bab4d7c5b524aa13095115d3981acfc74ea5b9c7c2f7ddb8661ecefcb1406843ab6
+ checksum: 17bc9f2e339da480740138bb1f56d6a5c36ec6d70844a605f09b5ffcbe0bb18fd3ab0ad09d40ba3cfd095f26b0b3cf78a02d7b73d5980d9e58dbdcdfaeb252a2
languageName: node
linkType: hard
@@ -1407,6 +1452,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/android-arm64@npm:0.16.16"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/android-arm@npm:0.15.18":
version: 0.15.18
resolution: "@esbuild/android-arm@npm:0.15.18"
@@ -1414,6 +1466,69 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/android-arm@npm:0.16.16"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/android-x64@npm:0.16.16"
+ conditions: os=android & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-arm64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/darwin-arm64@npm:0.16.16"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/darwin-x64@npm:0.16.16"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-arm64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/freebsd-arm64@npm:0.16.16"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/freebsd-x64@npm:0.16.16"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-arm64@npm:0.16.16"
+ conditions: os=linux & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-arm@npm:0.16.16"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ia32@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-ia32@npm:0.16.16"
+ conditions: os=linux & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-loong64@npm:0.15.18":
version: 0.15.18
resolution: "@esbuild/linux-loong64@npm:0.15.18"
@@ -1421,6 +1536,90 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-loong64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-loong64@npm:0.16.16"
+ conditions: os=linux & cpu=loong64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-mips64el@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-mips64el@npm:0.16.16"
+ conditions: os=linux & cpu=mips64el
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ppc64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-ppc64@npm:0.16.16"
+ conditions: os=linux & cpu=ppc64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-riscv64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-riscv64@npm:0.16.16"
+ conditions: os=linux & cpu=riscv64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-s390x@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-s390x@npm:0.16.16"
+ conditions: os=linux & cpu=s390x
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/linux-x64@npm:0.16.16"
+ conditions: os=linux & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/netbsd-x64@npm:0.16.16"
+ conditions: os=netbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openbsd-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/openbsd-x64@npm:0.16.16"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/sunos-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/sunos-x64@npm:0.16.16"
+ conditions: os=sunos & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-arm64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/win32-arm64@npm:0.16.16"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-ia32@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/win32-ia32@npm:0.16.16"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-x64@npm:0.16.16":
+ version: 0.16.16
+ resolution: "@esbuild/win32-x64@npm:0.16.16"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@eslint/eslintrc@npm:^1.3.3, @eslint/eslintrc@npm:^1.4.1":
version: 1.4.1
resolution: "@eslint/eslintrc@npm:1.4.1"
@@ -1438,6 +1637,62 @@ __metadata:
languageName: node
linkType: hard
+"@fastify/accept-negotiator@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "@fastify/accept-negotiator@npm:1.1.0"
+ checksum: 5c8f263680af0aece8c1fdea4d4c094a7f82cc5ed90b709357eb52a01e3388d1ac74a17e5a1d5d53f2d3ca93ae50d283ee451a6435b2cbe1b9847fff4d7d0732
+ languageName: node
+ linkType: hard
+
+"@fastify/ajv-compiler@npm:^3.3.1":
+ version: 3.5.0
+ resolution: "@fastify/ajv-compiler@npm:3.5.0"
+ dependencies:
+ ajv: ^8.11.0
+ ajv-formats: ^2.1.1
+ fast-uri: ^2.0.0
+ checksum: 5e5b16469f8d586473d0b32e3a9cf38c0d86ef2a6fb7ea12ed7f3665642bd8eb2dde9adcc317814369cb5a58210bfdac35996fa87d1cc23e88bbc799f0b128b0
+ languageName: node
+ linkType: hard
+
+"@fastify/deepmerge@npm:^1.0.0":
+ version: 1.3.0
+ resolution: "@fastify/deepmerge@npm:1.3.0"
+ checksum: 33ec927905dca320d7ae9535a1521909f7c82339706345324ab6287ad100589a799b8257c15b0e582c7bb74e2aa4883d82ba0228d7b116aa8789ada4f78d6974
+ languageName: node
+ linkType: hard
+
+"@fastify/error@npm:^3.0.0":
+ version: 3.2.0
+ resolution: "@fastify/error@npm:3.2.0"
+ checksum: e538ef76fd2dedd0584691e0c891997321a2050092b11089a70090f5a0edab0dc8ab069747aa6025782280824e2348548e051c8e77558baec699bd44e581e187
+ languageName: node
+ linkType: hard
+
+"@fastify/fast-json-stringify-compiler@npm:^4.1.0":
+ version: 4.2.0
+ resolution: "@fastify/fast-json-stringify-compiler@npm:4.2.0"
+ dependencies:
+ fast-json-stringify: ^5.0.0
+ checksum: c79e9aab14fe2693c4ae399824e0bdd2337a5f1ae403aeec0178a566b03633681d10fc16f010bcf503fb13a50127db463cfa25783dfbed1338b9ccd2593124bd
+ languageName: node
+ linkType: hard
+
+"@fastify/static@npm:^6.6.0":
+ version: 6.6.0
+ resolution: "@fastify/static@npm:6.6.0"
+ dependencies:
+ "@fastify/accept-negotiator": ^1.0.0
+ content-disposition: ^0.5.3
+ fastify-plugin: ^4.0.0
+ glob: ^8.0.1
+ p-limit: ^3.1.0
+ readable-stream: ^4.0.0
+ send: ^0.18.0
+ checksum: 4abefd47f404ead444742905c0596f55ee0dc264f694aeb34debcd10212e2cee8b2694159febe354454667999f397d73b06a52df6fe6150525f8c2a6af3078a8
+ languageName: node
+ linkType: hard
+
"@fontsource/inter@npm:^4.5.14":
version: 4.5.14
resolution: "@fontsource/inter@npm:4.5.14"
@@ -1501,10 +1756,10 @@ __metadata:
languageName: node
linkType: hard
-"@hookun/parse-animation-shorthand@npm:^0.1.4":
- version: 0.1.4
- resolution: "@hookun/parse-animation-shorthand@npm:0.1.4"
- checksum: 118013a2d4959335ae322a8f4364205eda7e997384eed26c9e3b601a143384add4ea71a00fd3208502a97575ac1c3beb357f525861ee3456bfff0de5d1944319
+"@hookun/parse-animation-shorthand@npm:^0.1.5":
+ version: 0.1.5
+ resolution: "@hookun/parse-animation-shorthand@npm:0.1.5"
+ checksum: 331b92a0eef74e514bfa071fc536ad1a741c51d5df3a1dbc15a691e61f168a316f0837329982309be291c5d9f871ea8f6db042813d6d4ed0263e4349507b6b2f
languageName: node
linkType: hard
@@ -1697,9 +1952,9 @@ __metadata:
languageName: node
linkType: hard
-"@netlify/build@npm:^29.2.2":
- version: 29.4.0
- resolution: "@netlify/build@npm:29.4.0"
+"@netlify/build@npm:^29.4.0":
+ version: 29.4.1
+ resolution: "@netlify/build@npm:29.4.1"
dependencies:
"@bugsnag/js": ^7.0.0
"@netlify/cache-utils": ^5.1.0
@@ -1707,7 +1962,7 @@ __metadata:
"@netlify/edge-bundler": 8.0.0
"@netlify/functions-utils": ^5.1.1
"@netlify/git-utils": ^5.1.0
- "@netlify/plugins-list": ^6.59.0
+ "@netlify/plugins-list": ^6.61.0
"@netlify/run-utils": ^5.1.0
"@netlify/zip-it-and-ship-it": ^8.2.0
"@sindresorhus/slugify": ^2.0.0
@@ -1756,7 +2011,7 @@ __metadata:
yargs: ^17.6.0
bin:
netlify-build: bin.js
- checksum: 76daa48efcf6417dbae7d620431abb33a85b61b26595b7b14092cf7244586a6609c5c5fa9dd0659614017145eca6aa4f6d078eba841d5c079f33329f754bec65
+ checksum: 1756c96a5ef99a377cce8f63303f12210d77570c1914204718d2762d1f0ebdb42f9e70d77219ab0b6813cf525c8e48d0f418bd5efb9741d2d0d4d657978bd1b1
languageName: node
linkType: hard
@@ -1777,7 +2032,7 @@ __metadata:
languageName: node
linkType: hard
-"@netlify/config@npm:^20.2.0, @netlify/config@npm:^20.3.0":
+"@netlify/config@npm:^20.3.0":
version: 20.3.0
resolution: "@netlify/config@npm:20.3.0"
dependencies:
@@ -1811,7 +2066,7 @@ __metadata:
languageName: node
linkType: hard
-"@netlify/edge-bundler@npm:8.0.0, @netlify/edge-bundler@npm:^8.0.0":
+"@netlify/edge-bundler@npm:8.0.0":
version: 8.0.0
resolution: "@netlify/edge-bundler@npm:8.0.0"
dependencies:
@@ -1839,6 +2094,34 @@ __metadata:
languageName: node
linkType: hard
+"@netlify/edge-bundler@npm:^8.0.0":
+ version: 8.1.1
+ resolution: "@netlify/edge-bundler@npm:8.1.1"
+ dependencies:
+ "@import-maps/resolve": ^1.0.1
+ ajv: ^8.11.2
+ ajv-errors: ^3.0.0
+ better-ajv-errors: ^1.2.0
+ common-path-prefix: ^3.0.0
+ del: ^7.0.0
+ env-paths: ^3.0.0
+ execa: ^6.0.0
+ find-up: ^6.3.0
+ get-port: ^6.1.2
+ glob-to-regexp: ^0.4.1
+ jsonc-parser: ^3.2.0
+ node-fetch: ^3.1.1
+ node-stream-zip: ^1.15.0
+ p-retry: ^5.1.1
+ p-wait-for: ^4.1.0
+ path-key: ^4.0.0
+ semver: ^7.3.5
+ tmp-promise: ^3.0.3
+ uuid: ^9.0.0
+ checksum: 0c7b07bcfa137a651f9ce58cf4cdd7c3ddaaf559844f0eb297afbc1aac7c27879e7f48ae4dc61259ff3e913e1fe40c4bc0be36c614019f9a95399d6993839a2d
+ languageName: node
+ linkType: hard
+
"@netlify/esbuild-android-64@npm:0.14.39":
version: 0.14.39
resolution: "@netlify/esbuild-android-64@npm:0.14.39"
@@ -2254,7 +2537,7 @@ __metadata:
languageName: node
linkType: hard
-"@netlify/plugins-list@npm:^6.59.0":
+"@netlify/plugins-list@npm:^6.61.0":
version: 6.61.0
resolution: "@netlify/plugins-list@npm:6.61.0"
checksum: c1a62683f2c0d413e5787241bd2d3b0e6e1d05d4651d8bc9ed06647fdd50f5ab7f2aa2d9041559c5be3029a7064fd6ecf6b9ae0f46f844624bb81f8e7059ddd1
@@ -2515,6 +2798,13 @@ __metadata:
languageName: node
linkType: hard
+"@polka/url@npm:^0.5.0":
+ version: 0.5.0
+ resolution: "@polka/url@npm:0.5.0"
+ checksum: 3f007adf9c271b28992ebff1df6424e75e7d579493c66969356a9b5dada18480583744dbc28a7467371fa10eb794a5e1dc1f3fcd359c0b5685f4f9c6592cd312
+ languageName: node
+ linkType: hard
+
"@rollup/plugin-commonjs@npm:^23.0.2":
version: 23.0.7
resolution: "@rollup/plugin-commonjs@npm:23.0.7"
@@ -2963,7 +3253,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/http-cache-semantics@npm:*":
+"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.1":
version: 4.0.1
resolution: "@types/http-cache-semantics@npm:4.0.1"
checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9
@@ -3081,7 +3371,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/node-fetch@npm:^2.1.6":
+"@types/node-fetch@npm:^2.1.6, @types/node-fetch@npm:latest":
version: 2.6.2
resolution: "@types/node-fetch@npm:2.6.2"
dependencies:
@@ -3091,7 +3381,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:*, @types/node@npm:latest":
+"@types/node@npm:*, @types/node@npm:^18.11.18, @types/node@npm:latest":
version: 18.11.18
resolution: "@types/node@npm:18.11.18"
checksum: 03f17f9480f8d775c8a72da5ea7e9383db5f6d85aa5fefde90dd953a1449bd5e4ffde376f139da4f3744b4c83942166d2a7603969a6f8ea826edfb16e6e3b49d
@@ -3247,6 +3537,29 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:5.48.0":
+ version: 5.48.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.48.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": 5.48.0
+ "@typescript-eslint/type-utils": 5.48.0
+ "@typescript-eslint/utils": 5.48.0
+ debug: ^4.3.4
+ ignore: ^5.2.0
+ natural-compare-lite: ^1.4.0
+ regexpp: ^3.2.0
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependencies:
+ "@typescript-eslint/parser": ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: cb9cd62fd56670414795e30d30c9fa11ec7ad3a8b0abda48dd17625053a1c26ba1767184b096149bdd0ccb457bec6392306f22211b75f802f4b27366398d16eb
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/parser@npm:5.45.0":
version: 5.45.0
resolution: "@typescript-eslint/parser@npm:5.45.0"
@@ -3264,6 +3577,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/parser@npm:5.48.0":
+ version: 5.48.0
+ resolution: "@typescript-eslint/parser@npm:5.48.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": 5.48.0
+ "@typescript-eslint/types": 5.48.0
+ "@typescript-eslint/typescript-estree": 5.48.0
+ debug: ^4.3.4
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 41d5ce5c8742d286fb083523295a4f186e57bbe4e3da63b6b2de1edbafbcbf6d5225ed3405da2c56e2b0fe1d52bb72babc37508d2ee9b86f6fadad3c4a7950d0
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/scope-manager@npm:5.45.0":
version: 5.45.0
resolution: "@typescript-eslint/scope-manager@npm:5.45.0"
@@ -3274,6 +3604,16 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/scope-manager@npm:5.48.0":
+ version: 5.48.0
+ resolution: "@typescript-eslint/scope-manager@npm:5.48.0"
+ dependencies:
+ "@typescript-eslint/types": 5.48.0
+ "@typescript-eslint/visitor-keys": 5.48.0
+ checksum: 96c0ce33d613490690ae6f34e4152f05dbddf3196a6dec89afba4a63cd2d828ae23a98262920b521fe461e7655d38f3a01e9e43588c12392a27bf8cb4f8ae201
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/type-utils@npm:5.45.0":
version: 5.45.0
resolution: "@typescript-eslint/type-utils@npm:5.45.0"
@@ -3291,6 +3631,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/type-utils@npm:5.48.0":
+ version: 5.48.0
+ resolution: "@typescript-eslint/type-utils@npm:5.48.0"
+ dependencies:
+ "@typescript-eslint/typescript-estree": 5.48.0
+ "@typescript-eslint/utils": 5.48.0
+ debug: ^4.3.4
+ tsutils: ^3.21.0
+ peerDependencies:
+ eslint: "*"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 0d57e3bbcaa46e29b588b86b2271341b264f063e71ff5b6d4d35f50f2fe11bd6cdc3c4c95d78493fd17673ecdbd712992b84da1600947ed3bf6ae09de7b99464
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/types@npm:5.45.0":
version: 5.45.0
resolution: "@typescript-eslint/types@npm:5.45.0"
@@ -3323,7 +3680,7 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:^5.13.0":
+"@typescript-eslint/typescript-estree@npm:5.48.0, @typescript-eslint/typescript-estree@npm:^5.13.0":
version: 5.48.0
resolution: "@typescript-eslint/typescript-estree@npm:5.48.0"
dependencies:
@@ -3359,6 +3716,24 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/utils@npm:5.48.0":
+ version: 5.48.0
+ resolution: "@typescript-eslint/utils@npm:5.48.0"
+ dependencies:
+ "@types/json-schema": ^7.0.9
+ "@types/semver": ^7.3.12
+ "@typescript-eslint/scope-manager": 5.48.0
+ "@typescript-eslint/types": 5.48.0
+ "@typescript-eslint/typescript-estree": 5.48.0
+ eslint-scope: ^5.1.1
+ eslint-utils: ^3.0.0
+ semver: ^7.3.7
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 53f512ae61f72c2b29f2daf8adbc1f37c400cc71156557f69f0745b62c1265d99917a168245e2ee3d88ae458144818d1bf41ced4a764d7d9534b466b29d362fd
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/visitor-keys@npm:5.45.0":
version: 5.45.0
resolution: "@typescript-eslint/visitor-keys@npm:5.45.0"
@@ -3426,6 +3801,22 @@ __metadata:
languageName: node
linkType: hard
+"abort-controller@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "abort-controller@npm:3.0.0"
+ dependencies:
+ event-target-shim: ^5.0.0
+ checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75
+ languageName: node
+ linkType: hard
+
+"abstract-logging@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "abstract-logging@npm:2.0.1"
+ checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e
+ languageName: node
+ linkType: hard
+
"accepts@npm:~1.3.5, accepts@npm:~1.3.8":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
@@ -3554,6 +3945,20 @@ __metadata:
languageName: node
linkType: hard
+"ajv-formats@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "ajv-formats@npm:2.1.1"
+ dependencies:
+ ajv: ^8.0.0
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+ checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7
+ languageName: node
+ linkType: hard
+
"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"
@@ -3566,7 +3971,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^8.0.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2":
+"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2":
version: 8.12.0
resolution: "ajv@npm:8.12.0"
dependencies:
@@ -3628,13 +4033,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-regex@npm:^0.2.0, ansi-regex@npm:^0.2.1":
- version: 0.2.1
- resolution: "ansi-regex@npm:0.2.1"
- checksum: ce95ac031fc64b9bb5317396d01723e0e07e9fbf1aa481df55c645657a1dbcaf90b6a8e69da6e64ad4543f0bd75691e426b2258a34f3c12999a277c09efd9430
- languageName: node
- linkType: hard
-
"ansi-regex@npm:^2.0.0":
version: 2.1.1
resolution: "ansi-regex@npm:2.1.1"
@@ -3670,13 +4068,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-styles@npm:^1.1.0":
- version: 1.1.0
- resolution: "ansi-styles@npm:1.1.0"
- checksum: 4f01de400ef36d4328fc2421d378e5e3f80685e7b79e049fb14d5e75a37c546a7e625b4478e39b7ca6f41421d374e2b0eea52732ed3ed9bde93dc671e72eb79d
- languageName: node
- linkType: hard
-
"ansi-styles@npm:^2.2.1":
version: 2.2.1
resolution: "ansi-styles@npm:2.2.1"
@@ -3800,6 +4191,13 @@ __metadata:
languageName: node
linkType: hard
+"archy@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "archy@npm:1.0.0"
+ checksum: 504ae7af655130bab9f471343cfdb054feaec7d8e300e13348bc9fe9e660f83d422e473069584f73233c701ae37d1c8452ff2522f2a20c38849e0f406f1732ac
+ languageName: node
+ linkType: hard
+
"are-we-there-yet@npm:^2.0.0":
version: 2.0.0
resolution: "are-we-there-yet@npm:2.0.0"
@@ -4056,6 +4454,13 @@ __metadata:
languageName: node
linkType: hard
+"atomic-sleep@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "atomic-sleep@npm:1.0.0"
+ checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36
+ languageName: node
+ linkType: hard
+
"autoprefixer@npm:10.4.13":
version: 10.4.13
resolution: "autoprefixer@npm:10.4.13"
@@ -4081,6 +4486,17 @@ __metadata:
languageName: node
linkType: hard
+"avvio@npm:^8.2.0":
+ version: 8.2.0
+ resolution: "avvio@npm:8.2.0"
+ dependencies:
+ archy: ^1.0.0
+ debug: ^4.0.0
+ fastq: ^1.6.1
+ checksum: bbd06eeb1f9ef428dbc32a32e06c350a7b320f60348698fd234145a4100f3688ce5d0999b966eb6ca70f9511d0c35fed5ef4651d276715e7e3e94a2d465cb56d
+ languageName: node
+ linkType: hard
+
"aws-sign2@npm:~0.7.0":
version: 0.7.0
resolution: "aws-sign2@npm:0.7.0"
@@ -4089,9 +4505,9 @@ __metadata:
linkType: hard
"aws4@npm:^1.8.0":
- version: 1.11.0
- resolution: "aws4@npm:1.11.0"
- checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f
+ version: 1.12.0
+ resolution: "aws4@npm:1.12.0"
+ checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc
languageName: node
linkType: hard
@@ -4456,11 +4872,11 @@ __metadata:
linkType: hard
"bson@npm:^4.7.0":
- version: 4.7.0
- resolution: "bson@npm:4.7.0"
+ version: 4.7.1
+ resolution: "bson@npm:4.7.1"
dependencies:
buffer: ^5.6.0
- checksum: 83e7b64afdad5a505073a7e6206e7b345f59e7888fbcb1948fba72b6101a1baf58b7499314f8e24b650567665f7973eda048aabbb1ddcfbadfba7d6c6b0f5e83
+ checksum: 546aaf322e42514e0c48c875ad6ffafc66458c83fea0fb89e9e3002ba040b7d95ab40e63eca7f997d1f9d4e92cd02af259ba761799bf04aafc3a857e12d147c4
languageName: node
linkType: hard
@@ -4526,6 +4942,16 @@ __metadata:
languageName: node
linkType: hard
+"buffer@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "buffer@npm:6.0.3"
+ dependencies:
+ base64-js: ^1.3.1
+ ieee754: ^1.2.1
+ checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9
+ languageName: node
+ linkType: hard
+
"builtin-modules@npm:^3.3.0":
version: 3.3.0
resolution: "builtin-modules@npm:3.3.0"
@@ -4655,16 +5081,17 @@ __metadata:
linkType: hard
"cacheable-request@npm:^10.2.1":
- version: 10.2.4
- resolution: "cacheable-request@npm:10.2.4"
+ version: 10.2.5
+ resolution: "cacheable-request@npm:10.2.5"
dependencies:
+ "@types/http-cache-semantics": ^4.0.1
get-stream: ^6.0.1
http-cache-semantics: ^4.1.0
keyv: ^4.5.2
mimic-response: ^4.0.0
normalize-url: ^8.0.0
responselike: ^3.0.0
- checksum: 084382cfefed9be41de9fd206810ed9e5a48beffa2618a7cb6429daf7ceccd3a849ba9296b8dbb3cff740085272e70fc2de964eaede214e1ee03243b5221a66d
+ checksum: 9bf7443792072a50b5c5e17bd8e080e11d91b72a45ec7f287ffe47c96e9d64a4e60b7d7835114ef75b9667db45a85be1b16fa692cf31cf9a9c9fabae0ab3f098
languageName: node
linkType: hard
@@ -4840,19 +5267,6 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^0.5.1":
- version: 0.5.1
- resolution: "chalk@npm:0.5.1"
- dependencies:
- ansi-styles: ^1.1.0
- escape-string-regexp: ^1.0.0
- has-ansi: ^0.1.0
- strip-ansi: ^0.3.0
- supports-color: ^0.2.0
- checksum: 33eb9cf9220b13f1cae0a52e612d60f61fb1c894782b4efa847e40485a66e191d4199793b8087dc15b08e75607254a5980b45046f52350766c40d187505aacd9
- languageName: node
- linkType: hard
-
"chalk@npm:^1.0.0, chalk@npm:^1.1.3":
version: 1.1.3
resolution: "chalk@npm:1.1.3"
@@ -5330,7 +5744,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.3.0, commander@npm:^2.8.1":
+"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.8.1":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
@@ -5352,9 +5766,9 @@ __metadata:
linkType: hard
"commander@npm:^9.1.0, commander@npm:^9.2.0, commander@npm:^9.3.0, commander@npm:^9.4.0":
- version: 9.4.1
- resolution: "commander@npm:9.4.1"
- checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13
+ version: 9.5.0
+ resolution: "commander@npm:9.5.0"
+ checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade
languageName: node
linkType: hard
@@ -5518,7 +5932,7 @@ __metadata:
languageName: node
linkType: hard
-"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2":
+"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2, content-disposition@npm:^0.5.3":
version: 0.5.4
resolution: "content-disposition@npm:0.5.4"
dependencies:
@@ -6402,15 +6816,17 @@ __metadata:
linkType: hard
"deep-equal@npm:^2.0.5":
- version: 2.1.0
- resolution: "deep-equal@npm:2.1.0"
+ version: 2.2.0
+ resolution: "deep-equal@npm:2.2.0"
dependencies:
call-bind: ^1.0.2
es-get-iterator: ^1.1.2
get-intrinsic: ^1.1.3
is-arguments: ^1.1.1
+ is-array-buffer: ^3.0.1
is-date-object: ^1.0.5
is-regex: ^1.1.4
+ is-shared-array-buffer: ^1.0.2
isarray: ^2.0.5
object-is: ^1.1.5
object-keys: ^1.1.1
@@ -6419,8 +6835,8 @@ __metadata:
side-channel: ^1.0.4
which-boxed-primitive: ^1.0.2
which-collection: ^1.0.1
- which-typed-array: ^1.1.8
- checksum: a3efc772f14372d2a88bb1e414ab2218cf23cc77673521bbccbb2fc128dd8b6cccfad05eb35b9a8a4669bd7f3ecebaa137beebdf549b7be56c617bd5488ca987
+ which-typed-array: ^1.1.9
+ checksum: 46a34509d2766d6c6dc5aec4756089cf0cc137e46787e91f08f1ee0bb570d874f19f0493146907df0cf18aed4a7b4b50f6f62c899240a76c323f057528b122e3
languageName: node
linkType: hard
@@ -7169,12 +7585,13 @@ __metadata:
linkType: hard
"es-set-tostringtag@npm:^2.0.0":
- version: 2.0.0
- resolution: "es-set-tostringtag@npm:2.0.0"
+ version: 2.0.1
+ resolution: "es-set-tostringtag@npm:2.0.1"
dependencies:
get-intrinsic: ^1.1.3
+ has: ^1.0.3
has-tostringtag: ^1.0.0
- checksum: 3dc021e4229eda90da80566adde6e9230c973d275da431c89e72b22cfefc1ccd5c344b08da85c6efe9ae8ce5eb16f63495c5024f6c75056811fbc56dc6c06318
+ checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884
languageName: node
linkType: hard
@@ -7430,6 +7847,83 @@ __metadata:
languageName: node
linkType: hard
+"esbuild@npm:^0.16.3":
+ version: 0.16.16
+ resolution: "esbuild@npm:0.16.16"
+ dependencies:
+ "@esbuild/android-arm": 0.16.16
+ "@esbuild/android-arm64": 0.16.16
+ "@esbuild/android-x64": 0.16.16
+ "@esbuild/darwin-arm64": 0.16.16
+ "@esbuild/darwin-x64": 0.16.16
+ "@esbuild/freebsd-arm64": 0.16.16
+ "@esbuild/freebsd-x64": 0.16.16
+ "@esbuild/linux-arm": 0.16.16
+ "@esbuild/linux-arm64": 0.16.16
+ "@esbuild/linux-ia32": 0.16.16
+ "@esbuild/linux-loong64": 0.16.16
+ "@esbuild/linux-mips64el": 0.16.16
+ "@esbuild/linux-ppc64": 0.16.16
+ "@esbuild/linux-riscv64": 0.16.16
+ "@esbuild/linux-s390x": 0.16.16
+ "@esbuild/linux-x64": 0.16.16
+ "@esbuild/netbsd-x64": 0.16.16
+ "@esbuild/openbsd-x64": 0.16.16
+ "@esbuild/sunos-x64": 0.16.16
+ "@esbuild/win32-arm64": 0.16.16
+ "@esbuild/win32-ia32": 0.16.16
+ "@esbuild/win32-x64": 0.16.16
+ dependenciesMeta:
+ "@esbuild/android-arm":
+ optional: true
+ "@esbuild/android-arm64":
+ optional: true
+ "@esbuild/android-x64":
+ optional: true
+ "@esbuild/darwin-arm64":
+ optional: true
+ "@esbuild/darwin-x64":
+ optional: true
+ "@esbuild/freebsd-arm64":
+ optional: true
+ "@esbuild/freebsd-x64":
+ optional: true
+ "@esbuild/linux-arm":
+ optional: true
+ "@esbuild/linux-arm64":
+ optional: true
+ "@esbuild/linux-ia32":
+ optional: true
+ "@esbuild/linux-loong64":
+ optional: true
+ "@esbuild/linux-mips64el":
+ optional: true
+ "@esbuild/linux-ppc64":
+ optional: true
+ "@esbuild/linux-riscv64":
+ optional: true
+ "@esbuild/linux-s390x":
+ optional: true
+ "@esbuild/linux-x64":
+ optional: true
+ "@esbuild/netbsd-x64":
+ optional: true
+ "@esbuild/openbsd-x64":
+ optional: true
+ "@esbuild/sunos-x64":
+ optional: true
+ "@esbuild/win32-arm64":
+ optional: true
+ "@esbuild/win32-ia32":
+ optional: true
+ "@esbuild/win32-x64":
+ optional: true
+ bin:
+ esbuild: bin/esbuild
+ checksum: d3163ec01e017776df6b68e1825caa2323918f0d03eb92250bdcdff80410a2c0eb5b3807955db84d83b1b91cf24af9815a1d19efc2343c490be3e5d7b27a834f
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1":
version: 3.1.1
resolution: "escalade@npm:3.1.1"
@@ -7465,7 +7959,7 @@ __metadata:
languageName: node
linkType: hard
-"escape-string-regexp@npm:^1.0.0, escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5":
+"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
@@ -7537,6 +8031,15 @@ __metadata:
languageName: node
linkType: hard
+"eslint-plugin-qwik@npm:0.16.2":
+ version: 0.16.2
+ resolution: "eslint-plugin-qwik@npm:0.16.2"
+ peerDependencies:
+ eslint: ">= 8"
+ checksum: 74e278ecba4796a6ac687d0a32c2777ec09be57728875f8aa50cc421acec81bcdcb09336de5017f0726b346999651685e09223d491429d1aded498412736df2b
+ languageName: node
+ linkType: hard
+
"eslint-scope@npm:^5.1.1":
version: 5.1.1
resolution: "eslint-scope@npm:5.1.1"
@@ -7631,7 +8134,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:^8.26.0":
+"eslint@npm:8.31.0, eslint@npm:^8.26.0":
version: 8.31.0
resolution: "eslint@npm:8.31.0"
dependencies:
@@ -7759,13 +8262,13 @@ __metadata:
linkType: hard
"estree-util-build-jsx@npm:^2.0.0":
- version: 2.2.0
- resolution: "estree-util-build-jsx@npm:2.2.0"
+ version: 2.2.2
+ resolution: "estree-util-build-jsx@npm:2.2.2"
dependencies:
"@types/estree-jsx": ^1.0.0
estree-util-is-identifier-name: ^2.0.0
estree-walker: ^3.0.0
- checksum: 639b76f5395df5234e5424e092c583d656418a07075156947b72e69183c01feeb94946e79002117cd7dff374a25115832ab4af4ad449f1f6cac3594c95006aa5
+ checksum: d008ac36a45d797eadca696f41b4c1ac0587ec0e0b52560cfb0e76d14ef15fc18e526f9023b6e5457dafa9cf3f010c9bb1dfc9c727ebd7cf0ba2ebbaa43919ac
languageName: node
linkType: hard
@@ -7832,6 +8335,13 @@ __metadata:
languageName: node
linkType: hard
+"event-target-shim@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "event-target-shim@npm:5.0.1"
+ checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166
+ languageName: node
+ linkType: hard
+
"eventemitter3@npm:^4.0.0":
version: 4.0.7
resolution: "eventemitter3@npm:4.0.7"
@@ -7839,6 +8349,13 @@ __metadata:
languageName: node
linkType: hard
+"events@npm:^3.3.0":
+ version: 3.3.0
+ resolution: "events@npm:3.3.0"
+ checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780
+ languageName: node
+ linkType: hard
+
"execa@npm:^4.0.0":
version: 4.1.0
resolution: "execa@npm:4.1.0"
@@ -8070,6 +8587,13 @@ __metadata:
languageName: node
linkType: hard
+"fast-decode-uri-component@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "fast-decode-uri-component@npm:1.0.1"
+ checksum: 427a48fe0907e76f0e9a2c228e253b4d8a8ab21d130ee9e4bb8339c5ba4086235cf9576831f7b20955a752eae4b525a177ff9d5825dd8d416e7726939194fbee
+ 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"
@@ -8125,6 +8649,20 @@ __metadata:
languageName: node
linkType: hard
+"fast-json-stringify@npm:^5.0.0":
+ version: 5.5.0
+ resolution: "fast-json-stringify@npm:5.5.0"
+ dependencies:
+ "@fastify/deepmerge": ^1.0.0
+ ajv: ^8.10.0
+ ajv-formats: ^2.1.1
+ fast-deep-equal: ^3.1.3
+ fast-uri: ^2.1.0
+ rfdc: ^1.2.0
+ checksum: 800401324af712f562b3912c1a31c1a055e9af12a10227fbb507ad4e0d17fc01945c71f7e269b080bcf8051364d7422122c7c18d811f61ac79a21583067049e4
+ languageName: node
+ linkType: hard
+
"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6":
version: 2.0.6
resolution: "fast-levenshtein@npm:2.0.6"
@@ -8132,6 +8670,22 @@ __metadata:
languageName: node
linkType: hard
+"fast-querystring@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "fast-querystring@npm:1.1.0"
+ dependencies:
+ fast-decode-uri-component: ^1.0.1
+ checksum: 912e55326733004ac15ee6c759a319ed01117c23953d93ff28f64b230e76ba22cdf14722fb01c1045d80c6d565e39a6ae18b89f05faa576862036e0a4ccff473
+ languageName: node
+ linkType: hard
+
+"fast-redact@npm:^3.1.1":
+ version: 3.1.2
+ resolution: "fast-redact@npm:3.1.2"
+ checksum: a30eb6b6830333ab213e0def55f46453ca777544dbd3a883016cb590a0eeb95e6fdf546553c1a13d509896bfba889b789991160a6d0996ceb19fce0a02e8b753
+ languageName: node
+ linkType: hard
+
"fast-safe-stringify@npm:^2.0.7, fast-safe-stringify@npm:^2.1.1":
version: 2.1.1
resolution: "fast-safe-stringify@npm:2.1.1"
@@ -8139,6 +8693,13 @@ __metadata:
languageName: node
linkType: hard
+"fast-uri@npm:^2.0.0, fast-uri@npm:^2.1.0":
+ version: 2.2.0
+ resolution: "fast-uri@npm:2.2.0"
+ checksum: edac64d50628f21d562cdc19ea86f5af00902dbb09d2f96fff5974e5317157825e9aa163af9defd11a0818aac6ea2e9958597bed98dd041200a08a976809d08b
+ languageName: node
+ linkType: hard
+
"fast-xml-parser@npm:4.0.11":
version: 4.0.11
resolution: "fast-xml-parser@npm:4.0.11"
@@ -8150,7 +8711,37 @@ __metadata:
languageName: node
linkType: hard
-"fastq@npm:^1.6.0":
+"fastify-plugin@npm:^4.0.0":
+ version: 4.4.0
+ resolution: "fastify-plugin@npm:4.4.0"
+ checksum: f61d6620a24e8c3c9e67305fffe5570d4c0580477fc0f11fd9397b3e11e2b28ea0873e80d2774fee3ad9d70a81a07a83cb0da61e92afc70f6c50bbb3fb91335d
+ languageName: node
+ linkType: hard
+
+"fastify@npm:^4.10.2":
+ version: 4.11.0
+ resolution: "fastify@npm:4.11.0"
+ dependencies:
+ "@fastify/ajv-compiler": ^3.3.1
+ "@fastify/error": ^3.0.0
+ "@fastify/fast-json-stringify-compiler": ^4.1.0
+ abstract-logging: ^2.0.1
+ avvio: ^8.2.0
+ content-type: ^1.0.4
+ find-my-way: ^7.3.0
+ light-my-request: ^5.6.1
+ pino: ^8.5.0
+ process-warning: ^2.0.0
+ proxy-addr: ^2.0.7
+ rfdc: ^1.3.0
+ secure-json-parse: ^2.5.0
+ semver: ^7.3.7
+ tiny-lru: ^10.0.0
+ checksum: 814803b1015ae47cce4d7877a16788abee3ba6bba23e7e1b08a6cc62b43828aa6c38624de835c5b422da902fa93b316d1222d191b8373bebd8acbd68c8843584
+ languageName: node
+ linkType: hard
+
+"fastq@npm:^1.6.0, fastq@npm:^1.6.1":
version: 1.15.0
resolution: "fastq@npm:1.15.0"
dependencies:
@@ -8246,13 +8837,6 @@ __metadata:
languageName: node
linkType: hard
-"file-size@npm:0.0.5":
- version: 0.0.5
- resolution: "file-size@npm:0.0.5"
- checksum: 404ab62bac816c4b903fdeee0ab677722d14f99641d7b7188938bd7d595fe4634181cb6681ad8de6dd4f9e1087f63730d5447e4e7589497095b28078cbc91700
- languageName: node
- linkType: hard
-
"file-type@npm:^11.1.0":
version: 11.1.0
resolution: "file-type@npm:11.1.0"
@@ -8370,6 +8954,17 @@ __metadata:
languageName: node
linkType: hard
+"find-my-way@npm:^7.3.0":
+ version: 7.4.0
+ resolution: "find-my-way@npm:7.4.0"
+ dependencies:
+ fast-deep-equal: ^3.1.3
+ fast-querystring: ^1.0.0
+ safe-regex2: ^2.0.0
+ checksum: 8f01b63c28d2a95f5bea674ca4c2ea6f444af5a5d87b54e124fe8a656d26617f4be1443f13e5e7cc155ddf40c2c9604dcd2fe9cfd5d06343aa9e32e06af42a16
+ languageName: node
+ linkType: hard
+
"find-up@npm:^2.0.0":
version: 2.1.0
resolution: "find-up@npm:2.1.0"
@@ -9460,17 +10055,6 @@ __metadata:
languageName: node
linkType: hard
-"has-ansi@npm:^0.1.0":
- version: 0.1.0
- resolution: "has-ansi@npm:0.1.0"
- dependencies:
- ansi-regex: ^0.2.0
- bin:
- has-ansi: cli.js
- checksum: 8eb68a066bb42460f7065432c14af40050c458eed3ac8329421990dbf5e2dd804a98b2e763013fdbb7f7049105f6c6806e7e90d7ac6caa337c3275574ce42d06
- languageName: node
- linkType: hard
-
"has-ansi@npm:^2.0.0":
version: 2.0.0
resolution: "has-ansi@npm:2.0.0"
@@ -9647,28 +10231,28 @@ __metadata:
linkType: hard
"hast-util-has-property@npm:^2.0.0":
- version: 2.0.0
- resolution: "hast-util-has-property@npm:2.0.0"
- checksum: 6f35c11445a02927a731c34cadce81d1b01db814e336d61624c9a9f78440e555bf1819ea340964f0c283f47aa9c1f50fcd94c1b13f2c73e53bd820efca55f79a
+ version: 2.0.1
+ resolution: "hast-util-has-property@npm:2.0.1"
+ checksum: cc909b7e2964fbfa4c53e33bfbc6f3ed883d1936f3e41a7fa020d3cb8cc5d3c903670e62bec15b55dea5a272ed86724815e8b136ba5475e138489384b1b71fa8
languageName: node
linkType: hard
"hast-util-heading-rank@npm:^2.0.0":
- version: 2.1.0
- resolution: "hast-util-heading-rank@npm:2.1.0"
+ version: 2.1.1
+ resolution: "hast-util-heading-rank@npm:2.1.1"
dependencies:
"@types/hast": ^2.0.0
- checksum: 6b0f66bf411cde4bc33f2bb80081cc9be2b7f86aa85a996a4766970ae34510824a93ea774c0ac1f5695b906f27358829939cc38bd7fc6b2965b78c226b82cb3a
+ checksum: a49233e9ac78f66e948dd29d6c75f41c72899854f276290423c5f59eb827dee3c42cf181ce9103f3a8295359b613ca0b9c51475dd38ecdd6c26ed291344061f1
languageName: node
linkType: hard
"hast-util-is-element@npm:^2.0.0":
- version: 2.1.2
- resolution: "hast-util-is-element@npm:2.1.2"
+ version: 2.1.3
+ resolution: "hast-util-is-element@npm:2.1.3"
dependencies:
"@types/hast": ^2.0.0
"@types/unist": ^2.0.0
- checksum: c5fe9f7cde3775d4cbe19a9a55631a80b7a4ea0131fc2e3d097ebe228a35f09b9219f64b788b7a9cf819e6dcb6d1fc7830fd2f10ad536649e436e8c83da41e00
+ checksum: 9d988f6839a50566a895a3dd19222e6ab1591243f6a3c36bba835b7e9339a2845f1ff1c583425afd602de1a57a76c5bae8a6dc0ab1d6e5d1e252b422cdeadbb7
languageName: node
linkType: hard
@@ -9696,9 +10280,9 @@ __metadata:
linkType: hard
"hast-util-whitespace@npm:^2.0.0":
- version: 2.0.0
- resolution: "hast-util-whitespace@npm:2.0.0"
- checksum: abeb5386075bfb0facfce89eed0e13d2cb27a0910cec8fd234b48821a1538387a73fa7f458842e8c404148dc69434acbc10488d75b02817e460652c2c894c024
+ version: 2.0.1
+ resolution: "hast-util-whitespace@npm:2.0.1"
+ checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868
languageName: node
linkType: hard
@@ -9966,7 +10550,7 @@ __metadata:
languageName: node
linkType: hard
-"ieee754@npm:^1.1.13":
+"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e
@@ -9994,12 +10578,12 @@ __metadata:
languageName: node
linkType: hard
-"imagetools-core@npm:^3.2.3":
- version: 3.2.3
- resolution: "imagetools-core@npm:3.2.3"
+"imagetools-core@npm:^3.2.3, imagetools-core@npm:^3.3.0":
+ version: 3.3.0
+ resolution: "imagetools-core@npm:3.3.0"
dependencies:
sharp: ^0.31.0
- checksum: 9593153ab110b20fc5c947cf81a3ee3be45a893ee26e41e8d2b1931e0efaff9287f9383298baddfa16258e745dfd69a5021730663bc4872d150902b659a69a9f
+ checksum: b9c96e4fec86edfe36c1142cc8ea5058048c05a476933e9cf90ed35e292d1f7873e8d5c86ccf7dc58d4e6bb918e6774f5344aa038725d0640fb37cfc37a11b44
languageName: node
linkType: hard
@@ -10223,13 +10807,14 @@ __metadata:
languageName: node
linkType: hard
-"is-array-buffer@npm:^3.0.0":
- version: 3.0.0
- resolution: "is-array-buffer@npm:3.0.0"
+"is-array-buffer@npm:^3.0.0, is-array-buffer@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "is-array-buffer@npm:3.0.1"
dependencies:
call-bind: ^1.0.2
get-intrinsic: ^1.1.3
- checksum: 46ed004b0e3d8a60a7989a4ddbea8f8dfa2f5c7679a9d678c1439e710709b1f51b7abf56025106c87452b8605922c088f487c7a0847be27d2f6e533221ea44e3
+ is-typed-array: ^1.1.10
+ checksum: f26ab87448e698285daf707e52a533920449f7abf63714140ffab9d5571aa5a71ac2fa2677e8b793ad0d5d3e40078d4d2c8a0ab39c957e3cfc6513bb6c9dfdc9
languageName: node
linkType: hard
@@ -10894,13 +11479,6 @@ __metadata:
languageName: node
linkType: hard
-"is-wsl@npm:^1.1.0":
- version: 1.1.0
- resolution: "is-wsl@npm:1.1.0"
- checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe
- languageName: node
- linkType: hard
-
"is-wsl@npm:^2.2.0":
version: 2.2.0
resolution: "is-wsl@npm:2.2.0"
@@ -11521,6 +12099,17 @@ __metadata:
languageName: node
linkType: hard
+"light-my-request@npm:^5.6.1":
+ version: 5.8.0
+ resolution: "light-my-request@npm:5.8.0"
+ dependencies:
+ cookie: ^0.5.0
+ process-warning: ^2.0.0
+ set-cookie-parser: ^2.4.1
+ checksum: 8744ba4a43f19e82b6e51a67d1b0b2b789b96ad54e120bfc1a985cd0c05a2ba136510f2abf23c82e913ab791bcb115e820cdbdeb3a02e1b4d05c670d95d5a8c8
+ languageName: node
+ linkType: hard
+
"lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5, lilconfig@npm:^2.0.6":
version: 2.0.6
resolution: "lilconfig@npm:2.0.6"
@@ -12195,6 +12784,15 @@ __metadata:
languageName: node
linkType: hard
+"matchit@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "matchit@npm:1.1.0"
+ dependencies:
+ "@arr/every": ^1.0.0
+ checksum: 14617343d9f77a5f2a2e9e5213b1d6c1c7b3efda10758d1502e632edf63bf77f260e3f1aa2afdc97dd7e259fae7845a1b07719cd4680d2f1d23b2aa45a393934
+ languageName: node
+ linkType: hard
+
"maxstache-stream@npm:^1.0.0":
version: 1.0.4
resolution: "maxstache-stream@npm:1.0.4"
@@ -12854,7 +13452,7 @@ __metadata:
languageName: node
linkType: hard
-"mime@npm:1.6.0, mime@npm:^1.2.11, mime@npm:^1.3.4":
+"mime@npm:1.6.0, mime@npm:^1.3.4":
version: 1.6.0
resolution: "mime@npm:1.6.0"
bin:
@@ -13109,12 +13707,12 @@ __metadata:
linkType: hard
"moize@npm:^6.1.0, moize@npm:^6.1.3":
- version: 6.1.4
- resolution: "moize@npm:6.1.4"
+ version: 6.1.5
+ resolution: "moize@npm:6.1.5"
dependencies:
fast-equals: ^3.0.1
micro-memoize: ^4.0.11
- checksum: 2f37abed0f882493c943ea728046f3a67ce7c55106cd6befdbf241519317ecf811674d6e53eb3f55087850cc11bc94ac62eae00477e9acbb00a39503c721d0a9
+ checksum: 62fa868b2b2b29d01b2831aebd009071afd88f2d682f342915952f5ac88ec9919839fddd79fc4c13b5eb1b2f63b444885358dec1f26ed9d9734a7b4577a4b9a4
languageName: node
linkType: hard
@@ -13321,11 +13919,12 @@ __metadata:
linkType: hard
"netlify-cli@npm:^12.0.11":
- version: 12.5.0
- resolution: "netlify-cli@npm:12.5.0"
+ version: 12.6.0
+ resolution: "netlify-cli@npm:12.6.0"
dependencies:
- "@netlify/build": ^29.2.2
- "@netlify/config": ^20.2.0
+ "@fastify/static": ^6.6.0
+ "@netlify/build": ^29.4.0
+ "@netlify/config": ^20.3.0
"@netlify/edge-bundler": ^8.0.0
"@netlify/framework-info": ^9.5.3
"@netlify/local-functions-proxy": ^1.1.1
@@ -13359,6 +13958,7 @@ __metadata:
execa: ^5.0.0
express: ^4.17.1
express-logging: ^1.1.1
+ fastify: ^4.10.2
find-up: ^5.0.0
flush-write-stream: ^2.0.0
folder-walker: ^3.2.0
@@ -13410,7 +14010,6 @@ __metadata:
read-pkg-up: ^7.0.1
semver: ^7.3.5
source-map-support: ^0.5.19
- static-server: ^2.2.1
string-similarity: ^4.0.4
strip-ansi-control-characters: ^2.0.0
tabtab: ^3.0.2
@@ -13429,7 +14028,7 @@ __metadata:
bin:
netlify: bin/run.mjs
ntl: bin/run.mjs
- checksum: 2e6fc497078ad05a7645031f28bdcf31b5f8305ed762707c74d04a43b5671534b9a71dc2dc69fdb3dd9acecda7c14c872ad9941db647b22e52a86714873ff9f5
+ checksum: a555e4ca56f681f2c974f148f0164547c5c233531baa38ee7c9f7b173f7b92c163e75551626c5b736b2d744015dc4f79fcbc9231435e96d97a0d4923ad16af40
languageName: node
linkType: hard
@@ -13528,6 +14127,17 @@ __metadata:
languageName: node
linkType: hard
+"node-fetch@npm:3.3.0, node-fetch@npm:^3.0.0, node-fetch@npm:^3.1.1, node-fetch@npm:^3.3.0":
+ version: 3.3.0
+ resolution: "node-fetch@npm:3.3.0"
+ dependencies:
+ data-uri-to-buffer: ^4.0.0
+ fetch-blob: ^3.1.4
+ formdata-polyfill: ^4.0.10
+ checksum: e9936908d2783d3c48a038e187f8062de294d75ef43ec8ab812d7cbd682be2b67605868758d2e9cad6103706dcfe4a9d21d78f6df984e8edf10e7a5ce2e665f8
+ languageName: node
+ linkType: hard
+
"node-fetch@npm:^2.3.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7":
version: 2.6.7
resolution: "node-fetch@npm:2.6.7"
@@ -13542,25 +14152,14 @@ __metadata:
languageName: node
linkType: hard
-"node-fetch@npm:^3.0.0, node-fetch@npm:^3.1.1, node-fetch@npm:^3.3.0":
- version: 3.3.0
- resolution: "node-fetch@npm:3.3.0"
- dependencies:
- data-uri-to-buffer: ^4.0.0
- fetch-blob: ^3.1.4
- formdata-polyfill: ^4.0.10
- checksum: e9936908d2783d3c48a038e187f8062de294d75ef43ec8ab812d7cbd682be2b67605868758d2e9cad6103706dcfe4a9d21d78f6df984e8edf10e7a5ce2e665f8
- languageName: node
- linkType: hard
-
"node-gyp-build@npm:^4.2.2":
- version: 4.5.0
- resolution: "node-gyp-build@npm:4.5.0"
+ version: 4.6.0
+ resolution: "node-gyp-build@npm:4.6.0"
bin:
node-gyp-build: bin.js
node-gyp-build-optional: optional.js
node-gyp-build-test: build-test.js
- checksum: d888bae0fb88335f69af1b57a2294a931c5042f36e413d8d364c992c9ebfa0b96ffe773179a5a2c8f04b73856e8634e09cce108dbb9804396d3cc8c5455ff2db
+ checksum: 25d78c5ef1f8c24291f4a370c47ba52fcea14f39272041a90a7894cd50d766f7c8cb8fb06c0f42bf6f69b204b49d9be3c8fc344aac09714d5bdb95965499eb15
languageName: node
linkType: hard
@@ -13915,6 +14514,13 @@ __metadata:
languageName: node
linkType: hard
+"on-exit-leak-free@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "on-exit-leak-free@npm:2.1.0"
+ checksum: 7334d98b87b0c89c9b69c747760b21196ff35afdedc4eaf1a0a3a02964463d7f6802481b120e4c8298967c74773ca7b914ab2eb3d9b279010eb7f67ac4960eed
+ languageName: node
+ linkType: hard
+
"on-finished@npm:2.4.1":
version: 2.4.1
resolution: "on-finished@npm:2.4.1"
@@ -13999,15 +14605,6 @@ __metadata:
languageName: node
linkType: hard
-"opn@npm:^5.2.0":
- version: 5.5.0
- resolution: "opn@npm:5.5.0"
- dependencies:
- is-wsl: ^1.1.0
- checksum: 35b677b5a1fd6c8cb1996b0607671ba79f7ce9fa029217d54eafaf6bee13eb7e700691c6a415009140fd02a435fffdfd143875f3b233b60f3f9d631c6f6b81a0
- languageName: node
- linkType: hard
-
"optionator@npm:^0.8.1":
version: 0.8.3
resolution: "optionator@npm:0.8.3"
@@ -14746,6 +15343,44 @@ __metadata:
languageName: node
linkType: hard
+"pino-abstract-transport@npm:v1.0.0":
+ version: 1.0.0
+ resolution: "pino-abstract-transport@npm:1.0.0"
+ dependencies:
+ readable-stream: ^4.0.0
+ split2: ^4.0.0
+ checksum: 05dd0eda52dd99fd204b39fe7b62656744b63e863bc052cdd5105d25f226a236966d0a46e39a1ace4838f6e988c608837ff946d2d0bc92835ca7baa0a3bff8d8
+ languageName: node
+ linkType: hard
+
+"pino-std-serializers@npm:^6.0.0":
+ version: 6.1.0
+ resolution: "pino-std-serializers@npm:6.1.0"
+ checksum: 5e42327c242b67c1a38fe7be1b64c5f655aa7116b159899f09f3ef057302055a23c99c54590e18da4b6b76557487e3b9478a89889cea8cbd3e0cc16c3dc154a5
+ languageName: node
+ linkType: hard
+
+"pino@npm:^8.5.0":
+ version: 8.8.0
+ resolution: "pino@npm:8.8.0"
+ dependencies:
+ atomic-sleep: ^1.0.0
+ fast-redact: ^3.1.1
+ on-exit-leak-free: ^2.1.0
+ pino-abstract-transport: v1.0.0
+ pino-std-serializers: ^6.0.0
+ process-warning: ^2.0.0
+ quick-format-unescaped: ^4.0.3
+ real-require: ^0.2.0
+ safe-stable-stringify: ^2.3.1
+ sonic-boom: ^3.1.0
+ thread-stream: ^2.0.0
+ bin:
+ pino: bin.js
+ checksum: 69256469221b332776333069d637100053eb15dc7baa3f95897d7864bf2e6fd99f15cfd9cfc94b56e7b00da2e6b349c49affcff1abaca9a3d4b7ba63ff86b4f0
+ languageName: node
+ linkType: hard
+
"pirates@npm:^4.0.1":
version: 4.0.5
resolution: "pirates@npm:4.0.5"
@@ -14789,6 +15424,16 @@ __metadata:
languageName: node
linkType: hard
+"polka@npm:^0.5.2":
+ version: 0.5.2
+ resolution: "polka@npm:0.5.2"
+ dependencies:
+ "@polka/url": ^0.5.0
+ trouter: ^2.0.1
+ checksum: 5f4994e78985e10f77fcccced4d3781ba3f896059f66be6099ee189007b73a9bd4d136f73e4156f731bfe3ead66b1d44448b9be6e57e88fa28b53a6096bd3f11
+ languageName: node
+ linkType: hard
+
"posix-character-classes@npm:^0.1.0":
version: 0.1.1
resolution: "posix-character-classes@npm:0.1.1"
@@ -15210,14 +15855,14 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19":
- version: 8.4.20
- resolution: "postcss@npm:8.4.20"
+"postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19, postcss@npm:^8.4.20":
+ version: 8.4.21
+ resolution: "postcss@npm:8.4.21"
dependencies:
nanoid: ^3.3.4
picocolors: ^1.0.0
source-map-js: ^1.0.2
- checksum: 1a5609ea1c1b204f9c2974a0019ae9eef2d99bf645c2c9aac675166c4cb1005be7b5e2ba196160bc771f5d9ac896ed883f236f888c891e835e59d28fff6651aa
+ checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679
languageName: node
linkType: hard
@@ -15302,7 +15947,7 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:^2.8.0":
+"prettier@npm:2.8.1":
version: 2.8.1
resolution: "prettier@npm:2.8.1"
bin:
@@ -15311,6 +15956,15 @@ __metadata:
languageName: node
linkType: hard
+"prettier@npm:^2.8.0":
+ version: 2.8.2
+ resolution: "prettier@npm:2.8.2"
+ bin:
+ prettier: bin-prettier.js
+ checksum: 740c56c2128d587d656ea1dde9bc9c3503dfc94db4f3ac387259215eeb2e216680bdad9d18a0c9feecc6b42cfa188d6fa777df4c36c1d00cedd4199074fbfbd2
+ languageName: node
+ linkType: hard
+
"pretty-bytes@npm:^5.1.0":
version: 5.6.0
resolution: "pretty-bytes@npm:5.6.0"
@@ -15387,6 +16041,13 @@ __metadata:
languageName: node
linkType: hard
+"process-warning@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "process-warning@npm:2.1.0"
+ checksum: 2f22a3b8ec0de018c3a35e5945a2261c006aa3dfecf3d4f7aa323bc57e4fcdedfd566003283708547fde666d3ab7097d70f8d9765cd831d300723e4008adb7ab
+ languageName: node
+ linkType: hard
+
"process@npm:^0.11.10":
version: 0.11.10
resolution: "process@npm:0.11.10"
@@ -15442,7 +16103,7 @@ __metadata:
languageName: node
linkType: hard
-"proxy-addr@npm:~2.0.7":
+"proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
dependencies:
@@ -15614,6 +16275,13 @@ __metadata:
languageName: node
linkType: hard
+"quick-format-unescaped@npm:^4.0.3":
+ version: 4.0.4
+ resolution: "quick-format-unescaped@npm:4.0.4"
+ checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd
+ languageName: node
+ linkType: hard
+
"quick-lru@npm:^4.0.1":
version: 4.0.1
resolution: "quick-lru@npm:4.0.1"
@@ -15854,6 +16522,18 @@ __metadata:
languageName: node
linkType: hard
+"readable-stream@npm:^4.0.0":
+ version: 4.3.0
+ resolution: "readable-stream@npm:4.3.0"
+ dependencies:
+ abort-controller: ^3.0.0
+ buffer: ^6.0.3
+ events: ^3.3.0
+ process: ^0.11.10
+ checksum: 5f8d5fc1eb0c6eb47771ad4537881126d6280666e1f10ba1e2262a670a0352c36f59e6a04d17c9a6f7c888218984836dc67f55e95a77de8bfdf06fb75f00f670
+ languageName: node
+ linkType: hard
+
"readdir-glob@npm:^1.0.0":
version: 1.1.2
resolution: "readdir-glob@npm:1.1.2"
@@ -15883,6 +16563,13 @@ __metadata:
languageName: node
linkType: hard
+"real-require@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "real-require@npm:0.2.0"
+ checksum: fa060f19f2f447adf678d1376928c76379dce5f72bd334da301685ca6cdcb7b11356813332cc243c88470796bc2e2b1e2917fc10df9143dd93c2ea608694971d
+ languageName: node
+ linkType: hard
+
"recrawl-sync@npm:^2.0.3":
version: 2.2.3
resolution: "recrawl-sync@npm:2.2.3"
@@ -16293,6 +16980,13 @@ __metadata:
languageName: node
linkType: hard
+"ret@npm:~0.2.0":
+ version: 0.2.2
+ resolution: "ret@npm:0.2.2"
+ checksum: 774964bb413a3525e687bca92d81c1cd75555ec33147c32ecca22f3d06409e35df87952cfe3d57afff7650a0f7e42139cf60cb44e94c29dde390243bc1941f16
+ languageName: node
+ linkType: hard
+
"retry@npm:^0.12.0":
version: 0.12.0
resolution: "retry@npm:0.12.0"
@@ -16314,7 +17008,7 @@ __metadata:
languageName: node
linkType: hard
-"rfdc@npm:^1.3.0":
+"rfdc@npm:^1.2.0, rfdc@npm:^1.3.0":
version: 1.3.0
resolution: "rfdc@npm:1.3.0"
checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32
@@ -16380,7 +17074,7 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:^3.2.3":
+"rollup@npm:^3.2.3, rollup@npm:^3.7.0":
version: 3.9.1
resolution: "rollup@npm:3.9.1"
dependencies:
@@ -16467,6 +17161,15 @@ __metadata:
languageName: node
linkType: hard
+"safe-regex2@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "safe-regex2@npm:2.0.0"
+ dependencies:
+ ret: ~0.2.0
+ checksum: f5e182fca040dedd50ae052ea0eb035d9903b2db71243d5d8b43299735857288ef2ab52546a368d9c6fd1333b2a0d039297925e78ffc14845354f3f6158af7c2
+ languageName: node
+ linkType: hard
+
"safe-regex@npm:^1.1.0":
version: 1.1.0
resolution: "safe-regex@npm:1.1.0"
@@ -16524,6 +17227,13 @@ __metadata:
languageName: node
linkType: hard
+"secure-json-parse@npm:^2.5.0":
+ version: 2.6.0
+ resolution: "secure-json-parse@npm:2.6.0"
+ checksum: 6a10529b095cd2d4b7f3ae0a7f9877b67f6a206ffda01ba6fd29012c94b77197d6be3aea21f950120d3ac69b98b1251870554a504d47ab0e32f45531ebe92a2c
+ languageName: node
+ linkType: hard
+
"seek-bzip@npm:^1.0.5":
version: 1.0.6
resolution: "seek-bzip@npm:1.0.6"
@@ -16583,7 +17293,7 @@ __metadata:
languageName: node
linkType: hard
-"send@npm:0.18.0":
+"send@npm:0.18.0, send@npm:^0.18.0":
version: 0.18.0
resolution: "send@npm:0.18.0"
dependencies:
@@ -16611,7 +17321,7 @@ __metadata:
languageName: node
linkType: hard
-"serve-static@npm:1.15.0":
+"serve-static@npm:1.15.0, serve-static@npm:^1.13.1":
version: 1.15.0
resolution: "serve-static@npm:1.15.0"
dependencies:
@@ -16630,6 +17340,13 @@ __metadata:
languageName: node
linkType: hard
+"set-cookie-parser@npm:^2.4.1":
+ version: 2.5.1
+ resolution: "set-cookie-parser@npm:2.5.1"
+ checksum: b99c37f976e68ae6eb7c758bf2bbce1e60bb54e3eccedaa25f2da45b77b9cab58d90674cf9edd7aead6fbeac6308f2eb48713320a47ca120d0e838d0194513b6
+ languageName: node
+ linkType: hard
+
"set-value@npm:^2.0.0, set-value@npm:^2.0.1":
version: 2.0.1
resolution: "set-value@npm:2.0.1"
@@ -16860,6 +17577,15 @@ __metadata:
languageName: node
linkType: hard
+"sonic-boom@npm:^3.1.0":
+ version: 3.2.1
+ resolution: "sonic-boom@npm:3.2.1"
+ dependencies:
+ atomic-sleep: ^1.0.0
+ checksum: 674d0af31c67818c99a0956482720b853bdaa6e46a63814db9fd28024580836a4cfdafa2c2ba6b0ec08449e9a92a5e7959530689b2c1fb5c83f786708cd7a7da
+ languageName: node
+ linkType: hard
+
"sort-keys-length@npm:^1.0.0":
version: 1.0.1
resolution: "sort-keys-length@npm:1.0.1"
@@ -17038,6 +17764,13 @@ __metadata:
languageName: node
linkType: hard
+"split2@npm:^4.0.0":
+ version: 4.1.0
+ resolution: "split2@npm:4.1.0"
+ checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5
+ languageName: node
+ linkType: hard
+
"split@npm:^1.0.0":
version: 1.0.1
resolution: "split@npm:1.0.1"
@@ -17148,21 +17881,6 @@ __metadata:
languageName: node
linkType: hard
-"static-server@npm:^2.2.1":
- version: 2.2.1
- resolution: "static-server@npm:2.2.1"
- dependencies:
- chalk: ^0.5.1
- commander: ^2.3.0
- file-size: 0.0.5
- mime: ^1.2.11
- opn: ^5.2.0
- bin:
- static-server: ./bin/static-server.js
- checksum: 7cec351d26f5037440ec664f7bfb581303d757a394b79d8d55609cb523db249a79cc775e66f47af4e7da1cb992df5ec2c8ebf7974fd849a8072e485c59c96996
- languageName: node
- linkType: hard
-
"statsd-client@npm:0.4.7":
version: 0.4.7
resolution: "statsd-client@npm:0.4.7"
@@ -17349,17 +18067,6 @@ __metadata:
languageName: node
linkType: hard
-"strip-ansi@npm:^0.3.0":
- version: 0.3.0
- resolution: "strip-ansi@npm:0.3.0"
- dependencies:
- ansi-regex: ^0.2.1
- bin:
- strip-ansi: cli.js
- checksum: c154768b855009319a4ad9438233cbf3365b9e9008e6c39eadd3c7bd3614d4cde49f2b6f50e07632c2f148ed4b8ab3b4ddbae1f9805335df2ba25bc5653d22f4
- languageName: node
- linkType: hard
-
"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1":
version: 3.0.1
resolution: "strip-ansi@npm:3.0.1"
@@ -17506,11 +18213,11 @@ __metadata:
linkType: hard
"subfont@npm:^6.12.2":
- version: 6.12.2
- resolution: "subfont@npm:6.12.2"
+ version: 6.12.4
+ resolution: "subfont@npm:6.12.4"
dependencies:
"@gustavnikolaj/async-main-wrap": ^3.0.1
- "@hookun/parse-animation-shorthand": ^0.1.4
+ "@hookun/parse-animation-shorthand": ^0.1.5
assetgraph: ^7.8.1
browserslist: ^4.13.0
css-font-parser: ^2.0.0
@@ -17534,7 +18241,7 @@ __metadata:
yargs: ^15.4.0
bin:
subfont: lib/cli.js
- checksum: 2324c3143c9845472eb1169fef4f0fb9e594a43232961793793c2eca02664bc36bc6f6d7cacff192d9f422c00b42edcc1b65cdd5b604efe67fceda87de92ea3c
+ checksum: a0d52028e11d3490dc3ef4b27ac70ad872d714624f05ac904d24bcfcf29516e52593212835a33c5b8514d75331b766d632c39e6c10092d28e2a98f9bebc65d72
languageName: node
linkType: hard
@@ -17567,15 +18274,6 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^0.2.0":
- version: 0.2.0
- resolution: "supports-color@npm:0.2.0"
- bin:
- supports-color: cli.js
- checksum: 7ec93a92418979aa8a965c85548a3f57441b48cb1e654e1a79e8bd3d62a614a8faec4afc078051da36318550cbf947f5d23da9fe53934ee577c2c300f1a9e4c4
- languageName: node
- linkType: hard
-
"supports-color@npm:^2.0.0":
version: 2.0.0
resolution: "supports-color@npm:2.0.0"
@@ -17891,6 +18589,15 @@ __metadata:
languageName: node
linkType: hard
+"thread-stream@npm:^2.0.0":
+ version: 2.2.0
+ resolution: "thread-stream@npm:2.2.0"
+ dependencies:
+ real-require: ^0.2.0
+ checksum: b7f0ee166ed17ac54700a0b6fc291967c97785b458ff54efe5431a7281bb52d1163e6ec550a614f2a47f0f02de5b35a342bd5acd215af23030938c64859152b2
+ languageName: node
+ linkType: hard
+
"through2-filter@npm:^3.0.0":
version: 3.0.0
resolution: "through2-filter@npm:3.0.0"
@@ -17958,6 +18665,13 @@ __metadata:
languageName: node
linkType: hard
+"tiny-lru@npm:^10.0.0":
+ version: 10.0.1
+ resolution: "tiny-lru@npm:10.0.1"
+ checksum: 58b5f17a357625335aa3b90ee8c9b3e9abede5c1f46066c73deb129574a205efb112807d6d473909e73f1d874ea99bf14eb5c88223d540eb32ebb5e1ff146689
+ languageName: node
+ linkType: hard
+
"tinycolor2@npm:^1.1.2":
version: 1.5.2
resolution: "tinycolor2@npm:1.5.2"
@@ -18174,6 +18888,15 @@ __metadata:
languageName: node
linkType: hard
+"trouter@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "trouter@npm:2.0.1"
+ dependencies:
+ matchit: ^1.0.0
+ checksum: 4a25e81a132d75e8659a29c4b1f6a91eff06601a78a9d1fc189d525ad0298881ed7db7a82045a3b7d1fcc52cb283d2ca7b79eb908de02088798de36659d5205c
+ languageName: node
+ linkType: hard
+
"ts-interface-checker@npm:^0.1.9":
version: 0.1.13
resolution: "ts-interface-checker@npm:0.1.13"
@@ -18406,7 +19129,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^4.5.5, typescript@npm:^4.6.4, typescript@npm:^4.8.4":
+"typescript@npm:4.9.4, typescript@npm:^4.5.5, typescript@npm:^4.6.4, typescript@npm:^4.8.4":
version: 4.9.4
resolution: "typescript@npm:4.9.4"
bin:
@@ -18426,7 +19149,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@^4.5.5#~builtin, typescript@patch:typescript@^4.6.4#~builtin, typescript@patch:typescript@^4.8.4#~builtin":
+"typescript@patch:typescript@4.9.4#~builtin, typescript@patch:typescript@^4.5.5#~builtin, typescript@patch:typescript@^4.6.4#~builtin, typescript@patch:typescript@^4.8.4#~builtin":
version: 4.9.4
resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=d73830"
bin:
@@ -18483,7 +19206,7 @@ __metadata:
languageName: node
linkType: hard
-"undici@npm:^5.14.0":
+"undici@npm:5.14.0, undici@npm:^5.14.0":
version: 5.14.0
resolution: "undici@npm:5.14.0"
dependencies:
@@ -19011,12 +19734,26 @@ __metadata:
linkType: hard
"vite-imagetools@npm:^4.0.11":
- version: 4.0.13
- resolution: "vite-imagetools@npm:4.0.13"
+ version: 4.0.14
+ resolution: "vite-imagetools@npm:4.0.14"
dependencies:
"@rollup/pluginutils": ^5.0.0
- imagetools-core: ^3.2.3
- checksum: 98d85abd7a8013419b63d4c4d1137dbe1af3bc549d71bd864c02aa23828a383fc05d7a5b4ea77e28c10ede64fb9de0b449ab25b0d26603dc8b65b05cbb398246
+ imagetools-core: ^3.3.0
+ checksum: c1c163359a4eff2ce704eb66292a762458a0b8ca87acec4a678138790908a4a63678c083d01c72cde1f27b776925243662caefaaca9eff6303d44b87182a7c13
+ languageName: node
+ linkType: hard
+
+"vite-tsconfig-paths@npm:3.5.0":
+ version: 3.5.0
+ resolution: "vite-tsconfig-paths@npm:3.5.0"
+ dependencies:
+ debug: ^4.1.1
+ globrex: ^0.1.2
+ recrawl-sync: ^2.0.3
+ tsconfig-paths: ^4.0.0
+ peerDependencies:
+ vite: ">2.0.0-0"
+ checksum: d6d4828fdba639445251b3baf06901f2eb46a98b2741ba5e30e3d791c8a25f8533d23df13c5422eece63cf449865750dcd57e825dbe43b5c985e5edf42b17fea
languageName: node
linkType: hard
@@ -19072,6 +19809,44 @@ __metadata:
languageName: node
linkType: hard
+"vite@npm:4.0.3":
+ version: 4.0.3
+ resolution: "vite@npm:4.0.3"
+ dependencies:
+ esbuild: ^0.16.3
+ fsevents: ~2.3.2
+ postcss: ^8.4.20
+ resolve: ^1.22.1
+ rollup: ^3.7.0
+ peerDependencies:
+ "@types/node": ">= 14"
+ less: "*"
+ sass: "*"
+ stylus: "*"
+ sugarss: "*"
+ terser: ^5.4.0
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ bin:
+ vite: bin/vite.js
+ checksum: 7df71d955f78cbe0dd8e1eb0851fc75070346a0426b8e3e913bf2e05d1053ca8a50619d550fab4f1ed52c68dfcc2921e6421504e9669fc5ed77497a77f84e33e
+ languageName: node
+ linkType: hard
+
"w3c-hr-time@npm:^1.0.2":
version: 1.0.2
resolution: "w3c-hr-time@npm:1.0.2"
@@ -19270,7 +20045,7 @@ __metadata:
languageName: node
linkType: hard
-"which-typed-array@npm:^1.1.8, which-typed-array@npm:^1.1.9":
+"which-typed-array@npm:^1.1.9":
version: 1.1.9
resolution: "which-typed-array@npm:1.1.9"
dependencies: