@camstack/addon-provider-homematic 1.2.82 → 1.2.84

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
@@ -12109,6 +12109,9 @@ var QueryFilterSchema = object({
12109
12109
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12110
12110
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12111
12111
  whereNot: record(string(), unknown()).optional(),
12112
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12113
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12114
+ whereNotIn: record(string(), array(unknown())).optional(),
12112
12115
  orderBy: object({
12113
12116
  field: string(),
12114
12117
  direction: _enum(["asc", "desc"])
@@ -12129,7 +12132,8 @@ var MutationFilterSchema = object({
12129
12132
  where: record(string(), unknown()).optional(),
12130
12133
  whereIn: record(string(), array(unknown())).optional(),
12131
12134
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12132
- whereNot: record(string(), unknown()).optional()
12135
+ whereNot: record(string(), unknown()).optional(),
12136
+ whereNotIn: record(string(), array(unknown())).optional()
12133
12137
  });
12134
12138
  /**
12135
12139
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18902,10 +18906,12 @@ var TrackSourceSchema = _enum([
18902
18906
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18903
18907
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18904
18908
  *
18905
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18906
- * the store's filter language has only positive equality and `whereIn` — no
18907
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18908
- * would make the entire pre-column history immortal in one deploy.
18909
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18910
+ * every row is selectable by a positive predicate. (The filter language has
18911
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18912
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18913
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18914
+ * column was designed, and a NOT NULL column is still the better shape.)
18909
18915
  */
18910
18916
  var RetrainStatusSchema = _enum([
18911
18917
  "none",
@@ -19641,7 +19647,9 @@ var RecentTracksQueryInput = object({
19641
19647
  * whose class list is unreadable are kept, and the client's rule stays the
19642
19648
  * exact one.
19643
19649
  */
19644
- classes: array(string()).optional()
19650
+ classes: array(string()).optional(),
19651
+ /** See {@link ExcludeSourcesDoc}. */
19652
+ excludeSources: array(TrackSourceSchema).optional()
19645
19653
  });
19646
19654
  /**
19647
19655
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20069,7 +20077,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20069
20077
  * selected is an operator who has not narrowed anything, and an empty
20070
20078
  * timeline would read as a camera that saw nothing.
20071
20079
  */
20072
- classes: array(string()).optional()
20080
+ classes: array(string()).optional(),
20081
+ /** See {@link ExcludeSourcesDoc}. */
20082
+ excludeSources: array(TrackSourceSchema).optional()
20073
20083
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20074
20084
  kind: "mutation",
20075
20085
  auth: "admin"
@@ -29259,8 +29269,27 @@ var PrivacyMaskRegionSchema = object({
29259
29269
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29260
29270
  var PrivacyMaskStatusSchema = object({
29261
29271
  enabled: boolean(),
29262
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29263
- regions: array(PrivacyMaskRegionSchema),
29272
+ /**
29273
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29274
+ *
29275
+ * `null` means "no answer" — the provider has never reached this camera
29276
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29277
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29278
+ * has no zones": those two look identical to an operator right up to the
29279
+ * moment one of them is acted on, and acting on them differs completely.
29280
+ * The switch group turned an unanswered read into *"nothing is set up for
29281
+ * it to act on"* — an instruction to go and draw a zone that already
29282
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29283
+ * from deleting the mask it could not read.
29284
+ *
29285
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29286
+ * has no zones. The distinction is the same one {@link
29287
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29288
+ * microphone, on the very same payload — both planes come from ONE refresh,
29289
+ * so it was never coherent for one of them to be able to say "unknown"
29290
+ * while the other could not.
29291
+ */
29292
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29264
29293
  /**
29265
29294
  * Is the camera capturing sound right now? Read from the camera, never from
29266
29295
  * a server-side mirror.
package/dist/addon.mjs CHANGED
@@ -12110,6 +12110,9 @@ var QueryFilterSchema = object({
12110
12110
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12111
12111
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12112
12112
  whereNot: record(string(), unknown()).optional(),
12113
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12114
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12115
+ whereNotIn: record(string(), array(unknown())).optional(),
12113
12116
  orderBy: object({
12114
12117
  field: string(),
12115
12118
  direction: _enum(["asc", "desc"])
@@ -12130,7 +12133,8 @@ var MutationFilterSchema = object({
12130
12133
  where: record(string(), unknown()).optional(),
12131
12134
  whereIn: record(string(), array(unknown())).optional(),
12132
12135
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12133
- whereNot: record(string(), unknown()).optional()
12136
+ whereNot: record(string(), unknown()).optional(),
12137
+ whereNotIn: record(string(), array(unknown())).optional()
12134
12138
  });
12135
12139
  /**
12136
12140
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18903,10 +18907,12 @@ var TrackSourceSchema = _enum([
18903
18907
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18904
18908
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18905
18909
  *
18906
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18907
- * the store's filter language has only positive equality and `whereIn` — no
18908
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18909
- * would make the entire pre-column history immortal in one deploy.
18910
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18911
+ * every row is selectable by a positive predicate. (The filter language has
18912
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18913
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18914
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18915
+ * column was designed, and a NOT NULL column is still the better shape.)
18910
18916
  */
18911
18917
  var RetrainStatusSchema = _enum([
18912
18918
  "none",
@@ -19642,7 +19648,9 @@ var RecentTracksQueryInput = object({
19642
19648
  * whose class list is unreadable are kept, and the client's rule stays the
19643
19649
  * exact one.
19644
19650
  */
19645
- classes: array(string()).optional()
19651
+ classes: array(string()).optional(),
19652
+ /** See {@link ExcludeSourcesDoc}. */
19653
+ excludeSources: array(TrackSourceSchema).optional()
19646
19654
  });
19647
19655
  /**
19648
19656
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -20070,7 +20078,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20070
20078
  * selected is an operator who has not narrowed anything, and an empty
20071
20079
  * timeline would read as a camera that saw nothing.
20072
20080
  */
20073
- classes: array(string()).optional()
20081
+ classes: array(string()).optional(),
20082
+ /** See {@link ExcludeSourcesDoc}. */
20083
+ excludeSources: array(TrackSourceSchema).optional()
20074
20084
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
20075
20085
  kind: "mutation",
20076
20086
  auth: "admin"
@@ -29260,8 +29270,27 @@ var PrivacyMaskRegionSchema = object({
29260
29270
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
29261
29271
  var PrivacyMaskStatusSchema = object({
29262
29272
  enabled: boolean(),
29263
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
29264
- regions: array(PrivacyMaskRegionSchema),
29273
+ /**
29274
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
29275
+ *
29276
+ * `null` means "no answer" — the provider has never reached this camera
29277
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
29278
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
29279
+ * has no zones": those two look identical to an operator right up to the
29280
+ * moment one of them is acted on, and acting on them differs completely.
29281
+ * The switch group turned an unanswered read into *"nothing is set up for
29282
+ * it to act on"* — an instruction to go and draw a zone that already
29283
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
29284
+ * from deleting the mask it could not read.
29285
+ *
29286
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
29287
+ * has no zones. The distinction is the same one {@link
29288
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
29289
+ * microphone, on the very same payload — both planes come from ONE refresh,
29290
+ * so it was never coherent for one of them to be able to say "unknown"
29291
+ * while the other could not.
29292
+ */
29293
+ regions: array(PrivacyMaskRegionSchema).nullable(),
29265
29294
  /**
29266
29295
  * Is the camera capturing sound right now? Read from the camera, never from
29267
29296
  * a server-side mirror.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homematic",
3
- "version": "1.2.82",
3
+ "version": "1.2.84",
4
4
  "description": "Homematic / HomematicIP (CCU3 / RaspberryMatic) device-provider addon for CamStack — wraps the nodehomematic library",
5
5
  "keywords": [
6
6
  "camstack",