From f0221c4c707d6f9f0ae797970f975a31367854af Mon Sep 17 00:00:00 2001 From: rawee Date: Thu, 26 Jan 2023 03:40:30 +0530 Subject: [PATCH] Whatsapp-Lite (Beta Mode) Added in Config Node --- .github/WhatsaaLite.png | Bin 0 -> 27600 bytes README.md | 15 +- admin.html | 11 +- admin.js | 189 ++++--- chats-in.js | 105 +++- chats-out.html | 2 +- chats-out.js | 92 +++- group-out.js | 160 +++++- package-lock.json | 848 ++++++++++++++++++++++++++++++- package.json | 7 +- whatsappLink.html | 28 +- whatsappLink.js | 250 ++++++--- reply.html => whatsappReply.html | 0 reply.js => whatsappReply.js | 0 14 files changed, 1456 insertions(+), 251 deletions(-) create mode 100644 .github/WhatsaaLite.png rename reply.html => whatsappReply.html (100%) rename reply.js => whatsappReply.js (100%) diff --git a/.github/WhatsaaLite.png b/.github/WhatsaaLite.png new file mode 100644 index 0000000000000000000000000000000000000000..fad7a527d089391d1026727947dcb3fbd538db0d GIT binary patch literal 27600 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 1629af9..9d27dd7 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ Simple node for connecting Node-Red to Whatsapp :iphone: Currently in developing mode, Continous updated may encounter. :sweat_smile: -Working on WhatsappLite (Lite version of whatsapp Web baised on web sockets.) - ## To Connect with Whatsapp ![](./.github/admin_login.gif) @@ -16,6 +14,15 @@ Working on WhatsappLite (Lite version of whatsapp Web baised on web sockets.) 4. Done - Whatsapp Connected. 5. Send "`!nodered`" to get a reply from Node-Red in Chats/Groups. +### if Whatsapp Web not working ? +Their is lite version also avilable in it. Totally different from Whatapp-Web, +Whatsapp-Lite (Beta Mode) works on Web-Sockets only, It might work for you also. + +Simply chosse `Whatsapp Lite` in Whatsapp-Link configration node. + +![](./.github/WhatsaaLite.png) + + *It will create a Whatsapp Web instance in your machine and store your session locally in Node-RED. All data are store in users `/.node-red/Whatsapp-Link` folder. Near you Node-Red's settings.js file.* @@ -62,7 +69,7 @@ Admin Node generate QR Code just below the node for easy connection with whatsap |--------|-------------| | `msg.image` | Base64 (encoded image) | | `msg.payload` | Image Caption | - | `msg.toNumber` | Sender number (if number not provided in node) | + | `msg.toNumber` | Reciver number (if number not provided in node) | Don't forget to mention international dialing code befor your number. Number must be in format like +11 99999 99999 without any space. @@ -88,7 +95,7 @@ Issues and Suggestions are welcome [here.](https://github.com/raweee/node-red-co * `Ver-0.1.23` : Nodes are formatted correctly and names are updated. * `Ver-0.1.28` : Now QR Codes are directlly avilable in run time on Whatsapp-Admin-Node. * `Ver-0.1.30` : Message can be send to an Array of contacts provided at `msg.toNumber`. -* Working on WhatsappLite. +* `Ver-0.1.32` : Socket based `Whatsapp Lite` config node added in beta mode. Image message sending support added in chats-out node. ## Future Nodes Currently working on more Whatsapp Node and will be avilable soon - diff --git a/admin.html b/admin.html index d3eadfa..25257b5 100644 --- a/admin.html +++ b/admin.html @@ -24,10 +24,15 @@ } }; - var creatImageContainer = function(NodeID, qrImage) { + var adminNodeId = null; + RED.comms.subscribe("whatsappLinkNodeID", function (e, currentID) { + adminNodeId = currentID; + }) + + var creatImageContainer = function(NodeID) { let img = document.getElementById("whatsappLink-QRcode-" + NodeID) if (!img) { - const container = document.getElementById(NodeID) + const container = document.getElementById(adminNodeId) if (!container) { return } const img = document.createElementNS("http://www.w3.org/2000/svg", 'image') img.setAttribute('id', "whatsappLink-QRcode-" + NodeID) @@ -39,7 +44,7 @@ }; var renderQrCode = function(id, qrCodeImage){ - creatImageContainer(id, qrCodeImage) + creatImageContainer(id) let qrImage = document.getElementById("whatsappLink-QRcode-" + id); qrImage.setAttribute('href', qrCodeImage) qrImage.addEventListener("click", ()=> removeQrCode(id), {once:true}) diff --git a/admin.js b/admin.js index c3e41c1..8d0083e 100644 --- a/admin.js +++ b/admin.js @@ -5,95 +5,134 @@ module.exports = function(RED) { RED.nodes.createNode(this,config); var node = this; var whatsappLinkNode = RED.nodes.getNode(config.whatsappLink); - node.waClient = whatsappLinkNode.client; - node.WARestart = whatsappLinkNode.WARestart; - node.WAConnect = whatsappLinkNode.WAConnect; - node.destroy = whatsappLinkNode.WAClose; + node.client = whatsappLinkNode.client; + RED.comms.publish("whatsappLinkNodeID", node.id) function SetStatus(WAStatus, color){ node.status({fill:color,shape:"dot",text:WAStatus}); msg = {payload : WAStatus}; node.send(msg); }; - - // Commands recived for Whatsapp Admin. - this.on('input', async function(msg, send){ - if (msg.payload === "destroy") { - node.destroy(); - SetStatus("Disconnected","red"); - } - else if (msg.payload==="logout") { - node.waClient.logout(); - SetStatus("Logged Out","red"); - } - else if (msg.payload === "test"){ - msg.payload = await node.waClient.getState(); - node.send(msg); - } - else if (msg.payload === "restart"){ - node.WARestart(); - SetStatus("Connecting...", "yellow"); - }; - }); - - //Group Add/leave status----- - node.waClient.on('group_join', async (notification)=>{ - msg.chat = await notification.getChat(); - msg.payload = msg.chat.name; - msg.chatID = msg.chat.id.user || `No ID Avilable`; - msg.type = notification.type; - msg.notification = notification; - node.send(msg); - notification.reply('!Node-Red joined'); - }); - - node.waClient.on('group_leave', async (notification)=>{ - msg.chat = await notification.getChat(); - msg.payload = msg.chat.name; - msg.type = notification.type; - msg.notification = notification; - node.send(msg); - }); - - node.waClient.on('group_update', (msg)=>{ - node.send(msg); - }); - + - //whatsapp Status Parameters---- - SetStatus("Connecting whatsapp...", "yellow"); + // Commands recived for Whatsapp Admin. + this.on('input', async function(msg, send){ + if (msg.payload === "destroy") { + if(node.client.clientType === "waWebClient"){ + node.clinet.WAClose(); + SetStatus("Disconnected","red"); + } + } + else if (msg.payload==="logout") { + if(node.client.clientType === "waWebClient"){ + node.client.logout(); + SetStatus("Logged Out","red"); + } + } + else if (msg.payload === "test"){ + if(node.client.clientType === "waWebClient"){ + msg.payload = await node.client.getState(); + node.send(msg); + } + } + else if (msg.payload === "restart"){ + if(node.client.clientType === "waWebClient"){ + node.client.WARestart(); + SetStatus("Connecting...", "yellow"); + } + }; + }); - node.waClient.on('qr', (qr) => { - SetStatus("Scan QR code to connect.", "yellow"); - QRCode.toDataURL(qr, function(err, url){ - msg = {payload : url}; + + if(node.client.clientType === "waWebClient"){ + //Group Add/leave status----- + node.client.on('group_join', async (notification)=>{ + msg.chat = await notification.getChat(); + msg.payload = msg.chat.name; + msg.chatID = msg.chat.id.user || `No ID Avilable`; + msg.type = notification.type; + msg.notification = notification; node.send(msg); + notification.reply('!Node-Red joined'); + }); + + node.client.on('group_leave', async (notification)=>{ + msg.chat = await notification.getChat(); + msg.payload = msg.chat.name; + msg.type = notification.type; + msg.notification = notification; + node.send(msg); + }); + + node.client.on('group_update', (msg)=>{ + node.send(msg); + }); + + + //whatsapp Status Parameters---- + SetStatus("Connecting whatsapp...", "yellow"); + + node.client.on('qr', (qr) => { + SetStatus("Scan QR code to connect.", "yellow"); + QRCode.toDataURL(qr, function(err, url){ + msg = {payload : url}; + node.send(msg); + let qrImageWithID = {}; + qrImageWithID.id = node.id; + qrImageWithID.image = url; + RED.comms.publish("whatsappLinkQrCode", qrImageWithID); + }); + }); + + node.client.on('auth_failure', () => { + SetStatus('Connection Fail.','red'); + }); + + node.client.on('loading_screen', () => { + SetStatus('Connecting...','yellow'); let qrImageWithID = {}; qrImageWithID.id = node.id; - qrImageWithID.image = url; + qrImageWithID.image = null; RED.comms.publish("whatsappLinkQrCode", qrImageWithID); }); - }); - - node.waClient.on('auth_failure', () => { - SetStatus('Connection Fail.','red'); - }); - - node.waClient.on('loading_screen', () => { - SetStatus('Connecting...','yellow'); - let qrImageWithID = {}; - qrImageWithID.id = node.id; - qrImageWithID.image = null; - RED.comms.publish("whatsappLinkQrCode", qrImageWithID); - }); - - node.waClient.on('ready', () => { - SetStatus('Connected','green'); - }); + + node.client.on('ready', () => { + SetStatus('Connected','green'); + }); - node.waClient.on('disconnected', () => { - SetStatus("Disconnected","red"); - }); + node.client.on('disconnected', () => { + SetStatus("Disconnected","red"); + }); + }; + + if(node.client.clientType === "waSocketClient"){ + var client = null + async function clientFromWhatsappLite(){ + client = await node.client; + client.ev.on('connection.update', (updates)=>{ + var {connection} = updates + //Setting conncetion status indication + if(connection === 'open'){ + SetStatus("Connected", "green"); + } + else if(updates.isOnline){ + SetStatus("Connected", "green"); + } + else if(connection === 'close'){ + SetStatus("Disconnected", "red"); + } + else if(connection === 'connecting'){ + SetStatus("Connecting...", "yellow"); + } + else if(updates.is){ + SetStatus("Scan QR Code to Connect.", "yellow"); + } + }) + + } + clientFromWhatsappLite(); + + }; this.on(`close`, ()=>{ SetStatus("Disconnected", "red"); diff --git a/chats-in.js b/chats-in.js index 6b9a5b2..ac1fe05 100644 --- a/chats-in.js +++ b/chats-in.js @@ -4,40 +4,89 @@ module.exports = function(RED) { var node = this; var whatsappLinkNode = RED.nodes.getNode(config.whatsappLink); node.waClient = whatsappLinkNode.client; + function SetStatus(WAStatus, color){ node.status({fill:color,shape:"dot",text:WAStatus}); }; - - node.waClient.on('message', async message => { - let msg = {}; - msg.payload = message.body; - msg.from = message.author || message.from ; - msg.chatID = message.from.replace(/\D/g, ''); - msg.from = msg.from.replace(/\D/g, ''); - msg.message = message ; - node.send(msg); - }); - //whatsapp Status Parameters---- - node.waClient.on('qr', (qr) => { - SetStatus("QR Code Generated", "yellow"); - }); - - node.waClient.on('auth_failure', () => { - SetStatus('Not Connected','red'); - }); + if(node.waClient.clientType === "waWebClient"){ + node.waClient.on('message', async message => { + let msg = {}; + msg.payload = message.body; + msg.from = message.author || message.from ; + msg.chatID = message.from.replace(/\D/g, ''); + msg.from = msg.from.replace(/\D/g, ''); + msg.message = message ; + node.send(msg); + }); + + //whatsapp Status Parameters---- + node.waClient.on('qr', (qr) => { + SetStatus("QR Code Generated", "yellow"); + }); + + node.waClient.on('auth_failure', () => { + SetStatus('Not Connected','red'); + }); + + node.waClient.on('loading_screen', () => { + SetStatus('Connecting...','yellow'); + }); + + node.waClient.on('ready', () => { + SetStatus('Connected','green'); + }); + + node.waClient.on('disconnected', () => { + SetStatus("Disconnected","red"); + }); + } + + else if (node.waClient.clientType === "waSocketClient"){ + var client = null + async function clientFromWhatsappLite(){ + client = await node.waClient; - node.waClient.on('loading_screen', () => { - SetStatus('Connecting...','yellow'); - }); - - node.waClient.on('ready', () => { - SetStatus('Connected','green'); - }); + client.ev.on('messages.upsert', msgs =>{ + msgs.messages.forEach(async msg =>{ + msg.payload = msg.message.conversation; + msg.from = msg.key.participant || msg.key.remoteJid; + msg.from = msg.from.replace(/\D/g, '') || msg.from; + msg.chatID = msg.key.remoteJid.replace(/\D/g, '') || msg.key.remoteJid ; + node.send(msg) + }) + }); + + + //Setting conncetion status indication + client.ev.on('connection.update', (updates)=>{ + var {connection} = updates + if(connection === 'open'){ + SetStatus("Connected", "green"); + } + else if(updates.isOnline){ + SetStatus("Connected", "green"); + } + else if(connection === 'close'){ + SetStatus("Disconnected", "red"); + } + else if(connection === 'connecting'){ + SetStatus("Connecting...", "yellow"); + } + else if(updates.is){ + SetStatus("Scan QR Code to Connect.", "yellow"); + } + }) + + } + clientFromWhatsappLite(); - node.waClient.on('disconnected', () => { - SetStatus("Disconnected","red"); - }); + + + + + + } } RED.nodes.registerType("chats-in", WhatsappIn); diff --git a/chats-out.html b/chats-out.html index 194d89e..6928a9f 100644 --- a/chats-out.html +++ b/chats-out.html @@ -52,7 +52,7 @@ MultiMedia Message Out: Requirments- |--------|-------------| | `msg.image` | Base64 (encoded image) | | `msg.payload` | Image Caption | -| `msg.toNumber` | Sender number (if number not provided in node) | +| `msg.toNumber` | Reciver number (if number not provided in node) | -*Don't forget to mention international dialing code befor your number. Number must be in format like `+11 99999 99999` without any space.* diff --git a/chats-out.js b/chats-out.js index c0d3dfc..40d29e5 100644 --- a/chats-out.js +++ b/chats-out.js @@ -12,21 +12,34 @@ module.exports = function(RED) { }; const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); - function whatsappMessage(numb , inputMessage){ - if (node.waClient){ + async function whatsappMessage(numb , inputMessage){ + numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); + if (node.waClient.clientType === "waWebClient"){ try { - numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); numb = `${numb}@c.us`; node.waClient.sendMessage(numb, inputMessage); - SetStatus("Message Send.", "green"); - setTimeout(()=>{ - SetStatus('Connected','green'); - }, 2000) } catch(e) { node.log(`Error Sending Msg: ${e}`); } - } else { node.log(`Error Sending Msg: ${e}`)} + } + else if (node.waClient.clientType === "waSocketClient"){ + try { + let client = await node.waClient; + numb = `${numb}@s.whatsapp.net`; + const msgStatus = await client.sendMessage(numb, {text : inputMessage}); + } + catch(e) { + node.log(`Error Sending Msg: ${e}`); + } + } + else { + node.log(`Error Sending Msg: ${e}`) + } + SetStatus("Message Send.", "green"); + setTimeout(()=>{ + SetStatus('Connected','green'); + }, 2000) }; function whatsappMultiMediaMessage(numb, whatsappImage, whatsappCaption){ @@ -76,25 +89,52 @@ module.exports = function(RED) { }); //whatsapp Status Parameters---- - node.waClient.on('qr', (qr) => { - SetStatus("QR Code Generated", "yellow"); - }); - - node.waClient.on('auth_failure', () => { - SetStatus('Not Connected','red'); - }); - - node.waClient.on('loading_screen', () => { - SetStatus('Connecting...','yellow'); - }); - - node.waClient.on('ready', () => { - SetStatus('Connected','green'); - }); + if (node.waClient.clientType === "waWebClient"){ + node.waClient.on('qr', (qr) => { + SetStatus("QR Code Generated", "yellow"); + }); + + node.waClient.on('auth_failure', () => { + SetStatus('Not Connected','red'); + }); + + node.waClient.on('loading_screen', () => { + SetStatus('Connecting...','yellow'); + }); + + node.waClient.on('ready', () => { + SetStatus('Connected','green'); + }); - node.waClient.on('disconnected', () => { - SetStatus("Disconnected","red"); - }); + node.waClient.on('disconnected', () => { + SetStatus("Disconnected","red"); + }); + + } else if (node.waClient.clientType === "waSocketClient"){ + async function checkStatusOfSockets(){ + let client = await node.waClient; + client.ev.on('connection.update', (updates)=>{ + var {connection} = updates + if(connection === 'open'){ + SetStatus("Connected", "green"); + } + else if(updates.isOnline){ + SetStatus("Connected", "green"); + } + else if(connection === 'close'){ + SetStatus("Disconnected", "red"); + } + else if(connection === 'connecting'){ + SetStatus("Connecting...", "yellow"); + } + else if(updates.is){ + SetStatus("Scan QR Code to Connect.", "yellow"); + } + }) + } + checkStatusOfSockets(); + + } } RED.nodes.registerType("chats-out", WhatsappOut); diff --git a/group-out.js b/group-out.js index cab13ec..54b4a60 100644 --- a/group-out.js +++ b/group-out.js @@ -2,37 +2,169 @@ module.exports = function(RED) { function WhatsappGroupOut(config) { RED.nodes.createNode(this,config); var node = this; - node.gID = config.gID; + node.number = config.gID; var whatsappLinkNode = RED.nodes.getNode(config.whatsappLink); node.waClient = whatsappLinkNode.client; + const { MessageMedia } = require('whatsapp-web.js') let SetStatus = function(WAStatus, color){ node.status({fill:color,shape:"dot",text:WAStatus}); }; + const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); - node.on('input', (message)=> { - if(node.gID){ + async function whatsappMessage(numb , inputMessage){ + numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); + if (node.waClient.clientType === "waWebClient"){ try { - node.gID = node.gID.replace(/\D/g, ''); - node.gID = `${node.gID}@g.us`; - node.waClient.sendMessage(node.gID, message.payload); - SetStatus("Message Send.", "green"); - setTimeout(()=>{ - SetStatus('Connected','green'); - }, 3000) + numb = `${numb}@g.us`; + node.waClient.sendMessage(numb, inputMessage); } catch(e) { node.log(`Error Sending Msg: ${e}`); - }; + } + } + else if (node.waClient.clientType === "waSocketClient"){ + try { + let client = await node.waClient; + numb = `${numb}@g.us`; + const msgStatus = await client.sendMessage(numb, {text : inputMessage}); + } + catch(e) { + node.log(`Error Sending Msg: ${e}`); + } + } + else { + node.log(`Error Sending Msg: ${e}`) } - else { - SetStatus("No Chat-ID","red"); + SetStatus("Message Send.", "green"); + setTimeout(()=>{ + SetStatus('Connected','green'); + }, 2000) + }; + + function whatsappMultiMediaMessage(numb, whatsappImage, whatsappCaption){ + try { + numb = node.number; + whatsappImage = whatsappImage.split(',')[1] || whatsappImage; + var myMessage = new MessageMedia('image/png', whatsappImage, null, null); + numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, ''); + numb = `${numb}@g.us`; + node.waClient.sendMessage(numb, myMessage, {caption : whatsappCaption || "Image from Node-Red"}); + SetStatus("Message Send.", "green"); + setTimeout(()=>{ + SetStatus('Connected','green'); + }, 2000) + } catch(e) { + node.log(`Error sending MultiMedia Message : ${e}`) + } + }; + + node.on('input', (message)=> { + if (node.number){ + if (message.image){ + whatsappMultiMediaMessage(node.number, message.image, message.payload); + } + else { + whatsappMessage(node.number, message.payload); + } + + } else if (message.toNumber){ + var numbers = typeof message.toNumber === 'number' ? Array.of(message.toNumber) : message.toNumber; + for (number of numbers) { + if(message.image){ + whatsappMultiMediaMessage(number, message.image, message.payload) + delay(2000); + + } else { + whatsappMessage(number, message.payload) + delay(2000) + } + } + } else { + SetStatus("No number","red"); setTimeout(()=>{ SetStatus('Connected','green'); }, 5000) - }; + } }); + //whatsapp Status Parameters---- + if (node.waClient.clientType === "waWebClient"){ + node.waClient.on('qr', (qr) => { + SetStatus("QR Code Generated", "yellow"); + }); + + node.waClient.on('auth_failure', () => { + SetStatus('Not Connected','red'); + }); + + node.waClient.on('loading_screen', () => { + SetStatus('Connecting...','yellow'); + }); + + node.waClient.on('ready', () => { + SetStatus('Connected','green'); + }); + + node.waClient.on('disconnected', () => { + SetStatus("Disconnected","red"); + }); + + } else if (node.waClient.clientType === "waSocketClient"){ + async function checkStatusOfSockets(){ + let client = await node.waClient; + client.ev.on('connection.update', (updates)=>{ + var {connection} = updates + if(connection === 'open'){ + SetStatus("Connected", "green"); + } + else if(updates.isOnline){ + SetStatus("Connected", "green"); + } + else if(connection === 'close'){ + SetStatus("Disconnected", "red"); + } + else if(connection === 'connecting'){ + SetStatus("Connecting...", "yellow"); + } + else if(updates.is){ + SetStatus("Scan QR Code to Connect.", "yellow"); + } + }) + } + checkStatusOfSockets(); + + } + + + + + + + + // node.on('input', (message)=> { + // if(node.gID){ + // try { + // node.gID = node.gID.replace(/\D/g, ''); + // node.gID = `${node.gID}@g.us`; + // node.waClient.sendMessage(node.gID, message.payload); + // SetStatus("Message Send.", "green"); + // setTimeout(()=>{ + // SetStatus('Connected','green'); + // }, 3000) + // } + // catch(e) { + // node.log(`Error Sending Msg: ${e}`); + // }; + // } + // else { + // SetStatus("No Chat-ID","red"); + // setTimeout(()=>{ + // SetStatus('Connected','green'); + // }, 5000) + // }; + // }); + //whatsapp Status Parameters---- node.waClient.on('qr', (qr) => { SetStatus("QR Code Generated", "yellow"); diff --git a/package-lock.json b/package-lock.json index f5a0a35..af1f3c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "node-red-contrib-whatsapp-link", - "version": "0.1.30", + "version": "0.1.31", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-red-contrib-whatsapp-link", - "version": "0.1.30", + "version": "0.1.31", "license": "ISC", "dependencies": { + "@adiwajshing/baileys": "^5.0.0", "qrcode": "^1.5.1", "whatsapp-web.js": "latest" }, @@ -16,16 +17,132 @@ "node": ">=8.0.0" } }, + "node_modules/@adiwajshing/baileys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@adiwajshing/baileys/-/baileys-5.0.0.tgz", + "integrity": "sha512-AeNyYLfw1nhCwc7hDlMajU9Zr5DK4zmEO8rdrmxUR1qUbmhSKOL6IzwZpyvPjsXyHvl+oPMbp5k8+PX2p6RlJg==", + "dependencies": { + "@hapi/boom": "^9.1.3", + "axios": "^0.24.0", + "futoin-hkdf": "^1.5.1", + "libsignal": "git+https://github.com/adiwajshing/libsignal-node.git", + "music-metadata": "^7.12.3", + "node-cache": "^5.1.2", + "pino": "^7.0.0", + "protobufjs": "^6.11.3", + "ws": "^8.0.0" + }, + "peerDependencies": { + "@adiwajshing/keyed-db": "^0.2.4", + "jimp": "^0.16.1", + "link-preview-js": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "sharp": "^0.30.5" + }, + "peerDependenciesMeta": { + "@adiwajshing/keyed-db": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + }, + "qrcode-terminal": { + "optional": true + }, + "sharp": { + "optional": true + } + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, "node_modules/@pedroslopez/moduleraid": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@pedroslopez/moduleraid/-/moduleraid-5.0.2.tgz", "integrity": "sha512-wtnBAETBVYZ9GvcbgdswRVSLkFkYAGv1KzwBBTeRXvGT9sb9cPllOgFFWXCn9PyARQ0H+Ijz6mmoRrGateUDxQ==" }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "optional": true + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "node_modules/@types/yauzl": { "version": "2.10.0", @@ -143,6 +260,22 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -298,6 +431,14 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -334,6 +475,14 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -392,6 +541,11 @@ } } }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -465,6 +619,17 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -502,6 +667,14 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/fast-redact": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", + "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "engines": { + "node": ">=6" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -510,6 +683,22 @@ "pend": "~1.2.0" } }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -534,6 +723,25 @@ "node": ">=0.8.0" } }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -585,6 +793,14 @@ "rimraf": "bin.js" } }, + "node_modules/futoin-hkdf": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.1.tgz", + "integrity": "sha512-g5d0Qp7ks55hYmYmfqn4Nz18XH49lcCR+vvIvHT92xXnsJaGZmY1EtWQWilJ6BQp57heCIXM/rRo+AFep8hGgg==", + "engines": { + "node": ">=8" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -755,6 +971,45 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/libsignal": { + "version": "2.0.1", + "resolved": "git+ssh://git@github.com/adiwajshing/libsignal-node.git#11dbd962ea108187c79a7c46fe4d6f790e23da97", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "6.8.8" + } + }, + "node_modules/libsignal/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "node_modules/libsignal/node_modules/protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/listenercount": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", @@ -802,6 +1057,19 @@ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "optional": true }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -855,6 +1123,38 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/music-metadata": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.13.3.tgz", + "integrity": "sha512-qxh+Xgy1qHhrgW4XnXu5JUxMmRNdQXDEeIZLGXpapOi96rRCocXn498L+y2P7t6NJXFK8e3Shv2tu0dC/HF/3g==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.4", + "debug": "^4.3.4", + "file-type": "^16.5.4", + "media-typer": "^1.1.0", + "strtok3": "^6.3.0", + "token-types": "^4.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/node-fetch": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", @@ -888,6 +1188,11 @@ "node": ">=0.10.0" } }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -945,11 +1250,58 @@ "node": ">=0.10.0" } }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -975,6 +1327,11 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "optional": true }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -983,6 +1340,31 @@ "node": ">=0.4.0" } }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -1038,6 +1420,11 @@ "node": ">=10.13.0" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -1051,6 +1438,21 @@ "node": ">= 6" } }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/readdir-glob": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", @@ -1081,6 +1483,14 @@ "node": ">=10" } }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1127,6 +1537,14 @@ } ] }, + "node_modules/safe-stable-stringify": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", + "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==", + "engines": { + "node": ">=10" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -1138,6 +1556,27 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "optional": true }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1170,6 +1609,22 @@ "node": ">=8" } }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -1196,11 +1651,35 @@ "node": ">=6" } }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "dependencies": { + "real-require": "^0.1.0" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1439,16 +1918,108 @@ } }, "dependencies": { + "@adiwajshing/baileys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@adiwajshing/baileys/-/baileys-5.0.0.tgz", + "integrity": "sha512-AeNyYLfw1nhCwc7hDlMajU9Zr5DK4zmEO8rdrmxUR1qUbmhSKOL6IzwZpyvPjsXyHvl+oPMbp5k8+PX2p6RlJg==", + "requires": { + "@hapi/boom": "^9.1.3", + "axios": "^0.24.0", + "futoin-hkdf": "^1.5.1", + "libsignal": "git+https://github.com/adiwajshing/libsignal-node.git", + "music-metadata": "^7.12.3", + "node-cache": "^5.1.2", + "pino": "^7.0.0", + "protobufjs": "^6.11.3", + "ws": "^8.0.0" + } + }, + "@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "requires": { + "@hapi/hoek": "9.x.x" + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, "@pedroslopez/moduleraid": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@pedroslopez/moduleraid/-/moduleraid-5.0.2.tgz", "integrity": "sha512-wtnBAETBVYZ9GvcbgdswRVSLkFkYAGv1KzwBBTeRXvGT9sb9cPllOgFFWXCn9PyARQ0H+Ijz6mmoRrGateUDxQ==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "optional": true + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "@types/yauzl": { "version": "2.10.0", @@ -1550,6 +2121,19 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "requires": { + "follow-redirects": "^1.14.4" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1656,6 +2240,11 @@ "wrap-ansi": "^6.2.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1686,6 +2275,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1726,6 +2320,11 @@ } } }, + "curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1790,6 +2389,17 @@ } } }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1819,6 +2429,11 @@ "yauzl": "^2.10.0" } }, + "fast-redact": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", + "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==" + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1827,6 +2442,16 @@ "pend": "~1.2.0" } }, + "file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "requires": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -1845,6 +2470,11 @@ "which": "^1.1.1" } }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1889,6 +2519,11 @@ } } }, + "futoin-hkdf": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.1.tgz", + "integrity": "sha512-g5d0Qp7ks55hYmYmfqn4Nz18XH49lcCR+vvIvHT92xXnsJaGZmY1EtWQWilJ6BQp57heCIXM/rRo+AFep8hGgg==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2021,6 +2656,41 @@ } } }, + "libsignal": { + "version": "git+ssh://git@github.com/adiwajshing/libsignal-node.git#11dbd962ea108187c79a7c46fe4d6f790e23da97", + "from": "libsignal@git+https://github.com/adiwajshing/libsignal-node.git", + "requires": { + "curve25519-js": "^0.0.4", + "protobufjs": "6.8.8" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + } + } + } + }, "listenercount": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", @@ -2065,6 +2735,16 @@ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "optional": true }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" + }, "mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -2103,6 +2783,28 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "music-metadata": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.13.3.tgz", + "integrity": "sha512-qxh+Xgy1qHhrgW4XnXu5JUxMmRNdQXDEeIZLGXpapOi96rRCocXn498L+y2P7t6NJXFK8e3Shv2tu0dC/HF/3g==", + "requires": { + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.4", + "debug": "^4.3.4", + "file-type": "^16.5.4", + "media-typer": "^1.1.0", + "strtok3": "^6.3.0", + "token-types": "^4.2.1" + } + }, + "node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "requires": { + "clone": "2.x" + } + }, "node-fetch": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", @@ -2122,6 +2824,11 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "optional": true }, + "on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2161,11 +2868,48 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, + "peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, + "pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "requires": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + } + }, + "pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "requires": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -2185,11 +2929,36 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "optional": true }, + "process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2234,6 +3003,11 @@ "yargs": "^15.3.1" } }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2244,6 +3018,14 @@ "util-deprecate": "^1.0.1" } }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "requires": { + "readable-stream": "^3.6.0" + } + }, "readdir-glob": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", @@ -2273,6 +3055,11 @@ } } }, + "real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==" + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2296,6 +3083,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safe-stable-stringify": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz", + "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==" + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -2307,6 +3099,24 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "optional": true }, + "sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2333,6 +3143,15 @@ "ansi-regex": "^5.0.1" } }, + "strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + } + }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -2356,11 +3175,28 @@ "readable-stream": "^3.1.1" } }, + "thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "requires": { + "real-require": "^0.1.0" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", diff --git a/package.json b/package.json index 711e894..0e97f41 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-whatsapp-link", - "version": "0.1.30", + "version": "0.1.32", "description": "Node to send and receive whatsapp messages in groups and chats. | No third party APIs", "repository": { "type": "git", @@ -25,13 +25,14 @@ "whatsapp chats-in": "chats-in.js", "whatsapp chats-out": "chats-out.js", "whatsapp group-out": "group-out.js", - "whatsapp reply": "reply.js", + "whatsapp reply": "whatsappReply.js", "whatsapp Link": "whatsappLink.js" } }, "dependencies": { "qrcode": "^1.5.1", - "whatsapp-web.js": "latest" + "whatsapp-web.js": "latest", + "@adiwajshing/baileys": "^5.0.0" }, "engines": { "node": ">=8.0.0" diff --git a/whatsappLink.html b/whatsappLink.html index 142836f..ba70194 100644 --- a/whatsappLink.html +++ b/whatsappLink.html @@ -3,21 +3,35 @@ category: 'config', defaults: { cName : {value:"whatsapp-web",required:true}, - name : {value : "Web"} + name : {value : "Web"}, + clientType: {} }, label: function() { - return this.cName ; + return this.clientType; + }, + oneditprepare: function(){ + $("#node-config-input-clientType").typedInput({ + types: [ + { + value: "Select Client Type", + options: [ + { value: "waWebClient", label: "Whatsapp Web"}, + { value: "waSocketClient", label: "Whatsapp Lite"}, + ] + } + ] + }) } }); \ No newline at end of file diff --git a/whatsappLink.js b/whatsappLink.js index dcdafaf..668cc0b 100644 --- a/whatsappLink.js +++ b/whatsappLink.js @@ -1,38 +1,79 @@ module.exports = function(RED) { const { Client, LocalAuth } = require('whatsapp-web.js'); + const makeWASocket = require('@adiwajshing/baileys'); + const { useMultiFileAuthState } = makeWASocket const QRCode = require('qrcode'); + const FS = require('node:fs') const OS = require('os'); const Path = require('path'); let userDir = OS.homedir(); let whatsappLinkDir = Path.join(userDir, '.node-red', 'Whatsapp-Link'); + let whatsappLinkDirSocket = Path.join(whatsappLinkDir, 'WA-Sockets') function RemoteClientNode(n) { RED.nodes.createNode(this,n); - let WAnode = this; - let whatsappConnectionStatus; - - const client = new Client({ - authStrategy : new LocalAuth({ - dataPath : whatsappLinkDir - }), - puppeteer : { - headless : true, - args : ['--no-sandbox', '--disable-setuid-sandbox'] - } - }); + var WAnode = this; + var clientType = n.clientType; + var whatsappConnectionStatus; + var client - let WAConnect = function(){ + var WAConnect = function(){ + const webClient = new Client({ + authStrategy : new LocalAuth({ + dataPath : whatsappLinkDir + }), + puppeteer : { + headless : true, + args : ['--no-sandbox', '--disable-setuid-sandbox'] + } + }); + try { - client.initialize(); + webClient.initialize(); WAnode.log("Status : Initializing Whatsapp.."); } catch(e) { WAnode.log(`Error : Unable to start Whatsapp. Try Again..`); }; + return webClient ; + }; + + if (clientType ==="waWebClient"){ + client = WAConnect(); + WAnode.connectionSetupID = setInterval(connectionSetup, 10000); + + function WAClose(){ + try { + client.destroy(); + } + catch(e){ + WAnode.err(`Error : Too many instructions! Try again.`) + } + }; + + var WARestart = function(){ + WAClose(); + WAConnect(); + } + + async function connectionSetup(){ + try { + whatsappConnectionStatus = await client.getState(); + if(whatsappConnectionStatus === "CONNECTED"){ + clearInterval(WAnode.connectionSetupID); + } + else { + WAnode.log(`Status : Connecting to Whatsapp...`); + } + } + catch(e){ + WAnode.log(`Error : Waiting for Initializion...`); + } + }; //QR-Code on Terminal and Ready Status. client.on("qr", (qr)=>{ - clearInterval(connectionSetupID); + clearInterval(WAnode.connectionSetupID); QRCode.toString(qr, {type : 'terminal', small:true }, function(err, QRTerminal){ WAnode.log(`To Connect, Scan the QR Code through your Whatsapp Mobile App.`) console.log(""); @@ -42,85 +83,126 @@ module.exports = function(RED) { client.on("ready", ()=>{ WAnode.log(`Status : Whatsapp Connected`); }); + + //Whatsapp-Link Test Features (For Status and Testing Only.) + client.on('message_create', async (msg)=> { + if (msg.body.startsWith('!nodered')){ + let chat = await msg.getChat(); + let contact = await msg.getContact(); + if (chat.isGroup){ + let msgReply = + `Hi From Node-Red. + ------------------ + Group Name : ${chat.name}, + Group Id : ${chat.id.user}, + Group Admin : ${chat.groupMetadata.owner.user}, + Participants : ${chat.groupMetadata.size}` + msg.reply(msgReply); + } + else { + let msgReply = `Hi @${contact.number} From Node-Red.` + chat.sendMessage(msgReply, { + mentions : [contact] + }); + } + + } + + }); + + client.WAConnect = WAConnect; + client.WARestart = WARestart; + client.WAClose = WAClose; + client.clientType = clientType; + WAnode.client = client; }; - WAConnect(); - //Whatsapp-Link Test Features (For Status and Testing Only.) - client.on('message_create', async (msg)=> { - if (msg.body.startsWith('!nodered')){ - let chat = await msg.getChat(); - let contact = await msg.getContact(); - if (chat.isGroup){ - let msgReply = -`Hi From Node-Red. ------------------- -Group Name : ${chat.name}, -Group Id : ${chat.id.user}, -Group Admin : ${chat.groupMetadata.owner.user}, -Participants : ${chat.groupMetadata.size}` - msg.reply(msgReply); - } - else { - let msgReply = `Hi @${contact.number} From Node-Red.` - chat.sendMessage(msgReply, { - mentions : [contact] - }); - } + if (clientType === "waSocketClient"){ - } + async function connectSocketClient() { + const { state, saveCreds } = await useMultiFileAuthState(whatsappLinkDirSocket); + const socketClient = makeWASocket.default({ + printQRInTerminal: false, + auth : state + }) - }); + socketClient.ev.on('creds.update', saveCreds) + + socketClient.ev.on('connection.update', (update) => { + const { connection, lastDisconnect } = update + if (connection === 'close') { + // reconnect if not logged out + + if ( + lastDisconnect && + lastDisconnect.error && + lastDisconnect.error.output && + (lastDisconnect.error.output.statusCode === 410 || + lastDisconnect.error.output.statusCode === 428 || + lastDisconnect.error.output.statusCode === 515) + ) { + connectSocketClient() + } else { + if ( + lastDisconnect && + lastDisconnect.error && + lastDisconnect.error.output && + lastDisconnect.error.output.statusCode === 401 + ) { + FS.rmSync(whatsappLinkDirSocket, {recursive : true, force: true}) + connectSocketClient() + + } else { + console.log('Error unexpected', update) + } + } + } + if(update.qr){ + QRCode.toDataURL(update.qr, function(err, url){ + var qrImageWithID = {}; + qrImageWithID.id = WAnode.id; + qrImageWithID.image = url; + RED.comms.publish("whatsappLinkQrCode", qrImageWithID); + }); - function WAClose(){ - try { - client.destroy(); - WAnode.client.destroy(); - } - catch(e){ - WAnode.err(`Error : Too many instructions! Try again.`) - } - }; + QRCode.toString(update.qr, {type : 'terminal', small:true }, function(err, QRTerminal){ + WAnode.log(`To Connect, Scan the QR Code through your Whatsapp Mobile App.`) + console.log(""); + console.log(QRTerminal); + }); + } + if (connection === 'open') { + var qrImageWithID = {}; + qrImageWithID.id = WAnode.id; + qrImageWithID.image = null; + RED.comms.publish("whatsappLinkQrCode", qrImageWithID); + } + }) + return socketClient + }; + client = connectSocketClient(); + client.clientType = clientType; + WAnode.client = client + }; - async function connectionSetup(){ - try { - whatsappConnectionStatus = await client.getState(); - if(whatsappConnectionStatus === "CONNECTED"){ - clearInterval(connectionSetupID); + + this.on('close', (removed, done)=>{ + if(removed){ + if(clientType === "waWebClient"){ + clearInterval(WAnode.connectionSetupID); + WAnode.client.WAClose(); + } } else { - WAnode.log(`Status : Connecting to Whatsapp...`); + if(clientType === "waWebClient"){ + clearInterval(WAnode.connectionSetupID); + WAnode.client.WAClose(); + } } - } - catch(e){ - WAnode.log(`Error : Waiting for Initializion...`); - } - }; - let connectionSetupID = setInterval(connectionSetup, 10000); - - let WARestart = function(){ - WAClose(); - WAConnect(); - } + done(); - this.on('close', (removed, done)=>{ - if(removed){ - clearInterval(connectionSetupID); - WAClose(); - } - else { - clearInterval(connectionSetupID); - WAClose(); - } - done(); - - }); - - - this.WAConnect = WAConnect; - this.client = client; - this.WARestart = WARestart; - this.WAClose = WAClose; - this.whatsappConnectionStatus = whatsappConnectionStatus; + }); + } RED.nodes.registerType("whatsappLink",RemoteClientNode); } \ No newline at end of file diff --git a/reply.html b/whatsappReply.html similarity index 100% rename from reply.html rename to whatsappReply.html diff --git a/reply.js b/whatsappReply.js similarity index 100% rename from reply.js rename to whatsappReply.js