This commit is contained in:
Leifer Mendez
2022-11-10 21:16:22 +01:00
parent 4216cdd1e5
commit 228530a454
14 changed files with 1891 additions and 3136 deletions

15
packages/cli/node_modules/.bin/cross-env generated vendored Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../../../../node_modules/cross-env/src/bin/cross-env.js" "$@"
ret=$?
else
node "$basedir/../../../../node_modules/cross-env/src/bin/cross-env.js" "$@"
ret=$?
fi
exit $ret

15
packages/cli/node_modules/.bin/cross-env-shell generated vendored Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../../../../node_modules/cross-env/src/bin/cross-env-shell.js" "$@"
ret=$?
else
node "$basedir/../../../../node_modules/cross-env/src/bin/cross-env-shell.js" "$@"
ret=$?
fi
exit $ret

7
packages/cli/node_modules/.bin/cross-env-shell.cmd generated vendored Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env-shell.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env-shell.js" %*
)

7
packages/cli/node_modules/.bin/cross-env.cmd generated vendored Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env.js" %*
)

View File

@@ -1,24 +0,0 @@
const ProviderClass = require('../../core/classes/provider.class')
class MockSetting {
enviar = async (number, msg) => {
return Promise.resolve('1')
}
}
const mock = new MockSetting()
class MockProvider extends ProviderClass {
vendor
constructor() {
super()
this.vendor = mock
}
sendMessage = async (userId, message) => {
const status = await this.vendor.enviar(userId, message)
return { userId, message, status }
}
}
module.exports = MockProvider

View File

@@ -0,0 +1,29 @@
const { ProviderClass } = require('@bot-whatsapp/core')
class MockProvider extends ProviderClass {
constructor() {
super()
this.init()
}
delaySendMessage = (miliseconds, eventName) =>
new Promise((res) =>
setTimeout(() => {
const payload = { data: eventName }
this.emit(eventName, payload)
res
}, miliseconds)
)
sendMessage = async (userId, message) => {
return Promise.resolve({ userId, message })
}
init = () =>
Promise.all([
this.delaySendMessage(500, 'ready'),
this.delaySendMessage(1500, 'message'),
])
}
module.exports = new MockProvider()

View File

@@ -1,71 +0,0 @@
const { createWriteStream } = require('fs')
const qr = require('qr-image')
const { Client, LocalAuth } = require('whatsapp-web.js')
//TODO: Acoplamiento OJO
const { ProviderClass } = require('../../index').botcore
const WebWhatsappVendor = new Client({
authStrategy: new LocalAuth(),
})
/**
* TODO esto se debe mover a un utils.js
* @param {*} number
* @returns
*/
const cleanNumber = (number) => {
number = number.replace('@c.us', '')
number = `${number}@c.us`
return number
}
const generateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
console.log(`⚡ Recuerda que el QR se actualiza cada minuto ⚡'`)
console.log(`⚡ Actualiza F5 el navegador para mantener el mejor QR⚡`)
}
//////////////////////////////////////////////////////
class WebWhatsappProvider extends ProviderClass {
vendor
constructor(_vendor) {
super()
this.vendor = _vendor
this.vendor.on('qr', (qr) => {
this.emit('require_action', {
eventName: 'require_action',
instructions: `Debes escanear el QR Code para iniciar session reivsa qr.svg`,
})
generateImage(qr)
})
this.vendor.on('ready', (ready) =>
this.emit('ready', { eventName: 'ready', ...ready })
)
this.vendor.on('auth_failure', (error) =>
this.emit('error', { eventName: 'error', ...error })
)
this.vendor.on('authenticated', (authenticated) =>
this.emit('ready', { eventName: 'authenticated', ...authenticated })
)
this.vendor.on('message', (message) =>
this.emit('message', { eventName: 'message', ...message })
)
this.vendor.initialize()
}
sendMessage = async (userId, message) => {
const number = cleanNumber(userId)
return this.vendor.sendMessage(number, message)
}
}
/**
* Injectamos!
*/
module.exports = new WebWhatsappProvider(WebWhatsappVendor)

View File

@@ -0,0 +1,62 @@
const { Client, LocalAuth } = require('whatsapp-web.js')
const { ProviderClass } = require('@bot-whatsapp/core')
const { cleanNumber, generateImage } = require('./utils')
const WebWhatsappVendor = new Client({
authStrategy: new LocalAuth(),
})
class WebWhatsappProvider extends ProviderClass {
vendor
constructor(_vendor) {
super()
this.vendor = _vendor
for (const { event, func } of this.busEvents()) {
this.vendor.on(event, func)
}
this.vendor.initialize()
}
/**
* Mapeamos los eventos nativos de whatsapp-web.js a los que la clase Provider espera
* para tener un standar de eventos
* @returns
*/
busEvents = () => [
{
event: 'qr',
func: (qr) => {
this.emit('require_action', {
instructions: `Debes escanear el QR Code para iniciar session reivsa qr.svg`,
})
generateImage(qr)
},
},
{
event: 'ready',
func: () => this.emit('ready', true),
},
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{
event: 'authenticated',
func: () => this.emit('ready', true),
},
{
event: 'message',
func: (payload) => this.emit('message', payload),
},
]
sendMessage = async (userId, message) => {
const number = cleanNumber(userId)
return this.vendor.sendMessage(number, message)
}
}
module.exports = new WebWhatsappProvider(WebWhatsappVendor)

View File

@@ -0,0 +1,17 @@
const { createWriteStream } = require('fs')
const qr = require('qr-image')
const cleanNumber = (number) => {
number = number.replace('@c.us', '')
number = `${number}@c.us`
return number
}
const generateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
console.log(`⚡ Recuerda que el QR se actualiza cada minuto ⚡'`)
console.log(`⚡ Actualiza F5 el navegador para mantener el mejor QR⚡`)
}
module.exports = { cleanNumber, generateImage }

View File

@@ -9,7 +9,7 @@
"license": "ISC",
"devDependencies": {},
"dependencies": {
"qr-image": "^3.2.0",
"whatsapp-web.js": "^1.18.2"
"@bot-whatsapp/core": "*",
"qr-image": "^3.2.0"
}
}