@camstack/addon-provider-amcrest 0.2.139 → 0.2.140

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.
Files changed (3) hide show
  1. package/dist/addon.js +264 -44
  2. package/dist/addon.mjs +264 -44
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -35,7 +35,7 @@ let node_stream_promises = require("node:stream/promises");
35
35
  let node_child_process = require("node:child_process");
36
36
  require("node:zlib");
37
37
  let node_os = require("node:os");
38
- //#region ../types/dist/event-category-BvOFi6PY.mjs
38
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
39
39
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
40
40
  EventCategory["SystemBoot"] = "system.boot";
41
41
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -114,9 +114,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
114
114
  /**
115
115
  * The node's one-shot runner boot check (D877): planned runners against the
116
116
  * process service, `degraded` when any is failed, refused or missing. The
117
- * alert centre turns it into one alert and a direct critical push.
117
+ * alert centre turns it into one critical alert.
118
118
  */
119
119
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
120
+ /**
121
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
122
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
123
+ * centre sends no notification of its own: Notification Center turns this
124
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
125
+ * system-event kinds, and reconciles from the alerts store because a bus
126
+ * event may be dropped (D8, D11).
127
+ */
128
+ EventCategory["AlertEpisode"] = "alert.episode";
120
129
  EventCategory["AddonError"] = "addon.error";
121
130
  EventCategory["AddonPageReady"] = "addon.page-ready";
122
131
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5441,7 +5450,7 @@ var ZodIssueCode = {
5441
5450
  var ZodFirstPartyTypeKind;
5442
5451
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5443
5452
  //#endregion
5444
- //#region ../types/dist/sleep-BegKjwUu.mjs
5453
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5445
5454
  /**
5446
5455
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5447
5456
  * window to float samples (D455).
@@ -13228,7 +13237,14 @@ var AlertSeveritySchema = _enum([
13228
13237
  ]);
13229
13238
  var AlertActionSchema = object({
13230
13239
  label: string(),
13231
- href: string().optional()
13240
+ href: string().optional(),
13241
+ /**
13242
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13243
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13244
+ * start) — the browser must leave the SPA with a full navigation, because
13245
+ * the SPA has no such route and would bounce to the home page.
13246
+ */
13247
+ navigation: _enum(["app", "server"]).optional()
13232
13248
  });
