@digital-alchemy/hass 24.9.3 → 24.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/dynamic.d.ts +1 -1
- package/dist/dynamic.js +7 -2
- package/dist/dynamic.js.map +1 -1
- package/dist/extensions/area.extension.d.ts +2 -12
- package/dist/extensions/area.extension.js +20 -26
- package/dist/extensions/area.extension.js.map +1 -1
- package/dist/extensions/backup.extension.d.ts +2 -7
- package/dist/extensions/backup.extension.js +5 -8
- package/dist/extensions/backup.extension.js.map +1 -1
- package/dist/extensions/call-proxy.extension.d.ts +1 -1
- package/dist/extensions/call-proxy.extension.js +3 -22
- package/dist/extensions/call-proxy.extension.js.map +1 -1
- package/dist/extensions/config.extension.d.ts +2 -6
- package/dist/extensions/config.extension.js +21 -25
- package/dist/extensions/config.extension.js.map +1 -1
- package/dist/extensions/conversation.extension.d.ts +2 -6
- package/dist/extensions/conversation.extension.js +5 -8
- package/dist/extensions/conversation.extension.js.map +1 -1
- package/dist/extensions/device.extension.d.ts +2 -5
- package/dist/extensions/device.extension.js +16 -22
- package/dist/extensions/device.extension.js.map +1 -1
- package/dist/extensions/entity.extension.d.ts +2 -61
- package/dist/extensions/entity.extension.js +42 -83
- package/dist/extensions/entity.extension.js.map +1 -1
- package/dist/extensions/events.extension.d.ts +3 -11
- package/dist/extensions/events.extension.js +8 -11
- package/dist/extensions/events.extension.js.map +1 -1
- package/dist/extensions/fetch-api.extension.d.ts +12 -4
- package/dist/extensions/fetch-api.extension.js +23 -35
- package/dist/extensions/fetch-api.extension.js.map +1 -1
- package/dist/extensions/floor.extension.d.ts +2 -9
- package/dist/extensions/floor.extension.js +17 -23
- package/dist/extensions/floor.extension.js.map +1 -1
- package/dist/extensions/id-by.extension.js +15 -20
- package/dist/extensions/id-by.extension.js.map +1 -1
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.js +16 -18
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/internal.extension.d.ts +18 -0
- package/dist/extensions/internal.extension.js +102 -0
- package/dist/extensions/internal.extension.js.map +1 -0
- package/dist/extensions/label.extension.d.ts +2 -9
- package/dist/extensions/label.extension.js +17 -23
- package/dist/extensions/label.extension.js.map +1 -1
- package/dist/extensions/reference.extension.d.ts +2 -12
- package/dist/extensions/reference.extension.js +19 -25
- package/dist/extensions/reference.extension.js.map +1 -1
- package/dist/extensions/registry.extension.d.ts +2 -7
- package/dist/extensions/registry.extension.js +1 -4
- package/dist/extensions/registry.extension.js.map +1 -1
- package/dist/extensions/websocket-api.extension.d.ts +3 -78
- package/dist/extensions/websocket-api.extension.js +82 -165
- package/dist/extensions/websocket-api.extension.js.map +1 -1
- package/dist/extensions/zone.extension.d.ts +2 -7
- package/dist/extensions/zone.extension.js +15 -21
- package/dist/extensions/zone.extension.js.map +1 -1
- package/dist/hass.module.d.ts +47 -36
- package/dist/hass.module.js +70 -70
- package/dist/hass.module.js.map +1 -1
- package/dist/helpers/backup.helper.js +1 -2
- package/dist/helpers/constants.helper.js +15 -18
- package/dist/helpers/constants.helper.js.map +1 -1
- package/dist/helpers/device.helper.js +2 -5
- package/dist/helpers/device.helper.js.map +1 -1
- package/dist/helpers/entity-state.helper.d.ts +3 -8
- package/dist/helpers/entity-state.helper.js +1 -8
- package/dist/helpers/entity-state.helper.js.map +1 -1
- package/dist/helpers/features.helper.js +79 -85
- package/dist/helpers/features.helper.js.map +1 -1
- package/dist/helpers/fetch/calendar.js +1 -2
- package/dist/helpers/fetch/configuration.js +2 -5
- package/dist/helpers/fetch/configuration.js.map +1 -1
- package/dist/helpers/fetch/index.js +5 -8
- package/dist/helpers/fetch/index.js.map +1 -1
- package/dist/helpers/fetch/server-log.js +1 -2
- package/dist/helpers/fetch/server-log.js.map +1 -1
- package/dist/helpers/fetch/service-list.js +1 -2
- package/dist/helpers/fetch/weather-forecasts.js +1 -2
- package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
- package/dist/helpers/fetch.helper.d.ts +162 -0
- package/dist/helpers/fetch.helper.js +161 -0
- package/dist/helpers/fetch.helper.js.map +1 -0
- package/dist/helpers/id-by.helper.js +1 -2
- package/dist/helpers/index.d.ts +2 -1
- package/dist/helpers/index.js +13 -15
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/interfaces.helper.d.ts +228 -0
- package/dist/helpers/interfaces.helper.js +10 -0
- package/dist/helpers/interfaces.helper.js.map +1 -0
- package/dist/helpers/manifest.helper.d.ts +0 -1
- package/dist/helpers/manifest.helper.js +0 -1
- package/dist/helpers/notify.helper.d.ts +11 -3
- package/dist/helpers/notify.helper.js +1 -2
- package/dist/helpers/registry.js +7 -10
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/utility.helper.d.ts +6 -1
- package/dist/helpers/utility.helper.js +9 -13
- package/dist/helpers/utility.helper.js.map +1 -1
- package/dist/helpers/websocket.helper.d.ts +1 -2
- package/dist/helpers/websocket.helper.js +1 -2
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/area.extension.js +51 -0
- package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
- package/dist/mock_assistant/extensions/config.extension.js +29 -0
- package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/device.extension.js +33 -0
- package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
- package/dist/mock_assistant/extensions/entity.extension.js +77 -0
- package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
- package/dist/mock_assistant/extensions/events.extension.js +3 -6
- package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
- package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
- package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
- package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
- package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
- package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
- package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/floor.extension.js +51 -0
- package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/index.d.ts +10 -0
- package/dist/mock_assistant/extensions/index.js +12 -5
- package/dist/mock_assistant/extensions/index.js.map +1 -1
- package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/label.extension.js +51 -0
- package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
- package/dist/mock_assistant/extensions/services.extension.js +20 -0
- package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/zone.extension.js +51 -0
- package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
- package/dist/mock_assistant/helpers/fixtures.js +1 -2
- package/dist/mock_assistant/helpers/index.d.ts +0 -1
- package/dist/mock_assistant/helpers/index.js +1 -5
- package/dist/mock_assistant/helpers/index.js.map +1 -1
- package/dist/mock_assistant/index.js +3 -6
- package/dist/mock_assistant/index.js.map +1 -1
- package/dist/mock_assistant/main.js +11 -15
- package/dist/mock_assistant/main.js.map +1 -1
- package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
- package/dist/mock_assistant/mock-assistant.module.js +56 -11
- package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
- package/dist/quickboot.module.js +5 -8
- package/dist/quickboot.module.js.map +1 -1
- package/dist/testing/area.spec.js +106 -194
- package/dist/testing/area.spec.js.map +1 -1
- package/dist/testing/backup.spec.js +97 -139
- package/dist/testing/backup.spec.js.map +1 -1
- package/dist/testing/config.spec.js +79 -153
- package/dist/testing/config.spec.js.map +1 -1
- package/dist/testing/device.spec.js +35 -69
- package/dist/testing/device.spec.js.map +1 -1
- package/dist/testing/entity.spec.js +94 -149
- package/dist/testing/entity.spec.js.map +1 -1
- package/dist/testing/events.spec.js +33 -57
- package/dist/testing/events.spec.js.map +1 -1
- package/dist/testing/fetch-api.spec.js +242 -427
- package/dist/testing/fetch-api.spec.js.map +1 -1
- package/dist/testing/fixtures.spec.d.ts +1 -0
- package/dist/testing/fixtures.spec.js +150 -0
- package/dist/testing/fixtures.spec.js.map +1 -0
- package/dist/testing/floor.spec.js +106 -194
- package/dist/testing/floor.spec.js.map +1 -1
- package/dist/testing/id-by.spec.js +68 -107
- package/dist/testing/id-by.spec.js.map +1 -1
- package/dist/testing/label.spec.js +106 -194
- package/dist/testing/label.spec.js.map +1 -1
- package/dist/testing/ref-by.spec.js +155 -219
- package/dist/testing/ref-by.spec.js.map +1 -1
- package/dist/testing/websocket.spec.d.ts +1 -8
- package/dist/testing/websocket.spec.js +35 -50
- package/dist/testing/websocket.spec.js.map +1 -1
- package/dist/testing/workflow.spec.js +82 -81
- package/dist/testing/workflow.spec.js.map +1 -1
- package/dist/testing/zone.spec.js +61 -113
- package/dist/testing/zone.spec.js.map +1 -1
- package/package.json +56 -40
- package/dist/helpers/metrics.helper.d.ts +0 -29
- package/dist/helpers/metrics.helper.js +0 -62
- package/dist/helpers/metrics.helper.js.map +0 -1
- package/dist/mock_assistant/helpers/utils.d.ts +0 -4
- package/dist/mock_assistant/helpers/utils.js +0 -57
- package/dist/mock_assistant/helpers/utils.js.map +0 -1
|
@@ -1,79 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import { OnHassEventOptions, SocketMessageDTO, SocketSubscribeOptions } from "..";
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { HassWebsocketAPI } from "..";
|
|
4
3
|
export declare const SOCKET_CONNECTED = "SOCKET_CONNECTED";
|
|
5
|
-
declare
|
|
6
|
-
offline = 1,
|
|
7
|
-
connecting = 2,
|
|
8
|
-
connected = 3,
|
|
9
|
-
unknown = 4,
|
|
10
|
-
invalid = 5
|
|
11
|
-
}
|
|
12
|
-
type ConnectionState = `${keyof typeof WebsocketConnectionState}`;
|
|
13
|
-
export declare function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }: TServiceParams): {
|
|
14
|
-
/**
|
|
15
|
-
* the current state of the websocket
|
|
16
|
-
*/
|
|
17
|
-
connectionState: ConnectionState;
|
|
18
|
-
/**
|
|
19
|
-
* Convenient wrapper for sendMessage
|
|
20
|
-
*/
|
|
21
|
-
fireEvent: (event_type: string, event_data?: object) => Promise<unknown>;
|
|
22
|
-
/**
|
|
23
|
-
* Set up a new websocket connection to home assistant
|
|
24
|
-
*f
|
|
25
|
-
* This doesn't normally need to be called by applications, the extension self manages
|
|
26
|
-
*/
|
|
27
|
-
init: () => Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* run a callback when the socket finishes connecting
|
|
30
|
-
*/
|
|
31
|
-
onConnect: (callback: () => TBlackHole) => void;
|
|
32
|
-
/**
|
|
33
|
-
* Attach to the incoming stream of socket events. Do your own filtering and processing from there
|
|
34
|
-
*
|
|
35
|
-
* Returns removal function
|
|
36
|
-
*/
|
|
37
|
-
onEvent: <DATA extends object>({ context, label, event, once, exec, }: OnHassEventOptions<DATA>) => () => void;
|
|
38
|
-
/**
|
|
39
|
-
* for unit testing
|
|
40
|
-
*/
|
|
41
|
-
onMessage: (message: SocketMessageDTO) => Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* when true:
|
|
44
|
-
* - outgoing socket messages are blocked
|
|
45
|
-
* - entities don't emit updates
|
|
46
|
-
*/
|
|
47
|
-
pauseMessages: boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Send a message to home assistant via the socket connection
|
|
50
|
-
*
|
|
51
|
-
* Applications probably want a higher level function than this
|
|
52
|
-
*/
|
|
53
|
-
sendMessage: <RESPONSE_VALUE extends unknown = unknown>(data: {
|
|
54
|
-
type: string;
|
|
55
|
-
id?: number;
|
|
56
|
-
[key: string]: unknown;
|
|
57
|
-
}, waitForResponse?: boolean, subscription?: () => void) => Promise<RESPONSE_VALUE>;
|
|
58
|
-
/**
|
|
59
|
-
* internal
|
|
60
|
-
*/
|
|
61
|
-
setConnectionState: (state: ConnectionState) => void;
|
|
62
|
-
/**
|
|
63
|
-
* internal
|
|
64
|
-
*/
|
|
65
|
-
socketEvents: EventEmitter<[never]>;
|
|
66
|
-
/**
|
|
67
|
-
* Subscribe to hass core registry updates.
|
|
68
|
-
*
|
|
69
|
-
* Not the same as `onEvent` (you probably want that)
|
|
70
|
-
*/
|
|
71
|
-
subscribe: <EVENT extends string>({ event_type, context, exec, }: SocketSubscribeOptions<EVENT>) => Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* remove the current socket connection to home assistant
|
|
74
|
-
*
|
|
75
|
-
* will need to call init() again to start up
|
|
76
|
-
*/
|
|
77
|
-
teardown: () => Promise<void>;
|
|
78
|
-
};
|
|
79
|
-
export {};
|
|
4
|
+
export declare function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }: TServiceParams): HassWebsocketAPI;
|
|
@@ -1,47 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const tslib_1 = require("tslib");
|
|
6
|
-
const core_1 = require("@digital-alchemy/core");
|
|
7
|
-
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
8
|
-
const events_1 = tslib_1.__importDefault(require("events"));
|
|
9
|
-
const process_1 = require("process");
|
|
10
|
-
const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
11
|
-
const __1 = require("..");
|
|
12
|
-
let connection;
|
|
1
|
+
import { InternalError, is, SECOND, sleep, START, } from "@digital-alchemy/core";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import EventEmitter from "events";
|
|
4
|
+
import WS from "ws";
|
|
13
5
|
const CONNECTION_OPEN = 1;
|
|
14
6
|
const CLEANUP_INTERVAL = 5;
|
|
15
7
|
const UNLIMITED = 0;
|
|
16
8
|
const CONNECTION_FAILED = 2;
|
|
17
|
-
let messageCount =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var WebsocketConnectionState;
|
|
21
|
-
(function (WebsocketConnectionState) {
|
|
22
|
-
WebsocketConnectionState[WebsocketConnectionState["offline"] = 1] = "offline";
|
|
23
|
-
WebsocketConnectionState[WebsocketConnectionState["connecting"] = 2] = "connecting";
|
|
24
|
-
WebsocketConnectionState[WebsocketConnectionState["connected"] = 3] = "connected";
|
|
25
|
-
WebsocketConnectionState[WebsocketConnectionState["unknown"] = 4] = "unknown";
|
|
26
|
-
WebsocketConnectionState[WebsocketConnectionState["invalid"] = 5] = "invalid";
|
|
27
|
-
})(WebsocketConnectionState || (WebsocketConnectionState = {}));
|
|
28
|
-
function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }) {
|
|
9
|
+
let messageCount = START;
|
|
10
|
+
export const SOCKET_CONNECTED = "SOCKET_CONNECTED";
|
|
11
|
+
export function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }) {
|
|
29
12
|
/**
|
|
30
13
|
* Local attachment points for socket events
|
|
31
14
|
*/
|
|
32
|
-
const socketEvents = new
|
|
33
|
-
|
|
15
|
+
const socketEvents = new EventEmitter();
|
|
16
|
+
socketEvents.setMaxListeners(UNLIMITED);
|
|
34
17
|
let MESSAGE_TIMESTAMPS = [];
|
|
35
18
|
let onSocketReady;
|
|
36
19
|
const waitingCallback = new Map();
|
|
37
|
-
const isOld = (date) =>
|
|
20
|
+
const isOld = (date) => is.undefined(date) || date.diff(dayjs(), "s") >= config.hass.RETRY_INTERVAL;
|
|
38
21
|
// Start the socket
|
|
39
22
|
lifecycle.onBootstrap(async () => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
attachScheduledFunctions();
|
|
44
|
-
}
|
|
23
|
+
logger.debug({ name: "onBootstrap" }, `auto starting connection`);
|
|
24
|
+
await manageConnection();
|
|
25
|
+
hass.socket.attachScheduledFunctions();
|
|
45
26
|
});
|
|
46
27
|
let lastReceivedMessage;
|
|
47
28
|
let pingSleep;
|
|
@@ -50,11 +31,10 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
50
31
|
// #MARK: setConnectionState
|
|
51
32
|
function setConnectionState(state) {
|
|
52
33
|
hass.socket.connectionState = state;
|
|
53
|
-
__1.SOCKET_CONNECTION_STATE.labels({ state }).set(WebsocketConnectionState[state]);
|
|
54
34
|
}
|
|
55
35
|
// #MARK: handleUnknownConnectionState
|
|
56
36
|
async function handleUnknownConnectionState() {
|
|
57
|
-
const now = (
|
|
37
|
+
const now = dayjs();
|
|
58
38
|
const name = handleUnknownConnectionState;
|
|
59
39
|
const threshold = config.hass.RETRY_INTERVAL * CONNECTION_FAILED;
|
|
60
40
|
if (!isOld(lastPingAttempt)) {
|
|
@@ -64,18 +44,12 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
64
44
|
// send a ping message to force a pong
|
|
65
45
|
logger.trace({ name }, `emitting ping`);
|
|
66
46
|
lastPingAttempt = now;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
hass.socket.sendMessage({ type: "ping" }, false);
|
|
74
|
-
// reply will be captured by this, waiting at most a second
|
|
75
|
-
pingSleep = (0, core_1.sleep)(core_1.SECOND);
|
|
76
|
-
await pingSleep;
|
|
77
|
-
pingSleep = undefined;
|
|
78
|
-
}
|
|
47
|
+
// emit a ping, do not wait for reply (inline)
|
|
48
|
+
hass.socket.sendMessage({ type: "ping" }, false);
|
|
49
|
+
// reply will be captured by this, waiting at most a second
|
|
50
|
+
pingSleep = sleep(SECOND);
|
|
51
|
+
await pingSleep;
|
|
52
|
+
pingSleep = undefined;
|
|
79
53
|
if (!isOld(lastReceivedMessage)) {
|
|
80
54
|
// received a least a pong
|
|
81
55
|
hass.socket.setConnectionState("connected");
|
|
@@ -93,9 +67,9 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
93
67
|
logger.warn({ name }, "hass stopped replying {unknown} => {offline}");
|
|
94
68
|
}
|
|
95
69
|
// #MARK: ManageConnection
|
|
96
|
-
async function
|
|
97
|
-
const now = (
|
|
98
|
-
const name =
|
|
70
|
+
async function manageConnection() {
|
|
71
|
+
const now = dayjs();
|
|
72
|
+
const name = manageConnection;
|
|
99
73
|
switch (hass.socket.connectionState) {
|
|
100
74
|
// * connected
|
|
101
75
|
case "connected": {
|
|
@@ -126,14 +100,14 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
126
100
|
// reset and try again
|
|
127
101
|
await hass.socket.teardown();
|
|
128
102
|
logger.warn({ name }, "connection failed {connecting} => {offline}");
|
|
129
|
-
await
|
|
103
|
+
await manageConnection();
|
|
130
104
|
return;
|
|
131
105
|
}
|
|
132
106
|
// fall through
|
|
133
107
|
case "offline": {
|
|
134
108
|
// ### offline
|
|
135
109
|
// * connection identifies as offline, let's attempt to fix that
|
|
136
|
-
messageCount =
|
|
110
|
+
messageCount = START;
|
|
137
111
|
lastConnectAttempt = now;
|
|
138
112
|
hass.socket.setConnectionState("connecting");
|
|
139
113
|
logger.debug({ name }, "initializing new socket {offline} => {connecting}");
|
|
@@ -159,31 +133,32 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
159
133
|
function attachScheduledFunctions() {
|
|
160
134
|
logger.trace({ name: attachScheduledFunctions }, `attaching interval schedules`);
|
|
161
135
|
scheduler.interval({
|
|
162
|
-
exec: async () => await
|
|
163
|
-
interval: config.hass.RETRY_INTERVAL *
|
|
136
|
+
exec: async () => await manageConnection(),
|
|
137
|
+
interval: config.hass.RETRY_INTERVAL * SECOND,
|
|
164
138
|
});
|
|
165
139
|
scheduler.interval({
|
|
166
140
|
exec: () => {
|
|
167
|
-
const
|
|
168
|
-
MESSAGE_TIMESTAMPS = MESSAGE_TIMESTAMPS.filter(time => time >
|
|
141
|
+
const target = Date.now() - SECOND * config.hass.SOCKET_AVG_DURATION;
|
|
142
|
+
MESSAGE_TIMESTAMPS = MESSAGE_TIMESTAMPS.filter(time => time > target);
|
|
169
143
|
},
|
|
170
|
-
interval: CLEANUP_INTERVAL *
|
|
144
|
+
interval: CLEANUP_INTERVAL * SECOND,
|
|
171
145
|
});
|
|
172
146
|
}
|
|
173
147
|
lifecycle.onShutdownStart(async () => {
|
|
174
148
|
logger.debug({ name: "onShutdownStart" }, `shutdown - tearing down connection`);
|
|
175
149
|
await hass.socket.teardown();
|
|
150
|
+
socketEvents.removeAllListeners();
|
|
176
151
|
});
|
|
177
152
|
// #MARK: teardown
|
|
178
153
|
async function teardown() {
|
|
179
|
-
if (!connection) {
|
|
154
|
+
if (!hass.socket.connection) {
|
|
180
155
|
return;
|
|
181
156
|
}
|
|
182
|
-
if (connection.readyState === CONNECTION_OPEN) {
|
|
157
|
+
if (hass.socket.connection.readyState === CONNECTION_OPEN) {
|
|
183
158
|
logger.debug({ name: teardown }, `closing current connection`);
|
|
184
|
-
connection.close();
|
|
159
|
+
hass.socket.connection.close();
|
|
185
160
|
}
|
|
186
|
-
connection = undefined;
|
|
161
|
+
hass.socket.connection = undefined;
|
|
187
162
|
hass.socket.setConnectionState("offline");
|
|
188
163
|
}
|
|
189
164
|
// #MARK: fireEvent
|
|
@@ -203,7 +178,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
203
178
|
if (hass.socket.pauseMessages && data.type !== "ping") {
|
|
204
179
|
return undefined;
|
|
205
180
|
}
|
|
206
|
-
countMessage(
|
|
181
|
+
countMessage();
|
|
207
182
|
const id = messageCount;
|
|
208
183
|
if (data.type !== "auth") {
|
|
209
184
|
data.id = id;
|
|
@@ -211,47 +186,44 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
211
186
|
const json = JSON.stringify(data);
|
|
212
187
|
const sentAt = new Date();
|
|
213
188
|
// ? not defined for unit tests
|
|
214
|
-
connection?.send(json);
|
|
189
|
+
hass.socket.connection?.send(json);
|
|
215
190
|
if (subscription) {
|
|
216
191
|
return data.id;
|
|
217
192
|
}
|
|
218
193
|
if (!waitForResponse) {
|
|
219
194
|
return undefined;
|
|
220
195
|
}
|
|
221
|
-
return new Promise(async (done) => {
|
|
222
|
-
if (config.hass.MOCK_SOCKET) {
|
|
223
|
-
done(undefined); // do something else if you want a real value
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
196
|
+
return await new Promise(async (done) => {
|
|
226
197
|
waitingCallback.set(id, done);
|
|
227
|
-
await (
|
|
228
|
-
if (!waitingCallback.has(id)) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
// this could happen around dropped connections, or a number of other reasons
|
|
232
|
-
//
|
|
233
|
-
// discard the promise so whatever flow is depending on this can get garbage collected
|
|
234
|
-
waitingCallback.delete(id);
|
|
235
|
-
logger.warn({
|
|
236
|
-
message: data,
|
|
237
|
-
name: sendMessage,
|
|
238
|
-
sentAt: internal.utils.relativeDate(sentAt),
|
|
239
|
-
}, `sent message, did not receive reply`);
|
|
198
|
+
await hass.socket.waitForReply(id, data, sentAt);
|
|
240
199
|
});
|
|
241
200
|
}
|
|
201
|
+
async function waitForReply(id, data, sentAt) {
|
|
202
|
+
await sleep(config.hass.EXPECT_RESPONSE_AFTER * SECOND);
|
|
203
|
+
if (!waitingCallback.has(id)) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
// this could happen around dropped connections, or a number of other reasons
|
|
207
|
+
//
|
|
208
|
+
// discard the promise so whatever flow is depending on this can get garbage collected
|
|
209
|
+
waitingCallback.delete(id);
|
|
210
|
+
logger.warn({
|
|
211
|
+
message: data,
|
|
212
|
+
name: waitForReply,
|
|
213
|
+
sentAt: internal.utils.relativeDate(sentAt),
|
|
214
|
+
}, `sent message, did not receive reply`);
|
|
215
|
+
}
|
|
242
216
|
// #MARK: countMessage
|
|
243
|
-
function countMessage(
|
|
217
|
+
function countMessage() {
|
|
244
218
|
messageCount++;
|
|
245
219
|
const now = Date.now();
|
|
246
220
|
MESSAGE_TIMESTAMPS.push(now);
|
|
247
221
|
const avgWindow = config.hass.SOCKET_AVG_DURATION;
|
|
248
|
-
const perSecondAverage = Math.ceil(MESSAGE_TIMESTAMPS.filter(time => time > now -
|
|
249
|
-
|
|
250
|
-
__1.SOCKET_SENT_MESSAGES.labels({ type }).inc();
|
|
251
|
-
const { SOCKET_CRASH_REQUESTS_PER_SEC: crashCount, SOCKET_WARN_REQUESTS_PER_SEC: warnCount, } = config.hass;
|
|
222
|
+
const perSecondAverage = Math.ceil(MESSAGE_TIMESTAMPS.filter(time => time > now - SECOND * avgWindow).length / avgWindow);
|
|
223
|
+
const { SOCKET_CRASH_REQUESTS_PER_SEC: crashCount, SOCKET_WARN_REQUESTS_PER_SEC: warnCount } = config.hass;
|
|
252
224
|
if (perSecondAverage > crashCount) {
|
|
253
225
|
logger.fatal({ name: countMessage }, `exceeded {CRASH_REQUESTS_PER_MIN} ([%s]) threshold`, crashCount);
|
|
254
|
-
|
|
226
|
+
process.exit();
|
|
255
227
|
}
|
|
256
228
|
if (perSecondAverage > warnCount) {
|
|
257
229
|
logger.warn({ name: countMessage }, `message traffic [%s] > [%s] > [%s]`, crashCount, perSecondAverage, warnCount);
|
|
@@ -263,26 +235,20 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
263
235
|
const protocol = url.protocol === `http:` ? `ws:` : `wss:`;
|
|
264
236
|
const path = url.pathname === "/" ? "" : url.pathname;
|
|
265
237
|
const port = url.port ? `:${url.port}` : "";
|
|
266
|
-
return
|
|
267
|
-
`${protocol}//${url.hostname}${port}${path}/api/websocket`);
|
|
238
|
+
return `${protocol}//${url.hostname}${port}${path}/api/websocket`;
|
|
268
239
|
}
|
|
269
240
|
// #MARK: init
|
|
270
241
|
async function init() {
|
|
271
|
-
if (connection) {
|
|
272
|
-
throw new
|
|
273
|
-
}
|
|
274
|
-
messageCount = core_1.START;
|
|
275
|
-
if (config.hass.MOCK_SOCKET) {
|
|
276
|
-
hass.socket.setConnectionState("connected");
|
|
277
|
-
setImmediate(() => event.emit(exports.SOCKET_CONNECTED));
|
|
278
|
-
return;
|
|
242
|
+
if (hass.socket.connection) {
|
|
243
|
+
throw new InternalError(context, "ExistingConnection", `Destroy the current connection before creating a new one`);
|
|
279
244
|
}
|
|
245
|
+
messageCount = START;
|
|
280
246
|
const url = getUrl();
|
|
281
247
|
try {
|
|
282
|
-
connection =
|
|
283
|
-
connection.on("message", async (message) => {
|
|
248
|
+
hass.socket.connection = hass.socket.createConnection(url);
|
|
249
|
+
hass.socket.connection.on("message", async (message) => {
|
|
284
250
|
try {
|
|
285
|
-
lastReceivedMessage = (
|
|
251
|
+
lastReceivedMessage = dayjs();
|
|
286
252
|
const data = JSON.parse(message.toString());
|
|
287
253
|
await onMessage(data);
|
|
288
254
|
pingSleep?.kill("continue");
|
|
@@ -294,14 +260,16 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
294
260
|
logger.error({ error, name: init }, `💣 error bubbled up from websocket message event handler`);
|
|
295
261
|
}
|
|
296
262
|
});
|
|
297
|
-
connection.on("error", async (error) => {
|
|
263
|
+
hass.socket.connection.on("error", async (error) => {
|
|
298
264
|
logger.error({ error: error, name: init }, "socket error");
|
|
299
265
|
if (hass.socket.connectionState === "connected") {
|
|
300
266
|
hass.socket.setConnectionState("unknown");
|
|
301
267
|
}
|
|
302
268
|
});
|
|
303
|
-
connection.on("close", async (code, reason) => {
|
|
304
|
-
|
|
269
|
+
hass.socket.connection.on("close", async (code, reason) => {
|
|
270
|
+
if (!config.boilerplate.IS_TEST) {
|
|
271
|
+
logger.warn({ code, name: init, reason: reason.toString() }, "connection closed");
|
|
272
|
+
}
|
|
305
273
|
await hass.socket.teardown();
|
|
306
274
|
});
|
|
307
275
|
await new Promise(done => (onSocketReady = done));
|
|
@@ -330,7 +298,6 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
330
298
|
*/
|
|
331
299
|
async function onMessage(message) {
|
|
332
300
|
const id = Number(message.id);
|
|
333
|
-
__1.SOCKET_RECEIVED_MESSAGES.labels({ type: message.type }).inc();
|
|
334
301
|
switch (message.type) {
|
|
335
302
|
case "auth_required": {
|
|
336
303
|
logger.trace({ name: onMessage }, `sending authentication`);
|
|
@@ -342,7 +309,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
342
309
|
logger.trace({ name: onMessage }, `event subscriptions starting`);
|
|
343
310
|
await hass.socket.sendMessage({ type: "subscribe_events" }, false);
|
|
344
311
|
onSocketReady?.();
|
|
345
|
-
event.emit(
|
|
312
|
+
event.emit(SOCKET_CONNECTED);
|
|
346
313
|
return;
|
|
347
314
|
}
|
|
348
315
|
case "event": {
|
|
@@ -360,7 +327,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
360
327
|
hass.socket.setConnectionState("invalid");
|
|
361
328
|
logger.fatal({ message, name: onMessage }, "received auth invalid {connecting} => {invalid}");
|
|
362
329
|
// ? If you have a use case for making this exit configurable, open a ticket
|
|
363
|
-
|
|
330
|
+
process.exit();
|
|
364
331
|
return;
|
|
365
332
|
}
|
|
366
333
|
default: {
|
|
@@ -374,8 +341,8 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
374
341
|
if (message.event.event_type === "state_changed") {
|
|
375
342
|
const { new_state, old_state } = message.event.data;
|
|
376
343
|
const id = new_state?.entity_id || old_state.entity_id;
|
|
377
|
-
if (
|
|
378
|
-
throw new
|
|
344
|
+
if (is.empty(id)) {
|
|
345
|
+
throw new InternalError(context, "NO_ID", "Received state change, but could not identify an entity_id");
|
|
379
346
|
}
|
|
380
347
|
// ? null = deleted entity
|
|
381
348
|
// TODO: handle renames properly
|
|
@@ -411,16 +378,10 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
411
378
|
}
|
|
412
379
|
}
|
|
413
380
|
// #MARK: onEvent
|
|
414
|
-
function onEvent({ context,
|
|
381
|
+
function onEvent({ context, event, once, exec }) {
|
|
415
382
|
logger.trace({ context, event, name: onEvent }, `attaching socket event listener`);
|
|
416
383
|
const callback = async (data) => {
|
|
417
|
-
await internal.safeExec(
|
|
418
|
-
duration: __1.SOCKET_EVENT_EXECUTION_TIME,
|
|
419
|
-
errors: __1.SOCKET_EVENT_ERRORS,
|
|
420
|
-
exec: async () => await exec(data),
|
|
421
|
-
executions: __1.SOCKET_EVENT_EXECUTION_COUNT,
|
|
422
|
-
labels: { context, event, label },
|
|
423
|
-
});
|
|
384
|
+
await internal.safeExec(async () => await exec(data));
|
|
424
385
|
};
|
|
425
386
|
if (once) {
|
|
426
387
|
socketEvents.once(event, callback);
|
|
@@ -448,74 +409,30 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
|
|
|
448
409
|
await internal.safeExec(async () => await callback());
|
|
449
410
|
};
|
|
450
411
|
if (hass.socket.connectionState === "connected") {
|
|
451
|
-
logger.
|
|
412
|
+
logger.debug({ name: "onConnect" }, `added callback after socket was already connected, running immediately`);
|
|
452
413
|
setImmediate(wrapped);
|
|
453
414
|
// attach anyways, for restarts or whatever
|
|
454
415
|
}
|
|
455
|
-
event.on(
|
|
416
|
+
event.on(SOCKET_CONNECTED, wrapped);
|
|
456
417
|
}
|
|
457
418
|
// #MARK: return object
|
|
458
419
|
return {
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
*/
|
|
420
|
+
attachScheduledFunctions,
|
|
421
|
+
connection: undefined,
|
|
462
422
|
connectionState: "offline",
|
|
463
|
-
|
|
464
|
-
* Convenient wrapper for sendMessage
|
|
465
|
-
*/
|
|
423
|
+
createConnection: (url) => new WS(url),
|
|
466
424
|
fireEvent,
|
|
467
|
-
/**
|
|
468
|
-
* Set up a new websocket connection to home assistant
|
|
469
|
-
*f
|
|
470
|
-
* This doesn't normally need to be called by applications, the extension self manages
|
|
471
|
-
*/
|
|
472
425
|
init,
|
|
473
|
-
/**
|
|
474
|
-
* run a callback when the socket finishes connecting
|
|
475
|
-
*/
|
|
476
426
|
onConnect,
|
|
477
|
-
/**
|
|
478
|
-
* Attach to the incoming stream of socket events. Do your own filtering and processing from there
|
|
479
|
-
*
|
|
480
|
-
* Returns removal function
|
|
481
|
-
*/
|
|
482
427
|
onEvent,
|
|
483
|
-
/**
|
|
484
|
-
* for unit testing
|
|
485
|
-
*/
|
|
486
428
|
onMessage,
|
|
487
|
-
/**
|
|
488
|
-
* when true:
|
|
489
|
-
* - outgoing socket messages are blocked
|
|
490
|
-
* - entities don't emit updates
|
|
491
|
-
*/
|
|
492
429
|
pauseMessages: false,
|
|
493
|
-
/**
|
|
494
|
-
* Send a message to home assistant via the socket connection
|
|
495
|
-
*
|
|
496
|
-
* Applications probably want a higher level function than this
|
|
497
|
-
*/
|
|
498
430
|
sendMessage,
|
|
499
|
-
/**
|
|
500
|
-
* internal
|
|
501
|
-
*/
|
|
502
431
|
setConnectionState,
|
|
503
|
-
/**
|
|
504
|
-
* internal
|
|
505
|
-
*/
|
|
506
432
|
socketEvents,
|
|
507
|
-
/**
|
|
508
|
-
* Subscribe to hass core registry updates.
|
|
509
|
-
*
|
|
510
|
-
* Not the same as `onEvent` (you probably want that)
|
|
511
|
-
*/
|
|
512
433
|
subscribe,
|
|
513
|
-
/**
|
|
514
|
-
* remove the current socket connection to home assistant
|
|
515
|
-
*
|
|
516
|
-
* will need to call init() again to start up
|
|
517
|
-
*/
|
|
518
434
|
teardown,
|
|
435
|
+
waitForReply,
|
|
519
436
|
};
|
|
520
437
|
}
|
|
521
438
|
//# sourceMappingURL=websocket-api.extension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api.extension.js","sourceRoot":"","sources":["../../src/extensions/websocket-api.extension.ts"],"names":[],"mappings":";;;AA+CA,oCAyoBC;;AAxrBD,gDAQ+B;AAC/B,0DAAqC;AACrC,4DAAkC;AAClC,qCAA+B;AAC/B,oDAAoB;AAEpB,0BAWY;AAEZ,IAAI,UAAc,CAAC;AACnB,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,IAAI,YAAY,GAAG,YAAK,CAAC;AACZ,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,wDAAwD;AACxD,IAAK,wBAMJ;AAND,WAAK,wBAAwB;IAC3B,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,iFAAa,CAAA;IACb,6EAAW,CAAA;IACX,6EAAW,CAAA;AACb,CAAC,EANI,wBAAwB,KAAxB,wBAAwB,QAM5B;AAKD,SAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,GACM;IACf;;OAEG;IACH,MAAM,YAAY,GAAG,IAAI,gBAAY,EAAE,CAAC;IACxC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,kBAAkB,GAAa,EAAE,CAAC;IACtC,IAAI,aAAyB,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2C,CAAC;IAC3E,MAAM,KAAK,GAAG,CAAC,IAAW,EAAE,EAAE,CAC5B,SAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAA,eAAK,GAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;IAE9E,mBAAmB;IACnB,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAClE,MAAM,gBAAgB,EAAE,CAAC;YACzB,wBAAwB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,mBAA0B,CAAC;IAC/B,IAAI,SAAmC,CAAC;IACxC,IAAI,kBAAyB,CAAC;IAC9B,IAAI,eAAsB,CAAC;IAE3B,4BAA4B;IAC5B,SAAS,kBAAkB,CAAC,KAAsB;QAChD,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;QACpC,2BAAuB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAC3C,wBAAwB,CAAC,KAAK,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,KAAK,UAAU,4BAA4B;QACzC,MAAM,GAAG,GAAG,IAAA,eAAK,GAAE,CAAC;QACpB,MAAM,IAAI,GAAG,4BAA4B,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5B,mDAAmD;YACnD,OAAO;QACT,CAAC;QACD,sCAAsC;QACtC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;QACxC,eAAe,GAAG,GAAG,CAAC;QAEtB,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,kBAAkB;YAClB,mBAAmB,GAAG,GAAG,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YAEjD,2DAA2D;YAC3D,SAAS,GAAG,IAAA,YAAK,EAAC,aAAM,CAAC,CAAC;YAC1B,MAAM,SAAS,CAAC;YAChB,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAChC,0BAA0B;YAC1B,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;YACnD,oCAAoC;YACpC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACxE,CAAC;IAED,0BAA0B;IAC1B,KAAK,UAAU,gBAAgB;QAC7B,MAAM,GAAG,GAAG,IAAA,eAAK,GAAE,CAAC;QACpB,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC9B,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACpC,cAAc;YACd,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAChC,0DAA0D;oBAC1D,OAAO;gBACT,CAAC;gBACD,wCAAwC;gBACxC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,EACR,gDAAgD,CACjD,CAAC;YACJ,CAAC;YAED,YAAY;YACZ,eAAe;YACf,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,4BAA4B,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,eAAe;YACf,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC/B,uDAAuD;oBACvD,qBAAqB;oBACrB,OAAO;gBACT,CAAC;gBACD,qCAAqC;gBACrC,uFAAuF;gBACvF,EAAE;gBACF,sBAAsB;gBACtB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,6CAA6C,CAAC,CAAC;gBACrE,MAAM,gBAAgB,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,eAAe;YACf,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,cAAc;gBACd,gEAAgE;gBAChE,YAAY,GAAG,YAAK,CAAC;gBACrB,kBAAkB,GAAG,GAAG,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,EACR,mDAAmD,CACpD,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;oBAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,0CAA0C,CAAC,CAAC;gBACrE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,uCAAuC,CACxC,CAAC;oBACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC/B,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,YAAY;gBACZ,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,EACR,kEAAkE,CACnE,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,SAAS,wBAAwB;QAC/B,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAClC,8BAA8B,CAC/B,CAAC;QACF,SAAS,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,gBAAgB,EAAE;YAC1C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,aAAM;SAC9C,CAAC,CAAC;QACH,SAAS,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,aAAM,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAC9D,CAAC;YACJ,CAAC;YACD,QAAQ,EAAE,gBAAgB,GAAG,aAAM;SACpC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;QACnC,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAC3B,oCAAoC,CACrC,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,KAAK,UAAU,QAAQ;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,KAAK,eAAe,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,mBAAmB;IACnB,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,aAAqB,EAAE;QAClE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACnC,UAAU;YACV,UAAU;YACV,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,KAAK,UAAU,WAAW,CACxB,IAIC,EACD,eAAe,GAAG,IAAI,EACtB,YAAyB;QAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,uCAAuC,CACxC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,YAAY,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAE1B,+BAA+B;QAC/B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,EAAoB,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,OAAO,CAAiB,KAAK,EAAC,IAAI,EAAC,EAAE;YAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,6CAA6C;gBAC9D,OAAO;YACT,CAAC;YACD,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAuC,CAAC,CAAC;YACjE,MAAM,IAAA,YAAK,EAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,aAAM,CAAC,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,6EAA6E;YAC7E,EAAE;YACF,sFAAsF;YACtF,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT;gBACE,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;aAC5C,EACD,qCAAqC,CACtC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,SAAS,YAAY,CAAC,IAAY;QAChC,YAAY,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,aAAM,GAAG,SAAS,CAAC;aAC/D,MAAM,GAAG,SAAS,CACtB,CAAC;QACF,wBAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAE5C,MAAM,EACJ,6BAA6B,EAAE,UAAU,EACzC,4BAA4B,EAAE,SAAS,GACxC,GAAG,MAAM,CAAC,IAAI,CAAC;QAEhB,IAAI,gBAAgB,GAAG,UAAU,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,oDAAoD,EACpD,UAAU,CACX,CAAC;YACF,IAAA,cAAI,GAAE,CAAC;QACT,CAAC;QACD,IAAI,gBAAgB,GAAG,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,oCAAoC,EACpC,UAAU,EACV,gBAAgB,EAChB,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,SAAS,MAAM;QACb,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,aAAa;YACzB,GAAG,QAAQ,KAAK,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,gBAAgB,CAC3D,CAAC;IACJ,CAAC;IAED,cAAc;IACd,KAAK,UAAU,IAAI;QACjB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,oBAAa,CACrB,OAAO,EACP,oBAAoB,EACpB,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,YAAY,GAAG,YAAK,CAAC;QACrB,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC5C,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,YAAE,CAAC,GAAG,CAAC,CAAC;YACzB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;gBACjD,IAAI,CAAC;oBACH,mBAAmB,GAAG,IAAA,eAAK,GAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5C,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;oBACtB,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,2EAA2E;oBAC3E,8CAA8C;oBAC9C,sDAAsD;oBACtD,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EACrB,0DAA0D,CAC3D,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAY,EAAE,EAAE;gBAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;oBAChD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;gBAC5C,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAC/C,mBAAmB,CACpB,CAAC;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,OAAO,CAAO,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,UAAU,SAAS,CAAC,OAAyB;QAChD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,4BAAwB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9D,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,CACrB,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EACjD,KAAK,CACN,CAAC;gBACF,OAAO;YACT,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,6BAA6B;gBAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,8BAA8B,CAAC,CAAC;gBAClE,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,KAAK,CAAC,CAAC;gBACnE,aAAa,EAAE,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,MAAM,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAED,KAAK;YACL,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,4EAA4E;gBAC5E,OAAO;YACT,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,OAAO,MAAM,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAC5B,iDAAiD,CAClD,CAAC;gBACF,4EAA4E;gBAC5E,IAAA,cAAI,GAAE,CAAC;gBACP,OAAO;YACT,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,uBAAuB;gBACvB,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,mCAAmC,OAAO,CAAC,IAAI,EAAE,CAClD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,SAAS,cAAc,CAAC,EAAU,EAAE,OAAyB;QAC3D,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,eAAe,EAAE,CAAC;YACjD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACpD,MAAM,EAAE,GAAG,SAAS,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC;YACvD,IAAI,SAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,oBAAa,CACrB,OAAO,EACP,OAAO,EACP,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YACD,0BAA0B;YAC1B,gCAAgC;YAChC,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,0EAA0E;gBAC1E,0EAA0E;gBAC1E,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EACjC,4CAA4C,CAC7C,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS,eAAe,CAAC,EAAU,EAAE,OAAyB;QAC5D,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,SAAS,OAAO,CAAsB,EACpC,OAAO,EACP,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,GACqB;QACzB,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EACjC,iCAAiC,CAClC,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAuB,EAAE,EAAE;YACjD,MAAM,QAAQ,CAAC,QAAQ,CAAC;gBACtB,QAAQ,EAAE,+BAA2B;gBACrC,MAAM,EAAE,uBAAmB;gBAC3B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAY,CAAC;gBAC1C,UAAU,EAAE,gCAA4B;gBACxC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;aAClC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EACjC,gCAAgC,CACjC,CAAC;YACF,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,KAAK,UAAU,SAAS,CAAuB,EAC7C,UAAU,EACV,OAAO,EACP,IAAI,GAC0B;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,OAAO;YACP,KAAK,EAAE,UAAU;YACjB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,SAAS,SAAS,CAAC,QAA0B;QAC3C,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,wEAAwE,CACzE,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,2CAA2C;QAC7C,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,wBAAgB,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB;IACvB,OAAO;QACL;;WAEG;QACH,eAAe,EAAE,SAA4B;QAE7C;;WAEG;QACH,SAAS;QAET;;;;WAIG;QACH,IAAI;QAEJ;;WAEG;QACH,SAAS;QAET;;;;WAIG;QACH,OAAO;QAEP;;WAEG;QACH,SAAS;QAET;;;;WAIG;QACH,aAAa,EAAE,KAAK;QAEpB;;;;WAIG;QACH,WAAW;QAEX;;WAEG;QACH,kBAAkB;QAElB;;WAEG;QACH,YAAY;QAEZ;;;;WAIG;QACH,SAAS;QAET;;;;WAIG;QACH,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"websocket-api.extension.js","sourceRoot":"","sources":["../../src/extensions/websocket-api.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
-
import {
|
|
3
|
-
export declare function Zone({ config, hass, event, logger, context, lifecycle, }: TServiceParams):
|
|
4
|
-
create: (options: ZoneOptions) => Promise<void>;
|
|
5
|
-
current: ZoneDetails[];
|
|
6
|
-
list: () => Promise<ZoneDetails[]>;
|
|
7
|
-
update: (zone_id: string, options: ZoneOptions) => Promise<void>;
|
|
8
|
-
};
|
|
2
|
+
import { HassZoneService } from "../helpers";
|
|
3
|
+
export declare function Zone({ config, hass, event, logger, context, lifecycle, }: TServiceParams): HassZoneService;
|
|
@@ -1,33 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("@digital-alchemy/core");
|
|
5
|
-
const helpers_1 = require("../helpers");
|
|
6
|
-
function Zone({ config, hass, event, logger, context, lifecycle, }) {
|
|
1
|
+
import { debounce } from "@digital-alchemy/core";
|
|
2
|
+
import { EARLY_ON_READY, ZONE_REGISTRY_UPDATED, } from "../helpers";
|
|
3
|
+
export function Zone({ config, hass, event, logger, context, lifecycle, }) {
|
|
7
4
|
hass.socket.onConnect(async () => {
|
|
8
|
-
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
5
|
let loading = new Promise(async (done) => {
|
|
12
6
|
hass.zone.current = await hass.zone.list();
|
|
13
7
|
loading = undefined;
|
|
14
8
|
done();
|
|
15
9
|
});
|
|
16
|
-
lifecycle.onReady(async () => loading && (await loading),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
10
|
+
lifecycle.onReady(async () => loading && (await loading), EARLY_ON_READY);
|
|
11
|
+
hass.socket.subscribe({
|
|
12
|
+
context,
|
|
13
|
+
event_type: "zone_registry_updated",
|
|
14
|
+
async exec() {
|
|
15
|
+
await debounce(ZONE_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
16
|
+
hass.zone.current = await hass.zone.list();
|
|
17
|
+
logger.debug(`zone registry updated`);
|
|
18
|
+
event.emit(ZONE_REGISTRY_UPDATED);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
27
21
|
});
|
|
28
22
|
async function ZoneCreate(options) {
|
|
29
23
|
return new Promise(async (done) => {
|
|
30
|
-
event.once(
|
|
24
|
+
event.once(ZONE_REGISTRY_UPDATED, done);
|
|
31
25
|
await hass.socket.sendMessage({
|
|
32
26
|
...options,
|
|
33
27
|
type: "zone/create",
|