@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.
- package/dist/{account-integration-offline-7DUtQrPy.js → account-integration-offline-CEg0JOfN.js} +55 -1
- package/dist/{account-integration-offline-DvuqXgc8.mjs → account-integration-offline-Ciq9CZa-.mjs} +44 -2
- package/dist/{dist-CYBUFKeW.js → dist-CFPbdUpa.js} +143 -88
- package/dist/{dist-B75tWQLF.mjs → dist-D9i3id5N.mjs} +132 -89
- package/dist/home-connect/addon.js +137 -106
- package/dist/home-connect/addon.mjs +137 -106
- package/dist/homecom/addon.js +557 -433
- package/dist/homecom/addon.mjs +557 -433
- package/dist/shc/addon.js +331 -38
- package/dist/shc/addon.mjs +331 -38
- package/i18n/en.json +23 -19
- package/i18n/it.json +23 -19
- package/package.json +4 -1
package/dist/{account-integration-offline-7DUtQrPy.js → account-integration-offline-CEg0JOfN.js}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
1
|
+
const require_dist = require("./dist-CFPbdUpa.js");
|
|
2
|
+
let node_crypto = require("node:crypto");
|
|
2
3
|
//#region src/shared/oauth-callback.ts
|
|
3
4
|
/** A code on its own: no scheme, no query, no separators. */
|
|
4
5
|
var BARE_CODE = /^[A-Za-z0-9._~-]+$/;
|
|
@@ -62,6 +63,47 @@ function parseOAuthCallback(input, expectedState) {
|
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
//#endregion
|
|
66
|
+
//#region src/shared/sign-in-attempt.ts
|
|
67
|
+
/** A sign-in code is only valid for a few minutes; the attempt dies with it. */
|
|
68
|
+
var SIGN_IN_ATTEMPT_TTL_MS = 600 * 1e3;
|
|
69
|
+
function createSignInAttemptStore(ttlMs = SIGN_IN_ATTEMPT_TTL_MS) {
|
|
70
|
+
const attempts = /* @__PURE__ */ new Map();
|
|
71
|
+
return {
|
|
72
|
+
put(verifier, state, nowMs) {
|
|
73
|
+
const attemptId = (0, node_crypto.randomBytes)(16).toString("base64url");
|
|
74
|
+
attempts.set(attemptId, {
|
|
75
|
+
verifier,
|
|
76
|
+
state,
|
|
77
|
+
expiresAtMs: nowMs + ttlMs
|
|
78
|
+
});
|
|
79
|
+
return attemptId;
|
|
80
|
+
},
|
|
81
|
+
take(attemptId, nowMs) {
|
|
82
|
+
const stored = attempts.get(attemptId);
|
|
83
|
+
if (stored === void 0) return {
|
|
84
|
+
ok: false,
|
|
85
|
+
reason: "missing"
|
|
86
|
+
};
|
|
87
|
+
attempts.delete(attemptId);
|
|
88
|
+
if (nowMs > stored.expiresAtMs) return {
|
|
89
|
+
ok: false,
|
|
90
|
+
reason: "expired"
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
attempt: {
|
|
95
|
+
verifier: stored.verifier,
|
|
96
|
+
state: stored.state
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** Expired attempts use the same operator text as an expired authorization code. */
|
|
103
|
+
function loginFailureForAttempt(reason) {
|
|
104
|
+
return reason === "expired" ? "code-rejected" : "state-mismatch";
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
65
107
|
//#region src/shared/account-integration-cascade.ts
|
|
66
108
|
async function cascadeRemoveDevicesForIntegration(input) {
|
|
67
109
|
const { reg, devices, addonId, system, integrationId, logger } = input;
|
|
@@ -105,6 +147,18 @@ Object.defineProperty(exports, "cascadeRemoveDevicesForIntegration", {
|
|
|
105
147
|
return cascadeRemoveDevicesForIntegration;
|
|
106
148
|
}
|
|
107
149
|
});
|
|
150
|
+
Object.defineProperty(exports, "createSignInAttemptStore", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
get: function() {
|
|
153
|
+
return createSignInAttemptStore;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(exports, "loginFailureForAttempt", {
|
|
157
|
+
enumerable: true,
|
|
158
|
+
get: function() {
|
|
159
|
+
return loginFailureForAttempt;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
108
162
|
Object.defineProperty(exports, "parseOAuthCallback", {
|
|
109
163
|
enumerable: true,
|
|
110
164
|
get: function() {
|
package/dist/{account-integration-offline-DvuqXgc8.mjs → account-integration-offline-Ciq9CZa-.mjs}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as errMsg } from "./dist-D9i3id5N.mjs";
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
2
3
|
//#region src/shared/oauth-callback.ts
|
|
3
4
|
/** A code on its own: no scheme, no query, no separators. */
|
|
4
5
|
var BARE_CODE = /^[A-Za-z0-9._~-]+$/;
|
|
@@ -62,6 +63,47 @@ function parseOAuthCallback(input, expectedState) {
|
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
//#endregion
|
|
66
|
+
//#region src/shared/sign-in-attempt.ts
|
|
67
|
+
/** A sign-in code is only valid for a few minutes; the attempt dies with it. */
|
|
68
|
+
var SIGN_IN_ATTEMPT_TTL_MS = 600 * 1e3;
|
|
69
|
+
function createSignInAttemptStore(ttlMs = SIGN_IN_ATTEMPT_TTL_MS) {
|
|
70
|
+
const attempts = /* @__PURE__ */ new Map();
|
|
71
|
+
return {
|
|
72
|
+
put(verifier, state, nowMs) {
|
|
73
|
+
const attemptId = randomBytes(16).toString("base64url");
|
|
74
|
+
attempts.set(attemptId, {
|
|
75
|
+
verifier,
|
|
76
|
+
state,
|
|
77
|
+
expiresAtMs: nowMs + ttlMs
|
|
78
|
+
});
|
|
79
|
+
return attemptId;
|
|
80
|
+
},
|
|
81
|
+
take(attemptId, nowMs) {
|
|
82
|
+
const stored = attempts.get(attemptId);
|
|
83
|
+
if (stored === void 0) return {
|
|
84
|
+
ok: false,
|
|
85
|
+
reason: "missing"
|
|
86
|
+
};
|
|
87
|
+
attempts.delete(attemptId);
|
|
88
|
+
if (nowMs > stored.expiresAtMs) return {
|
|
89
|
+
ok: false,
|
|
90
|
+
reason: "expired"
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
attempt: {
|
|
95
|
+
verifier: stored.verifier,
|
|
96
|
+
state: stored.state
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** Expired attempts use the same operator text as an expired authorization code. */
|
|
103
|
+
function loginFailureForAttempt(reason) {
|
|
104
|
+
return reason === "expired" ? "code-rejected" : "state-mismatch";
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
65
107
|
//#region src/shared/account-integration-cascade.ts
|
|
66
108
|
async function cascadeRemoveDevicesForIntegration(input) {
|
|
67
109
|
const { reg, devices, addonId, system, integrationId, logger } = input;
|
|
@@ -99,4 +141,4 @@ function setIntegrationDevicesOnline(devices, system, integrationId, online) {
|
|
|
99
141
|
return count;
|
|
100
142
|
}
|
|
101
143
|
//#endregion
|
|
102
|
-
export { cascadeRemoveDevicesForIntegration as n,
|
|
144
|
+
export { parseOAuthCallback as a, loginFailureForAttempt as i, cascadeRemoveDevicesForIntegration as n, createSignInAttemptStore as r, setIntegrationDevicesOnline as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("node:crypto");
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
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-
|
|
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-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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",
|
|
@@ -85466,6 +85509,18 @@ Object.defineProperty(exports, "record", {
|
|
|
85466
85509
|
return record;
|
|
85467
85510
|
}
|
|
85468
85511
|
});
|
|
85512
|
+
Object.defineProperty(exports, "runningFromDishwasherOperation", {
|
|
85513
|
+
enumerable: true,
|
|
85514
|
+
get: function() {
|
|
85515
|
+
return runningFromDishwasherOperation;
|
|
85516
|
+
}
|
|
85517
|
+
});
|
|
85518
|
+
Object.defineProperty(exports, "runningStateCapability", {
|
|
85519
|
+
enumerable: true,
|
|
85520
|
+
get: function() {
|
|
85521
|
+
return runningStateCapability;
|
|
85522
|
+
}
|
|
85523
|
+
});
|
|
85469
85524
|
Object.defineProperty(exports, "string", {
|
|
85470
85525
|
enumerable: true,
|
|
85471
85526
|
get: function() {
|