@camstack/addon-provider-onvif 1.2.143 → 1.2.144

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/addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region \0rolldown/runtime.js
3
3
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
4
4
  //#endregion
5
- //#region ../types/dist/event-category-7pZEBmVg.mjs
5
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -319,6 +319,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
319
319
  */
320
320
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
321
321
  /**
322
+ * A camera's motion source has fired constantly with no subject for an hour
323
+ * (motion duty or session count over the bar, zero detections) — it is not
324
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
325
+ * {@link PipelineMotionCalm}.
326
+ */
327
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
328
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
329
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
330
+ /**
322
331
  * Per-camera pipeline config was mutated by the orchestrator
323
332
  * (3-level settings change via `setAgentAddonDefaults` /
324
333
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5425,7 +5434,7 @@ var ZodIssueCode = {
5425
5434
  var ZodFirstPartyTypeKind;
5426
5435
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5427
5436
  //#endregion
5428
- //#region ../types/dist/sleep-CueztlR1.mjs
5437
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5429
5438
  /**
5430
5439
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5431
5440
  * window to float samples (D455).
@@ -7887,7 +7896,7 @@ var EntryDescriptorSchema = object({
7887
7896
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7888
7897
  fields: record(string(), unknown())
7889
7898
  }).strict();
7890
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7899
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7891
7900
  var RecordKindDeclarationSchema = object({
7892
7901
  database: _enum(RECORD_DATABASES).default("settings"),
7893
7902
  class: _enum(RECORD_CLASSES),
@@ -7906,14 +7915,6 @@ var RecordKindDeclarationSchema = object({
7906
7915
  secretPaths: array(string().min(1)).default([]),
7907
7916
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7908
7917
  secretArrayKeys: record(string(), string()).default({}),
7909
- /**
7910
- * RETIRED (D900): the legacy table a kind adopted from during the records
7911
- * migration. Nothing declares it any more and nothing reads it; the schema
7912
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7913
- * (an orphaned kind is never redeclared) and an addon built before the
7914
- * removal still sends it. Never set it.
7915
- */
7916
- adoptsFrom: string().min(1).optional(),
7917
7918
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7918
7919
  transactFamily: string().min(1).optional(),
7919
7920
  entry: EntryDescriptorSchema.optional()
@@ -12587,17 +12588,6 @@ object({
12587
12588
  createdAt: number(),
12588
12589
  updatedAt: number()
12589
12590
  });
