@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.4 → 5.0.0-beta.41
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/CONTRIBUTING.md +9 -17
- package/config.schema.json +60 -0
- package/dist/account/ownership.js +16 -16
- package/dist/account/ownership.js.map +1 -1
- package/dist/account/persistence.js +24 -74
- package/dist/account/persistence.js.map +1 -1
- package/dist/account/temporary-authentication.js +5 -3
- package/dist/account/temporary-authentication.js.map +1 -1
- package/dist/configuration.js +50 -13
- package/dist/configuration.js.map +1 -1
- package/dist/device/member-evidence.js +11 -4
- package/dist/device/member-evidence.js.map +1 -1
- package/dist/device/member-trust.js +14 -32
- package/dist/device/member-trust.js.map +1 -1
- package/dist/device/snapshot.js +6 -18
- package/dist/device/snapshot.js.map +1 -1
- package/dist/diagnostics.js +966 -337
- package/dist/diagnostics.js.map +1 -1
- package/dist/homekit/adapter.js +4 -1
- package/dist/homekit/adapter.js.map +1 -1
- package/dist/homekit/adapters/battery.js +3 -3
- package/dist/homekit/adapters/battery.js.map +1 -1
- package/dist/homekit/adapters/camera-controls.js +15 -37
- package/dist/homekit/adapters/camera-controls.js.map +1 -1
- package/dist/homekit/adapters/camera-streaming.js +74 -48
- package/dist/homekit/adapters/camera-streaming.js.map +1 -1
- package/dist/homekit/adapters/contact.js +5 -5
- package/dist/homekit/adapters/contact.js.map +1 -1
- package/dist/homekit/adapters/doorbell.js +3 -15
- package/dist/homekit/adapters/doorbell.js.map +1 -1
- package/dist/homekit/adapters/lock.js +72 -221
- package/dist/homekit/adapters/lock.js.map +1 -1
- package/dist/homekit/adapters/motion.js +3 -3
- package/dist/homekit/adapters/motion.js.map +1 -1
- package/dist/homekit/adapters/package-sensor.js +63 -0
- package/dist/homekit/adapters/package-sensor.js.map +1 -0
- package/dist/homekit/adapters/registry.js +2 -0
- package/dist/homekit/adapters/registry.js.map +1 -1
- package/dist/homekit/adapters/security-system.js +106 -250
- package/dist/homekit/adapters/security-system.js.map +1 -1
- package/dist/homekit/adapters/siren.js +5 -33
- package/dist/homekit/adapters/siren.js.map +1 -1
- package/dist/homekit/adapters/smart-light.js +19 -217
- package/dist/homekit/adapters/smart-light.js.map +1 -1
- package/dist/homekit/coverage-matrix.js +8 -67
- package/dist/homekit/coverage-matrix.js.map +1 -1
- package/dist/homekit/device-control.js +249 -13
- package/dist/homekit/device-control.js.map +1 -1
- package/dist/homekit/reconciler.js +25 -9
- package/dist/homekit/reconciler.js.map +1 -1
- package/dist/media/last-successful-image.js +8 -23
- package/dist/media/last-successful-image.js.map +1 -1
- package/dist/media/live-preview.js +217 -0
- package/dist/media/live-preview.js.map +1 -0
- package/dist/media/live-stream.js +689 -160
- package/dist/media/live-stream.js.map +1 -1
- package/dist/media/recording.js +41 -118
- package/dist/media/recording.js.map +1 -1
- package/dist/media/snapshot.js +22 -17
- package/dist/media/snapshot.js.map +1 -1
- package/dist/media/station-live-sessions.js +40 -51
- package/dist/media/station-live-sessions.js.map +1 -1
- package/dist/platform.js +61 -10
- package/dist/platform.js.map +1 -1
- package/dist/runtime/channel.js +227 -40
- package/dist/runtime/channel.js.map +1 -1
- package/dist/runtime/device-settings.js +88 -0
- package/dist/runtime/device-settings.js.map +1 -0
- package/dist/runtime/owner.js +30 -5
- package/dist/runtime/owner.js.map +1 -1
- package/dist/runtime/sdk-client.js +21 -17
- package/dist/runtime/sdk-client.js.map +1 -1
- package/dist/runtime/tracker.js +8 -38
- package/dist/runtime/tracker.js.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/storage.js.map +1 -1
- package/dist/ui/dashboard.js +36 -16
- package/dist/ui/dashboard.js.map +1 -1
- package/dist/ui/runtime-channel-client.js +155 -184
- package/dist/ui/runtime-channel-client.js.map +1 -1
- package/dist/ui/server.js +94 -41
- package/dist/ui/server.js.map +1 -1
- package/homebridge-ui/public/app.css +531 -239
- package/homebridge-ui/public/assets/icons/auto_fix_high.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_0.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_1.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_2.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_3.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_4.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_5.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_6.svg +1 -0
- package/homebridge-ui/public/assets/icons/battery_full.svg +1 -0
- package/homebridge-ui/public/assets/icons/contact_support.svg +1 -0
- package/homebridge-ui/public/assets/icons/delete.svg +1 -0
- package/homebridge-ui/public/assets/icons/download.svg +1 -0
- package/homebridge-ui/public/assets/icons/extension_off.svg +1 -0
- package/homebridge-ui/public/assets/icons/info.svg +1 -0
- package/homebridge-ui/public/assets/icons/key_off.svg +1 -0
- package/homebridge-ui/public/assets/icons/keyboard_arrow_left.svg +1 -0
- package/homebridge-ui/public/assets/icons/keyboard_arrow_right.svg +1 -0
- package/homebridge-ui/public/assets/icons/keyboard_double_arrow_left.svg +1 -0
- package/homebridge-ui/public/assets/icons/keyboard_double_arrow_right.svg +1 -0
- package/homebridge-ui/public/assets/icons/movie_off.svg +1 -0
- package/homebridge-ui/public/assets/icons/play_arrow.svg +1 -0
- package/homebridge-ui/public/assets/icons/refresh.svg +1 -0
- package/homebridge-ui/public/assets/icons/satellite_alt.svg +1 -0
- package/homebridge-ui/public/assets/icons/search_off.svg +1 -0
- package/homebridge-ui/public/assets/icons/sensors_off.svg +1 -0
- package/homebridge-ui/public/assets/icons/settings_photo_camera.svg +1 -0
- package/homebridge-ui/public/assets/icons/solar_power.svg +1 -0
- package/homebridge-ui/public/assets/icons/stop.svg +1 -0
- package/homebridge-ui/public/assets/icons/videocam_off.svg +1 -0
- package/homebridge-ui/public/i18n/en.json +161 -82
- package/homebridge-ui/public/i18n/fr.json +162 -83
- package/homebridge-ui/public/index.html +224 -96
- package/homebridge-ui/public/js/app.js +821 -435
- package/homebridge-ui/public/js/dashboard.js +148 -31
- package/i18n/runtime/en.json +10 -3
- package/package.json +10 -11
- package/homebridge-ui/public/js/legacy-settings.js +0 -37
- package/homebridge-ui/public/js/profile-wizard.js +0 -61
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ownService, } from '../adapter.js';
|
|
1
2
|
export const DOORBELL_ADAPTER_KEY = 'doorbell.press';
|
|
2
3
|
const DOORBELL_OWNERS = new WeakMap();
|
|
3
4
|
const DOORBELL_PRESS_REQUIREMENT = {
|
|
@@ -10,19 +11,6 @@ export const DOORBELL_PRESS_EVENT = 'doorbellPress';
|
|
|
10
11
|
export function hasAdmittedDoorbellPress(evidence) {
|
|
11
12
|
return evidence.has(DOORBELL_PRESS_REQUIREMENT.id);
|
|
12
13
|
}
|
|
13
|
-
/**
|
|
14
|
-
* This accessory's one doorbell service, created on first use under the stable key this adapter owns.
|
|
15
|
-
*
|
|
16
|
-
* A camera bundle configuring HomeKit Secure Video has to hand the same service to its controller, because
|
|
17
|
-
* a press is only a recording trigger when the controller that advertises it owns the service carrying it.
|
|
18
|
-
* Both callers resolve it here so one accessory can only ever carry one doorbell service, whichever
|
|
19
|
-
* attaches first.
|
|
20
|
-
*/
|
|
21
|
-
export function doorbellPressService(context) {
|
|
22
|
-
const { accessory, hap } = context;
|
|
23
|
-
return (accessory.getServiceById(hap.Service.Doorbell, DOORBELL_ADAPTER_KEY) ??
|
|
24
|
-
accessory.addService(hap.Service.Doorbell, accessory.displayName, DOORBELL_ADAPTER_KEY));
|
|
25
|
-
}
|
|
26
14
|
/** Complete HomeKit policy for admitted physical doorbell presses. */
|
|
27
15
|
export const DOORBELL_ADAPTER = {
|
|
28
16
|
key: DOORBELL_ADAPTER_KEY,
|
|
@@ -34,13 +22,13 @@ export const DOORBELL_ADAPTER = {
|
|
|
34
22
|
/** Attaches verified SDK press events to one official HomeKit Doorbell service. */
|
|
35
23
|
function attachDoorbell(context) {
|
|
36
24
|
const { accessory, hap } = context;
|
|
37
|
-
const service =
|
|
25
|
+
const service = ownService(accessory, hap.Service.Doorbell, accessory.displayName, DOORBELL_ADAPTER_KEY);
|
|
38
26
|
const owner = Symbol('doorbell-owner');
|
|
39
27
|
DOORBELL_OWNERS.set(service, owner);
|
|
40
28
|
const characteristic = service.getCharacteristic(hap.Characteristic.ProgrammableSwitchEvent);
|
|
41
29
|
return {
|
|
42
30
|
event(event) {
|
|
43
|
-
if (event.eventName !==
|
|
31
|
+
if (event.eventName !== DOORBELL_PRESS_EVENT) {
|
|
44
32
|
return undefined;
|
|
45
33
|
}
|
|
46
34
|
characteristic.sendEventNotification(hap.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doorbell.js","sourceRoot":"","sources":["../../../src/homekit/adapters/doorbell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doorbell.js","sourceRoot":"","sources":["../../../src/homekit/adapters/doorbell.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,GAKX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACrD,MAAM,eAAe,GAAG,IAAI,OAAO,EAAkB,CAAC;AAEtD,MAAM,0BAA0B,GAAG;IACjC,EAAE,EAAE,8BAA8B;IAClC,IAAI,EAAE,OAAO;CACL,CAAC;AAEX,0FAA0F;AAC1F,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEpD,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,QAA8C;IACrF,OAAO,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,oBAAoB;IACzB,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,CAAC,0BAA0B,CAAC;IACtC,QAAQ,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IACzC,MAAM,EAAE,cAAc;CACW,CAAC;AAEpC,mFAAmF;AACnF,SAAS,cAAc,CAAC,OAAiC;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACzG,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAE7F,OAAO;QACL,KAAK,CAAC,KAAqB;YACzB,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB,EAAE,CAAC;gBAC7C,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAC9F,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM;YACJ,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC3C,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LockPushEvent } from '@mega-yfue/eufy-sdk';
|
|
2
|
+
import { ownService, } from '../adapter.js';
|
|
3
|
+
import { PersistentMemberWrites } from '../device-control.js';
|
|
2
4
|
export const LOCK_ADAPTER_KEY = 'lock.mechanism';
|
|
5
|
+
/** The announcement this adapter presents what the bolt did from, as it happens. */
|
|
6
|
+
export const LOCK_STATE_EVENT_ROW = 'lock.lockState.event';
|
|
3
7
|
/**
|
|
4
|
-
* The
|
|
8
|
+
* The lock's own reported state, which presents the bolt before any announcement has.
|
|
5
9
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
8
|
-
* bolt did. It is required before any state is presented, so the code cannot claim a state it never receives.
|
|
10
|
+
* The SDK verifies it on the lock's state param. The lock and unlock actions are what write it, which is why
|
|
11
|
+
* its operation row is the target this adapter already controls.
|
|
9
12
|
*/
|
|
10
|
-
export const
|
|
13
|
+
export const LOCKED_READ_ROW = 'lock.locked.read';
|
|
14
|
+
const LOCKED_WRITE_ROW = 'lock.locked.persistent-operation';
|
|
11
15
|
const LOCK_ACTION = {
|
|
12
16
|
id: 'lock.lock.momentary-action',
|
|
13
17
|
kind: 'momentary-action',
|
|
@@ -16,8 +20,6 @@ const UNLOCK_ACTION = {
|
|
|
16
20
|
id: 'lock.unlock.momentary-action',
|
|
17
21
|
kind: 'momentary-action',
|
|
18
22
|
};
|
|
19
|
-
const OPERATION_DEADLINE_MS = 8_000;
|
|
20
|
-
const RECONCILIATION_WINDOW_MS = 60_000;
|
|
21
23
|
/**
|
|
22
24
|
* The HomeKit meaning of each lock push code the SDK names, and only those.
|
|
23
25
|
*
|
|
@@ -84,213 +86,30 @@ export const CLASSIFIED_LOCK_CODES = new Set([
|
|
|
84
86
|
/** The identity-free trace one lock announcement records. */
|
|
85
87
|
const LOCK_STATE_TRACE = 'lock-state';
|
|
86
88
|
const LOCK_STATES = new WeakMap();
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
reconciliation;
|
|
97
|
-
projection;
|
|
98
|
-
blockedError;
|
|
99
|
-
detached = false;
|
|
100
|
-
constructor(issue, communicationFailure, operationFailure, isNonRetryable, diagnose) {
|
|
101
|
-
this.issue = issue;
|
|
102
|
-
this.communicationFailure = communicationFailure;
|
|
103
|
-
this.operationFailure = operationFailure;
|
|
104
|
-
this.isNonRetryable = isNonRetryable;
|
|
105
|
-
this.diagnose = diagnose;
|
|
106
|
-
}
|
|
107
|
-
read() {
|
|
108
|
-
return this.projection;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Settles the window a write opened, because the device has since said what it actually did.
|
|
112
|
-
*
|
|
113
|
-
* A successful command acknowledges delivery and nothing more, so this projection exists only to answer
|
|
114
|
-
* HomeKit until the lock reports. Once it has, the projection is not merely confirmed but superseded — the
|
|
115
|
-
* announcement is authoritative even when it contradicts what was asked for, which is what happens when
|
|
116
|
-
* someone turns the key the other way — and there is nothing left unreconciled to warn about.
|
|
117
|
-
*/
|
|
118
|
-
observed() {
|
|
119
|
-
if (this.reconciliation) {
|
|
120
|
-
clearTimeout(this.reconciliation);
|
|
121
|
-
this.reconciliation = undefined;
|
|
122
|
-
}
|
|
123
|
-
this.projection = undefined;
|
|
124
|
-
}
|
|
125
|
-
request(value) {
|
|
126
|
-
if (this.blockedError) {
|
|
127
|
-
return Promise.reject(this.blockedError);
|
|
128
|
-
}
|
|
129
|
-
this.projection = value;
|
|
130
|
-
return new Promise((resolve, reject) => {
|
|
131
|
-
const request = {
|
|
132
|
-
value,
|
|
133
|
-
settled: false,
|
|
134
|
-
resolve,
|
|
135
|
-
reject,
|
|
136
|
-
};
|
|
137
|
-
if (!this.active) {
|
|
138
|
-
this.start({ value, requests: [request], abandoned: false });
|
|
139
|
-
}
|
|
140
|
-
else if (this.queued) {
|
|
141
|
-
this.queued.value = value;
|
|
142
|
-
this.queued.requests.push(request);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.queued = { value, requests: [request], abandoned: false };
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
detach() {
|
|
150
|
-
this.detached = true;
|
|
151
|
-
if (this.reconciliation) {
|
|
152
|
-
clearTimeout(this.reconciliation);
|
|
153
|
-
}
|
|
154
|
-
for (const request of [...(this.active?.requests ?? []), ...(this.queued?.requests ?? [])]) {
|
|
155
|
-
this.settle(request, 'reject', this.communicationFailure());
|
|
156
|
-
}
|
|
157
|
-
this.active = undefined;
|
|
158
|
-
this.queued = undefined;
|
|
159
|
-
this.projection = undefined;
|
|
160
|
-
this.reconciliation = undefined;
|
|
161
|
-
}
|
|
162
|
-
start(batch) {
|
|
163
|
-
if (this.detached) {
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (this.reconciliation) {
|
|
167
|
-
clearTimeout(this.reconciliation);
|
|
168
|
-
this.reconciliation = undefined;
|
|
169
|
-
}
|
|
170
|
-
this.active = batch;
|
|
171
|
-
for (const request of batch.requests) {
|
|
172
|
-
request.deadline = setTimeout(() => this.timeout(request), OPERATION_DEADLINE_MS);
|
|
173
|
-
}
|
|
174
|
-
Promise.resolve()
|
|
175
|
-
.then(() => this.issue(batch.value))
|
|
176
|
-
.then(() => this.complete(batch), (error) => this.fail(batch, error));
|
|
177
|
-
}
|
|
178
|
-
complete(batch) {
|
|
179
|
-
if (this.active !== batch) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
if (batch.abandoned) {
|
|
183
|
-
this.active = undefined;
|
|
184
|
-
this.startQueued();
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
for (const request of batch.requests) {
|
|
188
|
-
this.settle(request, 'resolve');
|
|
189
|
-
}
|
|
190
|
-
this.diagnose('lock-operation-failed', false, 'recovered');
|
|
191
|
-
if (this.projection !== undefined) {
|
|
192
|
-
this.reconciliation = setTimeout(() => {
|
|
193
|
-
this.reconciliation = undefined;
|
|
194
|
-
this.projection = undefined;
|
|
195
|
-
this.diagnose('lock-reconciliation-expired', true, 'expired');
|
|
196
|
-
}, RECONCILIATION_WINDOW_MS);
|
|
197
|
-
}
|
|
198
|
-
this.active = undefined;
|
|
199
|
-
this.startQueued();
|
|
200
|
-
}
|
|
201
|
-
fail(batch, cause) {
|
|
202
|
-
if (this.active !== batch) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
const error = this.operationFailure(cause);
|
|
206
|
-
for (const request of batch.requests) {
|
|
207
|
-
this.settle(request, 'reject', error);
|
|
208
|
-
}
|
|
209
|
-
const nonRetryable = this.isNonRetryable(cause);
|
|
210
|
-
if (nonRetryable) {
|
|
211
|
-
this.blockedError = error;
|
|
212
|
-
for (const request of this.queued?.requests ?? []) {
|
|
213
|
-
this.settle(request, 'reject', error);
|
|
214
|
-
}
|
|
215
|
-
this.queued = undefined;
|
|
216
|
-
}
|
|
217
|
-
this.projection = this.queued?.value;
|
|
218
|
-
if (batch.abandoned && !nonRetryable) {
|
|
219
|
-
this.active = undefined;
|
|
220
|
-
this.startQueued();
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
this.diagnose('lock-operation-failed', true, nonRetryable ? 'capability-not-supported' : 'operation-failure');
|
|
224
|
-
this.active = undefined;
|
|
225
|
-
this.startQueued();
|
|
226
|
-
}
|
|
227
|
-
timeout(request) {
|
|
228
|
-
if (request.settled) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
this.settle(request, 'reject', this.communicationFailure());
|
|
232
|
-
this.diagnose('lock-operation-failed', true, 'timeout');
|
|
233
|
-
if (this.active?.requests.every(({ settled }) => settled)) {
|
|
234
|
-
this.active.abandoned = true;
|
|
235
|
-
this.projection = this.queued?.value;
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
if (this.queued) {
|
|
239
|
-
this.queued.requests = this.queued.requests.filter(({ settled }) => !settled);
|
|
240
|
-
if (this.queued.requests.length === 0) {
|
|
241
|
-
this.queued = undefined;
|
|
242
|
-
this.projection = this.active?.value;
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
this.queued.value = this.queued.requests.at(-1).value;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
startQueued() {
|
|
250
|
-
const queued = this.queued;
|
|
251
|
-
this.queued = undefined;
|
|
252
|
-
if (!queued) {
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
queued.requests = queued.requests.filter(({ settled }) => !settled);
|
|
256
|
-
if (queued.requests.length > 0) {
|
|
257
|
-
queued.value = queued.requests.at(-1).value;
|
|
258
|
-
this.projection = queued.value;
|
|
259
|
-
this.start(queued);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
settle(request, result, error) {
|
|
263
|
-
if (request.settled) {
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
request.settled = true;
|
|
267
|
-
if (request.deadline) {
|
|
268
|
-
clearTimeout(request.deadline);
|
|
269
|
-
}
|
|
270
|
-
if (result === 'resolve') {
|
|
271
|
-
request.resolve();
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
request.reject(error);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
const COVERAGE = [LOCK_ACTION.id, UNLOCK_ACTION.id, LOCK_STATE_EVENT_ROW];
|
|
279
|
-
/** Complete HomeKit policy for the exact evidenced T8531 lock-control boundary. */
|
|
89
|
+
const COVERAGE = [LOCK_ACTION.id, UNLOCK_ACTION.id, LOCK_STATE_EVENT_ROW, LOCKED_READ_ROW, LOCKED_WRITE_ROW];
|
|
90
|
+
/**
|
|
91
|
+
* Complete HomeKit policy for the evidenced lock-control boundary, one model at a time.
|
|
92
|
+
*
|
|
93
|
+
* The SDK's actuation covers the whole lock family, and a family is not evidence: a lock button that a wrong
|
|
94
|
+
* frame leaves inert is worse on a door than no button, so a model is listed once the bolt has been seen to
|
|
95
|
+
* move on it. `T8531` is confirmed. `T8506` and `T85L0` are listed to be confirmed by their owner, and come
|
|
96
|
+
* off again if the bolt does not move.
|
|
97
|
+
*/
|
|
280
98
|
export const LOCK_ADAPTER = {
|
|
281
99
|
key: LOCK_ADAPTER_KEY,
|
|
282
100
|
role: 'primary-purpose',
|
|
283
|
-
requiresProduct: {
|
|
101
|
+
requiresProduct: { models: ['T8531', 'T8506', 'T85L0'] },
|
|
284
102
|
requires: [LOCK_ACTION, UNLOCK_ACTION],
|
|
285
103
|
coverage: COVERAGE,
|
|
286
104
|
attach: attachLock,
|
|
287
105
|
};
|
|
288
106
|
/**
|
|
289
|
-
* Attaches the lock's controls, and its physical state where the device announces one.
|
|
107
|
+
* Attaches the lock's controls, and its physical state where the device reports or announces one.
|
|
290
108
|
*
|
|
291
|
-
* The controls and the state are deliberately gated apart: a lock that reports no state
|
|
292
|
-
*
|
|
293
|
-
*
|
|
109
|
+
* The controls and the state are deliberately gated apart: a lock that reports no state is still worth locking
|
|
110
|
+
* from HomeKit, so the two momentary actions admit the accessory and the state evidence only decides whether a
|
|
111
|
+
* state is presented beside them. The reported state seeds only an attachment nothing has announced to yet,
|
|
112
|
+
* because an announcement is the newer observation and the only one that can say the bolt jammed.
|
|
294
113
|
*/
|
|
295
114
|
function attachLock(context) {
|
|
296
115
|
const { accessory, hap } = context;
|
|
@@ -327,28 +146,48 @@ function attachLock(context) {
|
|
|
327
146
|
reason: 'recovered',
|
|
328
147
|
});
|
|
329
148
|
context.observed('lock-capability-unavailable');
|
|
330
|
-
const service = accessory
|
|
331
|
-
accessory.addService(hap.Service.LockMechanism, accessory.displayName, LOCK_ADAPTER_KEY);
|
|
149
|
+
const service = ownService(accessory, hap.Service.LockMechanism, accessory.displayName, LOCK_ADAPTER_KEY);
|
|
332
150
|
const previousState = LOCK_STATES.get(service);
|
|
333
151
|
const owner = Symbol('lock-owner');
|
|
152
|
+
const admitted = actions;
|
|
334
153
|
const state = previousState ?? {
|
|
335
154
|
owner,
|
|
336
|
-
actions,
|
|
155
|
+
actions: admitted,
|
|
337
156
|
diagnose: () => undefined,
|
|
338
157
|
};
|
|
339
158
|
state.owner = owner;
|
|
340
|
-
state.actions =
|
|
159
|
+
state.actions = admitted;
|
|
341
160
|
LOCK_STATES.set(service, state);
|
|
342
161
|
const current = service.getCharacteristic(hap.Characteristic.LockCurrentState);
|
|
343
162
|
const target = service.getCharacteristic(hap.Characteristic.LockTargetState);
|
|
344
163
|
const announces = context.evidence.has(LOCK_STATE_EVENT_ROW);
|
|
164
|
+
const reports = context.evidence.has(LOCKED_READ_ROW);
|
|
165
|
+
/**
|
|
166
|
+
* The flat property name this device announces its reported state under, as its own manifest pairs it.
|
|
167
|
+
*
|
|
168
|
+
* A device whose manifest names no property for the read is left unfollowed rather than matched on the
|
|
169
|
+
* accessor, because an accessor equal to some other capability's property name would move this bolt.
|
|
170
|
+
*/
|
|
171
|
+
const lockedProperty = context.evidence.get(LOCKED_READ_ROW)?.property;
|
|
345
172
|
const diagnoseState = (active, reason) => {
|
|
346
173
|
context.diagnose({ code: 'unusable-lock-announcement', capability: 'lock', member: 'state', active, reason });
|
|
347
174
|
if (!active) {
|
|
348
175
|
context.observed('unusable-lock-announcement');
|
|
349
176
|
}
|
|
350
177
|
};
|
|
351
|
-
if (
|
|
178
|
+
if (reports && state.announced === undefined) {
|
|
179
|
+
let locked;
|
|
180
|
+
try {
|
|
181
|
+
locked = actions.locked;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
locked = undefined;
|
|
185
|
+
}
|
|
186
|
+
if (typeof locked === 'boolean') {
|
|
187
|
+
state.announced = state.announcedTarget = locked ? 'secured' : 'unsecured';
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (!announces && !reports) {
|
|
352
191
|
state.announced = undefined;
|
|
353
192
|
state.announcedTarget = undefined;
|
|
354
193
|
context.diagnose({
|
|
@@ -377,10 +216,8 @@ function attachLock(context) {
|
|
|
377
216
|
context.observed(code);
|
|
378
217
|
}
|
|
379
218
|
};
|
|
380
|
-
const communicationFailure = () => new hap.HapStatusError(hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
|
|
381
|
-
state.writes ??= new
|
|
382
|
-
? hap.HAPStatus.NOT_ALLOWED_IN_CURRENT_STATE
|
|
383
|
-
: hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE), (error) => error instanceof CapabilityNotSupportedError, (code, active, reason) => state.diagnose(code, active, reason));
|
|
219
|
+
const communicationFailure = () => new hap.HapStatusError(-70402 /* hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
220
|
+
state.writes ??= new PersistentMemberWrites(hap, (value) => (value === hap.Characteristic.LockTargetState.SECURED ? state.actions.lock() : state.actions.unlock()), (condition, active, reason) => state.diagnose(condition === 'operation' ? 'lock-operation-failed' : 'lock-reconciliation-expired', active, reason), (cause) => cause === 'late-completed' && target.updateValue(state.writes.read()), { holdAbandoned: true, supersedeOnly: true });
|
|
384
221
|
current.onGet(currentValue);
|
|
385
222
|
/**
|
|
386
223
|
* Answers the target from the newest thing that established one: a write still in flight, else the last
|
|
@@ -400,7 +237,7 @@ function attachLock(context) {
|
|
|
400
237
|
target.onSet((value) => {
|
|
401
238
|
if (value !== hap.Characteristic.LockTargetState.SECURED &&
|
|
402
239
|
value !== hap.Characteristic.LockTargetState.UNSECURED) {
|
|
403
|
-
throw new hap.HapStatusError(hap.HAPStatus.INVALID_VALUE_IN_REQUEST);
|
|
240
|
+
throw new hap.HapStatusError(-70410 /* hap.HAPStatus.INVALID_VALUE_IN_REQUEST */);
|
|
404
241
|
}
|
|
405
242
|
return state.writes.request(value);
|
|
406
243
|
});
|
|
@@ -417,7 +254,7 @@ function attachLock(context) {
|
|
|
417
254
|
if (announced !== 'jammed') {
|
|
418
255
|
state.announcedTarget = announced;
|
|
419
256
|
}
|
|
420
|
-
state.writes?.
|
|
257
|
+
state.writes?.observe();
|
|
421
258
|
const nextCurrent = currentValue();
|
|
422
259
|
if (current.value !== nextCurrent) {
|
|
423
260
|
current.updateValue(nextCurrent);
|
|
@@ -451,11 +288,25 @@ function attachLock(context) {
|
|
|
451
288
|
* announcement will carry, and a lock is the wrong accessory on which to trust a shape.
|
|
452
289
|
*
|
|
453
290
|
* A code this build has read and deliberately presents nothing for — a battery warning, a tamper, a
|
|
454
|
-
* firmware update — is not this member reporting at all, so it
|
|
455
|
-
*
|
|
291
|
+
* firmware update — is not this member reporting at all, so it leaves the state alone and records only
|
|
292
|
+
* its code. Anything else in the range is unread: the state is withdrawn rather than kept, because the
|
|
456
293
|
* announcement was about this lock and this build cannot say what it meant.
|
|
294
|
+
*
|
|
295
|
+
* The SDK's property announcement of the reported state is presented the same way, recorded as `poll`: it
|
|
296
|
+
* is how a lock that moved without a push, such as an auto-lock, is learned.
|
|
457
297
|
*/
|
|
458
298
|
event(event) {
|
|
299
|
+
if (event.eventName === 'propertyChanged') {
|
|
300
|
+
if (lockedProperty === undefined || event.property !== lockedProperty) {
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
if (typeof event.value !== 'boolean') {
|
|
304
|
+
const observation = event.value === undefined ? 'missing' : 'malformed';
|
|
305
|
+
return { event: LOCK_STATE_TRACE, observation, announcedBy: 'poll' };
|
|
306
|
+
}
|
|
307
|
+
present(event.value ? 'secured' : 'unsecured');
|
|
308
|
+
return { event: LOCK_STATE_TRACE, observation: 'valid', announcedBy: 'poll' };
|
|
309
|
+
}
|
|
459
310
|
if (event.eventName !== 'lockState' || !announces) {
|
|
460
311
|
return undefined;
|
|
461
312
|
}
|
|
@@ -465,12 +316,12 @@ function attachLock(context) {
|
|
|
465
316
|
return { event: LOCK_STATE_TRACE, observation: 'missing' };
|
|
466
317
|
}
|
|
467
318
|
if (typeof code === 'number' && NON_STATE_LOCK_CODES.has(code)) {
|
|
468
|
-
return
|
|
319
|
+
return { event: LOCK_STATE_TRACE, observation: 'ignored', code };
|
|
469
320
|
}
|
|
470
321
|
const announced = typeof code === 'number' ? ANNOUNCED_LOCK_STATES.get(code) : undefined;
|
|
471
322
|
if (announced === undefined) {
|
|
472
323
|
withdraw('malformed');
|
|
473
|
-
return { event: LOCK_STATE_TRACE, observation: 'malformed' };
|
|
324
|
+
return { event: LOCK_STATE_TRACE, observation: 'malformed', ...(typeof code === 'number' ? { code } : {}) };
|
|
474
325
|
}
|
|
475
326
|
present(announced);
|
|
476
327
|
diagnoseState(false, 'recovered');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/homekit/adapters/lock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/homekit/adapters/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ownService, } from '../adapter.js';
|
|
1
2
|
export const MOTION_ADAPTER_KEY = 'motion.sensor';
|
|
2
3
|
const MOTION_HOLD_MS = 10_000;
|
|
3
4
|
const MOTION_HOLDS = new WeakMap();
|
|
@@ -11,11 +12,11 @@ export const MOTION_EVENT_REQUIREMENTS = [
|
|
|
11
12
|
{ capability: 'motion', eventName: 'motion' },
|
|
12
13
|
{ capability: 'motion', eventName: 'cryingDetected' },
|
|
13
14
|
{ capability: 'motion', eventName: 'soundDetected' },
|
|
15
|
+
{ capability: 'motion', eventName: 'petDetection' },
|
|
14
16
|
{ capability: 'motion', eventName: 'vehicleDetected' },
|
|
15
17
|
{ capability: 'motion', eventName: 'dogDetected' },
|
|
16
18
|
{ capability: 'person_detection', eventName: 'personDetected' },
|
|
17
19
|
{ capability: 'person_detection', eventName: 'strangerDetected' },
|
|
18
|
-
{ capability: 'doorbell', eventName: 'petDetection' },
|
|
19
20
|
];
|
|
20
21
|
/** Whether a device reports at least one detection event this adapter admits as motion. */
|
|
21
22
|
export function hasAdmittedMotionEvents(evidence) {
|
|
@@ -30,8 +31,7 @@ export function hasAdmittedMotionEvents(evidence) {
|
|
|
30
31
|
*/
|
|
31
32
|
export function motionSensorService(context) {
|
|
32
33
|
const { accessory, hap } = context;
|
|
33
|
-
return (accessory
|
|
34
|
-
accessory.addService(hap.Service.MotionSensor, accessory.displayName, MOTION_ADAPTER_KEY));
|
|
34
|
+
return ownService(accessory, hap.Service.MotionSensor, accessory.displayName, MOTION_ADAPTER_KEY);
|
|
35
35
|
}
|
|
36
36
|
/** Complete HomeKit policy for admitted detection pulses. */
|
|
37
37
|
export const MOTION_ADAPTER = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/homekit/adapters/motion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/homekit/adapters/motion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ownService, } from '../adapter.js';
|
|
2
|
+
export const PACKAGE_SENSOR_ADAPTER_KEY = 'doorbell.package';
|
|
3
|
+
const PACKAGE_PRESENCE = new WeakMap();
|
|
4
|
+
const PACKAGE_DELIVERED_REQUIREMENT = { id: 'doorbell.packageDelivered.event', kind: 'event' };
|
|
5
|
+
const PACKAGE_TAKEN_REQUIREMENT = { id: 'doorbell.packageTaken.event', kind: 'event' };
|
|
6
|
+
/** Whether each admitted package event leaves a package waiting. */
|
|
7
|
+
const PACKAGE_EVENTS = {
|
|
8
|
+
packageDelivered: true,
|
|
9
|
+
packageStranded: true,
|
|
10
|
+
packageTaken: false,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Complete HomeKit policy for package events: one Occupancy Sensor that reads detected while a package waits.
|
|
14
|
+
*
|
|
15
|
+
* Admission needs both the delivery and the pickup, because a sensor that can be set but never cleared would
|
|
16
|
+
* report a package forever.
|
|
17
|
+
*/
|
|
18
|
+
export const PACKAGE_SENSOR_ADAPTER = {
|
|
19
|
+
key: PACKAGE_SENSOR_ADAPTER_KEY,
|
|
20
|
+
role: 'supplemental',
|
|
21
|
+
requires: [PACKAGE_DELIVERED_REQUIREMENT, PACKAGE_TAKEN_REQUIREMENT],
|
|
22
|
+
coverage: [PACKAGE_DELIVERED_REQUIREMENT.id, PACKAGE_TAKEN_REQUIREMENT.id, 'doorbell.packageStranded.event'],
|
|
23
|
+
attach: attachPackageSensor,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Attaches package events to one Occupancy Sensor service.
|
|
27
|
+
*
|
|
28
|
+
* The state is derived from events alone, as the device offers no read of it: a delivery or a stranded package
|
|
29
|
+
* sets it, a pickup clears it. It is held for the life of the process, across reattachment, and starts not
|
|
30
|
+
* detected in a new process, since a delivery announced while the plugin was not running cannot be observed.
|
|
31
|
+
*/
|
|
32
|
+
function attachPackageSensor(context) {
|
|
33
|
+
const { accessory, hap } = context;
|
|
34
|
+
const service = ownService(accessory, hap.Service.OccupancySensor, 'Package', PACKAGE_SENSOR_ADAPTER_KEY);
|
|
35
|
+
const presence = PACKAGE_PRESENCE.get(service) ?? { detected: false };
|
|
36
|
+
PACKAGE_PRESENCE.set(service, presence);
|
|
37
|
+
const owner = Symbol('package-sensor-owner');
|
|
38
|
+
presence.owner = owner;
|
|
39
|
+
const update = () => {
|
|
40
|
+
service.updateCharacteristic(hap.Characteristic.OccupancyDetected, presence.detected
|
|
41
|
+
? hap.Characteristic.OccupancyDetected.OCCUPANCY_DETECTED
|
|
42
|
+
: hap.Characteristic.OccupancyDetected.OCCUPANCY_NOT_DETECTED);
|
|
43
|
+
};
|
|
44
|
+
update();
|
|
45
|
+
return {
|
|
46
|
+
event(event) {
|
|
47
|
+
const detected = PACKAGE_EVENTS[event.eventName];
|
|
48
|
+
if (detected === undefined) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
presence.detected = detected;
|
|
52
|
+
update();
|
|
53
|
+
return { event: 'package-presence', observation: 'valid' };
|
|
54
|
+
},
|
|
55
|
+
detach() {
|
|
56
|
+
if (presence.owner === owner) {
|
|
57
|
+
presence.owner = undefined;
|
|
58
|
+
accessory.removeService(service);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=package-sensor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-sensor.js","sourceRoot":"","sources":["../../../src/homekit/adapters/package-sensor.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,GAKX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAM7D,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEhE,MAAM,6BAA6B,GAAG,EAAE,EAAE,EAAE,iCAAiC,EAAE,IAAI,EAAE,OAAO,EAAW,CAAC;AACxG,MAAM,yBAAyB,GAAG,EAAE,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,OAAO,EAAW,CAAC;AAEhG,oEAAoE;AACpE,MAAM,cAAc,GAAoE;IACtF,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,KAAK;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,EAAE,0BAA0B;IAC/B,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,CAAC,6BAA6B,EAAE,yBAAyB,CAAC;IACpE,QAAQ,EAAE,CAAC,6BAA6B,CAAC,EAAE,EAAE,yBAAyB,CAAC,EAAE,EAAE,gCAAgC,CAAC;IAC5G,MAAM,EAAE,mBAAmB;CACM,CAAC;AAEpC;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,OAAiC;IAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACtE,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,OAAO,CAAC,oBAAoB,CAC1B,GAAG,CAAC,cAAc,CAAC,iBAAiB,EACpC,QAAQ,CAAC,QAAQ;YACf,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,kBAAkB;YACzD,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,sBAAsB,CAChE,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,EAAE,CAAC;IAET,OAAO;QACL,KAAK,CAAC,KAAqB;YACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC7B,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC7D,CAAC;QACD,MAAM;YACJ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC7B,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;gBAC3B,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { DOORBELL_ADAPTER, DOORBELL_ADAPTER_KEY } from './doorbell.js';
|
|
|
6
6
|
import { INFORMATION_ADAPTER, INFORMATION_ADAPTER_KEY } from './information.js';
|
|
7
7
|
import { LOCK_ADAPTER, LOCK_ADAPTER_KEY } from './lock.js';
|
|
8
8
|
import { MOTION_ADAPTER, MOTION_ADAPTER_KEY } from './motion.js';
|
|
9
|
+
import { PACKAGE_SENSOR_ADAPTER, PACKAGE_SENSOR_ADAPTER_KEY } from './package-sensor.js';
|
|
9
10
|
import { SECURITY_SYSTEM_ADAPTER, SECURITY_SYSTEM_ADAPTER_KEY } from './security-system.js';
|
|
10
11
|
import { SIREN_ADAPTER, SIREN_ADAPTER_KEY } from './siren.js';
|
|
11
12
|
import { SMART_LIGHT_ADAPTER, SMART_LIGHT_ADAPTER_KEY } from './smart-light.js';
|
|
@@ -19,6 +20,7 @@ export const ADAPTER_REGISTRY = {
|
|
|
19
20
|
[INFORMATION_ADAPTER_KEY]: INFORMATION_ADAPTER,
|
|
20
21
|
[LOCK_ADAPTER_KEY]: LOCK_ADAPTER,
|
|
21
22
|
[MOTION_ADAPTER_KEY]: MOTION_ADAPTER,
|
|
23
|
+
[PACKAGE_SENSOR_ADAPTER_KEY]: PACKAGE_SENSOR_ADAPTER,
|
|
22
24
|
[SECURITY_SYSTEM_ADAPTER_KEY]: SECURITY_SYSTEM_ADAPTER,
|
|
23
25
|
[SIREN_ADAPTER_KEY]: SIREN_ADAPTER,
|
|
24
26
|
[SMART_LIGHT_ADAPTER_KEY]: SMART_LIGHT_ADAPTER,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/homekit/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,CAAC,mBAAmB,CAAC,EAAE,eAAe;IACtC,CAAC,2BAA2B,CAAC,EAAE,uBAAuB;IACtD,CAAC,4BAA4B,CAAC,EAAE,wBAAwB;IACxD,CAAC,mBAAmB,CAAC,EAAE,eAAe;IACtC,CAAC,oBAAoB,CAAC,EAAE,gBAAgB;IACxC,CAAC,uBAAuB,CAAC,EAAE,mBAAmB;IAC9C,CAAC,gBAAgB,CAAC,EAAE,YAAY;IAChC,CAAC,kBAAkB,CAAC,EAAE,cAAc;IACpC,CAAC,2BAA2B,CAAC,EAAE,uBAAuB;IACtD,CAAC,iBAAiB,CAAC,EAAE,aAAa;IAClC,CAAC,uBAAuB,CAAC,EAAE,mBAAmB;CACa,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/homekit/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,CAAC,mBAAmB,CAAC,EAAE,eAAe;IACtC,CAAC,2BAA2B,CAAC,EAAE,uBAAuB;IACtD,CAAC,4BAA4B,CAAC,EAAE,wBAAwB;IACxD,CAAC,mBAAmB,CAAC,EAAE,eAAe;IACtC,CAAC,oBAAoB,CAAC,EAAE,gBAAgB;IACxC,CAAC,uBAAuB,CAAC,EAAE,mBAAmB;IAC9C,CAAC,gBAAgB,CAAC,EAAE,YAAY;IAChC,CAAC,kBAAkB,CAAC,EAAE,cAAc;IACpC,CAAC,0BAA0B,CAAC,EAAE,sBAAsB;IACpD,CAAC,2BAA2B,CAAC,EAAE,uBAAuB;IACtD,CAAC,iBAAiB,CAAC,EAAE,aAAa;IAClC,CAAC,uBAAuB,CAAC,EAAE,mBAAmB;CACa,CAAC"}
|