{"version":3,"sources":["jsdelivr-header.js","/npm/node-relay-tunnel@0.3.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,IAAI,KAAO,QAAQ,QACf,GAAK,QAAQ,eACjB,MAAM,OAAS,QAAQ,gBACjB,OAAS,QAAQ,gBAEvB,IAAI,KAAO,WAAY,EAIvB,SAAS,KAAK,GACb,EAAU,KAAK,QAAQ,CAAC,IAAI,KAAM,KAAK,OAAQ,GAC/C,IAGI,EAHA,EAAgB,CAAC,EACjB,EAAe,GACf,EAAgB,GAGnB,EADE,EAAQ,IACC,QAAQ,SAAS,aAAa,EAAQ,KAClC,QAAQ,QAAQ,eAChC,IAAI,EAAK,QAAQ,YAAR,CAAqB,GAE3B,EAAQ,MACX,EAAG,IAAI,iBAAiB,SAAU,EAAe,GAC7C,EAAc,IAAI,MAAM,YAAY,EAAQ,KAAK,SAAS,aAAa,EAAQ,KAAK,UAChF,EAAS,MAAM,GACX,EAAS,WAAW,EAC7B,IAEH,EAAG,GAAG,cAAc,SAAS,GAE5B,EAAO,GAAG,QAAQ,SAAS,GAC1B,GAAiB,eAAd,EAAK,MAQP,IAAI,KAPJ,EAAO,MAAQ,cACZ,EAAa,OAAO,GACtB,EAAa,OAAO,GAAG,GAAG,KAAK,QAEhC,EAAa,KAAK,GAClB,EAAc,KAAK,GAEV,EACR,EAAc,GAAG,KAAK,SAAU,OACX,UAAd,EAAK,QACb,EAAO,MAAQ,SACf,EAAc,EAAO,IAAM,EAI7B,IAEA,EAAO,GAAG,OAAO,SAAS,GACtB,EAAa,OAAS,IACxB,EAAK,KAAO,EAAO,GACnB,EAAa,OAAO,GAAG,GAAG,KAAK,MAAO,GAExC,IAEA,EAAO,GAAG,OAAO,SAAS,GACtB,EAAc,EAAK,OACrB,EAAc,EAAK,MAAM,KAAK,MAAO,EACvC,IACA,EAAO,GAAG,cAAc,SAAS,GAChC,GAAmB,eAAhB,EAAO,MAAuB,CAChC,IAAI,GAAO,EACX,IAAI,KAAK,EACR,GAAG,EAAO,IAAM,EAAa,GAAG,GAAG,CAC/B,GAAK,EAAa,OAAO,IAC3B,GAAO,GACR,EAAa,OAAO,EAAG,GACvB,EAAc,OAAO,EAAE,GACvB,KACD,CAED,GAAG,EAAa,OAAS,GAAK,EAAc,OAAS,EAGpD,IAAI,KAFD,GACF,EAAa,OAAO,GAAG,GAAG,KAAK,QACvB,EACR,EAAc,GAAG,KAAK,SAAU,EAAc,OAAO,GAAG,SAGzD,IAAI,KAAK,EACR,EAAc,GAAG,KAAK,UAAU,EACnC,KACwB,UAAhB,EAAO,cACP,EAAc,EAAO,GAC9B,GACD,IACA,EAAS,OAAO,EAAQ,MAAM,GAAG,aAAa,WAC7C,EAAQ,UAAY,EAAQ,YAAc,MAE3C,IAAG,GAAG,SAAS,SAAS,GACvB,EAAQ,MAAQ,EAAQ,MAAM,GAAK,MAEpC,GACD,CAEA,OAAO,QAAU,CAChB,OAAS,OACT,OAAS","file":"/npm/node-relay-tunnel@0.3.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/node-relay-tunnel@0.3.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var util = require('util');\nvar qs = require('querystring');\nconst server = require('./src/server');\nconst client = require('./src/client');\n\nvar noop = function() {}\n\n\n// a relay WS server(on the main server side), help communicate bettwen main server and local/debug serverf\nfunction init(options){\n\toptions = util._extend({ssl:null, port:12345}, options);\n\tvar serverWorkers = {}; // save main server sockets\n\tvar clientSocket = []; // save local server socket\n\tvar clientOptions = []; // save optioin obj\n\tvar wsServer;\n\tif(options.ssl)\n\t\twsServer = require('https').createServer(options.ssl);\n\telse wsServer = require('http').createServer();\n\tvar io = require('socket.io')(wsServer);\n\t\n\tif(options.auth)\t\n\tio.set('authorization', function (handshakeData, callback) {\n\t\tif(handshakeData.url.match('username='+options.auth.username+'&password='+options.auth.password))\n        \tcallback(null, true); // error first callback style \n        else callback('no auth', false);\n    });\n\n\tio.on('connection', function(socket){\n\t\t// 0. save server sockets & local socket\n\t\tsocket.on('init', function(data){\n\t\t\tif(data._type == 'localServer'){\n\t\t\t\tsocket._type = 'localServer';\n\t\t\t\tif(clientSocket.length>0)\n\t\t\t\t\tclientSocket.slice(-1)[0].emit('hold');\t\t\t\n\t\t\t\t// then handle new one\n\t\t\t\tclientSocket.push(socket);\n\t\t\t\tclientOptions.push(data);\n\t\t\t\t// inform server the new client\n\t\t\t\tfor(i in serverWorkers)\n\t\t\t\t\tserverWorkers[i].emit('client', data);\n\t\t\t}else if(data._type == 'server'){\n\t\t\t\tsocket._type = 'server';\n\t\t\t\tserverWorkers[socket.id] = socket;\n\t\t\t}else{\n\t\t\t\t// ignore this connection\n\t\t\t}\n\t\t})\n\t\t// handle req from server, relay data to client\n\t\tsocket.on('req', function(data){\n\t\t\tif(clientSocket.length > 0){\n\t\t\t\tdata._sid = socket.id;\n\t\t\t\tclientSocket.slice(-1)[0].emit('req', data)\n\t\t\t}\n\t\t})\n\t\t// handle res from client, relay the data to the server\n\t\tsocket.on('res', function(data){\n\t\t\tif(serverWorkers[data._sid])\n\t\t\t\tserverWorkers[data._sid].emit('res', data);\n\t\t});\n\t\tsocket.on('disconnect', function(reason){\n\t\t\tif(socket._type == 'localServer'){\n\t\t\t\tvar last = false;\n\t\t\t\tfor(i in clientSocket){\n\t\t\t\t\tif(socket.id == clientSocket[i].id){\n\t\t\t\t\t\tif(i == clientSocket.length-1)\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\tclientSocket.splice(i, 1);\n\t\t\t\t\t\tclientOptions.splice(i,1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(clientSocket.length > 0 && clientOptions.length > 0){\n\t\t\t\t\tif(last)\n\t\t\t\t\t\tclientSocket.slice(-1)[0].emit('back');\t\n\t\t\t\t\tfor(i in serverWorkers)\n\t\t\t\t\t\tserverWorkers[i].emit('client', clientOptions.slice(-1)[0]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor(i in serverWorkers)\n\t\t\t\t\t\tserverWorkers[i].emit('client', false);\n\t\t\t}\n\t\t\telse if(socket._type == 'server')\n\t\t\t\tdelete serverWorkers[socket.id];\n\t\t});\n\t});\n\twsServer.listen(options.port).on('listening', function(){\n\t\toptions.listening ? options.listening() : noop();\n\t\t//console.log('[NLT] Server is ready on port ' + options.port);\n\t}).on('error', function(e){\n\t\toptions.error ? options.error(e) : noop();\n\t\t//console.log('[NLT] Setup error', e)\n\t});\n}\n\nmodule.exports = {\n\tServer : server,\n\tClient : client,\n};\n"]}