@camstack/addon-provider-bosch 0.1.20 → 0.1.21

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.
@@ -1,5 +1,5 @@
1
1
  import "node:crypto";
2
- //#region ../types/dist/event-category-fDPduoeC.mjs
2
+ //#region ../types/dist/event-category-Ceif8n-v.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -471,6 +471,10 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
471
471
  * on the device detail page.
472
472
  */
473
473
  EventCategory["DoorbellOnPressed"] = "doorbell.onPressed";
474
+ /** Mirrors `runningStateCapability.events.onStarted`. */
475
+ EventCategory["RunningStarted"] = "running.started";
476
+ /** Mirrors `runningStateCapability.events.onFinished`. */
477
+ EventCategory["RunningFinished"] = "running.finished";
474
478
  /**
475
479
  * Cap event fired by every device that registers the `event-emitter`
476
480
  * capability. Mirrors `eventEmitterCapability.events.onEvent`. Carries
@@ -5430,7 +5434,7 @@ var ZodIssueCode = {
5430
5434
  var ZodFirstPartyTypeKind;
5431
5435
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5432
5436
  //#endregion
5433
- //#region ../types/dist/sleep-CHIEEJkY.mjs
5437
+ //#region ../types/dist/sleep-CYfIZzGv.mjs
5434
5438
  /**
5435
5439
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5436
5440
  * window to float samples (D455).
@@ -5773,7 +5777,7 @@ Object.fromEntries([
5773
5777
  * `hydrateSchema` to skip the `value` injection for structural-only fields.
5774
5778
  */
5775
5779
  function isValuelessField(field) {
5776
- return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button";
5780
+ return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button" || field.type === "account-sign-in" || field.type === "secret-presence";
5777
5781
  }
5778
5782
  function hydrateSchema(schema, values, options = {}) {
5779
5783
  return {
@@ -8837,7 +8841,7 @@ function errMsg(err) {
8837
8841
  return String(err);
8838
8842
  }
8839
8843
  //#endregion
8840
- //#region ../types/dist/composition-CB6PMT9p.mjs
8844
+ //#region ../types/dist/composition-xz-ud5EQ.mjs
8841
8845
  /**
8842
8846
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8843
8847
  *
@@ -9138,6 +9142,20 @@ var table = {
9138
9142
  apply: () => {
9139
9143
  throw new ExpressionEvalError("count: stateful evaluation context is required");
9140
9144
  }
9145
+ },
9146
+ dwell: {
9147
+ minArgs: 3,
9148
+ maxArgs: 3,
9149
+ apply: () => {
9150
+ throw new ExpressionEvalError("dwell: stateful evaluation context is required");
9151
+ }
9152
+ },
9153
+ latchedAt: {
9154
+ minArgs: 1,
9155
+ maxArgs: 1,
9156
+ apply: () => {
9157
+ throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
9158
+ }
9141
9159
  }
9142
9160
  };
9143
9161
  Object.freeze(Object.assign(Object.create(null), table));
@@ -16087,7 +16105,15 @@ Object.freeze({
16087
16105
  kind: "fixed",
16088
16106
  result: ["number", "null"]
16089
16107
  },
16090
- count: NUMBER
16108
+ count: NUMBER,
16109
+ dwell: {
16110
+ kind: "fixed",
16111
+ result: ["boolean", "null"]
16112
+ },
16113
+ latchedAt: {
16114
+ kind: "fixed",
16115
+ result: ["number", "null"]
16116
+ }
16091
16117
  });
16092
16118
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
16093
16119
  /**
@@ -42534,9 +42560,6 @@ var NcSystemEventKindSchema = _enum([
42534
42560
  "device-battery-normal",
42535
42561
  "device-consumable-low",
42536
42562
  "device-consumable-normal",
42537
- "device-tank-low",
42538
- "device-tank-full",
42539
- "device-tank-normal",
42540
42563
  "stream-online",
42541
42564
  "stream-offline",
42542
42565
  "node-online",
@@ -42583,13 +42606,14 @@ var NcSystemEventKindSchema = _enum([
42583
42606
  "camera-enabled"
42584
42607
  ]);
42585
42608
  /** The legacy tail of {@link NcSystemEventKindSchema} — see its docblock. */
42586
- var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
42609
+ var NC_LEGACY_SYSTEM_EVENT_KINDS = [
42587
42610
  "camera-online",
42588
42611
  "camera-offline",
42589
42612
  "camera-disabled",
42590
42613
  "camera-enabled"
42591
- ]);
42592
- NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
42614
+ ];
42615
+ var NC_LEGACY_SYSTEM_EVENT_KIND_SET = new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
42616
+ NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KIND_SET.has(kind));
42593
42617
  /**
42594
42618
  * The panel's transitions, as ONE list.
42595
42619
  *
@@ -43708,18 +43732,11 @@ var NcRuleSchema = NcRuleInputSchema.extend({
43708
43732
  */
