diff --git a/packages/provider/src/meta/server.js b/packages/provider/src/meta/server.js index ef21f915e..482e6c5d6 100644 --- a/packages/provider/src/meta/server.js +++ b/packages/provider/src/meta/server.js @@ -1,6 +1,7 @@ const { EventEmitter } = require('node:events') const polka = require('polka') const { urlencoded, json } = require('body-parser') +const { generateRefprovider } = require('../../common/hash') class MetaWebHookServer extends EventEmitter { constructor(token, metaPort = 3000) { @@ -30,11 +31,103 @@ class MetaWebHookServer extends EventEmitter { const [message] = messages const to = body.entry[0].changes[0].value?.metadata?.display_phone_number - this.emit('message', { - from: message.from, - to, - body: message.type === 'text' ? message.text?.body : message.interactive?.button_reply.title, - }) + if (message.type === 'text') { + // Si es un mensaje de texto, extrae el cuerpo del mensaje + const body = message.text?.body + // Luego, crea un objeto con los datos que deseas enviar al cuerpo de la respuesta + const responseObj = { + type: message.type, + from: message.from, + to, + body, + } + // Finalmente, envĂ­a el objeto como respuesta utilizando el evento 'message' + this.emit('message', responseObj) + } else if (message.type === 'image') { + const body = generateRefprovider('_event_image_') + + const responseObj = { + type: message.type, + from: message.from, + to, + id: message.image.id, + body, + } + + this.emit('message', responseObj) + } else if (message.type === 'document') { + const body = generateRefprovider('_event_document_') + + const responseObj = { + type: message.type, + from: message.from, + to, + id: message.document.id, + body, + } + this.emit('message', responseObj) + } else if (message.type === 'video') { + const body = generateRefprovider('_event_video_') + + const responseObj = { + type: message.type, + from: message.from, + to, + id: message.video.id, + body, + } + + this.emit('message', responseObj) + } else if (message.type === 'location') { + const body = generateRefprovider('_event_location_') + + const responseObj = { + type: message.type, + from: message.from, + to, + latitude: message.location.latitude, + longitude: message.location.longitude, + body, + } + + this.emit('message', responseObj) + } else if (message.type === 'audio') { + const body = generateRefprovider('_event_audio_') + + const responseObj = { + type: message.type, + from: message.from, + to, + id: message.audio.id, + body, + } + + this.emit('message', responseObj) + } else if (message.type === 'sticker') { + const body = generateRefprovider('_event_sticker_') + + const responseObj = { + type: message.type, + from: message.from, + to, + id: message.sticker.id, + body, + } + + this.emit('message', responseObj) + } else if (message.type === 'contacts') { + const body = generateRefprovider('_event_contacts_') + + const responseObj = { + type: message.type, + from: message.from, + contacts: [{ name: message.contacts[0].name, phones: message.contacts[0].phones }], + to, + body, + } + + this.emit('message', responseObj) + } const json = JSON.stringify({ body }) res.end(json) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63396356c..29efbfcb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,6 +88,36 @@ importers: specifier: ^0.5.6 version: 0.5.6 + base-meta-memory: + dependencies: + '@bot-whatsapp/bot': + specifier: latest + version: 0.1.26 + '@bot-whatsapp/cli': + specifier: latest + version: 0.1.26 + '@bot-whatsapp/database': + specifier: latest + version: 0.1.26 + '@bot-whatsapp/provider': + specifier: latest + version: 0.1.26 + axios: + specifier: ^1.2.1 + version: 1.4.0 + body-parser: + specifier: ^1.20.1 + version: 1.20.1 + cors: + specifier: ^2.8.5 + version: 2.8.5 + morgan: + specifier: ^1.10.0 + version: 1.10.0 + polka: + specifier: ^0.5.2 + version: 0.5.2 + packages/bot: dependencies: dotenv: @@ -1627,6 +1657,15 @@ packages: dotenv: 16.0.3 dev: false + /@bot-whatsapp/bot@0.1.26: + resolution: + { + integrity: sha512-3RrLS5q7HM3OYBJiEY9rX+4sLJcvEXBt/UbQ3jINpGuGQXh2fJNrROqAqLT9MxuqkygopwK6H7DdMlz7eQ9Nsg==, + } + dependencies: + dotenv: 16.0.3 + dev: false + /@bot-whatsapp/cli@0.1.23: resolution: { @@ -1634,6 +1673,47 @@ packages: } hasBin: true + /@bot-whatsapp/cli@0.1.26: + resolution: + { + integrity: sha512-CFb9C0yXzqfD8uyLOxgvWarWqv0N5Hfs9rCO/WyTI8fOuAI2H4b2dyjL+K6+AonTpXAIKTAzLqMSkZvcZhxZLQ==, + } + hasBin: true + dependencies: + picocolors: 1.0.0 + dev: false + + /@bot-whatsapp/database@0.1.26: + resolution: + { + integrity: sha512-UtLW697EnWp+hMuegz+DxcamdGYlvciM8y8ylWreUkcYI3QT/D60QHMJBOBOGRNx/VP8tkfqOmlYejiOTownWg==, + } + dependencies: + dotenv: 16.0.3 + mongodb: 4.14.0 + mysql2: 2.3.3 + transitivePeerDependencies: + - aws-crt + dev: false + + /@bot-whatsapp/provider@0.1.26: + resolution: + { + integrity: sha512-dnud9C9qj4vsOlqPcu7rQ1I3lfm4ECcYkEeuitLijUK5WEHWZ+VC8/ajSOCbuJd6EMU5sBY2GpQQpa4fVmBeCA==, + } + dependencies: + '@bot-whatsapp/bot': 0.1.26 + '@ffmpeg-installer/ffmpeg': 1.1.0 + combine-image: 1.0.3 + fluent-ffmpeg: 2.1.2 + follow-redirects: 1.15.2 + qr-image: 3.2.0 + rimraf: 3.0.2 + sharp: 0.30.7 + transitivePeerDependencies: + - debug + dev: false + /@bugsnag/browser@7.20.0: resolution: { @@ -5848,6 +5928,19 @@ packages: } dev: false + /axios@1.4.0: + resolution: + { + integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==, + } + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /babel-extract-comments@1.0.0: resolution: { @@ -5950,6 +6043,16 @@ packages: pascalcase: 0.1.1 dev: true + /basic-auth@2.0.1: + resolution: + { + integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==, + } + engines: { node: '>= 0.8' } + dependencies: + safe-buffer: 5.1.2 + dev: false + /bcrypt-pbkdf@1.0.2: resolution: { @@ -6074,7 +6177,7 @@ packages: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9(supports-color@9.3.1) + debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -6086,7 +6189,6 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true /boolbase@1.0.0: resolution: @@ -6364,7 +6466,6 @@ packages: integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, } engines: { node: '>= 0.8' } - dev: true /c8@7.13.0: resolution: @@ -6485,7 +6586,6 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 - dev: true /call-me-maybe@1.0.2: resolution: @@ -7347,7 +7447,6 @@ packages: integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, } engines: { node: '>= 0.6' } - dev: true /conventional-changelog-angular@5.0.13: resolution: @@ -7649,6 +7748,17 @@ packages: } dev: true + /cors@2.8.5: + resolution: + { + integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, + } + engines: { node: '>= 0.10' } + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: false + /cosmiconfig-typescript-loader@4.3.0(@types/node@20.1.0)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@4.9.5): resolution: { @@ -8125,6 +8235,19 @@ packages: } dev: true + /debug@2.6.9: + resolution: + { + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, + } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + /debug@2.6.9(supports-color@9.3.1): resolution: { @@ -10733,6 +10856,19 @@ packages: from2: 2.3.0 dev: true + /follow-redirects@1.15.2: + resolution: + { + integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, + } + engines: { node: '>=4.0' } + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /follow-redirects@1.15.2(debug@4.3.4): resolution: { @@ -10898,6 +11034,18 @@ packages: mime-types: 2.1.35 dev: true + /form-data@4.0.0: + resolution: + { + integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, + } + engines: { node: '>= 6' } + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + /formdata-polyfill@4.0.10: resolution: { @@ -11032,7 +11180,6 @@ packages: { integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, } - dev: true /function.prototype.name@1.1.5: resolution: @@ -11124,7 +11271,6 @@ packages: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 - dev: true /get-own-enumerable-property-symbols@3.0.2: resolution: @@ -11807,7 +11953,6 @@ packages: integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, } engines: { node: '>= 0.4' } - dev: true /has-to-string-tag-x@1.4.1: resolution: @@ -11894,7 +12039,6 @@ packages: engines: { node: '>= 0.4.0' } dependencies: function-bind: 1.1.1 - dev: true /hasbin@1.2.3: resolution: @@ -12251,7 +12395,6 @@ packages: engines: { node: '>=0.10.0' } dependencies: safer-buffer: 2.1.2 - dev: true /iconv-lite@0.6.3: resolution: @@ -14673,7 +14816,6 @@ packages: integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, } engines: { node: '>= 0.6' } - dev: true /memoize-one@6.0.0: resolution: @@ -15424,6 +15566,22 @@ packages: - aws-crt dev: false + /morgan@1.10.0: + resolution: + { + integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==, + } + engines: { node: '>= 0.8.0' } + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + dev: false + /move-file@3.0.0: resolution: { @@ -16106,7 +16264,6 @@ packages: integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, } engines: { node: '>=0.10.0' } - dev: true /object-copy@0.1.0: resolution: @@ -16133,7 +16290,6 @@ packages: { integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, } - dev: true /object-is@1.1.5: resolution: @@ -16201,6 +16357,16 @@ packages: } dev: true + /on-finished@2.3.0: + resolution: + { + integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==, + } + engines: { node: '>= 0.8' } + dependencies: + ee-first: 1.1.1 + dev: false + /on-finished@2.4.1: resolution: { @@ -16216,7 +16382,6 @@ packages: integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, } engines: { node: '>= 0.8' } - dev: true /once@1.4.0: resolution: @@ -17903,7 +18068,6 @@ packages: { integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, } - dev: true /ps-list@8.1.1: resolution: @@ -18011,7 +18175,6 @@ packages: engines: { node: '>=0.6' } dependencies: side-channel: 1.0.4 - dev: true /qs@6.5.3: resolution: @@ -18112,7 +18275,6 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true /raw-body@2.5.2: resolution: @@ -18922,7 +19084,6 @@ packages: { integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, } - dev: true /safe-buffer@5.2.1: resolution: @@ -19220,7 +19381,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 object-inspect: 1.12.3 - dev: true /sift@7.0.1: resolution: @@ -21014,7 +21174,6 @@ packages: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true /typed-array-length@1.0.4: resolution: @@ -21329,7 +21488,6 @@ packages: integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, } engines: { node: '>= 0.8' } - dev: true /unset-value@1.0.0: resolution: @@ -21582,7 +21740,6 @@ packages: integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, } engines: { node: '>= 0.8' } - dev: true /verror@1.10.0: resolution: