@camstack/addon-provider-wyze 0.2.153 → 0.2.154

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
@@ -31,7 +31,7 @@ let net = require("net");
31
31
  net = __toESM(net, 1);
32
32
  let node_child_process = require("node:child_process");
33
33
  let node_tls = require("node:tls");
34
- //#region ../types/dist/event-category-7pZEBmVg.mjs
34
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
35
35
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
36
36
  EventCategory["SystemBoot"] = "system.boot";
37
37
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -348,6 +348,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
348
348
  */
349
349
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
350
350
  /**
351
+ * A camera's motion source has fired constantly with no subject for an hour
352
+ * (motion duty or session count over the bar, zero detections) — it is not
353
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
354
+ * {@link PipelineMotionCalm}.
355
+ */
356
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
357
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
358
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
359
+ /**
351
360
  * Per-camera pipeline config was mutated by the orchestrator
352
361
  * (3-level settings change via `setAgentAddonDefaults` /
353
362
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5454,7 +5463,7 @@ var ZodIssueCode = {
5454
5463
  var ZodFirstPartyTypeKind;
5455
5464
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5456
5465
  //#endregion
5457
- //#region ../types/dist/sleep-CueztlR1.mjs
5466
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5458
5467
  /**
5459
5468
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5460
5469
  * window to float samples (D455).
@@ -7983,7 +7992,7 @@ var EntryDescriptorSchema = object({
7983
7992
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7984
7993
  fields: record(string(), unknown())
7985
7994
  }).strict();
7986
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7995
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7987
7996
  var RecordKindDeclarationSchema = object({
7988
7997
  database: _enum(RECORD_DATABASES).default("settings"),
7989
7998
  class: _enum(RECORD_CLASSES),
@@ -8002,14 +8011,6 @@ var RecordKindDeclarationSchema = object({
8002
8011
  secretPaths: array(string().min(1)).default([]),
8003
8012
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8004
8013
  secretArrayKeys: record(string(), string()).default({}),
8005
- /**
8006
- * RETIRED (D900): the legacy table a kind adopted from during the records
8007
- * migration. Nothing declares it any more and nothing reads it; the schema
8008
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8009
- * (an orphaned kind is never redeclared) and an addon built before the
8010
- * removal still sends it. Never set it.
8011
- */
8012
- adoptsFrom: string().min(1).optional(),
8013
8014
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8014
8015
  transactFamily: string().min(1).optional(),
8015
8016
  entry: EntryDescriptorSchema.optional()
@@ -12721,17 +12722,6 @@ object({
12721
12722
  createdAt: number(),
12722
12723
  updatedAt: number()
12723
12724
  });
