@camstack/addon-provider-wyze 0.2.153 → 0.2.155

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",
@@ -48003,7 +48027,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
48003
48027
  modelId: string()
48004
48028
  }),
48005
48029
  object({ kind: literal("cpu-device") }),
48006
- object({ kind: literal("coral-untouched") }),
48007
48030
  object({ kind: literal("device-disabled") }),
48008
48031
  object({ kind: literal("device-unavailable") }),
48009
48032
  object({ kind: literal("node-offline") }),
@@ -48101,11 +48124,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
48101
48124
  kind: literal("detector-store-unreadable"),
48102
48125
  error: string()
48103
48126
  }),
48104
- object({
48105
- kind: literal("coral-enabled"),
48106
- nodeId: string(),
48107
- deviceKey: string()
48108
- }),
48109
48127
  object({
48110
48128
  kind: literal("custom-pin-kept"),
48111
48129
  nodeId: string(),
@@ -55878,6 +55896,16 @@ var DishwasherStatusSchema = object({
55878
55896
  powerState: string().nullable(),
55879
55897
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55880
55898
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55899
+ /**
55900
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55901
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55902
+ * when none is reported. A cleared reminder is not an unknown one.
55903
+ */
55904
+ filterCleaningDue: boolean().nullable(),
55905
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55906
+ machineCareDue: boolean().nullable(),
55907
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55908
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55881
55909
  /** Option states: null when the appliance does not expose the option or has not said. */
55882
55910
  halfLoad: boolean().nullable(),
55883
55911
  hygienePlus: boolean().nullable(),
@@ -64528,16 +64556,6 @@ var UpdateUserInputSchema = object({
64528
64556
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64529
64557
  scopes: array(TokenScopeSchema).optional()
64530
64558
  });
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
64559
  var OauthSessionSummarySchema = object({
64542
64560
  id: string(),
64543
64561
  userId: string(),
@@ -64559,8 +64577,7 @@ var TotpStatusSchema = object({
64559
64577
  confirmedAt: number().nullable()
64560
64578
  });
64561
64579
  /**
64562
- * user-management — singleton capability for user accounts and the
64563
- * legacy API-key rows.
64580
+ * user-management — singleton capability for user accounts.
64564
64581
  *
64565
64582
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64566
64583
  * — the subset check on `setUserScopes` is moot
@@ -64616,10 +64633,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64616
64633
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64617
64634
  kind: "mutation",
64618
64635
  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
64636
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64624
64637
  kind: "mutation",
64625
64638
  auth: "admin",
@@ -74075,6 +74088,12 @@ Object.freeze({
74075
74088
  addonId: null,
74076
74089
  access: "view"
74077
74090
  },
74091
+ "records.transact": {
74092
+ capName: "records",
74093
+ capScope: "system",
74094
+ addonId: null,
74095
+ access: "create"
74096
+ },
74078
74097
  "sceneMonitor.captureReference": {
74079
74098
  capName: "scene-monitor",
74080
74099
  capScope: "device",
@@ -75407,12 +75426,6 @@ Object.freeze({
75407
75426
  addonId: null,
75408
75427
  access: "view"
75409
75428
  },
75410
- "userManagement.listApiKeys": {
75411
- capName: "user-management",
75412
- capScope: "system",
75413
- addonId: null,
75414
- access: "view"
75415
- },
75416
75429
  "userManagement.listExternalIdentities": {
75417
75430
  capName: "user-management",
75418
75431
  capScope: "system",
@@ -75467,12 +75480,6 @@ Object.freeze({
75467
75480
  addonId: null,
75468
75481
  access: "create"
75469
75482
  },
75470
- "userManagement.revokeApiKey": {
75471
- capName: "user-management",
75472
- capScope: "system",
75473
- addonId: null,
75474
- access: "delete"
75475
- },
75476
75483
  "userManagement.revokeOauthSession": {
75477
75484
  capName: "user-management",
75478
75485
  capScope: "system",
@@ -78837,9 +78844,13 @@ new Map(Object.entries({
78837
78844
  "stream-online": "device-events",
78838
78845
  "stream-offline": "device-events",
78839
78846
  "detection-blind": "device-events",
78847
+ "motion-noisy": "device-events",
78848
+ "motion-calm": "device-events",
78840
78849
  "recording-stalled": "device-events",
78841
78850
  "recording-healthy": "device-events",
78842
78851
  "recording-degraded": "device-events",
78852
+ "device-attention-required": "device-events",
78853
+ "device-attention-resolved": "device-events",
78843
78854
  "node-online": "system",
78844
78855
  "node-offline": "system",
78845
78856
  "node-restarting": "system",
@@ -78922,6 +78933,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78922
78933
  label: "Detecting nothing",
78923
78934
  kinds: ["detection-blind"]
78924
78935
  },
78936
+ {
78937
+ id: "motion-noise",
78938
+ family: "device-events",
78939
+ label: "Motion without a subject",
78940
+ kinds: ["motion-noisy", "motion-calm"]
78941
+ },
78925
78942
  {
78926
78943
  id: "recording",
78927
78944
  family: "device-events",
@@ -78932,6 +78949,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78932
78949
  "recording-degraded"
78933
78950
  ]
78934
78951
  },
78952
+ {
78953
+ id: "device-attention",
78954
+ family: "device-events",
78955
+ label: "Needs attention",
78956
+ kinds: ["device-attention-required", "device-attention-resolved"]
78957
+ },
78935
78958
  {
78936
78959
  id: "nodes",
78937
78960
  family: "system",
@@ -79071,6 +79094,7 @@ var ALERT_EPISODE = [
79071
79094
  "alert-error",
79072
79095
  "alert-critical-resolved"
79073
79096
  ];
79097
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
79074
79098
  var UPDATES = [
79075
79099
  "addon-update-available",
79076
79100
  "server-update-available",
@@ -79100,9 +79124,12 @@ var DEVICE_EVENTS = [
79100
79124
  "stream-online",
79101
79125
  "stream-offline",
79102
79126
  "detection-blind",
79127
+ "motion-noisy",
79128
+ "motion-calm",
79103
79129
  "recording-stalled",
79104
79130
  "recording-healthy",
79105
79131
  "recording-degraded",
79132
+ ...DEVICE_ATTENTION,
79106
79133
  ...ALARM
79107
79134
  ];
79108
79135
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79270,7 +79297,9 @@ var STATE_SUMMARY_VARS = [
79270
79297
  [...RULE_TEXT],
79271
79298
  [...RULE_TEXT],
79272
79299
  [...RULE_TEXT],
79273
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79300
+ [...RULE_TEXT],
79301
+ [...RULE_TEXT],
79302
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79274
79303
  [...RULE_TEXT],
79275
79304
  [...RULE_TEXT],
79276
79305
  [...RULE_TEXT],
@@ -79292,11 +79321,11 @@ var STATE_SUMMARY_VARS = [
79292
79321
  [...RULE_TEXT],
79293
79322
  [...RULE_TEXT],
79294
79323
  [...RULE_TEXT],
79324
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79295
79325
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79326
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79296
79327
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79297
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79298
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79299
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79328
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79300
79329
  [...RULE_TEXT],
79301
79330
  [...RULE_TEXT],
79302
79331
  [...RULE_TEXT],
@@ -79372,6 +79401,15 @@ new Map([
79372
79401
  snapshotLabel: "Tanks low or full now",
79373
79402
  snapshotSection: "tanks"
79374
79403
  },
79404
+ {
79405
+ id: "motion-noise",
79406
+ family: "device-events",
79407
+ label: "Motion without a subject (constant / calm again)",
79408
+ bad: ["motion-noisy"],
79409
+ recovery: ["motion-calm"],
79410
+ snapshotLabel: "Cameras with constant motion now",
79411
+ snapshotSection: null
79412
+ },
79375
79413
  {
79376
79414
  id: "recording-health",
79377
79415
  family: "device-events",
@@ -79381,6 +79419,15 @@ new Map([
79381
79419
  snapshotLabel: "Recordings stalled now",
79382
79420
  snapshotSection: null
79383
79421
  },
79422
+ {
79423
+ id: "device-attention",
79424
+ family: "device-events",
79425
+ label: "Device needs attention (raised / resolved)",
79426
+ bad: ["device-attention-required"],
79427
+ recovery: ["device-attention-resolved"],
79428
+ snapshotLabel: "Devices needing attention now",
79429
+ snapshotSection: null
79430
+ },
79384
79431
  {
79385
79432
  id: "node-connectivity",
79386
79433
  family: "system",
@@ -83377,7 +83424,7 @@ function buildCreationFormSchema() {
83377
83424
  id: "p2p",
83378
83425
  title: "P2P parameters",
83379
83426
  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.",
83427
+ description: "Values from the Wyze cloud device list; discovery fills them in automatically.",
83381
83428
  descriptionKey: "provider-wyze:creation.s_p2p.description",
83382
83429
  columns: 2,
83383
83430
  fields: [
@@ -83509,7 +83556,7 @@ function buildSettingsSchema() {
83509
83556
  id: "credentials",
83510
83557
  title: "Wyze account",
83511
83558
  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.",
83559
+ description: "Needs a developer API Key + Key ID (developer-api-console.wyze.com) besides your login. MFA accounts are not supported.",
83513
83560
  descriptionKey: "provider-wyze:settings.s_credentials.description",
83514
83561
  columns: 2,
83515
83562
  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",
@@ -47982,7 +48006,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
47982
48006
  modelId: string()
47983
48007
  }),
47984
48008
  object({ kind: literal("cpu-device") }),
47985
- object({ kind: literal("coral-untouched") }),
47986
48009
  object({ kind: literal("device-disabled") }),
47987
48010
  object({ kind: literal("device-unavailable") }),
47988
48011
  object({ kind: literal("node-offline") }),
@@ -48080,11 +48103,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
48080
48103
  kind: literal("detector-store-unreadable"),
48081
48104
  error: string()
48082
48105
  }),
48083
- object({
48084
- kind: literal("coral-enabled"),
48085
- nodeId: string(),
48086
- deviceKey: string()
48087
- }),
48088
48106
  object({
48089
48107
  kind: literal("custom-pin-kept"),
48090
48108
  nodeId: string(),
@@ -55857,6 +55875,16 @@ var DishwasherStatusSchema = object({
55857
55875
  powerState: string().nullable(),
55858
55876
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55859
55877
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55878
+ /**
55879
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55880
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55881
+ * when none is reported. A cleared reminder is not an unknown one.
55882
+ */
55883
+ filterCleaningDue: boolean().nullable(),
55884
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55885
+ machineCareDue: boolean().nullable(),
55886
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55887
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55860
55888
  /** Option states: null when the appliance does not expose the option or has not said. */
55861
55889
  halfLoad: boolean().nullable(),
55862
55890
  hygienePlus: boolean().nullable(),
@@ -64507,16 +64535,6 @@ var UpdateUserInputSchema = object({
64507
64535
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64508
64536
  scopes: array(TokenScopeSchema).optional()
64509
64537
  });
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
64538
  var OauthSessionSummarySchema = object({
64521
64539
  id: string(),
64522
64540
  userId: string(),
@@ -64538,8 +64556,7 @@ var TotpStatusSchema = object({
64538
64556
  confirmedAt: number().nullable()
64539
64557
  });
64540
64558
  /**
64541
- * user-management — singleton capability for user accounts and the
64542
- * legacy API-key rows.
64559
+ * user-management — singleton capability for user accounts.
64543
64560
  *
64544
64561
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64545
64562
  * — the subset check on `setUserScopes` is moot
@@ -64595,10 +64612,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64595
64612
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64596
64613
  kind: "mutation",
64597
64614
  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
64615
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64603
64616
  kind: "mutation",
64604
64617
  auth: "admin",
@@ -74054,6 +74067,12 @@ Object.freeze({
74054
74067
  addonId: null,
74055
74068
  access: "view"
74056
74069
  },
74070
+ "records.transact": {
74071
+ capName: "records",
74072
+ capScope: "system",
74073
+ addonId: null,
74074
+ access: "create"
74075
+ },
74057
74076
  "sceneMonitor.captureReference": {
74058
74077
  capName: "scene-monitor",
74059
74078
  capScope: "device",
@@ -75386,12 +75405,6 @@ Object.freeze({
75386
75405
  addonId: null,
75387
75406
  access: "view"
75388
75407
  },
75389
- "userManagement.listApiKeys": {
75390
- capName: "user-management",
75391
- capScope: "system",
75392
- addonId: null,
75393
- access: "view"
75394
- },
75395
75408
  "userManagement.listExternalIdentities": {
75396
75409
  capName: "user-management",
75397
75410
  capScope: "system",
@@ -75446,12 +75459,6 @@ Object.freeze({
75446
75459
  addonId: null,
75447
75460
  access: "create"
75448
75461
  },
75449
- "userManagement.revokeApiKey": {
75450
- capName: "user-management",
75451
- capScope: "system",
75452
- addonId: null,
75453
- access: "delete"
75454
- },
75455
75462
  "userManagement.revokeOauthSession": {
75456
75463
  capName: "user-management",
75457
75464
  capScope: "system",
@@ -78816,9 +78823,13 @@ new Map(Object.entries({
78816
78823
  "stream-online": "device-events",
78817
78824
  "stream-offline": "device-events",
78818
78825
  "detection-blind": "device-events",
78826
+ "motion-noisy": "device-events",
78827
+ "motion-calm": "device-events",
78819
78828
  "recording-stalled": "device-events",
78820
78829
  "recording-healthy": "device-events",
78821
78830
  "recording-degraded": "device-events",
78831
+ "device-attention-required": "device-events",
78832
+ "device-attention-resolved": "device-events",
78822
78833
  "node-online": "system",
78823
78834
  "node-offline": "system",
78824
78835
  "node-restarting": "system",
@@ -78901,6 +78912,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78901
78912
  label: "Detecting nothing",
78902
78913
  kinds: ["detection-blind"]
78903
78914
  },
78915
+ {
78916
+ id: "motion-noise",
78917
+ family: "device-events",
78918
+ label: "Motion without a subject",
78919
+ kinds: ["motion-noisy", "motion-calm"]
78920
+ },
78904
78921
  {
78905
78922
  id: "recording",
78906
78923
  family: "device-events",
@@ -78911,6 +78928,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78911
78928
  "recording-degraded"
78912
78929
  ]
78913
78930
  },
78931
+ {
78932
+ id: "device-attention",
78933
+ family: "device-events",
78934
+ label: "Needs attention",
78935
+ kinds: ["device-attention-required", "device-attention-resolved"]
78936
+ },
78914
78937
  {
78915
78938
  id: "nodes",
78916
78939
  family: "system",
@@ -79050,6 +79073,7 @@ var ALERT_EPISODE = [
79050
79073
  "alert-error",
79051
79074
  "alert-critical-resolved"
79052
79075
  ];
79076
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
79053
79077
  var UPDATES = [
79054
79078
  "addon-update-available",
79055
79079
  "server-update-available",
@@ -79079,9 +79103,12 @@ var DEVICE_EVENTS = [
79079
79103
  "stream-online",
79080
79104
  "stream-offline",
79081
79105
  "detection-blind",
79106
+ "motion-noisy",
79107
+ "motion-calm",
79082
79108
  "recording-stalled",
79083
79109
  "recording-healthy",
79084
79110
  "recording-degraded",
79111
+ ...DEVICE_ATTENTION,
79085
79112
  ...ALARM
79086
79113
  ];
79087
79114
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79249,7 +79276,9 @@ var STATE_SUMMARY_VARS = [
79249
79276
  [...RULE_TEXT],
79250
79277
  [...RULE_TEXT],
79251
79278
  [...RULE_TEXT],
79252
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79279
+ [...RULE_TEXT],
79280
+ [...RULE_TEXT],
79281
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79253
79282
  [...RULE_TEXT],
79254
79283
  [...RULE_TEXT],
79255
79284
  [...RULE_TEXT],
@@ -79271,11 +79300,11 @@ var STATE_SUMMARY_VARS = [
79271
79300
  [...RULE_TEXT],
79272
79301
  [...RULE_TEXT],
79273
79302
  [...RULE_TEXT],
79303
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79274
79304
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79305
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79275
79306
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79276
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79277
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79278
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79307
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79279
79308
  [...RULE_TEXT],
79280
79309
  [...RULE_TEXT],
79281
79310
  [...RULE_TEXT],
@@ -79351,6 +79380,15 @@ new Map([
79351
79380
  snapshotLabel: "Tanks low or full now",
79352
79381
  snapshotSection: "tanks"
79353
79382
  },
79383
+ {
79384
+ id: "motion-noise",
79385
+ family: "device-events",
79386
+ label: "Motion without a subject (constant / calm again)",
79387
+ bad: ["motion-noisy"],
79388
+ recovery: ["motion-calm"],
79389
+ snapshotLabel: "Cameras with constant motion now",
79390
+ snapshotSection: null
79391
+ },
79354
79392
  {
79355
79393
  id: "recording-health",
79356
79394
  family: "device-events",
@@ -79360,6 +79398,15 @@ new Map([
79360
79398
  snapshotLabel: "Recordings stalled now",
79361
79399
  snapshotSection: null
79362
79400
  },
79401
+ {
79402
+ id: "device-attention",
79403
+ family: "device-events",
79404
+ label: "Device needs attention (raised / resolved)",
79405
+ bad: ["device-attention-required"],
79406
+ recovery: ["device-attention-resolved"],
79407
+ snapshotLabel: "Devices needing attention now",
79408
+ snapshotSection: null
79409
+ },
79363
79410
  {
79364
79411
  id: "node-connectivity",
79365
79412
  family: "system",
@@ -83356,7 +83403,7 @@ function buildCreationFormSchema() {
83356
83403
  id: "p2p",
83357
83404
  title: "P2P parameters",
83358
83405
  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.",
83406
+ description: "Values from the Wyze cloud device list; discovery fills them in automatically.",
83360
83407
  descriptionKey: "provider-wyze:creation.s_p2p.description",
83361
83408
  columns: 2,
83362
83409
  fields: [
@@ -83488,7 +83535,7 @@ function buildSettingsSchema() {
83488
83535
  id: "credentials",
83489
83536
  title: "Wyze account",
83490
83537
  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.",
83538
+ description: "Needs a developer API Key + Key ID (developer-api-console.wyze.com) besides your login. MFA accounts are not supported.",
83492
83539
  descriptionKey: "provider-wyze:settings.s_credentials.description",
83493
83540
  columns: 2,
83494
83541
  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.155",
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",