@camstack/addon-google-services 0.2.23 → 0.2.25

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.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  let node_crypto = require("node:crypto");
6
- //#region ../types/dist/event-category-DOl51-Ij.mjs
6
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
7
7
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
8
8
  EventCategory["SystemBoot"] = "system.boot";
9
9
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -320,6 +320,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
320
320
  */
321
321
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
322
322
  /**
323
+ * A camera's motion source has fired constantly with no subject for an hour
324
+ * (motion duty or session count over the bar, zero detections) — it is not
325
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
326
+ * {@link PipelineMotionCalm}.
327
+ */
328
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
329
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
330
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
331
+ /**
323
332
  * Per-camera pipeline config was mutated by the orchestrator
324
333
  * (3-level settings change via `setAgentAddonDefaults` /
325
334
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -691,6 +700,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
691
700
  EventCategory["BackupRestored"] = "backup.restored";
692
701
  EventCategory["NotificationDispatched"] = "notification.dispatched";
693
702
  EventCategory["NotificationFailed"] = "notification.failed";
703
+ /**
704
+ * A notification rule that cannot work (D905): its stored row does not load,
705
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
706
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
707
+ */
708
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
709
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
710
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
694
711
  EventCategory["DeviceUpdated"] = "device.updated";
695
712
  /**
696
713
  * Transport-level connectivity. Emitted by the device driver when
@@ -5551,7 +5568,7 @@ var ZodIssueCode = {
5551
5568
  var ZodFirstPartyTypeKind;
5552
5569
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5553
5570
  //#endregion
5554
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5571
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5555
5572
  /**
5556
5573
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5557
5574
  * window to float samples (D455).
@@ -8150,7 +8167,7 @@ var EntryDescriptorSchema = object({
8150
8167
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8151
8168
  fields: record(string(), unknown())
8152
8169
  }).strict();
8153
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8170
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8154
8171
  var RecordKindDeclarationSchema = object({
8155
8172
  database: _enum(RECORD_DATABASES).default("settings"),
8156
8173
  class: _enum(RECORD_CLASSES),
@@ -8169,14 +8186,6 @@ var RecordKindDeclarationSchema = object({
8169
8186
  secretPaths: array(string().min(1)).default([]),
8170
8187
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8171
8188
  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
8189
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8181
8190
  transactFamily: string().min(1).optional(),
8182
8191
  entry: EntryDescriptorSchema.optional()
@@ -13089,17 +13098,6 @@ object({
13089
13098
  createdAt: number(),
13090
13099
  updatedAt: number()
13091
13100
  });
13092
- object({
13093
- id: string(),
13094
- label: string(),
13095
- isAdmin: boolean().default(false),
13096
- allowedProviders: AllowedProviderSchema,
13097
- allowedDevices: AllowedDevicesSchema,
13098
- tokenHash: string(),
13099
- tokenPrefix: string(),
13100
- createdAt: number(),
13101
- lastUsedAt: number().optional()
13102
- });
13103
13101
  object({
13104
13102
  id: string(),
13105
13103
  userId: string(),
@@ -17043,16 +17041,36 @@ var RecordKindStateSchema = _enum([
17043
17041
  var DeclareKindResultSchema = object({
17044
17042
  kindId: number().int(),
17045
17043
  state: RecordKindStateSchema,
17046
- createdIndexes: array(string()),
17047
- /**
17048
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
17049
- * it stays on the wire, null, because an addon built before the removal reads
17050
- * an ABSENT field as "adoption pending" and refuses to start.
17051
- */
17052
- adoptionPending: _null()
17044
+ createdIndexes: array(string())
17053
17045
  });
17054
17046
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
17055
17047
  var SecretRefsList = array(string());
17048
+ /**
17049
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
17050
+ * All ops of one call share ONE database file and ONE `transactFamily`.
17051
+ */
17052
+ var RecordTransactOpSchema = discriminatedUnion("op", [
17053
+ object({
17054
+ op: literal("put"),
17055
+ kind: RecordKindNameSchema,
17056
+ record: RecordInputSchema,
17057
+ ifRev: number().int().min(0).optional()
17058
+ }),
17059
+ object({
17060
+ op: literal("patch"),
17061
+ kind: RecordKindNameSchema,
17062
+ id: RecordIdSchema,
17063
+ data: RecordBodySchema,
17064
+ at: number().int().nullable().optional(),
17065
+ expiresAt: number().int().nullable().optional(),
17066
+ ifRev: number().int().min(1).optional()
17067
+ }),
17068
+ object({
17069
+ op: literal("delete"),
17070
+ kind: RecordKindNameSchema,
17071
+ id: RecordIdSchema
17072
+ })
17073
+ ]);
17056
17074
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
17057
17075
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
17058
17076
  kind: "mutation",
