@camstack/addon-smtp-nodemailer 1.2.135 → 1.2.137

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.
@@ -36,7 +36,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
36
36
  }) : target, mod));
37
37
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
38
38
  //#endregion
39
- //#region ../types/dist/event-category-DOl51-Ij.mjs
39
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
40
40
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
41
41
  EventCategory["SystemBoot"] = "system.boot";
42
42
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -353,6 +353,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
353
353
  */
354
354
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
355
355
  /**
356
+ * A camera's motion source has fired constantly with no subject for an hour
357
+ * (motion duty or session count over the bar, zero detections) — it is not
358
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
359
+ * {@link PipelineMotionCalm}.
360
+ */
361
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
362
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
363
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
364
+ /**
356
365
  * Per-camera pipeline config was mutated by the orchestrator
357
366
  * (3-level settings change via `setAgentAddonDefaults` /
358
367
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -724,6 +733,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
724
733
  EventCategory["BackupRestored"] = "backup.restored";
725
734
  EventCategory["NotificationDispatched"] = "notification.dispatched";
726
735
  EventCategory["NotificationFailed"] = "notification.failed";
736
+ /**
737
+ * A notification rule that cannot work (D905): its stored row does not load,
738
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
739
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
740
+ */
741
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
742
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
743
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
727
744
  EventCategory["DeviceUpdated"] = "device.updated";
728
745
  /**
729
746
  * Transport-level connectivity. Emitted by the device driver when
@@ -5451,7 +5468,7 @@ var ZodIssueCode = {
5451
5468
  var ZodFirstPartyTypeKind;
5452
5469
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5453
5470
  //#endregion
5454
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5471
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5455
5472
  /**
5456
5473
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5457
5474
  * window to float samples (D455).
@@ -7913,7 +7930,7 @@ var EntryDescriptorSchema = object({
7913
7930
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7914
7931
  fields: record(string(), unknown())
7915
7932
  }).strict();
7916
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7933
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7917
7934
  var RecordKindDeclarationSchema = object({
7918
7935
  database: _enum(RECORD_DATABASES).default("settings"),
7919
7936
  class: _enum(RECORD_CLASSES),
@@ -7932,14 +7949,6 @@ var RecordKindDeclarationSchema = object({
7932
7949
  secretPaths: array(string().min(1)).default([]),
7933
7950
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7934
7951
  secretArrayKeys: record(string(), string()).default({}),
7935
- /**
7936
- * RETIRED (D900): the legacy table a kind adopted from during the records
7937
- * migration. Nothing declares it any more and nothing reads it; the schema
7938
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7939
- * (an orphaned kind is never redeclared) and an addon built before the
7940
- * removal still sends it. Never set it.
7941
- */
7942
- adoptsFrom: string().min(1).optional(),
7943
7952
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7944
7953
  transactFamily: string().min(1).optional(),
7945
7954
  entry: EntryDescriptorSchema.optional()
@@ -12603,17 +12612,6 @@ object({
12603
12612
  createdAt: number(),
12604
12613
  updatedAt: number()
12605
12614
  });
