camstack 1.2.189 → 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-LKHQ7I4L.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-LKHQ7I4L.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-BegKjwUu.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",
@@ -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,43 +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(),
62143
62199
  /** Extra dry option when the appliance exposes it. */
62144
- extraDry: external_exports.boolean(),
62200
+ extraDry: external_exports.boolean().nullable(),
62145
62201
  /** Intensive zone (lower basket) when the appliance exposes it. */
62146
- intensiveZone: external_exports.boolean(),
62202
+ intensiveZone: external_exports.boolean().nullable(),
62147
62203
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
62148
- varioSpeedPlus: external_exports.boolean(),
62149
- /** Child lock (controls disabled on the appliance). */
62150
- childLock: external_exports.boolean(),
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. */
62151
62210
  errorCode: external_exports.number().nullable(),
62211
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
62152
62212
  errorLabel: external_exports.string().nullable(),
62213
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
62153
62214
  lastFetchedAt: external_exports.number()
62154
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
+ });
62155
62274
  var dishwasherCapability = {
62156
62275
  name: "dishwasher",
62157
62276
  scope: "device",
@@ -62159,86 +62278,102 @@ var dishwasherCapability = {
62159
62278
  mode: "singleton",
62160
62279
  deviceTypes: [DeviceType.Dishwasher],
62161
62280
  methods: {
62162
- 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(), {
62163
62290
  kind: "mutation",
62164
62291
  auth: "protected"
62165
62292
  }),
62166
- 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(), {
62167
62294
  kind: "mutation",
62168
62295
  auth: "protected"
62169
62296
  }),
62170
- 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(), {
62298
+ kind: "mutation",
62299
+ auth: "protected"
62300
+ }),
62301
+ stop: method(external_exports.object({ deviceId: DeviceIdSchema }), external_exports.void(), {
62171
62302
  kind: "mutation",
62172
62303
  auth: "protected"
62173
62304
  }),
62305
+ /** Select (not start) a program; refused when the appliance does not offer it. */
62174
62306
  setProgram: method(external_exports.object({
62175
- deviceId: external_exports.number().int().nonnegative(),
62307
+ deviceId: DeviceIdSchema,
62176
62308
  program: external_exports.string().min(1)
62177
62309
  }), external_exports.void(), {
62178
62310
  kind: "mutation",
62179
62311
  auth: "protected"
62180
62312
  }),
62181
62313
  setPower: method(external_exports.object({
62182
- deviceId: external_exports.number().int().nonnegative(),
62314
+ deviceId: DeviceIdSchema,
62183
62315
  on: external_exports.boolean()
62184
62316
  }), external_exports.void(), {
62185
62317
  kind: "mutation",
62186
62318
  auth: "protected"
62187
62319
  }),
62188
62320
  setHalfLoad: method(external_exports.object({
62189
- deviceId: external_exports.number().int().nonnegative(),
62321
+ deviceId: DeviceIdSchema,
62190
62322
  on: external_exports.boolean()
62191
62323
  }), external_exports.void(), {
62192
62324
  kind: "mutation",
62193
62325
  auth: "protected"
62194
62326
  }),
62195
62327
  setHygienePlus: method(external_exports.object({
62196
- deviceId: external_exports.number().int().nonnegative(),
62328
+ deviceId: DeviceIdSchema,
62197
62329
  on: external_exports.boolean()
62198
62330
  }), external_exports.void(), {
62199
62331
  kind: "mutation",
62200
62332
  auth: "protected"
62201
62333
  }),
62202
62334
  setExtraDry: method(external_exports.object({
62203
- deviceId: external_exports.number().int().nonnegative(),
62335
+ deviceId: DeviceIdSchema,
62204
62336
  on: external_exports.boolean()
62205
62337
  }), external_exports.void(), {
62206
62338
  kind: "mutation",
62207
62339
  auth: "protected"
62208
62340
  }),
62209
62341
  setIntensiveZone: method(external_exports.object({
62210
- deviceId: external_exports.number().int().nonnegative(),
62342
+ deviceId: DeviceIdSchema,
62211
62343
  on: external_exports.boolean()
62212
62344
  }), external_exports.void(), {
62213
62345
  kind: "mutation",
62214
62346
  auth: "protected"
62215
62347
  }),
62216
62348
  setVarioSpeedPlus: method(external_exports.object({
62217
- deviceId: external_exports.number().int().nonnegative(),
62349
+ deviceId: DeviceIdSchema,
62218
62350
  on: external_exports.boolean()
62219
62351
  }), external_exports.void(), {
62220
62352
  kind: "mutation",
62221
62353
  auth: "protected"
62222
62354
  }),