@@ -17159,6 +17177,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
17159
17177
  }), {
17160
17178
  kind: "mutation",
17161
17179
  auth: "admin"
17180
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17181
+ results: array(object({
17182
+ rev: number().int().nullable(),
17183
+ deleted: boolean()
17184
+ })),
17185
+ releasedRefs: SecretRefsList,
17186
+ secretRefs: SecretRefsList
17187
+ }), {
17188
+ kind: "mutation",
17189
+ auth: "admin"
17162
17190
  }), method(object({
17163
17191
  deviceId: number().int(),
17164
17192
  kinds: array(RecordKindNameSchema).optional()
@@ -42517,9 +42545,13 @@ var NcSystemEventKindSchema = _enum([
42517
42545
  "node-updating",
42518
42546
  "node-inference-unavailable",
42519
42547
  "detection-blind",
42548
+ "motion-noisy",
42549
+ "motion-calm",
42520
42550
  "recording-stalled",
42521
42551
  "recording-healthy",
42522
42552
  "recording-degraded",
42553
+ "device-attention-required",
42554
+ "device-attention-resolved",
42523
42555
  "storage-location-low",
42524
42556
  "storage-location-critical",
42525
42557
  "storage-location-ok",
@@ -42543,6 +42575,8 @@ var NcSystemEventKindSchema = _enum([
42543
42575
  "alert-critical",
42544
42576
  "alert-error",
42545
42577
  "alert-critical-resolved",
42578
+ "rule-broken",
42579
+ "rule-repaired",
42546
42580
  "camera-online",
42547
42581
  "camera-offline",
42548
42582
  "camera-disabled",
@@ -54997,6 +55031,16 @@ object({
54997
55031
  powerState: string().nullable(),
54998
55032
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54999
55033
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55034
+ /**
55035
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55036
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55037
+ * when none is reported. A cleared reminder is not an unknown one.
55038
+ */
55039
+ filterCleaningDue: boolean().nullable(),
55040
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55041
+ machineCareDue: boolean().nullable(),
55042
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55043
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55000
55044
  /** Option states: null when the appliance does not expose the option or has not said. */
55001
55045
  halfLoad: boolean().nullable(),
55002
55046
  hygienePlus: boolean().nullable(),
@@ -61614,16 +61658,6 @@ var UpdateUserInputSchema = object({
61614
61658
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61615
61659
  scopes: array(TokenScopeSchema).optional()
61616
61660
  });
61617
- var ApiKeySummarySchema = object({
61618
- id: string(),
61619
- label: string(),
61620
- isAdmin: boolean().default(false),
61621
- allowedProviders: union([array(string()), literal("*")]).optional(),
61622
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61623
- tokenPrefix: string(),
61624
- createdAt: number(),
61625
- lastUsedAt: number().optional()
61626
- });
61627
61661
  var OauthSessionSummarySchema = object({
61628
61662
  id: string(),
61629
61663
  userId: string(),
@@ -61645,8 +61679,7 @@ var TotpStatusSchema = object({
61645
61679
  confirmedAt: number().nullable()
61646
61680
  });
61647
61681
  /**
61648
- * user-management — singleton capability for user accounts and the
61649
- * legacy API-key rows.
61682
+ * user-management — singleton capability for user accounts.
61650
61683
  *
61651
61684
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61652
61685
  * — the subset check on `setUserScopes` is moot
@@ -61702,10 +61735,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61702
61735
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61703
61736
  kind: "mutation",
61704
61737
  access: "view"
61705
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61706
- kind: "mutation",
61707
- auth: "admin",
61708
- access: "delete"
61709
61738
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61710
61739
  kind: "mutation",
61711
61740
  auth: "admin",
@@ -69218,6 +69247,12 @@ Object.freeze({
69218
69247
  addonId: null,
69219
69248
  access: "view"
69220
69249
  },
69250
+ "records.transact": {
69251
+ capName: "records",
69252
+ capScope: "system",
69253
+ addonId: null,
69254
+ access: "create"
69255
+ },
69221
69256
  "sceneMonitor.captureReference": {
69222
69257
  capName: "scene-monitor",
69223
69258
  capScope: "device",
@@ -70550,12 +70585,6 @@ Object.freeze({
70550
70585
  addonId: null,
70551
70586
  access: "view"
70552
70587
  },
70553
- "userManagement.listApiKeys": {
70554
- capName: "user-management",
70555
- capScope: "system",
70556
- addonId: null,
70557
- access: "view"
70558
- },
70559
70588
  "userManagement.listExternalIdentities": {
70560
70589
  capName: "user-management",
70561
70590
  capScope: "system",
@@ -70610,12 +70639,6 @@ Object.freeze({
70610
70639
  addonId: null,
70611
70640
  access: "create"
70612
70641
  },
70613
- "userManagement.revokeApiKey": {
70614
- capName: "user-management",
70615
- capScope: "system",
70616
- addonId: null,
70617
- access: "delete"
70618
- },
70619
70642
  "userManagement.revokeOauthSession": {
70620
70643
  capName: "user-management",
70621
70644
  capScope: "system",
@@ -73980,9 +74003,13 @@ new Map(Object.entries({
73980
74003
  "stream-online": "device-events",
73981
74004
  "stream-offline": "device-events",
73982
74005
  "detection-blind": "device-events",
74006
+ "motion-noisy": "device-events",
74007
+ "motion-calm": "device-events",
73983
74008
  "recording-stalled": "device-events",
73984
74009
  "recording-healthy": "device-events",
73985
74010
  "recording-degraded": "device-events",
74011
+ "device-attention-required": "device-events",
74012
+ "device-attention-resolved": "device-events",
73986
74013
  "node-online": "system",
73987
74014
  "node-offline": "system",
73988
74015
  "node-restarting": "system",
@@ -73999,6 +74026,8 @@ new Map(Object.entries({
73999
74026
  "alert-critical": "system",
74000
74027
  "alert-error": "system",
74001
74028
  "alert-critical-resolved": "system",
74029
+ "rule-broken": "system",
74030
+ "rule-repaired": "system",
74002
74031
  "storage-location-low": "system",
74003
74032
  "storage-location-critical": "system",
74004
74033
  "storage-location-ok": "system",
@@ -74063,6 +74092,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74063
74092
  label: "Detecting nothing",
74064
74093
  kinds: ["detection-blind"]
74065
74094
  },
74095
+ {
74096
+ id: "motion-noise",
74097
+ family: "device-events",
74098
+ label: "Motion without a subject",
74099
+ kinds: ["motion-noisy", "motion-calm"]
74100
+ },
74066
74101
  {
74067
74102
  id: "recording",
74068
74103
  family: "device-events",
@@ -74073,6 +74108,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74073
74108
  "recording-degraded"
74074
74109
  ]
74075
74110
  },
74111
+ {
74112
+ id: "device-attention",
74113
+ family: "device-events",
74114
+ label: "Needs attention",
74115
+ kinds: ["device-attention-required", "device-attention-resolved"]
74116
+ },
74076
74117
  {
74077
74118
  id: "nodes",
74078
74119
  family: "system",
@@ -74133,6 +74174,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74133
74174
  "alert-critical-resolved"
74134
74175
  ]
74135
74176
  },
74177
+ {
74178
+ id: "rule-health",
74179
+ family: "system",
74180
+ label: "Notification rules",
74181
+ kinds: ["rule-broken", "rule-repaired"]
74182
+ },
74136
74183
  {
74137
74184
  id: "alarm",
74138
74185
  family: "alarm",
@@ -74206,6 +74253,7 @@ var ALERT_EPISODE = [
74206
74253
  "alert-error",
74207
74254
  "alert-critical-resolved"
74208
74255
  ];
74256
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74209
74257
  var UPDATES = [
74210
74258
  "addon-update-available",
74211
74259
  "server-update-available",
@@ -74235,9 +74283,12 @@ var DEVICE_EVENTS = [
74235
74283
  "stream-online",
74236
74284
  "stream-offline",
74237
74285
  "detection-blind",
74286
+ "motion-noisy",
74287
+ "motion-calm",
74238
74288
  "recording-stalled",
74239
74289
  "recording-healthy",
74240
74290
  "recording-degraded",
74291
+ ...DEVICE_ATTENTION,
74241
74292
  ...ALARM
74242
74293
  ];
74243
74294
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74405,7 +74456,13 @@ var STATE_SUMMARY_VARS = [
74405
74456
  [...RULE_TEXT],
74406
74457
  [...RULE_TEXT],
74407
74458
  [...RULE_TEXT],
74408
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74459
+ [...RULE_TEXT],
74460
+ [...RULE_TEXT],
74461
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74462
+ [...RULE_TEXT],
74463
+ [...RULE_TEXT],
74464
+ [...RULE_TEXT],
74465
+ [...RULE_TEXT],
74409
74466
  [...RULE_TEXT],
74410
74467
  [...RULE_TEXT],
74411
74468
  [...RULE_TEXT],
@@ -74423,11 +74480,11 @@ var STATE_SUMMARY_VARS = [
74423
74480
  [...RULE_TEXT],
74424
74481
  [...RULE_TEXT],
74425
74482
  [...RULE_TEXT],
74483
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74426
74484
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74485
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74427
74486
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74428
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74429
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74430
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74487
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74431
74488
  [...RULE_TEXT],
74432
74489
  [...RULE_TEXT],
74433
74490
  [...RULE_TEXT],
@@ -74448,6 +74505,125 @@ var STATE_SUMMARY_VARS = [
74448
74505
  [...RULE_TEXT],
74449
74506
  ...STATE_SUMMARY_VARS
74450
74507
  ];
74508
+ new Map([
74509
+ {
74510
+ id: "device-connectivity",
74511
+ family: "device-events",
74512
+ label: "Device connectivity (offline / back online)",
74513
+ bad: ["device-offline"],
74514
+ recovery: ["device-online"],
74515
+ snapshotLabel: "Devices offline now",
74516
+ snapshotSection: "device-state"
74517
+ },
74518
+ {
74519
+ id: "device-switch",
74520
+ family: "device-events",
74521
+ label: "Device switched off / back on",
74522
+ bad: ["device-disabled"],
74523
+ recovery: ["device-enabled"],
74524
+ snapshotLabel: "Devices switched off now",
74525
+ snapshotSection: "device-state"
74526
+ },
74527
+ {
74528
+ id: "stream-connectivity",
74529
+ family: "device-events",
74530
+ label: "Stream connectivity (offline / back online)",
74531
+ bad: ["stream-offline"],
74532
+ recovery: ["stream-online"],
74533
+ snapshotLabel: "Streams offline now",
74534
+ snapshotSection: "streams"
74535
+ },
74536
+ {
74537
+ id: "battery",
74538
+ family: "device-events",
74539
+ label: "Battery (low / back to normal)",
74540
+ bad: ["device-battery-low"],
74541
+ recovery: ["device-battery-normal"],
74542
+ snapshotLabel: "Batteries low now",
74543
+ snapshotSection: "battery"
74544
+ },
74545
+ {
74546
+ id: "consumables",
74547
+ family: "device-events",
74548
+ label: "Consumables (low / replaced)",
74549
+ bad: ["device-consumable-low"],
74550
+ recovery: ["device-consumable-normal"],
74551
+ snapshotLabel: "Consumables low now",
74552
+ snapshotSection: "consumables"
74553
+ },
74554
+ {
74555
+ id: "tanks",
74556
+ family: "device-events",
74557
+ label: "Tanks (low or full / back to normal)",
74558
+ bad: ["device-tank-low", "device-tank-full"],
74559
+ recovery: ["device-tank-normal"],
74560
+ snapshotLabel: "Tanks low or full now",
74561
+ snapshotSection: "tanks"
74562
+ },
74563
+ {
74564
+ id: "motion-noise",
74565
+ family: "device-events",
74566
+ label: "Motion without a subject (constant / calm again)",
74567
+ bad: ["motion-noisy"],
74568
+ recovery: ["motion-calm"],
74569
+ snapshotLabel: "Cameras with constant motion now",
74570
+ snapshotSection: null
74571
+ },
74572
+ {
74573
+ id: "recording-health",
74574
+ family: "device-events",
74575
+ label: "Recording health (stalled or degraded / recording again)",
74576
+ bad: ["recording-stalled", "recording-degraded"],
74577
+ recovery: ["recording-healthy"],
74578
+ snapshotLabel: "Recordings stalled now",
74579
+ snapshotSection: null
74580
+ },
74581
+ {
74582
+ id: "device-attention",
74583
+ family: "device-events",
74584
+ label: "Device needs attention (raised / resolved)",
74585
+ bad: ["device-attention-required"],
74586
+ recovery: ["device-attention-resolved"],
74587
+ snapshotLabel: "Devices needing attention now",
74588
+ snapshotSection: null
74589
+ },
74590
+ {
74591
+ id: "node-connectivity",
74592
+ family: "system",
74593
+ label: "Node connectivity (offline / back online)",
74594
+ bad: ["node-offline"],
74595
+ recovery: ["node-online"],
74596
+ snapshotLabel: "Nodes offline now",
74597
+ snapshotSection: "nodes"
74598
+ },
74599
+ {
74600
+ id: "storage-space",
74601
+ family: "system",
74602
+ label: "Storage space (low or critical / ok again)",
74603
+ bad: ["storage-location-low", "storage-location-critical"],
74604
+ recovery: ["storage-location-ok"],
74605
+ snapshotLabel: "Storage locations low now",
74606
+ snapshotSection: null
74607
+ },
74608
+ {
74609
+ id: "critical-alerts",
74610
+ family: "system",
74611
+ label: "Critical alerts (raised / resolved)",
74612
+ bad: ["alert-critical"],
74613
+ recovery: ["alert-critical-resolved"],
74614
+ snapshotLabel: "Critical alerts open now",
74615
+ snapshotSection: null
74616
+ },
74617
+ {
74618
+ id: "rule-health",
74619
+ family: "system",
74620
+ label: "Rule health (broken / repaired)",
74621
+ bad: ["rule-broken"],
74622
+ recovery: ["rule-repaired"],
74623
+ snapshotLabel: "Notification rules broken now",
74624
+ snapshotSection: null
74625
+ }
74626
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
74451
74627
  new Set([
74452
74628
  "disarmed",
74453
74629
  "armed_home",
@@ -1,5 +1,5 @@
1
1
  import { randomBytes } from "node:crypto";
2
- //#region ../types/dist/event-category-DOl51-Ij.mjs
2
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -316,6 +316,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
316
316
  */
317
317
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
318
318
  /**
319
+ * A camera's motion source has fired constantly with no subject for an hour
320
+ * (motion duty or session count over the bar, zero detections) — it is not
321
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
322
+ * {@link PipelineMotionCalm}.
323
+ */
324
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
325
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
326
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
327
+ /**
319
328
  * Per-camera pipeline config was mutated by the orchestrator
320
329
  * (3-level settings change via `setAgentAddonDefaults` /
321
330
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -687,6 +696,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
687
696
  EventCategory["BackupRestored"] = "backup.restored";
688
697
  EventCategory["NotificationDispatched"] = "notification.dispatched";
689
698
  EventCategory["NotificationFailed"] = "notification.failed";
699
+ /**
700
+ * A notification rule that cannot work (D905): its stored row does not load,
701
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
702
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
703
+ */
704
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
705
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
706
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
690
707
  EventCategory["DeviceUpdated"] = "device.updated";
691
708
  /**
692
709
  * Transport-level connectivity. Emitted by the device driver when
@@ -5547,7 +5564,7 @@ var ZodIssueCode = {
5547
5564
  var ZodFirstPartyTypeKind;
5548
5565
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5549
5566
  //#endregion
5550
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5567
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5551
5568
  /**
5552
5569
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5553
5570
  * window to float samples (D455).
@@ -8146,7 +8163,7 @@ var EntryDescriptorSchema = object({
8146
8163
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
8147
8164
  fields: record(string(), unknown())
8148
8165
  }).strict();
8149
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8166
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
8150
8167
  var RecordKindDeclarationSchema = object({
8151
8168
  database: _enum(RECORD_DATABASES).default("settings"),
8152
8169
  class: _enum(RECORD_CLASSES),
@@ -8165,14 +8182,6 @@ var RecordKindDeclarationSchema = object({
8165
8182
  secretPaths: array(string().min(1)).default([]),
8166
8183
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8167
8184
  secretArrayKeys: record(string(), string()).default({}),
8168
- /**
8169
- * RETIRED (D900): the legacy table a kind adopted from during the records
8170
- * migration. Nothing declares it any more and nothing reads it; the schema
8171
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8172
- * (an orphaned kind is never redeclared) and an addon built before the
8173
- * removal still sends it. Never set it.
8174
- */
8175
- adoptsFrom: string().min(1).optional(),
8176
8185
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8177
8186
  transactFamily: string().min(1).optional(),
8178
8187
  entry: EntryDescriptorSchema.optional()
@@ -13085,17 +13094,6 @@ object({
13085
13094
  createdAt: number(),
13086
13095
  updatedAt: number()
13087
13096
  });
13088
- object({
13089
- id: string(),
13090
- label: string(),
13091
- isAdmin: boolean().default(false),
13092
- allowedProviders: AllowedProviderSchema,
13093
- allowedDevices: AllowedDevicesSchema,
13094
- tokenHash: string(),
13095
- tokenPrefix: string(),
13096
- createdAt: number(),
13097
- lastUsedAt: number().optional()
13098
- });
13099
13097
  object({
13100
13098
  id: string(),
13101
13099
  userId: string(),
@@ -17039,16 +17037,36 @@ var RecordKindStateSchema = _enum([
17039
17037
  var DeclareKindResultSchema = object({
17040
17038
  kindId: number().int(),
17041
17039
  state: RecordKindStateSchema,
17042
- createdIndexes: array(string()),
17043
- /**
17044
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
17045
- * it stays on the wire, null, because an addon built before the removal reads
17046
- * an ABSENT field as "adoption pending" and refuses to start.
17047
- */
17048
- adoptionPending: _null()
17040
+ createdIndexes: array(string())
17049
17041
  });
17050
17042
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
17051
17043
  var SecretRefsList = array(string());
17044
+ /**
17045
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
17046
+ * All ops of one call share ONE database file and ONE `transactFamily`.
17047
+ */
17048
+ var RecordTransactOpSchema = discriminatedUnion("op", [
17049
+ object({
17050
+ op: literal("put"),
17051
+ kind: RecordKindNameSchema,
17052
+ record: RecordInputSchema,
17053
+ ifRev: number().int().min(0).optional()
17054
+ }),
17055
+ object({
17056
+ op: literal("patch"),
17057
+ kind: RecordKindNameSchema,
17058
+ id: RecordIdSchema,
17059
+ data: RecordBodySchema,
17060
+ at: number().int().nullable().optional(),
17061
+ expiresAt: number().int().nullable().optional(),
17062
+ ifRev: number().int().min(1).optional()
17063
+ }),
17064
+ object({
17065
+ op: literal("delete"),
17066
+ kind: RecordKindNameSchema,
17067
+ id: RecordIdSchema
17068
+ })
17069
+ ]);
17052
17070
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
17053
17071
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
17054
17072
  kind: "mutation",
@@ -17155,6 +17173,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
17155
17173
  }), {
17156
17174
  kind: "mutation",
17157
17175
  auth: "admin"
17176
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
17177
+ results: array(object({
17178
+ rev: number().int().nullable(),
17179
+ deleted: boolean()
17180
+ })),
17181
+ releasedRefs: SecretRefsList,
17182
+ secretRefs: SecretRefsList
17183
+ }), {
17184
+ kind: "mutation",
17185
+ auth: "admin"
17158
17186
  }), method(object({
17159
17187
  deviceId: number().int(),
17160
17188
  kinds: array(RecordKindNameSchema).optional()
@@ -42513,9 +42541,13 @@ var NcSystemEventKindSchema = _enum([
42513
42541
  "node-updating",
42514
42542
  "node-inference-unavailable",
42515
42543
  "detection-blind",
42544
+ "motion-noisy",
42545
+ "motion-calm",
42516
42546
  "recording-stalled",
42517
42547
  "recording-healthy",
42518
42548
  "recording-degraded",
42549
+ "device-attention-required",
42550
+ "device-attention-resolved",
42519
42551
  "storage-location-low",
42520
42552
  "storage-location-critical",
42521
42553
  "storage-location-ok",
@@ -42539,6 +42571,8 @@ var NcSystemEventKindSchema = _enum([
42539
42571
  "alert-critical",
42540
42572
  "alert-error",
42541
42573
  "alert-critical-resolved",
42574
+ "rule-broken",
42575
+ "rule-repaired",
42542
42576
  "camera-online",
42543
42577
  "camera-offline",
42544
42578
  "camera-disabled",
@@ -54993,6 +55027,16 @@ object({
54993
55027
  powerState: string().nullable(),
54994
55028
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54995
55029
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55030
+ /**
55031
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55032
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55033
+ * when none is reported. A cleared reminder is not an unknown one.
55034
+ */
55035
+ filterCleaningDue: boolean().nullable(),
55036
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55037
+ machineCareDue: boolean().nullable(),
55038
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55039
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54996
55040
  /** Option states: null when the appliance does not expose the option or has not said. */
54997
55041
  halfLoad: boolean().nullable(),
54998
55042
  hygienePlus: boolean().nullable(),
@@ -61610,16 +61654,6 @@ var UpdateUserInputSchema = object({
61610
61654
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61611
61655
  scopes: array(TokenScopeSchema).optional()
61612
61656
  });
61613
- var ApiKeySummarySchema = object({
61614
- id: string(),
61615
- label: string(),
61616
- isAdmin: boolean().default(false),
61617
- allowedProviders: union([array(string()), literal("*")]).optional(),
61618
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61619
- tokenPrefix: string(),
61620
- createdAt: number(),
61621
- lastUsedAt: number().optional()
61622
- });
61623
61657
  var OauthSessionSummarySchema = object({
61624
61658
  id: string(),
61625
61659
  userId: string(),
@@ -61641,8 +61675,7 @@ var TotpStatusSchema = object({
61641
61675
  confirmedAt: number().nullable()
61642
61676
  });
61643
61677
  /**
61644
- * user-management — singleton capability for user accounts and the
61645
- * legacy API-key rows.
61678
+ * user-management — singleton capability for user accounts.
61646
61679
  *
61647
61680
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61648
61681
  * — the subset check on `setUserScopes` is moot
@@ -61698,10 +61731,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61698
61731
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61699
61732
  kind: "mutation",
61700
61733
  access: "view"
61701
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61702
- kind: "mutation",
61703
- auth: "admin",
61704
- access: "delete"
61705
61734
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61706
61735
  kind: "mutation",
61707
61736
  auth: "admin",
@@ -69214,6 +69243,12 @@ Object.freeze({
69214
69243
  addonId: null,
69215
69244
  access: "view"
69216
69245
  },
69246
+ "records.transact": {
69247
+ capName: "records",
69248
+ capScope: "system",
69249
+ addonId: null,
69250
+ access: "create"
69251
+ },
69217
69252
  "sceneMonitor.captureReference": {
69218
69253
  capName: "scene-monitor",
69219
69254
  capScope: "device",
@@ -70546,12 +70581,6 @@ Object.freeze({
70546
70581
  addonId: null,
70547
70582
  access: "view"
70548
70583
  },
70549
- "userManagement.listApiKeys": {
70550
- capName: "user-management",
70551
- capScope: "system",
70552
- addonId: null,
70553
- access: "view"
70554
- },
70555
70584
  "userManagement.listExternalIdentities": {
70556
70585
  capName: "user-management",
70557
70586
  capScope: "system",
@@ -70606,12 +70635,6 @@ Object.freeze({
70606
70635
  addonId: null,
70607
70636
  access: "create"
70608
70637
  },
70609
- "userManagement.revokeApiKey": {
70610
- capName: "user-management",
70611
- capScope: "system",
70612
- addonId: null,
70613
- access: "delete"
70614
- },
70615
70638
  "userManagement.revokeOauthSession": {
70616
70639
  capName: "user-management",
70617
70640
  capScope: "system",
@@ -73976,9 +73999,13 @@ new Map(Object.entries({
73976
73999
  "stream-online": "device-events",
73977
74000
  "stream-offline": "device-events",
73978
74001
  "detection-blind": "device-events",
74002
+ "motion-noisy": "device-events",
74003
+ "motion-calm": "device-events",
73979
74004
  "recording-stalled": "device-events",
73980
74005
  "recording-healthy": "device-events",
73981
74006
  "recording-degraded": "device-events",
74007
+ "device-attention-required": "device-events",
74008
+ "device-attention-resolved": "device-events",
73982
74009
  "node-online": "system",
73983
74010
  "node-offline": "system",
73984
74011
  "node-restarting": "system",
@@ -73995,6 +74022,8 @@ new Map(Object.entries({
73995
74022
  "alert-critical": "system",
73996
74023
  "alert-error": "system",
73997
74024
  "alert-critical-resolved": "system",
74025
+ "rule-broken": "system",
74026
+ "rule-repaired": "system",
73998
74027
  "storage-location-low": "system",
73999
74028
  "storage-location-critical": "system",
74000
74029
  "storage-location-ok": "system",
@@ -74059,6 +74088,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74059
74088
  label: "Detecting nothing",
74060
74089
  kinds: ["detection-blind"]
74061
74090
  },
74091
+ {
74092
+ id: "motion-noise",
74093
+ family: "device-events",
74094
+ label: "Motion without a subject",
74095
+ kinds: ["motion-noisy", "motion-calm"]
74096
+ },
74062
74097
  {
74063
74098
  id: "recording",
74064
74099
  family: "device-events",
@@ -74069,6 +74104,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74069
74104
  "recording-degraded"
74070
74105
  ]
74071
74106
  },
74107
+ {
74108
+ id: "device-attention",
74109
+ family: "device-events",
74110
+ label: "Needs attention",
74111
+ kinds: ["device-attention-required", "device-attention-resolved"]
74112
+ },
74072
74113
  {
74073
74114
  id: "nodes",
74074
74115
  family: "system",
@@ -74129,6 +74170,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74129
74170
  "alert-critical-resolved"
74130
74171
  ]
74131
74172
  },
74173
+ {
74174
+ id: "rule-health",
74175
+ family: "system",
74176
+ label: "Notification rules",
74177
+ kinds: ["rule-broken", "rule-repaired"]
74178
+ },
74132
74179
  {
74133
74180
  id: "alarm",
74134
74181
  family: "alarm",
@@ -74202,6 +74249,7 @@ var ALERT_EPISODE = [
74202
74249
  "alert-error",
74203
74250
  "alert-critical-resolved"
74204
74251
  ];
74252
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74205
74253
  var UPDATES = [
74206
74254
  "addon-update-available",
74207
74255
  "server-update-available",
@@ -74231,9 +74279,12 @@ var DEVICE_EVENTS = [
74231
74279
  "stream-online",
74232
74280
  "stream-offline",
74233
74281
  "detection-blind",
74282
+ "motion-noisy",
74283
+ "motion-calm",
74234
74284
  "recording-stalled",
74235
74285
  "recording-healthy",
74236
74286
  "recording-degraded",
74287
+ ...DEVICE_ATTENTION,
74237
74288
  ...ALARM
74238
74289
  ];
74239
74290
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -74401,7 +74452,13 @@ var STATE_SUMMARY_VARS = [
74401
74452
  [...RULE_TEXT],
74402
74453
  [...RULE_TEXT],
74403
74454
  [...RULE_TEXT],
74404
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74455
+ [...RULE_TEXT],
74456
+ [...RULE_TEXT],
74457
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74458
+ [...RULE_TEXT],
74459
+ [...RULE_TEXT],
74460
+ [...RULE_TEXT],
74461
+ [...RULE_TEXT],
74405
74462
  [...RULE_TEXT],
74406
74463
  [...RULE_TEXT],
74407
74464
  [...RULE_TEXT],
@@ -74419,11 +74476,11 @@ var STATE_SUMMARY_VARS = [
74419
74476
  [...RULE_TEXT],
74420
74477
  [...RULE_TEXT],
74421
74478
  [...RULE_TEXT],
74479
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74422
74480
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74481
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74423
74482
  ([...RULE_TEXT], [...ALERT_EPISODE]),
74424
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74425
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74426
- ([...RULE_TEXT], [...ALERT_EPISODE]),
74483
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
74427
74484
  [...RULE_TEXT],
74428
74485
  [...RULE_TEXT],
74429
74486
  [...RULE_TEXT],
@@ -74444,6 +74501,125 @@ var STATE_SUMMARY_VARS = [
74444
74501
  [...RULE_TEXT],
74445
74502
  ...STATE_SUMMARY_VARS
74446
74503
  ];
74504
+ new Map([
74505
+ {
74506
+ id: "device-connectivity",
74507
+ family: "device-events",
74508
+ label: "Device connectivity (offline / back online)",
74509
+ bad: ["device-offline"],
74510
+ recovery: ["device-online"],
74511
+ snapshotLabel: "Devices offline now",
74512
+ snapshotSection: "device-state"
74513
+ },
74514
+ {
74515
+ id: "device-switch",
74516
+ family: "device-events",
74517
+ label: "Device switched off / back on",
74518
+ bad: ["device-disabled"],
74519
+ recovery: ["device-enabled"],
74520
+ snapshotLabel: "Devices switched off now",
74521
+ snapshotSection: "device-state"
74522
+ },
74523
+ {
74524
+ id: "stream-connectivity",
74525
+ family: "device-events",
74526
+ label: "Stream connectivity (offline / back online)",
74527
+ bad: ["stream-offline"],
74528
+ recovery: ["stream-online"],
74529
+ snapshotLabel: "Streams offline now",
74530
+ snapshotSection: "streams"
74531
+ },
74532
+ {
74533
+ id: "battery",
74534
+ family: "device-events",
74535
+ label: "Battery (low / back to normal)",
74536
+ bad: ["device-battery-low"],
74537
+ recovery: ["device-battery-normal"],
74538
+ snapshotLabel: "Batteries low now",
74539
+ snapshotSection: "battery"
74540
+ },
74541
+ {
74542
+ id: "consumables",
74543
+ family: "device-events",
74544
+ label: "Consumables (low / replaced)",
74545
+ bad: ["device-consumable-low"],
74546
+ recovery: ["device-consumable-normal"],
74547
+ snapshotLabel: "Consumables low now",
74548
+ snapshotSection: "consumables"
74549
+ },
74550
+ {
74551
+ id: "tanks",
74552
+ family: "device-events",
74553
+ label: "Tanks (low or full / back to normal)",
74554
+ bad: ["device-tank-low", "device-tank-full"],
74555
+ recovery: ["device-tank-normal"],
74556
+ snapshotLabel: "Tanks low or full now",
74557
+ snapshotSection: "tanks"
74558
+ },
74559
+ {
74560
+ id: "motion-noise",
74561
+ family: "device-events",
74562
+ label: "Motion without a subject (constant / calm again)",
74563
+ bad: ["motion-noisy"],
74564
+ recovery: ["motion-calm"],
74565
+ snapshotLabel: "Cameras with constant motion now",
74566
+ snapshotSection: null
74567
+ },
74568
+ {
74569
+ id: "recording-health",
74570
+ family: "device-events",
74571
+ label: "Recording health (stalled or degraded / recording again)",
74572
+ bad: ["recording-stalled", "recording-degraded"],
74573
+ recovery: ["recording-healthy"],
74574
+ snapshotLabel: "Recordings stalled now",
74575
+ snapshotSection: null
74576
+ },
74577
+ {
74578
+ id: "device-attention",
74579
+ family: "device-events",
74580
+ label: "Device needs attention (raised / resolved)",
74581
+ bad: ["device-attention-required"],
74582
+ recovery: ["device-attention-resolved"],
74583
+ snapshotLabel: "Devices needing attention now",
74584
+ snapshotSection: null
74585
+ },
74586
+ {
74587
+ id: "node-connectivity",
74588
+ family: "system",
74589
+ label: "Node connectivity (offline / back online)",
74590
+ bad: ["node-offline"],
74591
+ recovery: ["node-online"],
74592
+ snapshotLabel: "Nodes offline now",
74593
+ snapshotSection: "nodes"
74594
+ },
74595
+ {
74596
+ id: "storage-space",
74597
+ family: "system",
74598
+ label: "Storage space (low or critical / ok again)",
74599
+ bad: ["storage-location-low", "storage-location-critical"],
74600
+ recovery: ["storage-location-ok"],
74601
+ snapshotLabel: "Storage locations low now",
74602
+ snapshotSection: null
74603
+ },
74604
+ {
74605
+ id: "critical-alerts",
74606
+ family: "system",
74607
+ label: "Critical alerts (raised / resolved)",
74608
+ bad: ["alert-critical"],
74609
+ recovery: ["alert-critical-resolved"],
74610
+ snapshotLabel: "Critical alerts open now",
74611
+ snapshotSection: null
74612
+ },
74613
+ {
74614
+ id: "rule-health",
74615
+ family: "system",
74616
+ label: "Rule health (broken / repaired)",
74617
+ bad: ["rule-broken"],
74618
+ recovery: ["rule-repaired"],
74619
+ snapshotLabel: "Notification rules broken now",
74620
+ snapshotSection: null
74621
+ }
74622
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
74447
74623
  new Set([
74448
74624
  "disarmed",
74449
74625
  "armed_home",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-google-services",
3
- "version": "0.2.23",
3
+ "version": "0.2.25",
4
4
  "description": "Google Services — Google brokers (OAuth2): Calendar as calendar-source, Gmail send as smtp-provider.",
5
5
  "keywords": [
6
6
  "camstack",