@mehrwiedu/dreo-api 0.1.0
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/dist/CapabilityMerger.d.ts +4 -0
- package/dist/CapabilityMerger.js +31 -0
- package/dist/CapabilityMerger.js.map +1 -0
- package/dist/DeviceCapabilityResolver.d.ts +9 -0
- package/dist/DeviceCapabilityResolver.js +73 -0
- package/dist/DeviceCapabilityResolver.js.map +1 -0
- package/dist/DeviceResolver.d.ts +13 -0
- package/dist/DeviceResolver.js +64 -0
- package/dist/DeviceResolver.js.map +1 -0
- package/dist/DreoCapabilityRegistry.d.ts +13 -0
- package/dist/DreoCapabilityRegistry.js +57 -0
- package/dist/DreoCapabilityRegistry.js.map +1 -0
- package/dist/DreoClient.d.ts +63 -0
- package/dist/DreoClient.js +210 -0
- package/dist/DreoClient.js.map +1 -0
- package/dist/DreoDevice.d.ts +41 -0
- package/dist/DreoDevice.js +147 -0
- package/dist/DreoDevice.js.map +1 -0
- package/dist/DreoLogger.d.ts +7 -0
- package/dist/DreoLogger.js +15 -0
- package/dist/DreoLogger.js.map +1 -0
- package/dist/DreoSession.d.ts +31 -0
- package/dist/DreoSession.js +81 -0
- package/dist/DreoSession.js.map +1 -0
- package/dist/DreoSessionObserver.d.ts +12 -0
- package/dist/DreoSessionObserver.js +2 -0
- package/dist/DreoSessionObserver.js.map +1 -0
- package/dist/DreoStateRegistry.d.ts +3 -0
- package/dist/DreoStateRegistry.js +302 -0
- package/dist/DreoStateRegistry.js.map +1 -0
- package/dist/InputValidator.d.ts +15 -0
- package/dist/InputValidator.js +30 -0
- package/dist/InputValidator.js.map +1 -0
- package/dist/ResolvedDeviceResolver.d.ts +12 -0
- package/dist/ResolvedDeviceResolver.js +54 -0
- package/dist/ResolvedDeviceResolver.js.map +1 -0
- package/dist/StateConstraintResolver.d.ts +15 -0
- package/dist/StateConstraintResolver.js +169 -0
- package/dist/StateConstraintResolver.js.map +1 -0
- package/dist/StateConstraintValidator.d.ts +9 -0
- package/dist/StateConstraintValidator.js +79 -0
- package/dist/StateConstraintValidator.js.map +1 -0
- package/dist/StateMapper.d.ts +17 -0
- package/dist/StateMapper.js +84 -0
- package/dist/StateMapper.js.map +1 -0
- package/dist/api/AppApi.d.ts +7 -0
- package/dist/api/AppApi.js +10 -0
- package/dist/api/AppApi.js.map +1 -0
- package/dist/api/AuthenticatedHttpClient.d.ts +14 -0
- package/dist/api/AuthenticatedHttpClient.js +54 -0
- package/dist/api/AuthenticatedHttpClient.js.map +1 -0
- package/dist/api/DeviceApi.d.ts +9 -0
- package/dist/api/DeviceApi.js +24 -0
- package/dist/api/DeviceApi.js.map +1 -0
- package/dist/api/HttpClient.d.ts +15 -0
- package/dist/api/HttpClient.js +41 -0
- package/dist/api/HttpClient.js.map +1 -0
- package/dist/api/UserApi.d.ts +1 -0
- package/dist/api/UserApi.js +2 -0
- package/dist/api/UserApi.js.map +1 -0
- package/dist/auth/AuthManager.d.ts +16 -0
- package/dist/auth/AuthManager.js +27 -0
- package/dist/auth/AuthManager.js.map +1 -0
- package/dist/auth/LoginRequestBuilder.d.ts +5 -0
- package/dist/auth/LoginRequestBuilder.js +18 -0
- package/dist/auth/LoginRequestBuilder.js.map +1 -0
- package/dist/auth/TokenStore.d.ts +1 -0
- package/dist/auth/TokenStore.js +2 -0
- package/dist/auth/TokenStore.js.map +1 -0
- package/dist/crypto/PasswordHasher.d.ts +3 -0
- package/dist/crypto/PasswordHasher.js +7 -0
- package/dist/crypto/PasswordHasher.js.map +1 -0
- package/dist/crypto/Signer.d.ts +1 -0
- package/dist/crypto/Signer.js +2 -0
- package/dist/crypto/Signer.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/mappers/DeviceStateMapper.d.ts +8 -0
- package/dist/mappers/DeviceStateMapper.js +27 -0
- package/dist/mappers/DeviceStateMapper.js.map +1 -0
- package/dist/mappers/FamilyTreeMapper.d.ts +8 -0
- package/dist/mappers/FamilyTreeMapper.js +50 -0
- package/dist/mappers/FamilyTreeMapper.js.map +1 -0
- package/dist/models/AuthTokens.d.ts +4 -0
- package/dist/models/AuthTokens.js +2 -0
- package/dist/models/AuthTokens.js.map +1 -0
- package/dist/models/Commands.d.ts +1 -0
- package/dist/models/Commands.js +2 -0
- package/dist/models/Commands.js.map +1 -0
- package/dist/models/Device.d.ts +19 -0
- package/dist/models/Device.js +2 -0
- package/dist/models/Device.js.map +1 -0
- package/dist/models/DeviceCapabilities.d.ts +7 -0
- package/dist/models/DeviceCapabilities.js +2 -0
- package/dist/models/DeviceCapabilities.js.map +1 -0
- package/dist/models/DeviceListResponse.d.ts +8 -0
- package/dist/models/DeviceListResponse.js +2 -0
- package/dist/models/DeviceListResponse.js.map +1 -0
- package/dist/models/DeviceState.d.ts +12 -0
- package/dist/models/DeviceState.js +2 -0
- package/dist/models/DeviceState.js.map +1 -0
- package/dist/models/DeviceStateResponse.d.ts +20 -0
- package/dist/models/DeviceStateResponse.js +2 -0
- package/dist/models/DeviceStateResponse.js.map +1 -0
- package/dist/models/DeviceSummary.d.ts +11 -0
- package/dist/models/DeviceSummary.js +2 -0
- package/dist/models/DeviceSummary.js.map +1 -0
- package/dist/models/DiscoveredState.d.ts +18 -0
- package/dist/models/DiscoveredState.js +2 -0
- package/dist/models/DiscoveredState.js.map +1 -0
- package/dist/models/DreoDeviceState.d.ts +15 -0
- package/dist/models/DreoDeviceState.js +2 -0
- package/dist/models/DreoDeviceState.js.map +1 -0
- package/dist/models/Family.d.ts +14 -0
- package/dist/models/Family.js +2 -0
- package/dist/models/Family.js.map +1 -0
- package/dist/models/FamilyRoomDevicesResponse.d.ts +10 -0
- package/dist/models/FamilyRoomDevicesResponse.js +2 -0
- package/dist/models/FamilyRoomDevicesResponse.js.map +1 -0
- package/dist/models/FamilyTree.d.ts +19 -0
- package/dist/models/FamilyTree.js +2 -0
- package/dist/models/FamilyTree.js.map +1 -0
- package/dist/models/LoginResponse.d.ts +9 -0
- package/dist/models/LoginResponse.js +2 -0
- package/dist/models/LoginResponse.js.map +1 -0
- package/dist/models/ResolvedCapability.d.ts +13 -0
- package/dist/models/ResolvedCapability.js +2 -0
- package/dist/models/ResolvedCapability.js.map +1 -0
- package/dist/models/ResolvedDevice.d.ts +42 -0
- package/dist/models/ResolvedDevice.js +2 -0
- package/dist/models/ResolvedDevice.js.map +1 -0
- package/dist/models/Room.d.ts +12 -0
- package/dist/models/Room.js +2 -0
- package/dist/models/Room.js.map +1 -0
- package/dist/models/StateConstraint.d.ts +42 -0
- package/dist/models/StateConstraint.js +2 -0
- package/dist/models/StateConstraint.js.map +1 -0
- package/dist/models/User.d.ts +1 -0
- package/dist/models/User.js +2 -0
- package/dist/models/User.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/Helpers.d.ts +1 -0
- package/dist/utils/Helpers.js +2 -0
- package/dist/utils/Helpers.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/websocket/DreoCommand.d.ts +13 -0
- package/dist/websocket/DreoCommand.js +2 -0
- package/dist/websocket/DreoCommand.js.map +1 -0
- package/dist/websocket/DreoWebSocketClient.d.ts +39 -0
- package/dist/websocket/DreoWebSocketClient.js +271 -0
- package/dist/websocket/DreoWebSocketClient.js.map +1 -0
- package/dist/websocket/DreoWebSocketMessage.d.ts +9 -0
- package/dist/websocket/DreoWebSocketMessage.js +2 -0
- package/dist/websocket/DreoWebSocketMessage.js.map +1 -0
- package/dist/websocket/DreoWebSocketReply.d.ts +7 -0
- package/dist/websocket/DreoWebSocketReply.js +2 -0
- package/dist/websocket/DreoWebSocketReply.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FamilyRoomDevicesResponse.js","sourceRoot":"","sources":["../../src/models/FamilyRoomDevicesResponse.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Family } from "./Family.js";
|
|
2
|
+
import type { Device } from "./Device.js";
|
|
3
|
+
/**
|
|
4
|
+
* Represents the complete Dreo home structure
|
|
5
|
+
* visible to the authenticated account.
|
|
6
|
+
*/
|
|
7
|
+
export interface FamilyTree {
|
|
8
|
+
/**
|
|
9
|
+
* All visible families (homes).
|
|
10
|
+
*/
|
|
11
|
+
families: Family[];
|
|
12
|
+
/**
|
|
13
|
+
* Flat index of all known devices.
|
|
14
|
+
*
|
|
15
|
+
* This is useful for quick lookup by deviceId
|
|
16
|
+
* without traversing the family hierarchy.
|
|
17
|
+
*/
|
|
18
|
+
devices: Device[];
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FamilyTree.js","sourceRoot":"","sources":["../../src/models/FamilyTree.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginResponse.js","sourceRoot":"","sources":["../../src/models/LoginResponse.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DiscoveredState } from "./DiscoveredState.js";
|
|
2
|
+
export type ResolvedCapabilityId = "power" | "fan" | "mainLight" | "ambientLight" | "diagnostic" | "configuration" | "information" | "unknown";
|
|
3
|
+
export interface ResolvedCapability {
|
|
4
|
+
id: ResolvedCapabilityId;
|
|
5
|
+
states: string[];
|
|
6
|
+
/**
|
|
7
|
+
* Optional detailed state metadata for adapter-friendly consumption.
|
|
8
|
+
*
|
|
9
|
+
* This is populated by ResolvedDeviceResolver after capabilities from
|
|
10
|
+
* different sources have been merged.
|
|
11
|
+
*/
|
|
12
|
+
stateDetails?: DiscoveredState[];
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResolvedCapability.js","sourceRoot":"","sources":["../../src/models/ResolvedCapability.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Device } from "./Device.js";
|
|
2
|
+
import type { DiscoveredState } from "./DiscoveredState.js";
|
|
3
|
+
import type { DeviceStateResponse } from "./DeviceStateResponse.js";
|
|
4
|
+
import type { ResolvedCapability } from "./ResolvedCapability.js";
|
|
5
|
+
export interface ResolvedDevice {
|
|
6
|
+
/**
|
|
7
|
+
* Device information from the FamilyTree.
|
|
8
|
+
*/
|
|
9
|
+
device: Device;
|
|
10
|
+
/**
|
|
11
|
+
* Complete initial state returned by the cloud.
|
|
12
|
+
*/
|
|
13
|
+
state: DeviceStateResponse;
|
|
14
|
+
/**
|
|
15
|
+
* Merged capabilities resolved from all available sources.
|
|
16
|
+
*/
|
|
17
|
+
capabilities: ResolvedCapability[];
|
|
18
|
+
/**
|
|
19
|
+
* All discovered states.
|
|
20
|
+
*/
|
|
21
|
+
states: DiscoveredState[];
|
|
22
|
+
/**
|
|
23
|
+
* States that are currently not assigned to any capability.
|
|
24
|
+
*
|
|
25
|
+
* This includes both known-but-unassigned states and completely unknown
|
|
26
|
+
* states.
|
|
27
|
+
*/
|
|
28
|
+
unassignedStates: DiscoveredState[];
|
|
29
|
+
/**
|
|
30
|
+
* Known states that are currently not assigned to any capability.
|
|
31
|
+
*
|
|
32
|
+
* These states are understood by the registry, but their functional
|
|
33
|
+
* capability mapping is intentionally still open.
|
|
34
|
+
*/
|
|
35
|
+
unassignedKnownStates: DiscoveredState[];
|
|
36
|
+
/**
|
|
37
|
+
* States that are not yet known by the registry.
|
|
38
|
+
*
|
|
39
|
+
* These are candidates for further reverse engineering.
|
|
40
|
+
*/
|
|
41
|
+
unknownStates: DiscoveredState[];
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResolvedDevice.js","sourceRoot":"","sources":["../../src/models/ResolvedDevice.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Room.js","sourceRoot":"","sources":["../../src/models/Room.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type StateConstraintType = "boolean" | "number" | "string" | "object" | "unknown";
|
|
2
|
+
export interface BaseStateConstraint {
|
|
3
|
+
type: StateConstraintType;
|
|
4
|
+
}
|
|
5
|
+
export interface BooleanStateConstraint extends BaseStateConstraint {
|
|
6
|
+
type: "boolean";
|
|
7
|
+
}
|
|
8
|
+
export interface NumberStateConstraint extends BaseStateConstraint {
|
|
9
|
+
type: "number";
|
|
10
|
+
/**
|
|
11
|
+
* Minimum allowed value, if known.
|
|
12
|
+
*/
|
|
13
|
+
min?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Maximum allowed value, if known.
|
|
16
|
+
*/
|
|
17
|
+
max?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Increment step, if known.
|
|
20
|
+
*/
|
|
21
|
+
step?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Explicit allowed values, if known.
|
|
24
|
+
*
|
|
25
|
+
* This is used for enum-like numeric states such as operating modes.
|
|
26
|
+
*/
|
|
27
|
+
allowedValues?: number[];
|
|
28
|
+
}
|
|
29
|
+
export interface StringStateConstraint extends BaseStateConstraint {
|
|
30
|
+
type: "string";
|
|
31
|
+
/**
|
|
32
|
+
* Explicit allowed values, if known.
|
|
33
|
+
*/
|
|
34
|
+
allowedValues?: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface ObjectStateConstraint extends BaseStateConstraint {
|
|
37
|
+
type: "object";
|
|
38
|
+
}
|
|
39
|
+
export interface UnknownStateConstraint extends BaseStateConstraint {
|
|
40
|
+
type: "unknown";
|
|
41
|
+
}
|
|
42
|
+
export type StateConstraint = BooleanStateConstraint | NumberStateConstraint | StringStateConstraint | ObjectStateConstraint | UnknownStateConstraint;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateConstraint.js","sourceRoot":"","sources":["../../src/models/StateConstraint.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../src/utils/Helpers.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DreoCommand.js","sourceRoot":"","sources":["../../src/websocket/DreoCommand.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DreoSession } from "../DreoSession.js";
|
|
2
|
+
import type { DreoLogger } from "../DreoLogger.js";
|
|
3
|
+
import type { DreoSessionChangeReason, DreoSessionObserver } from "../DreoSessionObserver.js";
|
|
4
|
+
import type { DreoWebSocketReply } from "./DreoWebSocketReply.js";
|
|
5
|
+
export interface DreoWebSocketClientOptions {
|
|
6
|
+
session: DreoSession;
|
|
7
|
+
logger?: DreoLogger;
|
|
8
|
+
}
|
|
9
|
+
export type DreoWebSocketReportHandler = (reply: DreoWebSocketReply) => void;
|
|
10
|
+
export type DreoWebSocketUnsubscribe = () => void;
|
|
11
|
+
export declare class DreoWebSocketClient implements DreoSessionObserver {
|
|
12
|
+
private readonly options;
|
|
13
|
+
private socket?;
|
|
14
|
+
private connectPromise?;
|
|
15
|
+
private reconnectPromise?;
|
|
16
|
+
private pingInterval?;
|
|
17
|
+
private shouldStayConnected;
|
|
18
|
+
private pendingReply?;
|
|
19
|
+
private readonly reportHandlers;
|
|
20
|
+
constructor(options: DreoWebSocketClientOptions);
|
|
21
|
+
connect(): Promise<void>;
|
|
22
|
+
onReport(handler: DreoWebSocketReportHandler): DreoWebSocketUnsubscribe;
|
|
23
|
+
onSessionChanged(_snapshot: unknown, reason: DreoSessionChangeReason): Promise<void>;
|
|
24
|
+
onSessionInvalidated(): void;
|
|
25
|
+
sendCommand(deviceSn: string, key: string, value: unknown): Promise<DreoWebSocketReply>;
|
|
26
|
+
sendCommandParams(deviceSn: string, params: Record<string, unknown>): Promise<DreoWebSocketReply>;
|
|
27
|
+
disconnect(): void;
|
|
28
|
+
private connectInternal;
|
|
29
|
+
private reconnect;
|
|
30
|
+
private reconnectInternal;
|
|
31
|
+
private startPingInterval;
|
|
32
|
+
private stopPingInterval;
|
|
33
|
+
private rejectPendingReply;
|
|
34
|
+
private handleMessage;
|
|
35
|
+
private wait;
|
|
36
|
+
private logDebug;
|
|
37
|
+
private logInfo;
|
|
38
|
+
private logWarn;
|
|
39
|
+
}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
import { DreoWebSocketError } from "../errors.js";
|
|
3
|
+
const DREO_WEBSOCKET_PING_INTERVAL_MS = 15_000;
|
|
4
|
+
const DREO_WEBSOCKET_PING_MESSAGE = "2";
|
|
5
|
+
const DREO_WEBSOCKET_RECONNECT_DELAY_MS = 5_000;
|
|
6
|
+
export class DreoWebSocketClient {
|
|
7
|
+
options;
|
|
8
|
+
socket;
|
|
9
|
+
connectPromise;
|
|
10
|
+
reconnectPromise;
|
|
11
|
+
pingInterval;
|
|
12
|
+
shouldStayConnected = false;
|
|
13
|
+
pendingReply;
|
|
14
|
+
reportHandlers = new Set();
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
async connect() {
|
|
19
|
+
this.shouldStayConnected = true;
|
|
20
|
+
if (this.socket?.readyState === WebSocket.OPEN) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (this.connectPromise) {
|
|
24
|
+
return this.connectPromise;
|
|
25
|
+
}
|
|
26
|
+
this.connectPromise = this.connectInternal();
|
|
27
|
+
try {
|
|
28
|
+
await this.connectPromise;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
this.connectPromise = undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
onReport(handler) {
|
|
35
|
+
this.reportHandlers.add(handler);
|
|
36
|
+
return () => {
|
|
37
|
+
this.reportHandlers.delete(handler);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async onSessionChanged(_snapshot, reason) {
|
|
41
|
+
if (!this.shouldStayConnected) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (reason === "initial-login") {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
await this.reconnect(reason);
|
|
48
|
+
}
|
|
49
|
+
onSessionInvalidated() {
|
|
50
|
+
this.disconnect();
|
|
51
|
+
}
|
|
52
|
+
async sendCommand(deviceSn, key, value) {
|
|
53
|
+
return this.sendCommandParams(deviceSn, {
|
|
54
|
+
[key]: value,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async sendCommandParams(deviceSn, params) {
|
|
58
|
+
if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
|
|
59
|
+
throw new DreoWebSocketError("WebSocket is not connected.");
|
|
60
|
+
}
|
|
61
|
+
const payload = {
|
|
62
|
+
devicesn: deviceSn,
|
|
63
|
+
method: "control",
|
|
64
|
+
params,
|
|
65
|
+
timestamp: Date.now(),
|
|
66
|
+
};
|
|
67
|
+
this.logDebug("Sending WebSocket command.", payload);
|
|
68
|
+
const replyPromise = new Promise((resolve, reject) => {
|
|
69
|
+
const timeout = setTimeout(() => {
|
|
70
|
+
if (this.pendingReply) {
|
|
71
|
+
this.pendingReply = undefined;
|
|
72
|
+
reject(new DreoWebSocketError("Timed out waiting for WebSocket reply."));
|
|
73
|
+
}
|
|
74
|
+
}, 10_000);
|
|
75
|
+
this.pendingReply = {
|
|
76
|
+
resolve,
|
|
77
|
+
reject,
|
|
78
|
+
timeout,
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
await new Promise((resolve, reject) => {
|
|
82
|
+
this.socket.send(JSON.stringify(payload), (error) => {
|
|
83
|
+
if (error) {
|
|
84
|
+
reject(new DreoWebSocketError(`Failed to send WebSocket command: ${error.message}`));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
resolve();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
return replyPromise;
|
|
91
|
+
}
|
|
92
|
+
disconnect() {
|
|
93
|
+
this.shouldStayConnected = false;
|
|
94
|
+
this.stopPingInterval();
|
|
95
|
+
this.rejectPendingReply(new DreoWebSocketError("WebSocket disconnected."));
|
|
96
|
+
const socket = this.socket;
|
|
97
|
+
this.socket = undefined;
|
|
98
|
+
if (!socket) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (socket.readyState === WebSocket.CONNECTING ||
|
|
102
|
+
socket.readyState === WebSocket.OPEN) {
|
|
103
|
+
socket.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async connectInternal() {
|
|
107
|
+
const tokens = this.options.session.getCurrentTokens();
|
|
108
|
+
if (!tokens) {
|
|
109
|
+
throw new DreoWebSocketError("Cannot connect WebSocket without an active Dreo session.");
|
|
110
|
+
}
|
|
111
|
+
const timestamp = Date.now();
|
|
112
|
+
const url = `wss://wsb-${tokens.region}.dreo-tech.com/websocket` +
|
|
113
|
+
`?accessToken=${encodeURIComponent(tokens.accessToken)}` +
|
|
114
|
+
`×tamp=${timestamp}`;
|
|
115
|
+
const socket = new WebSocket(url);
|
|
116
|
+
this.socket = socket;
|
|
117
|
+
return new Promise((resolve, reject) => {
|
|
118
|
+
let settled = false;
|
|
119
|
+
const resolveOnce = () => {
|
|
120
|
+
if (settled) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
settled = true;
|
|
124
|
+
resolve();
|
|
125
|
+
};
|
|
126
|
+
const rejectOnce = (error) => {
|
|
127
|
+
if (settled) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
settled = true;
|
|
131
|
+
reject(error);
|
|
132
|
+
};
|
|
133
|
+
socket.once("open", () => {
|
|
134
|
+
if (!this.shouldStayConnected) {
|
|
135
|
+
socket.close();
|
|
136
|
+
rejectOnce(new DreoWebSocketError("WebSocket connection was cancelled."));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.logInfo("WebSocket connected.");
|
|
140
|
+
this.startPingInterval(socket);
|
|
141
|
+
resolveOnce();
|
|
142
|
+
});
|
|
143
|
+
socket.once("error", (error) => {
|
|
144
|
+
rejectOnce(new DreoWebSocketError(`WebSocket connection failed: ${error.message}`));
|
|
145
|
+
});
|
|
146
|
+
socket.on("message", (message) => {
|
|
147
|
+
this.handleMessage(message.toString());
|
|
148
|
+
});
|
|
149
|
+
socket.once("close", () => {
|
|
150
|
+
this.logInfo("WebSocket closed.");
|
|
151
|
+
const wasCurrentSocket = this.socket === socket;
|
|
152
|
+
if (wasCurrentSocket) {
|
|
153
|
+
this.socket = undefined;
|
|
154
|
+
this.stopPingInterval();
|
|
155
|
+
}
|
|
156
|
+
this.rejectPendingReply(new DreoWebSocketError("WebSocket closed."));
|
|
157
|
+
if (!settled) {
|
|
158
|
+
rejectOnce(new DreoWebSocketError("WebSocket closed before connection was established."));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (wasCurrentSocket && this.shouldStayConnected) {
|
|
162
|
+
void this.reconnect("websocket-closed");
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
async reconnect(reason) {
|
|
168
|
+
if (this.reconnectPromise) {
|
|
169
|
+
return this.reconnectPromise;
|
|
170
|
+
}
|
|
171
|
+
this.reconnectPromise = this.reconnectInternal(reason);
|
|
172
|
+
try {
|
|
173
|
+
await this.reconnectPromise;
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
this.reconnectPromise = undefined;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async reconnectInternal(reason) {
|
|
180
|
+
this.logInfo(`Reconnecting WebSocket because: ${reason}`);
|
|
181
|
+
this.rejectPendingReply(new DreoWebSocketError(`WebSocket reconnecting because: ${reason}`));
|
|
182
|
+
this.stopPingInterval();
|
|
183
|
+
const socket = this.socket;
|
|
184
|
+
this.socket = undefined;
|
|
185
|
+
if (socket &&
|
|
186
|
+
(socket.readyState === WebSocket.CONNECTING ||
|
|
187
|
+
socket.readyState === WebSocket.OPEN)) {
|
|
188
|
+
socket.close();
|
|
189
|
+
}
|
|
190
|
+
await this.wait(DREO_WEBSOCKET_RECONNECT_DELAY_MS);
|
|
191
|
+
if (!this.shouldStayConnected) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
await this.connect();
|
|
195
|
+
}
|
|
196
|
+
startPingInterval(socket) {
|
|
197
|
+
this.stopPingInterval();
|
|
198
|
+
this.pingInterval = setInterval(() => {
|
|
199
|
+
if (this.socket !== socket) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (socket.readyState !== WebSocket.OPEN) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
socket.send(DREO_WEBSOCKET_PING_MESSAGE, (error) => {
|
|
206
|
+
if (!error) {
|
|
207
|
+
this.logDebug("DREO WebSocket keepalive sent.");
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
this.logWarn(`Failed to send DREO WebSocket keepalive: ${error.message}`);
|
|
211
|
+
if (this.socket === socket) {
|
|
212
|
+
socket.close();
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}, DREO_WEBSOCKET_PING_INTERVAL_MS);
|
|
216
|
+
}
|
|
217
|
+
stopPingInterval() {
|
|
218
|
+
if (!this.pingInterval) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
clearInterval(this.pingInterval);
|
|
222
|
+
this.pingInterval = undefined;
|
|
223
|
+
}
|
|
224
|
+
rejectPendingReply(error) {
|
|
225
|
+
if (!this.pendingReply) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const pending = this.pendingReply;
|
|
229
|
+
clearTimeout(pending.timeout);
|
|
230
|
+
this.pendingReply = undefined;
|
|
231
|
+
pending.reject(error);
|
|
232
|
+
}
|
|
233
|
+
handleMessage(text) {
|
|
234
|
+
this.logDebug("WebSocket message received.", text);
|
|
235
|
+
try {
|
|
236
|
+
const message = JSON.parse(text);
|
|
237
|
+
if (message.method === "control-reply" && this.pendingReply) {
|
|
238
|
+
const pending = this.pendingReply;
|
|
239
|
+
clearTimeout(pending.timeout);
|
|
240
|
+
this.pendingReply = undefined;
|
|
241
|
+
pending.resolve(message);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (message.method === "control-report" ||
|
|
245
|
+
message.method === "report" ||
|
|
246
|
+
message.method === "device-online") {
|
|
247
|
+
for (const handler of Array.from(this.reportHandlers)) {
|
|
248
|
+
handler(message);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Non-JSON messages are expected.
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async wait(milliseconds) {
|
|
257
|
+
await new Promise((resolve) => {
|
|
258
|
+
setTimeout(resolve, milliseconds);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
logDebug(message, data) {
|
|
262
|
+
this.options.logger?.debug?.(message, data);
|
|
263
|
+
}
|
|
264
|
+
logInfo(message, data) {
|
|
265
|
+
this.options.logger?.info?.(message, data);
|
|
266
|
+
}
|
|
267
|
+
logWarn(message, data) {
|
|
268
|
+
this.options.logger?.warn?.(message, data);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=DreoWebSocketClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DreoWebSocketClient.js","sourceRoot":"","sources":["../../src/websocket/DreoWebSocketClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DreoWebSocketMessage.js","sourceRoot":"","sources":["../../src/websocket/DreoWebSocketMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DreoWebSocketReply.js","sourceRoot":"","sources":["../../src/websocket/DreoWebSocketReply.ts"],"names":[],"mappings":""}
|