dirigera
Version:
A TypeScript client for IKEA's DIRIGERA smart home hub
50 lines (49 loc) • 1.73 kB
JavaScript
;
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);
}
}