@camstack/addon-provider-amcrest 0.2.83 → 0.2.85

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
@@ -12046,6 +12046,9 @@ var QueryFilterSchema = object({
12046
12046
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12047
12047
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12048
12048
  whereNot: record(string(), unknown()).optional(),
12049
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12050
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12051
+ whereNotIn: record(string(), array(unknown())).optional(),
12049
12052
  orderBy: object({
12050
12053
  field: string(),
12051
12054
  direction: _enum(["asc", "desc"])
@@ -12066,7 +12069,8 @@ var MutationFilterSchema = object({
12066
12069
  where: record(string(), unknown()).optional(),
12067
12070
  whereIn: record(string(), array(unknown())).optional(),
12068
12071
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12069
- whereNot: record(string(), unknown()).optional()
12072
+ whereNot: record(string(), unknown()).optional(),
12073
+ whereNotIn: record(string(), array(unknown())).optional()
12070
12074
  });
12071
12075
  /**
12072
12076
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18822,10 +18826,12 @@ var TrackSourceSchema = _enum([
18822
18826
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18823
18827
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18824
18828
  *
18825
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18826
- * the store's filter language has only positive equality and `whereIn` — no
18827
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18828
- * would make the entire pre-column history immortal in one deploy.
18829
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18830
+ * every row is selectable by a positive predicate. (The filter language has
18831
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18832
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18833
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18834
+ * column was designed, and a NOT NULL column is still the better shape.)
18829
18835
  */
18830
18836
  var RetrainStatusSchema = _enum([
18831
18837
  "none",
@@ -19561,7 +19567,9 @@ var RecentTracksQueryInput = object({
19561
19567
  * whose class list is unreadable are kept, and the client's rule stays the
19562
19568
  * exact one.
19563
19569
  */
19564
- classes: array(string()).optional()
19570
+ classes: array(string()).optional(),
19571
+ /** See {@link ExcludeSourcesDoc}. */
19572
+ excludeSources: array(TrackSourceSchema).optional()
19565
19573
  });
19566
19574
  /**
19567
19575
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19989,7 +19997,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19989
19997
  * selected is an operator who has not narrowed anything, and an empty
19990
19998
  * timeline would read as a camera that saw nothing.
19991
19999
  */
19992
- classes: array(string()).optional()
20000
+ classes: array(string()).optional(),
20001
+ /** See {@link ExcludeSourcesDoc}. */
20002
+ excludeSources: array(TrackSourceSchema).optional()
19993
20003
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19994
20004
  kind: "mutation",
19995
20005
  auth: "admin"
@@ -29329,8 +29339,27 @@ var PrivacyMaskRegionSchema = object({
29329
29339
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29330
29340
  var PrivacyMaskStatusSchema = object({
29331
29341
  enabled: boolean(),
29332
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29333
- regions: array(PrivacyMaskRegionSchema),
29342
+ /**
29343
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29344
+ *
29345
+ * `null` means "no answer" — the provider has never reached this camera
29346
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29347
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29348
+ * has no zones": those two look identical to an operator right up to the
29349
+ * moment one of them is acted on, and acting on them differs completely.
29350
+ * The switch group turned an unanswered read into *"nothing is set up for
29351
+ * it to act on"* — an instruction to go and draw a zone that already
29352
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29353
+ * from deleting the mask it could not read.
29354
+ *
29355
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29356
+ * has no zones. The distinction is the same one {@link
29357
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29358
+ * microphone, on the very same payload — both planes come from ONE refresh,
29359
+ * so it was never coherent for one of them to be able to say "unknown"
29360
+ * while the other could not.
29361
+ */
29362
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29334
29363
  /**
29335
29364
  * Is the camera capturing sound right now? Read from the camera, never from
29336
29365
  * a server-side mirror.
@@ -45275,7 +45304,7 @@ var AmcrestCamera = class AmcrestCamera extends BaseDevice {
45275
45304
  logger: this.ctx.logger,
45276
45305
  empty: () => ({
45277
45306
  enabled: false,
45278
- regions: [],
45307
+ regions: null,
45279
45308
  audioEnabled: null,
45280
45309
  lastFetchedAt: 0
45281
45310
  })
package/dist/addon.mjs CHANGED
@@ -12047,6 +12047,9 @@ var QueryFilterSchema = object({
12047
12047
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12048
12048
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12049
12049
  whereNot: record(string(), unknown()).optional(),
12050
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12051
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12052
+ whereNotIn: record(string(), array(unknown())).optional(),
12050
12053
  orderBy: object({
12051
12054
  field: string(),
12052
12055
  direction: _enum(["asc", "desc"])
@@ -12067,7 +12070,8 @@ var MutationFilterSchema = object({
12067
12070
  where: record(string(), unknown()).optional(),
12068
12071
  whereIn: record(string(), array(unknown())).optional(),
12069
12072
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12070
- whereNot: record(string(), unknown()).optional()
12073
+ whereNot: record(string(), unknown()).optional(),
12074
+ whereNotIn: record(string(), array(unknown())).optional()
12071
12075
  });
12072
12076
  /**
12073
12077
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18823,10 +18827,12 @@ var TrackSourceSchema = _enum([
18823
18827
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18824
18828
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18825
18829
  *
18826
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18827
- * the store's filter language has only positive equality and `whereIn` — no
18828
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18829
- * would make the entire pre-column history immortal in one deploy.
18830
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18831
+ * every row is selectable by a positive predicate. (The filter language has
18832
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18833
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18834
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18835
+ * column was designed, and a NOT NULL column is still the better shape.)
18830
18836
  */
18831
18837
  var RetrainStatusSchema = _enum([
18832
18838
  "none",
@@ -19562,7 +19568,9 @@ var RecentTracksQueryInput = object({
19562
19568
  * whose class list is unreadable are kept, and the client's rule stays the
19563
19569
  * exact one.
19564
19570
  */
19565
- classes: array(string()).optional()
19571
+ classes: array(string()).optional(),
19572
+ /** See {@link ExcludeSourcesDoc}. */
19573
+ excludeSources: array(TrackSourceSchema).optional()
19566
19574
  });
19567
19575
  /**
19568
19576
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19990,7 +19998,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19990
19998
  * selected is an operator who has not narrowed anything, and an empty
19991
19999
  * timeline would read as a camera that saw nothing.
19992
20000
  */
19993
- classes: array(string()).optional()
20001
+ classes: array(string()).optional(),
20002
+ /** See {@link ExcludeSourcesDoc}. */
20003
+ excludeSources: array(TrackSourceSchema).optional()
19994
20004
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19995
20005
  kind: "mutation",
19996
20006
  auth: "admin"
@@ -29330,8 +29340,27 @@ var PrivacyMaskRegionSchema = object({
29330
29340
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29331
29341
  var PrivacyMaskStatusSchema = object({
29332
29342
  enabled: boolean(),
29333
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29334
- regions: array(PrivacyMaskRegionSchema),
29343
+ /**
29344
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29345
+ *
29346
+ * `null` means "no answer" — the provider has never reached this camera
29347
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29348
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29349
+ * has no zones": those two look identical to an operator right up to the
29350
+ * moment one of them is acted on, and acting on them differs completely.
29351
+ * The switch group turned an unanswered read into *"nothing is set up for
29352
+ * it to act on"* — an instruction to go and draw a zone that already
29353
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29354
+ * from deleting the mask it could not read.
29355
+ *
29356
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29357
+ * has no zones. The distinction is the same one {@link
29358
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29359
+ * microphone, on the very same payload — both planes come from ONE refresh,
29360
+ * so it was never coherent for one of them to be able to say "unknown"
29361
+ * while the other could not.
29362
+ */
29363
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29335
29364
  /**
29336
29365
  * Is the camera capturing sound right now? Read from the camera, never from
29337
29366
  * a server-side mirror.
@@ -45276,7 +45305,7 @@ var AmcrestCamera = class AmcrestCamera extends BaseDevice {
45276
45305
  logger: this.ctx.logger,
45277
45306
  empty: () => ({
45278
45307
  enabled: false,
45279
- regions: [],
45308
+ regions: null,
45280
45309
  audioEnabled: null,
45281
45310
  lastFetchedAt: 0
45282
45311
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-amcrest",
3
- "version": "0.2.83",
3
+ "version": "0.2.85",
4
4
  "description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
5
5
  "keywords": [
6
6
  "camstack",