@camstack/addon-provider-petkit 0.2.81 → 0.2.83

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
@@ -13153,6 +13153,9 @@ var QueryFilterSchema = object({
13153
13153
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13154
13154
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13155
13155
  whereNot: record(string(), unknown()).optional(),
13156
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13157
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13158
+ whereNotIn: record(string(), array(unknown())).optional(),
13156
13159
  orderBy: object({
13157
13160
  field: string(),
13158
13161
  direction: _enum(["asc", "desc"])
@@ -13173,7 +13176,8 @@ var MutationFilterSchema = object({
13173
13176
  where: record(string(), unknown()).optional(),
13174
13177
  whereIn: record(string(), array(unknown())).optional(),
13175
13178
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13176
- whereNot: record(string(), unknown()).optional()
13179
+ whereNot: record(string(), unknown()).optional(),
13180
+ whereNotIn: record(string(), array(unknown())).optional()
13177
13181
  });
13178
13182
  /**
13179
13183
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19946,10 +19950,12 @@ var TrackSourceSchema = _enum([
19946
19950
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19947
19951
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19948
19952
  *
19949
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19950
- * the store's filter language has only positive equality and `whereIn` no
19951
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
19952
- * would make the entire pre-column history immortal in one deploy.
19953
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19954
+ * every row is selectable by a positive predicate. (The filter language has
19955
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19956
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19957
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19958
+ * column was designed, and a NOT NULL column is still the better shape.)
19953
19959
  */
19954
19960
  var RetrainStatusSchema = _enum([
19955
19961
  "none",
@@ -20685,7 +20691,9 @@ var RecentTracksQueryInput = object({
20685
20691
  * whose class list is unreadable are kept, and the client's rule stays the
20686
20692
  * exact one.
20687
20693
  */
20688
- classes: array(string()).optional()
20694
+ classes: array(string()).optional(),
20695
+ /** See {@link ExcludeSourcesDoc}. */
20696
+ excludeSources: array(TrackSourceSchema).optional()
20689
20697
  });
20690
20698
  /**
20691
20699
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -21113,7 +21121,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21113
21121
  * selected is an operator who has not narrowed anything, and an empty
21114
21122
  * timeline would read as a camera that saw nothing.
21115
21123
  */
21116
- classes: array(string()).optional()
21124
+ classes: array(string()).optional(),
21125
+ /** See {@link ExcludeSourcesDoc}. */
21126
+ excludeSources: array(TrackSourceSchema).optional()
21117
21127
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
21118
21128
  kind: "mutation",
21119
21129
  auth: "admin"
@@ -30311,8 +30321,27 @@ var PrivacyMaskRegionSchema = object({
30311
30321
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
30312
30322
  var PrivacyMaskStatusSchema = object({
30313
30323
  enabled: boolean(),
30314
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
30315
- regions: array(PrivacyMaskRegionSchema),
30324
+ /**
30325
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
30326
+ *
30327
+ * `null` means "no answer" — the provider has never reached this camera
30328
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
30329
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
30330
+ * has no zones": those two look identical to an operator right up to the
30331
+ * moment one of them is acted on, and acting on them differs completely.
30332
+ * The switch group turned an unanswered read into *"nothing is set up for
30333
+ * it to act on"* — an instruction to go and draw a zone that already
30334
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
30335
+ * from deleting the mask it could not read.
30336
+ *
30337
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
30338
+ * has no zones. The distinction is the same one {@link
30339
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
30340
+ * microphone, on the very same payload — both planes come from ONE refresh,
30341
+ * so it was never coherent for one of them to be able to say "unknown"
30342
+ * while the other could not.
30343
+ */
30344
+ regions: array(PrivacyMaskRegionSchema).nullable(),
30316
30345
  /**
30317
30346
  * Is the camera capturing sound right now? Read from the camera, never from
30318
30347
  * a server-side mirror.
package/dist/addon.mjs CHANGED
@@ -13152,6 +13152,9 @@ var QueryFilterSchema = object({
13152
13152
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13153
13153
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13154
13154
  whereNot: record(string(), unknown()).optional(),
13155
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13156
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13157
+ whereNotIn: record(string(), array(unknown())).optional(),
13155
13158
  orderBy: object({
13156
13159
  field: string(),
13157
13160
  direction: _enum(["asc", "desc"])
@@ -13172,7 +13175,8 @@ var MutationFilterSchema = object({
13172
13175
  where: record(string(), unknown()).optional(),
13173
13176
  whereIn: record(string(), array(unknown())).optional(),
13174
13177
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13175
- whereNot: record(string(), unknown()).optional()
13178
+ whereNot: record(string(), unknown()).optional(),
13179
+ whereNotIn: record(string(), array(unknown())).optional()
13176
13180
  });
13177
13181
  /**
13178
13182
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -19945,10 +19949,12 @@ var TrackSourceSchema = _enum([
19945
19949
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
19946
19950
  * a deliberate action of the retrain page, not a side effect of a checkbox.
19947
19951
  *
19948
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
19949
- * the store's filter language has only positive equality and `whereIn` no
19950
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
19951
- * would make the entire pre-column history immortal in one deploy.
19952
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
19953
+ * every row is selectable by a positive predicate. (The filter language has
19954
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
19955
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
19956
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
19957
+ * column was designed, and a NOT NULL column is still the better shape.)
19952
19958
  */
19953
19959
  var RetrainStatusSchema = _enum([
19954
19960
  "none",
@@ -20684,7 +20690,9 @@ var RecentTracksQueryInput = object({
20684
20690
  * whose class list is unreadable are kept, and the client's rule stays the
20685
20691
  * exact one.
20686
20692
  */
20687
- classes: array(string()).optional()
20693
+ classes: array(string()).optional(),
20694
+ /** See {@link ExcludeSourcesDoc}. */
20695
+ excludeSources: array(TrackSourceSchema).optional()
20688
20696
  });
20689
20697
  /**
20690
20698
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -21112,7 +21120,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21112
21120
  * selected is an operator who has not narrowed anything, and an empty
21113
21121
  * timeline would read as a camera that saw nothing.
21114
21122
  */
21115
- classes: array(string()).optional()
21123
+ classes: array(string()).optional(),
21124
+ /** See {@link ExcludeSourcesDoc}. */
21125
+ excludeSources: array(TrackSourceSchema).optional()
21116
21126
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
21117
21127
  kind: "mutation",
21118
21128
  auth: "admin"
@@ -30310,8 +30320,27 @@ var PrivacyMaskRegionSchema = object({
30310
30320
  /** Current on-camera privacy state — mask master enable + zones + microphone. */
30311
30321
  var PrivacyMaskStatusSchema = object({
30312
30322
  enabled: boolean(),
30313
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
30314
- regions: array(PrivacyMaskRegionSchema),
30323
+ /**
30324
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
30325
+ *
30326
+ * `null` means "no answer" — the provider has never reached this camera
30327
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
30328
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
30329
+ * has no zones": those two look identical to an operator right up to the
30330
+ * moment one of them is acted on, and acting on them differs completely.
30331
+ * The switch group turned an unanswered read into *"nothing is set up for
30332
+ * it to act on"* — an instruction to go and draw a zone that already
30333
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
30334
+ * from deleting the mask it could not read.
30335
+ *
30336
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
30337
+ * has no zones. The distinction is the same one {@link
30338
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
30339
+ * microphone, on the very same payload — both planes come from ONE refresh,
30340
+ * so it was never coherent for one of them to be able to say "unknown"
30341
+ * while the other could not.
30342
+ */
30343
+ regions: array(PrivacyMaskRegionSchema).nullable(),
30315
30344
  /**
30316
30345
  * Is the camera capturing sound right now? Read from the camera, never from
30317
30346
  * a server-side mirror.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-petkit",
3
- "version": "0.2.81",
3
+ "version": "0.2.83",
4
4
  "description": "PetKit smart-feeder device-provider addon for CamStack — wraps the @apocaliss92/nodepetkit PetKit cloud client",
5
5
  "keywords": [
6
6
  "camstack",