@camstack/addon-provider-rademacher 0.2.80 → 0.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
@@ -13036,6 +13036,9 @@ var QueryFilterSchema = object({
13036
13036
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13037
13037
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13038
13038
  whereNot: record(string(), unknown()).optional(),
13039
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13040
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13041
+ whereNotIn: record(string(), array(unknown())).optional(),
13039
13042
  orderBy: object({
13040
13043
  field: string(),
13041
13044
  direction: _enum(["asc", "desc"])
@@ -13056,7 +13059,8 @@ var MutationFilterSchema = object({
13056
13059
  where: record(string(), unknown()).optional(),
13057
13060
  whereIn: record(string(), array(unknown())).optional(),
13058
13061
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13059
- whereNot: record(string(), unknown()).optional()
13062
+ whereNot: record(string(), unknown()).optional(),
13063
+ whereNotIn: record(string(), array(unknown())).optional()
13060
13064
  });
13061
13065
  /**
13062
13066
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19812,10 +19816,12 @@ var TrackSourceSchema = _enum([
19812
19816
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19813
19817
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19814
19818
  *
19815
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19816
- * the store's filter language has only positive equality and `whereIn` — no
19817
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
19818
- * would make the entire pre-column history immortal in one deploy.
19819
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19820
+ * every row is selectable by a positive predicate. (The filter language has
19821
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19822
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19823
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19824
+ * column was designed, and a NOT NULL column is still the better shape.)
19819
19825
  */
19820
19826
  var RetrainStatusSchema = _enum([
19821
19827
  "none",
@@ -20551,7 +20557,9 @@ var RecentTracksQueryInput = object({
20551
20557
  * whose class list is unreadable are kept, and the client's rule stays the
20552
20558
  * exact one.
20553
20559
  */
20554
- classes: array(string()).optional()
20560
+ classes: array(string()).optional(),
20561
+ /** See {@link ExcludeSourcesDoc}. */
20562
+ excludeSources: array(TrackSourceSchema).optional()
20555
20563
  });
20556
20564
  /**
20557
20565
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20979,7 +20987,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20979
20987
  * selected is an operator who has not narrowed anything, and an empty
20980
20988
  * timeline would read as a camera that saw nothing.
20981
20989
  */
20982
- classes: array(string()).optional()
20990
+ classes: array(string()).optional(),
20991
+ /** See {@link ExcludeSourcesDoc}. */
20992
+ excludeSources: array(TrackSourceSchema).optional()
20983
20993
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20984
20994
  kind: "mutation",
20985
20995
  auth: "admin"
@@ -30169,8 +30179,27 @@ var PrivacyMaskRegionSchema = object({
30169
30179
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
30170
30180
  var PrivacyMaskStatusSchema = object({
30171
30181
  enabled: boolean(),
30172
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
30173
- regions: array(PrivacyMaskRegionSchema),
30182
+ /**
30183
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
30184
+ *
30185
+ * `null` means "no answer" — the provider has never reached this camera
30186
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
30187
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
30188
+ * has no zones": those two look identical to an operator right up to the
30189
+ * moment one of them is acted on, and acting on them differs completely.
30190
+ * The switch group turned an unanswered read into *"nothing is set up for
30191
+ * it to act on"* — an instruction to go and draw a zone that already
30192
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
30193
+ * from deleting the mask it could not read.
30194
+ *
30195
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
30196
+ * has no zones. The distinction is the same one {@link
30197
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
30198
+ * microphone, on the very same payload — both planes come from ONE refresh,
30199
+ * so it was never coherent for one of them to be able to say "unknown"
30200
+ * while the other could not.
30201
+ */
30202
+ regions: array(PrivacyMaskRegionSchema).nullable(),
30174
30203
  /**
30175
30204
  * Is the camera capturing sound right now? Read from the camera, never from
30176
30205
  * a server-side mirror.
package/dist/addon.mjs CHANGED
@@ -13035,6 +13035,9 @@ var QueryFilterSchema = object({
13035
13035
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13036
13036
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13037
13037
  whereNot: record(string(), unknown()).optional(),
13038
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13039
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13040
+ whereNotIn: record(string(), array(unknown())).optional(),
13038
13041
  orderBy: object({
13039
13042
  field: string(),
13040
13043
  direction: _enum(["asc", "desc"])
@@ -13055,7 +13058,8 @@ var MutationFilterSchema = object({
13055
13058
  where: record(string(), unknown()).optional(),
13056
13059
  whereIn: record(string(), array(unknown())).optional(),
13057
13060
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13058
- whereNot: record(string(), unknown()).optional()
13061
+ whereNot: record(string(), unknown()).optional(),
13062
+ whereNotIn: record(string(), array(unknown())).optional()
13059
13063
  });
13060
13064
  /**
13061
13065
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19811,10 +19815,12 @@ var TrackSourceSchema = _enum([
19811
19815
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19812
19816
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19813
19817
  *
19814
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19815
- * the store's filter language has only positive equality and `whereIn` — no
19816
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
19817
- * would make the entire pre-column history immortal in one deploy.
19818
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19819
+ * every row is selectable by a positive predicate. (The filter language has
19820
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19821
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19822
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19823
+ * column was designed, and a NOT NULL column is still the better shape.)
19818
19824
  */
19819
19825
  var RetrainStatusSchema = _enum([
19820
19826
  "none",
@@ -20550,7 +20556,9 @@ var RecentTracksQueryInput = object({
20550
20556
  * whose class list is unreadable are kept, and the client's rule stays the
20551
20557
  * exact one.
20552
20558
  */
20553
- classes: array(string()).optional()
20559
+ classes: array(string()).optional(),
20560
+ /** See {@link ExcludeSourcesDoc}. */
20561
+ excludeSources: array(TrackSourceSchema).optional()
20554
20562
  });
20555
20563
  /**
20556
20564
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20978,7 +20986,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20978
20986
  * selected is an operator who has not narrowed anything, and an empty
20979
20987
  * timeline would read as a camera that saw nothing.
20980
20988
  */
20981
- classes: array(string()).optional()
20989
+ classes: array(string()).optional(),
20990
+ /** See {@link ExcludeSourcesDoc}. */
20991
+ excludeSources: array(TrackSourceSchema).optional()
20982
20992
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20983
20993
  kind: "mutation",
20984
20994
  auth: "admin"
@@ -30168,8 +30178,27 @@ var PrivacyMaskRegionSchema = object({
30168
30178
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
30169
30179
  var PrivacyMaskStatusSchema = object({
30170
30180
  enabled: boolean(),
30171
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
30172
- regions: array(PrivacyMaskRegionSchema),
30181
+ /**
30182
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
30183
+ *
30184
+ * `null` means "no answer" — the provider has never reached this camera
30185
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
30186
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
30187
+ * has no zones": those two look identical to an operator right up to the
30188
+ * moment one of them is acted on, and acting on them differs completely.
30189
+ * The switch group turned an unanswered read into *"nothing is set up for
30190
+ * it to act on"* — an instruction to go and draw a zone that already
30191
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
30192
+ * from deleting the mask it could not read.
30193
+ *
30194
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
30195
+ * has no zones. The distinction is the same one {@link
30196
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
30197
+ * microphone, on the very same payload — both planes come from ONE refresh,
30198
+ * so it was never coherent for one of them to be able to say "unknown"
30199
+ * while the other could not.
30200
+ */
30201
+ regions: array(PrivacyMaskRegionSchema).nullable(),
30173
30202
  /**
30174
30203
  * Is the camera capturing sound right now? Read from the camera, never from
30175
30204
  * a server-side mirror.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rademacher",
3
- "version": "0.2.80",
3
+ "version": "0.2.82",
4
4
  "description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
5
5
  "keywords": [
6
6
  "camstack",