From abe05e9ad1d9e9f52de111e1031fd0b686db4d26 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Thu, 11 Aug 2022 14:39:45 +0200 Subject: [PATCH] add meta, twilio --- .env.example | 5 + .gitignore | 2 +- package.json | 8 +- pnpm-lock.yaml | 237 +++++++++++++++--- src/application/lead.create.ts | 2 +- ...xternal.ts => lead-external.repository.ts} | 0 src/domain/lead.repository.ts | 4 + src/infrastructure/ioc.ts | 4 +- .../repositories/meta.repository.ts | 47 ++++ .../repositories/twilio.repository.ts | 35 ++- .../repositories/ws.external.ts | 7 +- tsconfig.json | 4 +- 12 files changed, 303 insertions(+), 52 deletions(-) create mode 100644 .env.example rename src/domain/{lead.external.ts => lead-external.repository.ts} (100%) create mode 100644 src/infrastructure/repositories/meta.repository.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..940a198 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +TWILIO_SID= +TWILIO_TOKEN= +TWILIO_FROM= +META_ID_NUMBER= +META_TOKEN= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 080ac3a..e1076ab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ node_modules dist tmp/* !tmp/.gitkeep -.wwebjs_auth/session \ No newline at end of file +.wwebjs_auth \ No newline at end of file diff --git a/package.json b/package.json index af7e7b3..38285d8 100644 --- a/package.json +++ b/package.json @@ -5,25 +5,31 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon ./src/app.ts" + "dev": "nodemon ./src/app.ts", + "start": "node ./dist/app.js", + "build": "tsc -p ." }, "keywords": [], "author": "", "license": "ISC", "dependencies": { + "axios": "^0.27.2", "cors": "^2.8.5", "dotenv": "^16.0.1", "express": "^4.18.1", "node-dependency-injection": "^3.0.3", "qr-image": "^3.2.0", + "twilio": "^3.80.1", "uuid": "^8.3.2", "whatsapp-web.js": "^1.17.1" }, "devDependencies": { + "@types/axios": "^0.14.0", "@types/cors": "^2.8.12", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.13", "@types/qr-image": "^3.2.5", + "@types/twilio": "^3.19.3", "@types/uuid": "^8.3.4", "typescript": "^4.7.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c8b2f8..497f8d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,36 +1,42 @@ -lockfileVersion: 5.4 +lockfileVersion: 5.3 specifiers: + '@types/axios': ^0.14.0 '@types/cors': ^2.8.12 '@types/dotenv': ^8.2.0 '@types/express': ^4.17.13 '@types/qr-image': ^3.2.5 + '@types/twilio': ^3.19.3 '@types/uuid': ^8.3.4 - D: ^1.0.0 + axios: ^0.27.2 cors: ^2.8.5 dotenv: ^16.0.1 express: ^4.18.1 node-dependency-injection: ^3.0.3 qr-image: ^3.2.0 + twilio: ^3.80.1 typescript: ^4.7.4 uuid: ^8.3.2 whatsapp-web.js: ^1.17.1 dependencies: - D: 1.0.0 + axios: 0.27.2 cors: 2.8.5 dotenv: 16.0.1 express: 4.18.1 node-dependency-injection: 3.0.3_typescript@4.7.4 qr-image: 3.2.0 + twilio: 3.80.1 uuid: 8.3.2 whatsapp-web.js: 1.17.1 devDependencies: + '@types/axios': 0.14.0 '@types/cors': 2.8.12 '@types/dotenv': 8.2.0 '@types/express': 4.17.13 '@types/qr-image': 3.2.5 + '@types/twilio': 3.19.3 '@types/uuid': 8.3.4 typescript: 4.7.4 @@ -152,6 +158,15 @@ packages: resolution: {integrity: sha512-wtnBAETBVYZ9GvcbgdswRVSLkFkYAGv1KzwBBTeRXvGT9sb9cPllOgFFWXCn9PyARQ0H+Ijz6mmoRrGateUDxQ==} dev: false + /@types/axios/0.14.0: + resolution: {integrity: sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==} + deprecated: This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed! + dependencies: + axios: 0.27.2 + transitivePeerDependencies: + - debug + dev: true + /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: @@ -221,6 +236,16 @@ packages: '@types/node': 18.6.5 dev: true + /@types/twilio/3.19.3: + resolution: {integrity: sha512-W53Z0TDCu6clZ5CzTWHRPnpQAad+AANglx6WiQ4Mkxxw21o4BYBx5EhkfR6J4iYqY58rtWB3r8kDGJ4y1uTUGQ==} + deprecated: This is a stub types definition. twilio provides its own type definitions, so you do not need this installed. + dependencies: + twilio: 3.80.1 + transitivePeerDependencies: + - debug + - supports-color + dev: true + /@types/uuid/8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true @@ -267,11 +292,6 @@ packages: eslint-visitor-keys: 3.3.0 dev: false - /D/1.0.0: - resolution: {integrity: sha512-nQvrCBu7K2pSSEtIM0EEF03FVjcczCXInMt3moLNFbjlWx6bZrX72uT6/1uAXDbnzGUAx9gTyDiQ+vrFi663oA==} - deprecated: Package no longer supported. Contact support@npmjs.com for more info. - dev: false - /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -287,7 +307,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: false /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -309,10 +328,31 @@ packages: engines: {node: '>=8'} dev: false + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + /axios/0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.1 + transitivePeerDependencies: + - debug + + /axios/0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.1 + form-data: 4.0.0 + transitivePeerDependencies: + - debug + /babel-plugin-polyfill-corejs2/0.3.2: resolution: {integrity: sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==} peerDependencies: @@ -378,8 +418,6 @@ packages: raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color dev: false /brace-expansion/1.1.11: @@ -411,6 +449,9 @@ packages: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: false + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: @@ -432,7 +473,6 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.2 - dev: false /caniuse-lite/1.0.30001375: resolution: {integrity: sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==} @@ -467,6 +507,12 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: false + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + /commander/8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -527,13 +573,11 @@ packages: - encoding dev: false + /dayjs/1.11.4: + resolution: {integrity: sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==} + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true dependencies: ms: 2.0.0 dev: false @@ -548,7 +592,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: false /defaults/1.0.3: resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} @@ -557,6 +600,10 @@ packages: dev: false optional: true + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -588,6 +635,11 @@ packages: wcwidth: 1.0.1 dev: false + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false @@ -661,8 +713,6 @@ packages: type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 - transitivePeerDependencies: - - supports-color dev: false /extract-zip/2.0.1: @@ -720,8 +770,6 @@ packages: parseurl: 1.3.3 statuses: 2.0.1 unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color dev: false /find-up/4.1.0: @@ -740,6 +788,23 @@ packages: which: 1.3.1 dev: false + /follow-redirects/1.15.1: + resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: 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 + /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -760,7 +825,6 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false /get-intrinsic/1.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} @@ -768,7 +832,6 @@ packages: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 - dev: false /get-stream/5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} @@ -815,14 +878,12 @@ packages: /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: false /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: false /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -843,7 +904,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: false /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -917,10 +977,38 @@ packages: hasBin: true dev: false + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + /jsqr/1.4.0: resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==} dev: false + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -932,6 +1020,30 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: false + /lodash.includes/4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + /lodash.isinteger/4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + /lodash.isstring/4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + /lodash.once/4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -969,14 +1081,12 @@ packages: /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: false /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: false /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -1006,11 +1116,9 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -1064,7 +1172,6 @@ packages: /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: false /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -1146,6 +1253,9 @@ packages: find-up: 4.1.0 dev: false + /pop-iterate/1.0.1: + resolution: {integrity: sha512-HRCx4+KJE30JhX84wBN4+vja9bNfysxg1y28l0DuJmkoaICiv2ZSilKddbS48pq50P8d2erAhqDLbp47yv3MbQ==} + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -1194,6 +1304,13 @@ packages: - utf-8-validate dev: false + /q/2.0.3: + resolution: {integrity: sha512-gv6vLGcmAOg96/fgo3d9tvA4dJNZL3fMyBqVRrGxQ+Q/o4k9QzbJ3NQF9cOO/71wRodoXhaPgphvMFU68qVAJQ==} + dependencies: + asap: 2.0.6 + pop-iterate: 1.0.1 + weak-map: 1.0.8 + /qr-image/3.2.0: resolution: {integrity: sha512-rXKDS5Sx3YipVsqmlMJsJsk6jXylEpiHRC2+nJy66fxA5ExYyGa4PqwteW69SaVmAb2OQ18HbYriT7cGQMbduw==} dev: false @@ -1203,7 +1320,9 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: false + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1237,6 +1356,9 @@ packages: resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} dev: false + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -1258,6 +1380,9 @@ packages: glob: 7.2.3 dev: false + /rootpath/0.1.2: + resolution: {integrity: sha512-R3wLbuAYejpxQjL/SjXo1Cjv4wcJECnMRT/FlcCfTwCBhaji9rWaRCoVEQ1SPiTJ4kKK+yh+bZLAV7SCafoDDw==} + /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -1266,12 +1391,18 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false + /scmp/2.1.0: + resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==} + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true @@ -1307,8 +1438,6 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 statuses: 2.0.1 - transitivePeerDependencies: - - supports-color dev: false /serve-static/1.15.0: @@ -1319,8 +1448,6 @@ packages: escape-html: 1.0.3 parseurl: 1.3.3 send: 0.18.0 - transitivePeerDependencies: - - supports-color dev: false /setprototypeof/1.2.0: @@ -1333,7 +1460,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.1.2 object-inspect: 1.12.2 - dev: false /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -1422,6 +1548,25 @@ packages: typescript: 4.7.4 dev: false + /twilio/3.80.1: + resolution: {integrity: sha512-eFqYefcuFCoHU3nSsYFdWjBpbzj3EdMl+kBwB1Uhv3+YC/Zt/WhEMZRG9YQqdQvApEhFlNSiO8YAvqvOvUN36w==} + engines: {node: '>=6.0'} + dependencies: + axios: 0.26.1 + dayjs: 1.11.4 + https-proxy-agent: 5.0.1 + jsonwebtoken: 8.5.1 + lodash: 4.17.21 + q: 2.0.3 + qs: 6.10.3 + rootpath: 0.1.2 + scmp: 2.1.0 + url-parse: 1.5.10 + xmlbuilder: 13.0.2 + transitivePeerDependencies: + - debug + - supports-color + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -1434,6 +1579,7 @@ packages: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true + dev: true /unbzip2-stream/1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} @@ -1458,6 +1604,12 @@ packages: picocolors: 1.0.0 dev: false + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false @@ -1491,6 +1643,9 @@ packages: dev: false optional: true + /weak-map/1.0.8: + resolution: {integrity: sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==} + /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false @@ -1544,6 +1699,10 @@ packages: optional: true dev: false + /xmlbuilder/13.0.2: + resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==} + engines: {node: '>=6.0'} + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: false diff --git a/src/application/lead.create.ts b/src/application/lead.create.ts index fea442b..ea87fa2 100644 --- a/src/application/lead.create.ts +++ b/src/application/lead.create.ts @@ -1,4 +1,4 @@ -import LeadExternal from "../domain/lead.external"; +import LeadExternal from "../domain/lead-external.repository"; import LeadRepository from "../domain/lead.repository"; export class LeadCreate { diff --git a/src/domain/lead.external.ts b/src/domain/lead-external.repository.ts similarity index 100% rename from src/domain/lead.external.ts rename to src/domain/lead-external.repository.ts diff --git a/src/domain/lead.repository.ts b/src/domain/lead.repository.ts index 73bf665..b8e3051 100644 --- a/src/domain/lead.repository.ts +++ b/src/domain/lead.repository.ts @@ -1,5 +1,9 @@ import { Lead } from "./lead"; +/** + * Esta la interfaz que debe de cumplir el repositorio de infraestructura + * mysql o mongo o etc + */ export default interface LeadRepository { save({ message, diff --git a/src/infrastructure/ioc.ts b/src/infrastructure/ioc.ts index cec92ad..8921db3 100644 --- a/src/infrastructure/ioc.ts +++ b/src/infrastructure/ioc.ts @@ -1,7 +1,9 @@ import { ContainerBuilder } from "node-dependency-injection"; import { LeadCreate } from "../application/lead.create"; import LeadCtrl from "./controller/lead.ctrl"; +import MetaRepository from "./repositories/meta.repository"; import MockRepository from "./repositories/mock.repository"; +import TwilioService from "./repositories/twilio.repository"; import WsTransporter from "./repositories/ws.external"; const container = new ContainerBuilder(); @@ -9,7 +11,7 @@ const container = new ContainerBuilder(); /** * Inicamos servicio de WS / Bot / Twilio */ -container.register("ws.transporter", WsTransporter); +container.register("ws.transporter", MetaRepository); const wsTransporter = container.get("ws.transporter"); container.register("db.repository", MockRepository); diff --git a/src/infrastructure/repositories/meta.repository.ts b/src/infrastructure/repositories/meta.repository.ts new file mode 100644 index 0000000..dc36eb2 --- /dev/null +++ b/src/infrastructure/repositories/meta.repository.ts @@ -0,0 +1,47 @@ +import "dotenv/config"; +import axios from "axios"; +import LeadExternal from "../../domain/lead-external.repository"; + +const META_TOKEN = process.env.META_TOKEN || ""; +const META_ID_NUMBER = process.env.META_ID_NUMBER || ""; +const URL = `https://graph.facebook.com/v13.0/${META_ID_NUMBER}/messages`; + +export default class MetaRepository implements LeadExternal { + async sendMsg({ + message, + phone, + }: { + message: string; + phone: string; + }): Promise { + try{ + const body = this.parseBody({message, phone}) + const response = await axios.post(URL,body, { + headers: { + Authorization: `Bearer ${META_TOKEN}`, + }, + }) as any; + + return response.data + }catch(e){ + return Promise.resolve(e) + } + } + + private parseBody ({message, phone}:{message:string,phone:string}){ + const body = { + "messaging_product": "whatsapp", + "to": phone, + "type": "template", + "template": { + "name": "hello_world", + "language": { + "code": "en_US" + } + } + } + return body + } + + +} diff --git a/src/infrastructure/repositories/twilio.repository.ts b/src/infrastructure/repositories/twilio.repository.ts index 4245344..f8dc78c 100644 --- a/src/infrastructure/repositories/twilio.repository.ts +++ b/src/infrastructure/repositories/twilio.repository.ts @@ -1,8 +1,31 @@ -import LeadExternal from "../../domain/lead.external"; +import "dotenv/config"; +import { Twilio } from "twilio"; +import LeadExternal from "../../domain/lead-external.repository"; -export class TwilioService implements LeadExternal { - sendMsg({ message, phone }: { message: string; phone: string; }): Promise { - return Promise.resolve('SE_ENVIO_CORRECTAMENTE') +const accountSid = process.env.TWILIO_SID || ""; +const authToken = process.env.TWILIO_TOKEN || ""; +const fromNumber = process.env.TWILIO_FROM || ""; + +export default class TwilioService extends Twilio implements LeadExternal { + constructor() { + super(accountSid, authToken); + } + async sendMsg({ + message, + phone, + }: { + message: string; + phone: string; + }): Promise { + try{ + const parsePhone = `+${phone}` + const mapMsg = { body: message, to: parsePhone, from:fromNumber }; + const response = await this.messages.create(mapMsg); + return response + }catch(e){ + console.log(e) + return Promise.reject(e) } - -} \ No newline at end of file + } +} + diff --git a/src/infrastructure/repositories/ws.external.ts b/src/infrastructure/repositories/ws.external.ts index 20dd72d..809b390 100644 --- a/src/infrastructure/repositories/ws.external.ts +++ b/src/infrastructure/repositories/ws.external.ts @@ -1,6 +1,6 @@ import { Client, LocalAuth } from "whatsapp-web.js"; import { image as imageQr } from "qr-image"; -import LeadExternal from "../../domain/lead.external"; +import LeadExternal from "../../domain/lead-external.repository"; /** * Extendemos los super poderes de whatsapp-web @@ -28,7 +28,10 @@ class WsTransporter extends Client implements LeadExternal { console.log("LOGIN_FAIL"); }); - this.on("qr", (qr) => this.generateImage(qr)); + this.on("qr", (qr) => { + console.log('Escanea el codigo QR que esta en la carepta tmp') + this.generateImage(qr) + }); } /** diff --git a/tsconfig.json b/tsconfig.json index 75dcaea..b31b3b3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "outDir": "./dist", /* Visit https://aka.ms/tsconfig to read more about this file */ /* Projects */ @@ -99,5 +100,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + }, + "include": ["**/*"] }