plug-socket
Version:
Simple plug.dj WebSocket server interaction.
1 lines • 4.5 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["src/index.js"],"sourcesContent":["import WebSocket from 'ws'\n\nconst WS_URL = 'wss://ws-prod.plug.dj:443/socket'\nconst WS_ORIGIN = 'https://plug.dj'\n\nconst WSSTATE_OPEN = 1\nconst HEARTBEAT_TIMEOUT = 25 * 1000\n\nexport default function socket (authToken, options) {\n const wsUrl = options && options.url || WS_URL\n const wsOrigin = options && options.origin || WS_ORIGIN\n const heartbeatTimeout = options && options.timeout || HEARTBEAT_TIMEOUT\n\n const ws = new WebSocket(wsUrl, { origin: wsOrigin })\n\n const queue = []\n let heartbeat\n\n function gotHeartbeat () {\n if (heartbeat) clearTimeout(heartbeat)\n heartbeat = setTimeout(ontimedout, heartbeatTimeout)\n }\n\n function onmessage (event) {\n gotHeartbeat()\n\n if (event.data === 'h') {\n return null\n }\n\n const actions = JSON.parse(event.data)\n if (!Array.isArray(actions)) {\n return null\n }\n\n actions.forEach((data) => {\n // Action shape:\n // { a: action, p: param, s: slug }\n ws.emit(data.a, data.p, data.s)\n ws.emit('action', data.a, data.p, data.s)\n })\n }\n\n ws.sendMessage = function sendMessage (action, param) {\n if (ws.readyState === WSSTATE_OPEN) {\n ws.send(JSON.stringify({\n a: action,\n p: param,\n t: Math.floor(Date.now() / 1000)\n }))\n } else {\n queue.push({ action: action, param: param })\n }\n return ws\n }\n\n /**\n * Send all queued messages.\n */\n function onopen () {\n gotHeartbeat()\n queue.forEach((message) => {\n ws.sendMessage(message.action, message.param)\n })\n }\n\n function onclose () {\n if (heartbeat) clearTimeout(heartbeat)\n }\n\n /**\n * When we haven't received a heartbeat for some time, the connection might\n * have stopped working.\n */\n function ontimedout () {\n ws.close(3001, 'Timed out: did not receive heartbeat from plug.dj')\n }\n\n ws.auth = function auth (param) {\n return ws.sendMessage('auth', param)\n }\n ws.chat = function chat (param) {\n return ws.sendMessage('chat', param)\n }\n\n ws.onmessage = onmessage\n ws.onopen = onopen\n ws.onclose = onclose\n\n if (authToken) {\n ws.auth(authToken)\n }\n\n return ws\n}\n"],"names":["const","let"],"mappings":"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"}