@camstack/addon-waste-collections 0.1.22 → 0.1.23

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.
@@ -6,7 +6,7 @@ let node_fs = require("node:fs");
6
6
  let node_path = require("node:path");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_url = require("node:url");
9
- //#region ../types/dist/event-category-7pZEBmVg.mjs
9
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
10
10
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
11
11
  EventCategory["SystemBoot"] = "system.boot";
12
12
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -323,6 +323,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
323
323
  */
324
324
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
325
325
  /**
326
+ * A camera's motion source has fired constantly with no subject for an hour
327
+ * (motion duty or session count over the bar, zero detections) — it is not
328
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
329
+ * {@link PipelineMotionCalm}.
330
+ */
331
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
332
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
333
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
334
+ /**
326
335
  * Per-camera pipeline config was mutated by the orchestrator
327
336
  * (3-level settings change via `setAgentAddonDefaults` /
328
337
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5562,7 +5571,7 @@ var ZodIssueCode = {
5562
5571
  var ZodFirstPartyTypeKind;
5563
5572
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5564
5573
  //#endregion
5565
- //#region ../types/dist/sleep-CueztlR1.mjs
5574
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5566
5575
  /**
5567
5576
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5568
5577
  * window to float samples (D455).
@@ -8171,7 +8180,7 @@ var EntryDescriptorSchema = object({
8171
8180
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8172
8181
  fields: record(string(), unknown())
8173
8182
  }).strict();
8174
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8183
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8175
8184
  var RecordKindDeclarationSchema = object({
8176
8185
  database: _enum(RECORD_DATABASES).default("settings"),
8177
8186
  class: _enum(RECORD_CLASSES),
@@ -8190,14 +8199,6 @@ var RecordKindDeclarationSchema = object({
8190
8199
  secretPaths: array(string().min(1)).default([]),
8191
8200
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8192
8201
  secretArrayKeys: record(string(), string()).default({}),
8193
- /**
8194
- * RETIRED (D900): the legacy table a kind adopted from during the records
8195
- * migration. Nothing declares it any more and nothing reads it; the schema
8196
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8197
- * (an orphaned kind is never redeclared) and an addon built before the
8198
- * removal still sends it. Never set it.
8199
- */
8200
- adoptsFrom: string().min(1).optional(),
8201
8202
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8202
8203
  transactFamily: string().min(1).optional(),
8203
8204
  entry: EntryDescriptorSchema.optional()
@@ -13001,17 +13002,6 @@ object({
13001
13002
  createdAt: number(),
13002
13003
  updatedAt: number()
13003
13004
  });
