@camstack/addon-notifiers 1.2.615 → 1.2.616

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 -61
  2. package/dist/addon.mjs +114 -61
  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",
@@ -54963,6 +54987,16 @@ object({
54963
54987
  powerState: string().nullable(),
54964
54988
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54965
54989
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54990
+ /**
54991
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54992
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54993
+ * when none is reported. A cleared reminder is not an unknown one.
54994
+ */
54995
+ filterCleaningDue: boolean().nullable(),
54996
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54997
+ machineCareDue: boolean().nullable(),
54998
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54999
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54966
55000
  /** Option states: null when the appliance does not expose the option or has not said. */
54967
55001
  halfLoad: boolean().nullable(),
54968
55002
  hygienePlus: boolean().nullable(),
@@ -61580,16 +61614,6 @@ var UpdateUserInputSchema = object({
61580
61614
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61581
61615
  scopes: array(TokenScopeSchema).optional()
61582
61616
  });
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
61617
  var OauthSessionSummarySchema = object({
61594
61618
  id: string(),
61595
61619
  userId: string(),
@@ -61611,8 +61635,7 @@ var TotpStatusSchema = object({
61611
61635
  confirmedAt: number().nullable()
61612
61636
  });
61613
61637
  /**
61614
- * user-management — singleton capability for user accounts and the
61615
- * legacy API-key rows.
61638
+ * user-management — singleton capability for user accounts.
61616
61639
  *
61617
61640
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61618
61641
  * — the subset check on `setUserScopes` is moot
@@ -61668,10 +61691,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61668
61691
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61669
61692
  kind: "mutation",
61670
61693
  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
61694
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61676
61695
  kind: "mutation",
61677
61696
  auth: "admin",
@@ -69184,6 +69203,12 @@ Object.freeze({
69184
69203
  addonId: null,
69185
69204
  access: "view"
69186
69205
  },
69206
+ "records.transact": {
69207
+ capName: "records",
69208
+ capScope: "system",
69209
+ addonId: null,
69210
+ access: "create"
69211
+ },
69187
69212
  "sceneMonitor.captureReference": {
69188
69213
  capName: "scene-monitor",
69189
69214
  capScope: "device",
@@ -70516,12 +70541,6 @@ Object.freeze({
70516
70541
  addonId: null,
70517
70542
  access: "view"
70518
70543
  },
70519
- "userManagement.listApiKeys": {
70520
- capName: "user-management",
70521
- capScope: "system",
70522
- addonId: null,
70523
- access: "view"
70524
- },
70525
70544
  "userManagement.listExternalIdentities": {
70526
70545
  capName: "user-management",
70527
70546
  capScope: "system",
@@ -70576,12 +70595,6 @@ Object.freeze({
70576
70595
  addonId: null,
70577
70596
  access: "create"
70578
70597
  },
70579
- "userManagement.revokeApiKey": {
70580
- capName: "user-management",
70581
- capScope: "system",
70582
- addonId: null,
70583
- access: "delete"
70584
- },
70585
70598
  "userManagement.revokeOauthSession": {
70586
70599
  capName: "user-management",
70587
70600
  capScope: "system",
@@ -74153,9 +74166,13 @@ new Map(Object.entries({
74153
74166
  "stream-online": "device-events",
74154
74167
  "stream-offline": "device-events",
74155
74168
  "detection-blind": "device-events",
74169
+ "motion-noisy": "device-events",
74170
+ "motion-calm": "device-events",
74156
74171
  "recording-stalled": "device-events",
74157
74172
  "recording-healthy": "device-events",
74158
74173
  "recording-degraded": "device-events",
74174
+ "device-attention-required": "device-events",
74175
+ "device-attention-resolved": "device-events",
74159
74176
  "node-online": "system",
74160
74177
  "node-offline": "system",
74161
74178
  "node-restarting": "system",
@@ -74238,6 +74255,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74238
74255
  label: "Detecting nothing",
74239
74256
  kinds: ["detection-blind"]
74240
74257
  },
74258
+ {
74259
+ id: "motion-noise",
74260
+ family: "device-events",
74261
+ label: "Motion without a subject",
74262
+ kinds: ["motion-noisy", "motion-calm"]
74263
+ },
74241
74264
  {
74242
74265
  id: "recording",
74243
74266
  family: "device-events",
@@ -74248,6 +74271,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74248
74271
  "recording-degraded"
74249
74272
  ]
74250
74273
  },
74274
+ {
74275
+ id: "device-attention",
74276
+ family: "device-events",
74277
+ label: "Needs attention",
74278
+ kinds: ["device-attention-required", "device-attention-resolved"]
74279
+ },
74251
74280
  {
74252
74281
  id: "nodes",
74253
74282
  family: "system",
@@ -74387,6 +74416,7 @@ var ALERT_EPISODE = [
74387
74416
  "alert-error",
74388
74417
  "alert-critical-resolved"
74389
74418
  ];
74419
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74390
74420
  var UPDATES = [
74391
74421
  "addon-update-available",
74392
74422
  "server-update-available",
@@ -74416,9 +74446,12 @@ var DEVICE_EVENTS = [
74416
74446
  "stream-online",
74417
74447
  "stream-offline",
74418
74448
  "detection-blind",
74449
+ "motion-noisy",
74450
+ "motion-calm",
74419
74451
  "recording-stalled",
74420
74452
  "recording-healthy",
74421
74453
  "recording-degraded",
74454
+ ...DEVICE_ATTENTION,
74422
74455
  ...ALARM
74423
74456
  ];
74424
74457
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74586,7 +74619,9 @@ var STATE_SUMMARY_VARS = [
74586
74619
  [...RULE_TEXT],
74587
74620
  [...RULE_TEXT],
74588
74621
  [...RULE_TEXT],
74589
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74622
+ [...RULE_TEXT],
74623
+ [...RULE_TEXT],
74624
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74590
74625
  [...RULE_TEXT],
74591
74626
  [...RULE_TEXT],
74592
74627
  [...RULE_TEXT],
@@ -74608,11 +74643,11 @@ var STATE_SUMMARY_VARS = [
74608
74643
  [...RULE_TEXT],
74609
74644
  [...RULE_TEXT],
74610
74645
  [...RULE_TEXT],
74646
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74611
74647
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74648
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74612
74649
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74613
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74614
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74615
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74650
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74616
74651
  [...RULE_TEXT],
74617
74652
  [...RULE_TEXT],
74618
74653
  [...RULE_TEXT],
@@ -74688,6 +74723,15 @@ new Map([
74688
74723
  snapshotLabel: "Tanks low or full now",
74689
74724
  snapshotSection: "tanks"
74690
74725
  },
74726
+ {
74727
+ id: "motion-noise",
74728
+ family: "device-events",
74729
+ label: "Motion without a subject (constant / calm again)",
74730
+ bad: ["motion-noisy"],
74731
+ recovery: ["motion-calm"],
74732
+ snapshotLabel: "Cameras with constant motion now",
74733
+ snapshotSection: null
74734
+ },
74691
74735
  {
74692
74736
  id: "recording-health",
74693
74737
  family: "device-events",
@@ -74697,6 +74741,15 @@ new Map([
74697
74741
  snapshotLabel: "Recordings stalled now",
74698
74742
  snapshotSection: null
74699
74743
  },
74744
+ {
74745
+ id: "device-attention",
74746
+ family: "device-events",
74747
+ label: "Device needs attention (raised / resolved)",
74748
+ bad: ["device-attention-required"],
74749
+ recovery: ["device-attention-resolved"],
74750
+ snapshotLabel: "Devices needing attention now",
74751
+ snapshotSection: null
74752
+ },
74700
74753
  {
74701
74754
  id: "node-connectivity",
74702
74755
  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",
@@ -54936,6 +54960,16 @@ object({
54936
54960
  powerState: string().nullable(),
54937
54961
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54938
54962
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54963
+ /**
54964
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54965
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54966
+ * when none is reported. A cleared reminder is not an unknown one.
54967
+ */
54968
+ filterCleaningDue: boolean().nullable(),
54969
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54970
+ machineCareDue: boolean().nullable(),
54971
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54972
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54939
54973
  /** Option states: null when the appliance does not expose the option or has not said. */
54940
54974
  halfLoad: boolean().nullable(),
54941
54975
  hygienePlus: boolean().nullable(),
@@ -61553,16 +61587,6 @@ var UpdateUserInputSchema = object({
61553
61587
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61554
61588
  scopes: array(TokenScopeSchema).optional()
61555
61589
  });
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
61590
  var OauthSessionSummarySchema = object({
61567
61591
  id: string(),
61568
61592
  userId: string(),
@@ -61584,8 +61608,7 @@ var TotpStatusSchema = object({
61584
61608
  confirmedAt: number().nullable()
61585
61609
  });
61586
61610
  /**
61587
- * user-management — singleton capability for user accounts and the
61588
- * legacy API-key rows.
61611
+ * user-management — singleton capability for user accounts.
61589
61612
  *
61590
61613
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61591
61614
  * — the subset check on `setUserScopes` is moot
@@ -61641,10 +61664,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61641
61664
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61642
61665
  kind: "mutation",
61643
61666
  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
61667
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61649
61668
  kind: "mutation",
61650
61669
  auth: "admin",
@@ -69157,6 +69176,12 @@ Object.freeze({
69157
69176
  addonId: null,
69158
69177
  access: "view"
69159
69178
  },
69179
+ "records.transact": {
69180
+ capName: "records",
69181
+ capScope: "system",
69182
+ addonId: null,
69183
+ access: "create"
69184
+ },
69160
69185
  "sceneMonitor.captureReference": {
69161
69186
  capName: "scene-monitor",
69162
69187
  capScope: "device",
@@ -70489,12 +70514,6 @@ Object.freeze({
70489
70514
  addonId: null,
70490
70515
  access: "view"
70491
70516
  },
70492
- "userManagement.listApiKeys": {
70493
- capName: "user-management",
70494
- capScope: "system",
70495
- addonId: null,
70496
- access: "view"
70497
- },
70498
70517
  "userManagement.listExternalIdentities": {
70499
70518
  capName: "user-management",
70500
70519
  capScope: "system",
@@ -70549,12 +70568,6 @@ Object.freeze({
70549
70568
  addonId: null,
70550
70569
  access: "create"
70551
70570
  },
70552
- "userManagement.revokeApiKey": {
70553
- capName: "user-management",
70554
- capScope: "system",
70555
- addonId: null,
70556
- access: "delete"
70557
- },
70558
70571
  "userManagement.revokeOauthSession": {
70559
70572
  capName: "user-management",
70560
70573
  capScope: "system",
@@ -74126,9 +74139,13 @@ new Map(Object.entries({
74126
74139
  "stream-online": "device-events",
74127
74140
  "stream-offline": "device-events",
74128
74141
  "detection-blind": "device-events",
74142
+ "motion-noisy": "device-events",
74143
+ "motion-calm": "device-events",
74129
74144
  "recording-stalled": "device-events",
74130
74145
  "recording-healthy": "device-events",
74131
74146
  "recording-degraded": "device-events",
74147
+ "device-attention-required": "device-events",
74148
+ "device-attention-resolved": "device-events",
74132
74149
  "node-online": "system",
74133
74150
  "node-offline": "system",
74134
74151
  "node-restarting": "system",
@@ -74211,6 +74228,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74211
74228
  label: "Detecting nothing",
74212
74229
  kinds: ["detection-blind"]
74213
74230
  },
74231
+ {
74232
+ id: "motion-noise",
74233
+ family: "device-events",
74234
+ label: "Motion without a subject",
74235
+ kinds: ["motion-noisy", "motion-calm"]
74236
+ },
74214
74237
  {
74215
74238
  id: "recording",
74216
74239
  family: "device-events",
@@ -74221,6 +74244,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74221
74244
  "recording-degraded"
74222
74245
  ]
74223
74246
  },
74247
+ {
74248
+ id: "device-attention",
74249
+ family: "device-events",
74250
+ label: "Needs attention",
74251
+ kinds: ["device-attention-required", "device-attention-resolved"]
74252
+ },
74224
74253
  {
74225
74254
  id: "nodes",
74226
74255
  family: "system",
@@ -74360,6 +74389,7 @@ var ALERT_EPISODE = [
74360
74389
  "alert-error",
74361
74390
  "alert-critical-resolved"
74362
74391
  ];
74392
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74363
74393
  var UPDATES = [
74364
74394
  "addon-update-available",
74365
74395
  "server-update-available",
@@ -74389,9 +74419,12 @@ var DEVICE_EVENTS = [
74389
74419
  "stream-online",
74390
74420
  "stream-offline",
74391
74421
  "detection-blind",
74422
+ "motion-noisy",
74423
+ "motion-calm",
74392
74424
  "recording-stalled",
74393
74425
  "recording-healthy",
74394
74426
  "recording-degraded",
74427
+ ...DEVICE_ATTENTION,
74395
74428
  ...ALARM
74396
74429
  ];
74397
74430
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74559,7 +74592,9 @@ var STATE_SUMMARY_VARS = [
74559
74592
  [...RULE_TEXT],
74560
74593
  [...RULE_TEXT],
74561
74594
  [...RULE_TEXT],
74562
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74595
+ [...RULE_TEXT],
74596
+ [...RULE_TEXT],
74597
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74563
74598
  [...RULE_TEXT],
74564
74599
  [...RULE_TEXT],
74565
74600
  [...RULE_TEXT],
@@ -74581,11 +74616,11 @@ var STATE_SUMMARY_VARS = [
74581
74616
  [...RULE_TEXT],
74582
74617
  [...RULE_TEXT],
74583
74618
  [...RULE_TEXT],
74619
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74584
74620
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74621
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74585
74622
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74586
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74587
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74588
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74623
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74589
74624
  [...RULE_TEXT],
74590
74625
  [...RULE_TEXT],
74591
74626
  [...RULE_TEXT],
@@ -74661,6 +74696,15 @@ new Map([
74661
74696
  snapshotLabel: "Tanks low or full now",
74662
74697
  snapshotSection: "tanks"
74663
74698
  },
74699
+ {
74700
+ id: "motion-noise",
74701
+ family: "device-events",
74702
+ label: "Motion without a subject (constant / calm again)",
74703
+ bad: ["motion-noisy"],
74704
+ recovery: ["motion-calm"],
74705
+ snapshotLabel: "Cameras with constant motion now",
74706
+ snapshotSection: null
74707
+ },
74664
74708
  {
74665
74709
  id: "recording-health",
74666
74710
  family: "device-events",
@@ -74670,6 +74714,15 @@ new Map([
74670
74714
  snapshotLabel: "Recordings stalled now",
74671
74715
  snapshotSection: null
74672
74716
  },
74717
+ {
74718
+ id: "device-attention",
74719
+ family: "device-events",
74720
+ label: "Device needs attention (raised / resolved)",
74721
+ bad: ["device-attention-required"],
74722
+ recovery: ["device-attention-resolved"],
74723
+ snapshotLabel: "Devices needing attention now",
74724
+ snapshotSection: null
74725
+ },
74673
74726
  {
74674
74727
  id: "node-connectivity",
74675
74728
  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.616",
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",