12590
- object({
12591
- id: string(),
12592
- label: string(),
12593
- isAdmin: boolean().default(false),
12594
- allowedProviders: AllowedProviderSchema,
12595
- allowedDevices: AllowedDevicesSchema,
12596
- tokenHash: string(),
12597
- tokenPrefix: string(),
12598
- createdAt: number(),
12599
- lastUsedAt: number().optional()
12600
- });
12601
12591
  object({
12602
12592
  id: string(),
12603
12593
  userId: string(),
@@ -16473,16 +16463,36 @@ var RecordKindStateSchema = _enum([
16473
16463
  var DeclareKindResultSchema = object({
16474
16464
  kindId: number().int(),
16475
16465
  state: RecordKindStateSchema,
16476
- createdIndexes: array(string()),
16477
- /**
16478
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16479
- * it stays on the wire, null, because an addon built before the removal reads
16480
- * an ABSENT field as "adoption pending" and refuses to start.
16481
- */
16482
- adoptionPending: _null()
16466
+ createdIndexes: array(string())
16483
16467
  });
16484
16468
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16485
16469
  var SecretRefsList = array(string());
16470
+ /**
16471
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16472
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16473
+ */
16474
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16475
+ object({
16476
+ op: literal("put"),
16477
+ kind: RecordKindNameSchema,
16478
+ record: RecordInputSchema,
16479
+ ifRev: number().int().min(0).optional()
16480
+ }),
16481
+ object({
16482
+ op: literal("patch"),
16483
+ kind: RecordKindNameSchema,
16484
+ id: RecordIdSchema,
16485
+ data: RecordBodySchema,
16486
+ at: number().int().nullable().optional(),
16487
+ expiresAt: number().int().nullable().optional(),
16488
+ ifRev: number().int().min(1).optional()
16489
+ }),
16490
+ object({
16491
+ op: literal("delete"),
16492
+ kind: RecordKindNameSchema,
16493
+ id: RecordIdSchema
16494
+ })
16495
+ ]);
16486
16496
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16487
16497
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16488
16498
  kind: "mutation",
@@ -16589,6 +16599,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16589
16599
  }), {
16590
16600
  kind: "mutation",
16591
16601
  auth: "admin"
16602
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16603
+ results: array(object({
16604
+ rev: number().int().nullable(),
16605
+ deleted: boolean()
16606
+ })),
16607
+ releasedRefs: SecretRefsList,
16608
+ secretRefs: SecretRefsList
16609
+ }), {
16610
+ kind: "mutation",
16611
+ auth: "admin"
16592
16612
  }), method(object({
16593
16613
  deviceId: number().int(),
16594
16614
  kinds: array(RecordKindNameSchema).optional()
@@ -42141,9 +42161,13 @@ var NcSystemEventKindSchema = _enum([
42141
42161
  "node-updating",
42142
42162
  "node-inference-unavailable",
42143
42163
  "detection-blind",
42164
+ "motion-noisy",
42165
+ "motion-calm",
42144
42166
  "recording-stalled",
42145
42167
  "recording-healthy",
42146
42168
  "recording-degraded",
42169
+ "device-attention-required",
42170
+ "device-attention-resolved",
42147
42171
  "storage-location-low",
42148
42172
  "storage-location-critical",
42149
42173
  "storage-location-ok",
@@ -54704,6 +54728,16 @@ object({
54704
54728
  powerState: string().nullable(),
54705
54729
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54706
54730
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54731
+ /**
54732
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54733
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54734
+ * when none is reported. A cleared reminder is not an unknown one.
54735
+ */
54736
+ filterCleaningDue: boolean().nullable(),
54737
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54738
+ machineCareDue: boolean().nullable(),
54739
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54740
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54707
54741
  /** Option states: null when the appliance does not expose the option or has not said. */
54708
54742
  halfLoad: boolean().nullable(),
54709
54743
  hygienePlus: boolean().nullable(),
@@ -61413,16 +61447,6 @@ var UpdateUserInputSchema = object({
61413
61447
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61414
61448
  scopes: array(TokenScopeSchema).optional()
61415
61449
  });
61416
- var ApiKeySummarySchema = object({
61417
- id: string(),
61418
- label: string(),
61419
- isAdmin: boolean().default(false),
61420
- allowedProviders: union([array(string()), literal("*")]).optional(),
61421
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61422
- tokenPrefix: string(),
61423
- createdAt: number(),
61424
- lastUsedAt: number().optional()
61425
- });
61426
61450
  var OauthSessionSummarySchema = object({
61427
61451
  id: string(),
61428
61452
  userId: string(),
@@ -61444,8 +61468,7 @@ var TotpStatusSchema = object({
61444
61468
  confirmedAt: number().nullable()
61445
61469
  });
61446
61470
  /**
61447
- * user-management — singleton capability for user accounts and the
61448
- * legacy API-key rows.
61471
+ * user-management — singleton capability for user accounts.
61449
61472
  *
61450
61473
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61451
61474
  * — the subset check on `setUserScopes` is moot
@@ -61501,10 +61524,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61501
61524
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61502
61525
  kind: "mutation",
61503
61526
  access: "view"
61504
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61505
- kind: "mutation",
61506
- auth: "admin",
61507
- access: "delete"
61508
61527
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61509
61528
  kind: "mutation",
61510
61529
  auth: "admin",
@@ -69842,6 +69861,12 @@ Object.freeze({
69842
69861
  addonId: null,
69843
69862
  access: "view"
69844
69863
  },
69864
+ "records.transact": {
69865
+ capName: "records",
69866
+ capScope: "system",
69867
+ addonId: null,
69868
+ access: "create"
69869
+ },
69845
69870
  "sceneMonitor.captureReference": {
69846
69871
  capName: "scene-monitor",
69847
69872
  capScope: "device",
@@ -71174,12 +71199,6 @@ Object.freeze({
71174
71199
  addonId: null,
71175
71200
  access: "view"
71176
71201
  },
71177
- "userManagement.listApiKeys": {
71178
- capName: "user-management",
71179
- capScope: "system",
71180
- addonId: null,
71181
- access: "view"
71182
- },
71183
71202
  "userManagement.listExternalIdentities": {
71184
71203
  capName: "user-management",
71185
71204
  capScope: "system",
@@ -71234,12 +71253,6 @@ Object.freeze({
71234
71253
  addonId: null,
71235
71254
  access: "create"
71236
71255
  },
71237
- "userManagement.revokeApiKey": {
71238
- capName: "user-management",
71239
- capScope: "system",
71240
- addonId: null,
71241
- access: "delete"
71242
- },
71243
71256
  "userManagement.revokeOauthSession": {
71244
71257
  capName: "user-management",
71245
71258
  capScope: "system",
@@ -74670,9 +74683,13 @@ new Map(Object.entries({
74670
74683
  "stream-online": "device-events",
74671
74684
  "stream-offline": "device-events",
74672
74685
  "detection-blind": "device-events",
74686
+ "motion-noisy": "device-events",
74687
+ "motion-calm": "device-events",
74673
74688
  "recording-stalled": "device-events",
74674
74689
  "recording-healthy": "device-events",
74675
74690
  "recording-degraded": "device-events",
74691
+ "device-attention-required": "device-events",
74692
+ "device-attention-resolved": "device-events",
74676
74693
  "node-online": "system",
74677
74694
  "node-offline": "system",
74678
74695
  "node-restarting": "system",
@@ -74755,6 +74772,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74755
74772
  label: "Detecting nothing",
74756
74773
  kinds: ["detection-blind"]
74757
74774
  },
74775
+ {
74776
+ id: "motion-noise",
74777
+ family: "device-events",
74778
+ label: "Motion without a subject",
74779
+ kinds: ["motion-noisy", "motion-calm"]
74780
+ },
74758
74781
  {
74759
74782
  id: "recording",
74760
74783
  family: "device-events",
@@ -74765,6 +74788,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74765
74788
  "recording-degraded"
74766
74789
  ]
74767
74790
  },
74791
+ {
74792
+ id: "device-attention",
74793
+ family: "device-events",
74794
+ label: "Needs attention",
74795
+ kinds: ["device-attention-required", "device-attention-resolved"]
74796
+ },
74768
74797
  {
74769
74798
  id: "nodes",
74770
74799
  family: "system",
@@ -74904,6 +74933,7 @@ var ALERT_EPISODE = [
74904
74933
  "alert-error",
74905
74934
  "alert-critical-resolved"
74906
74935
  ];
74936
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74907
74937
  var UPDATES = [
74908
74938
  "addon-update-available",
74909
74939
  "server-update-available",
@@ -74933,9 +74963,12 @@ var DEVICE_EVENTS = [
74933
74963
  "stream-online",
74934
74964
  "stream-offline",
74935
74965
  "detection-blind",
74966
+ "motion-noisy",
74967
+ "motion-calm",
74936
74968
  "recording-stalled",
74937
74969
  "recording-healthy",
74938
74970
  "recording-degraded",
74971
+ ...DEVICE_ATTENTION,
74939
74972
  ...ALARM
74940
74973
  ];
74941
74974
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -75103,7 +75136,9 @@ var STATE_SUMMARY_VARS = [
75103
75136
  [...RULE_TEXT],
75104
75137
  [...RULE_TEXT],
75105
75138
  [...RULE_TEXT],
75106
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75139
+ [...RULE_TEXT],
75140
+ [...RULE_TEXT],
75141
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75107
75142
  [...RULE_TEXT],
75108
75143
  [...RULE_TEXT],
75109
75144
  [...RULE_TEXT],
@@ -75125,11 +75160,11 @@ var STATE_SUMMARY_VARS = [
75125
75160
  [...RULE_TEXT],
75126
75161
  [...RULE_TEXT],
75127
75162
  [...RULE_TEXT],
75163
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75128
75164
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75165
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75129
75166
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75130
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75131
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75132
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75167
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75133
75168
  [...RULE_TEXT],
75134
75169
  [...RULE_TEXT],
75135
75170
  [...RULE_TEXT],
@@ -75205,6 +75240,15 @@ new Map([
75205
75240
  snapshotLabel: "Tanks low or full now",
75206
75241
  snapshotSection: "tanks"
75207
75242
  },
75243
+ {
75244
+ id: "motion-noise",
75245
+ family: "device-events",
75246
+ label: "Motion without a subject (constant / calm again)",
75247
+ bad: ["motion-noisy"],
75248
+ recovery: ["motion-calm"],
75249
+ snapshotLabel: "Cameras with constant motion now",
75250
+ snapshotSection: null
75251
+ },
75208
75252
  {
75209
75253
  id: "recording-health",
75210
75254
  family: "device-events",
@@ -75214,6 +75258,15 @@ new Map([
75214
75258
  snapshotLabel: "Recordings stalled now",
75215
75259
  snapshotSection: null
75216
75260
  },
75261
+ {
75262
+ id: "device-attention",
75263
+ family: "device-events",
75264
+ label: "Device needs attention (raised / resolved)",
75265
+ bad: ["device-attention-required"],
75266
+ recovery: ["device-attention-resolved"],
75267
+ snapshotLabel: "Devices needing attention now",
75268
+ snapshotSection: null
75269
+ },
75217
75270
  {
75218
75271
  id: "node-connectivity",
75219
75272
  family: "system",
@@ -85248,8 +85301,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85248
85301
  id: "discovery",
85249
85302
  title: "ONVIF Discovery",
85250
85303
  titleKey: "provider-onvif:globalSettings.s_discovery.title",
85251
- description: "Find ONVIF cameras on the local network when you add a device",
85252
- descriptionKey: "provider-onvif:globalSettings.s_discovery.description",
85253
85304
  columns: 2,
85254
85305
  fields: [{
85255
85306
  type: "number",
@@ -85265,8 +85316,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85265
85316
  id: "credentials",
85266
85317
  title: "Default Credentials",
85267
85318
  titleKey: "provider-onvif:globalSettings.s_credentials.title",
85268
- description: "Default credentials for discovered cameras",
85269
- descriptionKey: "provider-onvif:globalSettings.s_credentials.description",
85270
85319
  columns: 2,
85271
85320
  fields: [{
85272
85321
  type: "text",
package/dist/addon.mjs CHANGED
@@ -3,7 +3,7 @@ import { createRequire } from "node:module";
3
3
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
4
4
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
5
5
  //#endregion
6
- //#region ../types/dist/event-category-7pZEBmVg.mjs
6
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
7
7
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
8
8
  EventCategory["SystemBoot"] = "system.boot";
9
9
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -320,6 +320,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
320
320
  */
321
321
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
322
322
  /**
323
+ * A camera's motion source has fired constantly with no subject for an hour
324
+ * (motion duty or session count over the bar, zero detections) — it is not
325
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
326
+ * {@link PipelineMotionCalm}.
327
+ */
328
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
329
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
330
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
331
+ /**
323
332
  * Per-camera pipeline config was mutated by the orchestrator
324
333
  * (3-level settings change via `setAgentAddonDefaults` /
325
334
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5426,7 +5435,7 @@ var ZodIssueCode = {
5426
5435
  var ZodFirstPartyTypeKind;
5427
5436
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5428
5437
  //#endregion
5429
- //#region ../types/dist/sleep-CueztlR1.mjs
5438
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5430
5439
  /**
5431
5440
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5432
5441
  * window to float samples (D455).
@@ -7888,7 +7897,7 @@ var EntryDescriptorSchema = object({
7888
7897
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7889
7898
  fields: record(string(), unknown())
7890
7899
  }).strict();
7891
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7900
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7892
7901
  var RecordKindDeclarationSchema = object({
7893
7902
  database: _enum(RECORD_DATABASES).default("settings"),
7894
7903
  class: _enum(RECORD_CLASSES),
@@ -7907,14 +7916,6 @@ var RecordKindDeclarationSchema = object({
7907
7916
  secretPaths: array(string().min(1)).default([]),
7908
7917
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7909
7918
  secretArrayKeys: record(string(), string()).default({}),
7910
- /**
7911
- * RETIRED (D900): the legacy table a kind adopted from during the records
7912
- * migration. Nothing declares it any more and nothing reads it; the schema
7913
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7914
- * (an orphaned kind is never redeclared) and an addon built before the
7915
- * removal still sends it. Never set it.
7916
- */
7917
- adoptsFrom: string().min(1).optional(),
7918
7919
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7919
7920
  transactFamily: string().min(1).optional(),
7920
7921
  entry: EntryDescriptorSchema.optional()
@@ -12588,17 +12589,6 @@ object({
12588
12589
  createdAt: number(),
12589
12590
  updatedAt: number()
12590
12591
  });
12591
- object({
12592
- id: string(),
12593
- label: string(),
12594
- isAdmin: boolean().default(false),
12595
- allowedProviders: AllowedProviderSchema,
12596
- allowedDevices: AllowedDevicesSchema,
12597
- tokenHash: string(),
12598
- tokenPrefix: string(),
12599
- createdAt: number(),
12600
- lastUsedAt: number().optional()
12601
- });
12602
12592
  object({
12603
12593
  id: string(),
12604
12594
  userId: string(),
@@ -16474,16 +16464,36 @@ var RecordKindStateSchema = _enum([
16474
16464
  var DeclareKindResultSchema = object({
16475
16465
  kindId: number().int(),
16476
16466
  state: RecordKindStateSchema,
16477
- createdIndexes: array(string()),
16478
- /**
16479
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16480
- * it stays on the wire, null, because an addon built before the removal reads
16481
- * an ABSENT field as "adoption pending" and refuses to start.
16482
- */
16483
- adoptionPending: _null()
16467
+ createdIndexes: array(string())
16484
16468
  });
16485
16469
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16486
16470
  var SecretRefsList = array(string());
16471
+ /**
16472
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16473
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16474
+ */
16475
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16476
+ object({
16477
+ op: literal("put"),
16478
+ kind: RecordKindNameSchema,
16479
+ record: RecordInputSchema,
16480
+ ifRev: number().int().min(0).optional()
16481
+ }),
16482
+ object({
16483
+ op: literal("patch"),
16484
+ kind: RecordKindNameSchema,
16485
+ id: RecordIdSchema,
16486
+ data: RecordBodySchema,
16487
+ at: number().int().nullable().optional(),
16488
+ expiresAt: number().int().nullable().optional(),
16489
+ ifRev: number().int().min(1).optional()
16490
+ }),
16491
+ object({
16492
+ op: literal("delete"),
16493
+ kind: RecordKindNameSchema,
16494
+ id: RecordIdSchema
16495
+ })
16496
+ ]);
16487
16497
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16488
16498
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16489
16499
  kind: "mutation",
@@ -16590,6 +16600,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16590
16600
  }), {
16591
16601
  kind: "mutation",
16592
16602
  auth: "admin"
16603
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16604
+ results: array(object({
16605
+ rev: number().int().nullable(),
16606
+ deleted: boolean()
16607
+ })),
16608
+ releasedRefs: SecretRefsList,
16609
+ secretRefs: SecretRefsList
16610
+ }), {
16611
+ kind: "mutation",
16612
+ auth: "admin"
16593
16613
  }), method(object({
16594
16614
  deviceId: number().int(),
16595
16615
  kinds: array(RecordKindNameSchema).optional()
@@ -42142,9 +42162,13 @@ var NcSystemEventKindSchema = _enum([
42142
42162
  "node-updating",
42143
42163
  "node-inference-unavailable",
42144
42164
  "detection-blind",
42165
+ "motion-noisy",
42166
+ "motion-calm",
42145
42167
  "recording-stalled",
42146
42168
  "recording-healthy",
42147
42169
  "recording-degraded",
42170
+ "device-attention-required",
42171
+ "device-attention-resolved",
42148
42172
  "storage-location-low",
42149
42173
  "storage-location-critical",
42150
42174
  "storage-location-ok",
@@ -54705,6 +54729,16 @@ object({
54705
54729
  powerState: string().nullable(),
54706
54730
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54707
54731
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54732
+ /**
54733
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54734
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54735
+ * when none is reported. A cleared reminder is not an unknown one.
54736
+ */
54737
+ filterCleaningDue: boolean().nullable(),
54738
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54739
+ machineCareDue: boolean().nullable(),
54740
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54741
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54708
54742
  /** Option states: null when the appliance does not expose the option or has not said. */
54709
54743
  halfLoad: boolean().nullable(),
54710
54744
  hygienePlus: boolean().nullable(),
@@ -61414,16 +61448,6 @@ var UpdateUserInputSchema = object({
61414
61448
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61415
61449
  scopes: array(TokenScopeSchema).optional()
61416
61450
  });
61417
- var ApiKeySummarySchema = object({
61418
- id: string(),
61419
- label: string(),
61420
- isAdmin: boolean().default(false),
61421
- allowedProviders: union([array(string()), literal("*")]).optional(),
61422
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61423
- tokenPrefix: string(),
61424
- createdAt: number(),
61425
- lastUsedAt: number().optional()
61426
- });
61427
61451
  var OauthSessionSummarySchema = object({
61428
61452
  id: string(),
61429
61453
  userId: string(),
@@ -61445,8 +61469,7 @@ var TotpStatusSchema = object({
61445
61469
  confirmedAt: number().nullable()
61446
61470
  });
61447
61471
  /**
61448
- * user-management — singleton capability for user accounts and the
61449
- * legacy API-key rows.
61472
+ * user-management — singleton capability for user accounts.
61450
61473
  *
61451
61474
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61452
61475
  * — the subset check on `setUserScopes` is moot
@@ -61502,10 +61525,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61502
61525
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61503
61526
  kind: "mutation",
61504
61527
  access: "view"
61505
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
61506
- kind: "mutation",
61507
- auth: "admin",
61508
- access: "delete"
61509
61528
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61510
61529
  kind: "mutation",
61511
61530
  auth: "admin",
@@ -69843,6 +69862,12 @@ Object.freeze({
69843
69862
  addonId: null,
69844
69863
  access: "view"
69845
69864
  },
69865
+ "records.transact": {
69866
+ capName: "records",
69867
+ capScope: "system",
69868
+ addonId: null,
69869
+ access: "create"
69870
+ },
69846
69871
  "sceneMonitor.captureReference": {
69847
69872
  capName: "scene-monitor",
69848
69873
  capScope: "device",
@@ -71175,12 +71200,6 @@ Object.freeze({
71175
71200
  addonId: null,
71176
71201
  access: "view"
71177
71202
  },
71178
- "userManagement.listApiKeys": {
71179
- capName: "user-management",
71180
- capScope: "system",
71181
- addonId: null,
71182
- access: "view"
71183
- },
71184
71203
  "userManagement.listExternalIdentities": {
71185
71204
  capName: "user-management",
71186
71205
  capScope: "system",
@@ -71235,12 +71254,6 @@ Object.freeze({
71235
71254
  addonId: null,
71236
71255
  access: "create"
71237
71256
  },
71238
- "userManagement.revokeApiKey": {
71239
- capName: "user-management",
71240
- capScope: "system",
71241
- addonId: null,
71242
- access: "delete"
71243
- },
71244
71257
  "userManagement.revokeOauthSession": {
71245
71258
  capName: "user-management",
71246
71259
  capScope: "system",
@@ -74671,9 +74684,13 @@ new Map(Object.entries({
74671
74684
  "stream-online": "device-events",
74672
74685
  "stream-offline": "device-events",
74673
74686
  "detection-blind": "device-events",
74687
+ "motion-noisy": "device-events",
74688
+ "motion-calm": "device-events",
74674
74689
  "recording-stalled": "device-events",
74675
74690
  "recording-healthy": "device-events",
74676
74691
  "recording-degraded": "device-events",
74692
+ "device-attention-required": "device-events",
74693
+ "device-attention-resolved": "device-events",
74677
74694
  "node-online": "system",
74678
74695
  "node-offline": "system",
74679
74696
  "node-restarting": "system",
@@ -74756,6 +74773,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74756
74773
  label: "Detecting nothing",
74757
74774
  kinds: ["detection-blind"]
74758
74775
  },
74776
+ {
74777
+ id: "motion-noise",
74778
+ family: "device-events",
74779
+ label: "Motion without a subject",
74780
+ kinds: ["motion-noisy", "motion-calm"]
74781
+ },
74759
74782
  {
74760
74783
  id: "recording",
74761
74784
  family: "device-events",
@@ -74766,6 +74789,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74766
74789
  "recording-degraded"
74767
74790
  ]
74768
74791
  },
74792
+ {
74793
+ id: "device-attention",
74794
+ family: "device-events",
74795
+ label: "Needs attention",
74796
+ kinds: ["device-attention-required", "device-attention-resolved"]
74797
+ },
74769
74798
  {
74770
74799
  id: "nodes",
74771
74800
  family: "system",
@@ -74905,6 +74934,7 @@ var ALERT_EPISODE = [
74905
74934
  "alert-error",
74906
74935
  "alert-critical-resolved"
74907
74936
  ];
74937
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74908
74938
  var UPDATES = [
74909
74939
  "addon-update-available",
74910
74940
  "server-update-available",
@@ -74934,9 +74964,12 @@ var DEVICE_EVENTS = [
74934
74964
  "stream-online",
74935
74965
  "stream-offline",
74936
74966
  "detection-blind",
74967
+ "motion-noisy",
74968
+ "motion-calm",
74937
74969
  "recording-stalled",
74938
74970
  "recording-healthy",
74939
74971
  "recording-degraded",
74972
+ ...DEVICE_ATTENTION,
74940
74973
  ...ALARM
74941
74974
  ];
74942
74975
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -75104,7 +75137,9 @@ var STATE_SUMMARY_VARS = [
75104
75137
  [...RULE_TEXT],
75105
75138
  [...RULE_TEXT],
75106
75139
  [...RULE_TEXT],
75107
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75140
+ [...RULE_TEXT],
75141
+ [...RULE_TEXT],
75142
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75108
75143
  [...RULE_TEXT],
75109
75144
  [...RULE_TEXT],
75110
75145
  [...RULE_TEXT],
@@ -75126,11 +75161,11 @@ var STATE_SUMMARY_VARS = [
75126
75161
  [...RULE_TEXT],
75127
75162
  [...RULE_TEXT],
75128
75163
  [...RULE_TEXT],
75164
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75129
75165
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75166
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75130
75167
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75131
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75132
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75133
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75168
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75134
75169
  [...RULE_TEXT],
75135
75170
  [...RULE_TEXT],
75136
75171
  [...RULE_TEXT],
@@ -75206,6 +75241,15 @@ new Map([
75206
75241
  snapshotLabel: "Tanks low or full now",
75207
75242
  snapshotSection: "tanks"
75208
75243
  },
75244
+ {
75245
+ id: "motion-noise",
75246
+ family: "device-events",
75247
+ label: "Motion without a subject (constant / calm again)",
75248
+ bad: ["motion-noisy"],
75249
+ recovery: ["motion-calm"],
75250
+ snapshotLabel: "Cameras with constant motion now",
75251
+ snapshotSection: null
75252
+ },
75209
75253
  {
75210
75254
  id: "recording-health",
75211
75255
  family: "device-events",
@@ -75215,6 +75259,15 @@ new Map([
75215
75259
  snapshotLabel: "Recordings stalled now",
75216
75260
  snapshotSection: null
75217
75261
  },
75262
+ {
75263
+ id: "device-attention",
75264
+ family: "device-events",
75265
+ label: "Device needs attention (raised / resolved)",
75266
+ bad: ["device-attention-required"],
75267
+ recovery: ["device-attention-resolved"],
75268
+ snapshotLabel: "Devices needing attention now",
75269
+ snapshotSection: null
75270
+ },
75218
75271
  {
75219
75272
  id: "node-connectivity",
75220
75273
  family: "system",
@@ -85249,8 +85302,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85249
85302
  id: "discovery",
85250
85303
  title: "ONVIF Discovery",
85251
85304
  titleKey: "provider-onvif:globalSettings.s_discovery.title",
85252
- description: "Find ONVIF cameras on the local network when you add a device",
85253
- descriptionKey: "provider-onvif:globalSettings.s_discovery.description",
85254
85305
  columns: 2,
85255
85306
  fields: [{
85256
85307
  type: "number",
@@ -85266,8 +85317,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85266
85317
  id: "credentials",
85267
85318
  title: "Default Credentials",
85268
85319
  titleKey: "provider-onvif:globalSettings.s_credentials.title",
85269
- description: "Default credentials for discovered cameras",
85270
- descriptionKey: "provider-onvif:globalSettings.s_credentials.description",
85271
85320
  columns: 2,
85272
85321
  fields: [{
85273
85322
  type: "text",
package/i18n/en.json CHANGED
@@ -6,9 +6,7 @@
6
6
  "onGetCreation.s_connection.username.label": "Username",
7
7
  "onGetCreation.s_connection.password.label": "Password",
8
8
  "globalSettings.s_discovery.title": "ONVIF Discovery",
9
- "globalSettings.s_discovery.description": "Find ONVIF cameras on the local network when you add a device",
10
9
  "globalSettings.s_credentials.title": "Default Credentials",
11
- "globalSettings.s_credentials.description": "Default credentials for discovered cameras",
12
10
  "globalSettings.s_credentials.defaultUsername.label": "Default Username",
13
11
  "globalSettings.s_credentials.defaultPassword.label": "Default Password"
14
12
  }
package/i18n/it.json CHANGED
@@ -6,9 +6,7 @@
6
6
  "onGetCreation.s_connection.username.label": "Nome utente",
7
7
  "onGetCreation.s_connection.password.label": "Password",
8
8
  "globalSettings.s_discovery.title": "Rilevamento ONVIF",
9
- "globalSettings.s_discovery.description": "Trova le telecamere ONVIF sulla rete locale quando aggiungi un dispositivo",
10
9
  "globalSettings.s_credentials.title": "Credenziali predefinite",
11
- "globalSettings.s_credentials.description": "Credenziali predefinite per le telecamere rilevate",
12
10
  "globalSettings.s_credentials.defaultUsername.label": "Nome utente predefinito",
13
11
  "globalSettings.s_credentials.defaultPassword.label": "Password predefinita"
14
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.143",
3
+ "version": "1.2.144",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",