@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.
Files changed (166) hide show
  1. package/dist/CapabilityMerger.d.ts +4 -0
  2. package/dist/CapabilityMerger.js +31 -0
  3. package/dist/CapabilityMerger.js.map +1 -0
  4. package/dist/DeviceCapabilityResolver.d.ts +9 -0
  5. package/dist/DeviceCapabilityResolver.js +73 -0
  6. package/dist/DeviceCapabilityResolver.js.map +1 -0
  7. package/dist/DeviceResolver.d.ts +13 -0
  8. package/dist/DeviceResolver.js +64 -0
  9. package/dist/DeviceResolver.js.map +1 -0
  10. package/dist/DreoCapabilityRegistry.d.ts +13 -0
  11. package/dist/DreoCapabilityRegistry.js +57 -0
  12. package/dist/DreoCapabilityRegistry.js.map +1 -0
  13. package/dist/DreoClient.d.ts +63 -0
  14. package/dist/DreoClient.js +210 -0
  15. package/dist/DreoClient.js.map +1 -0
  16. package/dist/DreoDevice.d.ts +41 -0
  17. package/dist/DreoDevice.js +147 -0
  18. package/dist/DreoDevice.js.map +1 -0
  19. package/dist/DreoLogger.d.ts +7 -0
  20. package/dist/DreoLogger.js +15 -0
  21. package/dist/DreoLogger.js.map +1 -0
  22. package/dist/DreoSession.d.ts +31 -0
  23. package/dist/DreoSession.js +81 -0
  24. package/dist/DreoSession.js.map +1 -0
  25. package/dist/DreoSessionObserver.d.ts +12 -0
  26. package/dist/DreoSessionObserver.js +2 -0
  27. package/dist/DreoSessionObserver.js.map +1 -0
  28. package/dist/DreoStateRegistry.d.ts +3 -0
  29. package/dist/DreoStateRegistry.js +302 -0
  30. package/dist/DreoStateRegistry.js.map +1 -0
  31. package/dist/InputValidator.d.ts +15 -0
  32. package/dist/InputValidator.js +30 -0
  33. package/dist/InputValidator.js.map +1 -0
  34. package/dist/ResolvedDeviceResolver.d.ts +12 -0
  35. package/dist/ResolvedDeviceResolver.js +54 -0
  36. package/dist/ResolvedDeviceResolver.js.map +1 -0
  37. package/dist/StateConstraintResolver.d.ts +15 -0
  38. package/dist/StateConstraintResolver.js +169 -0
  39. package/dist/StateConstraintResolver.js.map +1 -0
  40. package/dist/StateConstraintValidator.d.ts +9 -0
  41. package/dist/StateConstraintValidator.js +79 -0
  42. package/dist/StateConstraintValidator.js.map +1 -0
  43. package/dist/StateMapper.d.ts +17 -0
  44. package/dist/StateMapper.js +84 -0
  45. package/dist/StateMapper.js.map +1 -0
  46. package/dist/api/AppApi.d.ts +7 -0
  47. package/dist/api/AppApi.js +10 -0
  48. package/dist/api/AppApi.js.map +1 -0
  49. package/dist/api/AuthenticatedHttpClient.d.ts +14 -0
  50. package/dist/api/AuthenticatedHttpClient.js +54 -0
  51. package/dist/api/AuthenticatedHttpClient.js.map +1 -0
  52. package/dist/api/DeviceApi.d.ts +9 -0
  53. package/dist/api/DeviceApi.js +24 -0
  54. package/dist/api/DeviceApi.js.map +1 -0
  55. package/dist/api/HttpClient.d.ts +15 -0
  56. package/dist/api/HttpClient.js +41 -0
  57. package/dist/api/HttpClient.js.map +1 -0
  58. package/dist/api/UserApi.d.ts +1 -0
  59. package/dist/api/UserApi.js +2 -0
  60. package/dist/api/UserApi.js.map +1 -0
  61. package/dist/auth/AuthManager.d.ts +16 -0
  62. package/dist/auth/AuthManager.js +27 -0
  63. package/dist/auth/AuthManager.js.map +1 -0
  64. package/dist/auth/LoginRequestBuilder.d.ts +5 -0
  65. package/dist/auth/LoginRequestBuilder.js +18 -0
  66. package/dist/auth/LoginRequestBuilder.js.map +1 -0
  67. package/dist/auth/TokenStore.d.ts +1 -0
  68. package/dist/auth/TokenStore.js +2 -0
  69. package/dist/auth/TokenStore.js.map +1 -0
  70. package/dist/crypto/PasswordHasher.d.ts +3 -0
  71. package/dist/crypto/PasswordHasher.js +7 -0
  72. package/dist/crypto/PasswordHasher.js.map +1 -0
  73. package/dist/crypto/Signer.d.ts +1 -0
  74. package/dist/crypto/Signer.js +2 -0
  75. package/dist/crypto/Signer.js.map +1 -0
  76. package/dist/errors.d.ts +12 -0
  77. package/dist/errors.js +25 -0
  78. package/dist/errors.js.map +1 -0
  79. package/dist/index.d.ts +18 -0
  80. package/dist/index.js +18 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/mappers/DeviceStateMapper.d.ts +8 -0
  83. package/dist/mappers/DeviceStateMapper.js +27 -0
  84. package/dist/mappers/DeviceStateMapper.js.map +1 -0
  85. package/dist/mappers/FamilyTreeMapper.d.ts +8 -0
  86. package/dist/mappers/FamilyTreeMapper.js +50 -0
  87. package/dist/mappers/FamilyTreeMapper.js.map +1 -0
  88. package/dist/models/AuthTokens.d.ts +4 -0
  89. package/dist/models/AuthTokens.js +2 -0
  90. package/dist/models/AuthTokens.js.map +1 -0
  91. package/dist/models/Commands.d.ts +1 -0
  92. package/dist/models/Commands.js +2 -0
  93. package/dist/models/Commands.js.map +1 -0
  94. package/dist/models/Device.d.ts +19 -0
  95. package/dist/models/Device.js +2 -0
  96. package/dist/models/Device.js.map +1 -0
  97. package/dist/models/DeviceCapabilities.d.ts +7 -0
  98. package/dist/models/DeviceCapabilities.js +2 -0
  99. package/dist/models/DeviceCapabilities.js.map +1 -0
  100. package/dist/models/DeviceListResponse.d.ts +8 -0
  101. package/dist/models/DeviceListResponse.js +2 -0
  102. package/dist/models/DeviceListResponse.js.map +1 -0
  103. package/dist/models/DeviceState.d.ts +12 -0
  104. package/dist/models/DeviceState.js +2 -0
  105. package/dist/models/DeviceState.js.map +1 -0
  106. package/dist/models/DeviceStateResponse.d.ts +20 -0
  107. package/dist/models/DeviceStateResponse.js +2 -0
  108. package/dist/models/DeviceStateResponse.js.map +1 -0
  109. package/dist/models/DeviceSummary.d.ts +11 -0
  110. package/dist/models/DeviceSummary.js +2 -0
  111. package/dist/models/DeviceSummary.js.map +1 -0
  112. package/dist/models/DiscoveredState.d.ts +18 -0
  113. package/dist/models/DiscoveredState.js +2 -0
  114. package/dist/models/DiscoveredState.js.map +1 -0
  115. package/dist/models/DreoDeviceState.d.ts +15 -0
  116. package/dist/models/DreoDeviceState.js +2 -0
  117. package/dist/models/DreoDeviceState.js.map +1 -0
  118. package/dist/models/Family.d.ts +14 -0
  119. package/dist/models/Family.js +2 -0
  120. package/dist/models/Family.js.map +1 -0
  121. package/dist/models/FamilyRoomDevicesResponse.d.ts +10 -0
  122. package/dist/models/FamilyRoomDevicesResponse.js +2 -0
  123. package/dist/models/FamilyRoomDevicesResponse.js.map +1 -0
  124. package/dist/models/FamilyTree.d.ts +19 -0
  125. package/dist/models/FamilyTree.js +2 -0
  126. package/dist/models/FamilyTree.js.map +1 -0
  127. package/dist/models/LoginResponse.d.ts +9 -0
  128. package/dist/models/LoginResponse.js +2 -0
  129. package/dist/models/LoginResponse.js.map +1 -0
  130. package/dist/models/ResolvedCapability.d.ts +13 -0
  131. package/dist/models/ResolvedCapability.js +2 -0
  132. package/dist/models/ResolvedCapability.js.map +1 -0
  133. package/dist/models/ResolvedDevice.d.ts +42 -0
  134. package/dist/models/ResolvedDevice.js +2 -0
  135. package/dist/models/ResolvedDevice.js.map +1 -0
  136. package/dist/models/Room.d.ts +12 -0
  137. package/dist/models/Room.js +2 -0
  138. package/dist/models/Room.js.map +1 -0
  139. package/dist/models/StateConstraint.d.ts +42 -0
  140. package/dist/models/StateConstraint.js +2 -0
  141. package/dist/models/StateConstraint.js.map +1 -0
  142. package/dist/models/User.d.ts +1 -0
  143. package/dist/models/User.js +2 -0
  144. package/dist/models/User.js.map +1 -0
  145. package/dist/types/index.d.ts +8 -0
  146. package/dist/types/index.js +2 -0
  147. package/dist/types/index.js.map +1 -0
  148. package/dist/utils/Helpers.d.ts +1 -0
  149. package/dist/utils/Helpers.js +2 -0
  150. package/dist/utils/Helpers.js.map +1 -0
  151. package/dist/version.d.ts +1 -0
  152. package/dist/version.js +2 -0
  153. package/dist/version.js.map +1 -0
  154. package/dist/websocket/DreoCommand.d.ts +13 -0
  155. package/dist/websocket/DreoCommand.js +2 -0
  156. package/dist/websocket/DreoCommand.js.map +1 -0
  157. package/dist/websocket/DreoWebSocketClient.d.ts +39 -0
  158. package/dist/websocket/DreoWebSocketClient.js +271 -0
  159. package/dist/websocket/DreoWebSocketClient.js.map +1 -0
  160. package/dist/websocket/DreoWebSocketMessage.d.ts +9 -0
  161. package/dist/websocket/DreoWebSocketMessage.js +2 -0
  162. package/dist/websocket/DreoWebSocketMessage.js.map +1 -0
  163. package/dist/websocket/DreoWebSocketReply.d.ts +7 -0
  164. package/dist/websocket/DreoWebSocketReply.js +2 -0
  165. package/dist/websocket/DreoWebSocketReply.js.map +1 -0
  166. package/package.json +57 -0