43709
43733
  disabledTargetIds: array(string()).default([])
43710
43734
  });
43711
- /**
43712
- * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
43713
- * report a still-true state. `addons` is the crash-looped addons only and
43714
- * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
43715
- * job is not an open state, and the alarm stays instant.
43716
- */
43717
43735
  var NcStateSummarySectionIdSchema = _enum([
43718
43736
  "device-state",
43719
43737
  "streams",
43720
43738
  "battery",
43721
43739
  "consumables",
43722
- "tanks",
43723
43740
  "detection-blind",
43724
43741
  "nodes",
43725
43742
  "addons",
@@ -61549,6 +61566,41 @@ var ptzAutotrackCapability = {
61549
61566
  */
61550
61567
  history: "none"
61551
61568
  };
61569
+ var RunningStateSourceSchema = _enum(["native", "assigned"]);
61570
+ var RunningStateStatusSchema = object({
61571
+ /** null = unknown — never coerced to false (D393). */
61572
+ running: boolean().nullable(),
61573
+ /** Epoch ms the current boolean began; null while `running` is null. */
61574
+ since: number().nullable(),
61575
+ source: RunningStateSourceSchema,
61576
+ phase: string().nullable(),
61577
+ lastFetchedAt: number()
61578
+ });
61579
+ var RunningFlipEventDataSchema = object({
61580
+ deviceId: number(),
61581
+ since: number().nullable(),
61582
+ phase: string().nullable()
61583
+ });
61584
+ var runningStateCapability = {
61585
+ name: "running-state",
61586
+ scope: "device",
61587
+ deviceNative: true,
61588
+ mode: "singleton",
61589
+ deviceTypes: Object.values(DeviceType),
61590
+ methods: {},
61591
+ events: {
61592
+ onStarted: { data: RunningFlipEventDataSchema },
61593
+ onFinished: { data: RunningFlipEventDataSchema }
61594
+ },
61595
+ status: {
61596
+ schema: RunningStateStatusSchema,
61597
+ kind: "push"
61598
+ },
61599
+ runtimeState: RunningStateStatusSchema,
61600
+ durability: "restored",
61601
+ history: { fields: { running: { kind: "boolean" } } },
61602
+ volatileStateFields: ["lastFetchedAt"]
61603
+ };
61552
61604
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
61553
61605
  kind: "mutation",
61554
61606
  auth: "admin"
@@ -66179,6 +66231,26 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
66179
66231
  kind: "mutation",
66180
66232
  auth: "admin"
66181
66233
  });
