@camstack/addon-provider-reolink 1.2.104 → 1.2.106

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -12655,6 +12655,9 @@ var QueryFilterSchema = object({
12655
12655
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12656
12656
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12657
12657
  whereNot: record(string(), unknown()).optional(),
12658
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12659
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12660
+ whereNotIn: record(string(), array(unknown())).optional(),
12658
12661
  orderBy: object({
12659
12662
  field: string(),
12660
12663
  direction: _enum(["asc", "desc"])
@@ -12675,7 +12678,8 @@ var MutationFilterSchema = object({
12675
12678
  where: record(string(), unknown()).optional(),
12676
12679
  whereIn: record(string(), array(unknown())).optional(),
12677
12680
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12678
- whereNot: record(string(), unknown()).optional()
12681
+ whereNot: record(string(), unknown()).optional(),
12682
+ whereNotIn: record(string(), array(unknown())).optional()
12679
12683
  });
12680
12684
  /**
12681
12685
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19471,10 +19475,12 @@ var TrackSourceSchema = _enum([
19471
19475
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19472
19476
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19473
19477
  *
19474
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19475
- * the store's filter language has only positive equality and `whereIn` no
19476
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
19477
- * would make the entire pre-column history immortal in one deploy.
19478
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19479
+ * every row is selectable by a positive predicate. (The filter language has
19480
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19481
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19482
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19483
+ * column was designed, and a NOT NULL column is still the better shape.)
19478
19484
  */
19479
19485
  var RetrainStatusSchema = _enum([
19480
19486
  "none",
@@ -20210,7 +20216,9 @@ var RecentTracksQueryInput = object({
20210
20216
  * whose class list is unreadable are kept, and the client's rule stays the
20211
20217
  * exact one.
20212
20218
  */
20213
- classes: array(string()).optional()
20219
+ classes: array(string()).optional(),
20220
+ /** See {@link ExcludeSourcesDoc}. */
20221
+ excludeSources: array(TrackSourceSchema).optional()
20214
20222
  });
20215
20223
  /**
20216
20224
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20638,7 +20646,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20638
20646
  * selected is an operator who has not narrowed anything, and an empty
20639
20647
  * timeline would read as a camera that saw nothing.
20640
20648
  */
20641
- classes: array(string()).optional()
20649
+ classes: array(string()).optional(),
20650
+ /** See {@link ExcludeSourcesDoc}. */
20651
+ excludeSources: array(TrackSourceSchema).optional()
20642
20652
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20643
20653
  kind: "mutation",
20644
20654
  auth: "admin"
@@ -29952,8 +29962,27 @@ var PrivacyMaskRegionSchema = object({
29952
29962
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29953
29963
  var PrivacyMaskStatusSchema = object({
29954
29964
  enabled: boolean(),
29955
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29956
- regions: array(PrivacyMaskRegionSchema),
29965
+ /**
29966
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29967
+ *
29968
+ * `null` means "no answer" — the provider has never reached this camera
29969
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29970
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29971
+ * has no zones": those two look identical to an operator right up to the
29972
+ * moment one of them is acted on, and acting on them differs completely.
29973
+ * The switch group turned an unanswered read into *"nothing is set up for
29974
+ * it to act on"* — an instruction to go and draw a zone that already
29975
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29976
+ * from deleting the mask it could not read.
29977
+ *
29978
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29979
+ * has no zones. The distinction is the same one {@link
29980
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29981
+ * microphone, on the very same payload — both planes come from ONE refresh,
29982
+ * so it was never coherent for one of them to be able to say "unknown"
29983
+ * while the other could not.
29984
+ */
29985
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29957
29986
  /**
29958
29987
  * Is the camera capturing sound right now? Read from the camera, never from
29959
29988
  * a server-side mirror.
@@ -150500,7 +150529,7 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
150500
150529
  staleRead: "serve-and-revalidate",
150501
150530
  empty: () => ({
150502
150531
  enabled: false,
150503
- regions: [],
150532
+ regions: null,
150504
150533
  audioEnabled: null,
150505
150534
  lastFetchedAt: 0
150506
150535
  })
package/dist/addon.mjs CHANGED
@@ -12650,6 +12650,9 @@ var QueryFilterSchema = object({
12650
12650
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12651
12651
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12652
12652
  whereNot: record(string(), unknown()).optional(),
12653
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12654
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12655
+ whereNotIn: record(string(), array(unknown())).optional(),
12653
12656
  orderBy: object({
12654
12657
  field: string(),
12655
12658
  direction: _enum(["asc", "desc"])
@@ -12670,7 +12673,8 @@ var MutationFilterSchema = object({
12670
12673
  where: record(string(), unknown()).optional(),
12671
12674
  whereIn: record(string(), array(unknown())).optional(),
12672
12675
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12673
- whereNot: record(string(), unknown()).optional()
12676
+ whereNot: record(string(), unknown()).optional(),
12677
+ whereNotIn: record(string(), array(unknown())).optional()
12674
12678
  });
12675
12679
  /**
12676
12680
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19466,10 +19470,12 @@ var TrackSourceSchema = _enum([
19466
19470
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19467
19471
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19468
19472
  *
19469
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19470
- * the store's filter language has only positive equality and `whereIn` no
19471
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
19472
- * would make the entire pre-column history immortal in one deploy.
19473
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19474
+ * every row is selectable by a positive predicate. (The filter language has
19475
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19476
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19477
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19478
+ * column was designed, and a NOT NULL column is still the better shape.)
19473
19479
  */
19474
19480
  var RetrainStatusSchema = _enum([
19475
19481
  "none",
@@ -20205,7 +20211,9 @@ var RecentTracksQueryInput = object({
20205
20211
  * whose class list is unreadable are kept, and the client's rule stays the
20206
20212
  * exact one.
20207
20213
  */
20208
- classes: array(string()).optional()
20214
+ classes: array(string()).optional(),
20215
+ /** See {@link ExcludeSourcesDoc}. */
20216
+ excludeSources: array(TrackSourceSchema).optional()
20209
20217
  });
20210
20218
  /**
20211
20219
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20633,7 +20641,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20633
20641
  * selected is an operator who has not narrowed anything, and an empty
20634
20642
  * timeline would read as a camera that saw nothing.
20635
20643
  */
20636
- classes: array(string()).optional()
20644
+ classes: array(string()).optional(),
20645
+ /** See {@link ExcludeSourcesDoc}. */
20646
+ excludeSources: array(TrackSourceSchema).optional()
20637
20647
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20638
20648
  kind: "mutation",
20639
20649
  auth: "admin"
@@ -29947,8 +29957,27 @@ var PrivacyMaskRegionSchema = object({
29947
29957
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29948
29958
  var PrivacyMaskStatusSchema = object({
29949
29959
  enabled: boolean(),
29950
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29951
- regions: array(PrivacyMaskRegionSchema),
29960
+ /**
29961
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29962
+ *
29963
+ * `null` means "no answer" — the provider has never reached this camera
29964
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29965
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29966
+ * has no zones": those two look identical to an operator right up to the
29967
+ * moment one of them is acted on, and acting on them differs completely.
29968
+ * The switch group turned an unanswered read into *"nothing is set up for
29969
+ * it to act on"* — an instruction to go and draw a zone that already
29970
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29971
+ * from deleting the mask it could not read.
29972
+ *
29973
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29974
+ * has no zones. The distinction is the same one {@link
29975
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29976
+ * microphone, on the very same payload — both planes come from ONE refresh,
29977
+ * so it was never coherent for one of them to be able to say "unknown"
29978
+ * while the other could not.
29979
+ */
29980
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29952
29981
  /**
29953
29982
  * Is the camera capturing sound right now? Read from the camera, never from
29954
29983
  * a server-side mirror.
@@ -150495,7 +150524,7 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
150495
150524
  staleRead: "serve-and-revalidate",
150496
150525
  empty: () => ({
150497
150526
  enabled: false,
150498
- regions: [],
150527
+ regions: null,
150499
150528
  audioEnabled: null,
150500
150529
  lastFetchedAt: 0
150501
150530
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.104",
3
+ "version": "1.2.106",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",