13004
- object({
13005
- id: string(),
13006
- label: string(),
13007
- isAdmin: boolean().default(false),
13008
- allowedProviders: AllowedProviderSchema,
13009
- allowedDevices: AllowedDevicesSchema,
13010
- tokenHash: string(),
13011
- tokenPrefix: string(),
13012
- createdAt: number(),
13013
- lastUsedAt: number().optional()
13014
- });
13015
13005
  object({
13016
13006
  id: string(),
13017
13007
  userId: string(),
@@ -16887,16 +16877,36 @@ var RecordKindStateSchema = _enum([
16887
16877
  var DeclareKindResultSchema = object({
16888
16878
  kindId: number().int(),
16889
16879
  state: RecordKindStateSchema,
16890
- createdIndexes: array(string()),
16891
- /**
16892
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16893
- * it stays on the wire, null, because an addon built before the removal reads
16894
- * an ABSENT field as "adoption pending" and refuses to start.
16895
- */
16896
- adoptionPending: _null()
16880
+ createdIndexes: array(string())
16897
16881
  });
16898
16882
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16899
16883
  var SecretRefsList = array(string());
16884
+ /**
16885
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16886
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16887
+ */
16888
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16889
+ object({
16890
+ op: literal("put"),
16891
+ kind: RecordKindNameSchema,
16892
+ record: RecordInputSchema,
16893
+ ifRev: number().int().min(0).optional()
16894
+ }),
16895
+ object({
16896
+ op: literal("patch"),
16897
+ kind: RecordKindNameSchema,
16898
+ id: RecordIdSchema,
16899
+ data: RecordBodySchema,
16900
+ at: number().int().nullable().optional(),
16901
+ expiresAt: number().int().nullable().optional(),
16902
+ ifRev: number().int().min(1).optional()
16903
+ }),
16904
+ object({
16905
+ op: literal("delete"),
16906
+ kind: RecordKindNameSchema,
16907
+ id: RecordIdSchema
16908
+ })
16909
+ ]);
16900
16910
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16901
16911
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16902
16912
  kind: "mutation",
@@ -17003,6 +17013,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
17003
17013
  }), {
17004
17014
  kind: "mutation",
17005
17015
  auth: "admin"
17016
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17017
+ results: array(object({
17018
+ rev: number().int().nullable(),
17019
+ deleted: boolean()
17020
+ })),
17021
+ releasedRefs: SecretRefsList,
17022
+ secretRefs: SecretRefsList
17023
+ }), {
17024
+ kind: "mutation",
17025
+ auth: "admin"
17006
17026
  }), method(object({
17007
17027
  deviceId: number().int(),
17008
17028
  kinds: array(RecordKindNameSchema).optional()
@@ -42361,9 +42381,13 @@ var NcSystemEventKindSchema = _enum([
42361
42381
  "node-updating",
42362
42382
  "node-inference-unavailable",
42363
42383
  "detection-blind",
42384
+ "motion-noisy",
42385
+ "motion-calm",
42364
42386
  "recording-stalled",
42365
42387
  "recording-healthy",
42366
42388
  "recording-degraded",
42389
+ "device-attention-required",
42390
+ "device-attention-resolved",
42367
42391
  "storage-location-low",
42368
42392
  "storage-location-critical",
42369
42393
  "storage-location-ok",
@@ -54830,6 +54854,16 @@ object({
54830
54854
  powerState: string().nullable(),
54831
54855
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54832
54856
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54857
+ /**
54858
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54859
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54860
+ * when none is reported. A cleared reminder is not an unknown one.
54861
+ */
54862
+ filterCleaningDue: boolean().nullable(),
54863
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54864
+ machineCareDue: boolean().nullable(),
54865
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54866
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54833
54867
  /** Option states: null when the appliance does not expose the option or has not said. */
54834
54868
  halfLoad: boolean().nullable(),
54835
54869
  hygienePlus: boolean().nullable(),
@@ -61447,16 +61481,6 @@ var UpdateUserInputSchema = object({
61447
61481
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61448
61482
  scopes: array(TokenScopeSchema).optional()
61449
61483
  });
61450
- var ApiKeySummarySchema = object({
61451
- id: string(),
61452
- label: string(),
61453
- isAdmin: boolean().default(false),
61454
- allowedProviders: union([array(string()), literal("*")]).optional(),
61455
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61456
- tokenPrefix: string(),
61457
- createdAt: number(),
61458
- lastUsedAt: number().optional()
61459
- });
61460
61484
  var OauthSessionSummarySchema = object({
61461
61485
  id: string(),
61462
61486
  userId: string(),
@@ -61478,8 +61502,7 @@ var TotpStatusSchema = object({
61478
61502
  confirmedAt: number().nullable()
61479
61503
  });
61480
61504
  /**
61481
- * user-management — singleton capability for user accounts and the
61482
- * legacy API-key rows.
61505
+ * user-management — singleton capability for user accounts.
61483
61506
  *
61484
61507
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61485
61508
  * — the subset check on `setUserScopes` is moot
@@ -61535,10 +61558,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61535
61558
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61536
61559
  kind: "mutation",
61537
61560
  access: "view"
61538
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61539
- kind: "mutation",
61540
- auth: "admin",
61541
- access: "delete"
61542
61561
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61543
61562
  kind: "mutation",
61544
61563
  auth: "admin",
@@ -69051,6 +69070,12 @@ Object.freeze({
69051
69070
  addonId: null,
69052
69071
  access: "view"
69053
69072
  },
69073
+ "records.transact": {
69074
+ capName: "records",
69075
+ capScope: "system",
69076
+ addonId: null,
69077
+ access: "create"
69078
+ },
69054
69079
  "sceneMonitor.captureReference": {
69055
69080
  capName: "scene-monitor",
69056
69081
  capScope: "device",
@@ -70383,12 +70408,6 @@ Object.freeze({
70383
70408
  addonId: null,
70384
70409
  access: "view"
70385
70410
  },
70386
- "userManagement.listApiKeys": {
70387
- capName: "user-management",
70388
- capScope: "system",
70389
- addonId: null,
70390
- access: "view"
70391
- },
70392
70411
  "userManagement.listExternalIdentities": {
70393
70412
  capName: "user-management",
70394
70413
  capScope: "system",
@@ -70443,12 +70462,6 @@ Object.freeze({
70443
70462
  addonId: null,
70444
70463
  access: "create"
70445
70464
  },
70446
- "userManagement.revokeApiKey": {
70447
- capName: "user-management",
70448
- capScope: "system",
70449
- addonId: null,
70450
- access: "delete"
70451
- },
70452
70465
  "userManagement.revokeOauthSession": {
70453
70466
  capName: "user-management",
70454
70467
  capScope: "system",
@@ -73813,9 +73826,13 @@ new Map(Object.entries({
73813
73826
  "stream-online": "device-events",
73814
73827
  "stream-offline": "device-events",
73815
73828
  "detection-blind": "device-events",
73829
+ "motion-noisy": "device-events",
73830
+ "motion-calm": "device-events",
73816
73831
  "recording-stalled": "device-events",
73817
73832
  "recording-healthy": "device-events",
73818
73833
  "recording-degraded": "device-events",
73834
+ "device-attention-required": "device-events",
73835
+ "device-attention-resolved": "device-events",
73819
73836
  "node-online": "system",
73820
73837
  "node-offline": "system",
73821
73838
  "node-restarting": "system",
@@ -73898,6 +73915,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73898
73915
  label: "Detecting nothing",
73899
73916
  kinds: ["detection-blind"]
73900
73917
  },
73918
+ {
73919
+ id: "motion-noise",
73920
+ family: "device-events",
73921
+ label: "Motion without a subject",
73922
+ kinds: ["motion-noisy", "motion-calm"]
73923
+ },
73901
73924
  {
73902
73925
  id: "recording",
73903
73926
  family: "device-events",
@@ -73908,6 +73931,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73908
73931
  "recording-degraded"
73909
73932
  ]
73910
73933
  },
73934
+ {
73935
+ id: "device-attention",
73936
+ family: "device-events",
73937
+ label: "Needs attention",
73938
+ kinds: ["device-attention-required", "device-attention-resolved"]
73939
+ },
73911
73940
  {
73912
73941
  id: "nodes",
73913
73942
  family: "system",
@@ -74047,6 +74076,7 @@ var ALERT_EPISODE = [
74047
74076
  "alert-error",
74048
74077
  "alert-critical-resolved"
74049
74078
  ];
74079
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74050
74080
  var UPDATES = [
74051
74081
  "addon-update-available",
74052
74082
  "server-update-available",
@@ -74076,9 +74106,12 @@ var DEVICE_EVENTS = [
74076
74106
  "stream-online",
74077
74107
  "stream-offline",
74078
74108
  "detection-blind",
74109
+ "motion-noisy",
74110
+ "motion-calm",
74079
74111
  "recording-stalled",
74080
74112
  "recording-healthy",
74081
74113
  "recording-degraded",
74114
+ ...DEVICE_ATTENTION,
74082
74115
  ...ALARM
74083
74116
  ];
74084
74117
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74246,7 +74279,9 @@ var STATE_SUMMARY_VARS = [
74246
74279
  [...RULE_TEXT],
74247
74280
  [...RULE_TEXT],
74248
74281
  [...RULE_TEXT],
74249
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74282
+ [...RULE_TEXT],
74283
+ [...RULE_TEXT],
74284
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74250
74285
  [...RULE_TEXT],
74251
74286
  [...RULE_TEXT],
74252
74287
  [...RULE_TEXT],
@@ -74268,11 +74303,11 @@ var STATE_SUMMARY_VARS = [
74268
74303
  [...RULE_TEXT],
74269
74304
  [...RULE_TEXT],
74270
74305
  [...RULE_TEXT],
74306
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74271
74307
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74308
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74272
74309
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74273
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74274
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74275
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74310
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74276
74311
  [...RULE_TEXT],
74277
74312
  [...RULE_TEXT],
74278
74313
  [...RULE_TEXT],
@@ -74348,6 +74383,15 @@ new Map([
74348
74383
  snapshotLabel: "Tanks low or full now",
74349
74384
  snapshotSection: "tanks"
74350
74385
  },
74386
+ {
74387
+ id: "motion-noise",
74388
+ family: "device-events",
74389
+ label: "Motion without a subject (constant / calm again)",
74390
+ bad: ["motion-noisy"],
74391
+ recovery: ["motion-calm"],
74392
+ snapshotLabel: "Cameras with constant motion now",
74393
+ snapshotSection: null
74394
+ },
74351
74395
  {
74352
74396
  id: "recording-health",
74353
74397
  family: "device-events",
@@ -74357,6 +74401,15 @@ new Map([
74357
74401
  snapshotLabel: "Recordings stalled now",
74358
74402
  snapshotSection: null
74359
74403
  },
74404
+ {
74405
+ id: "device-attention",
74406
+ family: "device-events",
74407
+ label: "Device needs attention (raised / resolved)",
74408
+ bad: ["device-attention-required"],
74409
+ recovery: ["device-attention-resolved"],
74410
+ snapshotLabel: "Devices needing attention now",
74411
+ snapshotSection: null
74412
+ },
74360
74413
  {
74361
74414
  id: "node-connectivity",
74362
74415
  family: "system",
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { spawn } from "node:child_process";
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).
@@ -8167,7 +8176,7 @@ var EntryDescriptorSchema = object({
8167
8176
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8168
8177
  fields: record(string(), unknown())
8169
8178
  }).strict();
8170
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8179
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8171
8180
  var RecordKindDeclarationSchema = object({
8172
8181
  database: _enum(RECORD_DATABASES).default("settings"),
8173
8182
  class: _enum(RECORD_CLASSES),
@@ -8186,14 +8195,6 @@ var RecordKindDeclarationSchema = object({
8186
8195
  secretPaths: array(string().min(1)).default([]),
8187
8196
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8188
8197
  secretArrayKeys: record(string(), string()).default({}),
8189
- /**
8190
- * RETIRED (D900): the legacy table a kind adopted from during the records
8191
- * migration. Nothing declares it any more and nothing reads it; the schema
8192
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8193
- * (an orphaned kind is never redeclared) and an addon built before the
8194
- * removal still sends it. Never set it.
8195
- */
8196
- adoptsFrom: string().min(1).optional(),
8197
8198
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8198
8199
  transactFamily: string().min(1).optional(),
8199
8200
  entry: EntryDescriptorSchema.optional()
@@ -12997,17 +12998,6 @@ object({
12997
12998
  createdAt: number(),
12998
12999
  updatedAt: number()
12999
13000
  });
13000
- object({
13001
- id: string(),
13002
- label: string(),
13003
- isAdmin: boolean().default(false),
13004
- allowedProviders: AllowedProviderSchema,
13005
- allowedDevices: AllowedDevicesSchema,
13006
- tokenHash: string(),
13007
- tokenPrefix: string(),
13008
- createdAt: number(),
13009
- lastUsedAt: number().optional()
13010
- });
13011
13001
  object({
13012
13002
  id: string(),
13013
13003
  userId: string(),
@@ -16883,16 +16873,36 @@ var RecordKindStateSchema = _enum([
16883
16873
  var DeclareKindResultSchema = object({
16884
16874
  kindId: number().int(),
16885
16875
  state: RecordKindStateSchema,
16886
- createdIndexes: array(string()),
16887
- /**
16888
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16889
- * it stays on the wire, null, because an addon built before the removal reads
16890
- * an ABSENT field as "adoption pending" and refuses to start.
16891
- */
16892
- adoptionPending: _null()
16876
+ createdIndexes: array(string())
16893
16877
  });
16894
16878
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16895
16879
  var SecretRefsList = array(string());
16880
+ /**
16881
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16882
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16883
+ */
16884
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16885
+ object({
16886
+ op: literal("put"),
16887
+ kind: RecordKindNameSchema,
16888
+ record: RecordInputSchema,
16889
+ ifRev: number().int().min(0).optional()
16890
+ }),
16891
+ object({
16892
+ op: literal("patch"),
16893
+ kind: RecordKindNameSchema,
16894
+ id: RecordIdSchema,
16895
+ data: RecordBodySchema,
16896
+ at: number().int().nullable().optional(),
16897
+ expiresAt: number().int().nullable().optional(),
16898
+ ifRev: number().int().min(1).optional()
16899
+ }),
16900
+ object({
16901
+ op: literal("delete"),
16902
+ kind: RecordKindNameSchema,
16903
+ id: RecordIdSchema
16904
+ })
16905
+ ]);
16896
16906
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16897
16907
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16898
16908
  kind: "mutation",
@@ -16999,6 +17009,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16999
17009
  }), {
17000
17010
  kind: "mutation",
17001
17011
  auth: "admin"
17012
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17013
+ results: array(object({
17014
+ rev: number().int().nullable(),
17015
+ deleted: boolean()
17016
+ })),
17017
+ releasedRefs: SecretRefsList,
17018
+ secretRefs: SecretRefsList
17019
+ }), {
17020
+ kind: "mutation",
17021
+ auth: "admin"
17002
17022
  }), method(object({
17003
17023
  deviceId: number().int(),
17004
17024
  kinds: array(RecordKindNameSchema).optional()
@@ -42357,9 +42377,13 @@ var NcSystemEventKindSchema = _enum([
42357
42377
  "node-updating",
42358
42378
  "node-inference-unavailable",
42359
42379
  "detection-blind",
42380
+ "motion-noisy",
42381
+ "motion-calm",
42360
42382
  "recording-stalled",
42361
42383
  "recording-healthy",
42362
42384
  "recording-degraded",
42385
+ "device-attention-required",
42386
+ "device-attention-resolved",
42363
42387
  "storage-location-low",
42364
42388
  "storage-location-critical",
42365
42389
  "storage-location-ok",
@@ -54826,6 +54850,16 @@ object({
54826
54850
  powerState: string().nullable(),
54827
54851
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54828
54852
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54853
+ /**
54854
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54855
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54856
+ * when none is reported. A cleared reminder is not an unknown one.
54857
+ */
54858
+ filterCleaningDue: boolean().nullable(),
54859
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54860
+ machineCareDue: boolean().nullable(),
54861
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54862
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54829
54863
  /** Option states: null when the appliance does not expose the option or has not said. */
54830
54864
  halfLoad: boolean().nullable(),
54831
54865
  hygienePlus: boolean().nullable(),
@@ -61443,16 +61477,6 @@ var UpdateUserInputSchema = object({
61443
61477
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61444
61478
  scopes: array(TokenScopeSchema).optional()
61445
61479
  });
61446
- var ApiKeySummarySchema = object({
61447
- id: string(),
61448
- label: string(),
61449
- isAdmin: boolean().default(false),
61450
- allowedProviders: union([array(string()), literal("*")]).optional(),
61451
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61452
- tokenPrefix: string(),
61453
- createdAt: number(),
61454
- lastUsedAt: number().optional()
61455
- });
61456
61480
  var OauthSessionSummarySchema = object({
61457
61481
  id: string(),
61458
61482
  userId: string(),
@@ -61474,8 +61498,7 @@ var TotpStatusSchema = object({
61474
61498
  confirmedAt: number().nullable()
61475
61499
  });
61476
61500
  /**
61477
- * user-management — singleton capability for user accounts and the
61478
- * legacy API-key rows.
61501
+ * user-management — singleton capability for user accounts.
61479
61502
  *
61480
61503
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61481
61504
  * — the subset check on `setUserScopes` is moot
@@ -61531,10 +61554,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61531
61554
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61532
61555
  kind: "mutation",
61533
61556
  access: "view"
61534
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61535
- kind: "mutation",
61536
- auth: "admin",
61537
- access: "delete"
61538
61557
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61539
61558
  kind: "mutation",
61540
61559
  auth: "admin",
@@ -69047,6 +69066,12 @@ Object.freeze({
69047
69066
  addonId: null,
69048
69067
  access: "view"
69049
69068
  },
69069
+ "records.transact": {
69070
+ capName: "records",
69071
+ capScope: "system",
69072
+ addonId: null,
69073
+ access: "create"
69074
+ },
69050
69075
  "sceneMonitor.captureReference": {
69051
69076
  capName: "scene-monitor",
69052
69077
  capScope: "device",
@@ -70379,12 +70404,6 @@ Object.freeze({
70379
70404
  addonId: null,
70380
70405
  access: "view"
70381
70406
  },
70382
- "userManagement.listApiKeys": {
70383
- capName: "user-management",
70384
- capScope: "system",
70385
- addonId: null,
70386
- access: "view"
70387
- },
70388
70407
  "userManagement.listExternalIdentities": {
70389
70408
  capName: "user-management",
70390
70409
  capScope: "system",
@@ -70439,12 +70458,6 @@ Object.freeze({
70439
70458
  addonId: null,
70440
70459
  access: "create"
70441
70460
  },
70442
- "userManagement.revokeApiKey": {
70443
- capName: "user-management",
70444
- capScope: "system",
70445
- addonId: null,
70446
- access: "delete"
70447
- },
70448
70461
  "userManagement.revokeOauthSession": {
70449
70462
  capName: "user-management",
70450
70463
  capScope: "system",
@@ -73809,9 +73822,13 @@ new Map(Object.entries({
73809
73822
  "stream-online": "device-events",
73810
73823
  "stream-offline": "device-events",
73811
73824
  "detection-blind": "device-events",
73825
+ "motion-noisy": "device-events",
73826
+ "motion-calm": "device-events",
73812
73827
  "recording-stalled": "device-events",
73813
73828
  "recording-healthy": "device-events",
73814
73829
  "recording-degraded": "device-events",
73830
+ "device-attention-required": "device-events",
73831
+ "device-attention-resolved": "device-events",
73815
73832
  "node-online": "system",
73816
73833
  "node-offline": "system",
73817
73834
  "node-restarting": "system",
@@ -73894,6 +73911,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73894
73911
  label: "Detecting nothing",
73895
73912
  kinds: ["detection-blind"]
73896
73913
  },
73914
+ {
73915
+ id: "motion-noise",
73916
+ family: "device-events",
73917
+ label: "Motion without a subject",
73918
+ kinds: ["motion-noisy", "motion-calm"]
73919
+ },
73897
73920
  {
73898
73921
  id: "recording",
73899
73922
  family: "device-events",
@@ -73904,6 +73927,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73904
73927
  "recording-degraded"
73905
73928
  ]
73906
73929
  },
73930
+ {
73931
+ id: "device-attention",
73932
+ family: "device-events",
73933
+ label: "Needs attention",
73934
+ kinds: ["device-attention-required", "device-attention-resolved"]
73935
+ },
73907
73936
  {
73908
73937
  id: "nodes",
73909
73938
  family: "system",
@@ -74043,6 +74072,7 @@ var ALERT_EPISODE = [
74043
74072
  "alert-error",
74044
74073
  "alert-critical-resolved"
74045
74074
  ];
74075
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74046
74076
  var UPDATES = [
74047
74077
  "addon-update-available",
74048
74078
  "server-update-available",
@@ -74072,9 +74102,12 @@ var DEVICE_EVENTS = [
74072
74102
  "stream-online",
74073
74103
  "stream-offline",
74074
74104
  "detection-blind",
74105
+ "motion-noisy",
74106
+ "motion-calm",
74075
74107
  "recording-stalled",
74076
74108
  "recording-healthy",
74077
74109
  "recording-degraded",
74110
+ ...DEVICE_ATTENTION,
74078
74111
  ...ALARM
74079
74112
  ];
74080
74113
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74242,7 +74275,9 @@ var STATE_SUMMARY_VARS = [
74242
74275
  [...RULE_TEXT],
74243
74276
  [...RULE_TEXT],
74244
74277
  [...RULE_TEXT],
74245
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74278
+ [...RULE_TEXT],
74279
+ [...RULE_TEXT],
74280
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74246
74281
  [...RULE_TEXT],
74247
74282
  [...RULE_TEXT],
74248
74283
  [...RULE_TEXT],
@@ -74264,11 +74299,11 @@ var STATE_SUMMARY_VARS = [
74264
74299
  [...RULE_TEXT],
74265
74300
  [...RULE_TEXT],
74266
74301
  [...RULE_TEXT],
74302
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74267
74303
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74304
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74268
74305
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74269
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74270
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74271
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74306
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74272
74307
  [...RULE_TEXT],
74273
74308
  [...RULE_TEXT],
74274
74309
  [...RULE_TEXT],
@@ -74344,6 +74379,15 @@ new Map([
74344
74379
  snapshotLabel: "Tanks low or full now",
74345
74380
  snapshotSection: "tanks"
74346
74381
  },
74382
+ {
74383
+ id: "motion-noise",
74384
+ family: "device-events",
74385
+ label: "Motion without a subject (constant / calm again)",
74386
+ bad: ["motion-noisy"],
74387
+ recovery: ["motion-calm"],
74388
+ snapshotLabel: "Cameras with constant motion now",
74389
+ snapshotSection: null
74390
+ },
74347
74391
  {
74348
74392
  id: "recording-health",
74349
74393
  family: "device-events",
@@ -74353,6 +74397,15 @@ new Map([
74353
74397
  snapshotLabel: "Recordings stalled now",
74354
74398
  snapshotSection: null
74355
74399
  },
74400
+ {
74401
+ id: "device-attention",
74402
+ family: "device-events",
74403
+ label: "Device needs attention (raised / resolved)",
74404
+ bad: ["device-attention-required"],
74405
+ recovery: ["device-attention-resolved"],
74406
+ snapshotLabel: "Devices needing attention now",
74407
+ snapshotSection: null
74408
+ },
74356
74409
  {
74357
74410
  id: "node-connectivity",
74358
74411
  family: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-waste-collections",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "Waste collection schedules via the vendored HACS waste_collection_schedule Python core — full source catalog as calendar-source.",
5
5
  "keywords": [
6
6
  "camstack",