camstack 1.2.188 → 1.2.190

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.
package/dist/cli.js CHANGED
@@ -37,7 +37,7 @@ async function runServe(args) {
37
37
  ...typeof values.data === "string" ? { data: values.data } : {}
38
38
  };
39
39
  Object.assign(process.env, buildServeEnv(opts));
40
- await import("./launcher-FYTHPW44.js");
40
+ await import("./launcher-ILGFB3AQ.js");
41
41
  }
42
42
 
43
43
  // src/commands/agent.ts
@@ -82,7 +82,7 @@ async function runAgent(args) {
82
82
  ...typeof values.port === "string" ? { port: values.port } : {}
83
83
  };
84
84
  Object.assign(process.env, buildAgentEnv(opts));
85
- await import("./launcher-FYTHPW44.js");
85
+ await import("./launcher-ILGFB3AQ.js");
86
86
  }
87
87
 
88
88
  // src/commands/setup.ts
@@ -91,7 +91,7 @@ import * as path from "path";
91
91
  import * as fs from "fs";
92
92
  import { parseArgs as parseArgs3 } from "util";
93
93
 
94
- // ../types/dist/event-category-BvOFi6PY.mjs
94
+ // ../types/dist/event-category-DOl51-Ij.mjs
95
95
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
96
96
  EventCategory2["SystemBoot"] = "system.boot";
97
97
  EventCategory2["SystemAddonsReady"] = "system.addons-ready";
@@ -111,6 +111,7 @@ var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
111
111
  EventCategory2["AddonRunnerRefused"] = "addon.runner-refused";
112
112
  EventCategory2["ProcessStateChanged"] = "process.state-changed";
113
113
  EventCategory2["SystemRunnerCheck"] = "system.runner-check";
114
+ EventCategory2["AlertEpisode"] = "alert.episode";
114
115
  EventCategory2["AddonError"] = "addon.error";
115
116
  EventCategory2["AddonPageReady"] = "addon.page-ready";
116
117
  EventCategory2["AddonWidgetReady"] = "addon.widget-ready";
