diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..a11ae38 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,58 @@ +name: 🐛 Reporte Bug +description: Algo no va bien?. Hazlo saber +labels: [bug, triage] +title: '[🐛]' +body: + - type: markdown + attributes: + value: | + Gracias por tomarte el tiempo de reportar este problema + + - type: dropdown + id: version + attributes: + label: ¿Que versión estas usando? + description: '__INFO:__ Recuerda que puedes consultar dudas directamente en [discord](https://link.codigoencasa.com/DISCORD)' + options: + - v2 + - v1 + validations: + required: true + + - type: dropdown + id: component + attributes: + label: ¿Sobre que afecta? + options: + - Flujo de palabras (Flow) + - DialogFlow + - Base de datos + - Otro + validations: + required: true + + - type: textarea + id: description + attributes: + description: 'Trata de ser lo más claro posible, de esa manera podemos entender el contexto de tu problema y darte una mejor solución' + label: Describe tu problema + placeholder: Yo tengo un problema.... + + validations: + required: true + + - type: input + id: reproduction + attributes: + label: Reproducir error + description: __(Recomendación)__ trata de grabar un video puedes usar algunas de las siguientes herramientas [https://www.vidyard.com/](https://www.vidyard.com/) [https://www.loom.com/](https://www.loom.com/) y en lo posbile apoyate en [https://stackblitz.com/](https://stackblitz.com/) para compartir el código de ser necesario + placeholder: URL video o stackblitz + validations: + required: false + + - type: textarea + id: additional_information + attributes: + label: Información Adicional + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..eb1217d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: 🤔 Core Team + url: https://link.codigoencasa.com/DISCORD + about: Si quieres formar parte del CoreTeam, patrocinar el proyecto o propuesta profesionales diff --git a/.github/ISSUE_TEMPLATE/test-case.yml b/.github/ISSUE_TEMPLATE/test-case.yml new file mode 100644 index 0000000..b322711 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/test-case.yml @@ -0,0 +1,79 @@ +name: 🐬 Caso de uso +description: Reporta tu caso de uso y cuales fueron tus resultados +labels: [usecase] +title: '[🐬]' +body: + - type: markdown + attributes: + value: | + Gracias por tomarte el tiempo de detallar este caso de uso, sera de gran utilidad para mantener un software de calidad puedes comenzar + ⚡ `npm create bot-whatsapp@dev` + + - type: dropdown + id: version + attributes: + label: ¿Cual proveedor usaste? + description: 'Actualmente tenemos varios proveedores que sirven como punto de entrada y salida con Whatsapp' + options: + - whatsapp-web.js + - venom + - bailey + - twilio + - meta + validations: + required: true + + - type: dropdown + id: component + attributes: + label: ¿Cual base de datos usaste? + options: + - memory + - mongo + - mysql + - json + validations: + required: true + + - type: dropdown + id: result + attributes: + label: Conclusion de la prueba + options: + - muy buena + - buena + - tiene errores + validations: + required: true + + - type: textarea + id: description + attributes: + description: 'Trata de ser lo más claro posible, de esa manera podemos entender el contexto del caso de uso' + label: Describe tu caso + placeholder: Yo tengo un caso.... + validations: + required: true + + - type: textarea + id: logs + attributes: + label: ¿Logs Importantes? + description: Si tienes algunos logs importantes a tener en cuenta o que muetren algun error en concreto. + render: shell + + - type: textarea + id: additional_information + attributes: + label: Información Adicional + validations: + required: false + + - type: input + id: usernames + attributes: + label: ¿Quieres que te mencionemos? + description: Siempre buscamos fomentar la comunidad por lo cual si quieres que te mencionemos publicamente en nuestras redes sociales puedes dejar tu username + placeholder: twitter o github o instagram o alguna url + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..8278042 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +# Que tipo de Pull Request es? + +- [ ] Mejoras +- [ ] Bug +- [ ] Docs / tests + +# Descripción + +Por favor agrega una descripción de tu aporte para tener más contexto y poder avanzar más rápido. Si es de ayuda puedes usar plataformar como [https://www.loom.com/](https://www.loom.com/) para grabar un video. + + +> Forma parte de este proyecto. + +- [Discord](https://link.codigoencasa.com/DISCORD) +- [Twitter](https://twitter.com/leifermendez) +- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR) +- [Telegram](https://t.me/leifermendez) diff --git a/.github/workflows/check-provider-major.yml b/.github/workflows/check-provider-major.yml new file mode 100644 index 0000000..9557ead --- /dev/null +++ b/.github/workflows/check-provider-major.yml @@ -0,0 +1,46 @@ +name: Rev Major Providers + +on: + schedule: + - cron: '0 9 * * *' + +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 + + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: 'ci(providers): 🚩 Check BREAKING CHANGE' + create_branch: true + branch: feature/breaking-change diff --git a/.github/workflows/check-providers.yml b/.github/workflows/check-providers.yml new file mode 100644 index 0000000..9965606 --- /dev/null +++ b/.github/workflows/check-providers.yml @@ -0,0 +1,45 @@ +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 + + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: 'ci(providers): 👍 updated versions stable providers' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa05560..8fd8fa3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: BotWhatsapp Build-Test +name: Build and Test on: pull_request: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..86178fd --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,75 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: 'CodeQL' + +on: + push: + branches: ['main', dev, next-release] + pull_request: + # The branches below must be a subset of the branches above + branches: ['main'] + schedule: + - cron: '21 16 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: ['javascript'] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: '/language:${{matrix.language}}' diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index f732834..9f9e814 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -1,9 +1,11 @@ -name: Add contributors +name: Revisando Colaboradores on: + push: + branches: + - main pull_request: branches: - dev - - main types: [closed] jobs: diff --git a/.github/workflows/netlify-dev.yml b/.github/workflows/netlify-dev.yml new file mode 100644 index 0000000..e3e8200 --- /dev/null +++ b/.github/workflows/netlify-dev.yml @@ -0,0 +1,46 @@ +name: 📄 Desplegando documentacion + +on: + pull_request: + branches: + - 'feat/docs-**' + - 'fix/docs-**' + push: + branches: + - 'feat/docs-**' + - 'fix/docs-**' + +jobs: + ############ DOCUMENTATION BUILD ############ + build-documentation: + name: Build Package + 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: Add netlify + run: yarn add netlify-cli -D + + - name: Create .env build file + run: | + touch packages/docs/.env + echo VITE_GITHUB_TOKEN=${{ secrets.COLLABORATORS_TOKEN }} >> packages/docs/.env + + - name: Build and Deploy + run: | + cd packages/docs + netlify deploy --build --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }} diff --git a/.github/workflows/netlify.yml b/.github/workflows/netlify.yml new file mode 100644 index 0000000..bdb51ab --- /dev/null +++ b/.github/workflows/netlify.yml @@ -0,0 +1,42 @@ +name: 📄 (PROD) Desplegando documentacion + +on: + push: + branches: + - main + - next-release + +jobs: + ############ DOCUMENTATION BUILD ############ + build-documentation: + name: Build Package + 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: Add netlify + run: yarn add netlify-cli -D + + - name: Create .env build file + run: | + touch packages/docs/.env + echo VITE_GITHUB_TOKEN=${{ secrets.COLLABORATORS_TOKEN }} >> packages/docs/.env + + - name: Build and Deploy + run: | + cd packages/docs + netlify deploy --prod --build --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }} diff --git a/.github/workflows/releases-dev.yml b/.github/workflows/releases-dev.yml index 143d2a3..a2d9979 100644 --- a/.github/workflows/releases-dev.yml +++ b/.github/workflows/releases-dev.yml @@ -1,4 +1,4 @@ -name: BotWhatsapp Releases(DEV) +name: 🚀 (DEV) Liberando versiones on: push: @@ -13,10 +13,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - ref: ${{ github.head_ref }} - persist-credentials: false - fetch-depth: 0 - name: Setup Node uses: actions/setup-node@v3 @@ -49,8 +45,7 @@ jobs: run: yarn node ./scripts/release.js --name=provider --version= --token="${{ secrets.NPM_TOKEN }}" - name: Commit Versioning & Push changes - uses: actions-js/push@master + uses: stefanzweifel/git-auto-commit-action@v4 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - message: 'ci(version): :zap: automatic - "${date}" updated versions every packages' - branch: 'dev' + commit_message: 'ci(version): :zap: automatic - "${date}" updated versions every packages' + branch: dev diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 157e620..daafe13 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -1,4 +1,4 @@ -name: BotWhatsapp Releases(Prod) +name: 🚀⚡ Liberando versiones on: push: @@ -13,10 +13,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - ref: ${{ github.head_ref }} - persist-credentials: false - fetch-depth: 0 - name: Set output id: vars @@ -52,9 +48,11 @@ jobs: - 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: Commit Versioning & Push changes - uses: actions-js/push@master + uses: stefanzweifel/git-auto-commit-action@v4 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - message: 'ci(version): :zap: automatic - "${date}" updated versions every packages' - branch: 'dev' + commit_message: 'release(version): 🚀 - "${{ steps.vars.outputs.tag }}" release' + branch: dev diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..8903b23 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,27 @@ +# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/actions/stale +name: Revisar ISSUES abandonadas + +on: + schedule: + - cron: '55 22 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v5 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: '¿Alguna novedad sobre esta ISSUE?' + stale-pr-message: '¿Alguna novedad sobre esta PULL REQUEST?' + stale-issue-label: 'no-issue-activity' + stale-pr-label: 'no-pr-activity' + exempt-issue-assignees: 'leifermendez' diff --git a/.gitignore b/.gitignore index be22be9..2a3fcb7 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,6 @@ base-*/ qr.svg package-lock.json yarn-error.log -.npmrc \ No newline at end of file +.npmrc +# Local Netlify folder +.netlify diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd0fa5..dafc64e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,113 @@ 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.3](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.2...v0.1.3) (2023-01-04) + + +### Features + +* **adapter:** :zap: send messages with dialogflow ([c20e151](https://github.com/leifermendez/bot-whatsapp/commit/c20e151e209d33de9e7425a64f003c85360f1832)) +* **baileys:** added more methods ([1b23b83](https://github.com/leifermendez/bot-whatsapp/commit/1b23b837460ce4533ff33f10f1de5e3a344a5623)) +* **bot:** :zap: http responses support ([e331c2d](https://github.com/leifermendez/bot-whatsapp/commit/e331c2dcc40eeb82a93f9d29f6a82333b8465927)) +* **bot:** :zap: http responses support ([2d2bb08](https://github.com/leifermendez/bot-whatsapp/commit/2d2bb085cd95604a84ca3fe5c4ddc84b3824ac1c)) +* **bot:** :zap: rev-03 everything work fine ([3012e02](https://github.com/leifermendez/bot-whatsapp/commit/3012e026b77ab4e99334b992d166a89189f76503)) +* **cli:** :sparkles: added bailey ([06acec2](https://github.com/leifermendez/bot-whatsapp/commit/06acec2bf29d72c2b46f4ce81fed115bab97351f)) +* **cli:** :sparkles: added bailey ([c868f73](https://github.com/leifermendez/bot-whatsapp/commit/c868f7346245bec94582b25a342febc657926c9d)) +* **conflict:** :zap: remove unused variable ([eba9229](https://github.com/leifermendez/bot-whatsapp/commit/eba92299cfd84c971f09697d027043f19eec2b7c)) +* **contexts:** :zap: add new dialogflowcx ([4d8cf62](https://github.com/leifermendez/bot-whatsapp/commit/4d8cf623ff86b3d08c8d52293d4e289dfda68e1c)) +* **contexts:** :zap: add new dialogflowcx ([9885872](https://github.com/leifermendez/bot-whatsapp/commit/98858729919b2544dace07c49badce7888ddfd82)) +* **contexts:** dialogflowcx support ([9179421](https://github.com/leifermendez/bot-whatsapp/commit/917942139f9736f1c0f8ce5f07b4e12e5768b0c7)) +* correccion de flujos en app.js de ejemplo ([99f508f](https://github.com/leifermendez/bot-whatsapp/commit/99f508f93889d70240861158bc304c25a3b2daef)) +* **docs:** master class updated ([69fd81a](https://github.com/leifermendez/bot-whatsapp/commit/69fd81a565e61b249ac50917585293d2d84e3dd4)) +* **docs:** master class updated ([d522b03](https://github.com/leifermendez/bot-whatsapp/commit/d522b03e2e6e6e3f7c467c59e3d2d6f288fe37b2)) +* **provider:** :bug: dialogflow ([4ec6f1e](https://github.com/leifermendez/bot-whatsapp/commit/4ec6f1e120879e545fa111615f2d79b792d947a5)) +* **provider:** :sparkles: added dialogflow ([2f633c7](https://github.com/leifermendez/bot-whatsapp/commit/2f633c72da24f98d6c318d1e725571b62e04604c)) +* **provider:** :sparkles: added dialogflow ([798f1ce](https://github.com/leifermendez/bot-whatsapp/commit/798f1cebdefe43624c1698a219dcb224bb842d38)) +* **provider:** :sparkles: endpoint is added to validate the webhook … ([478929d](https://github.com/leifermendez/bot-whatsapp/commit/478929d1340d46d6bf997ae8edabbaae4511172d)) +* **provider:** :sparkles: endpoint is added to validate the webhook token ([1ec1564](https://github.com/leifermendez/bot-whatsapp/commit/1ec15647dc462363d5b765f42debddbe6ef6266b)) +* **provider:** :zap: add new methods ([0b4e353](https://github.com/leifermendez/bot-whatsapp/commit/0b4e35308dace0ccdf618cb1d04987ed5200d58c)) +* **provider:** :zap: add sendfile and sendButtons ([5433610](https://github.com/leifermendez/bot-whatsapp/commit/5433610a84d7a050a387e4daf2ded1daebfc03a4)) +* **provider:** :zap: add sendfile and sendButtons ([342cbcc](https://github.com/leifermendez/bot-whatsapp/commit/342cbccff1d09f9aabe5423ad6d686d590a2448f)) +* **provider:** :zap: added new venom provider ([01fe9eb](https://github.com/leifermendez/bot-whatsapp/commit/01fe9ebc9a943f2aa086ee415153d1cccdb14ec0)) +* **provider:** :zap: added tamplate venom ([337c2e9](https://github.com/leifermendez/bot-whatsapp/commit/337c2e94bccd0ae173958fe2db08b494bdc93c28)) +* **provider:** :zap: baileysProvider ([23b2e8e](https://github.com/leifermendez/bot-whatsapp/commit/23b2e8e439ecec24450bd5cf1a3820316e643434)) +* **provider:** :zap: solution error buttons ([1b83871](https://github.com/leifermendez/bot-whatsapp/commit/1b83871cca6996c6acae3d4c8b6b42aec05ea146)) +* **provider:** :zap: solution error utils venom ([31c83f5](https://github.com/leifermendez/bot-whatsapp/commit/31c83f5d689a01490d3adb96006f54c2a5d3268b)) +* **provider:** :zap: update ([b62d21a](https://github.com/leifermendez/bot-whatsapp/commit/b62d21a0bf94466e43c25c6e8c0f5db9ae91c572)) +* **provider:** :zap: update ([0c94647](https://github.com/leifermendez/bot-whatsapp/commit/0c94647a27747c3ddf4f02926580370f0d81bdc2)) +* **provider:** meta provider is added ([b041f7d](https://github.com/leifermendez/bot-whatsapp/commit/b041f7d0c7cc6f152d3f36785d1d398a4141d57d)) +* **provider:** meta provider is added ([438607c](https://github.com/leifermendez/bot-whatsapp/commit/438607c222b91d6f8814201dabe5f7c3e7ba1abb)) +* **provider:** new added baileys ([4e0fcbd](https://github.com/leifermendez/bot-whatsapp/commit/4e0fcbd8347f8a430adb43351b5415098a5d10df)) +* **provider:** new provider - venon:zap: configuracion inicial provi… ([66f75f8](https://github.com/leifermendez/bot-whatsapp/commit/66f75f872200334bfc9eda744bed92c509dfee56)) +* **provider:** new provider - venon:zap: configuracion inicial provider venom ([fee7c2e](https://github.com/leifermendez/bot-whatsapp/commit/fee7c2e967b7fe8835b5acc243c19f7713acfbe7)) +* se agregaron los datros del adapter mongo en app.js y package.json ([8160d13](https://github.com/leifermendez/bot-whatsapp/commit/8160d13c866b8ae17b0ec8e68eee1bc0373595b0)) +* se agrego informacion al ejemplo en app.js ([954e751](https://github.com/leifermendez/bot-whatsapp/commit/954e751f700c6a39ec70c0bc5168637c0dc7e07c)) +* se agrego informacion al ejemplo en app.js ([b2f1339](https://github.com/leifermendez/bot-whatsapp/commit/b2f13396104db9ccef5b3bad1c4e19c6a4bad2d4)) +* **starters:** meta memory base template added ([11c784f](https://github.com/leifermendez/bot-whatsapp/commit/11c784f882965d6bd3a2313cf91bed9fb3aa5f26)) +* **starters:** meta memory base template added ([e8d6252](https://github.com/leifermendez/bot-whatsapp/commit/e8d625201ed86e162e0b4e82100ede1d08985555)) + + +### Bug Fixes + +* :art: update ([7d6708c](https://github.com/leifermendez/bot-whatsapp/commit/7d6708c01bbdc5043a7e6ed56fe15a9618115b91)) +* :sparkles: updated starters ([5da4b7a](https://github.com/leifermendez/bot-whatsapp/commit/5da4b7a4d1e5950be94361ac439938741b9d299c)) +* actualizar app.js de ejemplo ([1746613](https://github.com/leifermendez/bot-whatsapp/commit/17466138ddcef60a23a0c87911f22045f26d3233)) +* actualizar ejemplo app.js ([60fdbf3](https://github.com/leifermendez/bot-whatsapp/commit/60fdbf3d3cd62819e618853a9dc2fd0e23fe8752)) +* **adapter:** :fire: clear log ([9ad4874](https://github.com/leifermendez/bot-whatsapp/commit/9ad4874fdafabfbf0e9e20e6b3281f702bb9fbe7)) +* **adapter:** :fire: clear log ([4d34d3a](https://github.com/leifermendez/bot-whatsapp/commit/4d34d3ab1daab4e72fb5244216c78cf836d1a164)) +* **adapter:** :fire: improvement baileys ([e6fefb4](https://github.com/leifermendez/bot-whatsapp/commit/e6fefb4049847f996f2a169b9acfc27c2428d3e6)) +* **adapter:** :fire: improvement baileys ([2d5ac26](https://github.com/leifermendez/bot-whatsapp/commit/2d5ac2664bea09e60ac85ff2612609ae21050945)) +* **adapter:** :rocket: venom update - cli - qr iamge ([041bf62](https://github.com/leifermendez/bot-whatsapp/commit/041bf6280e5f6956393716907e0669aa3ca78b4a)) +* **adapter:** :rocket: venom update - cli - qr iamge ([e37fd0d](https://github.com/leifermendez/bot-whatsapp/commit/e37fd0da3635aa1041664d490d5f9803d2c441ca)) +* **adapter:** :rocket: venom update - cli - qr iamge ([ca6afbb](https://github.com/leifermendez/bot-whatsapp/commit/ca6afbb87fceec12d4a383486ad693905e36881f)) +* **adapter:** json db change is made ([386c1bb](https://github.com/leifermendez/bot-whatsapp/commit/386c1bbbac036aa58335fb5f62e3af2493766b6b)) +* **adapter:** json db change is made ([3bdc7af](https://github.com/leifermendez/bot-whatsapp/commit/3bdc7afe8062527ff08620650d2c1177dfea83f5)) +* agregamos variables para mysql ([dcf65b8](https://github.com/leifermendez/bot-whatsapp/commit/dcf65b87bc7e7e6381e6448e83118077986898e7)) +* **bot:** :ambulance: fix callback functions ([d9aa97c](https://github.com/leifermendez/bot-whatsapp/commit/d9aa97c7819aca1446657bc0b75e9732f0f20c6b)), closes [#252](https://github.com/leifermendez/bot-whatsapp/issues/252) +* **bot:** :ambulance: fix callback functions ([964a074](https://github.com/leifermendez/bot-whatsapp/commit/964a074aa41324bd09d0c4e2e7aa663a0602b69c)) +* **bot:** :fire: fix rev ([21407c0](https://github.com/leifermendez/bot-whatsapp/commit/21407c0e37f1ab12efecf887e699cedf05e3946a)) +* **bot:** :fire: fix rev ([484c8c3](https://github.com/leifermendez/bot-whatsapp/commit/484c8c3bdefbc7824c32a86090bafae0593ecdac)) +* **bot:** :zap: working callback Phase 1 ([952ce86](https://github.com/leifermendez/bot-whatsapp/commit/952ce86ffaa48a0d6fbc0a00a08c5d1efa14ee8e)) +* **bot:** :zap: working nested new flow ([2cbc962](https://github.com/leifermendez/bot-whatsapp/commit/2cbc96245d795de749d894a3a0d99b6550f08d9e)) +* **cli:** :art: starters ([a2be57f](https://github.com/leifermendez/bot-whatsapp/commit/a2be57f0aa42c6b5e13ad19c34abc7d9e81dc135)) +* **cli:** :art: starters ([670ecf1](https://github.com/leifermendez/bot-whatsapp/commit/670ecf121babf53e76c2ea106c0710cbe59facde)) +* **cli:** :fire: update instructions ([e585e2f](https://github.com/leifermendez/bot-whatsapp/commit/e585e2f5f644ed0188dc9cd2b3c697c9d6050669)) +* **cli:** :fire: update instructions ([ed36ce0](https://github.com/leifermendez/bot-whatsapp/commit/ed36ce0a7796320c6a4a452f29c05a3f0f7368db)) +* **cli:** :fire: update instructions ([bad1694](https://github.com/leifermendez/bot-whatsapp/commit/bad16943fc2089887d6bf0b6d90075d3bec6f9c7)) +* **cli:** :fire: update instructions ([a21633f](https://github.com/leifermendez/bot-whatsapp/commit/a21633fb7cf348cc37f4e4714f51172b49b193b5)) +* **cli:** :zap: updated ([a6f4aa8](https://github.com/leifermendez/bot-whatsapp/commit/a6f4aa8d1e809330c06c165aaf9a9f90b8922bb5)) +* **conflict:** conflict resolution ([71d43b5](https://github.com/leifermendez/bot-whatsapp/commit/71d43b585a0ce173061c84e9879915e4602db026)) +* **contexts:** :fire: added buttons ([eabef7a](https://github.com/leifermendez/bot-whatsapp/commit/eabef7a92d005cd0190196cfe75828c38885aadf)) +* **contexts:** :fire: added buttons ([1b878d2](https://github.com/leifermendez/bot-whatsapp/commit/1b878d2ba0daeb3609af74a2ebae7948456e7fb0)) +* **contexts:** :fire: added buttons ([78b0a9d](https://github.com/leifermendez/bot-whatsapp/commit/78b0a9dddc2a6e0fceb721ee7794efa2047f25fc)) +* **contexts:** :fire: added buttons ([d8309f7](https://github.com/leifermendez/bot-whatsapp/commit/d8309f77e1d9137c0bec977ed9faef633cd90552)) +* correccion en app.js para remover addChild en starters ([32db429](https://github.com/leifermendez/bot-whatsapp/commit/32db429f2946f344d949cb169a9595d657c06279)) +* fix del db provider mysql ([b59d4fc](https://github.com/leifermendez/bot-whatsapp/commit/b59d4fcdd7462cde3f68ab5746d49960b547a592)) +* provider equivocado en app.js de venom ([4e0a109](https://github.com/leifermendez/bot-whatsapp/commit/4e0a1091ee85cedfaa5a9c3d40e5cd50bc36cda3)) +* **provider:** :bug: create static site html qr ([c7e56a4](https://github.com/leifermendez/bot-whatsapp/commit/c7e56a4b13c8829f91769eeca7f1f6b3473f68cf)) +* **provider:** :bug: fix metea provider ([85f50be](https://github.com/leifermendez/bot-whatsapp/commit/85f50be9dcbf3817107898d8d2980baf05acd678)) +* **provider:** :bug: fix metea provider ([a52aaa1](https://github.com/leifermendez/bot-whatsapp/commit/a52aaa11d883bbaf526cf87720d3c3fd9f89a986)) +* **provider:** :bug: qr code accurate ([6c4845d](https://github.com/leifermendez/bot-whatsapp/commit/6c4845d733720d9916bb4008f9069ae4fd986a4b)) +* **provider:** :bug: qr code accurate ([91bfdc4](https://github.com/leifermendez/bot-whatsapp/commit/91bfdc46301207cbc5274308da6f39c7b4652c63)) +* **provider:** :fire: baileys fix ([928365d](https://github.com/leifermendez/bot-whatsapp/commit/928365dcafb3631acf6b1d0c239a906f8e1c4b0d)) +* **provider:** :fire: send message togther with media ([78aa23f](https://github.com/leifermendez/bot-whatsapp/commit/78aa23fab094059145f82e6781f9366d5d582b4f)) +* **provider:** :fire: send message togther with media ([b6bf43d](https://github.com/leifermendez/bot-whatsapp/commit/b6bf43d70fc28c6a229522b9b0de76cec43ac864)) +* **provider:** :zap: baileys fix restart ([ae83774](https://github.com/leifermendez/bot-whatsapp/commit/ae83774365027e2e86127ab7713ae9ee2df31f33)) +* **provider:** :zap: edit starter ([ff65832](https://github.com/leifermendez/bot-whatsapp/commit/ff65832012003423cc86d25cf0923452b1f8acb7)) +* **provider:** :zap: edit starter ([68dd182](https://github.com/leifermendez/bot-whatsapp/commit/68dd1820f05d04780824b318072d053eaf7db654)) +* **provider:** :zap: json space ([3cef741](https://github.com/leifermendez/bot-whatsapp/commit/3cef741c9ee30024eb42770a5f32931fcd372160)) +* **provider:** :zap: json space ([9b087e0](https://github.com/leifermendez/bot-whatsapp/commit/9b087e071019a7b6c79195a24dc7ddec498c5716)) +* **provider:** :zap: json space ([208fb4e](https://github.com/leifermendez/bot-whatsapp/commit/208fb4e9131dd5d4fd7230ba1aa11181337d9181)) +* **provider:** :zap: json space ([54a59c7](https://github.com/leifermendez/bot-whatsapp/commit/54a59c7f0d4dbaab006ce7e3c74412d8d3613ecd)) +* **provider:** qr-fix margin ([663641a](https://github.com/leifermendez/bot-whatsapp/commit/663641a1b8bf9234a88b0f3c38381ebc4bfa4bf9)) +* se quito addChild de las constantes porque no se usa ([ba2291a](https://github.com/leifermendez/bot-whatsapp/commit/ba2291a3ddac0d4101021e11d03cb222c5a4bb3b)) +* **starters:** :fire: updated staters ([4d4f15c](https://github.com/leifermendez/bot-whatsapp/commit/4d4f15ce73486d9335ad474d9e37c3b155670134)) +* **starters:** :fire: updated staters ([a30eaac](https://github.com/leifermendez/bot-whatsapp/commit/a30eaac77534d17eb980f6ec126140e9d30aa06e)) +* **starters:** :memo: update MIGRATION ([37fe323](https://github.com/leifermendez/bot-whatsapp/commit/37fe32322eb1bd41eecd151e52f17ec0588fb85e)) +* **starters:** :memo: update MIGRATION ([9b30e7d](https://github.com/leifermendez/bot-whatsapp/commit/9b30e7dcfc30bc160b56427cc6cdc2dc982bde2a)) +* **starters:** base templates are added for meta ([229e017](https://github.com/leifermendez/bot-whatsapp/commit/229e017ae20b84c9d12c7282f97b7034f5f33e6d)) +* **starters:** base templates are added for meta ([20f6651](https://github.com/leifermendez/bot-whatsapp/commit/20f665175c9b47226df41ce43e05574bd6ab1930)) + ### [0.1.2](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.1...v0.1.2) (2022-12-12) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..05743b3 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +leifer.contacto@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..959d8ec --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Leifer Mendez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 8e70144..b4a2271 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,36 @@ -[![Test / Coverage](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml/badge.svg)](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml) +# Chatbot Library +![](https://img.shields.io/npm/v/@bot-whatsapp/bot?color=%2300c200&label=%40bot-whatsapp) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) --------- -🐤 Tablero de tareas : [https://github.com/users/leifermendez/projects/4/views/1](https://github.com/users/leifermendez/projects/4/views/1) - -🦊 Documentación: [https://bot-whatsapp-codigoencasa.pages.dev/](https://bot-whatsapp-codigoencasa.pages.dev/) -Video como hacer PR: https://youtu.be/Lxt8Acob6aU - -🚀 __Roadmap:__ [https://github.com/users/leifermendez/projects/4/views/1](https://github.com/users/leifermendez/projects/4/views/1) +[![BotWhatsapp Releases(Prod)](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml/badge.svg)](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml) -**Comunidad** +

+ +

+ + +**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/)** + +## Comenzar + +``` +npm create bot-whatsapp@latest +``` + +Entiende más a fondo sus funcionalidades explicadas en nuestra documentación. + +- Instalacion +- Base de datos +- Proveedores + +## Recursos +- [📄 Documentación](https://bot-whatsapp.netlify.app/) +- [🚀 Roadmap](https://github.com/orgs/codigoencasa/projects/1) +- [💻 Discord](https://link.codigoencasa.com/DISCORD) +- [👌 Twitter](https://twitter.com/leifermendez) +- [🎥 Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR) + +## Comunidad @@ -45,7 +66,7 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU HKong31
- Null + HLKong
@@ -94,9 +115,4 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
-> Forma parte de este proyecto. -- [Discord](https://link.codigoencasa.com/DISCORD) -- [Twitter](https://twitter.com/leifermendez) -- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR) -- [Telegram](https://t.me/leifermendez) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..034e848 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,21 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 5.1.x | :white_check_mark: | +| 5.0.x | :x: | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. diff --git a/package.json b/package.json index 92f2f3d..72109ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/root", - "version": "0.1.2", + "version": "0.1.3", "description": "Bot de wahtsapp open source para MVP o pequeños negocios", "main": "app.js", "private": true, @@ -30,7 +30,7 @@ "prepare": "npx husky install", "preinstall": "npx only-allow yarn", "postinstall": "npx prettier --write .", - "release": "standard-version -- --prerelease" + "release": "standard-version -- --prerelease --global" }, "workspaces": [ "packages/create-bot-whatsapp", diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index 91195c8..7550dd0 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -115,24 +115,17 @@ class CoreClass { // 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo const cbEveryCtx = (inRef) => { - const indexFlow = this.flowClass.findIndexByRef(inRef) - this.flowClass.allCallbacks[indexFlow].callback( - messageCtxInComming, - { - fallBack, - flowDynamic, - } - ) + this.flowClass.allCallbacks[inRef](messageCtxInComming, { + fallBack, + flowDynamic, + }) } // 📄 [options: callback]: Si se tiene un callback se ejecuta if (!fallBackFlag) { - if (refToContinue && prevMsg?.options?.callback) { - cbEveryCtx(refToContinue?.ref) - } else { - for (const ite of this.flowClass.find(body)) { - cbEveryCtx(ite?.ref) - } + if (refToContinue?.options?.capture) cbEveryCtx(refToContinue?.ref) + for (const ite of this.flowClass.find(body)) { + if (!ite?.options?.capture) cbEveryCtx(ite?.ref) } } @@ -144,6 +137,11 @@ class CoreClass { })) msgToSend = this.flowClass.find(body, false, flowStandalone) || [] + + for (const ite of msgToSend) { + cbEveryCtx(ite?.ref) + } + this.sendFlow(msgToSend, from) return } diff --git a/packages/bot/io/flow.class.js b/packages/bot/io/flow.class.js index 2c18268..458c423 100644 --- a/packages/bot/io/flow.class.js +++ b/packages/bot/io/flow.class.js @@ -1,4 +1,5 @@ const { toSerialize } = require('./methods/toSerialize') +const { flatObject } = require('../utils/flattener') class FlowClass { allCallbacks = [] @@ -8,10 +9,7 @@ class FlowClass { if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY') this.flowRaw = _flow - this.allCallbacks = _flow - .map((cbIn) => cbIn.ctx.callbacks) - .flat(2) - .map((c, i) => ({ callback: c?.callback, index: i })) + this.allCallbacks = flatObject(_flow) const mergeToJsonSerialize = Object.keys(_flow) .map((indexObjectFlow) => _flow[indexObjectFlow].toJson()) diff --git a/packages/bot/io/methods/addAnswer.js b/packages/bot/io/methods/addAnswer.js index a7db6d6..f0ccdad 100644 --- a/packages/bot/io/methods/addAnswer.js +++ b/packages/bot/io/methods/addAnswer.js @@ -1,4 +1,6 @@ +const { flatObject } = require('../../utils/flattener') const { generateRef } = require('../../utils/hash') +const { addChild } = require('./addChild') const { toJson } = require('./toJson') /** * @@ -27,9 +29,28 @@ const addAnswer = delay: typeof options?.delay === 'number' ? options?.delay : 0, }) - const getNested = () => ({ - nested: Array.isArray(nested) ? nested : [], - }) + const getNested = () => { + let flatNested = [] + if (Array.isArray(nested)) { + for (const iterator of nested) { + flatNested = [...flatNested, ...addChild(iterator)] + } + + return { + nested: flatNested, + } + } + return { + nested: addChild(nested), + } + } + + /** + * Esta funcion aplana y busca los callback anidados de los hijos + * @returns + */ + const getCbFromNested = () => + flatObject(Array.isArray(nested) ? nested : [nested]) const callback = typeof cb === 'function' ? cb : () => null @@ -59,12 +80,12 @@ const addAnswer = }, ]) - const callbacks = [].concat(inCtx.callbacks).concat([ - { - ref: lastCtx.ref, - callback, - }, - ]) + getCbFromNested() + const callbacks = { + ...inCtx.callbacks, + ...getCbFromNested(), + [ref]: callback, + } return { ...lastCtx, diff --git a/packages/bot/package.json b/packages/bot/package.json index 36331cd..fa7dc12 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/bot", - "version": "0.0.26-alpha.0", + "version": "0.0.41-alpha.0", "description": "", "main": "./lib/bundle.bot.cjs", "scripts": { diff --git a/packages/bot/rollup-bot.config.js b/packages/bot/rollup-bot.config.js index acd4229..f8ffa2a 100644 --- a/packages/bot/rollup-bot.config.js +++ b/packages/bot/rollup-bot.config.js @@ -3,14 +3,23 @@ const commonjs = require('@rollup/plugin-commonjs') const { nodeResolve } = require('@rollup/plugin-node-resolve') const { join } = require('path') -const PATH = join(__dirname, 'lib', 'bundle.bot.cjs') - -module.exports = { - input: join(__dirname, 'index.js'), - output: { - banner: banner['banner.output'].join(''), - file: PATH, - format: 'cjs', +module.exports = [ + { + input: join(__dirname, 'index.js'), + output: { + banner: banner['banner.output'].join(''), + file: join(__dirname, 'lib', 'bundle.bot.cjs'), + format: 'cjs', + }, + plugins: [commonjs(), nodeResolve()], }, - plugins: [commonjs(), nodeResolve()], -} + { + input: join(__dirname, 'index.js'), + output: { + banner: banner['banner.output'].join(''), + file: join(__dirname, 'lib', 'bundle.bot.cjs'), + format: 'cjs', + }, + plugins: [commonjs(), nodeResolve()], + }, +] diff --git a/packages/bot/tests/bot.class.test.js b/packages/bot/tests/bot.class.test.js index 74fdb79..d74fdad 100644 --- a/packages/bot/tests/bot.class.test.js +++ b/packages/bot/tests/bot.class.test.js @@ -11,7 +11,7 @@ const { } = require('../index') class MockFlow { - allCallbacks = [{ callback: () => console.log('') }] + allCallbacks = { ref: () => 1 } flowSerialize = [] flowRaw = [] find = (arg) => { diff --git a/packages/bot/utils/flattener.js b/packages/bot/utils/flattener.js new file mode 100644 index 0000000..875736d --- /dev/null +++ b/packages/bot/utils/flattener.js @@ -0,0 +1,25 @@ +const flatObject = (listArray = []) => { + const cbNestedList = Array.isArray(listArray) ? listArray : [] + + if (!listArray.length) return {} + + const cbNestedObj = cbNestedList + .map(({ ctx }) => ctx?.callbacks) + .filter((i) => !!i) + const queueCb = cbNestedObj.reduce((acc, current) => { + const getKeys = Object.keys(current) + const parse = getKeys.map((icb, i) => ({ + [icb]: Object.values(current)[i], + })) + return [...acc, ...parse] + }, []) + + const flatObj = {} + for (const iteration of queueCb) { + const [keyCb] = Object.keys(iteration) + flatObj[keyCb] = iteration[keyCb] + } + return flatObj +} + +module.exports = { flatObject } diff --git a/packages/cli/interactive/index.js b/packages/cli/interactive/index.js index 3dc16c4..a0a4034 100644 --- a/packages/cli/interactive/index.js +++ b/packages/cli/interactive/index.js @@ -1,8 +1,8 @@ const prompts = require('prompts') -const { yellow, red, cyan, bgMagenta } = require('kleur') -const { copyBaseApp } = require('../create-app') const { join } = require('path') +const { yellow, red, cyan, bgMagenta } = require('kleur') const { existsSync } = require('fs') +const { copyBaseApp } = require('../create-app') const { checkNodeVersion, checkOs } = require('../check') const bannerDone = () => { @@ -34,7 +34,7 @@ const startInteractive = async () => { choices: [ { title: 'whatsapp-web.js (gratis)', value: 'wweb' }, { title: 'Venom (gratis)', value: 'venom' }, - { title: 'Baileys (gratis)', value: 'bailey' }, + { title: 'Baileys (gratis)', value: 'baileys' }, { title: 'Twilio', value: 'twilio' }, { title: 'API Oficial (Meta)', value: 'meta' }, ], @@ -48,9 +48,9 @@ const startInteractive = async () => { message: '¿Cuál base de datos quieres utilizar?', choices: [ { title: 'Memory', value: 'memory' }, + { title: 'Json', value: 'json' }, { title: 'Mongo', value: 'mongo' }, { title: 'MySQL', value: 'mysql' }, - { title: 'Json', value: 'json', disabled: true }, ], max: 1, hint: 'Espacio para seleccionar', diff --git a/packages/cli/package.json b/packages/cli/package.json index bfa705d..5a86b89 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/cli", - "version": "0.0.33-alpha.0", + "version": "0.0.48-alpha.0", "description": "", "main": "index.js", "devDependencies": { diff --git a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js index e851ca4..25bd2a6 100644 --- a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js +++ b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js @@ -96,12 +96,24 @@ class DialogFlowCXContext extends CoreClass { } if (res.message == 'payload') { - const { values } = res.payload.fields.buttons.listValue - const buttonsArray = values.map((values) => { - const { stringValue } = values.structValue.fields.body - return { body: stringValue } - }) - return { buttons: buttonsArray } + const { + media = null, + buttons = [], + answer = '', + } = res.payload.fields + const buttonsArray = buttons?.listValue?.values?.map( + (btnValue) => { + const { stringValue } = btnValue.structValue.fields.body + return { body: stringValue } + } + ) + return { + answer: answer?.stringValue, + options: { + media: media?.stringValue, + buttons: buttonsArray, + }, + } } }) diff --git a/packages/contexts/src/dialogflow/dialogflow.class.js b/packages/contexts/src/dialogflow/dialogflow.class.js index db34e50..ffe50e7 100644 --- a/packages/contexts/src/dialogflow/dialogflow.class.js +++ b/packages/contexts/src/dialogflow/dialogflow.class.js @@ -93,8 +93,9 @@ class DialogFlowContext extends CoreClass { if (msgPayload && msgPayload?.payload) { const { fields } = msgPayload.payload const mapButtons = fields?.buttons?.listValue?.values.map((m) => { - return m?.structValue?.fields?.body?.stringValue + return { body: m?.structValue?.fields?.body?.stringValue } }) + customPayload = { media: fields?.media?.stringValue, buttons: mapButtons, diff --git a/packages/create-bot-whatsapp/package.json b/packages/create-bot-whatsapp/package.json index 8d0fa00..c96f366 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.44-alpha.0", + "version": "0.0.59-alpha.0", "description": "", "main": "./lib/bundle.create-bot-whatsapp.cjs", "files": [ diff --git a/packages/database/package.json b/packages/database/package.json index 48ba464..50a5cee 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/database", - "version": "0.0.25-alpha.0", + "version": "0.0.40-alpha.0", "description": "Esto es el conector a mysql, pg, mongo", "main": "./lib/mock/index.cjs", "keywords": [], diff --git a/packages/database/rollup-database.config.js b/packages/database/rollup-database.config.js index 844d414..5d4c3c5 100644 --- a/packages/database/rollup-database.config.js +++ b/packages/database/rollup-database.config.js @@ -35,6 +35,7 @@ module.exports = [ output: { banner: banner['banner.output'].join(''), file: join(__dirname, 'lib', 'json', 'index.cjs'), + format: 'cjs', }, plugins: [commonjs()], }, diff --git a/packages/database/src/json/index.js b/packages/database/src/json/index.js index cf09681..83450d5 100644 --- a/packages/database/src/json/index.js +++ b/packages/database/src/json/index.js @@ -32,7 +32,7 @@ class JsonFileAdapter { } saveData(data) { - writeFileSync(this.pathFile, JSON.stringify(data)) + writeFileSync(this.pathFile, JSON.stringify(data, null, 2)) } getPrevByNumber = async (from) => { diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore index a88d7a8..4ab2c7f 100644 --- a/packages/docs/.gitignore +++ b/packages/docs/.gitignore @@ -41,3 +41,6 @@ package-lock.json # Cloudflare functions/**/*.js + +# Netlify +.netlify diff --git a/packages/docs/README.md b/packages/docs/README.md index 4c8a753..dcbc6c4 100644 --- a/packages/docs/README.md +++ b/packages/docs/README.md @@ -285,3 +285,72 @@ By default, the Cloudflare pages adaptor _does not_ include a `public/_routes.js In the above example, it's saying _all_ pages should be SSR'd. However, the root static files such as `/favicon.ico` and any static assets in `/build/*` should be excluded from the Functions, and instead treated as a static file. In most cases the generated `dist/_routes.json` file is ideal. However, if you need more granular control over each path, you can instead provide you're own `public/_routes.json` file. When the project provides its own `public/_routes.json` file, then the Cloudflare adaptor will not auto-generate the routes config and instead use the committed one within the `public` directory. + +## Express Server + +This app has a minimal [Express server](https://expressjs.com/) implementation. After running a full build, you can preview the build using the command: + +``` +npm run serve +``` + +Then visit [http://localhost:8080/](http://localhost:8080/) + +## Netlify + +This starter site is configured to deploy to [Netlify Edge Functions](https://docs.netlify.com/edge-functions/overview/), which means it will be rendered at an edge location near to your users. + +### Local development + +The [Netlify CLI](https://docs.netlify.com/cli/get-started/) can be used to preview a production build locally. To do so: First build your site, then to start a local server, run: + +1. Install Netlify CLI globally `npm i -g netlify-cli`. +2. Build your site with both ssr and static `npm run build`. +3. Start a local server with `npm run serve`. + In this project, `npm run serve` uses the `netlify dev` command to spin up a server that can handle Netlify's Edge Functions locally. +4. Visit [http://localhost:8888/](http://localhost:8888/) to check out your site. + +### Edge Functions Declarations + +[Netlify Edge Functions declarations](https://docs.netlify.com/edge-functions/declarations/) +can be configured to run on specific URL patterns. Each edge function declaration associates +one site path pattern with one function to execute on requests that match the path. A single request can execute a chain of edge functions from a series of declarations. A single edge function can be associated with multiple paths across various declarations. + +This is useful to determine if a page response should be Server-Side Rendered (SSR) or +if the response should use a static-site generated (SSG) `index.html` file instead. + +By default, the Netlify Edge adaptor will generate a `.netlify/edge-middleware/manifest.json` file, which is used by the Netlify deployment to determine which paths should, and should not, use edge functions. + +To override the generated manifest, you can [add a declaration](https://docs.netlify.com/edge-functions/declarations/#add-a-declaration) to the `netlify.toml` using the `[[edge_functions]]` config. For example: + +```toml +[[edge_functions]] + path = "/admin" + function = "auth" +``` + +### Deployments + +You can [deploy your site to Netlify](https://docs.netlify.com/site-deploys/create-deploys/) either via a Git provider integration or through the Netlify CLI. This starter site includes a `netlify.toml` file to configure your build for deployment. + +#### Deploying via Git + +Once your site has been pushed to your Git provider, you can either link it [in the Netlify UI](https://app.netlify.com/start) or use the CLI. To link your site to a Git provider from the Netlify CLI, run the command: + +```shell +netlify link +``` + +This sets up [continuous deployment](https://docs.netlify.com/site-deploys/create-deploys/#deploy-with-git) for your site's repo. Whenever you push new commits to your repo, Netlify starts the build process.. + +#### Deploying manually via the CLI + +If you wish to deploy from the CLI rather than using Git, you can use the command: + +```shell +netlify deploy --build +``` + +You must use the `--build` flag whenever you deploy. This ensures that the Edge Functions that this starter site relies on are generated and available when you deploy your site. + +Add `--prod` flag to deploy to production. diff --git a/packages/docs/adaptors/cloudflare-pages/vite.config.ts b/packages/docs/adaptors/netlify-edge/vite.config.ts similarity index 57% rename from packages/docs/adaptors/cloudflare-pages/vite.config.ts rename to packages/docs/adaptors/netlify-edge/vite.config.ts index dc2bfde..c932702 100644 --- a/packages/docs/adaptors/cloudflare-pages/vite.config.ts +++ b/packages/docs/adaptors/netlify-edge/vite.config.ts @@ -1,4 +1,4 @@ -import { cloudflarePagesAdaptor } from '@builder.io/qwik-city/adaptors/cloudflare-pages/vite' +import { netifyEdgeAdaptor } from '@builder.io/qwik-city/adaptors/netlify-edge/vite' import { extendConfig } from '@builder.io/qwik-city/vite' import baseConfig from '../../vite.config' @@ -7,11 +7,12 @@ export default extendConfig(baseConfig, () => { build: { ssr: true, rollupOptions: { - input: ['src/entry.cloudflare-pages.tsx', '@qwik-city-plan'], + input: ['src/entry.netlify-edge.tsx', '@qwik-city-plan'], }, + outDir: '.netlify/edge-functions/entry.netlify-edge', }, plugins: [ - cloudflarePagesAdaptor({ + netifyEdgeAdaptor({ staticGenerate: true, }), ], diff --git a/packages/docs/netlify.toml b/packages/docs/netlify.toml index 9324f51..4a0047a 100644 --- a/packages/docs/netlify.toml +++ b/packages/docs/netlify.toml @@ -1,7 +1,7 @@ [build] - publish = "dist" - command = "npm run build" -[[headers]] - for = "/build/*" - [headers.values] - Cache-Control = "public, max-age=31536000, immutable" \ No newline at end of file +publish = "dist" +command = "npm run build" + +[[edge_functions]] +path = "/*" +function = "entry.netlify-edge" \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json index c4fca4e..20d7b52 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -6,9 +6,9 @@ "build": "qwik build && npm run subfont", "build.client": "vite build", "build.preview": "vite build --ssr src/entry.preview.tsx", - "build.server": "vite build -c adaptors/cloudflare-pages/vite.config.ts", + "build.server": "vite build -c adaptors/netlify-edge/vite.config.ts", "build.types": "tsc --incremental --noEmit", - "deploy": "wrangler pages dev ./dist", + "deploy": "netlify deploy --prod", "dev": "vite --host --mode ssr", "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force", "fmt": "prettier --write .", @@ -20,7 +20,7 @@ "qwik": "qwik" }, "devDependencies": { - "@builder.io/qwik": "0.15.0", + "@builder.io/qwik": "0.16.1", "@builder.io/qwik-city": "0.0.128", "@fontsource/inter": "^4.5.14", "@iconify-json/tabler": "^1.1.49", @@ -28,15 +28,18 @@ "@tailwindcss/forms": "^0.5.3", "@tailwindcss/line-clamp": "^0.3.1", "@tailwindcss/typography": "^0.5.0", + "@types/compression": "^1.7.2", "@types/eslint": "8.4.10", "@types/node": "latest", "@typescript-eslint/eslint-plugin": "5.45.0", "@typescript-eslint/parser": "5.45.0", "autoprefixer": "10.4.13", + "compression": "^1.7.4", "eslint": "8.29.0", "eslint-plugin-qwik": "0.15.0", "imagetools-core": "^3.2.3", - "node-fetch": "3.3.0", + "netlify-cli": "^12.0.11", + "node-fetch": "^3.3.0", "postcss": "^8.4.19", "prettier": "2.8.0", "rehype-autolink-headings": "^6.1.1", @@ -45,10 +48,9 @@ "typescript": "4.8.4", "vite": "3.2.4", "vite-imagetools": "^4.0.11", - "vite-tsconfig-paths": "3.6.0", - "wrangler": "latest" + "vite-tsconfig-paths": "3.6.0" }, "engines": { - "node": ">=15.0.0" + "node": ">=17.0.0" } } diff --git a/packages/docs/public/_headers b/packages/docs/public/_headers index 0690cb4..08e5e27 100644 --- a/packages/docs/public/_headers +++ b/packages/docs/public/_headers @@ -1,4 +1,2 @@ -# https://developers.cloudflare.com/pages/platform/headers/ - /build/* Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable diff --git a/packages/docs/src/assets/images/full-logo-light.png b/packages/docs/src/assets/images/full-logo-light.png new file mode 100644 index 0000000..0f14f38 Binary files /dev/null and b/packages/docs/src/assets/images/full-logo-light.png differ diff --git a/packages/docs/src/assets/styles/fonts.css b/packages/docs/src/assets/styles/fonts.css index c2b1344..7ab0599 100644 --- a/packages/docs/src/assets/styles/fonts.css +++ b/packages/docs/src/assets/styles/fonts.css @@ -5,6 +5,7 @@ font-style: normal; font-named-instance: 'Regular'; src: url('../fonts/Inter-roman-latin.var.woff2') format('woff2'); + font-display: swap; } @font-face { @@ -14,6 +15,7 @@ font-style: italic; font-named-instance: 'Italic'; src: url('../fonts/Inter-italic-latin.var.woff2') format('woff2'); + font-display: swap; } @font-face { @@ -22,6 +24,7 @@ font-style: normal; src: url('../fonts/FiraCode-VF.woff2') format('woff2-variations'), url('../fonts/FiraCode-VF.woff') format('woff-variations'); + font-display: swap; } .font-mono { @@ -34,6 +37,7 @@ font-weight: 400; font-display: swap; src: url('../fonts/SourceSansPro-Regular.otf') format('opentype'); + font-display: swap; } @font-face { @@ -41,4 +45,5 @@ font-weight: 700; font-style: normal; src: url('../fonts/Ubuntu-Mono-bold.woff2') format('woff2'); + font-display: swap; } diff --git a/packages/docs/src/assets/styles/global.css b/packages/docs/src/assets/styles/global.css index 24f0392..86f3be1 100644 --- a/packages/docs/src/assets/styles/global.css +++ b/packages/docs/src/assets/styles/global.css @@ -39,6 +39,10 @@ @apply text-xs font-mono bg-stone-100 dark:bg-slate-600 dark:text-white text-red-500 p-1 rounded; } + .slote video { + @apply rounded drop-shadow-xl w-full md:w-full max-w-screen-md; + } + .slot pre { @apply w-full flex my-2; } @@ -47,6 +51,9 @@ @apply p-3 rounded md:w-full max-w-screen-md overflow-x-auto w-fit bg-gray-800 dark:bg-slate-800 ease-in duration-75 text-gray-100 text-xs shadow-xl; } + .slot iframe { + @apply rounded ease-in duration-75 text-gray-100 text-xs shadow-xl; + } .slot a { @apply text-sky-900 font-medium dark:text-sky-400 dark:hover:text-white; } diff --git a/packages/docs/src/components/atoms/Netlify.tsx b/packages/docs/src/components/atoms/Netlify.tsx new file mode 100644 index 0000000..9047eab --- /dev/null +++ b/packages/docs/src/components/atoms/Netlify.tsx @@ -0,0 +1,17 @@ +export const Netlify = () => ( + + + + + + +) diff --git a/packages/docs/src/components/atoms/Qwik.tsx b/packages/docs/src/components/atoms/Qwik.tsx new file mode 100644 index 0000000..26b7cef --- /dev/null +++ b/packages/docs/src/components/atoms/Qwik.tsx @@ -0,0 +1,27 @@ +export const Qwik = () => ( + + + + + + +) diff --git a/packages/docs/src/components/core/Social.tsx b/packages/docs/src/components/core/Social.tsx new file mode 100644 index 0000000..43d6ac2 --- /dev/null +++ b/packages/docs/src/components/core/Social.tsx @@ -0,0 +1,61 @@ +export const Social = () => { + return ( + <> + {/* + 💻 Conviértete en un Programador Backend aprendiendo todo de + Cloud y Nodejs + + + + + + + + + + + + */} + + + + + + + + + + + + ) +} diff --git a/packages/docs/src/components/widgets/CallToAction.tsx b/packages/docs/src/components/widgets/CallToAction.tsx index 3b1444b..1ca9b40 100644 --- a/packages/docs/src/components/widgets/CallToAction.tsx +++ b/packages/docs/src/components/widgets/CallToAction.tsx @@ -1,17 +1,23 @@ -import { component$ } from '@builder.io/qwik' +import { $, component$, QwikMouseEvent } from '@builder.io/qwik' + +export const handleVideo = $((ev: QwikMouseEvent) => { + const targetVideo = ev.target as HTMLVideoElement + targetVideo.play() +}) export default component$(() => { return ( -
-
-
+
+
+