@camstack/addon-provider-onvif 1.2.143 → 1.2.145

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",
@@ -47704,7 +47728,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
47704
47728
  modelId: string()
47705
47729
  }),
47706
47730
  object({ kind: literal("cpu-device") }),
47707
- object({ kind: literal("coral-untouched") }),
47708
47731
  object({ kind: literal("device-disabled") }),
47709
47732
  object({ kind: literal("device-unavailable") }),
47710
47733
  object({ kind: literal("node-offline") }),
@@ -47802,11 +47825,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
47802
47825
  kind: literal("detector-store-unreadable"),
47803
47826
  error: string()
47804
47827
  }),
47805
- object({
47806
- kind: literal("coral-enabled"),
47807
- nodeId: string(),
47808
- deviceKey: string()
47809
- }),
47810
47828
  object({
47811
47829
  kind: literal("custom-pin-kept"),
47812
47830
  nodeId: string(),
@@ -54704,6 +54722,16 @@ object({
54704
54722
  powerState: string().nullable(),
54705
54723
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54706
54724
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54725
+ /**
54726
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54727
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54728
+ * when none is reported. A cleared reminder is not an unknown one.
54729
+ */
54730
+ filterCleaningDue: boolean().nullable(),
54731
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54732
+ machineCareDue: boolean().nullable(),
54733
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54734
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54707
54735
  /** Option states: null when the appliance does not expose the option or has not said. */
54708
54736
  halfLoad: boolean().nullable(),
54709
54737
  hygienePlus: boolean().nullable(),
@@ -61413,16 +61441,6 @@ var UpdateUserInputSchema = object({
61413
61441
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61414
61442
  scopes: array(TokenScopeSchema).optional()
61415
61443
  });
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
61444
  var OauthSessionSummarySchema = object({
61427
61445
  id: string(),
61428
61446
  userId: string(),
@@ -61444,8 +61462,7 @@ var TotpStatusSchema = object({
61444
61462
  confirmedAt: number().nullable()
61445
61463
  });
61446
61464
  /**
61447
- * user-management — singleton capability for user accounts and the
61448
- * legacy API-key rows.
61465
+ * user-management — singleton capability for user accounts.
61449
61466
  *
61450
61467
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61451
61468
  * — the subset check on `setUserScopes` is moot
@@ -61501,10 +61518,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61501
61518
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61502
61519
  kind: "mutation",
61503
61520
  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
61521
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61509
61522
  kind: "mutation",
61510
61523
  auth: "admin",
@@ -69842,6 +69855,12 @@ Object.freeze({
69842
69855
  addonId: null,
69843
69856
  access: "view"
69844
69857
  },
69858
+ "records.transact": {
69859
+ capName: "records",
69860
+ capScope: "system",
69861
+ addonId: null,
69862
+ access: "create"
69863
+ },
69845
69864
  "sceneMonitor.captureReference": {
69846
69865
  capName: "scene-monitor",
69847
69866
  capScope: "device",
@@ -71174,12 +71193,6 @@ Object.freeze({
71174
71193
  addonId: null,
71175
71194
  access: "view"
71176
71195
  },
71177
- "userManagement.listApiKeys": {
71178
- capName: "user-management",
71179
- capScope: "system",
71180
- addonId: null,
71181
- access: "view"
71182
- },
71183
71196
  "userManagement.listExternalIdentities": {
71184
71197
  capName: "user-management",
71185
71198
  capScope: "system",
@@ -71234,12 +71247,6 @@ Object.freeze({
71234
71247
  addonId: null,
71235
71248
  access: "create"
71236
71249
  },
71237
- "userManagement.revokeApiKey": {
71238
- capName: "user-management",
71239
- capScope: "system",
71240
- addonId: null,
71241
- access: "delete"
71242
- },
71243
71250
  "userManagement.revokeOauthSession": {
71244
71251
  capName: "user-management",
71245
71252
  capScope: "system",
@@ -74670,9 +74677,13 @@ new Map(Object.entries({
74670
74677
  "stream-online": "device-events",
74671
74678
  "stream-offline": "device-events",
74672
74679
  "detection-blind": "device-events",
74680
+ "motion-noisy": "device-events",
74681
+ "motion-calm": "device-events",
74673
74682
  "recording-stalled": "device-events",
74674
74683
  "recording-healthy": "device-events",
74675
74684
  "recording-degraded": "device-events",
74685
+ "device-attention-required": "device-events",
74686
+ "device-attention-resolved": "device-events",
74676
74687
  "node-online": "system",
74677
74688
  "node-offline": "system",
74678
74689
  "node-restarting": "system",
@@ -74755,6 +74766,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74755
74766
  label: "Detecting nothing",
74756
74767
  kinds: ["detection-blind"]
74757
74768
  },
74769
+ {
74770
+ id: "motion-noise",
74771
+ family: "device-events",
74772
+ label: "Motion without a subject",
74773
+ kinds: ["motion-noisy", "motion-calm"]
74774
+ },
74758
74775
  {
74759
74776
  id: "recording",
74760
74777
  family: "device-events",
@@ -74765,6 +74782,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74765
74782
  "recording-degraded"
74766
74783
  ]
74767
74784
  },
74785
+ {
74786
+ id: "device-attention",
74787
+ family: "device-events",
74788
+ label: "Needs attention",
74789
+ kinds: ["device-attention-required", "device-attention-resolved"]
74790
+ },
74768
74791
  {
74769
74792
  id: "nodes",
74770
74793
  family: "system",
@@ -74904,6 +74927,7 @@ var ALERT_EPISODE = [
74904
74927
  "alert-error",
74905
74928
  "alert-critical-resolved"
74906
74929
  ];
74930
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74907
74931
  var UPDATES = [
74908
74932
  "addon-update-available",
74909
74933
  "server-update-available",
@@ -74933,9 +74957,12 @@ var DEVICE_EVENTS = [
74933
74957
  "stream-online",
74934
74958
  "stream-offline",
74935
74959
  "detection-blind",
74960
+ "motion-noisy",
74961
+ "motion-calm",
74936
74962
  "recording-stalled",
74937
74963
  "recording-healthy",
74938
74964
  "recording-degraded",
74965
+ ...DEVICE_ATTENTION,
74939
74966
  ...ALARM
74940
74967
  ];
74941
74968
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -75103,7 +75130,9 @@ var STATE_SUMMARY_VARS = [
75103
75130
  [...RULE_TEXT],
75104
75131
  [...RULE_TEXT],
75105
75132
  [...RULE_TEXT],
75106
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75133
+ [...RULE_TEXT],
75134
+ [...RULE_TEXT],
75135
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75107
75136
  [...RULE_TEXT],
75108
75137
  [...RULE_TEXT],
75109
75138
  [...RULE_TEXT],
@@ -75125,11 +75154,11 @@ var STATE_SUMMARY_VARS = [
75125
75154
  [...RULE_TEXT],
75126
75155
  [...RULE_TEXT],
75127
75156
  [...RULE_TEXT],
75157
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75128
75158
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75159
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75129
75160
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75130
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75131
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75132
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75161
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75133
75162
  [...RULE_TEXT],
75134
75163
  [...RULE_TEXT],
75135
75164
  [...RULE_TEXT],
@@ -75205,6 +75234,15 @@ new Map([
75205
75234
  snapshotLabel: "Tanks low or full now",
75206
75235
  snapshotSection: "tanks"
75207
75236
  },
75237
+ {
75238
+ id: "motion-noise",
75239
+ family: "device-events",
75240
+ label: "Motion without a subject (constant / calm again)",
75241
+ bad: ["motion-noisy"],
75242
+ recovery: ["motion-calm"],
75243
+ snapshotLabel: "Cameras with constant motion now",
75244
+ snapshotSection: null
75245
+ },
75208
75246
  {
75209
75247
  id: "recording-health",
75210
75248
  family: "device-events",
@@ -75214,6 +75252,15 @@ new Map([
75214
75252
  snapshotLabel: "Recordings stalled now",
75215
75253
  snapshotSection: null
75216
75254
  },
75255
+ {
75256
+ id: "device-attention",
75257
+ family: "device-events",
75258
+ label: "Device needs attention (raised / resolved)",
75259
+ bad: ["device-attention-required"],
75260
+ recovery: ["device-attention-resolved"],
75261
+ snapshotLabel: "Devices needing attention now",
75262
+ snapshotSection: null
75263
+ },
75217
75264
  {
75218
75265
  id: "node-connectivity",
75219
75266
  family: "system",
@@ -85248,8 +85295,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85248
85295
  id: "discovery",
85249
85296
  title: "ONVIF Discovery",
85250
85297
  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
85298
  columns: 2,
85254
85299
  fields: [{
85255
85300
  type: "number",
@@ -85265,8 +85310,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85265
85310
  id: "credentials",
85266
85311
  title: "Default Credentials",
85267
85312
  titleKey: "provider-onvif:globalSettings.s_credentials.title",
85268
- description: "Default credentials for discovered cameras",
85269
- descriptionKey: "provider-onvif:globalSettings.s_credentials.description",
85270
85313
  columns: 2,
85271
85314
  fields: [{
85272
85315
  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",
@@ -47705,7 +47729,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
47705
47729
  modelId: string()
47706
47730
  }),
47707
47731
  object({ kind: literal("cpu-device") }),
47708
- object({ kind: literal("coral-untouched") }),
47709
47732
  object({ kind: literal("device-disabled") }),
47710
47733
  object({ kind: literal("device-unavailable") }),
47711
47734
  object({ kind: literal("node-offline") }),
@@ -47803,11 +47826,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
47803
47826
  kind: literal("detector-store-unreadable"),
47804
47827
  error: string()
47805
47828
  }),
47806
- object({
47807
- kind: literal("coral-enabled"),
47808
- nodeId: string(),
47809
- deviceKey: string()
47810
- }),
47811
47829
  object({
47812
47830
  kind: literal("custom-pin-kept"),
47813
47831
  nodeId: string(),
@@ -54705,6 +54723,16 @@ object({
54705
54723
  powerState: string().nullable(),
54706
54724
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54707
54725
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54726
+ /**
54727
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
54728
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
54729
+ * when none is reported. A cleared reminder is not an unknown one.
54730
+ */
54731
+ filterCleaningDue: boolean().nullable(),
54732
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
54733
+ machineCareDue: boolean().nullable(),
54734
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
54735
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
54708
54736
  /** Option states: null when the appliance does not expose the option or has not said. */
54709
54737
  halfLoad: boolean().nullable(),
54710
54738
  hygienePlus: boolean().nullable(),
@@ -61414,16 +61442,6 @@ var UpdateUserInputSchema = object({
61414
61442
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
61415
61443
  scopes: array(TokenScopeSchema).optional()
61416
61444
  });
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
61445
  var OauthSessionSummarySchema = object({
61428
61446
  id: string(),
61429
61447
  userId: string(),
@@ -61445,8 +61463,7 @@ var TotpStatusSchema = object({
61445
61463
  confirmedAt: number().nullable()
61446
61464
  });
61447
61465
  /**
61448
- * user-management — singleton capability for user accounts and the
61449
- * legacy API-key rows.
61466
+ * user-management — singleton capability for user accounts.
61450
61467
  *
61451
61468
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
61452
61469
  * — the subset check on `setUserScopes` is moot
@@ -61502,10 +61519,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
61502
61519
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
61503
61520
  kind: "mutation",
61504
61521
  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
61522
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
61510
61523
  kind: "mutation",
61511
61524
  auth: "admin",
@@ -69843,6 +69856,12 @@ Object.freeze({
69843
69856
  addonId: null,
69844
69857
  access: "view"
69845
69858
  },
69859
+ "records.transact": {
69860
+ capName: "records",
69861
+ capScope: "system",
69862
+ addonId: null,
69863
+ access: "create"
69864
+ },
69846
69865
  "sceneMonitor.captureReference": {
69847
69866
  capName: "scene-monitor",
69848
69867
  capScope: "device",
@@ -71175,12 +71194,6 @@ Object.freeze({
71175
71194
  addonId: null,
71176
71195
  access: "view"
71177
71196
  },
71178
- "userManagement.listApiKeys": {
71179
- capName: "user-management",
71180
- capScope: "system",
71181
- addonId: null,
71182
- access: "view"
71183
- },
71184
71197
  "userManagement.listExternalIdentities": {
71185
71198
  capName: "user-management",
71186
71199
  capScope: "system",
@@ -71235,12 +71248,6 @@ Object.freeze({
71235
71248
  addonId: null,
71236
71249
  access: "create"
71237
71250
  },
71238
- "userManagement.revokeApiKey": {
71239
- capName: "user-management",
71240
- capScope: "system",
71241
- addonId: null,
71242
- access: "delete"
71243
- },
71244
71251
  "userManagement.revokeOauthSession": {
71245
71252
  capName: "user-management",
71246
71253
  capScope: "system",
@@ -74671,9 +74678,13 @@ new Map(Object.entries({
74671
74678
  "stream-online": "device-events",
74672
74679
  "stream-offline": "device-events",
74673
74680
  "detection-blind": "device-events",
74681
+ "motion-noisy": "device-events",
74682
+ "motion-calm": "device-events",
74674
74683
  "recording-stalled": "device-events",
74675
74684
  "recording-healthy": "device-events",
74676
74685
  "recording-degraded": "device-events",
74686
+ "device-attention-required": "device-events",
74687
+ "device-attention-resolved": "device-events",
74677
74688
  "node-online": "system",
74678
74689
  "node-offline": "system",
74679
74690
  "node-restarting": "system",
@@ -74756,6 +74767,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74756
74767
  label: "Detecting nothing",
74757
74768
  kinds: ["detection-blind"]
74758
74769
  },
74770
+ {
74771
+ id: "motion-noise",
74772
+ family: "device-events",
74773
+ label: "Motion without a subject",
74774
+ kinds: ["motion-noisy", "motion-calm"]
74775
+ },
74759
74776
  {
74760
74777
  id: "recording",
74761
74778
  family: "device-events",
@@ -74766,6 +74783,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74766
74783
  "recording-degraded"
74767
74784
  ]
74768
74785
  },
74786
+ {
74787
+ id: "device-attention",
74788
+ family: "device-events",
74789
+ label: "Needs attention",
74790
+ kinds: ["device-attention-required", "device-attention-resolved"]
74791
+ },
74769
74792
  {
74770
74793
  id: "nodes",
74771
74794
  family: "system",
@@ -74905,6 +74928,7 @@ var ALERT_EPISODE = [
74905
74928
  "alert-error",
74906
74929
  "alert-critical-resolved"
74907
74930
  ];
74931
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
74908
74932
  var UPDATES = [
74909
74933
  "addon-update-available",
74910
74934
  "server-update-available",
@@ -74934,9 +74958,12 @@ var DEVICE_EVENTS = [
74934
74958
  "stream-online",
74935
74959
  "stream-offline",
74936
74960
  "detection-blind",
74961
+ "motion-noisy",
74962
+ "motion-calm",
74937
74963
  "recording-stalled",
74938
74964
  "recording-healthy",
74939
74965
  "recording-degraded",
74966
+ ...DEVICE_ATTENTION,
74940
74967
  ...ALARM
74941
74968
  ];
74942
74969
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -75104,7 +75131,9 @@ var STATE_SUMMARY_VARS = [
75104
75131
  [...RULE_TEXT],
75105
75132
  [...RULE_TEXT],
75106
75133
  [...RULE_TEXT],
75107
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75134
+ [...RULE_TEXT],
75135
+ [...RULE_TEXT],
75136
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75108
75137
  [...RULE_TEXT],
75109
75138
  [...RULE_TEXT],
75110
75139
  [...RULE_TEXT],
@@ -75126,11 +75155,11 @@ var STATE_SUMMARY_VARS = [
75126
75155
  [...RULE_TEXT],
75127
75156
  [...RULE_TEXT],
75128
75157
  [...RULE_TEXT],
75158
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75129
75159
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75160
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75130
75161
  ([...RULE_TEXT], [...ALERT_EPISODE]),
75131
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75132
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75133
- ([...RULE_TEXT], [...ALERT_EPISODE]),
75162
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
75134
75163
  [...RULE_TEXT],
75135
75164
  [...RULE_TEXT],
75136
75165
  [...RULE_TEXT],
@@ -75206,6 +75235,15 @@ new Map([
75206
75235
  snapshotLabel: "Tanks low or full now",
75207
75236
  snapshotSection: "tanks"
75208
75237
  },
75238
+ {
75239
+ id: "motion-noise",
75240
+ family: "device-events",
75241
+ label: "Motion without a subject (constant / calm again)",
75242
+ bad: ["motion-noisy"],
75243
+ recovery: ["motion-calm"],
75244
+ snapshotLabel: "Cameras with constant motion now",
75245
+ snapshotSection: null
75246
+ },
75209
75247
  {
75210
75248
  id: "recording-health",
75211
75249
  family: "device-events",
@@ -75215,6 +75253,15 @@ new Map([
75215
75253
  snapshotLabel: "Recordings stalled now",
75216
75254
  snapshotSection: null
75217
75255
  },
75256
+ {
75257
+ id: "device-attention",
75258
+ family: "device-events",
75259
+ label: "Device needs attention (raised / resolved)",
75260
+ bad: ["device-attention-required"],
75261
+ recovery: ["device-attention-resolved"],
75262
+ snapshotLabel: "Devices needing attention now",
75263
+ snapshotSection: null
75264
+ },
75218
75265
  {
75219
75266
  id: "node-connectivity",
75220
75267
  family: "system",
@@ -85249,8 +85296,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85249
85296
  id: "discovery",
85250
85297
  title: "ONVIF Discovery",
85251
85298
  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
85299
  columns: 2,
85255
85300
  fields: [{
85256
85301
  type: "number",
@@ -85266,8 +85311,6 @@ var OnvifProviderAddon = class extends BaseDeviceProvider {
85266
85311
  id: "credentials",
85267
85312
  title: "Default Credentials",
85268
85313
  titleKey: "provider-onvif:globalSettings.s_credentials.title",
85269
- description: "Default credentials for discovered cameras",
85270
- descriptionKey: "provider-onvif:globalSettings.s_credentials.description",
85271
85314
  columns: 2,
85272
85315
  fields: [{
85273
85316
  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.145",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",