@camstack/addon-notifiers 1.2.85 → 1.2.87

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
@@ -12123,6 +12123,9 @@ var QueryFilterSchema = object({
12123
12123
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12124
12124
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12125
12125
  whereNot: record(string(), unknown()).optional(),
12126
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12127
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12128
+ whereNotIn: record(string(), array(unknown())).optional(),
12126
12129
  orderBy: object({
12127
12130
  field: string(),
12128
12131
  direction: _enum(["asc", "desc"])
@@ -12143,7 +12146,8 @@ var MutationFilterSchema = object({
12143
12146
  where: record(string(), unknown()).optional(),
12144
12147
  whereIn: record(string(), array(unknown())).optional(),
12145
12148
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12146
- whereNot: record(string(), unknown()).optional()
12149
+ whereNot: record(string(), unknown()).optional(),
12150
+ whereNotIn: record(string(), array(unknown())).optional()
12147
12151
  });
12148
12152
  /**
12149
12153
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18647,10 +18651,12 @@ var TrackSourceSchema = _enum([
18647
18651
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18648
18652
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18649
18653
  *
18650
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18651
- * the store's filter language has only positive equality and `whereIn` — no
18652
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18653
- * would make the entire pre-column history immortal in one deploy.
18654
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18655
+ * every row is selectable by a positive predicate. (The filter language has
18656
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18657
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18658
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18659
+ * column was designed, and a NOT NULL column is still the better shape.)
18654
18660
  */
18655
18661
  var RetrainStatusSchema = _enum([
18656
18662
  "none",
@@ -19386,7 +19392,9 @@ var RecentTracksQueryInput = object({
19386
19392
  * whose class list is unreadable are kept, and the client's rule stays the
19387
19393
  * exact one.
19388
19394
  */
19389
- classes: array(string()).optional()
19395
+ classes: array(string()).optional(),
19396
+ /** See {@link ExcludeSourcesDoc}. */
19397
+ excludeSources: array(TrackSourceSchema).optional()
19390
19398
  });
19391
19399
  /**
19392
19400
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19814,7 +19822,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19814
19822
  * selected is an operator who has not narrowed anything, and an empty
19815
19823
  * timeline would read as a camera that saw nothing.
19816
19824
  */
19817
- classes: array(string()).optional()
19825
+ classes: array(string()).optional(),
19826
+ /** See {@link ExcludeSourcesDoc}. */
19827
+ excludeSources: array(TrackSourceSchema).optional()
19818
19828
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19819
19829
  kind: "mutation",
19820
19830
  auth: "admin"
@@ -27275,8 +27285,27 @@ var PrivacyMaskRegionSchema = object({
27275
27285
  });
27276
27286
  object({
27277
27287
  enabled: boolean(),
27278
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
27279
- regions: array(PrivacyMaskRegionSchema),
27288
+ /**
27289
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
27290
+ *
27291
+ * `null` means "no answer" — the provider has never reached this camera
27292
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
27293
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
27294
+ * has no zones": those two look identical to an operator right up to the
27295
+ * moment one of them is acted on, and acting on them differs completely.
27296
+ * The switch group turned an unanswered read into *"nothing is set up for
27297
+ * it to act on"* — an instruction to go and draw a zone that already
27298
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
27299
+ * from deleting the mask it could not read.
27300
+ *
27301
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
27302
+ * has no zones. The distinction is the same one {@link
27303
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
27304
+ * microphone, on the very same payload — both planes come from ONE refresh,
27305
+ * so it was never coherent for one of them to be able to say "unknown"
27306
+ * while the other could not.
27307
+ */
27308
+ regions: array(PrivacyMaskRegionSchema).nullable(),
27280
27309
  /**
27281
27310
  * Is the camera capturing sound right now? Read from the camera, never from
27282
27311
  * a server-side mirror.
package/dist/addon.mjs CHANGED
@@ -12096,6 +12096,9 @@ var QueryFilterSchema = object({
12096
12096
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12097
12097
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12098
12098
  whereNot: record(string(), unknown()).optional(),
12099
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12100
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12101
+ whereNotIn: record(string(), array(unknown())).optional(),
12099
12102
  orderBy: object({
12100
12103
  field: string(),
12101
12104
  direction: _enum(["asc", "desc"])
@@ -12116,7 +12119,8 @@ var MutationFilterSchema = object({
12116
12119
  where: record(string(), unknown()).optional(),
12117
12120
  whereIn: record(string(), array(unknown())).optional(),
12118
12121
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12119
- whereNot: record(string(), unknown()).optional()
12122
+ whereNot: record(string(), unknown()).optional(),
12123
+ whereNotIn: record(string(), array(unknown())).optional()
12120
12124
  });
12121
12125
  /**
12122
12126
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18620,10 +18624,12 @@ var TrackSourceSchema = _enum([
18620
18624
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18621
18625
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18622
18626
  *
18623
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18624
- * the store's filter language has only positive equality and `whereIn` — no
18625
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18626
- * would make the entire pre-column history immortal in one deploy.
18627
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18628
+ * every row is selectable by a positive predicate. (The filter language has
18629
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18630
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18631
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18632
+ * column was designed, and a NOT NULL column is still the better shape.)
18627
18633
  */
18628
18634
  var RetrainStatusSchema = _enum([
18629
18635
  "none",
@@ -19359,7 +19365,9 @@ var RecentTracksQueryInput = object({
19359
19365
  * whose class list is unreadable are kept, and the client's rule stays the
19360
19366
  * exact one.
19361
19367
  */
19362
- classes: array(string()).optional()
19368
+ classes: array(string()).optional(),
19369
+ /** See {@link ExcludeSourcesDoc}. */
19370
+ excludeSources: array(TrackSourceSchema).optional()
19363
19371
  });
19364
19372
  /**
19365
19373
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19787,7 +19795,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19787
19795
  * selected is an operator who has not narrowed anything, and an empty
19788
19796
  * timeline would read as a camera that saw nothing.
19789
19797
  */
19790
- classes: array(string()).optional()
19798
+ classes: array(string()).optional(),
19799
+ /** See {@link ExcludeSourcesDoc}. */
19800
+ excludeSources: array(TrackSourceSchema).optional()
19791
19801
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19792
19802
  kind: "mutation",
19793
19803
  auth: "admin"
@@ -27248,8 +27258,27 @@ var PrivacyMaskRegionSchema = object({
27248
27258
  });
27249
27259
  object({
27250
27260
  enabled: boolean(),
27251
- /** Active zones (normalized 0..1). Length ≤ maxRegions. */
27252
- regions: array(PrivacyMaskRegionSchema),
27261
+ /**
27262
+ * Active zones (normalized 0..1). Length ≤ maxRegions.
27263
+ *
27264
+ * `null` means "no answer" — the provider has never reached this camera
27265
+ * (a cold `runtimeState` slice, a battery camera asleep) or the read
27266
+ * failed. A consumer must render it as UNKNOWN and never as "this camera
27267
+ * has no zones": those two look identical to an operator right up to the
27268
+ * moment one of them is acted on, and acting on them differs completely.
27269
+ * The switch group turned an unanswered read into *"nothing is set up for
27270
+ * it to act on"* — an instruction to go and draw a zone that already
27271
+ * exists — and this editor seeded an EMPTY canvas from it, one Save away
27272
+ * from deleting the mask it could not read.
27273
+ *
27274
+ * Empty-and-answered is `[]` and stays a real answer: this camera genuinely
27275
+ * has no zones. The distinction is the same one {@link
27276
+ * PrivacyMaskStatusSchema.shape.audioEnabled} already draws for the
27277
+ * microphone, on the very same payload — both planes come from ONE refresh,
27278
+ * so it was never coherent for one of them to be able to say "unknown"
27279
+ * while the other could not.
27280
+ */
27281
+ regions: array(PrivacyMaskRegionSchema).nullable(),
27253
27282
  /**
27254
27283
  * Is the camera capturing sound right now? Read from the camera, never from
27255
27284
  * a server-side mirror.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-notifiers",
3
- "version": "1.2.85",
3
+ "version": "1.2.87",
4
4
  "description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
5
5
  "keywords": [
6
6
  "camstack",