UNPKG

roku-ecp

Version:

A Node package designed to control Roku devices using TypeScript

49 lines (48 loc) 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.discover = exports.parse = exports.queryString = void 0; const node_ssdp_1 = require("node-ssdp"); const queryString = (params) => { if (!params) return ""; return ("?" + Object.keys(params) .map((key) => `${encodeURI(key)}=${encodeURI(params[key])}`) .join("&")); }; exports.queryString = queryString; const parse = (obj) => { let c = {}; if (obj["_attributes"]) Object.entries(obj["_attributes"]).forEach(([key, value]) => (c[key] = cast(value))); Object.entries(obj).forEach(([key, value]) => { if (value["_text"]) return (c[key] = cast(value["_text"])); if (value["_attributes"]) return (c[key] = exports.parse(value["_attributes"])); c[key.replace("_text", "name")] = cast(value); }); delete c["_attributes"]; return c; }; exports.parse = parse; const cast = (val) => { if (val === "true") return true; if (val === "false") return false; if (!Number.isNaN(Number(val))) return Number(val); return val; }; const discover = (timeout = 10000) => { const ssdp = new node_ssdp_1.Client(); const devices = []; ssdp.on("response", (headers, _, rinfo) => devices.push(Object.assign(Object.assign({}, rinfo), { usn: headers.USN, location: headers.LOCATION }))); ssdp.search("roku:ecp"); return new Promise((resolve) => setTimeout(() => { resolve(devices); ssdp.stop(); }, timeout)); }; exports.discover = discover;