@camstack/addon-export-hap 1.2.91 → 1.2.93

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.
@@ -12669,6 +12669,9 @@ var QueryFilterSchema = object({
12669
12669
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12670
12670
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12671
12671
  whereNot: record(string(), unknown()).optional(),
12672
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12673
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12674
+ whereNotIn: record(string(), array(unknown())).optional(),
12672
12675
  orderBy: object({
12673
12676
  field: string(),
12674
12677
  direction: _enum(["asc", "desc"])
@@ -12689,7 +12692,8 @@ var MutationFilterSchema = object({
12689
12692
  where: record(string(), unknown()).optional(),
12690
12693
  whereIn: record(string(), array(unknown())).optional(),
12691
12694
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12692
- whereNot: record(string(), unknown()).optional()
12695
+ whereNot: record(string(), unknown()).optional(),
12696
+ whereNotIn: record(string(), array(unknown())).optional()
12693
12697
  });
12694
12698
  /**
12695
12699
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19260,10 +19264,12 @@ var TrackSourceSchema = _enum([
19260
19264
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19261
19265
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19262
19266
  *
19263
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19264
- * the store's filter language has only positive equality and `whereIn` — no
19265
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
19266
- * would make the entire pre-column history immortal in one deploy.
19267
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19268
+ * every row is selectable by a positive predicate. (The filter language has
19269
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19270
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19271
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19272
+ * column was designed, and a NOT NULL column is still the better shape.)
19267
19273
  */
19268
19274
  var RetrainStatusSchema = _enum([
19269
19275
  "none",
@@ -19999,7 +20005,9 @@ var RecentTracksQueryInput = object({
19999
20005
  * whose class list is unreadable are kept, and the client's rule stays the
20000
20006
  * exact one.
20001
20007
  */
20002
- classes: array(string()).optional()
20008
+ classes: array(string()).optional(),
20009
+ /** See {@link ExcludeSourcesDoc}. */
20010
+ excludeSources: array(TrackSourceSchema).optional()
20003
20011
  });
20004
20012
  /**
20005
20013
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20427,7 +20435,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20427
20435
  * selected is an operator who has not narrowed anything, and an empty
20428
20436
  * timeline would read as a camera that saw nothing.
20429
20437
  */
20430
- classes: array(string()).optional()
20438
+ classes: array(string()).optional(),
20439
+ /** See {@link ExcludeSourcesDoc}. */
20440
+ excludeSources: array(TrackSourceSchema).optional()
20431
20441
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20432
20442
  kind: "mutation",
20433
20443
  auth: "admin"
@@ -20932,8 +20942,25 @@ var occupancyRecheckFramesField = {
20932
20942
  * (analyzer attaches detected `regions[]`; onboard does not — the
20933
20943
  * camera typically only reports a binary signal plus an optional
20934
20944
  * channel/AI class which lives in dedicated event channels).
20935
- */
20936
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20945
+ *
20946
+ * - `onboard` — the camera's firmware said something moved.
20947
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20948
+ * - `device-activity` — the DEVICE said it is doing its job: the
20949
+ * `recording-signal` LEVEL the same device raises for the recorder
20950
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20951
+ * republished as a motion source. It attaches **nothing** — no regions, no
20952
+ * class: the only fact it carries is that the device is active, and a robot
20953
+ * vacuum that is itself the moving object has no region worth sending. It is
20954
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20955
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20956
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20957
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20958
+ */
20959
+ var MotionSourceEnum = _enum([
20960
+ "onboard",
20961
+ "analyzer",
20962
+ "device-activity"
20963
+ ]);
20937
20964
  /**
20938
20965
  * List of motion sources active on a camera. Empty array is valid:
20939
20966
  * "no source" — happens for battery cams without firmware motion when
@@ -12657,6 +12657,9 @@ var QueryFilterSchema = object({
12657
12657
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12658
12658
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12659
12659
  whereNot: record(string(), unknown()).optional(),
12660
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12661
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12662
+ whereNotIn: record(string(), array(unknown())).optional(),
12660
12663
  orderBy: object({
12661
12664
  field: string(),
12662
12665
  direction: _enum(["asc", "desc"])
@@ -12677,7 +12680,8 @@ var MutationFilterSchema = object({
12677
12680
  where: record(string(), unknown()).optional(),
12678
12681
  whereIn: record(string(), array(unknown())).optional(),
12679
12682
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12680
- whereNot: record(string(), unknown()).optional()
12683
+ whereNot: record(string(), unknown()).optional(),
12684
+ whereNotIn: record(string(), array(unknown())).optional()
12681
12685
  });
12682
12686
  /**
12683
12687
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19248,10 +19252,12 @@ var TrackSourceSchema = _enum([
19248
19252
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19249
19253
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19250
19254
  *
19251
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19252
- * the store's filter language has only positive equality and `whereIn` — no
19253
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
19254
- * would make the entire pre-column history immortal in one deploy.
19255
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19256
+ * every row is selectable by a positive predicate. (The filter language has
19257
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19258
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19259
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19260
+ * column was designed, and a NOT NULL column is still the better shape.)
19255
19261
  */
19256
19262
  var RetrainStatusSchema = _enum([
19257
19263
  "none",
@@ -19987,7 +19993,9 @@ var RecentTracksQueryInput = object({
19987
19993
  * whose class list is unreadable are kept, and the client's rule stays the
19988
19994
  * exact one.
19989
19995
  */
19990
- classes: array(string()).optional()
19996
+ classes: array(string()).optional(),
19997
+ /** See {@link ExcludeSourcesDoc}. */
19998
+ excludeSources: array(TrackSourceSchema).optional()
19991
19999
  });
19992
20000
  /**
19993
20001
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20415,7 +20423,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20415
20423
  * selected is an operator who has not narrowed anything, and an empty
20416
20424
  * timeline would read as a camera that saw nothing.
20417
20425
  */
20418
- classes: array(string()).optional()
20426
+ classes: array(string()).optional(),
20427
+ /** See {@link ExcludeSourcesDoc}. */
20428
+ excludeSources: array(TrackSourceSchema).optional()
20419
20429
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20420
20430
  kind: "mutation",
20421
20431
  auth: "admin"
@@ -20920,8 +20930,25 @@ var occupancyRecheckFramesField = {
20920
20930
  * (analyzer attaches detected `regions[]`; onboard does not — the
20921
20931
  * camera typically only reports a binary signal plus an optional
20922
20932
  * channel/AI class which lives in dedicated event channels).
20923
- */
20924
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20933
+ *
20934
+ * - `onboard` — the camera's firmware said something moved.
20935
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20936
+ * - `device-activity` — the DEVICE said it is doing its job: the
20937
+ * `recording-signal` LEVEL the same device raises for the recorder
20938
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20939
+ * republished as a motion source. It attaches **nothing** — no regions, no
20940
+ * class: the only fact it carries is that the device is active, and a robot
20941
+ * vacuum that is itself the moving object has no region worth sending. It is
20942
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20943
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20944
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20945
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20946
+ */
20947
+ var MotionSourceEnum = _enum([
20948
+ "onboard",
20949
+ "analyzer",
20950
+ "device-activity"
20951
+ ]);
20925
20952
  /**
20926
20953
  * List of motion sources active on a camera. Empty array is valid:
20927
20954
  * "no source" — happens for battery cams without firmware motion when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-hap",
3
- "version": "1.2.91",
3
+ "version": "1.2.93",
4
4
  "description": "HomeKit (HAP) exporter for CamStack devices. Publishes each exposed device as its own HomeKit accessory: cameras and doorbells with SRTP streaming, HomeKit Secure Video, motion, two-way audio, PTZ and battery; switches, lights, locks and sensors through a capability→service table.",
5
5
  "keywords": [
6
6
  "camstack",