@mega-yfue/eufy-sdk 0.5.0-beta.54 → 0.5.0-beta.56
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/index.js +332 -4
- package/dist/index.js.map +3 -3
- package/dist/model/capabilities/index.d.ts +5 -1
- package/dist/model/capabilities/mower.d.ts +230 -0
- package/dist/model/param-dictionary.d.ts +6 -0
- package/dist/model/param-namespace.d.ts +1 -1
- package/dist/model/types.d.ts +10 -8
- package/dist/transport/http/mega-client.d.ts +6 -1
- package/package.json +1 -1
|
@@ -42,6 +42,7 @@ import type { VacuumCleanActions } from "./vacuum-clean.js";
|
|
|
42
42
|
import type { VacuumDockActions } from "./vacuum-dock.js";
|
|
43
43
|
import type { DisplayActions } from "./display.js";
|
|
44
44
|
import type { SuctionActions } from "./suction.js";
|
|
45
|
+
import type { MowerActions } from "./mower.js";
|
|
45
46
|
import type { LocateActions } from "./locate.js";
|
|
46
47
|
import type { DeviceInfo } from "./info.js";
|
|
47
48
|
import type { CusPushAlarmType } from "../push-events.js";
|
|
@@ -426,6 +427,8 @@ export interface DeviceActionMap {
|
|
|
426
427
|
vacuumDock: VacuumDockActions;
|
|
427
428
|
/** RoboVac suction: `level`, `boostIq`, `supportedLevels`; `setSuctionLevel`, `setBoostIq`. */
|
|
428
429
|
suction: SuctionActions;
|
|
430
|
+
/** Robot mower (read-only): `battery`, `cutHeight`, `network`, `wifiSignal`, wear timers and settings. No write is captured. */
|
|
431
|
+
mower: MowerActions;
|
|
429
432
|
/** RoboVac locate (find-robot beep): `locating`; `locate(on?)`. */
|
|
430
433
|
locate: LocateActions;
|
|
431
434
|
/** Smart Display (read-only): `battery`. No display write is captured. */
|
|
@@ -521,7 +524,7 @@ export type { ActionSpec } from "./types.js";
|
|
|
521
524
|
* `undefined` for an action nothing describes.
|
|
522
525
|
*/
|
|
523
526
|
export { actionSpecOf } from "./access.js";
|
|
524
|
-
export type { PtzActions, LightActions, SmartLightActions, RgbColor, CameraActions, LockActions, SirenActions, ArmingActions, BatteryActions, MotionActions, ContactActions, LeakActions, SmokeActions, CoActions, KeypadActions, RtspActions, VacuumCleanActions, SuctionActions, LocateActions, };
|
|
527
|
+
export type { PtzActions, LightActions, SmartLightActions, RgbColor, CameraActions, LockActions, SirenActions, ArmingActions, BatteryActions, MotionActions, ContactActions, LeakActions, SmokeActions, CoActions, KeypadActions, RtspActions, VacuumCleanActions, SuctionActions, MowerActions, LocateActions, };
|
|
525
528
|
/**
|
|
526
529
|
* The member table each `*Actions` type is DERIVED from (`LockActions = Surface<typeof LOCK_MEMBERS>`),
|
|
527
530
|
* so the type names the table and the table is part of the published surface.
|
|
@@ -550,6 +553,7 @@ export { SMART_LIGHT_MEMBERS } from "./smart-light.js";
|
|
|
550
553
|
export { SMOKE_MEMBERS } from "./smoke.js";
|
|
551
554
|
export { DISPLAY_MEMBERS, type DisplayActions } from "./display.js";
|
|
552
555
|
export { SUCTION_MEMBERS } from "./suction.js";
|
|
556
|
+
export { MOWER_MEMBERS } from "./mower.js";
|
|
553
557
|
export { VACUUM_CLEAN_MEMBERS } from "./vacuum-clean.js";
|
|
554
558
|
export type { DeviceInfo } from "./info.js";
|
|
555
559
|
export type { AutoSpotlightOptions } from "./light.js";
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { type Surface } from "./members.js";
|
|
2
|
+
import type { CapabilityModule } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Robot-mower Tuya **DP ids** — the E15's Tuya product schema (`thing.m.device.ref.info.list` v5.4,
|
|
5
|
+
* `schemaInfo.schema`, product `bvxrcjxom787vnit`), each id also reported by a live E15. The product
|
|
6
|
+
* is built on Tuya's robot-vacuum template, so ids below 101 carry that template's codes; the mower's
|
|
7
|
+
* own data points are 101-146.
|
|
8
|
+
*
|
|
9
|
+
* Only scalar data points are named here. The Raw ones (`robot_status` 107, `battery_status` 108,
|
|
10
|
+
* `map_info` 113, the `*_control` commands 103-106, …) are protobuf messages whose field layout no
|
|
11
|
+
* source in hand states, and 102 (`device_infomation`) and 142 (`gps_info`) carry the device's network
|
|
12
|
+
* identity and position.
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare const MOWER_DP: {
|
|
16
|
+
readonly BATTERY: 8;
|
|
17
|
+
readonly VOLUME: 26;
|
|
18
|
+
readonly CHILD_LOCK: 47;
|
|
19
|
+
readonly RAIN_AUTO_RETURN: 101;
|
|
20
|
+
readonly WIFI_SIGNAL: 109;
|
|
21
|
+
readonly MOW_HEIGHT: 110;
|
|
22
|
+
readonly SAVE_MAP_PROGRESS: 118;
|
|
23
|
+
readonly STATION_USED_TIME: 125;
|
|
24
|
+
readonly BLADE_USED_TIME: 126;
|
|
25
|
+
readonly EDGE_TRIM: 128;
|
|
26
|
+
readonly WORK_ANGLE_ENABLED: 130;
|
|
27
|
+
readonly WORK_ANGLE: 131;
|
|
28
|
+
readonly SMART_NO_GO_ZONES: 132;
|
|
29
|
+
readonly BIRD_VIEW_CAPTURE: 133;
|
|
30
|
+
readonly NETWORK: 134;
|
|
31
|
+
readonly CELLULAR_ENABLED: 137;
|
|
32
|
+
readonly EDGE_DISTANCE: 139;
|
|
33
|
+
readonly GPS_ANTI_THEFT: 140;
|
|
34
|
+
readonly SPARSE_LAWN_OPTIMIZATION: 141;
|
|
35
|
+
};
|
|
36
|
+
/** The `net_media_type` (DP 134) range, as the schema lists it. */
|
|
37
|
+
export declare const MOWER_NETWORKS: readonly ["None", "Wifi", "Cellular"];
|
|
38
|
+
/** The mower's network link (DP 134). */
|
|
39
|
+
export type MowerNetwork = (typeof MOWER_NETWORKS)[number];
|
|
40
|
+
/**
|
|
41
|
+
* Every `mower` read, declared once.
|
|
42
|
+
*
|
|
43
|
+
* All read-only. Several of these data points are `rw` in the schema, but no write has been captured
|
|
44
|
+
* against a mower, and the vendor app drives the mower through named pass-through commands rather than
|
|
45
|
+
* by publishing these DPs, so no setter is installed.
|
|
46
|
+
*
|
|
47
|
+
* Exported but NOT published: each entry states its wire id, which the reference site does not carry.
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export declare const MOWER_MEMBERS: {
|
|
51
|
+
/** Charge percentage (DP 8, `battery_percentage`). */
|
|
52
|
+
readonly battery: {
|
|
53
|
+
readonly param: 8;
|
|
54
|
+
readonly type: "number";
|
|
55
|
+
readonly unit: "%";
|
|
56
|
+
readonly kind: "percent";
|
|
57
|
+
readonly provenance: "mega";
|
|
58
|
+
readonly description: "Battery level 0-100 (DP 8, battery_percentage). Read-only.";
|
|
59
|
+
};
|
|
60
|
+
/** Speaker volume (DP 26, `volume_set`). */
|
|
61
|
+
readonly volume: {
|
|
62
|
+
readonly param: 26;
|
|
63
|
+
readonly type: "number";
|
|
64
|
+
readonly unit: "%";
|
|
65
|
+
readonly kind: "percent";
|
|
66
|
+
readonly provenance: "mega";
|
|
67
|
+
readonly description: "Speaker volume 0-100 (DP 26, volume_set). Read-only.";
|
|
68
|
+
};
|
|
69
|
+
/** Whether the child lock is on (DP 47, `child_lock`). */
|
|
70
|
+
readonly childLock: {
|
|
71
|
+
readonly param: 47;
|
|
72
|
+
readonly type: "bool";
|
|
73
|
+
readonly kind: "boolean";
|
|
74
|
+
readonly provenance: "mega";
|
|
75
|
+
readonly description: "Child lock on (DP 47, child_lock). Read-only.";
|
|
76
|
+
};
|
|
77
|
+
/** Whether the mower returns to its station when it detects rain (DP 101, `rain_auto_return`). */
|
|
78
|
+
readonly rainAutoReturn: {
|
|
79
|
+
readonly param: 101;
|
|
80
|
+
readonly type: "bool";
|
|
81
|
+
readonly kind: "boolean";
|
|
82
|
+
readonly provenance: "mega";
|
|
83
|
+
readonly description: "Return to the station when rain is detected (DP 101, rain_auto_return). Read-only.";
|
|
84
|
+
};
|
|
85
|
+
/** Wi-Fi signal strength as a percentage (DP 109, `wifi_signal_strength`), not a dBm reading. */
|
|
86
|
+
readonly wifiSignal: {
|
|
87
|
+
readonly param: 109;
|
|
88
|
+
readonly type: "number";
|
|
89
|
+
readonly unit: "%";
|
|
90
|
+
readonly kind: "percent";
|
|
91
|
+
readonly provenance: "mega";
|
|
92
|
+
readonly description: "Wi-Fi signal strength 0-100 % (DP 109, wifi_signal_strength). Read-only.";
|
|
93
|
+
};
|
|
94
|
+
/** Cutting height in millimetres (DP 110, `mow_height`), 25-75. */
|
|
95
|
+
readonly cutHeight: {
|
|
96
|
+
readonly param: 110;
|
|
97
|
+
readonly type: "number";
|
|
98
|
+
readonly unit: "mm";
|
|
99
|
+
readonly kind: "millimetres";
|
|
100
|
+
readonly min: 25;
|
|
101
|
+
readonly max: 75;
|
|
102
|
+
readonly provenance: "mega";
|
|
103
|
+
readonly description: "Cutting height 25-75 mm (DP 110, mow_height). Read-only.";
|
|
104
|
+
};
|
|
105
|
+
/** Progress of saving the map (DP 118, `save_map_process`). */
|
|
106
|
+
readonly mapSaveProgress: {
|
|
107
|
+
readonly param: 118;
|
|
108
|
+
readonly type: "number";
|
|
109
|
+
readonly unit: "%";
|
|
110
|
+
readonly kind: "percent";
|
|
111
|
+
readonly provenance: "mega";
|
|
112
|
+
readonly description: "Map-save progress 0-100 % (DP 118, save_map_process). Read-only.";
|
|
113
|
+
};
|
|
114
|
+
/** Total base-station use in minutes (DP 125, `base_station_used_time`). */
|
|
115
|
+
readonly stationUsedTime: {
|
|
116
|
+
readonly param: 125;
|
|
117
|
+
readonly type: "number";
|
|
118
|
+
readonly unit: "min";
|
|
119
|
+
readonly kind: "minutes";
|
|
120
|
+
readonly provenance: "mega";
|
|
121
|
+
readonly description: "Base-station use in minutes (DP 125, base_station_used_time). Read-only.";
|
|
122
|
+
};
|
|
123
|
+
/** Total cutting-blade use in minutes (DP 126, `mow_blade_used_time`). */
|
|
124
|
+
readonly bladeUsedTime: {
|
|
125
|
+
readonly param: 126;
|
|
126
|
+
readonly type: "number";
|
|
127
|
+
readonly unit: "min";
|
|
128
|
+
readonly kind: "minutes";
|
|
129
|
+
readonly provenance: "mega";
|
|
130
|
+
readonly description: "Cutting-blade use in minutes (DP 126, mow_blade_used_time). Read-only.";
|
|
131
|
+
};
|
|
132
|
+
/** Whether edge trimming is on (DP 128, `edge_trim`). */
|
|
133
|
+
readonly edgeTrim: {
|
|
134
|
+
readonly param: 128;
|
|
135
|
+
readonly type: "bool";
|
|
136
|
+
readonly kind: "boolean";
|
|
137
|
+
readonly provenance: "mega";
|
|
138
|
+
readonly description: "Edge trimming on (DP 128, edge_trim). Read-only.";
|
|
139
|
+
};
|
|
140
|
+
/** Whether a fixed mowing angle is in use (DP 130, `enable_work_angle`); the angle is `workAngle`. */
|
|
141
|
+
readonly workAngleEnabled: {
|
|
142
|
+
readonly param: 130;
|
|
143
|
+
readonly type: "bool";
|
|
144
|
+
readonly kind: "boolean";
|
|
145
|
+
readonly provenance: "mega";
|
|
146
|
+
readonly description: "Fixed mowing angle in use (DP 130, enable_work_angle). Read-only.";
|
|
147
|
+
};
|
|
148
|
+
/** The mowing angle in degrees, -90 to 90 (DP 131, `work_angle`). */
|
|
149
|
+
readonly workAngle: {
|
|
150
|
+
readonly param: 131;
|
|
151
|
+
readonly type: "number";
|
|
152
|
+
readonly unit: "°";
|
|
153
|
+
readonly kind: "degrees";
|
|
154
|
+
readonly min: -90;
|
|
155
|
+
readonly max: 90;
|
|
156
|
+
readonly provenance: "mega";
|
|
157
|
+
readonly description: "Mowing angle -90 to 90 degrees (DP 131, work_angle). Read-only.";
|
|
158
|
+
};
|
|
159
|
+
/** Whether smart no-go zones are on (DP 132, `enable_smart_forbid_zone`). */
|
|
160
|
+
readonly smartNoGoZones: {
|
|
161
|
+
readonly param: 132;
|
|
162
|
+
readonly type: "bool";
|
|
163
|
+
readonly kind: "boolean";
|
|
164
|
+
readonly provenance: "mega";
|
|
165
|
+
readonly description: "Smart no-go zones on (DP 132, enable_smart_forbid_zone). Read-only.";
|
|
166
|
+
};
|
|
167
|
+
/** Whether bird's-eye-view capture is on (DP 133, `enable_bird_view_capture`). */
|
|
168
|
+
readonly birdViewCapture: {
|
|
169
|
+
readonly param: 133;
|
|
170
|
+
readonly type: "bool";
|
|
171
|
+
readonly kind: "boolean";
|
|
172
|
+
readonly provenance: "mega";
|
|
173
|
+
readonly description: "Bird's-eye-view capture on (DP 133, enable_bird_view_capture). Read-only.";
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* The network link in use (DP 134, `net_media_type`). Answers `undefined` for a value outside the
|
|
177
|
+
* schema's range.
|
|
178
|
+
*/
|
|
179
|
+
readonly network: {
|
|
180
|
+
readonly param: 134;
|
|
181
|
+
readonly type: "string";
|
|
182
|
+
readonly provenance: "mega";
|
|
183
|
+
readonly decode: (raw: unknown) => MowerNetwork | undefined;
|
|
184
|
+
readonly decodedKind: "enum";
|
|
185
|
+
readonly decodedValues: readonly ["None", "Wifi", "Cellular"];
|
|
186
|
+
readonly description: "Network link: None, Wifi or Cellular (DP 134, net_media_type). Read-only.";
|
|
187
|
+
};
|
|
188
|
+
/** Whether the cellular link is enabled (DP 137, `enable_cellular`). */
|
|
189
|
+
readonly cellularEnabled: {
|
|
190
|
+
readonly param: 137;
|
|
191
|
+
readonly type: "bool";
|
|
192
|
+
readonly kind: "boolean";
|
|
193
|
+
readonly provenance: "mega";
|
|
194
|
+
readonly description: "Cellular link enabled (DP 137, enable_cellular). Read-only.";
|
|
195
|
+
};
|
|
196
|
+
/** Edge-following distance in millimetres (DP 139, `follow_edge_distance`), signed. */
|
|
197
|
+
readonly edgeDistance: {
|
|
198
|
+
readonly param: 139;
|
|
199
|
+
readonly type: "number";
|
|
200
|
+
readonly unit: "mm";
|
|
201
|
+
readonly kind: "millimetres";
|
|
202
|
+
readonly min: -10000;
|
|
203
|
+
readonly max: 10000;
|
|
204
|
+
readonly provenance: "mega";
|
|
205
|
+
readonly description: "Edge-following distance in mm, signed (DP 139, follow_edge_distance). Read-only.";
|
|
206
|
+
};
|
|
207
|
+
/** Whether GPS anti-theft is on (DP 140, `gps_location_check`). */
|
|
208
|
+
readonly gpsAntiTheft: {
|
|
209
|
+
readonly param: 140;
|
|
210
|
+
readonly type: "bool";
|
|
211
|
+
readonly kind: "boolean";
|
|
212
|
+
readonly provenance: "mega";
|
|
213
|
+
readonly description: "GPS anti-theft on (DP 140, gps_location_check). Read-only.";
|
|
214
|
+
};
|
|
215
|
+
/** Whether sparse-lawn optimisation is on (DP 141, `sparse_lawn_optimization`). */
|
|
216
|
+
readonly sparseLawnOptimization: {
|
|
217
|
+
readonly param: 141;
|
|
218
|
+
readonly type: "bool";
|
|
219
|
+
readonly kind: "boolean";
|
|
220
|
+
readonly provenance: "mega";
|
|
221
|
+
readonly description: "Sparse-lawn optimisation on (DP 141, sparse_lawn_optimization). Read-only.";
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* Bound mower reads — the object returned by `dev.mower()`. Each getter is present only once the
|
|
226
|
+
* mower has reported its data point.
|
|
227
|
+
*/
|
|
228
|
+
export type MowerActions = Surface<typeof MOWER_MEMBERS>;
|
|
229
|
+
/** `mower` — robot-mower state from its Tuya data points. */
|
|
230
|
+
export declare const MOWER: CapabilityModule;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* `types.ts`.
|
|
10
10
|
* - CLEAN_PARAMS — RoboVac Tuya DP space (ids 1 and above), names from the cloud
|
|
11
11
|
* `get_product_data_point` data_point_list, hence provenance `mega`.
|
|
12
|
+
* - MOWER_PARAMS — robot-mower Tuya DP space, names from the mower's Tuya product schema.
|
|
12
13
|
*
|
|
13
14
|
* Which models reported an id, and the capture that named it, are in the commit that adds the entry.
|
|
14
15
|
*/
|
|
@@ -50,3 +51,8 @@ export declare const CLEAN_PARAMS: Record<number, ParamDef>;
|
|
|
50
51
|
* display settings screen, one control at a time, params diffed after each.
|
|
51
52
|
*/
|
|
52
53
|
export declare const DISPLAY_PARAMS: Record<number, ParamDef>;
|
|
54
|
+
/**
|
|
55
|
+
* Robot-mower Tuya DP space — names from the E15's Tuya product schema (`schemaInfo.schema`), each id
|
|
56
|
+
* also reported by a live E15. Only the scalar data points the `mower` capability reads are listed.
|
|
57
|
+
*/
|
|
58
|
+
export declare const MOWER_PARAMS: Record<number, ParamDef>;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import type { Codec } from "./types.js";
|
|
15
15
|
import { type ParamDef } from "./param-dictionary.js";
|
|
16
16
|
/** The param id spaces this SDK models. */
|
|
17
|
-
export type ParamNamespace = "security" | "clean" | "life" | "print" | "display";
|
|
17
|
+
export type ParamNamespace = "security" | "clean" | "mower" | "life" | "print" | "display";
|
|
18
18
|
/** Look up a param def in the given namespace. */
|
|
19
19
|
export declare function paramDef(ns: ParamNamespace, paramType: number): ParamDef | undefined;
|
|
20
20
|
/** The param namespace a device's ids live in, from its codec, via the module-local `NAMESPACE_BY_CODEC` table. */
|
package/dist/model/types.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export type Codec = "station" | "camera" | "sensor" | "lock" | "keypad" | "vacuu
|
|
|
39
39
|
* it maps to a {@link CapabilityModule} that owns its property schema. Extend this union as
|
|
40
40
|
* new capabilities are modelled — adding one never requires a subclass.
|
|
41
41
|
*/
|
|
42
|
-
export type Capability = "video" | "snapshot" | "motion" | "person_detection" | "battery" | "light" | "ptz" | "doorbell" | "contact" | "leak" | "smoke" | "co" | "siren" | "lock" | "keypad" | "arming" | "storage" | "rtsp" | "camera" | "audio" | "vacuum_clean" | "vacuum_dock" | "suction" | "locate" | "smart_light" | "display" | "info";
|
|
42
|
+
export type Capability = "video" | "snapshot" | "motion" | "person_detection" | "battery" | "light" | "ptz" | "doorbell" | "contact" | "leak" | "smoke" | "co" | "siren" | "lock" | "keypad" | "arming" | "storage" | "rtsp" | "camera" | "audio" | "vacuum_clean" | "vacuum_dock" | "suction" | "locate" | "mower" | "smart_light" | "display" | "info";
|
|
43
43
|
/** Value type of a property. */
|
|
44
44
|
export type PropertyValueType = "bool" | "number" | "string" | "enum";
|
|
45
45
|
/**
|
|
@@ -52,11 +52,12 @@ export type PropertyValueType = "bool" | "number" | "string" | "enum";
|
|
|
52
52
|
* one as the other is wrong in a way no type check catches.
|
|
53
53
|
*
|
|
54
54
|
* - `boolean` — an on/off state (always paired with `type: "bool"`).
|
|
55
|
-
* - `percent` / `celsius` / `dbm` / `seconds` / `hours` / `
|
|
56
|
-
* in the unit the device reports it in; each pairs with the
|
|
57
|
-
* never converted on the way out — a converted reading is an invented
|
|
58
|
-
* are separate kinds for exactly that reason: a robot reports
|
|
59
|
-
*
|
|
55
|
+
* - `percent` / `celsius` / `dbm` / `seconds` / `hours` / `minutes` / `millimetres` / `megabytes` /
|
|
56
|
+
* `degrees` — a measured quantity in the unit the device reports it in; each pairs with the
|
|
57
|
+
* matching `unit`. Values are never converted on the way out — a converted reading is an invented
|
|
58
|
+
* one. `seconds`, `minutes` and `hours` are separate kinds for exactly that reason: a robot reports
|
|
59
|
+
* a run in seconds, a mower its blade wear in minutes and a vacuum's consumable wear in hours, and
|
|
60
|
+
* normalising one into another would publish a number the device never sent.
|
|
60
61
|
* - `scalar` — a plain number in no unit at all: a step on a ladder, a mode index, a raw level, a
|
|
61
62
|
* segment count. Ordered and comparable, but its range and direction are the device's, so nothing
|
|
62
63
|
* but the device says what a given value means.
|
|
@@ -83,7 +84,7 @@ export type PropertyValueType = "bool" | "number" | "string" | "enum";
|
|
|
83
84
|
* decodes them and are exported beside that decoder; unlike an enum's options they are not carried
|
|
84
85
|
* here, which is a gap this vocabulary does not close on its own.
|
|
85
86
|
*/
|
|
86
|
-
export declare const KNOWN_VALUE_KINDS: readonly ["boolean", "percent", "celsius", "dbm", "seconds", "hours", "megabytes", "degrees", "scalar", "bitfield", "enum", "identifier", "timestamp", "text"];
|
|
87
|
+
export declare const KNOWN_VALUE_KINDS: readonly ["boolean", "percent", "celsius", "dbm", "seconds", "hours", "minutes", "millimetres", "megabytes", "degrees", "scalar", "bitfield", "enum", "identifier", "timestamp", "text"];
|
|
87
88
|
/** One of the kinds this version models — the closed half of {@link ValueKind}. */
|
|
88
89
|
export type KnownValueKind = (typeof KNOWN_VALUE_KINDS)[number];
|
|
89
90
|
/**
|
|
@@ -106,7 +107,8 @@ export declare function isKnownValueKind(kind: ValueKind): kind is KnownValueKin
|
|
|
106
107
|
/**
|
|
107
108
|
* How much a param's name and meaning can be trusted, most-trusted first. This is the one definition;
|
|
108
109
|
* the param dictionary and every `provenance` field use it.
|
|
109
|
-
* - `mega` — the vendor's cloud names it: its data-point catalog (`get_product_data_point`),
|
|
110
|
+
* - `mega` — the vendor's cloud names it: its data-point catalog (`get_product_data_point`), the
|
|
111
|
+
* Tuya product schema of an `eufy_home_tuya` device (`thing.m.device.ref.info.list`), or a
|
|
110
112
|
* reported value that matches what the cloud record already says (a model name or code).
|
|
111
113
|
* - `verified` — confirmed on a real device by this project: our own capture or observation, or
|
|
112
114
|
* identified by someone who has the hardware.
|
|
@@ -230,6 +230,8 @@ export declare class MegaHttpClient {
|
|
|
230
230
|
/** True while a 2FA code is outstanding: `auth_` holds only the limited pre-verify token, so the
|
|
231
231
|
* restored-session short-circuit must NOT treat it as a usable session. Cleared on Ok/reset. */
|
|
232
232
|
private pending2fa;
|
|
233
|
+
/** An autonomous re-login answered captcha/2FA; see {@link canReauthenticate}. */
|
|
234
|
+
private reloginChallenged;
|
|
233
235
|
private tokenExpiresAt;
|
|
234
236
|
/**
|
|
235
237
|
* Stable per-install device id: `openudid` as configured, as restored from the session store, or as
|
|
@@ -265,6 +267,7 @@ export declare class MegaHttpClient {
|
|
|
265
267
|
*
|
|
266
268
|
* Read at construction, and again when a rejection is being recovered from — a store SHARED with another
|
|
267
269
|
* client may already hold the session that client obtained, which is cheaper to adopt than to compete with.
|
|
270
|
+
* An adopted session is a complete one, so it ends any 2FA or challenged re-login this client was left with.
|
|
268
271
|
*
|
|
269
272
|
* Note: the device identity (openudid + phone model + media UA) is NOT restored here — it is resolved once
|
|
270
273
|
* in the constructor, where an explicit config wins over the stored value, and must not be re-derived from a
|
|
@@ -589,7 +592,9 @@ export declare class MegaHttpClient {
|
|
|
589
592
|
* Structural rather than a list of paths: a login round trip is itself an authenticated call while a limited
|
|
590
593
|
* token is held, so re-logging in from inside one would recurse — and a path list would have to be
|
|
591
594
|
* maintained alongside every request the login flow makes. A 2FA code already outstanding is a login a human
|
|
592
|
-
* is part-way through, and restarting it silently would discard it.
|
|
595
|
+
* is part-way through, and restarting it silently would discard it. A re-login that already came back needing
|
|
596
|
+
* a captcha or a 2FA code would need the same again, and each attempt sends the account another code, so
|
|
597
|
+
* none is tried until a login completes or a stored session is adopted. No credentials means nothing to try,
|
|
593
598
|
* so the rejection surfaces instead.
|
|
594
599
|
*/
|
|
595
600
|
private canReauthenticate;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mega-yfue/eufy-sdk",
|
|
3
|
-
"version": "0.5.0-beta.
|
|
3
|
+
"version": "0.5.0-beta.56",
|
|
4
4
|
"description": "One typed TypeScript client for the Anker eufy v6 cloud — capability-driven devices, realtime events over P2P/MQTT/push, and live media",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "mega-yfue",
|