| 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 |
|
|