13233
13249
  var AlertStatusSchema = _enum([
13234
13250
  "active",
@@ -42057,6 +42073,9 @@ var NcSystemEventKindSchema = _enum([
42057
42073
  "server-updated",
42058
42074
  "export-completed",
42059
42075
  "backup-completed",
42076
+ "alert-critical",
42077
+ "alert-error",
42078
+ "alert-critical-resolved",
42060
42079
  "camera-online",
42061
42080
  "camera-offline",
42062
42081
  "camera-disabled",
@@ -51237,7 +51256,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51237
51256
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51238
51257
  kind: "mutation",
51239
51258
  auth: "admin"
51240
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51259
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51260
+ clear: boolean(),
51261
+ repointLocationId: string().optional()
51262
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51241
51263
  kind: "mutation",
51242
51264
  auth: "admin"
51243
51265
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55902,6 +55924,11 @@ onStatusChanged: { data: object({
55902
55924
  *
55903
55925
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55904
55926
  * provider refreshes the slice on an interval and eagerly after commands.
55927
+ *
55928
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55929
+ * nullable: `null` means "not known right now" (the appliance has not said,
55930
+ * the link is down, or the description does not carry it) and is never
55931
+ * rendered or exported as `false` / `0`. `availability` says why.
55905
55932
  */
55906
55933
  var DishwasherStateSchema = _enum([
55907
55934
  "idle",
@@ -55911,43 +55938,155 @@ var DishwasherStateSchema = _enum([
55911
55938
  "error",
55912
55939
  "unavailable"
55913
55940
  ]);
55941
+ /**
55942
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55943
+ * view for compact surfaces; this is what the appliance said.
55944
+ */
55945
+ var DishwasherOperationStateSchema = _enum([
55946
+ "Inactive",
55947
+ "Ready",
55948
+ "DelayedStart",
55949
+ "Run",
55950
+ "Pause",
55951
+ "ActionRequired",
55952
+ "Finished",
55953
+ "Error",
55954
+ "Aborting"
55955
+ ]);
55956
+ /**
55957
+ * Why fields may be `null`:
55958
+ * - `available` — the link is up and the description is loaded;
55959
+ * - `offline` — the local link is down (values are unknown, not last-known);
55960
+ * - `description-missing` — the link is up but the appliance's description could not
55961
+ * be loaded, so its values cannot be decoded.
55962
+ */
55963
+ var DishwasherAvailabilitySchema = _enum([
55964
+ "available",
55965
+ "offline",
55966
+ "description-missing"
55967
+ ]);
55914
55968
  var DishwasherConsumableLevelSchema = _enum([
55915
55969
  "ok",
55916
55970
  "low",
55917
55971
  "empty"
55918
55972
  ]);
55919
55973
  var DishwasherStatusSchema = object({
55974
+ availability: DishwasherAvailabilitySchema,
55975
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55920
55976
  state: DishwasherStateSchema,
55921
- /** Active program id/name, or null when none selected / unknown. */
55977
+ /** The appliance's operation state as reported; null when not known. */
55978
+ operationState: DishwasherOperationStateSchema.nullable(),
55979
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55922
55980
  program: string().nullable(),
55923
- /** Program tokens the hardware accepts — drives the UI selector. */
55981
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55982
+ selectedProgram: string().nullable(),
55983
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55924
55984
  availablePrograms: array(string()),
55925
- /** Minutes remaining on the active cycle, or null when not running. */
55926
- remainingMinutes: number().int().nonnegative().nullable(),
55985
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55986
+ remainingSeconds: number().int().nonnegative().nullable(),
55987
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55988
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55927
55989
  /** Cycle completion 0..100, or null when not applicable. */
55928
55990
  progressPercent: number().min(0).max(100).nullable(),
55929
- /** True when the door is reported open. */
55930
- doorOpen: boolean(),
55931
- /** True when remote start is allowed (door closed, power on, etc.). */
55932
- remoteStartAllowed: boolean(),
55933
- /** Main power / switched-on state. */
55934
- powerOn: boolean(),
55991
+ /** True when the door is reported open; null when the door state is not known. */
55992
+ doorOpen: boolean().nullable(),
55993
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55994
+ doorLocked: boolean().nullable(),
55995
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55996
+ remoteStartAllowed: boolean().nullable(),
55997
+ /** True when the appliance accepts remote control now; null when not known. */
55998
+ remoteControlActive: boolean().nullable(),
55999
+ /** True while somebody operates the appliance at its panel; null when not reported. */
56000
+ localControlActive: boolean().nullable(),
56001
+ /** Main power / switched-on state; null when not known. */
56002
+ powerOn: boolean().nullable(),
56003
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
56004
+ powerState: string().nullable(),
55935
56005
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55936
56006
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55937
- halfLoad: boolean(),
55938
- hygienePlus: boolean(),
56007
+ /** Option states: null when the appliance does not expose the option or has not said. */
56008
+ halfLoad: boolean().nullable(),
56009
+ hygienePlus: boolean().nullable(),
55939
56010
  /** Extra dry option when the appliance exposes it. */
55940
- extraDry: boolean(),
56011
+ extraDry: boolean().nullable(),
55941
56012
  /** Intensive zone (lower basket) when the appliance exposes it. */
55942
- intensiveZone: boolean(),
56013
+ intensiveZone: boolean().nullable(),
55943
56014
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55944
- varioSpeedPlus: boolean(),
55945
- /** Child lock (controls disabled on the appliance). */
55946
- childLock: boolean(),
56015
+ varioSpeedPlus: boolean().nullable(),
56016
+ /** Child lock (controls disabled on the appliance); null when not known. */
56017
+ childLock: boolean().nullable(),
56018
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
56019
+ activeEvents: array(string()),
56020
+ /** Numeric error code when the appliance reports one; null otherwise. */
55947
56021
  errorCode: number().nullable(),
56022
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55948
56023
  errorLabel: string().nullable(),
56024
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55949
56025
  lastFetchedAt: number()
55950
56026
  });
56027
+ var DeviceIdSchema = number().int().nonnegative();
56028
+ /** A value a program option or setting can take. */
56029
+ var DishwasherValueSchema = union([
56030
+ boolean(),
56031
+ string(),
56032
+ number()
56033
+ ]);
56034
+ var DishwasherAccessSchema = _enum([
56035
+ "none",
56036
+ "read",
56037
+ "readWrite",
56038
+ "writeOnly",
56039
+ "readStatic"
56040
+ ]);
56041
+ /**
56042
+ * One option or setting the appliance declares, with the constraints its description
56043
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
56044
+ */
56045
+ var DishwasherOptionDescriptorSchema = object({
56046
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
56047
+ key: string(),
56048
+ /** Last segment of the key, for display. */
56049
+ name: string(),
56050
+ type: _enum([
56051
+ "boolean",
56052
+ "number",
56053
+ "enum",
56054
+ "string"
56055
+ ]),
56056
+ access: DishwasherAccessSchema,
56057
+ /** The appliance reports this entity as currently available. */
56058
+ available: boolean(),
56059
+ /** Unit the description declares for a number; null when it declares none. */
56060
+ unit: string().nullable(),
56061
+ min: number().nullable(),
56062
+ max: number().nullable(),
56063
+ step: number().nullable(),
56064
+ /** Allowed members of an enum; null for other types. */
56065
+ enumValues: array(string()).nullable(),
56066
+ defaultValue: DishwasherValueSchema.nullable()
56067
+ });
56068
+ var DishwasherProgramSchema = object({
56069
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
56070
+ key: string(),
56071
+ name: string(),
56072
+ /** The appliance currently offers this program. */
56073
+ available: boolean(),
56074
+ /** The options this program lists, with the program-level access / availability / default. */
56075
+ options: array(DishwasherOptionDescriptorSchema)
56076
+ });
56077
+ var DishwasherOptionsSchema = object({
56078
+ availability: DishwasherAvailabilitySchema,
56079
+ /** What the appliance can be told to do, from the commands its description declares. */
56080
+ supportsStart: boolean(),
56081
+ supportsPause: boolean(),
56082
+ supportsResume: boolean(),
56083
+ supportsStop: boolean(),
56084
+ supportsPower: boolean(),
56085
+ /** Every program the description lists, with its options. */
56086
+ programs: array(DishwasherProgramSchema),
56087
+ /** Every option and setting entity the description lists (programs reference these by key). */
56088
+ options: array(DishwasherOptionDescriptorSchema)
56089
+ });
55951
56090
  var dishwasherCapability = {
55952
56091
  name: "dishwasher",
55953
56092
  scope: "device",
@@ -55955,86 +56094,102 @@ var dishwasherCapability = {
55955
56094
  mode: "singleton",
55956
56095
  deviceTypes: [DeviceType.Dishwasher],
55957
56096
  methods: {
55958
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56097
+ /**
56098
+ * Start a program. Without `program` the selected one starts. `options` are
56099
+ * option feature keys; each is checked against the program's constraints.
56100
+ */
56101
+ start: method(object({
56102
+ deviceId: DeviceIdSchema,
56103
+ program: string().min(1).optional(),
56104
+ options: record(string(), DishwasherValueSchema).optional()
56105
+ }), _void(), {
55959
56106
  kind: "mutation",
55960
56107
  auth: "protected"
55961
56108
  }),
55962
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56109
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55963
56110
  kind: "mutation",
55964
56111
  auth: "protected"
55965
56112
  }),
55966
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56113
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
56114
+ kind: "mutation",
56115
+ auth: "protected"
56116
+ }),
56117
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55967
56118
  kind: "mutation",
55968
56119
  auth: "protected"
55969
56120
  }),
56121
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55970
56122
  setProgram: method(object({
55971
- deviceId: number().int().nonnegative(),
56123
+ deviceId: DeviceIdSchema,
55972
56124
  program: string().min(1)
55973
56125
  }), _void(), {
55974
56126
  kind: "mutation",
55975
56127
  auth: "protected"
55976
56128
  }),
55977
56129
  setPower: method(object({
55978
- deviceId: number().int().nonnegative(),
56130
+ deviceId: DeviceIdSchema,
55979
56131
  on: boolean()
55980
56132
  }), _void(), {
55981
56133
  kind: "mutation",
55982
56134
  auth: "protected"
55983
56135
  }),
55984
56136
  setHalfLoad: method(object({
55985
- deviceId: number().int().nonnegative(),
56137
+ deviceId: DeviceIdSchema,
55986
56138
  on: boolean()
55987
56139
  }), _void(), {
55988
56140
  kind: "mutation",
55989
56141
  auth: "protected"
55990
56142
  }),
55991
56143
  setHygienePlus: method(object({
55992
- deviceId: number().int().nonnegative(),
56144
+ deviceId: DeviceIdSchema,
55993
56145
  on: boolean()
55994
56146
  }), _void(), {
55995
56147
  kind: "mutation",
55996
56148
  auth: "protected"
55997
56149
  }),
55998
56150
  setExtraDry: method(object({
55999
- deviceId: number().int().nonnegative(),
56151
+ deviceId: DeviceIdSchema,
56000
56152
  on: boolean()
56001
56153
  }), _void(), {
56002
56154
  kind: "mutation",
56003
56155
  auth: "protected"
56004
56156
  }),
56005
56157
  setIntensiveZone: method(object({
56006
- deviceId: number().int().nonnegative(),
56158
+ deviceId: DeviceIdSchema,
56007
56159
  on: boolean()
56008
56160
  }), _void(), {
56009
56161
  kind: "mutation",
56010
56162
  auth: "protected"
56011
56163
  }),
56012
56164
  setVarioSpeedPlus: method(object({
56013
- deviceId: number().int().nonnegative(),
56165
+ deviceId: DeviceIdSchema,
56014
56166
  on: boolean()
56015
56167
  }), _void(), {
56016
56168
  kind: "mutation",
56017
56169
  auth: "protected"
56018
56170
  }),
56019
56171
  setChildLock: method(object({
56020
- deviceId: number().int().nonnegative(),
56172
+ deviceId: DeviceIdSchema,
56021
56173
  on: boolean()
56022
56174
  }), _void(), {
56023
56175
  kind: "mutation",
56024
56176
  auth: "protected"
56025
56177
  }),
56178
+ /**
56179
+ * Write any option or setting by feature key. Refused when the description does
56180
+ * not list it, it is not writable or not available now, or the value is outside
56181
+ * its declared range / members.
56182
+ */
56026
56183
  setOption: method(object({
56027
- deviceId: number().int().nonnegative(),
56184
+ deviceId: DeviceIdSchema,
56028
56185
  key: string().min(1),
56029
- value: union([
56030
- boolean(),
56031
- string(),
56032
- number()
56033
- ])
56186
+ value: DishwasherValueSchema
56034
56187
  }), _void(), {
56035
56188
  kind: "mutation",
56036
56189
  auth: "protected"
56037
- })
56190
+ }),
56191
+ /** What this appliance can do, from its own description — the UI is derived from it. */
56192
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
56038
56193
  },
56039
56194
  status: {
56040
56195
  schema: DishwasherStatusSchema,
@@ -70449,6 +70604,12 @@ Object.freeze({
70449
70604
  addonId: null,
70450
70605
  access: "view"
70451
70606
  },
70607
+ "dishwasher.getOptions": {
70608
+ capName: "dishwasher",
70609
+ capScope: "device",
70610
+ addonId: null,
70611
+ access: "view"
70612
+ },
70452
70613
  "dishwasher.getStatus": {
70453
70614
  capName: "dishwasher",
70454
70615
  capScope: "device",
@@ -70461,6 +70622,12 @@ Object.freeze({
70461
70622
  addonId: null,
70462
70623
  access: "create"
70463
70624
  },
70625
+ "dishwasher.resume": {
70626
+ capName: "dishwasher",
70627
+ capScope: "device",
70628
+ addonId: null,
70629
+ access: "create"
70630
+ },
70464
70631
  "dishwasher.setChildLock": {
70465
70632
  capName: "dishwasher",
70466
70633
  capScope: "device",
@@ -74961,6 +75128,12 @@ Object.freeze({
74961
75128
  addonId: null,
74962
75129
  access: "view"
74963
75130
  },
75131
+ "storageMigration.moverClearance": {
75132
+ capName: "storage-migration",
75133
+ capScope: "system",
75134
+ addonId: null,
75135
+ access: "view"
75136
+ },
74964
75137
  "storageMigration.movers": {
74965
75138
  capName: "storage-migration",
74966
75139
  capScope: "system",
@@ -77360,6 +77533,11 @@ Object.freeze({
77360
77533
  form: "single",
77361
77534
  optional: false
77362
77535
  }],
77536
+ "dishwasher.getOptions": [{
77537
+ name: "deviceId",
77538
+ form: "single",
77539
+ optional: false
77540
+ }],
77363
77541
  "dishwasher.getStatus": [{
77364
77542
  name: "deviceId",
77365
77543
  form: "single",
@@ -77370,6 +77548,11 @@ Object.freeze({
77370
77548
  form: "single",
77371
77549
  optional: false
77372
77550
  }],
77551
+ "dishwasher.resume": [{
77552
+ name: "deviceId",
77553
+ form: "single",
77554
+ optional: false
77555
+ }],
77373
77556
  "dishwasher.setChildLock": [{
77374
77557
  name: "deviceId",
77375
77558
  form: "single",
@@ -79456,6 +79639,9 @@ new Map(Object.entries({
79456
79639
  "wrapper-update-available": "system",
79457
79640
  "backup-completed": "system",
79458
79641
  "export-completed": "system",
79642
+ "alert-critical": "system",
79643
+ "alert-error": "system",
79644
+ "alert-critical-resolved": "system",
79459
79645
  "storage-location-low": "system",
79460
79646
  "storage-location-critical": "system",
79461
79647
  "storage-location-ok": "system",
@@ -79580,6 +79766,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
79580
79766
  "storage-location-ok"
79581
79767
  ]
79582
79768
  },
79769
+ {
79770
+ id: "alerts",
79771
+ family: "system",
79772
+ label: "Alerts",
79773
+ kinds: [
79774
+ "alert-critical",
79775
+ "alert-error",
79776
+ "alert-critical-resolved"
79777
+ ]
79778
+ },
79583
79779
  {
79584
79780
  id: "alarm",
79585
79781
  family: "alarm",
@@ -79624,6 +79820,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
79624
79820
  return [[descriptor.kind, field]];
79625
79821
  })));
79626
79822
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
79823
+ object({
79824
+ phase: _enum(["raised", "resolved"]),
79825
+ episodeId: string().min(1),
79826
+ alertId: string().min(1),
79827
+ severity: AlertSeveritySchema,
79828
+ category: string(),
79829
+ title: string(),
79830
+ message: string(),
79831
+ sourceType: string().optional(),
79832
+ sourceId: string().optional(),
79833
+ nodeId: string().optional(),
79834
+ /** The alert's own action link (where the operator acts on it), when it has one. */
79835
+ actionUrl: string().optional(),
79836
+ at: number()
79837
+ });
79627
79838
  var RULE_BODY_ONLY = ["body"];
79628
79839
  var RULE_TEXT = ["title", "body"];
79629
79840
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -79633,6 +79844,11 @@ var TANK = [
79633
79844
  "device-tank-full",
79634
79845
  "device-tank-normal"
79635
79846
  ];
79847
+ var ALERT_EPISODE = [
79848
+ "alert-critical",
79849
+ "alert-error",
79850
+ "alert-critical-resolved"
79851
+ ];
79636
79852
  var UPDATES = [
79637
79853
  "addon-update-available",
79638
79854
  "server-update-available",
@@ -79825,14 +80041,14 @@ var STATE_SUMMARY_VARS = [
79825
80041
  ([...RULE_TEXT], [...CONSUMABLE]),
79826
80042
  ([...RULE_TEXT], [...TANK]),
79827
80043
  [...RULE_TEXT],
79828
- ([...RULE_TEXT], [...UPDATES]),
79829
- ([...RULE_TEXT], [...UPDATES]),
79830
- [...RULE_TEXT],
80044
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80045
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79831
80046
  [...RULE_TEXT],
79832
80047
  [...RULE_TEXT],
79833
80048
  [...RULE_TEXT],
79834
80049
  [...RULE_TEXT],
79835
80050
  [...RULE_TEXT],
80051
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79836
80052
  [...RULE_TEXT],
79837
80053
  [...RULE_TEXT],
79838
80054
  [...RULE_TEXT],
@@ -79850,7 +80066,11 @@ var STATE_SUMMARY_VARS = [
79850
80066
  [...RULE_TEXT],
79851
80067
  [...RULE_TEXT],
79852
80068
  [...RULE_TEXT],
79853
- [...RULE_TEXT],
80069
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80070
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80071
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80072
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80073
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79854
80074
  [...RULE_TEXT],
79855
80075
  [...RULE_TEXT],
79856
80076
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -14,7 +14,7 @@ import { networkInterfaces } from "node:os";
14
14
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
15
15
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
16
16
  //#endregion
17
- //#region ../types/dist/event-category-BvOFi6PY.mjs
17
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
18
18
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
19
19
  EventCategory["SystemBoot"] = "system.boot";
20
20
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -93,9 +93,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
93
93
  /**
94
94
  * The node's one-shot runner boot check (D877): planned runners against the
95
95
  * process service, `degraded` when any is failed, refused or missing. The
96
- * alert centre turns it into one alert and a direct critical push.
96
+ * alert centre turns it into one critical alert.
97
97
  */
98
98
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
99
+ /**
100
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
101
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
102
+ * centre sends no notification of its own: Notification Center turns this
103
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
104
+ * system-event kinds, and reconciles from the alerts store because a bus
105
+ * event may be dropped (D8, D11).
106
+ */
107
+ EventCategory["AlertEpisode"] = "alert.episode";
99
108
  EventCategory["AddonError"] = "addon.error";
100
109
  EventCategory["AddonPageReady"] = "addon.page-ready";
101
110
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5420,7 +5429,7 @@ var ZodIssueCode = {
5420
5429
  var ZodFirstPartyTypeKind;
5421
5430
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5422
5431
  //#endregion
5423
- //#region ../types/dist/sleep-BegKjwUu.mjs
5432
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5424
5433
  /**
5425
5434
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5426
5435
  * window to float samples (D455).
@@ -13207,7 +13216,14 @@ var AlertSeveritySchema = _enum([
13207
13216
  ]);
13208
13217
  var AlertActionSchema = object({
13209
13218
  label: string(),
13210
- href: string().optional()
13219
+ href: string().optional(),
13220
+ /**
13221
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13222
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13223
+ * start) — the browser must leave the SPA with a full navigation, because
13224
+ * the SPA has no such route and would bounce to the home page.
13225
+ */
13226
+ navigation: _enum(["app", "server"]).optional()
13211
13227
  });
13212
13228
  var AlertStatusSchema = _enum([
13213
13229
  "active",
@@ -42036,6 +42052,9 @@ var NcSystemEventKindSchema = _enum([
42036
42052
  "server-updated",
42037
42053
  "export-completed",
42038
42054
  "backup-completed",
42055
+ "alert-critical",
42056
+ "alert-error",
42057
+ "alert-critical-resolved",
42039
42058
  "camera-online",
42040
42059
  "camera-offline",
42041
42060
  "camera-disabled",
@@ -51216,7 +51235,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51216
51235
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51217
51236
  kind: "mutation",
51218
51237
  auth: "admin"
51219
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51238
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51239
+ clear: boolean(),
51240
+ repointLocationId: string().optional()
51241
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51220
51242
  kind: "mutation",
51221
51243
  auth: "admin"
51222
51244
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55881,6 +55903,11 @@ onStatusChanged: { data: object({
55881
55903
  *
55882
55904
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55883
55905
  * provider refreshes the slice on an interval and eagerly after commands.
55906
+ *
55907
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55908
+ * nullable: `null` means "not known right now" (the appliance has not said,
55909
+ * the link is down, or the description does not carry it) and is never
55910
+ * rendered or exported as `false` / `0`. `availability` says why.
55884
55911
  */
55885
55912
  var DishwasherStateSchema = _enum([
55886
55913
  "idle",
@@ -55890,43 +55917,155 @@ var DishwasherStateSchema = _enum([
55890
55917
  "error",
55891
55918
  "unavailable"
55892
55919
  ]);
55920
+ /**
55921
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55922
+ * view for compact surfaces; this is what the appliance said.
55923
+ */
55924
+ var DishwasherOperationStateSchema = _enum([
55925
+ "Inactive",
55926
+ "Ready",
55927
+ "DelayedStart",
55928
+ "Run",
55929
+ "Pause",
55930
+ "ActionRequired",
55931
+ "Finished",
55932
+ "Error",
55933
+ "Aborting"
55934
+ ]);
55935
+ /**
55936
+ * Why fields may be `null`:
55937
+ * - `available` — the link is up and the description is loaded;
55938
+ * - `offline` — the local link is down (values are unknown, not last-known);
55939
+ * - `description-missing` — the link is up but the appliance's description could not
55940
+ * be loaded, so its values cannot be decoded.
55941
+ */
55942
+ var DishwasherAvailabilitySchema = _enum([
55943
+ "available",
55944
+ "offline",
55945
+ "description-missing"
55946
+ ]);
55893
55947
  var DishwasherConsumableLevelSchema = _enum([
55894
55948
  "ok",
55895
55949
  "low",
55896
55950
  "empty"
55897
55951
  ]);
55898
55952
  var DishwasherStatusSchema = object({
55953
+ availability: DishwasherAvailabilitySchema,
55954
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55899
55955
  state: DishwasherStateSchema,
55900
- /** Active program id/name, or null when none selected / unknown. */
55956
+ /** The appliance's operation state as reported; null when not known. */
55957
+ operationState: DishwasherOperationStateSchema.nullable(),
55958
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55901
55959
  program: string().nullable(),
55902
- /** Program tokens the hardware accepts — drives the UI selector. */
55960
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55961
+ selectedProgram: string().nullable(),
55962
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55903
55963
  availablePrograms: array(string()),
55904
- /** Minutes remaining on the active cycle, or null when not running. */
55905
- remainingMinutes: number().int().nonnegative().nullable(),
55964
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55965
+ remainingSeconds: number().int().nonnegative().nullable(),
55966
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55967
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55906
55968
  /** Cycle completion 0..100, or null when not applicable. */
55907
55969
  progressPercent: number().min(0).max(100).nullable(),
55908
- /** True when the door is reported open. */
55909
- doorOpen: boolean(),
55910
- /** True when remote start is allowed (door closed, power on, etc.). */
55911
- remoteStartAllowed: boolean(),
55912
- /** Main power / switched-on state. */
55913
- powerOn: boolean(),
55970
+ /** True when the door is reported open; null when the door state is not known. */
55971
+ doorOpen: boolean().nullable(),
55972
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55973
+ doorLocked: boolean().nullable(),
55974
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55975
+ remoteStartAllowed: boolean().nullable(),
55976
+ /** True when the appliance accepts remote control now; null when not known. */
55977
+ remoteControlActive: boolean().nullable(),
55978
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55979
+ localControlActive: boolean().nullable(),
55980
+ /** Main power / switched-on state; null when not known. */
55981
+ powerOn: boolean().nullable(),
55982
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55983
+ powerState: string().nullable(),
55914
55984
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55915
55985
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55916
- halfLoad: boolean(),
55917
- hygienePlus: boolean(),
55986
+ /** Option states: null when the appliance does not expose the option or has not said. */
55987
+ halfLoad: boolean().nullable(),
55988
+ hygienePlus: boolean().nullable(),
55918
55989
  /** Extra dry option when the appliance exposes it. */
55919
- extraDry: boolean(),
55990
+ extraDry: boolean().nullable(),
55920
55991
  /** Intensive zone (lower basket) when the appliance exposes it. */
55921
- intensiveZone: boolean(),
55992
+ intensiveZone: boolean().nullable(),
55922
55993
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55923
- varioSpeedPlus: boolean(),
55924
- /** Child lock (controls disabled on the appliance). */
55925
- childLock: boolean(),
55994
+ varioSpeedPlus: boolean().nullable(),
55995
+ /** Child lock (controls disabled on the appliance); null when not known. */
55996
+ childLock: boolean().nullable(),
55997
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55998
+ activeEvents: array(string()),
55999
+ /** Numeric error code when the appliance reports one; null otherwise. */
55926
56000
  errorCode: number().nullable(),
56001
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55927
56002
  errorLabel: string().nullable(),
56003
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55928
56004
  lastFetchedAt: number()
55929
56005
  });
56006
+ var DeviceIdSchema = number().int().nonnegative();
56007
+ /** A value a program option or setting can take. */
56008
+ var DishwasherValueSchema = union([
56009
+ boolean(),
56010
+ string(),
56011
+ number()
56012
+ ]);
56013
+ var DishwasherAccessSchema = _enum([
56014
+ "none",
56015
+ "read",
56016
+ "readWrite",
56017
+ "writeOnly",
56018
+ "readStatic"
56019
+ ]);
56020
+ /**
56021
+ * One option or setting the appliance declares, with the constraints its description
56022
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
56023
+ */
56024
+ var DishwasherOptionDescriptorSchema = object({
56025
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
56026
+ key: string(),
56027
+ /** Last segment of the key, for display. */
56028
+ name: string(),
56029
+ type: _enum([
56030
+ "boolean",
56031
+ "number",
56032
+ "enum",
56033
+ "string"
56034
+ ]),
56035
+ access: DishwasherAccessSchema,
56036
+ /** The appliance reports this entity as currently available. */
56037
+ available: boolean(),
56038
+ /** Unit the description declares for a number; null when it declares none. */
56039
+ unit: string().nullable(),
56040
+ min: number().nullable(),
56041
+ max: number().nullable(),
56042
+ step: number().nullable(),
56043
+ /** Allowed members of an enum; null for other types. */
56044
+ enumValues: array(string()).nullable(),
56045
+ defaultValue: DishwasherValueSchema.nullable()
56046
+ });
56047
+ var DishwasherProgramSchema = object({
56048
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
56049
+ key: string(),
56050
+ name: string(),
56051
+ /** The appliance currently offers this program. */
56052
+ available: boolean(),
56053
+ /** The options this program lists, with the program-level access / availability / default. */
56054
+ options: array(DishwasherOptionDescriptorSchema)
56055
+ });
56056
+ var DishwasherOptionsSchema = object({
56057
+ availability: DishwasherAvailabilitySchema,
56058
+ /** What the appliance can be told to do, from the commands its description declares. */
56059
+ supportsStart: boolean(),
56060
+ supportsPause: boolean(),
56061
+ supportsResume: boolean(),
56062
+ supportsStop: boolean(),
56063
+ supportsPower: boolean(),
56064
+ /** Every program the description lists, with its options. */
56065
+ programs: array(DishwasherProgramSchema),
56066
+ /** Every option and setting entity the description lists (programs reference these by key). */
56067
+ options: array(DishwasherOptionDescriptorSchema)
56068
+ });
55930
56069
  var dishwasherCapability = {
55931
56070
  name: "dishwasher",
55932
56071
  scope: "device",
@@ -55934,86 +56073,102 @@ var dishwasherCapability = {
55934
56073
  mode: "singleton",
55935
56074
  deviceTypes: [DeviceType.Dishwasher],
55936
56075
  methods: {
55937
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56076
+ /**
56077
+ * Start a program. Without `program` the selected one starts. `options` are
56078
+ * option feature keys; each is checked against the program's constraints.
56079
+ */
56080
+ start: method(object({
56081
+ deviceId: DeviceIdSchema,
56082
+ program: string().min(1).optional(),
56083
+ options: record(string(), DishwasherValueSchema).optional()
56084
+ }), _void(), {
55938
56085
  kind: "mutation",
55939
56086
  auth: "protected"
55940
56087
  }),
55941
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56088
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55942
56089
  kind: "mutation",
55943
56090
  auth: "protected"
55944
56091
  }),
55945
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56092
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
56093
+ kind: "mutation",
56094
+ auth: "protected"
56095
+ }),
56096
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55946
56097
  kind: "mutation",
55947
56098
  auth: "protected"
55948
56099
  }),
56100
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55949
56101
  setProgram: method(object({
55950
- deviceId: number().int().nonnegative(),
56102
+ deviceId: DeviceIdSchema,
55951
56103
  program: string().min(1)
55952
56104
  }), _void(), {
55953
56105
  kind: "mutation",
55954
56106
  auth: "protected"
55955
56107
  }),
55956
56108
  setPower: method(object({
55957
- deviceId: number().int().nonnegative(),
56109
+ deviceId: DeviceIdSchema,
55958
56110
  on: boolean()
55959
56111
  }), _void(), {
55960
56112
  kind: "mutation",
55961
56113
  auth: "protected"
55962
56114
  }),
55963
56115
  setHalfLoad: method(object({
55964
- deviceId: number().int().nonnegative(),
56116
+ deviceId: DeviceIdSchema,
55965
56117
  on: boolean()
55966
56118
  }), _void(), {
55967
56119
  kind: "mutation",
55968
56120
  auth: "protected"
55969
56121
  }),
55970
56122
  setHygienePlus: method(object({
55971
- deviceId: number().int().nonnegative(),
56123
+ deviceId: DeviceIdSchema,
55972
56124
  on: boolean()
55973
56125
  }), _void(), {
55974
56126
  kind: "mutation",
55975
56127
  auth: "protected"
55976
56128
  }),
55977
56129
  setExtraDry: method(object({
55978
- deviceId: number().int().nonnegative(),
56130
+ deviceId: DeviceIdSchema,
55979
56131
  on: boolean()
55980
56132
  }), _void(), {
55981
56133
  kind: "mutation",
55982
56134
  auth: "protected"
55983
56135
  }),
55984
56136
  setIntensiveZone: method(object({
55985
- deviceId: number().int().nonnegative(),
56137
+ deviceId: DeviceIdSchema,
55986
56138
  on: boolean()
55987
56139
  }), _void(), {
55988
56140
  kind: "mutation",
55989
56141
  auth: "protected"
55990
56142
  }),
55991
56143
  setVarioSpeedPlus: method(object({
55992
- deviceId: number().int().nonnegative(),
56144
+ deviceId: DeviceIdSchema,
55993
56145
  on: boolean()
55994
56146
  }), _void(), {
55995
56147
  kind: "mutation",
55996
56148
  auth: "protected"
55997
56149
  }),
55998
56150
  setChildLock: method(object({
55999
- deviceId: number().int().nonnegative(),
56151
+ deviceId: DeviceIdSchema,
56000
56152
  on: boolean()
56001
56153
  }), _void(), {
56002
56154
  kind: "mutation",
56003
56155
  auth: "protected"
56004
56156
  }),
56157
+ /**
56158
+ * Write any option or setting by feature key. Refused when the description does
56159
+ * not list it, it is not writable or not available now, or the value is outside
56160
+ * its declared range / members.
56161
+ */
56005
56162
  setOption: method(object({
56006
- deviceId: number().int().nonnegative(),
56163
+ deviceId: DeviceIdSchema,
56007
56164
  key: string().min(1),
56008
- value: union([
56009
- boolean(),
56010
- string(),
56011
- number()
56012
- ])
56165
+ value: DishwasherValueSchema
56013
56166
  }), _void(), {
56014
56167
  kind: "mutation",
56015
56168
  auth: "protected"
56016
- })
56169
+ }),
56170
+ /** What this appliance can do, from its own description — the UI is derived from it. */
56171
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
56017
56172
  },
56018
56173
  status: {
56019
56174
  schema: DishwasherStatusSchema,
@@ -70428,6 +70583,12 @@ Object.freeze({
70428
70583
  addonId: null,
70429
70584
  access: "view"
70430
70585
  },
70586
+ "dishwasher.getOptions": {
70587
+ capName: "dishwasher",
70588
+ capScope: "device",
70589
+ addonId: null,
70590
+ access: "view"
70591
+ },
70431
70592
  "dishwasher.getStatus": {
70432
70593
  capName: "dishwasher",
70433
70594
  capScope: "device",
@@ -70440,6 +70601,12 @@ Object.freeze({
70440
70601
  addonId: null,
70441
70602
  access: "create"
70442
70603
  },
70604
+ "dishwasher.resume": {
70605
+ capName: "dishwasher",
70606
+ capScope: "device",
70607
+ addonId: null,
70608
+ access: "create"
70609
+ },
70443
70610
  "dishwasher.setChildLock": {
70444
70611
  capName: "dishwasher",
70445
70612
  capScope: "device",
@@ -74940,6 +75107,12 @@ Object.freeze({
74940
75107
  addonId: null,
74941
75108
  access: "view"
74942
75109
  },
75110
+ "storageMigration.moverClearance": {
75111
+ capName: "storage-migration",
75112
+ capScope: "system",
75113
+ addonId: null,
75114
+ access: "view"
75115
+ },
74943
75116
  "storageMigration.movers": {
74944
75117
  capName: "storage-migration",
74945
75118
  capScope: "system",
@@ -77339,6 +77512,11 @@ Object.freeze({
77339
77512
  form: "single",
77340
77513
  optional: false
77341
77514
  }],
77515
+ "dishwasher.getOptions": [{
77516
+ name: "deviceId",
77517
+ form: "single",
77518
+ optional: false
77519
+ }],
77342
77520
  "dishwasher.getStatus": [{
77343
77521
  name: "deviceId",
77344
77522
  form: "single",
@@ -77349,6 +77527,11 @@ Object.freeze({
77349
77527
  form: "single",
77350
77528
  optional: false
77351
77529
  }],
77530
+ "dishwasher.resume": [{
77531
+ name: "deviceId",
77532
+ form: "single",
77533
+ optional: false
77534
+ }],
77352
77535
  "dishwasher.setChildLock": [{
77353
77536
  name: "deviceId",
77354
77537
  form: "single",
@@ -79435,6 +79618,9 @@ new Map(Object.entries({
79435
79618
  "wrapper-update-available": "system",
79436
79619
  "backup-completed": "system",
79437
79620
  "export-completed": "system",
79621
+ "alert-critical": "system",
79622
+ "alert-error": "system",
79623
+ "alert-critical-resolved": "system",
79438
79624
  "storage-location-low": "system",
79439
79625
  "storage-location-critical": "system",
79440
79626
  "storage-location-ok": "system",
@@ -79559,6 +79745,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
79559
79745
  "storage-location-ok"
79560
79746
  ]
79561
79747
  },
79748
+ {
79749
+ id: "alerts",
79750
+ family: "system",
79751
+ label: "Alerts",
79752
+ kinds: [
79753
+ "alert-critical",
79754
+ "alert-error",
79755
+ "alert-critical-resolved"
79756
+ ]
79757
+ },
79562
79758
  {
79563
79759
  id: "alarm",
79564
79760
  family: "alarm",
@@ -79603,6 +79799,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
79603
79799
  return [[descriptor.kind, field]];
79604
79800
  })));
79605
79801
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
79802
+ object({
79803
+ phase: _enum(["raised", "resolved"]),
79804
+ episodeId: string().min(1),
79805
+ alertId: string().min(1),
79806
+ severity: AlertSeveritySchema,
79807
+ category: string(),
79808
+ title: string(),
79809
+ message: string(),
79810
+ sourceType: string().optional(),
79811
+ sourceId: string().optional(),
79812
+ nodeId: string().optional(),
79813
+ /** The alert's own action link (where the operator acts on it), when it has one. */
79814
+ actionUrl: string().optional(),
79815
+ at: number()
79816
+ });
79606
79817
  var RULE_BODY_ONLY = ["body"];
79607
79818
  var RULE_TEXT = ["title", "body"];
79608
79819
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -79612,6 +79823,11 @@ var TANK = [
79612
79823
  "device-tank-full",
79613
79824
  "device-tank-normal"
79614
79825
  ];
79826
+ var ALERT_EPISODE = [
79827
+ "alert-critical",
79828
+ "alert-error",
79829
+ "alert-critical-resolved"
79830
+ ];
79615
79831
  var UPDATES = [
79616
79832
  "addon-update-available",
79617
79833
  "server-update-available",
@@ -79804,14 +80020,14 @@ var STATE_SUMMARY_VARS = [
79804
80020
  ([...RULE_TEXT], [...CONSUMABLE]),
79805
80021
  ([...RULE_TEXT], [...TANK]),
79806
80022
  [...RULE_TEXT],
79807
- ([...RULE_TEXT], [...UPDATES]),
79808
- ([...RULE_TEXT], [...UPDATES]),
79809
- [...RULE_TEXT],
80023
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80024
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79810
80025
  [...RULE_TEXT],
79811
80026
  [...RULE_TEXT],
79812
80027
  [...RULE_TEXT],
79813
80028
  [...RULE_TEXT],
79814
80029
  [...RULE_TEXT],
80030
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79815
80031
  [...RULE_TEXT],
79816
80032
  [...RULE_TEXT],
79817
80033
  [...RULE_TEXT],
@@ -79829,7 +80045,11 @@ var STATE_SUMMARY_VARS = [
79829
80045
  [...RULE_TEXT],
79830
80046
  [...RULE_TEXT],
79831
80047
  [...RULE_TEXT],
79832
- [...RULE_TEXT],
80048
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80049
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80050
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80051
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80052
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79833
80053
  [...RULE_TEXT],
79834
80054
  [...RULE_TEXT],
79835
80055
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-amcrest",
3
- "version": "0.2.139",
3
+ "version": "0.2.140",
4
4
  "description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
5
5
  "keywords": [
6
6
  "camstack",