@@ -14772,7 +14773,7 @@ function date4(params) {
14772
14773
  // ../../node_modules/zod/v4/classic/external.js
14773
14774
  config(en_default());
14774
14775
 
14775
- // ../types/dist/sleep-BOjuyoPC.mjs
14776
+ // ../types/dist/sleep-BxjU_fJM.mjs
14776
14777
  var AUDIO_CHUNK_FORMATS = [
14777
14778
  "f32le",
14778
14779
  "pcmu",
@@ -19086,7 +19087,14 @@ var AlertSeveritySchema = external_exports.enum([
19086
19087
  ]);
19087
19088
  var AlertActionSchema = external_exports.object({
19088
19089
  label: external_exports.string(),
19089
- href: external_exports.string().optional()
19090
+ href: external_exports.string().optional(),
19091
+ /**
19092
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
19093
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
19094
+ * start) — the browser must leave the SPA with a full navigation, because
19095
+ * the SPA has no such route and would bounce to the home page.
19096
+ */
19097
+ navigation: external_exports.enum(["app", "server"]).optional()
19090
19098
  });
19091
19099
  var AlertStatusSchema = external_exports.enum([
19092
19100
  "active",
@@ -24131,7 +24139,7 @@ var ResyncResultSchema = external_exports.object({
24131
24139
  var deviceAdoptionCapability = {
24132
24140
  name: "device-adoption",
24133
24141
  scope: "system",
24134
- mode: "singleton",
24142
+ mode: "collection",
24135
24143
  status: {
24136
24144
  schema: AdoptionStatusSchema,
24137
24145
  kind: "poll"
@@ -45406,7 +45414,7 @@ var deviceManagerCapability = {
45406
45414
  auth: "admin"
45407
45415
  }),
45408
45416
  /** List candidate filter chips for an integration via its device-adoption
45409
- * provider — addonId-routed so it never hits the singleton shadow. */
45417
+ * provider — addonId-routed via the collection pin. */
45410
45418
  adoptionListCandidateFilters: method(external_exports.object({
45411
45419
  addonId: external_exports.string(),
45412
45420
  integrationId: external_exports.string()
@@ -48535,6 +48543,9 @@ var NcSystemEventKindSchema = external_exports.enum([
48535
48543
  "server-updated",
48536
48544
  "export-completed",
48537
48545
  "backup-completed",
48546
+ "alert-critical",
48547
+ "alert-error",
48548
+ "alert-critical-resolved",
48538
48549
  "camera-online",
48539
48550
  "camera-offline",
48540
48551
  "camera-disabled",
@@ -57900,6 +57911,18 @@ var storageMigrationCapability = {
57900
57911
  */
57901
57912
  movers: method(external_exports.object({}), external_exports.array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }),
57902
57913
  /**
57914
+ * May a mover that touches these locations run NOW? One claim per physical
57915
+ * root is owned by the storage orchestrator: a single-location repoint holds
57916
+ * it while it carries its subtree, and a mover (`relocateMedia`,
57917
+ * `relocateFootage`, a migration move) asks here AFTER registering its job and
57918
+ * cancels itself on `clear: false`. The repoint, in turn, refuses while a
57919
+ * registered mover touches its root. Asked, never polled (D3).
57920
+ */
57921
+ moverClearance: method(external_exports.object({ locationIds: external_exports.array(external_exports.string()).readonly() }), external_exports.object({
57922
+ clear: external_exports.boolean(),
57923
+ repointLocationId: external_exports.string().optional()
57924
+ }), { auth: "admin" }),
57925
+ /**
57903
57926
  * What each class's SOURCE still holds, from the archive — never from the
57904
57927
  * resident index (D295). Only classes with something left (or something
57905
57928
  * unknown) are listed, so an empty list means there is nothing to drain and
@@ -62115,35 +62138,139 @@ var DishwasherStateSchema = external_exports.enum([
62115
62138
  "error",
62116
62139
  "unavailable"
62117
62140
  ]);
62141
+ var DishwasherOperationStateSchema = external_exports.enum([
62142
+ "Inactive",
62143
+ "Ready",
62144
+ "DelayedStart",
62145
+ "Run",
62146
+ "Pause",
62147
+ "ActionRequired",
62148
+ "Finished",
62149
+ "Error",
62150
+ "Aborting"
62151
+ ]);
62152
+ var DishwasherAvailabilitySchema = external_exports.enum([
62153
+ "available",
62154
+ "offline",
62155
+ "description-missing"
62156
+ ]);
62118
62157
  var DishwasherConsumableLevelSchema = external_exports.enum([
62119
62158
  "ok",
62120
62159
  "low",
62121
62160
  "empty"
62122
62161
  ]);
62123
62162
  var DishwasherStatusSchema = external_exports.object({
62163
+ availability: DishwasherAvailabilitySchema,
62164
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
62124
62165
  state: DishwasherStateSchema,
62125
- /** Active program id/name, or null when none selected / unknown. */
62166
+ /** The appliance's operation state as reported; null when not known. */
62167
+ operationState: DishwasherOperationStateSchema.nullable(),
62168
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
62126
62169
  program: external_exports.string().nullable(),
62127
- /** Program tokens the hardware accepts — drives the UI selector. */
62170
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
62171
+ selectedProgram: external_exports.string().nullable(),
62172
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
62128
62173
  availablePrograms: external_exports.array(external_exports.string()),
62129
- /** Minutes remaining on the active cycle, or null when not running. */
62130
- remainingMinutes: external_exports.number().int().nonnegative().nullable(),
62174
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
62175
+ remainingSeconds: external_exports.number().int().nonnegative().nullable(),
62176
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
62177
+ delayedStartSeconds: external_exports.number().int().nonnegative().nullable(),
62131
62178
  /** Cycle completion 0..100, or null when not applicable. */
62132
62179
  progressPercent: external_exports.number().min(0).max(100).nullable(),
62133
- /** True when the door is reported open. */
62134
- doorOpen: external_exports.boolean(),
62135
- /** True when remote start is allowed (door closed, power on, etc.). */
62136
- remoteStartAllowed: external_exports.boolean(),
62137
- /** Main power / switched-on state. */
62138
- powerOn: external_exports.boolean(),
62180
+ /** True when the door is reported open; null when the door state is not known. */
62181
+ doorOpen: external_exports.boolean().nullable(),
62182
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
62183
+ doorLocked: external_exports.boolean().nullable(),
62184
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
62185
+ remoteStartAllowed: external_exports.boolean().nullable(),
62186
+ /** True when the appliance accepts remote control now; null when not known. */
62187
+ remoteControlActive: external_exports.boolean().nullable(),
62188
+ /** True while somebody operates the appliance at its panel; null when not reported. */
62189
+ localControlActive: external_exports.boolean().nullable(),
62190
+ /** Main power / switched-on state; null when not known. */
62191
+ powerOn: external_exports.boolean().nullable(),
62192
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
62193
+ powerState: external_exports.string().nullable(),
62139
62194
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
62140
62195
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
62141
- halfLoad: external_exports.boolean(),
62142
- hygienePlus: external_exports.boolean(),
62196
+ /** Option states: null when the appliance does not expose the option or has not said. */
62197
+ halfLoad: external_exports.boolean().nullable(),
62198
+ hygienePlus: external_exports.boolean().nullable(),
62199
+ /** Extra dry option when the appliance exposes it. */
62200
+ extraDry: external_exports.boolean().nullable(),
62201
+ /** Intensive zone (lower basket) when the appliance exposes it. */
62202
+ intensiveZone: external_exports.boolean().nullable(),
62203
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
62204
+ varioSpeedPlus: external_exports.boolean().nullable(),
62205
+ /** Child lock (controls disabled on the appliance); null when not known. */
62206
+ childLock: external_exports.boolean().nullable(),
62207
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
62208
+ activeEvents: external_exports.array(external_exports.string()),
62209
+ /** Numeric error code when the appliance reports one; null otherwise. */
62143
62210
  errorCode: external_exports.number().nullable(),
62211
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
62144
62212
  errorLabel: external_exports.string().nullable(),
62213
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
62145
62214
  lastFetchedAt: external_exports.number()
62146
62215
  });
62216
+ var DeviceIdSchema = external_exports.number().int().nonnegative();
62217
+ var DishwasherValueSchema = external_exports.union([
62218
+ external_exports.boolean(),
62219
+ external_exports.string(),
62220
+ external_exports.number()
62221
+ ]);
62222
+ var DishwasherAccessSchema = external_exports.enum([
62223
+ "none",
62224
+ "read",
62225
+ "readWrite",
62226
+ "writeOnly",
62227
+ "readStatic"
62228
+ ]);
62229
+ var DishwasherOptionDescriptorSchema = external_exports.object({
62230
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
62231
+ key: external_exports.string(),
62232
+ /** Last segment of the key, for display. */
62233
+ name: external_exports.string(),
62234
+ type: external_exports.enum([
62235
+ "boolean",
62236
+ "number",
62237
+ "enum",
62238
+ "string"
62239
+ ]),
62240
+ access: DishwasherAccessSchema,
62241
+ /** The appliance reports this entity as currently available. */
62242
+ available: external_exports.boolean(),
62243
+ /** Unit the description declares for a number; null when it declares none. */
62244
+ unit: external_exports.string().nullable(),
62245
+ min: external_exports.number().nullable(),
62246
+ max: external_exports.number().nullable(),
62247
+ step: external_exports.number().nullable(),
62248
+ /** Allowed members of an enum; null for other types. */
62249
+ enumValues: external_exports.array(external_exports.string()).nullable(),
62250
+ defaultValue: DishwasherValueSchema.nullable()
62251
+ });
62252
+ var DishwasherProgramSchema = external_exports.object({
62253
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
62254
+ key: external_exports.string(),
62255
+ name: external_exports.string(),
62256
+ /** The appliance currently offers this program. */
62257
+ available: external_exports.boolean(),
62258
+ /** The options this program lists, with the program-level access / availability / default. */
62259
+ options: external_exports.array(DishwasherOptionDescriptorSchema)
62260
+ });
62261
+ var DishwasherOptionsSchema = external_exports.object({
62262
+ availability: DishwasherAvailabilitySchema,
62263
+ /** What the appliance can be told to do, from the commands its description declares. */
62264
+ supportsStart: external_exports.boolean(),
62265
+ supportsPause: external_exports.boolean(),
62266
+ supportsResume: external_exports.boolean(),
62267
+ supportsStop: external_exports.boolean(),
62268
+ supportsPower: external_exports.boolean(),
62269
+ /** Every program the description lists, with its options. */
62270
+ programs: external_exports.array(DishwasherProgramSchema),
62271
+ /** Every option and setting entity the description lists (programs reference these by key). */
62272
+ options: external_exports.array(DishwasherOptionDescriptorSchema)
62273
+ });
62147
62274
  var dishwasherCapability = {
62148
62275
  name: "dishwasher",
62149
62276
  scope: "device",
@@ -62151,58 +62278,102 @@ var dishwasherCapability = {
62151
62278
  mode: "singleton",
62152
62279
  deviceTypes: [DeviceType.Dishwasher],
62153
62280
  methods: {
62154
- start: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), external_exports.void(), {
62281
+ /**
62282
+ * Start a program. Without `program` the selected one starts. `options` are
62283
+ * option feature keys; each is checked against the program's constraints.
62284
+ */
62285
+ start: method(external_exports.object({
62286
+ deviceId: DeviceIdSchema,
62287
+ program: external_exports.string().min(1).optional(),
62288
+ options: external_exports.record(external_exports.string(), DishwasherValueSchema).optional()
62289
+ }), external_exports.void(), {
62155
62290
  kind: "mutation",
62156
62291
  auth: "protected"
62157
62292
  }),
62158
- pause: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), external_exports.void(), {
62293
+ pause: method(external_exports.object({ deviceId: DeviceIdSchema }), external_exports.void(), {
62159
62294
  kind: "mutation",
62160
62295
  auth: "protected"
62161
62296
  }),
62162
- stop: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), external_exports.void(), {
62297
+ resume: method(external_exports.object({ deviceId: DeviceIdSchema }), external_exports.void(), {
62163
62298
  kind: "mutation",
62164
62299
  auth: "protected"
62165
62300
  }),
62301
+ stop: method(external_exports.object({ deviceId: DeviceIdSchema }), external_exports.void(), {
62302
+ kind: "mutation",
62303
+ auth: "protected"
62304
+ }),
62305
+ /** Select (not start) a program; refused when the appliance does not offer it. */
62166
62306
  setProgram: method(external_exports.object({
62167
- deviceId: external_exports.number().int().nonnegative(),
62307
+ deviceId: DeviceIdSchema,
62168
62308
  program: external_exports.string().min(1)
62169
62309
  }), external_exports.void(), {
62170
62310
  kind: "mutation",
62171
62311
  auth: "protected"
62172
62312
  }),
62173
62313
  setPower: method(external_exports.object({
62174
- deviceId: external_exports.number().int().nonnegative(),
62314
+ deviceId: DeviceIdSchema,
62175
62315
  on: external_exports.boolean()
62176
62316
  }), external_exports.void(), {
62177
62317
  kind: "mutation",
62178
62318
  auth: "protected"
62179
62319
  }),
62180
62320
  setHalfLoad: method(external_exports.object({
62181
- deviceId: external_exports.number().int().nonnegative(),
62321
+ deviceId: DeviceIdSchema,
62182
62322
  on: external_exports.boolean()
62183
62323
  }), external_exports.void(), {
62184
62324
  kind: "mutation",
62185
62325
  auth: "protected"
62186
62326
  }),
62187
62327
  setHygienePlus: method(external_exports.object({
62188
- deviceId: external_exports.number().int().nonnegative(),
62328
+ deviceId: DeviceIdSchema,
62189
62329
  on: external_exports.boolean()
62190
62330
  }), external_exports.void(), {
62191
62331
  kind: "mutation",
62192
62332
  auth: "protected"
62193
62333
  }),
62334
+ setExtraDry: method(external_exports.object({
62335
+ deviceId: DeviceIdSchema,
62336
+ on: external_exports.boolean()
62337
+ }), external_exports.void(), {
62338
+ kind: "mutation",
62339
+ auth: "protected"
62340
+ }),
62341
+ setIntensiveZone: method(external_exports.object({
62342
+ deviceId: DeviceIdSchema,
62343
+ on: external_exports.boolean()
62344
+ }), external_exports.void(), {
62345
+ kind: "mutation",
62346
+ auth: "protected"
62347
+ }),
62348
+ setVarioSpeedPlus: method(external_exports.object({
62349
+ deviceId: DeviceIdSchema,
62350
+ on: external_exports.boolean()
62351
+ }), external_exports.void(), {
62352
+ kind: "mutation",
62353
+ auth: "protected"
62354
+ }),
62355
+ setChildLock: method(external_exports.object({
62356
+ deviceId: DeviceIdSchema,
62357
+ on: external_exports.boolean()
62358
+ }), external_exports.void(), {
62359
+ kind: "mutation",
62360
+ auth: "protected"
62361
+ }),
62362
+ /**
62363
+ * Write any option or setting by feature key. Refused when the description does
62364
+ * not list it, it is not writable or not available now, or the value is outside
62365
+ * its declared range / members.
62366
+ */
62194
62367
  setOption: method(external_exports.object({
62195
- deviceId: external_exports.number().int().nonnegative(),
62368
+ deviceId: DeviceIdSchema,
62196
62369
  key: external_exports.string().min(1),
62197
- value: external_exports.union([
62198
- external_exports.boolean(),
62199
- external_exports.string(),
62200
- external_exports.number()
62201
- ])
62370
+ value: DishwasherValueSchema
62202
62371
  }), external_exports.void(), {
62203
62372
  kind: "mutation",
62204
62373
  auth: "protected"
62205
- })
62374
+ }),
62375
+ /** What this appliance can do, from its own description — the UI is derived from it. */
62376
+ getOptions: method(external_exports.object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
62206
62377
  },
62207
62378
  status: {
62208
62379
  schema: DishwasherStatusSchema,
@@ -73976,6 +74147,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
73976
74147
  addonId: null,
73977
74148
  access: "view"
73978
74149
  },
74150
+ "dishwasher.getOptions": {
74151
+ capName: "dishwasher",
74152
+ capScope: "device",
74153
+ addonId: null,
74154
+ access: "view"
74155
+ },
73979
74156
  "dishwasher.getStatus": {
73980
74157
  capName: "dishwasher",
73981
74158
  capScope: "device",
@@ -73988,6 +74165,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
73988
74165
  addonId: null,
73989
74166
  access: "create"
73990
74167
  },
74168
+ "dishwasher.resume": {
74169
+ capName: "dishwasher",
74170
+ capScope: "device",
74171
+ addonId: null,
74172
+ access: "create"
74173
+ },
74174
+ "dishwasher.setChildLock": {
74175
+ capName: "dishwasher",
74176
+ capScope: "device",
74177
+ addonId: null,
74178
+ access: "create"
74179
+ },
74180
+ "dishwasher.setExtraDry": {
74181
+ capName: "dishwasher",
74182
+ capScope: "device",
74183
+ addonId: null,
74184
+ access: "create"
74185
+ },
73991
74186
  "dishwasher.setHalfLoad": {
73992
74187
  capName: "dishwasher",
73993
74188
  capScope: "device",
@@ -74000,6 +74195,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
74000
74195
  addonId: null,
74001
74196
  access: "create"
74002
74197
  },
74198
+ "dishwasher.setIntensiveZone": {
74199
+ capName: "dishwasher",
74200
+ capScope: "device",
74201
+ addonId: null,
74202
+ access: "create"
74203
+ },
74003
74204
  "dishwasher.setOption": {
74004
74205
  capName: "dishwasher",
74005
74206
  capScope: "device",
@@ -74018,6 +74219,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
74018
74219
  addonId: null,
74019
74220
  access: "create"
74020
74221
  },
74222
+ "dishwasher.setVarioSpeedPlus": {
74223
+ capName: "dishwasher",
74224
+ capScope: "device",
74225
+ addonId: null,
74226
+ access: "create"
74227
+ },
74021
74228
  "dishwasher.start": {
74022
74229
  capName: "dishwasher",
74023
74230
  capScope: "device",
@@ -78464,6 +78671,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
78464
78671
  addonId: null,
78465
78672
  access: "view"
78466
78673
  },
78674
+ "storageMigration.moverClearance": {
78675
+ capName: "storage-migration",
78676
+ capScope: "system",
78677
+ addonId: null,
78678
+ access: "view"
78679
+ },
78467
78680
  "storageMigration.movers": {
78468
78681
  capName: "storage-migration",
78469
78682
  capScope: "system",
@@ -80707,6 +80920,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80707
80920
  form: "single",
80708
80921
  optional: false
80709
80922
  }],
80923
+ "dishwasher.getOptions": [{
80924
+ name: "deviceId",
80925
+ form: "single",
80926
+ optional: false
80927
+ }],
80710
80928
  "dishwasher.getStatus": [{
80711
80929
  name: "deviceId",
80712
80930
  form: "single",
@@ -80717,6 +80935,21 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80717
80935
  form: "single",
80718
80936
  optional: false
80719
80937
  }],
80938
+ "dishwasher.resume": [{
80939
+ name: "deviceId",
80940
+ form: "single",
80941
+ optional: false
80942
+ }],
80943
+ "dishwasher.setChildLock": [{
80944
+ name: "deviceId",
80945
+ form: "single",
80946
+ optional: false
80947
+ }],
80948
+ "dishwasher.setExtraDry": [{
80949
+ name: "deviceId",
80950
+ form: "single",
80951
+ optional: false
80952
+ }],
80720
80953
  "dishwasher.setHalfLoad": [{
80721
80954
  name: "deviceId",
80722
80955
  form: "single",
@@ -80727,6 +80960,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80727
80960
  form: "single",
80728
80961
  optional: false
80729
80962
  }],
80963
+ "dishwasher.setIntensiveZone": [{
80964
+ name: "deviceId",
80965
+ form: "single",
80966
+ optional: false
80967
+ }],
80730
80968
  "dishwasher.setOption": [{
80731
80969
  name: "deviceId",
80732
80970
  form: "single",
@@ -80742,6 +80980,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80742
80980
  form: "single",
80743
80981
  optional: false
80744
80982
  }],
80983
+ "dishwasher.setVarioSpeedPlus": [{
80984
+ name: "deviceId",
80985
+ form: "single",
80986
+ optional: false
80987
+ }],
80745
80988
  "dishwasher.start": [{
80746
80989
  name: "deviceId",
80747
80990
  form: "single",
@@ -82982,6 +83225,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
82982
83225
  "wrapper-update-available": "system",
82983
83226
  "backup-completed": "system",
82984
83227
  "export-completed": "system",
83228
+ "alert-critical": "system",
83229
+ "alert-error": "system",
83230
+ "alert-critical-resolved": "system",
82985
83231
  "storage-location-low": "system",
82986
83232
  "storage-location-critical": "system",
82987
83233
  "storage-location-ok": "system",
@@ -83107,6 +83353,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
83107
83353
  "storage-location-ok"
83108
83354
  ]
83109
83355
  },
83356
+ {
83357
+ id: "alerts",
83358
+ family: "system",
83359
+ label: "Alerts",
83360
+ kinds: [
83361
+ "alert-critical",
83362
+ "alert-error",
83363
+ "alert-critical-resolved"
83364
+ ]
83365
+ },
83110
83366
  {
83111
83367
  id: "alarm",
83112
83368
  family: "alarm",
@@ -83128,6 +83384,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
83128
83384
  return [[descriptor.kind, field]];
83129
83385
  })));
83130
83386
  var NC_SENSOR_TRANSITION_KINDS = Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
83387
+ var AlertEpisodePayloadSchema = external_exports.object({
83388
+ phase: external_exports.enum(["raised", "resolved"]),
83389
+ episodeId: external_exports.string().min(1),
83390
+ alertId: external_exports.string().min(1),
83391
+ severity: AlertSeveritySchema,
83392
+ category: external_exports.string(),
83393
+ title: external_exports.string(),
83394
+ message: external_exports.string(),
83395
+ sourceType: external_exports.string().optional(),
83396
+ sourceId: external_exports.string().optional(),
83397
+ nodeId: external_exports.string().optional(),
83398
+ /** The alert's own action link (where the operator acts on it), when it has one. */
83399
+ actionUrl: external_exports.string().optional(),
83400
+ at: external_exports.number()
83401
+ });
83131
83402
  var RULE_BODY_ONLY = ["body"];
83132
83403
  var RULE_TEXT = ["title", "body"];
83133
83404
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -83137,6 +83408,11 @@ var TANK = [
83137
83408
  "device-tank-full",
83138
83409
  "device-tank-normal"
83139
83410
  ];
83411
+ var ALERT_EPISODE = [
83412
+ "alert-critical",
83413
+ "alert-error",
83414
+ "alert-critical-resolved"
83415
+ ];
83140
83416
  var UPDATES = [
83141
83417
  "addon-update-available",
83142
83418
  "server-update-available",
@@ -83658,7 +83934,8 @@ var NC_TEMPLATE_VARS = [
83658
83934
  "server-updated",
83659
83935
  "storage-location-low",
83660
83936
  "storage-location-critical",
83661
- "storage-location-ok"
83937
+ "storage-location-ok",
83938
+ ...ALERT_EPISODE
83662
83939
  ]
83663
83940
  },
83664
83941
  {
@@ -83680,7 +83957,8 @@ var NC_TEMPLATE_VARS = [
83680
83957
  "server-updated",
83681
83958
  "storage-location-low",
83682
83959
  "storage-location-critical",
83683
- "storage-location-ok"
83960
+ "storage-location-ok",
83961
+ ...ALERT_EPISODE
83684
83962
  ]
83685
83963
  },
83686
83964
  {
@@ -83747,7 +84025,7 @@ var NC_TEMPLATE_VARS = [
83747
84025
  families: ["rule"],
83748
84026
  fields: [...RULE_TEXT],
83749
84027
  kinds: ["system"],
83750
- systemEventKinds: ["recording-degraded"]
84028
+ systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
83751
84029
  },
83752
84030
  {
83753
84031
  name: "locationName",
@@ -83944,13 +84222,53 @@ var NC_TEMPLATE_VARS = [
83944
84222
  },
83945
84223
  {
83946
84224
  name: "title",
83947
- label: "Export title",
84225
+ label: "Export or alert title",
83948
84226
  example: "Ingresso 08:00",
83949
84227
  group: "system",
83950
84228
  families: ["rule"],
83951
84229
  fields: [...RULE_TEXT],
83952
84230
  kinds: ["system"],
83953
- systemEventKinds: ["export-completed"]
84231
+ systemEventKinds: ["export-completed", ...ALERT_EPISODE]
84232
+ },
84233
+ {
84234
+ name: "severity",
84235
+ label: "Alert severity",
84236
+ example: "critical",
84237
+ group: "system",
84238
+ families: ["rule"],
84239
+ fields: [...RULE_TEXT],
84240
+ kinds: ["system"],
84241
+ systemEventKinds: [...ALERT_EPISODE]
84242
+ },
84243
+ {
84244
+ name: "category",
84245
+ label: "Alert category",
84246
+ example: "addon.runner-failed",
84247
+ group: "system",
84248
+ families: ["rule"],
84249
+ fields: [...RULE_TEXT],
84250
+ kinds: ["system"],
84251
+ systemEventKinds: [...ALERT_EPISODE]
84252
+ },
84253
+ {
84254
+ name: "source",
84255
+ label: "Alert source (addon, node or runner)",
84256
+ example: "recorder",
84257
+ group: "system",
84258
+ families: ["rule"],
84259
+ fields: [...RULE_TEXT],
84260
+ kinds: ["system"],
84261
+ systemEventKinds: [...ALERT_EPISODE]
84262
+ },
84263
+ {
84264
+ name: "actionUrl",
84265
+ label: "Alert action link",
84266
+ example: "/system/addons",
84267
+ group: "system",
84268
+ families: ["rule"],
84269
+ fields: [...RULE_TEXT],
84270
+ kinds: ["system"],
84271
+ systemEventKinds: [...ALERT_EPISODE]
83954
84272
  },
83955
84273
  {
83956
84274
  name: "exportId",