@@ -0,0 +1,147 @@
1
+ import { InputValidator } from "./InputValidator.js";
2
+ import { StateConstraintValidator } from "./StateConstraintValidator.js";
3
+ import { StateMapper } from "./StateMapper.js";
4
+ export class DreoDevice {
5
+ device;
6
+ websocket;
7
+ stateConstraints;
8
+ currentState = {
9
+ raw: {},
10
+ };
11
+ stateMapper = new StateMapper();
12
+ stateConstraintValidator = new StateConstraintValidator();
13
+ constructor(device, websocket, stateConstraints = new Map(), initialRawState = {}) {
14
+ this.device = device;
15
+ this.websocket = websocket;
16
+ this.stateConstraints = stateConstraints;
17
+ if (Object.keys(initialRawState).length > 0) {
18
+ this.applyReport(initialRawState);
19
+ }
20
+ }
21
+ get sn() {
22
+ return this.device.sn;
23
+ }
24
+ get name() {
25
+ return this.device.deviceName;
26
+ }
27
+ get model() {
28
+ return this.device.model;
29
+ }
30
+ get state() {
31
+ return this.currentState;
32
+ }
33
+ /**
34
+ * @internal
35
+ *
36
+ * Applies an incoming DREO WebSocket report to the local state cache.
37
+ * This method is used internally by DreoClient.
38
+ */
39
+ applyReport(reported) {
40
+ this.currentState = {
41
+ ...this.currentState,
42
+ raw: {
43
+ ...this.currentState.raw,
44
+ ...reported,
45
+ },
46
+ power: this.readBoolean(reported, "poweron", this.currentState.power),
47
+ fan: this.readBoolean(reported, "fanon", this.currentState.fan),
48
+ mainLight: this.readBoolean(reported, "lighton", this.currentState.mainLight),
49
+ atmosphereLight: this.readBoolean(reported, "atmon", this.currentState.atmosphereLight),
50
+ mute: this.readBoolean(reported, "muteon", this.currentState.mute),
51
+ windLevel: this.readNumber(reported, "windlevel", this.currentState.windLevel),
52
+ mode: this.readNumber(reported, "mode", this.currentState.mode),
53
+ brightness: this.readNumber(reported, "brightness", this.currentState.brightness),
54
+ colorTemperature: this.readNumber(reported, "colortemp", this.currentState.colorTemperature),
55
+ rgbPreset: this.readNumber(reported, "rgbpresetsel", this.currentState.rgbPreset),
56
+ rgbEffectId: this.readString(reported, "rgbeffectid", this.currentState.rgbEffectId),
57
+ rssi: this.readUnknown(reported, "rssi", this.currentState.rssi),
58
+ };
59
+ }
60
+ async setPower(enabled) {
61
+ await this.applyStateChange({
62
+ power: enabled,
63
+ });
64
+ }
65
+ async setFan(enabled) {
66
+ await this.applyStateChange({
67
+ fan: enabled,
68
+ });
69
+ }
70
+ async setMainLight(enabled) {
71
+ await this.applyStateChange({
72
+ mainLight: enabled,
73
+ });
74
+ }
75
+ async setAtmosphereLight(enabled) {
76
+ await this.applyStateChange({
77
+ atmosphereLight: enabled,
78
+ });
79
+ }
80
+ async setWindLevel(level) {
81
+ InputValidator.requireWindLevel(level);
82
+ await this.applyStateChange({
83
+ windLevel: level,
84
+ });
85
+ }
86
+ async setBrightness(value) {
87
+ InputValidator.requirePercentage(value, "brightness");
88
+ await this.applyStateChange({
89
+ brightness: value,
90
+ });
91
+ }
92
+ async setColorTemperature(value) {
93
+ InputValidator.requirePercentage(value, "colorTemperature");
94
+ await this.applyStateChange({
95
+ colorTemperature: value,
96
+ });
97
+ }
98
+ async setRgbPreset(value) {
99
+ InputValidator.requireRgbPreset(value);
100
+ await this.applyStateChange({
101
+ rgbPreset: value,
102
+ });
103
+ }
104
+ async setAtmosphereBrightness(value) {
105
+ InputValidator.requirePercentage(value, "atmosphereBrightness");
106
+ await this.applyStateChange({
107
+ atmosphereBrightness: value,
108
+ });
109
+ }
110
+ async setMute(value) {
111
+ await this.setStates({
112
+ muteon: value,
113
+ });
114
+ }
115
+ async applyStateChange(change) {
116
+ const payload = this.stateMapper.build(this.currentState, change);
117
+ await this.setStates(payload);
118
+ }
119
+ async setStates(params) {
120
+ this.validateStateParams(params);
121
+ const reply = await this.websocket.sendCommandParams(this.sn, params);
122
+ if (reply.reported) {
123
+ this.applyReport(reply.reported);
124
+ }
125
+ }
126
+ validateStateParams(params) {
127
+ for (const [stateKey, value] of Object.entries(params)) {
128
+ this.stateConstraintValidator.validate(stateKey, value, this.stateConstraints.get(stateKey));
129
+ }
130
+ }
131
+ readBoolean(source, key, fallback) {
132
+ const value = source[key];
133
+ return typeof value === "boolean" ? value : fallback;
134
+ }
135
+ readNumber(source, key, fallback) {
136
+ const value = source[key];
137
+ return typeof value === "number" ? value : fallback;
138
+ }
139
+ readString(source, key, fallback) {
140
+ const value = source[key];
141
+ return typeof value === "string" ? value : fallback;
142
+ }
143
+ readUnknown(source, key, fallback) {
144
+ return key in source ? source[key] : fallback;
145
+ }
146
+ }
147
+ //# sourceMappingURL=DreoDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DreoDevice.js","sourceRoot":"","sources":["../src/DreoDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface DreoLogger {
2
+ debug?(message: string, data?: unknown): void;
3
+ info?(message: string, data?: unknown): void;
4
+ warn?(message: string, data?: unknown): void;
5
+ error?(message: string, data?: unknown): void;
6
+ }
7
+ export declare const noopDreoLogger: Required<DreoLogger>;
@@ -0,0 +1,15 @@
1
+ export const noopDreoLogger = {
2
+ debug() {
3
+ // intentionally empty
4
+ },
5
+ info() {
6
+ // intentionally empty
7
+ },
8
+ warn() {
9
+ // intentionally empty
10
+ },
11
+ error() {
12
+ // intentionally empty
13
+ },
14
+ };
15
+ //# sourceMappingURL=DreoLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DreoLogger.js","sourceRoot":"","sources":["../src/DreoLogger.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,cAAc,GAAyB;IAChD,KAAK;QACD,sBAAsB;IAC1B,CAAC;IAED,IAAI;QACA,sBAAsB;IAC1B,CAAC;IAED,IAAI;QACA,sBAAsB;IAC1B,CAAC;IAED,KAAK;QACD,sBAAsB;IAC1B,CAAC;CACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { AuthTokens } from "./models/AuthTokens.js";
2
+ import type { DreoLogger } from "./DreoLogger.js";
3
+ import type { DreoSessionObserver } from "./DreoSessionObserver.js";
4
+ export interface DreoSessionOptions {
5
+ email: string;
6
+ password: string;
7
+ region: string;
8
+ logger?: DreoLogger;
9
+ }
10
+ export type DreoSessionTokenHandler = (tokens: AuthTokens) => void;
11
+ export declare class DreoSession {
12
+ private readonly options;
13
+ private tokens?;
14
+ private readonly authManager;
15
+ private readonly tokenHandlers;
16
+ private readonly observers;
17
+ constructor(options: DreoSessionOptions);
18
+ login(): Promise<AuthTokens>;
19
+ refresh(): Promise<AuthTokens>;
20
+ getAccessToken(): Promise<string>;
21
+ getRegion(): string | undefined;
22
+ getCurrentTokens(): AuthTokens | undefined;
23
+ onTokenChanged(handler: DreoSessionTokenHandler): () => void;
24
+ addObserver(observer: DreoSessionObserver): void;
25
+ removeObserver(observer: DreoSessionObserver): void;
26
+ setAccessTokenForTesting(accessToken: string): void;
27
+ private loginWithReason;
28
+ private emitTokenChange;
29
+ private emitSessionChanged;
30
+ private createSnapshot;
31
+ }
@@ -0,0 +1,81 @@
1
+ import { AuthManager } from "./auth/AuthManager.js";
2
+ export class DreoSession {
3
+ options;
4
+ tokens;
5
+ authManager;
6
+ tokenHandlers = new Set();
7
+ observers = new Set();
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.authManager = new AuthManager({
11
+ logger: options.logger,
12
+ });
13
+ }
14
+ async login() {
15
+ return this.loginWithReason("initial-login");
16
+ }
17
+ async refresh() {
18
+ return this.loginWithReason("http-401-relogin");
19
+ }
20
+ async getAccessToken() {
21
+ if (!this.tokens) {
22
+ await this.login();
23
+ }
24
+ return this.tokens.accessToken;
25
+ }
26
+ getRegion() {
27
+ return this.tokens?.region;
28
+ }
29
+ getCurrentTokens() {
30
+ return this.tokens;
31
+ }
32
+ onTokenChanged(handler) {
33
+ this.tokenHandlers.add(handler);
34
+ return () => {
35
+ this.tokenHandlers.delete(handler);
36
+ };
37
+ }
38
+ addObserver(observer) {
39
+ this.observers.add(observer);
40
+ }
41
+ removeObserver(observer) {
42
+ this.observers.delete(observer);
43
+ }
44
+ setAccessTokenForTesting(accessToken) {
45
+ if (!this.tokens) {
46
+ throw new Error("No active session.");
47
+ }
48
+ this.tokens = {
49
+ ...this.tokens,
50
+ accessToken,
51
+ };
52
+ this.emitTokenChange(this.tokens);
53
+ }
54
+ async loginWithReason(reason) {
55
+ this.tokens = await this.authManager.login(this.options);
56
+ this.emitTokenChange(this.tokens);
57
+ await this.emitSessionChanged(this.tokens, reason);
58
+ return this.tokens;
59
+ }
60
+ emitTokenChange(tokens) {
61
+ for (const handler of Array.from(this.tokenHandlers)) {
62
+ handler(tokens);
63
+ }
64
+ }
65
+ async emitSessionChanged(tokens, reason) {
66
+ const snapshot = this.createSnapshot(tokens);
67
+ await Promise.all(Array.from(this.observers).map(async (observer) => {
68
+ await observer.onSessionChanged?.(snapshot, reason);
69
+ }));
70
+ }
71
+ createSnapshot(tokens) {
72
+ const extendedTokens = tokens;
73
+ return {
74
+ accessToken: tokens.accessToken,
75
+ refreshToken: extendedTokens.refreshToken,
76
+ region: tokens.region,
77
+ accountId: extendedTokens.accountId,
78
+ };
79
+ }
80
+ }
81
+ //# sourceMappingURL=DreoSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DreoSession.js","sourceRoot":"","sources":["../src/DreoSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type DreoRegion = "EU" | "US" | "CN" | string;
2
+ export interface DreoSessionSnapshot {
3
+ accessToken: string;
4
+ refreshToken?: string;
5
+ region: DreoRegion;
6
+ accountId?: string;
7
+ }
8
+ export type DreoSessionChangeReason = "initial-login" | "http-401-relogin" | "manual-relogin" | "logout";
9
+ export interface DreoSessionObserver {
10
+ onSessionChanged?(snapshot: DreoSessionSnapshot, reason: DreoSessionChangeReason): void | Promise<void>;
11
+ onSessionInvalidated?(reason: DreoSessionChangeReason): void | Promise<void>;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DreoSessionObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DreoSessionObserver.js","sourceRoot":"","sources":["../src/DreoSessionObserver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { DiscoveredState } from "./models/DiscoveredState.js";
2
+ export type DreoStateDefinition = Omit<DiscoveredState, "key" | "valueType">;
3
+ export declare const DREO_STATE_REGISTRY: Record<string, DreoStateDefinition>;
@@ -0,0 +1,302 @@
1
+ export const DREO_STATE_REGISTRY = {
2
+ // --------------------------------------------------
3
+ // Control
4
+ // --------------------------------------------------
5
+ poweron: {
6
+ known: true,
7
+ writable: true,
8
+ category: "control",
9
+ description: "Device power",
10
+ constraint: {
11
+ type: "boolean",
12
+ },
13
+ },
14
+ fanon: {
15
+ known: true,
16
+ writable: true,
17
+ category: "control",
18
+ description: "Fan power",
19
+ constraint: {
20
+ type: "boolean",
21
+ },
22
+ },
23
+ lighton: {
24
+ known: true,
25
+ writable: true,
26
+ category: "control",
27
+ description: "Light power",
28
+ constraint: {
29
+ type: "boolean",
30
+ },
31
+ },
32
+ atmon: {
33
+ known: true,
34
+ writable: true,
35
+ category: "control",
36
+ description: "Ambient light power",
37
+ constraint: {
38
+ type: "boolean",
39
+ },
40
+ },
41
+ brightness: {
42
+ known: true,
43
+ writable: true,
44
+ category: "control",
45
+ description: "Light brightness",
46
+ constraint: {
47
+ type: "number",
48
+ min: 0,
49
+ max: 100,
50
+ step: 1,
51
+ },
52
+ },
53
+ atmbri: {
54
+ known: true,
55
+ writable: true,
56
+ category: "control",
57
+ description: "Ambient light brightness",
58
+ constraint: {
59
+ type: "number",
60
+ min: 0,
61
+ max: 100,
62
+ step: 1,
63
+ },
64
+ },
65
+ colortemp: {
66
+ known: true,
67
+ writable: true,
68
+ category: "control",
69
+ description: "Color temperature",
70
+ constraint: {
71
+ type: "number",
72
+ min: 0,
73
+ max: 100,
74
+ step: 1,
75
+ },
76
+ },
77
+ mode: {
78
+ known: true,
79
+ writable: true,
80
+ category: "control",
81
+ description: "Operating mode",
82
+ constraint: {
83
+ type: "number",
84
+ step: 1,
85
+ },
86
+ },
87
+ windlevel: {
88
+ known: true,
89
+ writable: true,
90
+ category: "control",
91
+ description: "Fan speed",
92
+ constraint: {
93
+ type: "number",
94
+ min: 1,
95
+ max: 12,
96
+ step: 1,
97
+ },
98
+ },
99
+ oscmode: {
100
+ known: true,
101
+ writable: true,
102
+ category: "control",
103
+ description: "Oscillation mode",
104
+ constraint: {
105
+ type: "number",
106
+ step: 1,
107
+ },
108
+ },
109
+ rgbpresetsel: {
110
+ known: true,
111
+ writable: true,
112
+ category: "control",
113
+ description: "RGB preset selection",
114
+ constraint: {
115
+ type: "number",
116
+ min: 0,
117
+ max: 4,
118
+ step: 1,
119
+ },
120
+ },
121
+ // --------------------------------------------------
122
+ // Configuration
123
+ // --------------------------------------------------
124
+ muteon: {
125
+ known: true,
126
+ writable: true,
127
+ category: "configuration",
128
+ description: "Button sound",
129
+ constraint: {
130
+ type: "boolean",
131
+ },
132
+ },
133
+ childlockon: {
134
+ known: true,
135
+ writable: true,
136
+ category: "configuration",
137
+ description: "Child lock",
138
+ constraint: {
139
+ type: "boolean",
140
+ },
141
+ },
142
+ // --------------------------------------------------
143
+ // Diagnostic
144
+ // --------------------------------------------------
145
+ connected: {
146
+ known: true,
147
+ writable: false,
148
+ category: "diagnostic",
149
+ description: "Cloud connectivity",
150
+ constraint: {
151
+ type: "boolean",
152
+ },
153
+ },
154
+ wifi_rssi: {
155
+ known: true,
156
+ writable: false,
157
+ category: "diagnostic",
158
+ description: "WiFi signal",
159
+ constraint: {
160
+ type: "number",
161
+ },
162
+ },
163
+ wifi_ssid: {
164
+ known: true,
165
+ writable: false,
166
+ category: "diagnostic",
167
+ description: "Connected WiFi",
168
+ constraint: {
169
+ type: "string",
170
+ },
171
+ },
172
+ network_latency: {
173
+ known: true,
174
+ writable: false,
175
+ category: "diagnostic",
176
+ description: "Cloud latency",
177
+ constraint: {
178
+ type: "number",
179
+ },
180
+ },
181
+ module_firmware_version: {
182
+ known: true,
183
+ writable: false,
184
+ category: "diagnostic",
185
+ description: "Module firmware",
186
+ constraint: {
187
+ type: "string",
188
+ },
189
+ },
190
+ mcu_firmware_version: {
191
+ known: true,
192
+ writable: false,
193
+ category: "diagnostic",
194
+ description: "MCU firmware",
195
+ constraint: {
196
+ type: "string",
197
+ },
198
+ },
199
+ module_hardware_model: {
200
+ known: true,
201
+ writable: false,
202
+ category: "diagnostic",
203
+ description: "Module hardware",
204
+ constraint: {
205
+ type: "string",
206
+ },
207
+ },
208
+ mcu_hardware_model: {
209
+ known: true,
210
+ writable: false,
211
+ category: "diagnostic",
212
+ description: "MCU hardware",
213
+ constraint: {
214
+ type: "string",
215
+ },
216
+ },
217
+ // --------------------------------------------------
218
+ // Informational (bekannt, aber Bedeutung noch nicht vollständig geklärt)
219
+ // --------------------------------------------------
220
+ timeron: {
221
+ known: true,
222
+ writable: false,
223
+ category: "information",
224
+ description: "Timer configuration",
225
+ constraint: {
226
+ type: "object",
227
+ },
228
+ },
229
+ timeroff: {
230
+ known: true,
231
+ writable: false,
232
+ category: "information",
233
+ description: "Timer configuration",
234
+ constraint: {
235
+ type: "object",
236
+ },
237
+ },
238
+ temperature: {
239
+ known: true,
240
+ writable: false,
241
+ category: "information",
242
+ description: "Measured temperature",
243
+ constraint: {
244
+ type: "number",
245
+ },
246
+ },
247
+ cruiseconf: {
248
+ known: true,
249
+ writable: false,
250
+ category: "information",
251
+ description: "Cruise mode configuration",
252
+ constraint: {
253
+ type: "string",
254
+ },
255
+ },
256
+ fixedconf: {
257
+ known: true,
258
+ writable: false,
259
+ category: "information",
260
+ description: "Fixed mode configuration",
261
+ constraint: {
262
+ type: "string",
263
+ },
264
+ },
265
+ rgbeffectid: {
266
+ known: true,
267
+ writable: false,
268
+ category: "information",
269
+ description: "Selected RGB effect",
270
+ constraint: {
271
+ type: "string",
272
+ },
273
+ },
274
+ rgbpresetnum: {
275
+ known: true,
276
+ writable: false,
277
+ category: "information",
278
+ description: "Available RGB presets",
279
+ constraint: {
280
+ type: "number",
281
+ },
282
+ },
283
+ scenes: {
284
+ known: true,
285
+ writable: false,
286
+ category: "information",
287
+ description: "Scene configuration",
288
+ constraint: {
289
+ type: "string",
290
+ },
291
+ },
292
+ module_hardware_mac: {
293
+ known: true,
294
+ writable: false,
295
+ category: "information",
296
+ description: "Module MAC address",
297
+ constraint: {
298
+ type: "string",
299
+ },
300
+ },
301
+ };
302
+ //# sourceMappingURL=DreoStateRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DreoStateRegistry.js","sourceRoot":"","sources":["../src/DreoStateRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Legacy fallback validator for typed convenience methods.
3
+ *
4
+ * Device-specific command validation is handled by StateConstraintValidator
5
+ * inside DreoDevice before a command is sent.
6
+ *
7
+ * This class remains intentionally simple and provides broad SDK defaults for
8
+ * typed setters that predate resolved device constraints.
9
+ */
10
+ export declare class InputValidator {
11
+ static requirePercentage(value: number, name?: string): void;
12
+ static requireWindLevel(value: number): void;
13
+ static requireRgbPreset(value: number): void;
14
+ static requireRange(value: number, min: number, max: number, name?: string): void;
15
+ }