@camstack/addon-provider-onvif 1.2.80 → 1.2.82

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
@@ -11948,6 +11948,9 @@ var QueryFilterSchema = object({
11948
11948
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11949
11949
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
11950
11950
  whereNot: record(string(), unknown()).optional(),
11951
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
11952
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
11953
+ whereNotIn: record(string(), array(unknown())).optional(),
11951
11954
  orderBy: object({
11952
11955
  field: string(),
11953
11956
  direction: _enum(["asc", "desc"])
@@ -11968,7 +11971,8 @@ var MutationFilterSchema = object({
11968
11971
  where: record(string(), unknown()).optional(),
11969
11972
  whereIn: record(string(), array(unknown())).optional(),
11970
11973
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11971
- whereNot: record(string(), unknown()).optional()
11974
+ whereNot: record(string(), unknown()).optional(),
11975
+ whereNotIn: record(string(), array(unknown())).optional()
11972
11976
  });
11973
11977
  /**
11974
11978
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18539,10 +18543,12 @@ var TrackSourceSchema = _enum([
18539
18543
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18540
18544
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18541
18545
  *
18542
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18543
- * the store's filter language has only positive equality and `whereIn` no
18544
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
18545
- * would make the entire pre-column history immortal in one deploy.
18546
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18547
+ * every row is selectable by a positive predicate. (The filter language has
18548
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18549
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18550
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18551
+ * column was designed, and a NOT NULL column is still the better shape.)
18546
18552
  */
18547
18553
  var RetrainStatusSchema = _enum([
18548
18554
  "none",
@@ -19278,7 +19284,9 @@ var RecentTracksQueryInput = object({
19278
19284
  * whose class list is unreadable are kept, and the client's rule stays the
19279
19285
  * exact one.
19280
19286
  */
19281
- classes: array(string()).optional()
19287
+ classes: array(string()).optional(),
19288
+ /** See {@link ExcludeSourcesDoc}. */
19289
+ excludeSources: array(TrackSourceSchema).optional()
19282
19290
  });
19283
19291
  /**
19284
19292
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19706,7 +19714,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19706
19714
  * selected is an operator who has not narrowed anything, and an empty
19707
19715
  * timeline would read as a camera that saw nothing.
19708
19716
  */
19709
- classes: array(string()).optional()
19717
+ classes: array(string()).optional(),
19718
+ /** See {@link ExcludeSourcesDoc}. */
19719
+ excludeSources: array(TrackSourceSchema).optional()
19710
19720
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19711
19721
  kind: "mutation",
19712
19722
  auth: "admin"
@@ -27271,8 +27281,27 @@ var PrivacyMaskRegionSchema = object({
27271
27281
  });
27272
27282
  object({
27273
27283
  enabled: boolean(),
27274
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
27275
- regions: array(PrivacyMaskRegionSchema),
27284
+ /**
27285
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
27286
+ *
27287
+ * `null` means "no answer" — the provider has never reached this camera
27288
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
27289
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
27290
+ * has no zones": those two look identical to an operator right up to the
27291
+ * moment one of them is acted on, and acting on them differs completely.
27292
+ * The switch group turned an unanswered read into *"nothing is set up for
27293
+ * it to act on"* — an instruction to go and draw a zone that already
27294
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
27295
+ * from deleting the mask it could not read.
27296
+ *
27297
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
27298
+ * has no zones. The distinction is the same one {@link
27299
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
27300
+ * microphone, on the very same payload — both planes come from ONE refresh,
27301
+ * so it was never coherent for one of them to be able to say "unknown"
27302
+ * while the other could not.
27303
+ */
27304
+ regions: array(PrivacyMaskRegionSchema).nullable(),
27276
27305
  /**
27277
27306
  * Is the camera capturing sound right now? Read from the camera, never from
27278
27307
  * a server-side mirror.
package/dist/addon.mjs CHANGED
@@ -11949,6 +11949,9 @@ var QueryFilterSchema = object({
11949
11949
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11950
11950
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
11951
11951
  whereNot: record(string(), unknown()).optional(),
11952
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
11953
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
11954
+ whereNotIn: record(string(), array(unknown())).optional(),
11952
11955
  orderBy: object({
11953
11956
  field: string(),
11954
11957
  direction: _enum(["asc", "desc"])
@@ -11969,7 +11972,8 @@ var MutationFilterSchema = object({
11969
11972
  where: record(string(), unknown()).optional(),
11970
11973
  whereIn: record(string(), array(unknown())).optional(),
11971
11974
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11972
- whereNot: record(string(), unknown()).optional()
11975
+ whereNot: record(string(), unknown()).optional(),
11976
+ whereNotIn: record(string(), array(unknown())).optional()
11973
11977
  });
11974
11978
  /**
11975
11979
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18540,10 +18544,12 @@ var TrackSourceSchema = _enum([
18540
18544
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18541
18545
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18542
18546
  *
18543
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18544
- * the store's filter language has only positive equality and `whereIn` no
18545
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
18546
- * would make the entire pre-column history immortal in one deploy.
18547
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18548
+ * every row is selectable by a positive predicate. (The filter language has
18549
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18550
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18551
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18552
+ * column was designed, and a NOT NULL column is still the better shape.)
18547
18553
  */
18548
18554
  var RetrainStatusSchema = _enum([
18549
18555
  "none",
@@ -19279,7 +19285,9 @@ var RecentTracksQueryInput = object({
19279
19285
  * whose class list is unreadable are kept, and the client's rule stays the
19280
19286
  * exact one.
19281
19287
  */
19282
- classes: array(string()).optional()
19288
+ classes: array(string()).optional(),
19289
+ /** See {@link ExcludeSourcesDoc}. */
19290
+ excludeSources: array(TrackSourceSchema).optional()
19283
19291
  });
19284
19292
  /**
19285
19293
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19707,7 +19715,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19707
19715
  * selected is an operator who has not narrowed anything, and an empty
19708
19716
  * timeline would read as a camera that saw nothing.
19709
19717
  */
19710
- classes: array(string()).optional()
19718
+ classes: array(string()).optional(),
19719
+ /** See {@link ExcludeSourcesDoc}. */
19720
+ excludeSources: array(TrackSourceSchema).optional()
19711
19721
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19712
19722
  kind: "mutation",
19713
19723
  auth: "admin"
@@ -27272,8 +27282,27 @@ var PrivacyMaskRegionSchema = object({
27272
27282
  });
27273
27283
  object({
27274
27284
  enabled: boolean(),
27275
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
27276
- regions: array(PrivacyMaskRegionSchema),
27285
+ /**
27286
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
27287
+ *
27288
+ * `null` means "no answer" — the provider has never reached this camera
27289
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
27290
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
27291
+ * has no zones": those two look identical to an operator right up to the
27292
+ * moment one of them is acted on, and acting on them differs completely.
27293
+ * The switch group turned an unanswered read into *"nothing is set up for
27294
+ * it to act on"* — an instruction to go and draw a zone that already
27295
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
27296
+ * from deleting the mask it could not read.
27297
+ *
27298
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
27299
+ * has no zones. The distinction is the same one {@link
27300
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
27301
+ * microphone, on the very same payload — both planes come from ONE refresh,
27302
+ * so it was never coherent for one of them to be able to say "unknown"
27303
+ * while the other could not.
27304
+ */
27305
+ regions: array(PrivacyMaskRegionSchema).nullable(),
27277
27306
  /**
27278
27307
  * Is the camera capturing sound right now? Read from the camera, never from
27279
27308
  * a server-side mirror.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.80",
3
+ "version": "1.2.82",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",