12606
- object({
12607
- id: string(),
12608
- label: string(),
12609
- isAdmin: boolean().default(false),
12610
- allowedProviders: AllowedProviderSchema,
12611
- allowedDevices: AllowedDevicesSchema,
12612
- tokenHash: string(),
12613
- tokenPrefix: string(),
12614
- createdAt: number(),
12615
- lastUsedAt: number().optional()
12616
- });
12617
12615
  object({
12618
12616
  id: string(),
12619
12617
  userId: string(),
@@ -16489,16 +16487,36 @@ var RecordKindStateSchema = _enum([
16489
16487
  var DeclareKindResultSchema = object({
16490
16488
  kindId: number().int(),
16491
16489
  state: RecordKindStateSchema,
16492
- createdIndexes: array(string()),
16493
- /**
16494
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16495
- * it stays on the wire, null, because an addon built before the removal reads
16496
- * an ABSENT field as "adoption pending" and refuses to start.
16497
- */
16498
- adoptionPending: _null()
16490
+ createdIndexes: array(string())
16499
16491
  });
16500
16492
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16501
16493
  var SecretRefsList = array(string());
16494
+ /**
16495
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16496
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16497
+ */
16498
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16499
+ object({
16500
+ op: literal("put"),
16501
+ kind: RecordKindNameSchema,
16502
+ record: RecordInputSchema,
16503
+ ifRev: number().int().min(0).optional()
16504
+ }),
16505
+ object({
16506
+ op: literal("patch"),
16507
+ kind: RecordKindNameSchema,
16508
+ id: RecordIdSchema,
16509
+ data: RecordBodySchema,
16510
+ at: number().int().nullable().optional(),
16511
+ expiresAt: number().int().nullable().optional(),
16512
+ ifRev: number().int().min(1).optional()
16513
+ }),
16514
+ object({
16515
+ op: literal("delete"),
16516
+ kind: RecordKindNameSchema,
16517
+ id: RecordIdSchema
16518
+ })
16519
+ ]);
16502
16520
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16503
16521
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16504
16522
  kind: "mutation",
@@ -16605,6 +16623,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16605
16623
  }), {
16606
16624
  kind: "mutation",
16607
16625
  auth: "admin"
16626
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16627
+ results: array(object({
16628
+ rev: number().int().nullable(),
16629
+ deleted: boolean()
16630
+ })),
16631
+ releasedRefs: SecretRefsList,
16632
+ secretRefs: SecretRefsList
16633
+ }), {
16634
+ kind: "mutation",
16635
+ auth: "admin"
16608
16636
  }), method(object({
16609
16637
  deviceId: number().int(),
16610
16638
  kinds: array(RecordKindNameSchema).optional()
@@ -41963,9 +41991,13 @@ var NcSystemEventKindSchema = _enum([
41963
41991
  "node-updating",
41964
41992
  "node-inference-unavailable",
41965
41993
  "detection-blind",
41994
+ "motion-noisy",
41995
+ "motion-calm",
41966
41996
  "recording-stalled",
41967
41997
  "recording-healthy",
41968
41998
  "recording-degraded",
41999
+ "device-attention-required",
42000
+ "device-attention-resolved",
41969
42001
  "storage-location-low",
41970
42002
  "storage-location-critical",
41971
42003
  "storage-location-ok",
@@ -41989,6 +42021,8 @@ var NcSystemEventKindSchema = _enum([
41989
42021
  "alert-critical",
41990
42022
  "alert-error",
41991
42023
  "alert-critical-resolved",
42024
+ "rule-broken",
42025
+ "rule-repaired",
41992
42026
  "camera-online",
41993
42027
  "camera-offline",
41994
42028
  "camera-disabled",
@@ -54433,6 +54467,16 @@ object({
54433
54467
  powerState: string().nullable(),
54434
54468
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54435
54469
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54470
+ /**
54471
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54472
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54473
+ * when none is reported. A cleared reminder is not an unknown one.
54474
+ */
54475
+ filterCleaningDue: boolean().nullable(),
54476
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54477
+ machineCareDue: boolean().nullable(),
54478
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54479
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54436
54480
  /** Option states: null when the appliance does not expose the option or has not said. */
54437
54481
  halfLoad: boolean().nullable(),
54438
54482
  hygienePlus: boolean().nullable(),
@@ -61050,16 +61094,6 @@ var UpdateUserInputSchema = object({
61050
61094
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61051
61095
  scopes: array(TokenScopeSchema).optional()
61052
61096
  });
61053
- var ApiKeySummarySchema = object({
61054
- id: string(),
61055
- label: string(),
61056
- isAdmin: boolean().default(false),
61057
- allowedProviders: union([array(string()), literal("*")]).optional(),
61058
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61059
- tokenPrefix: string(),
61060
- createdAt: number(),
61061
- lastUsedAt: number().optional()
61062
- });
61063
61097
  var OauthSessionSummarySchema = object({
61064
61098
  id: string(),
61065
61099
  userId: string(),
@@ -61081,8 +61115,7 @@ var TotpStatusSchema = object({
61081
61115
  confirmedAt: number().nullable()
61082
61116
  });
61083
61117
  /**
61084
- * user-management — singleton capability for user accounts and the
61085
- * legacy API-key rows.
61118
+ * user-management — singleton capability for user accounts.
61086
61119
  *
61087
61120
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61088
61121
  * — the subset check on `setUserScopes` is moot
@@ -61138,10 +61171,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61138
61171
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61139
61172
  kind: "mutation",
61140
61173
  access: "view"
61141
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61142
- kind: "mutation",
61143
- auth: "admin",
61144
- access: "delete"
61145
61174
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61146
61175
  kind: "mutation",
61147
61176
  auth: "admin",
@@ -68654,6 +68683,12 @@ Object.freeze({
68654
68683
  addonId: null,
68655
68684
  access: "view"
68656
68685
  },
68686
+ "records.transact": {
68687
+ capName: "records",
68688
+ capScope: "system",
68689
+ addonId: null,
68690
+ access: "create"
68691
+ },
68657
68692
  "sceneMonitor.captureReference": {
68658
68693
  capName: "scene-monitor",
68659
68694
  capScope: "device",
@@ -69986,12 +70021,6 @@ Object.freeze({
69986
70021
  addonId: null,
69987
70022
  access: "view"
69988
70023
  },
69989
- "userManagement.listApiKeys": {
69990
- capName: "user-management",
69991
- capScope: "system",
69992
- addonId: null,
69993
- access: "view"
69994
- },
69995
70024
  "userManagement.listExternalIdentities": {
69996
70025
  capName: "user-management",
69997
70026
  capScope: "system",
@@ -70046,12 +70075,6 @@ Object.freeze({
70046
70075
  addonId: null,
70047
70076
  access: "create"
70048
70077
  },
70049
- "userManagement.revokeApiKey": {
70050
- capName: "user-management",
70051
- capScope: "system",
70052
- addonId: null,
70053
- access: "delete"
70054
- },
70055
70078
  "userManagement.revokeOauthSession": {
70056
70079
  capName: "user-management",
70057
70080
  capScope: "system",
@@ -73416,9 +73439,13 @@ new Map(Object.entries({
73416
73439
  "stream-online": "device-events",
73417
73440
  "stream-offline": "device-events",
73418
73441
  "detection-blind": "device-events",
73442
+ "motion-noisy": "device-events",
73443
+ "motion-calm": "device-events",
73419
73444
  "recording-stalled": "device-events",
73420
73445
  "recording-healthy": "device-events",
73421
73446
  "recording-degraded": "device-events",
73447
+ "device-attention-required": "device-events",
73448
+ "device-attention-resolved": "device-events",
73422
73449
  "node-online": "system",
73423
73450
  "node-offline": "system",
73424
73451
  "node-restarting": "system",
@@ -73435,6 +73462,8 @@ new Map(Object.entries({
73435
73462
  "alert-critical": "system",
73436
73463
  "alert-error": "system",
73437
73464
  "alert-critical-resolved": "system",
73465
+ "rule-broken": "system",
73466
+ "rule-repaired": "system",
73438
73467
  "storage-location-low": "system",
73439
73468
  "storage-location-critical": "system",
73440
73469
  "storage-location-ok": "system",
@@ -73499,6 +73528,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73499
73528
  label: "Detecting nothing",
73500
73529
  kinds: ["detection-blind"]
73501
73530
  },
73531
+ {
73532
+ id: "motion-noise",
73533
+ family: "device-events",
73534
+ label: "Motion without a subject",
73535
+ kinds: ["motion-noisy", "motion-calm"]
73536
+ },
73502
73537
  {
73503
73538
  id: "recording",
73504
73539
  family: "device-events",
@@ -73509,6 +73544,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73509
73544
  "recording-degraded"
73510
73545
  ]
73511
73546
  },
73547
+ {
73548
+ id: "device-attention",
73549
+ family: "device-events",
73550
+ label: "Needs attention",
73551
+ kinds: ["device-attention-required", "device-attention-resolved"]
73552
+ },
73512
73553
  {
73513
73554
  id: "nodes",
73514
73555
  family: "system",
@@ -73569,6 +73610,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73569
73610
  "alert-critical-resolved"
73570
73611
  ]
73571
73612
  },
73613
+ {
73614
+ id: "rule-health",
73615
+ family: "system",
73616
+ label: "Notification rules",
73617
+ kinds: ["rule-broken", "rule-repaired"]
73618
+ },
73572
73619
  {
73573
73620
  id: "alarm",
73574
73621
  family: "alarm",
@@ -73642,6 +73689,7 @@ var ALERT_EPISODE = [
73642
73689
  "alert-error",
73643
73690
  "alert-critical-resolved"
73644
73691
  ];
73692
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
73645
73693
  var UPDATES = [
73646
73694
  "addon-update-available",
73647
73695
  "server-update-available",
@@ -73671,9 +73719,12 @@ var DEVICE_EVENTS = [
73671
73719
  "stream-online",
73672
73720
  "stream-offline",
73673
73721
  "detection-blind",
73722
+ "motion-noisy",
73723
+ "motion-calm",
73674
73724
  "recording-stalled",
73675
73725
  "recording-healthy",
73676
73726
  "recording-degraded",
73727
+ ...DEVICE_ATTENTION,
73677
73728
  ...ALARM
73678
73729
  ];
73679
73730
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -73841,7 +73892,13 @@ var STATE_SUMMARY_VARS = [
73841
73892
  [...RULE_TEXT],
73842
73893
  [...RULE_TEXT],
73843
73894
  [...RULE_TEXT],
73844
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73895
+ [...RULE_TEXT],
73896
+ [...RULE_TEXT],
73897
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73898
+ [...RULE_TEXT],
73899
+ [...RULE_TEXT],
73900
+ [...RULE_TEXT],
73901
+ [...RULE_TEXT],
73845
73902
  [...RULE_TEXT],
73846
73903
  [...RULE_TEXT],
73847
73904
  [...RULE_TEXT],
@@ -73859,11 +73916,11 @@ var STATE_SUMMARY_VARS = [
73859
73916
  [...RULE_TEXT],
73860
73917
  [...RULE_TEXT],
73861
73918
  [...RULE_TEXT],
73919
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73862
73920
  ([...RULE_TEXT], [...ALERT_EPISODE]),
73921
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73863
73922
  ([...RULE_TEXT], [...ALERT_EPISODE]),
73864
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73865
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73866
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73923
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73867
73924
  [...RULE_TEXT],
73868
73925
  [...RULE_TEXT],
73869
73926
  [...RULE_TEXT],
@@ -73884,6 +73941,125 @@ var STATE_SUMMARY_VARS = [
73884
73941
  [...RULE_TEXT],
73885
73942
  ...STATE_SUMMARY_VARS
73886
73943
  ];
73944
+ new Map([
73945
+ {
73946
+ id: "device-connectivity",
73947
+ family: "device-events",
73948
+ label: "Device connectivity (offline / back online)",
73949
+ bad: ["device-offline"],
73950
+ recovery: ["device-online"],
73951
+ snapshotLabel: "Devices offline now",
73952
+ snapshotSection: "device-state"
73953
+ },
73954
+ {
73955
+ id: "device-switch",
73956
+ family: "device-events",
73957
+ label: "Device switched off / back on",
73958
+ bad: ["device-disabled"],
73959
+ recovery: ["device-enabled"],
73960
+ snapshotLabel: "Devices switched off now",
73961
+ snapshotSection: "device-state"
73962
+ },
73963
+ {
73964
+ id: "stream-connectivity",
73965
+ family: "device-events",
73966
+ label: "Stream connectivity (offline / back online)",
73967
+ bad: ["stream-offline"],
73968
+ recovery: ["stream-online"],
73969
+ snapshotLabel: "Streams offline now",
73970
+ snapshotSection: "streams"
73971
+ },
73972
+ {
73973
+ id: "battery",
73974
+ family: "device-events",
73975
+ label: "Battery (low / back to normal)",
73976
+ bad: ["device-battery-low"],
73977
+ recovery: ["device-battery-normal"],
73978
+ snapshotLabel: "Batteries low now",
73979
+ snapshotSection: "battery"
73980
+ },
73981
+ {
73982
+ id: "consumables",
73983
+ family: "device-events",
73984
+ label: "Consumables (low / replaced)",
73985
+ bad: ["device-consumable-low"],
73986
+ recovery: ["device-consumable-normal"],
73987
+ snapshotLabel: "Consumables low now",
73988
+ snapshotSection: "consumables"
73989
+ },
73990
+ {
73991
+ id: "tanks",
73992
+ family: "device-events",
73993
+ label: "Tanks (low or full / back to normal)",
73994
+ bad: ["device-tank-low", "device-tank-full"],
73995
+ recovery: ["device-tank-normal"],
73996
+ snapshotLabel: "Tanks low or full now",
73997
+ snapshotSection: "tanks"
73998
+ },
73999
+ {
74000
+ id: "motion-noise",
74001
+ family: "device-events",
74002
+ label: "Motion without a subject (constant / calm again)",
74003
+ bad: ["motion-noisy"],
74004
+ recovery: ["motion-calm"],
74005
+ snapshotLabel: "Cameras with constant motion now",
74006
+ snapshotSection: null
74007
+ },
74008
+ {
74009
+ id: "recording-health",
74010
+ family: "device-events",
74011
+ label: "Recording health (stalled or degraded / recording again)",
74012
+ bad: ["recording-stalled", "recording-degraded"],
74013
+ recovery: ["recording-healthy"],
74014
+ snapshotLabel: "Recordings stalled now",
74015
+ snapshotSection: null
74016
+ },
74017
+ {
74018
+ id: "device-attention",
74019
+ family: "device-events",
74020
+ label: "Device needs attention (raised / resolved)",
74021
+ bad: ["device-attention-required"],
74022
+ recovery: ["device-attention-resolved"],
74023
+ snapshotLabel: "Devices needing attention now",
74024
+ snapshotSection: null
74025
+ },
74026
+ {
74027
+ id: "node-connectivity",
74028
+ family: "system",
74029
+ label: "Node connectivity (offline / back online)",
74030
+ bad: ["node-offline"],
74031
+ recovery: ["node-online"],
74032
+ snapshotLabel: "Nodes offline now",
74033
+ snapshotSection: "nodes"
74034
+ },
74035
+ {
74036
+ id: "storage-space",
74037
+ family: "system",
74038
+ label: "Storage space (low or critical / ok again)",
74039
+ bad: ["storage-location-low", "storage-location-critical"],
74040
+ recovery: ["storage-location-ok"],
74041
+ snapshotLabel: "Storage locations low now",
74042
+ snapshotSection: null
74043
+ },
74044
+ {
74045
+ id: "critical-alerts",
74046
+ family: "system",
74047
+ label: "Critical alerts (raised / resolved)",
74048
+ bad: ["alert-critical"],
74049
+ recovery: ["alert-critical-resolved"],
74050
+ snapshotLabel: "Critical alerts open now",
74051
+ snapshotSection: null
74052
+ },
74053
+ {
74054
+ id: "rule-health",
74055
+ family: "system",
74056
+ label: "Rule health (broken / repaired)",
74057
+ bad: ["rule-broken"],
74058
+ recovery: ["rule-repaired"],
74059
+ snapshotLabel: "Notification rules broken now",
74060
+ snapshotSection: null
74061
+ }
74062
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
73887
74063
  new Set([
73888
74064
  "disarmed",
73889
74065
  "armed_home",
@@ -34,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
34
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
36
36
  //#endregion
37
- //#region ../types/dist/event-category-DOl51-Ij.mjs
37
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
38
38
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
39
39
  EventCategory["SystemBoot"] = "system.boot";
40
40
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -351,6 +351,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
351
351
  */
352
352
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
353
353
  /**
354
+ * A camera's motion source has fired constantly with no subject for an hour
355
+ * (motion duty or session count over the bar, zero detections) — it is not
356
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
357
+ * {@link PipelineMotionCalm}.
358
+ */
359
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
360
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
361
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
362
+ /**
354
363
  * Per-camera pipeline config was mutated by the orchestrator
355
364
  * (3-level settings change via `setAgentAddonDefaults` /
356
365
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -722,6 +731,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
722
731
  EventCategory["BackupRestored"] = "backup.restored";
723
732
  EventCategory["NotificationDispatched"] = "notification.dispatched";
724
733
  EventCategory["NotificationFailed"] = "notification.failed";
734
+ /**
735
+ * A notification rule that cannot work (D905): its stored row does not load,
736
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
737
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
738
+ */
739
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
740
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
741
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
725
742
  EventCategory["DeviceUpdated"] = "device.updated";
726
743
  /**
727
744
  * Transport-level connectivity. Emitted by the device driver when
@@ -5449,7 +5466,7 @@ var ZodIssueCode = {
5449
5466
  var ZodFirstPartyTypeKind;
5450
5467
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5451
5468
  //#endregion
5452
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5469
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5453
5470
  /**
5454
5471
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5455
5472
  * window to float samples (D455).
@@ -7911,7 +7928,7 @@ var EntryDescriptorSchema = object({
7911
7928
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7912
7929
  fields: record(string(), unknown())
7913
7930
  }).strict();
7914
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7931
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7915
7932
  var RecordKindDeclarationSchema = object({
7916
7933
  database: _enum(RECORD_DATABASES).default("settings"),
7917
7934
  class: _enum(RECORD_CLASSES),
@@ -7930,14 +7947,6 @@ var RecordKindDeclarationSchema = object({
7930
7947
  secretPaths: array(string().min(1)).default([]),
7931
7948
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7932
7949
  secretArrayKeys: record(string(), string()).default({}),
7933
- /**
7934
- * RETIRED (D900): the legacy table a kind adopted from during the records
7935
- * migration. Nothing declares it any more and nothing reads it; the schema
7936
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7937
- * (an orphaned kind is never redeclared) and an addon built before the
7938
- * removal still sends it. Never set it.
7939
- */
7940
- adoptsFrom: string().min(1).optional(),
7941
7950
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7942
7951
  transactFamily: string().min(1).optional(),
7943
7952
  entry: EntryDescriptorSchema.optional()
@@ -12601,17 +12610,6 @@ object({
12601
12610
  createdAt: number(),
12602
12611
  updatedAt: number()
12603
12612
  });
12604
- object({
12605
- id: string(),
12606
- label: string(),
12607
- isAdmin: boolean().default(false),
12608
- allowedProviders: AllowedProviderSchema,
12609
- allowedDevices: AllowedDevicesSchema,
12610
- tokenHash: string(),
12611
- tokenPrefix: string(),
12612
- createdAt: number(),
12613
- lastUsedAt: number().optional()
12614
- });
12615
12613
  object({
12616
12614
  id: string(),
12617
12615
  userId: string(),
@@ -16487,16 +16485,36 @@ var RecordKindStateSchema = _enum([
16487
16485
  var DeclareKindResultSchema = object({
16488
16486
  kindId: number().int(),
16489
16487
  state: RecordKindStateSchema,
16490
- createdIndexes: array(string()),
16491
- /**
16492
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16493
- * it stays on the wire, null, because an addon built before the removal reads
16494
- * an ABSENT field as "adoption pending" and refuses to start.
16495
- */
16496
- adoptionPending: _null()
16488
+ createdIndexes: array(string())
16497
16489
  });
16498
16490
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16499
16491
  var SecretRefsList = array(string());
16492
+ /**
16493
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16494
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16495
+ */
16496
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16497
+ object({
16498
+ op: literal("put"),
16499
+ kind: RecordKindNameSchema,
16500
+ record: RecordInputSchema,
16501
+ ifRev: number().int().min(0).optional()
16502
+ }),
16503
+ object({
16504
+ op: literal("patch"),
16505
+ kind: RecordKindNameSchema,
16506
+ id: RecordIdSchema,
16507
+ data: RecordBodySchema,
16508
+ at: number().int().nullable().optional(),
16509
+ expiresAt: number().int().nullable().optional(),
16510
+ ifRev: number().int().min(1).optional()
16511
+ }),
16512
+ object({
16513
+ op: literal("delete"),
16514
+ kind: RecordKindNameSchema,
16515
+ id: RecordIdSchema
16516
+ })
16517
+ ]);
16500
16518
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16501
16519
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16502
16520
  kind: "mutation",
@@ -16603,6 +16621,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16603
16621
  }), {
16604
16622
  kind: "mutation",
16605
16623
  auth: "admin"
16624
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16625
+ results: array(object({
16626
+ rev: number().int().nullable(),
16627
+ deleted: boolean()
16628
+ })),
16629
+ releasedRefs: SecretRefsList,
16630
+ secretRefs: SecretRefsList
16631
+ }), {
16632
+ kind: "mutation",
16633
+ auth: "admin"
16606
16634
  }), method(object({
16607
16635
  deviceId: number().int(),
16608
16636
  kinds: array(RecordKindNameSchema).optional()
@@ -41961,9 +41989,13 @@ var NcSystemEventKindSchema = _enum([
41961
41989
  "node-updating",
41962
41990
  "node-inference-unavailable",
41963
41991
  "detection-blind",
41992
+ "motion-noisy",
41993
+ "motion-calm",
41964
41994
  "recording-stalled",
41965
41995
  "recording-healthy",
41966
41996
  "recording-degraded",
41997
+ "device-attention-required",
41998
+ "device-attention-resolved",
41967
41999
  "storage-location-low",
41968
42000
  "storage-location-critical",
41969
42001
  "storage-location-ok",
@@ -41987,6 +42019,8 @@ var NcSystemEventKindSchema = _enum([
41987
42019
  "alert-critical",
41988
42020
  "alert-error",
41989
42021
  "alert-critical-resolved",
42022
+ "rule-broken",
42023
+ "rule-repaired",
41990
42024
  "camera-online",
41991
42025
  "camera-offline",
41992
42026
  "camera-disabled",
@@ -54431,6 +54465,16 @@ object({
54431
54465
  powerState: string().nullable(),
54432
54466
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54433
54467
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54468
+ /**
54469
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54470
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54471
+ * when none is reported. A cleared reminder is not an unknown one.
54472
+ */
54473
+ filterCleaningDue: boolean().nullable(),
54474
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54475
+ machineCareDue: boolean().nullable(),
54476
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54477
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54434
54478
  /** Option states: null when the appliance does not expose the option or has not said. */
54435
54479
  halfLoad: boolean().nullable(),
54436
54480
  hygienePlus: boolean().nullable(),
@@ -61048,16 +61092,6 @@ var UpdateUserInputSchema = object({
61048
61092
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61049
61093
  scopes: array(TokenScopeSchema).optional()
61050
61094
  });
61051
- var ApiKeySummarySchema = object({
61052
- id: string(),
61053
- label: string(),
61054
- isAdmin: boolean().default(false),
61055
- allowedProviders: union([array(string()), literal("*")]).optional(),
61056
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61057
- tokenPrefix: string(),
61058
- createdAt: number(),
61059
- lastUsedAt: number().optional()
61060
- });
61061
61095
  var OauthSessionSummarySchema = object({
61062
61096
  id: string(),
61063
61097
  userId: string(),
@@ -61079,8 +61113,7 @@ var TotpStatusSchema = object({
61079
61113
  confirmedAt: number().nullable()
61080
61114
  });
61081
61115
  /**
61082
- * user-management — singleton capability for user accounts and the
61083
- * legacy API-key rows.
61116
+ * user-management — singleton capability for user accounts.
61084
61117
  *
61085
61118
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61086
61119
  * — the subset check on `setUserScopes` is moot
@@ -61136,10 +61169,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61136
61169
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61137
61170
  kind: "mutation",
61138
61171
  access: "view"
61139
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61140
- kind: "mutation",
61141
- auth: "admin",
61142
- access: "delete"
61143
61172
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61144
61173
  kind: "mutation",
61145
61174
  auth: "admin",
@@ -68652,6 +68681,12 @@ Object.freeze({
68652
68681
  addonId: null,
68653
68682
  access: "view"
68654
68683
  },
68684
+ "records.transact": {
68685
+ capName: "records",
68686
+ capScope: "system",
68687
+ addonId: null,
68688
+ access: "create"
68689
+ },
68655
68690
  "sceneMonitor.captureReference": {
68656
68691
  capName: "scene-monitor",
68657
68692
  capScope: "device",
@@ -69984,12 +70019,6 @@ Object.freeze({
69984
70019
  addonId: null,
69985
70020
  access: "view"
69986
70021
  },
69987
- "userManagement.listApiKeys": {
69988
- capName: "user-management",
69989
- capScope: "system",
69990
- addonId: null,
69991
- access: "view"
69992
- },
69993
70022
  "userManagement.listExternalIdentities": {
69994
70023
  capName: "user-management",
69995
70024
  capScope: "system",
@@ -70044,12 +70073,6 @@ Object.freeze({
70044
70073
  addonId: null,
70045
70074
  access: "create"
70046
70075
  },
70047
- "userManagement.revokeApiKey": {
70048
- capName: "user-management",
70049
- capScope: "system",
70050
- addonId: null,
70051
- access: "delete"
70052
- },
70053
70076
  "userManagement.revokeOauthSession": {
70054
70077
  capName: "user-management",
70055
70078
  capScope: "system",
@@ -73414,9 +73437,13 @@ new Map(Object.entries({
73414
73437
  "stream-online": "device-events",
73415
73438
  "stream-offline": "device-events",
73416
73439
  "detection-blind": "device-events",
73440
+ "motion-noisy": "device-events",
73441
+ "motion-calm": "device-events",
73417
73442
  "recording-stalled": "device-events",
73418
73443
  "recording-healthy": "device-events",
73419
73444
  "recording-degraded": "device-events",
73445
+ "device-attention-required": "device-events",
73446
+ "device-attention-resolved": "device-events",
73420
73447
  "node-online": "system",
73421
73448
  "node-offline": "system",
73422
73449
  "node-restarting": "system",
@@ -73433,6 +73460,8 @@ new Map(Object.entries({
73433
73460
  "alert-critical": "system",
73434
73461
  "alert-error": "system",
73435
73462
  "alert-critical-resolved": "system",
73463
+ "rule-broken": "system",
73464
+ "rule-repaired": "system",
73436
73465
  "storage-location-low": "system",
73437
73466
  "storage-location-critical": "system",
73438
73467
  "storage-location-ok": "system",
@@ -73497,6 +73526,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73497
73526
  label: "Detecting nothing",
73498
73527
  kinds: ["detection-blind"]
73499
73528
  },
73529
+ {
73530
+ id: "motion-noise",
73531
+ family: "device-events",
73532
+ label: "Motion without a subject",
73533
+ kinds: ["motion-noisy", "motion-calm"]
73534
+ },
73500
73535
  {
73501
73536
  id: "recording",
73502
73537
  family: "device-events",
@@ -73507,6 +73542,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73507
73542
  "recording-degraded"
73508
73543
  ]
73509
73544
  },
73545
+ {
73546
+ id: "device-attention",
73547
+ family: "device-events",
73548
+ label: "Needs attention",
73549
+ kinds: ["device-attention-required", "device-attention-resolved"]
73550
+ },
73510
73551
  {
73511
73552
  id: "nodes",
73512
73553
  family: "system",
@@ -73567,6 +73608,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73567
73608
  "alert-critical-resolved"
73568
73609
  ]
73569
73610
  },
73611
+ {
73612
+ id: "rule-health",
73613
+ family: "system",
73614
+ label: "Notification rules",
73615
+ kinds: ["rule-broken", "rule-repaired"]
73616
+ },
73570
73617
  {
73571
73618
  id: "alarm",
73572
73619
  family: "alarm",
@@ -73640,6 +73687,7 @@ var ALERT_EPISODE = [
73640
73687
  "alert-error",
73641
73688
  "alert-critical-resolved"
73642
73689
  ];
73690
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
73643
73691
  var UPDATES = [
73644
73692
  "addon-update-available",
73645
73693
  "server-update-available",
@@ -73669,9 +73717,12 @@ var DEVICE_EVENTS = [
73669
73717
  "stream-online",
73670
73718
  "stream-offline",
73671
73719
  "detection-blind",
73720
+ "motion-noisy",
73721
+ "motion-calm",
73672
73722
  "recording-stalled",
73673
73723
  "recording-healthy",
73674
73724
  "recording-degraded",
73725
+ ...DEVICE_ATTENTION,
73675
73726
  ...ALARM
73676
73727
  ];
73677
73728
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -73839,7 +73890,13 @@ var STATE_SUMMARY_VARS = [
73839
73890
  [...RULE_TEXT],
73840
73891
  [...RULE_TEXT],
73841
73892
  [...RULE_TEXT],
73842
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73893
+ [...RULE_TEXT],
73894
+ [...RULE_TEXT],
73895
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73896
+ [...RULE_TEXT],
73897
+ [...RULE_TEXT],
73898
+ [...RULE_TEXT],
73899
+ [...RULE_TEXT],
73843
73900
  [...RULE_TEXT],
73844
73901
  [...RULE_TEXT],
73845
73902
  [...RULE_TEXT],
@@ -73857,11 +73914,11 @@ var STATE_SUMMARY_VARS = [
73857
73914
  [...RULE_TEXT],
73858
73915
  [...RULE_TEXT],
73859
73916
  [...RULE_TEXT],
73917
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73860
73918
  ([...RULE_TEXT], [...ALERT_EPISODE]),
73919
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73861
73920
  ([...RULE_TEXT], [...ALERT_EPISODE]),
73862
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73863
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73864
- ([...RULE_TEXT], [...ALERT_EPISODE]),
73921
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
73865
73922
  [...RULE_TEXT],
73866
73923
  [...RULE_TEXT],
73867
73924
  [...RULE_TEXT],
@@ -73882,6 +73939,125 @@ var STATE_SUMMARY_VARS = [
73882
73939
  [...RULE_TEXT],
73883
73940
  ...STATE_SUMMARY_VARS
73884
73941
  ];
73942
+ new Map([
73943
+ {
73944
+ id: "device-connectivity",
73945
+ family: "device-events",
73946
+ label: "Device connectivity (offline / back online)",
73947
+ bad: ["device-offline"],
73948
+ recovery: ["device-online"],
73949
+ snapshotLabel: "Devices offline now",
73950
+ snapshotSection: "device-state"
73951
+ },
73952
+ {
73953
+ id: "device-switch",
73954
+ family: "device-events",
73955
+ label: "Device switched off / back on",
73956
+ bad: ["device-disabled"],
73957
+ recovery: ["device-enabled"],
73958
+ snapshotLabel: "Devices switched off now",
73959
+ snapshotSection: "device-state"
73960
+ },
73961
+ {
73962
+ id: "stream-connectivity",
73963
+ family: "device-events",
73964
+ label: "Stream connectivity (offline / back online)",
73965
+ bad: ["stream-offline"],
73966
+ recovery: ["stream-online"],
73967
+ snapshotLabel: "Streams offline now",
73968
+ snapshotSection: "streams"
73969
+ },
73970
+ {
73971
+ id: "battery",
73972
+ family: "device-events",
73973
+ label: "Battery (low / back to normal)",
73974
+ bad: ["device-battery-low"],
73975
+ recovery: ["device-battery-normal"],
73976
+ snapshotLabel: "Batteries low now",
73977
+ snapshotSection: "battery"
73978
+ },
73979
+ {
73980
+ id: "consumables",
73981
+ family: "device-events",
73982
+ label: "Consumables (low / replaced)",
73983
+ bad: ["device-consumable-low"],
73984
+ recovery: ["device-consumable-normal"],
73985
+ snapshotLabel: "Consumables low now",
73986
+ snapshotSection: "consumables"
73987
+ },
73988
+ {
73989
+ id: "tanks",
73990
+ family: "device-events",
73991
+ label: "Tanks (low or full / back to normal)",
73992
+ bad: ["device-tank-low", "device-tank-full"],
73993
+ recovery: ["device-tank-normal"],
73994
+ snapshotLabel: "Tanks low or full now",
73995
+ snapshotSection: "tanks"
73996
+ },
73997
+ {
73998
+ id: "motion-noise",
73999
+ family: "device-events",
74000
+ label: "Motion without a subject (constant / calm again)",
74001
+ bad: ["motion-noisy"],
74002
+ recovery: ["motion-calm"],
74003
+ snapshotLabel: "Cameras with constant motion now",
74004
+ snapshotSection: null
74005
+ },
74006
+ {
74007
+ id: "recording-health",
74008
+ family: "device-events",
74009
+ label: "Recording health (stalled or degraded / recording again)",
74010
+ bad: ["recording-stalled", "recording-degraded"],
74011
+ recovery: ["recording-healthy"],
74012
+ snapshotLabel: "Recordings stalled now",
74013
+ snapshotSection: null
74014
+ },
74015
+ {
74016
+ id: "device-attention",
74017
+ family: "device-events",
74018
+ label: "Device needs attention (raised / resolved)",
74019
+ bad: ["device-attention-required"],
74020
+ recovery: ["device-attention-resolved"],
74021
+ snapshotLabel: "Devices needing attention now",
74022
+ snapshotSection: null
74023
+ },
74024
+ {
74025
+ id: "node-connectivity",
74026
+ family: "system",
74027
+ label: "Node connectivity (offline / back online)",
74028
+ bad: ["node-offline"],
74029
+ recovery: ["node-online"],
74030
+ snapshotLabel: "Nodes offline now",
74031
+ snapshotSection: "nodes"
74032
+ },
74033
+ {
74034
+ id: "storage-space",
74035
+ family: "system",
74036
+ label: "Storage space (low or critical / ok again)",
74037
+ bad: ["storage-location-low", "storage-location-critical"],
74038
+ recovery: ["storage-location-ok"],
74039
+ snapshotLabel: "Storage locations low now",
74040
+ snapshotSection: null
74041
+ },
74042
+ {
74043
+ id: "critical-alerts",
74044
+ family: "system",
74045
+ label: "Critical alerts (raised / resolved)",
74046
+ bad: ["alert-critical"],
74047
+ recovery: ["alert-critical-resolved"],
74048
+ snapshotLabel: "Critical alerts open now",
74049
+ snapshotSection: null
74050
+ },
74051
+ {
74052
+ id: "rule-health",
74053
+ family: "system",
74054
+ label: "Rule health (broken / repaired)",
74055
+ bad: ["rule-broken"],
74056
+ recovery: ["rule-repaired"],
74057
+ snapshotLabel: "Notification rules broken now",
74058
+ snapshotSection: null
74059
+ }
74060
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
73885
74061
  new Set([
73886
74062
  "disarmed",
73887
74063
  "armed_home",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.135",
3
+ "version": "1.2.137",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",