UNPKG

dirigera

Version:

A TypeScript client for IKEA's DIRIGERA smart home hub

50 lines (49 loc) 1.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initializeWebSocket = initializeWebSocket; exports.closeWebSocket = closeWebSocket; const node_crypto_1 = __importDefault(require("node:crypto")); const reconnecting_websocket_1 = __importDefault(require("reconnecting-websocket")); const ws_1 = __importDefault(require("ws")); let ws = null; let timeout = null; function initializeWebSocket({ ip, accessToken, callback, }) { ws = new reconnecting_websocket_1.default(`wss://${ip}:8443/v1`, [], { minReconnectionDelay: 10, maxReconnectionDelay: 10000, maxRetries: Number.MAX_SAFE_INTEGER, WebSocket: class extends ws_1.default { constructor(url, protocols) { super(url, protocols, { headers: { authorization: `Bearer ${accessToken}`, }, rejectUnauthorized: false, }); } }, debug: process.env['NODE_ENV'] === 'development', }); ws.addEventListener('message', (message) => { callback(JSON.parse(String(message.data))); }); timeout = setInterval(() => { ws?.send(JSON.stringify({ id: node_crypto_1.default.randomUUID(), specversion: '1.1.0', source: `urn:lpgera:dirigera`, time: new Date().toISOString(), type: 'ping', data: null, })); }, 30000); } function closeWebSocket() { ws?.close(); if (timeout) { clearInterval(timeout); } }