Fixing repo checker issues
This commit is contained in:
1 parent
1f0e93d357
commit
2e267c03dd
8 files changed
+966
-13987
No files matched your search
@@ -0,0 +1,214 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const node_events_1 = require("node:events");
|
||||
const ws_1 = __importDefault(require("ws"));
|
||||
/*
|
||||
const ERRORS: Record<number, string> = {
|
||||
1: 'ERR_CANNOT_CONNECT',
|
||||
2: 'ERR_INVALID_AUTH',
|
||||
3: 'ERR_CONNECTION_LOST',
|
||||
};
|
||||
*/
|
||||
class HASS extends node_events_1.EventEmitter {
|
||||
socket = null;
|
||||
options;
|
||||
log;
|
||||
currentId = 1;
|
||||
requests = {};
|
||||
_connected = false;
|
||||
connectTimeout = null;
|
||||
closed = false;
|
||||
constructor(options, log) {
|
||||
super();
|
||||
this.options = {
|
||||
host: options.host || '127.0.0.1',
|
||||
port: parseInt(String(options.port), 10) || 8123,
|
||||
password: options.password,
|
||||
secure: options.secure,
|
||||
};
|
||||
this.log = log;
|
||||
}
|
||||
subscribeEvents(socket, callback) {
|
||||
if (socket && typeof socket.send === 'function') {
|
||||
const id = this.currentId++;
|
||||
this.requests[id] = { type: 'subscribe_events', ts: Date.now(), cb: callback };
|
||||
socket.send(JSON.stringify({
|
||||
id,
|
||||
type: 'subscribe_events',
|
||||
}));
|
||||
}
|
||||
else {
|
||||
callback?.('not connected');
|
||||
}
|
||||
}
|
||||
sendCommand(socket, type, callback, extra) {
|
||||
if (socket && typeof socket.send === 'function') {
|
||||
const id = this.currentId++;
|
||||
this.requests[id] = { type, cb: callback, ts: Date.now() };
|
||||
socket.send(JSON.stringify({
|
||||
id,
|
||||
type,
|
||||
...extra,
|
||||
}));
|
||||
}
|
||||
else {
|
||||
callback?.('not connected');
|
||||
}
|
||||
}
|
||||
sendAuth(socket, pass) {
|
||||
if (socket && typeof socket.send === 'function') {
|
||||
socket.send(JSON.stringify({
|
||||
type: 'auth',
|
||||
access_token: pass,
|
||||
}));
|
||||
}
|
||||
}
|
||||
initSocket(socket) {
|
||||
socket.on('message', (msg) => {
|
||||
const msgStr = msg.toString();
|
||||
this.log.silly(msgStr);
|
||||
const response = JSON.parse(msgStr);
|
||||
if (response.type === 'event') {
|
||||
if (response.event?.data && response.event.event_type === 'system_log_event') {
|
||||
if (response.event.data.level === 'WARNING') {
|
||||
this.log.warn(`EVENT: ${response.event.data.message}`);
|
||||
}
|
||||
else if (response.event.data.level === 'ERROR') {
|
||||
this.log.error(`EVENT: ${response.event.data.message}`);
|
||||
}
|
||||
else {
|
||||
this.log.debug(`EVENT: ${response.event.data.message}`);
|
||||
}
|
||||
}
|
||||
else if (response.event?.event_type === 'state_changed') {
|
||||
this.emit('state_changed', response.event.data.new_state);
|
||||
}
|
||||
}
|
||||
else if (response.type === 'auth_required') {
|
||||
if (!this.options.password) {
|
||||
this.emit('error', 'Password required. Connection closed');
|
||||
socket.terminate();
|
||||
}
|
||||
else {
|
||||
setTimeout(() => this.sendAuth(socket, this.options.password), 50);
|
||||
}
|
||||
}
|
||||
else if (response.type === 'auth_ok') {
|
||||
setImmediate(() => this.subscribeEvents(socket, err => {
|
||||
if (!err) {
|
||||
this._connected = true;
|
||||
this.emit('connected');
|
||||
}
|
||||
}));
|
||||
}
|
||||
else if (response.id === undefined) {
|
||||
this.log.error(`Invalid answer: ${msgStr}`);
|
||||
}
|
||||
else {
|
||||
if (response.type === 'result' && this.requests[response.id]) {
|
||||
this.log.debug(`got answer for ${this.requests[response.id].type} success = ${response.success}, result = ${JSON.stringify(response.result)}`);
|
||||
if (typeof this.requests[response.id].cb === 'function') {
|
||||
this.requests[response.id].cb(!response.success, response.result);
|
||||
delete this.requests[response.id];
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
socket.on('error', (err) => {
|
||||
this.socket = null;
|
||||
if (err?.message?.indexOf('RSV2 and RSV3 must be clear') !== -1) {
|
||||
// ignore deflate error
|
||||
}
|
||||
else {
|
||||
this.log.error(err.toString());
|
||||
}
|
||||
});
|
||||
socket.on('open', () => {
|
||||
// connection opened
|
||||
});
|
||||
socket.on('close', () => {
|
||||
this.socket = null;
|
||||
if (this._connected) {
|
||||
this._connected = false;
|
||||
this.emit('disconnected');
|
||||
}
|
||||
if (!this.connectTimeout && !this.closed) {
|
||||
this.connectTimeout = setTimeout(() => {
|
||||
this.connectTimeout = null;
|
||||
this.connect();
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
}
|
||||
isConnected() {
|
||||
return this._connected;
|
||||
}
|
||||
getConfig(callback) {
|
||||
if (!this._connected) {
|
||||
callback('not connected');
|
||||
}
|
||||
else {
|
||||
this.sendCommand(this.socket, 'get_config', callback);
|
||||
}
|
||||
}
|
||||
getStates(callback) {
|
||||
if (!this._connected) {
|
||||
callback('not connected');
|
||||
}
|
||||
else {
|
||||
this.sendCommand(this.socket, 'get_states', callback);
|
||||
}
|
||||
}
|
||||
getServices(callback) {
|
||||
if (!this._connected) {
|
||||
callback('not connected');
|
||||
}
|
||||
else {
|
||||
this.sendCommand(this.socket, 'get_services', callback);
|
||||
}
|
||||
}
|
||||
getPanels(callback) {
|
||||
if (!this._connected) {
|
||||
callback('not connected');
|
||||
}
|
||||
else {
|
||||
this.sendCommand(this.socket, 'get_panels', callback);
|
||||
}
|
||||
}
|
||||
callService(service, domain, serviceData, target, callback) {
|
||||
if (!this._connected) {
|
||||
callback('not connected');
|
||||
}
|
||||
else {
|
||||
this.sendCommand(this.socket, 'call_service', callback, {
|
||||
domain: domain || '',
|
||||
service,
|
||||
service_data: serviceData,
|
||||
target,
|
||||
});
|
||||
}
|
||||
}
|
||||
connect() {
|
||||
if (this.connectTimeout) {
|
||||
clearTimeout(this.connectTimeout);
|
||||
this.connectTimeout = null;
|
||||
}
|
||||
this.socket = new ws_1.default(`ws${this.options.secure ? 's' : ''}://${this.options.host}:${this.options.port}/api/websocket`, { perMessageDeflate: false });
|
||||
this.initSocket(this.socket);
|
||||
}
|
||||
close() {
|
||||
if (this.connectTimeout) {
|
||||
clearTimeout(this.connectTimeout);
|
||||
this.connectTimeout = null;
|
||||
}
|
||||
this.closed = true;
|
||||
if (this.socket) {
|
||||
this.socket.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.default = HASS;
|
||||
//# sourceMappingURL=hass.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"hass.js","sourceRoot":"","sources":["../../src/lib/hass.ts"],"names":[],"mappings":"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 truncated
|
||||
Reference in new issue
Block a user