62223
62355
  setChildLock: method(external_exports.object({
62224
- deviceId: external_exports.number().int().nonnegative(),
62356
+ deviceId: DeviceIdSchema,
62225
62357
  on: external_exports.boolean()
62226
62358
  }), external_exports.void(), {
62227
62359
  kind: "mutation",
62228
62360
  auth: "protected"
62229
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
+ */
62230
62367
  setOption: method(external_exports.object({
62231
- deviceId: external_exports.number().int().nonnegative(),
62368
+ deviceId: DeviceIdSchema,
62232
62369
  key: external_exports.string().min(1),
62233
- value: external_exports.union([
62234
- external_exports.boolean(),
62235
- external_exports.string(),
62236
- external_exports.number()
62237
- ])
62370
+ value: DishwasherValueSchema
62238
62371
  }), external_exports.void(), {
62239
62372
  kind: "mutation",
62240
62373
  auth: "protected"
62241
- })
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" })
62242
62377
  },
62243
62378
  status: {
62244
62379
  schema: DishwasherStatusSchema,
@@ -74012,6 +74147,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
74012
74147
  addonId: null,
74013
74148
  access: "view"
74014
74149
  },
74150
+ "dishwasher.getOptions": {
74151
+ capName: "dishwasher",
74152
+ capScope: "device",
74153
+ addonId: null,
74154
+ access: "view"
74155
+ },
74015
74156
  "dishwasher.getStatus": {
74016
74157
  capName: "dishwasher",
74017
74158
  capScope: "device",
@@ -74024,6 +74165,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
74024
74165
  addonId: null,
74025
74166
  access: "create"
74026
74167
  },
74168
+ "dishwasher.resume": {
74169
+ capName: "dishwasher",
74170
+ capScope: "device",
74171
+ addonId: null,
74172
+ access: "create"
74173
+ },
74027
74174
  "dishwasher.setChildLock": {
74028
74175
  capName: "dishwasher",
74029
74176
  capScope: "device",
@@ -78524,6 +78671,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
78524
78671
  addonId: null,
78525
78672
  access: "view"
78526
78673
  },
78674
+ "storageMigration.moverClearance": {
78675
+ capName: "storage-migration",
78676
+ capScope: "system",
78677
+ addonId: null,
78678
+ access: "view"
78679
+ },
78527
78680
  "storageMigration.movers": {
78528
78681
  capName: "storage-migration",
78529
78682
  capScope: "system",
@@ -80767,6 +80920,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80767
80920
  form: "single",
80768
80921
  optional: false
80769
80922
  }],
80923
+ "dishwasher.getOptions": [{
80924
+ name: "deviceId",
80925
+ form: "single",
80926
+ optional: false
80927
+ }],
80770
80928
  "dishwasher.getStatus": [{
80771
80929
  name: "deviceId",
80772
80930
  form: "single",
@@ -80777,6 +80935,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
80777
80935
  form: "single",
80778
80936
  optional: false
80779
80937
  }],
80938
+ "dishwasher.resume": [{
80939
+ name: "deviceId",
80940
+ form: "single",
80941
+ optional: false
80942
+ }],
80780
80943
  "dishwasher.setChildLock": [{
80781
80944
  name: "deviceId",
80782
80945
  form: "single",
@@ -83062,6 +83225,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
83062
83225
  "wrapper-update-available": "system",
83063
83226
  "backup-completed": "system",
83064
83227
  "export-completed": "system",
83228
+ "alert-critical": "system",
83229
+ "alert-error": "system",
83230
+ "alert-critical-resolved": "system",
83065
83231
  "storage-location-low": "system",
83066
83232
  "storage-location-critical": "system",
83067
83233
  "storage-location-ok": "system",
@@ -83187,6 +83353,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
83187
83353
  "storage-location-ok"
83188
83354
  ]
83189
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
+ },
83190
83366
  {
83191
83367
  id: "alarm",
83192
83368
  family: "alarm",
@@ -83208,6 +83384,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
83208
83384
  return [[descriptor.kind, field]];
83209
83385
  })));
83210
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
+ });
83211
83402
  var RULE_BODY_ONLY = ["body"];
83212
83403
  var RULE_TEXT = ["title", "body"];
83213
83404
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -83217,6 +83408,11 @@ var TANK = [
83217
83408
  "device-tank-full",
83218
83409
  "device-tank-normal"
83219
83410
  ];
83411
+ var ALERT_EPISODE = [
83412
+ "alert-critical",
83413
+ "alert-error",
83414
+ "alert-critical-resolved"
83415
+ ];
83220
83416
  var UPDATES = [
83221
83417
  "addon-update-available",
83222
83418
  "server-update-available",
@@ -83738,7 +83934,8 @@ var NC_TEMPLATE_VARS = [
83738
83934
  "server-updated",
83739
83935
  "storage-location-low",
83740
83936
  "storage-location-critical",
83741
- "storage-location-ok"
83937
+ "storage-location-ok",
83938
+ ...ALERT_EPISODE
83742
83939
  ]
83743
83940
  },
83744
83941
  {
@@ -83760,7 +83957,8 @@ var NC_TEMPLATE_VARS = [
83760
83957
  "server-updated",
83761
83958
  "storage-location-low",
83762
83959
  "storage-location-critical",
83763
- "storage-location-ok"
83960
+ "storage-location-ok",
83961
+ ...ALERT_EPISODE
83764
83962
  ]
83765
83963
  },
83766
83964
  {
@@ -83827,7 +84025,7 @@ var NC_TEMPLATE_VARS = [
83827
84025
  families: ["rule"],
83828
84026
  fields: [...RULE_TEXT],
83829
84027
  kinds: ["system"],
83830
- systemEventKinds: ["recording-degraded"]
84028
+ systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
83831
84029
  },
83832
84030
  {
83833
84031
  name: "locationName",
@@ -84024,13 +84222,53 @@ var NC_TEMPLATE_VARS = [
84024
84222
  },
84025
84223
  {
84026
84224
  name: "title",
84027
- label: "Export title",
84225
+ label: "Export or alert title",
84028
84226
  example: "Ingresso 08:00",
84029
84227
  group: "system",
84030
84228
  families: ["rule"],
84031
84229
  fields: [...RULE_TEXT],
84032
84230
  kinds: ["system"],
84033
- 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]
84034
84272
  },
84035
84273
  {
84036
84274
  name: "exportId",