12724
- object({
12725
- id: string(),
12726
- label: string(),
12727
- isAdmin: boolean().default(false),
12728
- allowedProviders: AllowedProviderSchema,
12729
- allowedDevices: AllowedDevicesSchema,
12730
- tokenHash: string(),
12731
- tokenPrefix: string(),
12732
- createdAt: number(),
12733
- lastUsedAt: number().optional()
12734
- });
12735
12725
  object({
12736
12726
  id: string(),
12737
12727
  userId: string(),
@@ -16713,16 +16703,36 @@ var RecordKindStateSchema = _enum([
16713
16703
  var DeclareKindResultSchema = object({
16714
16704
  kindId: number().int(),
16715
16705
  state: RecordKindStateSchema,
16716
- createdIndexes: array(string()),
16717
- /**
16718
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16719
- * it stays on the wire, null, because an addon built before the removal reads
16720
- * an ABSENT field as "adoption pending" and refuses to start.
16721
- */
16722
- adoptionPending: _null()
16706
+ createdIndexes: array(string())
16723
16707
  });
16724
16708
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16725
16709
  var SecretRefsList = array(string());
16710
+ /**
16711
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16712
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16713
+ */
16714
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16715
+ object({
16716
+ op: literal("put"),
16717
+ kind: RecordKindNameSchema,
16718
+ record: RecordInputSchema,
16719
+ ifRev: number().int().min(0).optional()
16720
+ }),
16721
+ object({
16722
+ op: literal("patch"),
16723
+ kind: RecordKindNameSchema,
16724
+ id: RecordIdSchema,
16725
+ data: RecordBodySchema,
16726
+ at: number().int().nullable().optional(),
16727
+ expiresAt: number().int().nullable().optional(),
16728
+ ifRev: number().int().min(1).optional()
16729
+ }),
16730
+ object({
16731
+ op: literal("delete"),
16732
+ kind: RecordKindNameSchema,
16733
+ id: RecordIdSchema
16734
+ })
16735
+ ]);
16726
16736
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16727
16737
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16728
16738
  kind: "mutation",
@@ -16829,6 +16839,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16829
16839
  }), {
16830
16840
  kind: "mutation",
16831
16841
  auth: "admin"
16842
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16843
+ results: array(object({
16844
+ rev: number().int().nullable(),
16845
+ deleted: boolean()
16846
+ })),
16847
+ releasedRefs: SecretRefsList,
16848
+ secretRefs: SecretRefsList
16849
+ }), {
16850
+ kind: "mutation",
16851
+ auth: "admin"
16832
16852
  }), method(object({
16833
16853
  deviceId: number().int(),
16834
16854
  kinds: array(RecordKindNameSchema).optional()
@@ -42440,9 +42460,13 @@ var NcSystemEventKindSchema = _enum([
42440
42460
  "node-updating",
42441
42461
  "node-inference-unavailable",
42442
42462
  "detection-blind",
42463
+ "motion-noisy",
42464
+ "motion-calm",
42443
42465
  "recording-stalled",
42444
42466
  "recording-healthy",
42445
42467
  "recording-degraded",
42468
+ "device-attention-required",
42469
+ "device-attention-resolved",
42446
42470
  "storage-location-low",
42447
42471
  "storage-location-critical",
42448
42472
  "storage-location-ok",
@@ -55878,6 +55902,16 @@ var DishwasherStatusSchema = object({
55878
55902
  powerState: string().nullable(),
55879
55903
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55880
55904
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55905
+ /**
55906
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55907
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55908
+ * when none is reported. A cleared reminder is not an unknown one.
55909
+ */
55910
+ filterCleaningDue: boolean().nullable(),
55911
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55912
+ machineCareDue: boolean().nullable(),
55913
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55914
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55881
55915
  /** Option states: null when the appliance does not expose the option or has not said. */
55882
55916
  halfLoad: boolean().nullable(),
55883
55917
  hygienePlus: boolean().nullable(),
@@ -64528,16 +64562,6 @@ var UpdateUserInputSchema = object({
64528
64562
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64529
64563
  scopes: array(TokenScopeSchema).optional()
64530
64564
  });
64531
- var ApiKeySummarySchema = object({
64532
- id: string(),
64533
- label: string(),
64534
- isAdmin: boolean().default(false),
64535
- allowedProviders: union([array(string()), literal("*")]).optional(),
64536
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64537
- tokenPrefix: string(),
64538
- createdAt: number(),
64539
- lastUsedAt: number().optional()
64540
- });
64541
64565
  var OauthSessionSummarySchema = object({
64542
64566
  id: string(),
64543
64567
  userId: string(),
@@ -64559,8 +64583,7 @@ var TotpStatusSchema = object({
64559
64583
  confirmedAt: number().nullable()
64560
64584
  });
64561
64585
  /**
64562
- * user-management — singleton capability for user accounts and the
64563
- * legacy API-key rows.
64586
+ * user-management — singleton capability for user accounts.
64564
64587
  *
64565
64588
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64566
64589
  * — the subset check on `setUserScopes` is moot
@@ -64616,10 +64639,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64616
64639
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64617
64640
  kind: "mutation",
64618
64641
  access: "view"
64619
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64620
- kind: "mutation",
64621
- auth: "admin",
64622
- access: "delete"
64623
64642
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64624
64643
  kind: "mutation",
64625
64644
  auth: "admin",
@@ -74075,6 +74094,12 @@ Object.freeze({
74075
74094
  addonId: null,
74076
74095
  access: "view"
74077
74096
  },
74097
+ "records.transact": {
74098
+ capName: "records",
74099
+ capScope: "system",
74100
+ addonId: null,
74101
+ access: "create"
74102
+ },
74078
74103
  "sceneMonitor.captureReference": {
74079
74104
  capName: "scene-monitor",
74080
74105
  capScope: "device",
@@ -75407,12 +75432,6 @@ Object.freeze({
75407
75432
  addonId: null,
75408
75433
  access: "view"
75409
75434
  },
75410
- "userManagement.listApiKeys": {
75411
- capName: "user-management",
75412
- capScope: "system",
75413
- addonId: null,
75414
- access: "view"
75415
- },
75416
75435
  "userManagement.listExternalIdentities": {
75417
75436
  capName: "user-management",
75418
75437
  capScope: "system",
@@ -75467,12 +75486,6 @@ Object.freeze({
75467
75486
  addonId: null,
75468
75487
  access: "create"
75469
75488
  },
75470
- "userManagement.revokeApiKey": {
75471
- capName: "user-management",
75472
- capScope: "system",
75473
- addonId: null,
75474
- access: "delete"
75475
- },
75476
75489
  "userManagement.revokeOauthSession": {
75477
75490
  capName: "user-management",
75478
75491
  capScope: "system",
@@ -78837,9 +78850,13 @@ new Map(Object.entries({
78837
78850
  "stream-online": "device-events",
78838
78851
  "stream-offline": "device-events",
78839
78852
  "detection-blind": "device-events",
78853
+ "motion-noisy": "device-events",
78854
+ "motion-calm": "device-events",
78840
78855
  "recording-stalled": "device-events",
78841
78856
  "recording-healthy": "device-events",
78842
78857
  "recording-degraded": "device-events",
78858
+ "device-attention-required": "device-events",
78859
+ "device-attention-resolved": "device-events",
78843
78860
  "node-online": "system",
78844
78861
  "node-offline": "system",
78845
78862
  "node-restarting": "system",
@@ -78922,6 +78939,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78922
78939
  label: "Detecting nothing",
78923
78940
  kinds: ["detection-blind"]
78924
78941
  },
78942
+ {
78943
+ id: "motion-noise",
78944
+ family: "device-events",
78945
+ label: "Motion without a subject",
78946
+ kinds: ["motion-noisy", "motion-calm"]
78947
+ },
78925
78948
  {
78926
78949
  id: "recording",
78927
78950
  family: "device-events",
@@ -78932,6 +78955,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78932
78955
  "recording-degraded"
78933
78956
  ]
78934
78957
  },
78958
+ {
78959
+ id: "device-attention",
78960
+ family: "device-events",
78961
+ label: "Needs attention",
78962
+ kinds: ["device-attention-required", "device-attention-resolved"]
78963
+ },
78935
78964
  {
78936
78965
  id: "nodes",
78937
78966
  family: "system",
@@ -79071,6 +79100,7 @@ var ALERT_EPISODE = [
79071
79100
  "alert-error",
79072
79101
  "alert-critical-resolved"
79073
79102
  ];
79103
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
79074
79104
  var UPDATES = [
79075
79105
  "addon-update-available",
79076
79106
  "server-update-available",
@@ -79100,9 +79130,12 @@ var DEVICE_EVENTS = [
79100
79130
  "stream-online",
79101
79131
  "stream-offline",
79102
79132
  "detection-blind",
79133
+ "motion-noisy",
79134
+ "motion-calm",
79103
79135
  "recording-stalled",
79104
79136
  "recording-healthy",
79105
79137
  "recording-degraded",
79138
+ ...DEVICE_ATTENTION,
79106
79139
  ...ALARM
79107
79140
  ];
79108
79141
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79270,7 +79303,9 @@ var STATE_SUMMARY_VARS = [
79270
79303
  [...RULE_TEXT],
79271
79304
  [...RULE_TEXT],
79272
79305
  [...RULE_TEXT],
79273
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79306
+ [...RULE_TEXT],
79307
+ [...RULE_TEXT],
79308
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79274
79309
  [...RULE_TEXT],
79275
79310
  [...RULE_TEXT],
79276
79311
  [...RULE_TEXT],
@@ -79292,11 +79327,11 @@ var STATE_SUMMARY_VARS = [
79292
79327
  [...RULE_TEXT],
79293
79328
  [...RULE_TEXT],
79294
79329
  [...RULE_TEXT],
79330
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79295
79331
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79332
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79296
79333
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79297
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79298
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79299
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79334
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79300
79335
  [...RULE_TEXT],
79301
79336
  [...RULE_TEXT],
79302
79337
  [...RULE_TEXT],
@@ -79372,6 +79407,15 @@ new Map([
79372
79407
  snapshotLabel: "Tanks low or full now",
79373
79408
  snapshotSection: "tanks"
79374
79409
  },
79410
+ {
79411
+ id: "motion-noise",
79412
+ family: "device-events",
79413
+ label: "Motion without a subject (constant / calm again)",
79414
+ bad: ["motion-noisy"],
79415
+ recovery: ["motion-calm"],
79416
+ snapshotLabel: "Cameras with constant motion now",
79417
+ snapshotSection: null
79418
+ },
79375
79419
  {
79376
79420
  id: "recording-health",
79377
79421
  family: "device-events",
@@ -79381,6 +79425,15 @@ new Map([
79381
79425
  snapshotLabel: "Recordings stalled now",
79382
79426
  snapshotSection: null
79383
79427
  },
79428
+ {
79429
+ id: "device-attention",
79430
+ family: "device-events",
79431
+ label: "Device needs attention (raised / resolved)",
79432
+ bad: ["device-attention-required"],
79433
+ recovery: ["device-attention-resolved"],
79434
+ snapshotLabel: "Devices needing attention now",
79435
+ snapshotSection: null
79436
+ },
79384
79437
  {
79385
79438
  id: "node-connectivity",
79386
79439
  family: "system",
@@ -83377,7 +83430,7 @@ function buildCreationFormSchema() {
83377
83430
  id: "p2p",
83378
83431
  title: "P2P parameters",
83379
83432
  titleKey: "provider-wyze:creation.s_p2p.title",
83380
- description: "From the Wyze cloud device list (UID / ENR / MAC / local IP / model). Use discovery to auto-populate these — this manual form is the fallback.",
83433
+ description: "Values from the Wyze cloud device list; discovery fills them in automatically.",
83381
83434
  descriptionKey: "provider-wyze:creation.s_p2p.description",
83382
83435
  columns: 2,
83383
83436
  fields: [
@@ -83509,7 +83562,7 @@ function buildSettingsSchema() {
83509
83562
  id: "credentials",
83510
83563
  title: "Wyze account",
83511
83564
  titleKey: "provider-wyze:settings.s_credentials.title",
83512
- description: "Wyze cloud credentials. A developer API Key + Key ID are required (developer-api-console.wyze.com) in addition to your account login. MFA accounts are not supported — use a sub-account or disable MFA.",
83565
+ description: "Needs a developer API Key + Key ID (developer-api-console.wyze.com) besides your login. MFA accounts are not supported.",
83513
83566
  descriptionKey: "provider-wyze:settings.s_credentials.description",
83514
83567
  columns: 2,
83515
83568
  fields: [
package/dist/addon.mjs CHANGED
@@ -10,7 +10,7 @@ import { getCACertificates, setDefaultCACertificates } from "node:tls";
10
10
  //#region \0rolldown/runtime.js
11
11
  var __require$1 = /* @__PURE__ */ createRequire(import.meta.url);
12
12
  //#endregion
13
- //#region ../types/dist/event-category-7pZEBmVg.mjs
13
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
14
14
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
15
15
  EventCategory["SystemBoot"] = "system.boot";
16
16
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -327,6 +327,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
327
327
  */
328
328
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
329
329
  /**
330
+ * A camera's motion source has fired constantly with no subject for an hour
331
+ * (motion duty or session count over the bar, zero detections) — it is not
332
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
333
+ * {@link PipelineMotionCalm}.
334
+ */
335
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
336
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
337
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
338
+ /**
330
339
  * Per-camera pipeline config was mutated by the orchestrator
331
340
  * (3-level settings change via `setAgentAddonDefaults` /
332
341
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5433,7 +5442,7 @@ var ZodIssueCode = {
5433
5442
  var ZodFirstPartyTypeKind;
5434
5443
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5435
5444
  //#endregion
5436
- //#region ../types/dist/sleep-CueztlR1.mjs
5445
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5437
5446
  /**
5438
5447
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5439
5448
  * window to float samples (D455).
@@ -7962,7 +7971,7 @@ var EntryDescriptorSchema = object({
7962
7971
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7963
7972
  fields: record(string(), unknown())
7964
7973
  }).strict();
7965
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7974
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7966
7975
  var RecordKindDeclarationSchema = object({
7967
7976
  database: _enum(RECORD_DATABASES).default("settings"),
7968
7977
  class: _enum(RECORD_CLASSES),
@@ -7981,14 +7990,6 @@ var RecordKindDeclarationSchema = object({
7981
7990
  secretPaths: array(string().min(1)).default([]),
7982
7991
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7983
7992
  secretArrayKeys: record(string(), string()).default({}),
7984
- /**
7985
- * RETIRED (D900): the legacy table a kind adopted from during the records
7986
- * migration. Nothing declares it any more and nothing reads it; the schema
7987
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7988
- * (an orphaned kind is never redeclared) and an addon built before the
7989
- * removal still sends it. Never set it.
7990
- */
7991
- adoptsFrom: string().min(1).optional(),
7992
7993
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7993
7994
  transactFamily: string().min(1).optional(),
7994
7995
  entry: EntryDescriptorSchema.optional()
@@ -12700,17 +12701,6 @@ object({
12700
12701
  createdAt: number(),
12701
12702
  updatedAt: number()
12702
12703
  });
12703
- object({
12704
- id: string(),
12705
- label: string(),
12706
- isAdmin: boolean().default(false),
12707
- allowedProviders: AllowedProviderSchema,
12708
- allowedDevices: AllowedDevicesSchema,
12709
- tokenHash: string(),
12710
- tokenPrefix: string(),
12711
- createdAt: number(),
12712
- lastUsedAt: number().optional()
12713
- });
12714
12704
  object({
12715
12705
  id: string(),
12716
12706
  userId: string(),
@@ -16692,16 +16682,36 @@ var RecordKindStateSchema = _enum([
16692
16682
  var DeclareKindResultSchema = object({
16693
16683
  kindId: number().int(),
16694
16684
  state: RecordKindStateSchema,
16695
- createdIndexes: array(string()),
16696
- /**
16697
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16698
- * it stays on the wire, null, because an addon built before the removal reads
16699
- * an ABSENT field as "adoption pending" and refuses to start.
16700
- */
16701
- adoptionPending: _null()
16685
+ createdIndexes: array(string())
16702
16686
  });
16703
16687
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16704
16688
  var SecretRefsList = array(string());
16689
+ /**
16690
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16691
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16692
+ */
16693
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16694
+ object({
16695
+ op: literal("put"),
16696
+ kind: RecordKindNameSchema,
16697
+ record: RecordInputSchema,
16698
+ ifRev: number().int().min(0).optional()
16699
+ }),
16700
+ object({
16701
+ op: literal("patch"),
16702
+ kind: RecordKindNameSchema,
16703
+ id: RecordIdSchema,
16704
+ data: RecordBodySchema,
16705
+ at: number().int().nullable().optional(),
16706
+ expiresAt: number().int().nullable().optional(),
16707
+ ifRev: number().int().min(1).optional()
16708
+ }),
16709
+ object({
16710
+ op: literal("delete"),
16711
+ kind: RecordKindNameSchema,
16712
+ id: RecordIdSchema
16713
+ })
16714
+ ]);
16705
16715
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16706
16716
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16707
16717
  kind: "mutation",
@@ -16808,6 +16818,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16808
16818
  }), {
16809
16819
  kind: "mutation",
16810
16820
  auth: "admin"
16821
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16822
+ results: array(object({
16823
+ rev: number().int().nullable(),
16824
+ deleted: boolean()
16825
+ })),
16826
+ releasedRefs: SecretRefsList,
16827
+ secretRefs: SecretRefsList
16828
+ }), {
16829
+ kind: "mutation",
16830
+ auth: "admin"
16811
16831
  }), method(object({
16812
16832
  deviceId: number().int(),
16813
16833
  kinds: array(RecordKindNameSchema).optional()
@@ -42419,9 +42439,13 @@ var NcSystemEventKindSchema = _enum([
42419
42439
  "node-updating",
42420
42440
  "node-inference-unavailable",
42421
42441
  "detection-blind",
42442
+ "motion-noisy",
42443
+ "motion-calm",
42422
42444
  "recording-stalled",
42423
42445
  "recording-healthy",
42424
42446
  "recording-degraded",
42447
+ "device-attention-required",
42448
+ "device-attention-resolved",
42425
42449
  "storage-location-low",
42426
42450
  "storage-location-critical",
42427
42451
  "storage-location-ok",
@@ -55857,6 +55881,16 @@ var DishwasherStatusSchema = object({
55857
55881
  powerState: string().nullable(),
55858
55882
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55859
55883
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55884
+ /**
55885
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55886
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55887
+ * when none is reported. A cleared reminder is not an unknown one.
55888
+ */
55889
+ filterCleaningDue: boolean().nullable(),
55890
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55891
+ machineCareDue: boolean().nullable(),
55892
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55893
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55860
55894
  /** Option states: null when the appliance does not expose the option or has not said. */
55861
55895
  halfLoad: boolean().nullable(),
55862
55896
  hygienePlus: boolean().nullable(),
@@ -64507,16 +64541,6 @@ var UpdateUserInputSchema = object({
64507
64541
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64508
64542
  scopes: array(TokenScopeSchema).optional()
64509
64543
  });
64510
- var ApiKeySummarySchema = object({
64511
- id: string(),
64512
- label: string(),
64513
- isAdmin: boolean().default(false),
64514
- allowedProviders: union([array(string()), literal("*")]).optional(),
64515
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64516
- tokenPrefix: string(),
64517
- createdAt: number(),
64518
- lastUsedAt: number().optional()
64519
- });
64520
64544
  var OauthSessionSummarySchema = object({
64521
64545
  id: string(),
64522
64546
  userId: string(),
@@ -64538,8 +64562,7 @@ var TotpStatusSchema = object({
64538
64562
  confirmedAt: number().nullable()
64539
64563
  });
64540
64564
  /**
64541
- * user-management — singleton capability for user accounts and the
64542
- * legacy API-key rows.
64565
+ * user-management — singleton capability for user accounts.
64543
64566
  *
64544
64567
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64545
64568
  * — the subset check on `setUserScopes` is moot
@@ -64595,10 +64618,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64595
64618
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64596
64619
  kind: "mutation",
64597
64620
  access: "view"
64598
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64599
- kind: "mutation",
64600
- auth: "admin",
64601
- access: "delete"
64602
64621
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64603
64622
  kind: "mutation",
64604
64623
  auth: "admin",
@@ -74054,6 +74073,12 @@ Object.freeze({
74054
74073
  addonId: null,
74055
74074
  access: "view"
74056
74075
  },
74076
+ "records.transact": {
74077
+ capName: "records",
74078
+ capScope: "system",
74079
+ addonId: null,
74080
+ access: "create"
74081
+ },
74057
74082
  "sceneMonitor.captureReference": {
74058
74083
  capName: "scene-monitor",
74059
74084
  capScope: "device",
@@ -75386,12 +75411,6 @@ Object.freeze({
75386
75411
  addonId: null,
75387
75412
  access: "view"
75388
75413
  },
75389
- "userManagement.listApiKeys": {
75390
- capName: "user-management",
75391
- capScope: "system",
75392
- addonId: null,
75393
- access: "view"
75394
- },
75395
75414
  "userManagement.listExternalIdentities": {
75396
75415
  capName: "user-management",
75397
75416
  capScope: "system",
@@ -75446,12 +75465,6 @@ Object.freeze({
75446
75465
  addonId: null,
75447
75466
  access: "create"
75448
75467
  },
75449
- "userManagement.revokeApiKey": {
75450
- capName: "user-management",
75451
- capScope: "system",
75452
- addonId: null,
75453
- access: "delete"
75454
- },
75455
75468
  "userManagement.revokeOauthSession": {
75456
75469
  capName: "user-management",
75457
75470
  capScope: "system",
@@ -78816,9 +78829,13 @@ new Map(Object.entries({
78816
78829
  "stream-online": "device-events",
78817
78830
  "stream-offline": "device-events",
78818
78831
  "detection-blind": "device-events",
78832
+ "motion-noisy": "device-events",
78833
+ "motion-calm": "device-events",
78819
78834
  "recording-stalled": "device-events",
78820
78835
  "recording-healthy": "device-events",
78821
78836
  "recording-degraded": "device-events",
78837
+ "device-attention-required": "device-events",
78838
+ "device-attention-resolved": "device-events",
78822
78839
  "node-online": "system",
78823
78840
  "node-offline": "system",
78824
78841
  "node-restarting": "system",
@@ -78901,6 +78918,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78901
78918
  label: "Detecting nothing",
78902
78919
  kinds: ["detection-blind"]
78903
78920
  },
78921
+ {
78922
+ id: "motion-noise",
78923
+ family: "device-events",
78924
+ label: "Motion without a subject",
78925
+ kinds: ["motion-noisy", "motion-calm"]
78926
+ },
78904
78927
  {
78905
78928
  id: "recording",
78906
78929
  family: "device-events",
@@ -78911,6 +78934,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78911
78934
  "recording-degraded"
78912
78935
  ]
78913
78936
  },
78937
+ {
78938
+ id: "device-attention",
78939
+ family: "device-events",
78940
+ label: "Needs attention",
78941
+ kinds: ["device-attention-required", "device-attention-resolved"]
78942
+ },
78914
78943
  {
78915
78944
  id: "nodes",
78916
78945
  family: "system",
@@ -79050,6 +79079,7 @@ var ALERT_EPISODE = [
79050
79079
  "alert-error",
79051
79080
  "alert-critical-resolved"
79052
79081
  ];
79082
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
79053
79083
  var UPDATES = [
79054
79084
  "addon-update-available",
79055
79085
  "server-update-available",
@@ -79079,9 +79109,12 @@ var DEVICE_EVENTS = [
79079
79109
  "stream-online",
79080
79110
  "stream-offline",
79081
79111
  "detection-blind",
79112
+ "motion-noisy",
79113
+ "motion-calm",
79082
79114
  "recording-stalled",
79083
79115
  "recording-healthy",
79084
79116
  "recording-degraded",
79117
+ ...DEVICE_ATTENTION,
79085
79118
  ...ALARM
79086
79119
  ];
79087
79120
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79249,7 +79282,9 @@ var STATE_SUMMARY_VARS = [
79249
79282
  [...RULE_TEXT],
79250
79283
  [...RULE_TEXT],
79251
79284
  [...RULE_TEXT],
79252
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79285
+ [...RULE_TEXT],
79286
+ [...RULE_TEXT],
79287
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79253
79288
  [...RULE_TEXT],
79254
79289
  [...RULE_TEXT],
79255
79290
  [...RULE_TEXT],
@@ -79271,11 +79306,11 @@ var STATE_SUMMARY_VARS = [
79271
79306
  [...RULE_TEXT],
79272
79307
  [...RULE_TEXT],
79273
79308
  [...RULE_TEXT],
79309
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79274
79310
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79311
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79275
79312
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79276
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79277
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79278
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79313
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79279
79314
  [...RULE_TEXT],
79280
79315
  [...RULE_TEXT],
79281
79316
  [...RULE_TEXT],
@@ -79351,6 +79386,15 @@ new Map([
79351
79386
  snapshotLabel: "Tanks low or full now",
79352
79387
  snapshotSection: "tanks"
79353
79388
  },
79389
+ {
79390
+ id: "motion-noise",
79391
+ family: "device-events",
79392
+ label: "Motion without a subject (constant / calm again)",
79393
+ bad: ["motion-noisy"],
79394
+ recovery: ["motion-calm"],
79395
+ snapshotLabel: "Cameras with constant motion now",
79396
+ snapshotSection: null
79397
+ },
79354
79398
  {
79355
79399
  id: "recording-health",
79356
79400
  family: "device-events",
@@ -79360,6 +79404,15 @@ new Map([
79360
79404
  snapshotLabel: "Recordings stalled now",
79361
79405
  snapshotSection: null
79362
79406
  },
79407
+ {
79408
+ id: "device-attention",
79409
+ family: "device-events",
79410
+ label: "Device needs attention (raised / resolved)",
79411
+ bad: ["device-attention-required"],
79412
+ recovery: ["device-attention-resolved"],
79413
+ snapshotLabel: "Devices needing attention now",
79414
+ snapshotSection: null
79415
+ },
79363
79416
  {
79364
79417
  id: "node-connectivity",
79365
79418
  family: "system",
@@ -83356,7 +83409,7 @@ function buildCreationFormSchema() {
83356
83409
  id: "p2p",
83357
83410
  title: "P2P parameters",
83358
83411
  titleKey: "provider-wyze:creation.s_p2p.title",
83359
- description: "From the Wyze cloud device list (UID / ENR / MAC / local IP / model). Use discovery to auto-populate these — this manual form is the fallback.",
83412
+ description: "Values from the Wyze cloud device list; discovery fills them in automatically.",
83360
83413
  descriptionKey: "provider-wyze:creation.s_p2p.description",
83361
83414
  columns: 2,
83362
83415
  fields: [
@@ -83488,7 +83541,7 @@ function buildSettingsSchema() {
83488
83541
  id: "credentials",
83489
83542
  title: "Wyze account",
83490
83543
  titleKey: "provider-wyze:settings.s_credentials.title",
83491
- description: "Wyze cloud credentials. A developer API Key + Key ID are required (developer-api-console.wyze.com) in addition to your account login. MFA accounts are not supported — use a sub-account or disable MFA.",
83544
+ description: "Needs a developer API Key + Key ID (developer-api-console.wyze.com) besides your login. MFA accounts are not supported.",
83492
83545
  descriptionKey: "provider-wyze:settings.s_credentials.description",
83493
83546
  columns: 2,
83494
83547
  fields: [
package/i18n/en.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "creation.s_identity.title": "Camera",
3
3
  "creation.s_identity.name.label": "Name",
4
4
  "creation.s_p2p.title": "P2P parameters",
5
- "creation.s_p2p.description": "From the Wyze cloud device list (UID / ENR / MAC / local IP / model). Use discovery to auto-populate these — this manual form is the fallback.",
5
+ "creation.s_p2p.description": "Values from the Wyze cloud device list; discovery fills them in automatically.",
6
6
  "creation.s_p2p.mac.label": "MAC",
7
7
  "creation.s_p2p.p2pId.label": "P2P UID",
8
8
  "creation.s_p2p.enr.label": "ENR (encryption key)",
@@ -22,7 +22,7 @@
22
22
  "creation.s_stream.motionSource.o_cloud.label": "Cloud events",
23
23
  "creation.s_stream.motionSource.o_boa.label": "On-camera (boa)",
24
24
  "settings.s_credentials.title": "Wyze account",
25
- "settings.s_credentials.description": "Wyze cloud credentials. A developer API Key + Key ID are required (developer-api-console.wyze.com) in addition to your account login. MFA accounts are not supported — use a sub-account or disable MFA.",
25
+ "settings.s_credentials.description": "Needs a developer API Key + Key ID (developer-api-console.wyze.com) besides your login. MFA accounts are not supported.",
26
26
  "settings.s_credentials.email.label": "Email",
27
27
  "settings.s_credentials.password.label": "Password",
28
28
  "settings.s_credentials.apiKey.label": "API Key",
package/i18n/it.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "creation.s_identity.title": "Telecamera",
3
3
  "creation.s_identity.name.label": "Nome",
4
4
  "creation.s_p2p.title": "Parametri P2P",
5
- "creation.s_p2p.description": "Dall'elenco dispositivi del cloud Wyze (UID / ENR / MAC / IP locale / modello). Usa il discovery per compilarli automaticamente: questo modulo manuale è il ripiego.",
5
+ "creation.s_p2p.description": "Valori dall'elenco dispositivi del cloud Wyze; la discovery li compila automaticamente.",
6
6
  "creation.s_p2p.mac.label": "MAC",
7
7
  "creation.s_p2p.p2pId.label": "UID P2P",
8
8
  "creation.s_p2p.enr.label": "ENR (chiave di cifratura)",
@@ -22,7 +22,7 @@
22
22
  "creation.s_stream.motionSource.o_cloud.label": "Eventi cloud",
23
23
  "creation.s_stream.motionSource.o_boa.label": "Di bordo (boa)",
24
24
  "settings.s_credentials.title": "Account Wyze",
25
- "settings.s_credentials.description": "Credenziali del cloud Wyze. Oltre al login dell'account servono una API Key e un Key ID da developer (developer-api-console.wyze.com). Gli account con MFA non sono supportati: usa un sotto-account o disattiva l'MFA.",
25
+ "settings.s_credentials.description": "Servono una API Key e un Key ID sviluppatore (developer-api-console.wyze.com) oltre al login. Gli account con MFA non sono supportati.",
26
26
  "settings.s_credentials.email.label": "Email",
27
27
  "settings.s_credentials.password.label": "Password",
28
28
  "settings.s_credentials.apiKey.label": "API Key",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-wyze",
3
- "version": "0.2.153",
3
+ "version": "0.2.154",
4
4
  "description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
5
5
  "keywords": [
6
6
  "camstack",