UNPKG

@moquyun/proxy

Version:

Multi-user & multi-env web debugging proxy based on whistle

44 lines (39 loc) 1.26 kB
const { Pool } = require('socketx'); const { encode } = require('simpleproto'); const crc32 = require('crc32'); const UID_RE = /^[\w.-]{1,64}$/; exports.uiServer = (server, { data }) => { const { storageServer } = data || ''; const len = storageServer && storageServer.length; const rules = len ? '* whistle.storage:// includeFilter://reqH:x-whistle-nohost-storage-uid=/^[\\w.-]{1,64}$/' : ''; server.on('request', (_, res) => { res.writeHead(200, { 'content-type': 'text/plain; charset=utf8' }); res.end(rules); }); }; exports.resStatsServer = (server, { data }) => { const { storageServer } = data || ''; const len = storageServer && storageServer.length; if (!len) { return; } const pool = new Pool(); storageServer.forEach((opt) => { opt.idleTimeout = 30000; }); server.on('request', (req) => { req.getSession(async (s) => { if (s) { const uid = s.req.headers['x-whistle-nohost-storage-uid']; if (!uid || !UID_RE.test(uid)) { return; } const index = len > 1 ? (parseInt(crc32(uid), 16) % len) : 0; try { const socket = await pool.connect(storageServer[index]); socket.write(encode(s)); } catch (e) {} } }); }); };