| | const express = require('express') |
| | const path = require('path') |
| | const SocketIO = require('socket.io') |
| | const qrcode = require('qrcode') |
| | const fetch = require('node-fetch') |
| |
|
| | function connect(conn, PORT) { |
| | let app = global.app = express() |
| |
|
| | |
| | let _qr = 'invalid' |
| |
|
| | conn.ev.on('connection.update', function appQR({ qr }) { |
| | if (qr) _qr = qr |
| | }) |
| |
|
| | app.use(async (req, res) => { |
| | res.setHeader('content-type', 'image/png') |
| | res.end(await qrcode.toBuffer(_qr)) |
| | }) |
| |
|
| | let server = app.listen(7860, () => { |
| | console.log('App listened on port 7860') |
| | if (opts['keepalive']) keepAlive() |
| | }) |
| | let io = SocketIO(server) |
| | io.on('connection', socket => { |
| | let { unpipeEmit } = pipeEmit(conn, socket, 'conn-') |
| | socket.on('disconnect', unpipeEmit) |
| | }) |
| | } |
| |
|
| | function pipeEmit(event, event2, prefix = '') { |
| | let old = event.emit |
| | event.emit = function (event, ...args) { |
| | old.emit(event, ...args) |
| | event2.emit(prefix + event, ...args) |
| | } |
| | return { |
| | unpipeEmit() { |
| | event.emit = old |
| | } |
| | } |
| | } |
| |
|
| | function keepAlive() { |
| | const url = `https://${process.env.REPL_SLUG}.${process.env.REPL_OWNER}.repl.co` |
| | if (/(\/\/|\.)undefined\./.test(url)) return |
| | setInterval(()=> { |
| | fetch(url).catch(console.error) |
| | }, 5 * 1000 * 60) |
| | } |
| |
|
| |
|
| | module.exports = connect |
| |
|