@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.4 → 5.0.0-beta.40

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 (121) hide show
  1. package/CONTRIBUTING.md +9 -17
  2. package/config.schema.json +60 -0
  3. package/dist/account/ownership.js +16 -16
  4. package/dist/account/ownership.js.map +1 -1
  5. package/dist/account/persistence.js +24 -74
  6. package/dist/account/persistence.js.map +1 -1
  7. package/dist/account/temporary-authentication.js +5 -3
  8. package/dist/account/temporary-authentication.js.map +1 -1
  9. package/dist/configuration.js +50 -13
  10. package/dist/configuration.js.map +1 -1
  11. package/dist/device/member-evidence.js +11 -4
  12. package/dist/device/member-evidence.js.map +1 -1
  13. package/dist/device/member-trust.js +14 -32
  14. package/dist/device/member-trust.js.map +1 -1
  15. package/dist/device/snapshot.js +6 -18
  16. package/dist/device/snapshot.js.map +1 -1
  17. package/dist/diagnostics.js +951 -334
  18. package/dist/diagnostics.js.map +1 -1
  19. package/dist/homekit/adapter.js +4 -1
  20. package/dist/homekit/adapter.js.map +1 -1
  21. package/dist/homekit/adapters/battery.js +3 -3
  22. package/dist/homekit/adapters/battery.js.map +1 -1
  23. package/dist/homekit/adapters/camera-controls.js +15 -37
  24. package/dist/homekit/adapters/camera-controls.js.map +1 -1
  25. package/dist/homekit/adapters/camera-streaming.js +74 -48
  26. package/dist/homekit/adapters/camera-streaming.js.map +1 -1
  27. package/dist/homekit/adapters/contact.js +5 -5
  28. package/dist/homekit/adapters/contact.js.map +1 -1
  29. package/dist/homekit/adapters/doorbell.js +3 -15
  30. package/dist/homekit/adapters/doorbell.js.map +1 -1
  31. package/dist/homekit/adapters/lock.js +72 -221
  32. package/dist/homekit/adapters/lock.js.map +1 -1
  33. package/dist/homekit/adapters/motion.js +3 -3
  34. package/dist/homekit/adapters/motion.js.map +1 -1
  35. package/dist/homekit/adapters/package-sensor.js +63 -0
  36. package/dist/homekit/adapters/package-sensor.js.map +1 -0
  37. package/dist/homekit/adapters/registry.js +2 -0
  38. package/dist/homekit/adapters/registry.js.map +1 -1
  39. package/dist/homekit/adapters/security-system.js +106 -250
  40. package/dist/homekit/adapters/security-system.js.map +1 -1
  41. package/dist/homekit/adapters/siren.js +5 -33
  42. package/dist/homekit/adapters/siren.js.map +1 -1
  43. package/dist/homekit/adapters/smart-light.js +19 -217
  44. package/dist/homekit/adapters/smart-light.js.map +1 -1
  45. package/dist/homekit/coverage-matrix.js +8 -67
  46. package/dist/homekit/coverage-matrix.js.map +1 -1
  47. package/dist/homekit/device-control.js +249 -13
  48. package/dist/homekit/device-control.js.map +1 -1
  49. package/dist/homekit/reconciler.js +25 -9
  50. package/dist/homekit/reconciler.js.map +1 -1
  51. package/dist/media/last-successful-image.js +8 -23
  52. package/dist/media/last-successful-image.js.map +1 -1
  53. package/dist/media/live-preview.js +217 -0
  54. package/dist/media/live-preview.js.map +1 -0
  55. package/dist/media/live-stream.js +689 -160
  56. package/dist/media/live-stream.js.map +1 -1
  57. package/dist/media/recording.js +41 -118
  58. package/dist/media/recording.js.map +1 -1
  59. package/dist/media/snapshot.js +22 -17
  60. package/dist/media/snapshot.js.map +1 -1
  61. package/dist/media/station-live-sessions.js +40 -51
  62. package/dist/media/station-live-sessions.js.map +1 -1
  63. package/dist/platform.js +61 -10
  64. package/dist/platform.js.map +1 -1
  65. package/dist/runtime/channel.js +227 -40
  66. package/dist/runtime/channel.js.map +1 -1
  67. package/dist/runtime/device-settings.js +88 -0
  68. package/dist/runtime/device-settings.js.map +1 -0
  69. package/dist/runtime/owner.js +30 -5
  70. package/dist/runtime/owner.js.map +1 -1
  71. package/dist/runtime/sdk-client.js +21 -17
  72. package/dist/runtime/sdk-client.js.map +1 -1
  73. package/dist/runtime/tracker.js +8 -38
  74. package/dist/runtime/tracker.js.map +1 -1
  75. package/dist/storage.js +1 -1
  76. package/dist/storage.js.map +1 -1
  77. package/dist/ui/dashboard.js +36 -16
  78. package/dist/ui/dashboard.js.map +1 -1
  79. package/dist/ui/runtime-channel-client.js +155 -184
  80. package/dist/ui/runtime-channel-client.js.map +1 -1
  81. package/dist/ui/server.js +81 -38
  82. package/dist/ui/server.js.map +1 -1
  83. package/homebridge-ui/public/app.css +531 -239
  84. package/homebridge-ui/public/assets/icons/auto_fix_high.svg +1 -0
  85. package/homebridge-ui/public/assets/icons/battery_0.svg +1 -0
  86. package/homebridge-ui/public/assets/icons/battery_1.svg +1 -0
  87. package/homebridge-ui/public/assets/icons/battery_2.svg +1 -0
  88. package/homebridge-ui/public/assets/icons/battery_3.svg +1 -0
  89. package/homebridge-ui/public/assets/icons/battery_4.svg +1 -0
  90. package/homebridge-ui/public/assets/icons/battery_5.svg +1 -0
  91. package/homebridge-ui/public/assets/icons/battery_6.svg +1 -0
  92. package/homebridge-ui/public/assets/icons/battery_full.svg +1 -0
  93. package/homebridge-ui/public/assets/icons/contact_support.svg +1 -0
  94. package/homebridge-ui/public/assets/icons/delete.svg +1 -0
  95. package/homebridge-ui/public/assets/icons/download.svg +1 -0
  96. package/homebridge-ui/public/assets/icons/extension_off.svg +1 -0
  97. package/homebridge-ui/public/assets/icons/info.svg +1 -0
  98. package/homebridge-ui/public/assets/icons/key_off.svg +1 -0
  99. package/homebridge-ui/public/assets/icons/keyboard_arrow_left.svg +1 -0
  100. package/homebridge-ui/public/assets/icons/keyboard_arrow_right.svg +1 -0
  101. package/homebridge-ui/public/assets/icons/keyboard_double_arrow_left.svg +1 -0
  102. package/homebridge-ui/public/assets/icons/keyboard_double_arrow_right.svg +1 -0
  103. package/homebridge-ui/public/assets/icons/movie_off.svg +1 -0
  104. package/homebridge-ui/public/assets/icons/play_arrow.svg +1 -0
  105. package/homebridge-ui/public/assets/icons/refresh.svg +1 -0
  106. package/homebridge-ui/public/assets/icons/satellite_alt.svg +1 -0
  107. package/homebridge-ui/public/assets/icons/search_off.svg +1 -0
  108. package/homebridge-ui/public/assets/icons/sensors_off.svg +1 -0
  109. package/homebridge-ui/public/assets/icons/settings_photo_camera.svg +1 -0
  110. package/homebridge-ui/public/assets/icons/solar_power.svg +1 -0
  111. package/homebridge-ui/public/assets/icons/stop.svg +1 -0
  112. package/homebridge-ui/public/assets/icons/videocam_off.svg +1 -0
  113. package/homebridge-ui/public/i18n/en.json +160 -82
  114. package/homebridge-ui/public/i18n/fr.json +161 -83
  115. package/homebridge-ui/public/index.html +225 -96
  116. package/homebridge-ui/public/js/app.js +814 -435
  117. package/homebridge-ui/public/js/dashboard.js +148 -31
  118. package/i18n/runtime/en.json +10 -3
  119. package/package.json +10 -11
  120. package/homebridge-ui/public/js/legacy-settings.js +0 -37
  121. 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 = doorbellPressService(context);
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 !== 'doorbellPress') {
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":"AAMA,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;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4D;IAC/F,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO,CACL,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC;QACpE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAAC,CACxF,CAAC;AACJ,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,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,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,eAAe,EAAE,CAAC;gBACxC,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
+ {"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 { CapabilityNotSupportedError, LockPushEvent } from '@mega-yfue/eufy-sdk';
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 announcement this adapter presents the lock's physical state from.
8
+ * The lock's own reported state, which presents the bolt before any announcement has.
5
9
  *
6
- * The lock holds no state param worth reading — the SDK's `locked` member sits on a placeholder id with
7
- * `guessed` provenance and is normally not even installed — so this event is the only evidence of what the
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 LOCK_STATE_EVENT_ROW = 'lock.lockState.event';
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
- /** Serializes physical lock actions while retaining only the newest bounded target projection. */
88
- class LockTargetWrites {
89
- issue;
90
- communicationFailure;
91
- operationFailure;
92
- isNonRetryable;
93
- diagnose;
94
- active;
95
- queued;
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: { model: 'T8531' },
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 announcement is still
292
- * worth locking from HomeKit, so the two momentary actions admit the accessory and the announcement only
293
- * decides whether a state is presented beside them.
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.getServiceById(hap.Service.LockMechanism, LOCK_ADAPTER_KEY) ??
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 = 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 (!announces) {
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 LockTargetWrites((value) => (value === hap.Characteristic.LockTargetState.SECURED ? state.actions.lock() : state.actions.unlock()), communicationFailure, (error) => new hap.HapStatusError(error instanceof CapabilityNotSupportedError
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?.observed();
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 records no trace and leaves the state
455
- * alone. Anything else in the range is unread: the state is withdrawn rather than kept, because the
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 undefined;
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.getServiceById(hap.Service.MotionSensor, MOTION_ADAPTER_KEY) ??
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":"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"}
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/homekit/adapters/motion.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,GAKX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,MAAM,cAAc,GAAG,MAAM,CAAC;AAM9B,MAAM,YAAY,GAAG,IAAI,OAAO,EAAsB,CAAC;AACvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;IAC7C,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE;IACrD,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE;IACpD,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE;IACnD,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE;IACtD,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;IAClD,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAC/D,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE;CAC2B,CAAC;AAE/F,2FAA2F;AAC3F,MAAM,UAAU,uBAAuB,CAAC,QAA8C;IACpF,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAClE,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,SAAS,QAAQ,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA4D;IAC9F,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AACpG,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,EAAE,EAAE,GAAG,UAAU,IAAI,SAAS,QAAQ;QACtC,IAAI,EAAE,OAAgB;KACvB,CAAC,CAAC;IACH,QAAQ,EAAE,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,IAAI,SAAS,QAAQ,CAAC;IAC1G,MAAM,EAAE,YAAY;CACa,CAAC;AAEpC,4FAA4F;AAC5F,SAAS,YAAY,CAAC,OAAiC;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7C,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,yBAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,SAAS,QAAQ,CAAC,CACzD,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CACpC,CAAC;IACF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,QAAQ,EAAE,CAAC;IAEX,OAAO;QACL,KAAK,CAAC,KAAqB;YACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;YAC5C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC7D,CAAC;QACD,MAAM;YACJ,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBACD,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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"}