@camstack/addon-notifiers 1.2.615 → 1.2.617

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.
Files changed (3) hide show
  1. package/dist/addon.js +114 -67
  2. package/dist/addon.mjs +114 -67
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -29,7 +29,7 @@ let node_fs = require("node:fs");
29
29
  let node_path = require("node:path");
30
30
  node_path = __toESM(node_path);
31
31
  let node_url = require("node:url");
32
- //#region ../types/dist/event-category-7pZEBmVg.mjs
32
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
33
33
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
34
34
  EventCategory["SystemBoot"] = "system.boot";
35
35
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -346,6 +346,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
346
346
  */
347
347
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
348
348
  /**
349
+ * A camera's motion source has fired constantly with no subject for an hour
350
+ * (motion duty or session count over the bar, zero detections) — it is not
351
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
352
+ * {@link PipelineMotionCalm}.
353
+ */
354
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
355
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
356
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
357
+ /**
349
358
  * Per-camera pipeline config was mutated by the orchestrator
350
359
  * (3-level settings change via `setAgentAddonDefaults` /
351
360
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5585,7 +5594,7 @@ var ZodIssueCode = {
5585
5594
  var ZodFirstPartyTypeKind;
5586
5595
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5587
5596
  //#endregion
5588
- //#region ../types/dist/sleep-CueztlR1.mjs
5597
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5589
5598
  /**
5590
5599
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5591
5600
  * window to float samples (D455).
@@ -8177,7 +8186,7 @@ var EntryDescriptorSchema = object({
8177
8186
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8178
8187
  fields: record(string(), unknown())
8179
8188
  }).strict();
8180
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8189
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8181
8190
  var RecordKindDeclarationSchema = object({
8182
8191
  database: _enum(RECORD_DATABASES).default("settings"),
8183
8192
  class: _enum(RECORD_CLASSES),
@@ -8196,14 +8205,6 @@ var RecordKindDeclarationSchema = object({
8196
8205
  secretPaths: array(string().min(1)).default([]),
8197
8206
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8198
8207
  secretArrayKeys: record(string(), string()).default({}),
8199
- /**
8200
- * RETIRED (D900): the legacy table a kind adopted from during the records
8201
- * migration. Nothing declares it any more and nothing reads it; the schema
8202
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8203
- * (an orphaned kind is never redeclared) and an addon built before the
8204
- * removal still sends it. Never set it.
8205
- */
8206
- adoptsFrom: string().min(1).optional(),
8207
8208
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8208
8209
  transactFamily: string().min(1).optional(),
8209
8210
  entry: EntryDescriptorSchema.optional()
@@ -13103,17 +13104,6 @@ object({
13103
13104
  createdAt: number(),
13104
13105
  updatedAt: number()
13105
13106
  });