66234
+ function resolveSince(running, previous, sinceMs) {
66235
+ if (running === null) return null;
66236
+ if ((previous?.running ?? null) !== running) return sinceMs;
66237
+ return previous?.since ?? sinceMs;
66238
+ }
66239
+ function nativeSlice(running, phase, previous, sinceMs, now) {
66240
+ return {
66241
+ running,
66242
+ since: resolveSince(running, previous, sinceMs),
66243
+ source: "native",
66244
+ phase: running === null ? null : phase,
66245
+ lastFetchedAt: now
66246
+ };
66247
+ }
66248
+ function runningFromDishwasherOperation(operation, program, previous, now) {
66249
+ if (operation === null) return nativeSlice(null, null, previous, now, now);
66250
+ if (operation === "Run" || operation === "Aborting") return nativeSlice(true, program ?? operation, previous, now, now);
66251
+ if (operation === "Pause") return nativeSlice(false, "Pause", previous, now, now);
66252
+ return nativeSlice(false, operation, previous, now, now);
66253
+ }
66182
66254
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
66183
66255
  Object.freeze({
66184
66256
  person: .5,
@@ -66530,6 +66602,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
66530
66602
  ptzAutotrack: ptzAutotrackCapability,
66531
66603
  recordingOnboard: recordingOnboardCapability,
66532
66604
  recordingSignal: recordingSignalCapability,
66605
+ runningState: runningStateCapability,
66533
66606
  sceneMonitor: sceneMonitorCapability,
66534
66607
  scriptRunner: scriptRunnerCapability,
66535
66608
  smoke: smokeCapability,
@@ -75272,6 +75345,13 @@ Object.freeze({
75272
75345
  access: "create",
75273
75346
  role: "admin"
75274
75347
  },
75348
+ "runningState.getStatus": {
75349
+ capName: "running-state",
75350
+ capScope: "device",
75351
+ addonId: null,
75352
+ access: "view",
75353
+ role: "viewer"
75354
+ },
75275
75355
  "sceneMonitor.captureReference": {
75276
75356
  capName: "scene-monitor",
75277
75357
  capScope: "device",
@@ -79986,6 +80066,32 @@ var APPLIANCE_CAP_VOCABULARY = {
79986
80066
  }],
79987
80067
  events: { onSent: { notOperatorFacing: "a delivery receipt of a send this system made — not a fact about the world" } }
79988
80068
  },
80069
+ "running-state": {
80070
+ scope: "device",
80071
+ noun: t("Running", "In funzione"),
80072
+ state: [{
80073
+ kind: "boolean",
80074
+ field: "running",
80075
+ label: t("Running", "In funzione"),
80076
+ whenTrue: t("When {device} starts", "Quando {device} inizia"),
80077
+ whenFalse: t("When {device} finishes", "Quando {device} finisce"),
80078
+ icon: "play"
80079
+ }],
80080
+ events: {
80081
+ onStarted: {
80082
+ category: EventCategory.RunningStarted,
80083
+ label: t("Started running", "Ha iniziato a funzionare"),
80084
+ phrase: t("When {device} starts running", "Quando {device} inizia a funzionare"),
80085
+ icon: "play"
80086
+ },
80087
+ onFinished: {
80088
+ category: EventCategory.RunningFinished,
80089
+ label: t("Finished", "Ha finito"),
80090
+ phrase: t("When {device} finishes", "Quando {device} finisce"),
80091
+ icon: "square"
80092
+ }
80093
+ }
80094
+ },
79989
80095
  update: {
79990
80096
  scope: "device",
79991
80097
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -83526,6 +83632,11 @@ Object.freeze({
83526
83632
  form: "single",
83527
83633
  optional: true
83528
83634
  }],
83635
+ "runningState.getStatus": [{
83636
+ name: "deviceId",
83637
+ form: "single",
83638
+ optional: false
83639
+ }],
83529
83640
  "sceneMonitor.captureReference": [{
83530
83641
  name: "deviceId",
83531
83642
  form: "single",
@@ -84076,40 +84187,7 @@ var NC_AUDIO_DEFAULTS = {
84076
84187
  samplingSeconds: 10
84077
84188
  };
84078
84189
  new Set(["devices", "classes"]);
84079
- /**
84080
- * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
84081
- * consumed by the rule ENGINE and by every rule EDITOR.
84082
- *
84083
- * ── The failure this file exists for ───────────────────────────────────────
84084
- * `NcSystemEventConditionSchema` carries four optional narrowing lists
84085
- * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
84086
- * `kinds` gate. They are not four filters over one vocabulary: each belongs to
84087
- * a FAMILY of kinds and is meaningless outside it. A node going away has no
84088
- * device type; a completed export has no package; `stream-offline` deliberately
84089
- * carries no device type at all (a stream belongs to a camera by construction).
84090
- *
84091
- * The engine applied all four to every kind, so a filter from one family failed
84092
- * a kind from another family CLOSED. The operator's live rule "Eventi di
84093
- * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
84094
- * way to say "only my cameras" about the two liveness kinds — and NINE of the
84095
- * eleven silently stopped being deliverable. Four days of history contained
84096
- * `device-online` and `device-offline` and nothing else, across a window in
84097
- * which agents were restarted and addons were updated.
84098
- *
84099
- * Both editors already computed this scoping, to decide which filter boxes to
84100
- * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
84101
- * to these device TYPES"). Only the engine disagreed, and it disagreed in the
84102
- * destructive direction. So the rule is stated ONCE, here, and the engine and
84103
- * the editors are readers of it rather than three independent authors.
84104
- *
84105
- * ── The direction ─────────────────────────────────────────────────────────
84106
- * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
84107
- * hides a box has already told the operator this filter does not speak about
84108
- * these kinds, so honouring it as an exclusion contradicts the only
84109
- * explanation the operator was ever given. Inside its family the filter still
84110
- * narrows, and still fails CLOSED on a subject that cannot produce the identity
84111
- * it tests (a device the mirror cannot name is not evidence of a camera).
84112
- */
84190
+ new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
84113
84191
  /**
84114
84192
  * Every filter, for the callers that must cover all of them (guards, tests).
84115
84193
  *
@@ -84135,9 +84213,6 @@ new Map(Object.entries({
84135
84213
  "device-battery-normal": "device-events",
84136
84214
  "device-consumable-low": "device-events",
84137
84215
  "device-consumable-normal": "device-events",
84138
- "device-tank-low": "device-events",
84139
- "device-tank-full": "device-events",
84140
- "device-tank-normal": "device-events",
84141
84216
  "stream-online": "device-events",
84142
84217
  "stream-offline": "device-events",
84143
84218
  "detection-blind": "device-events",
@@ -84214,16 +84289,6 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
84214
84289
  label: "Consumables",
84215
84290
  kinds: ["device-consumable-low", "device-consumable-normal"]
84216
84291
  },
84217
- {
84218
- id: "tanks",
84219
- family: "device-events",
84220
- label: "Tanks",
84221
- kinds: [
84222
- "device-tank-low",
84223
- "device-tank-full",
84224
- "device-tank-normal"
84225
- ]
84226
- },
84227
84292
  {
84228
84293
  id: "detection-blind",
84229
84294
  family: "device-events",
@@ -84381,11 +84446,6 @@ var RULE_BODY_ONLY = ["body"];
84381
84446
  var RULE_TEXT = ["title", "body"];
84382
84447
  var BATTERY = ["device-battery-low", "device-battery-normal"];
84383
84448
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
84384
- var TANK = [
84385
- "device-tank-low",
84386
- "device-tank-full",
84387
- "device-tank-normal"
84388
- ];
84389
84449
  var ALERT_EPISODE = [
84390
84450
  "alert-critical",
84391
84451
  "alert-error",
@@ -84417,7 +84477,6 @@ var DEVICE_EVENTS = [
84417
84477
  "device-enabled",
84418
84478
  ...BATTERY,
84419
84479
  ...CONSUMABLE,
84420
- ...TANK,
84421
84480
  "stream-online",
84422
84481
  "stream-offline",
84423
84482
  "detection-blind",
@@ -84463,12 +84522,6 @@ var STATE_SUMMARY_SECTION_VARS = [
84463
84522
  example: "Robot — filter 10 %",
84464
84523
  kinds: CONSUMABLE
84465
84524
  },
84466
- {
84467
- name: "summaryTanks",
84468
- label: "Summary: tanks",
84469
- example: "Robot — clean water low",
84470
- kinds: TANK
84471
- },
84472
84525
  {
84473
84526
  name: "summaryDetection",
84474
84527
  label: "Summary: cameras detecting nothing",
@@ -84584,8 +84637,7 @@ var STATE_SUMMARY_VARS = [
84584
84637
  ([...RULE_TEXT], [...COMBINED_ALARM]),
84585
84638
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
84586
84639
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
84587
- ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
84588
- ([...RULE_TEXT], [...TANK]),
84640
+ ([...RULE_TEXT], [...CONSUMABLE]),
84589
84641
  [...RULE_TEXT],
84590
84642
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
84591
84643
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
@@ -84689,15 +84741,6 @@ new Map([
84689
84741
  snapshotLabel: "Consumables low now",
84690
84742
  snapshotSection: "consumables"
84691
84743
  },
84692
- {
84693
- id: "tanks",
84694
- family: "device-events",
84695
- label: "Tanks (low or full / back to normal)",
84696
- bad: ["device-tank-low", "device-tank-full"],
84697
- recovery: ["device-tank-normal"],
84698
- snapshotLabel: "Tanks low or full now",
84699
- snapshotSection: "tanks"
84700
- },
84701
84744
  {
84702
84745
  id: "motion-noise",
84703
84746
  family: "device-events",
@@ -85286,4 +85329,4 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
85286
85329
  var MB = 1024 * 1024;
85287
85330
  1024 * MB, 3072 * MB;
85288
85331
  //#endregion
85289
- export { number as A, customAction as C, _enum as D, isSecretMarkerLike as E, unknown as F, EventCategory as I, record as M, string as N, array as O, union as P, createEvent as S, isSecretMarker as T, temperatureSensorCapability as _, binaryCapability as a, DeviceType as b, consumablesCapability as c, enumSensorCapability as d, eventEmitterCapability as f, switchCapability as g, powerMeterCapability as h, batteryCapability as i, object as j, literal as k, deviceAdoptionCapability as l, numericSensorCapability as m, BaseDeviceProvider as n, climateControlCapability as o, heatingValveCapability as p, DishwasherOperationStateSchema as r, connectionTestCapability as s, BaseDevice as t, dishwasherCapability as u, waterHeaterCapability as v, defineCustomActions as w, errMsg as x, DeviceRole as y };
85332
+ export { array as A, errMsg as C, isSecretMarker as D, defineCustomActions as E, string as F, union as I, unknown as L, number as M, object as N, isSecretMarkerLike as O, record as P, EventCategory as R, DeviceType as S, customAction as T, runningStateCapability as _, binaryCapability as a, waterHeaterCapability as b, consumablesCapability as c, enumSensorCapability as d, eventEmitterCapability as f, runningFromDishwasherOperation as g, powerMeterCapability as h, batteryCapability as i, literal as j, _enum as k, deviceAdoptionCapability as l, numericSensorCapability as m, BaseDeviceProvider as n, climateControlCapability as o, heatingValveCapability as p, DishwasherOperationStateSchema as r, connectionTestCapability as s, BaseDevice as t, dishwasherCapability as u, switchCapability as v, createEvent as w, DeviceRole as x, temperatureSensorCapability as y };