13106
- object({
13107
- id: string(),
13108
- label: string(),
13109
- isAdmin: boolean().default(false),
13110
- allowedProviders: AllowedProviderSchema,
13111
- allowedDevices: AllowedDevicesSchema,
13112
- tokenHash: string(),
13113
- tokenPrefix: string(),
13114
- createdAt: number(),
13115
- lastUsedAt: number().optional()
13116
- });
13117
13107
  object({
13118
13108
  id: string(),
13119
13109
  userId: string(),
@@ -17008,16 +16998,36 @@ var RecordKindStateSchema = _enum([
17008
16998
  var DeclareKindResultSchema = object({
17009
16999
  kindId: number().int(),
17010
17000
  state: RecordKindStateSchema,
17011
- createdIndexes: array(string()),
17012
- /**
17013
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
17014
- * it stays on the wire, null, because an addon built before the removal reads
17015
- * an ABSENT field as "adoption pending" and refuses to start.
17016
- */
17017
- adoptionPending: _null()
17001
+ createdIndexes: array(string())
17018
17002
  });
17019
17003
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
17020
17004
  var SecretRefsList = array(string());
17005
+ /**
17006
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
17007
+ * All ops of one call share ONE database file and ONE `transactFamily`.
17008
+ */
17009
+ var RecordTransactOpSchema = discriminatedUnion("op", [
17010
+ object({
17011
+ op: literal("put"),
17012
+ kind: RecordKindNameSchema,
17013
+ record: RecordInputSchema,
17014
+ ifRev: number().int().min(0).optional()
17015
+ }),
17016
+ object({
17017
+ op: literal("patch"),
17018
+ kind: RecordKindNameSchema,
17019
+ id: RecordIdSchema,
17020
+ data: RecordBodySchema,
17021
+ at: number().int().nullable().optional(),
17022
+ expiresAt: number().int().nullable().optional(),
17023
+ ifRev: number().int().min(1).optional()
17024
+ }),
17025
+ object({
17026
+ op: literal("delete"),
17027
+ kind: RecordKindNameSchema,
17028
+ id: RecordIdSchema
17029
+ })
17030
+ ]);
17021
17031
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
17022
17032
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
17023
17033
  kind: "mutation",
@@ -17124,6 +17134,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
17124
17134
  }), {
17125
17135
  kind: "mutation",
17126
17136
  auth: "admin"
17137
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17138
+ results: array(object({
17139
+ rev: number().int().nullable(),
17140
+ deleted: boolean()
17141
+ })),
17142
+ releasedRefs: SecretRefsList,
17143
+ secretRefs: SecretRefsList
17144
+ }), {
17145
+ kind: "mutation",
17146
+ auth: "admin"
17127
17147
  }), method(object({
17128
17148
  deviceId: number().int(),
17129
17149
  kinds: array(RecordKindNameSchema).optional()
@@ -42504,9 +42524,13 @@ var NcSystemEventKindSchema = _enum([
42504
42524
  "node-updating",
42505
42525
  "node-inference-unavailable",
42506
42526
  "detection-blind",
42527
+ "motion-noisy",
42528
+ "motion-calm",
42507
42529
  "recording-stalled",
42508
42530
  "recording-healthy",
42509
42531
  "recording-degraded",
42532
+ "device-attention-required",
42533
+ "device-attention-resolved",
42510
42534
  "storage-location-low",
42511
42535
  "storage-location-critical",
42512
42536
  "storage-location-ok",
@@ -48067,7 +48091,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
48067
48091
  modelId: string()
48068
48092
  }),
48069
48093
  object({ kind: literal("cpu-device") }),
48070
- object({ kind: literal("coral-untouched") }),
48071
48094
  object({ kind: literal("device-disabled") }),
48072
48095
  object({ kind: literal("device-unavailable") }),
48073
48096
  object({ kind: literal("node-offline") }),
@@ -48165,11 +48188,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
48165
48188
  kind: literal("detector-store-unreadable"),
48166
48189
  error: string()
48167
48190
  }),
48168
- object({
48169
- kind: literal("coral-enabled"),
48170
- nodeId: string(),
48171
- deviceKey: string()
48172
- }),
48173
48191
  object({
48174
48192
  kind: literal("custom-pin-kept"),
48175
48193
  nodeId: string(),
@@ -54963,6 +54981,16 @@ object({
54963
54981
  powerState: string().nullable(),
54964
54982
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54965
54983
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54984
+ /**
54985
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54986
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54987
+ * when none is reported. A cleared reminder is not an unknown one.
54988
+ */
54989
+ filterCleaningDue: boolean().nullable(),
54990
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54991
+ machineCareDue: boolean().nullable(),
54992
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54993
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54966
54994
  /** Option states: null when the appliance does not expose the option or has not said. */
54967
54995
  halfLoad: boolean().nullable(),
54968
54996
  hygienePlus: boolean().nullable(),
@@ -61580,16 +61608,6 @@ var UpdateUserInputSchema = object({
61580
61608
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61581
61609
  scopes: array(TokenScopeSchema).optional()
61582
61610
  });
61583
- var ApiKeySummarySchema = object({
61584
- id: string(),
61585
- label: string(),
61586
- isAdmin: boolean().default(false),
61587
- allowedProviders: union([array(string()), literal("*")]).optional(),
61588
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61589
- tokenPrefix: string(),
61590
- createdAt: number(),
61591
- lastUsedAt: number().optional()
61592
- });
61593
61611
  var OauthSessionSummarySchema = object({
61594
61612
  id: string(),
61595
61613
  userId: string(),
@@ -61611,8 +61629,7 @@ var TotpStatusSchema = object({
61611
61629
  confirmedAt: number().nullable()
61612
61630
  });
61613
61631
  /**
61614
- * user-management — singleton capability for user accounts and the
61615
- * legacy API-key rows.
61632
+ * user-management — singleton capability for user accounts.
61616
61633
  *
61617
61634
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61618
61635
  * — the subset check on `setUserScopes` is moot
@@ -61668,10 +61685,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61668
61685
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61669
61686
  kind: "mutation",
61670
61687
  access: "view"
61671
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61672
- kind: "mutation",
61673
- auth: "admin",
61674
- access: "delete"
61675
61688
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61676
61689
  kind: "mutation",
61677
61690
  auth: "admin",
@@ -69184,6 +69197,12 @@ Object.freeze({
69184
69197
  addonId: null,
69185
69198
  access: "view"
69186
69199
  },
69200
+ "records.transact": {
69201
+ capName: "records",
69202
+ capScope: "system",
69203
+ addonId: null,
69204
+ access: "create"
69205
+ },
69187
69206
  "sceneMonitor.captureReference": {
69188
69207
  capName: "scene-monitor",
69189
69208
  capScope: "device",
@@ -70516,12 +70535,6 @@ Object.freeze({
70516
70535
  addonId: null,
70517
70536
  access: "view"
70518
70537
  },
70519
- "userManagement.listApiKeys": {
70520
- capName: "user-management",
70521
- capScope: "system",
70522
- addonId: null,
70523
- access: "view"
70524
- },
70525
70538
  "userManagement.listExternalIdentities": {
70526
70539
  capName: "user-management",
70527
70540
  capScope: "system",
@@ -70576,12 +70589,6 @@ Object.freeze({
70576
70589
  addonId: null,
70577
70590
  access: "create"
70578
70591
  },
70579
- "userManagement.revokeApiKey": {
70580
- capName: "user-management",
70581
- capScope: "system",
70582
- addonId: null,
70583
- access: "delete"
70584
- },
70585
70592
  "userManagement.revokeOauthSession": {
70586
70593
  capName: "user-management",
70587
70594
  capScope: "system",
@@ -74153,9 +74160,13 @@ new Map(Object.entries({
74153
74160
  "stream-online": "device-events",
74154
74161
  "stream-offline": "device-events",
74155
74162
  "detection-blind": "device-events",
74163
+ "motion-noisy": "device-events",
74164
+ "motion-calm": "device-events",
74156
74165
  "recording-stalled": "device-events",
74157
74166
  "recording-healthy": "device-events",
74158
74167
  "recording-degraded": "device-events",
74168
+ "device-attention-required": "device-events",
74169
+ "device-attention-resolved": "device-events",
74159
74170
  "node-online": "system",
74160
74171
  "node-offline": "system",
74161
74172
  "node-restarting": "system",
@@ -74238,6 +74249,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74238
74249
  label: "Detecting nothing",
74239
74250
  kinds: ["detection-blind"]
74240
74251
  },
74252
+ {
74253
+ id: "motion-noise",
74254
+ family: "device-events",
74255
+ label: "Motion without a subject",
74256
+ kinds: ["motion-noisy", "motion-calm"]
74257
+ },
74241
74258
  {
74242
74259
  id: "recording",
74243
74260
  family: "device-events",
@@ -74248,6 +74265,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74248
74265
  "recording-degraded"
74249
74266
  ]
74250
74267
  },
74268
+ {
74269
+ id: "device-attention",
74270
+ family: "device-events",
74271
+ label: "Needs attention",
74272
+ kinds: ["device-attention-required", "device-attention-resolved"]
74273
+ },
74251
74274
  {
74252
74275
  id: "nodes",
74253
74276
  family: "system",
@@ -74387,6 +74410,7 @@ var ALERT_EPISODE = [
74387
74410
  "alert-error",
74388
74411
  "alert-critical-resolved"
74389
74412
  ];
74413
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74390
74414
  var UPDATES = [
74391
74415
  "addon-update-available",
74392
74416
  "server-update-available",
@@ -74416,9 +74440,12 @@ var DEVICE_EVENTS = [
74416
74440
  "stream-online",
74417
74441
  "stream-offline",
74418
74442
  "detection-blind",
74443
+ "motion-noisy",
74444
+ "motion-calm",
74419
74445
  "recording-stalled",
74420
74446
  "recording-healthy",
74421
74447
  "recording-degraded",
74448
+ ...DEVICE_ATTENTION,
74422
74449
  ...ALARM
74423
74450
  ];
74424
74451
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74586,7 +74613,9 @@ var STATE_SUMMARY_VARS = [
74586
74613
  [...RULE_TEXT],
74587
74614
  [...RULE_TEXT],
74588
74615
  [...RULE_TEXT],
74589
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74616
+ [...RULE_TEXT],
74617
+ [...RULE_TEXT],
74618
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74590
74619
  [...RULE_TEXT],
74591
74620
  [...RULE_TEXT],
74592
74621
  [...RULE_TEXT],
@@ -74608,11 +74637,11 @@ var STATE_SUMMARY_VARS = [
74608
74637
  [...RULE_TEXT],
74609
74638
  [...RULE_TEXT],
74610
74639
  [...RULE_TEXT],
74640
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74611
74641
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74642
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74612
74643
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74613
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74614
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74615
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74644
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74616
74645
  [...RULE_TEXT],
74617
74646
  [...RULE_TEXT],
74618
74647
  [...RULE_TEXT],
@@ -74688,6 +74717,15 @@ new Map([
74688
74717
  snapshotLabel: "Tanks low or full now",
74689
74718
  snapshotSection: "tanks"
74690
74719
  },
74720
+ {
74721
+ id: "motion-noise",
74722
+ family: "device-events",
74723
+ label: "Motion without a subject (constant / calm again)",
74724
+ bad: ["motion-noisy"],
74725
+ recovery: ["motion-calm"],
74726
+ snapshotLabel: "Cameras with constant motion now",
74727
+ snapshotSection: null
74728
+ },
74691
74729
  {
74692
74730
  id: "recording-health",
74693
74731
  family: "device-events",
@@ -74697,6 +74735,15 @@ new Map([
74697
74735
  snapshotLabel: "Recordings stalled now",
74698
74736
  snapshotSection: null
74699
74737
  },
74738
+ {
74739
+ id: "device-attention",
74740
+ family: "device-events",
74741
+ label: "Device needs attention (raised / resolved)",
74742
+ bad: ["device-attention-required"],
74743
+ recovery: ["device-attention-resolved"],
74744
+ snapshotLabel: "Devices needing attention now",
74745
+ snapshotSection: null
74746
+ },
74700
74747
  {
74701
74748
  id: "node-connectivity",
74702
74749
  family: "system",
package/dist/addon.mjs CHANGED
@@ -2,7 +2,7 @@ import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
2
2
  import { readFileSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- //#region ../types/dist/event-category-7pZEBmVg.mjs
5
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -319,6 +319,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
319
319
  */
320
320
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
321
321
  /**
322
+ * A camera's motion source has fired constantly with no subject for an hour
323
+ * (motion duty or session count over the bar, zero detections) — it is not
324
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
325
+ * {@link PipelineMotionCalm}.
326
+ */
327
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
328
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
329
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
330
+ /**
322
331
  * Per-camera pipeline config was mutated by the orchestrator
323
332
  * (3-level settings change via `setAgentAddonDefaults` /
324
333
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5558,7 +5567,7 @@ var ZodIssueCode = {
5558
5567
  var ZodFirstPartyTypeKind;
5559
5568
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5560
5569
  //#endregion
5561
- //#region ../types/dist/sleep-CueztlR1.mjs
5570
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5562
5571
  /**
5563
5572
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5564
5573
  * window to float samples (D455).
@@ -8150,7 +8159,7 @@ var EntryDescriptorSchema = object({
8150
8159
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8151
8160
  fields: record(string(), unknown())
8152
8161
  }).strict();
8153
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8162
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8154
8163
  var RecordKindDeclarationSchema = object({
8155
8164
  database: _enum(RECORD_DATABASES).default("settings"),
8156
8165
  class: _enum(RECORD_CLASSES),
@@ -8169,14 +8178,6 @@ var RecordKindDeclarationSchema = object({
8169
8178
  secretPaths: array(string().min(1)).default([]),
8170
8179
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8171
8180
  secretArrayKeys: record(string(), string()).default({}),
8172
- /**
8173
- * RETIRED (D900): the legacy table a kind adopted from during the records
8174
- * migration. Nothing declares it any more and nothing reads it; the schema
8175
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8176
- * (an orphaned kind is never redeclared) and an addon built before the
8177
- * removal still sends it. Never set it.
8178
- */
8179
- adoptsFrom: string().min(1).optional(),
8180
8181
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8181
8182
  transactFamily: string().min(1).optional(),
8182
8183
  entry: EntryDescriptorSchema.optional()
@@ -13076,17 +13077,6 @@ object({
13076
13077
  createdAt: number(),
13077
13078
  updatedAt: number()
13078
13079
  });
13079
- object({
13080
- id: string(),
13081
- label: string(),
13082
- isAdmin: boolean().default(false),
13083
- allowedProviders: AllowedProviderSchema,
13084
- allowedDevices: AllowedDevicesSchema,
13085
- tokenHash: string(),
13086
- tokenPrefix: string(),
13087
- createdAt: number(),
13088
- lastUsedAt: number().optional()
13089
- });
13090
13080
  object({
13091
13081
  id: string(),
13092
13082
  userId: string(),
@@ -16981,16 +16971,36 @@ var RecordKindStateSchema = _enum([
16981
16971
  var DeclareKindResultSchema = object({
16982
16972
  kindId: number().int(),
16983
16973
  state: RecordKindStateSchema,
16984
- createdIndexes: array(string()),
16985
- /**
16986
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16987
- * it stays on the wire, null, because an addon built before the removal reads
16988
- * an ABSENT field as "adoption pending" and refuses to start.
16989
- */
16990
- adoptionPending: _null()
16974
+ createdIndexes: array(string())
16991
16975
  });
16992
16976
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16993
16977
  var SecretRefsList = array(string());
16978
+ /**
16979
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16980
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16981
+ */
16982
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16983
+ object({
16984
+ op: literal("put"),
16985
+ kind: RecordKindNameSchema,
16986
+ record: RecordInputSchema,
16987
+ ifRev: number().int().min(0).optional()
16988
+ }),
16989
+ object({
16990
+ op: literal("patch"),
16991
+ kind: RecordKindNameSchema,
16992
+ id: RecordIdSchema,
16993
+ data: RecordBodySchema,
16994
+ at: number().int().nullable().optional(),
16995
+ expiresAt: number().int().nullable().optional(),
16996
+ ifRev: number().int().min(1).optional()
16997
+ }),
16998
+ object({
16999
+ op: literal("delete"),
17000
+ kind: RecordKindNameSchema,
17001
+ id: RecordIdSchema
17002
+ })
17003
+ ]);
16994
17004
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16995
17005
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16996
17006
  kind: "mutation",
@@ -17097,6 +17107,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
17097
17107
  }), {
17098
17108
  kind: "mutation",
17099
17109
  auth: "admin"
17110
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17111
+ results: array(object({
17112
+ rev: number().int().nullable(),
17113
+ deleted: boolean()
17114
+ })),
17115
+ releasedRefs: SecretRefsList,
17116
+ secretRefs: SecretRefsList
17117
+ }), {
17118
+ kind: "mutation",
17119
+ auth: "admin"
17100
17120
  }), method(object({
17101
17121
  deviceId: number().int(),
17102
17122
  kinds: array(RecordKindNameSchema).optional()
@@ -42477,9 +42497,13 @@ var NcSystemEventKindSchema = _enum([
42477
42497
  "node-updating",
42478
42498
  "node-inference-unavailable",
42479
42499
  "detection-blind",
42500
+ "motion-noisy",
42501
+ "motion-calm",
42480
42502
  "recording-stalled",
42481
42503
  "recording-healthy",
42482
42504
  "recording-degraded",
42505
+ "device-attention-required",
42506
+ "device-attention-resolved",
42483
42507
  "storage-location-low",
42484
42508
  "storage-location-critical",
42485
42509
  "storage-location-ok",
@@ -48040,7 +48064,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
48040
48064
  modelId: string()
48041
48065
  }),
48042
48066
  object({ kind: literal("cpu-device") }),
48043
- object({ kind: literal("coral-untouched") }),
48044
48067
  object({ kind: literal("device-disabled") }),
48045
48068
  object({ kind: literal("device-unavailable") }),
48046
48069
  object({ kind: literal("node-offline") }),
@@ -48138,11 +48161,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
48138
48161
  kind: literal("detector-store-unreadable"),
48139
48162
  error: string()
48140
48163
  }),
48141
- object({
48142
- kind: literal("coral-enabled"),
48143
- nodeId: string(),
48144
- deviceKey: string()
48145
- }),
48146
48164
  object({
48147
48165
  kind: literal("custom-pin-kept"),
48148
48166
  nodeId: string(),
@@ -54936,6 +54954,16 @@ object({
54936
54954
  powerState: string().nullable(),
54937
54955
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54938
54956
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54957
+ /**
54958
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54959
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54960
+ * when none is reported. A cleared reminder is not an unknown one.
54961
+ */
54962
+ filterCleaningDue: boolean().nullable(),
54963
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54964
+ machineCareDue: boolean().nullable(),
54965
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54966
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54939
54967
  /** Option states: null when the appliance does not expose the option or has not said. */
54940
54968
  halfLoad: boolean().nullable(),
54941
54969
  hygienePlus: boolean().nullable(),
@@ -61553,16 +61581,6 @@ var UpdateUserInputSchema = object({
61553
61581
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61554
61582
  scopes: array(TokenScopeSchema).optional()
61555
61583
  });
61556
- var ApiKeySummarySchema = object({
61557
- id: string(),
61558
- label: string(),
61559
- isAdmin: boolean().default(false),
61560
- allowedProviders: union([array(string()), literal("*")]).optional(),
61561
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61562
- tokenPrefix: string(),
61563
- createdAt: number(),
61564
- lastUsedAt: number().optional()
61565
- });
61566
61584
  var OauthSessionSummarySchema = object({
61567
61585
  id: string(),
61568
61586
  userId: string(),
@@ -61584,8 +61602,7 @@ var TotpStatusSchema = object({
61584
61602
  confirmedAt: number().nullable()
61585
61603
  });
61586
61604
  /**
61587
- * user-management — singleton capability for user accounts and the
61588
- * legacy API-key rows.
61605
+ * user-management — singleton capability for user accounts.
61589
61606
  *
61590
61607
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61591
61608
  * — the subset check on `setUserScopes` is moot
@@ -61641,10 +61658,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61641
61658
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61642
61659
  kind: "mutation",
61643
61660
  access: "view"
61644
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61645
- kind: "mutation",
61646
- auth: "admin",
61647
- access: "delete"
61648
61661
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61649
61662
  kind: "mutation",
61650
61663
  auth: "admin",
@@ -69157,6 +69170,12 @@ Object.freeze({
69157
69170
  addonId: null,
69158
69171
  access: "view"
69159
69172
  },
69173
+ "records.transact": {
69174
+ capName: "records",
69175
+ capScope: "system",
69176
+ addonId: null,
69177
+ access: "create"
69178
+ },
69160
69179
  "sceneMonitor.captureReference": {
69161
69180
  capName: "scene-monitor",
69162
69181
  capScope: "device",
@@ -70489,12 +70508,6 @@ Object.freeze({
70489
70508
  addonId: null,
70490
70509
  access: "view"
70491
70510
  },
70492
- "userManagement.listApiKeys": {
70493
- capName: "user-management",
70494
- capScope: "system",
70495
- addonId: null,
70496
- access: "view"
70497
- },
70498
70511
  "userManagement.listExternalIdentities": {
70499
70512
  capName: "user-management",
70500
70513
  capScope: "system",
@@ -70549,12 +70562,6 @@ Object.freeze({
70549
70562
  addonId: null,
70550
70563
  access: "create"
70551
70564
  },
70552
- "userManagement.revokeApiKey": {
70553
- capName: "user-management",
70554
- capScope: "system",
70555
- addonId: null,
70556
- access: "delete"
70557
- },
70558
70565
  "userManagement.revokeOauthSession": {
70559
70566
  capName: "user-management",
70560
70567
  capScope: "system",
@@ -74126,9 +74133,13 @@ new Map(Object.entries({
74126
74133
  "stream-online": "device-events",
74127
74134
  "stream-offline": "device-events",
74128
74135
  "detection-blind": "device-events",
74136
+ "motion-noisy": "device-events",
74137
+ "motion-calm": "device-events",
74129
74138
  "recording-stalled": "device-events",
74130
74139
  "recording-healthy": "device-events",
74131
74140
  "recording-degraded": "device-events",
74141
+ "device-attention-required": "device-events",
74142
+ "device-attention-resolved": "device-events",
74132
74143
  "node-online": "system",
74133
74144
  "node-offline": "system",
74134
74145
  "node-restarting": "system",
@@ -74211,6 +74222,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74211
74222
  label: "Detecting nothing",
74212
74223
  kinds: ["detection-blind"]
74213
74224
  },
74225
+ {
74226
+ id: "motion-noise",
74227
+ family: "device-events",
74228
+ label: "Motion without a subject",
74229
+ kinds: ["motion-noisy", "motion-calm"]
74230
+ },
74214
74231
  {
74215
74232
  id: "recording",
74216
74233
  family: "device-events",
@@ -74221,6 +74238,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74221
74238
  "recording-degraded"
74222
74239
  ]
74223
74240
  },
74241
+ {
74242
+ id: "device-attention",
74243
+ family: "device-events",
74244
+ label: "Needs attention",
74245
+ kinds: ["device-attention-required", "device-attention-resolved"]
74246
+ },
74224
74247
  {
74225
74248
  id: "nodes",
74226
74249
  family: "system",
@@ -74360,6 +74383,7 @@ var ALERT_EPISODE = [
74360
74383
  "alert-error",
74361
74384
  "alert-critical-resolved"
74362
74385
  ];
74386
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74363
74387
  var UPDATES = [
74364
74388
  "addon-update-available",
74365
74389
  "server-update-available",
@@ -74389,9 +74413,12 @@ var DEVICE_EVENTS = [
74389
74413
  "stream-online",
74390
74414
  "stream-offline",
74391
74415
  "detection-blind",
74416
+ "motion-noisy",
74417
+ "motion-calm",
74392
74418
  "recording-stalled",
74393
74419
  "recording-healthy",
74394
74420
  "recording-degraded",
74421
+ ...DEVICE_ATTENTION,
74395
74422
  ...ALARM
74396
74423
  ];
74397
74424
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74559,7 +74586,9 @@ var STATE_SUMMARY_VARS = [
74559
74586
  [...RULE_TEXT],
74560
74587
  [...RULE_TEXT],
74561
74588
  [...RULE_TEXT],
74562
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74589
+ [...RULE_TEXT],
74590
+ [...RULE_TEXT],
74591
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74563
74592
  [...RULE_TEXT],
74564
74593
  [...RULE_TEXT],
74565
74594
  [...RULE_TEXT],
@@ -74581,11 +74610,11 @@ var STATE_SUMMARY_VARS = [
74581
74610
  [...RULE_TEXT],
74582
74611
  [...RULE_TEXT],
74583
74612
  [...RULE_TEXT],
74613
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74584
74614
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74615
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74585
74616
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74586
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74587
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74588
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74617
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74589
74618
  [...RULE_TEXT],
74590
74619
  [...RULE_TEXT],
74591
74620
  [...RULE_TEXT],
@@ -74661,6 +74690,15 @@ new Map([
74661
74690
  snapshotLabel: "Tanks low or full now",
74662
74691
  snapshotSection: "tanks"
74663
74692
  },
74693
+ {
74694
+ id: "motion-noise",
74695
+ family: "device-events",
74696
+ label: "Motion without a subject (constant / calm again)",
74697
+ bad: ["motion-noisy"],
74698
+ recovery: ["motion-calm"],
74699
+ snapshotLabel: "Cameras with constant motion now",
74700
+ snapshotSection: null
74701
+ },
74664
74702
  {
74665
74703
  id: "recording-health",
74666
74704
  family: "device-events",
@@ -74670,6 +74708,15 @@ new Map([
74670
74708
  snapshotLabel: "Recordings stalled now",
74671
74709
  snapshotSection: null
74672
74710
  },
74711
+ {
74712
+ id: "device-attention",
74713
+ family: "device-events",
74714
+ label: "Device needs attention (raised / resolved)",
74715
+ bad: ["device-attention-required"],
74716
+ recovery: ["device-attention-resolved"],
74717
+ snapshotLabel: "Devices needing attention now",
74718
+ snapshotSection: null
74719
+ },
74673
74720
  {
74674
74721
  id: "node-connectivity",
74675
74722
  family: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-notifiers",
3
- "version": "1.2.615",
3
+ "version": "1.2.617",
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",