@camstack/addon-model-studio 1.1.258 → 1.1.259

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.
Files changed (18) hide show
  1. package/dist/{MotionZonesSettings-CkV2aUvO.mjs → MotionZonesSettings-D85Kti2I.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-A04FmFki.mjs → PrivacyMaskSettings-Cj_Afwxb.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-BGsdcHlo.mjs → SceneMonitorEditor-B66YfelB.mjs} +3 -3
  4. package/dist/_stub.js +10 -10
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C9097na_.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-wSH7KpHb.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BGNXnwH_.mjs +26 -0
  7. package/dist/{hostInit-kJIPeeR8.mjs → hostInit-nJa6_txV.mjs} +2 -2
  8. package/dist/model-studio.addon.js +285 -2
  9. package/dist/model-studio.addon.mjs +285 -2
  10. package/dist/{player-overlays-CEo6fyPi.mjs → player-overlays-miGdycLL.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-Pow15MKn.mjs → responsive-DyoB_c2Y.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-DtoPg3LV.mjs → scene-monitor-copy-DBTY-6gg.mjs} +1 -1
  14. package/dist/{square-CaF-sfeh.mjs → square-Bgxk1vlP.mjs} +1 -1
  15. package/dist/{trash-2-DBoe6JLZ.mjs → trash-2-9ynW2pBt.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-EXT3i1_G.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CbS0rHPV.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D_ZqRreN.mjs +0 -26
@@ -5782,7 +5782,7 @@ var ZodIssueCode = {
5782
5782
  var ZodFirstPartyTypeKind;
5783
5783
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5784
5784
  //#endregion
5785
- //#region ../types/dist/sleep-BBF1iXUi.mjs
5785
+ //#region ../types/dist/sleep--g-h2_c_.mjs
5786
5786
  /**
5787
5787
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5788
5788
  * window to float samples (D455).
@@ -16528,6 +16528,208 @@ method(object({
16528
16528
  kind: "mutation",
16529
16529
  auth: "admin"
16530
16530
  }), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
16531
+ /**
16532
+ * device-history — the ONE mechanism for numeric history (D850).
16533
+ *
16534
+ * A device value is recorded because its capability says so (the `history`
16535
+ * block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
16536
+ * other series is DECLARED by the addon that produces it and fed with points
16537
+ * (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
16538
+ * 1d are computed here and nowhere else. Storage is `history.db` (D851).
16539
+ *
16540
+ * Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
16541
+ * checked against the `callerAddonId` the transport stamps into a call that
16542
+ * crossed a process (never in an input schema, so a session cannot supply it).
16543
+ * A call with no stamp is refused `not-owner`. The methods are `admin` so a
16544
+ * non-admin session never reaches them; an addon's `ctx.api` call bypasses the
16545
+ * tier by design.
16546
+ */
16547
+ /** Whose history: a real device, or a cluster node (load, memory). */
16548
+ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
16549
+ kind: literal("device"),
16550
+ deviceId: number().int()
16551
+ }), object({
16552
+ kind: literal("node"),
16553
+ nodeId: string().min(1)
16554
+ })]);
16555
+ var DeviceHistoryKindSchema = _enum([
16556
+ "gauge",
16557
+ "counter",
16558
+ "boolean"
16559
+ ]);
16560
+ var DeviceHistoryResolutionSchema = _enum([
16561
+ "raw",
16562
+ "5m",
16563
+ "1h",
16564
+ "1d"
16565
+ ]);
16566
+ /** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
16567
+ var DeviceHistoryRefusalReasonSchema = _enum([
16568
+ "undeclared",
16569
+ "not-owner",
16570
+ "opted-out",
16571
+ "not-a-real-device",
16572
+ "rate",
16573
+ "ingest-mismatch",
16574
+ "out-of-range"
16575
+ ]);
16576
+ var RefusalSchema = object({
16577
+ key: string(),
16578
+ reason: DeviceHistoryRefusalReasonSchema,
16579
+ count: number().int()
16580
+ });
16581
+ var IngestResultSchema = object({
16582
+ accepted: number().int(),
16583
+ refused: array(RefusalSchema).readonly()
16584
+ });
16585
+ var SeriesInfoSchema = object({
16586
+ key: string(),
16587
+ scope: string(),
16588
+ kind: DeviceHistoryKindSchema,
16589
+ /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
16590
+ unit: string().nullable(),
16591
+ displayName: string(),
16592
+ source: _enum(["cap", "addon"]),
16593
+ firstTs: number(),
16594
+ lastTs: number()
16595
+ });
16596
+ var QueryPointSchema = object({
16597
+ /** Raw: the point's time. Rollup: the bucket start. */
16598
+ t: number(),
16599
+ samples: number().int(),
16600
+ /** `sum / samples`. */
16601
+ mean: number().nullable(),
16602
+ /** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
16603
+ twMean: number().nullable(),
16604
+ min: number(),
16605
+ max: number(),
16606
+ /** `null` is unknown, never zero (D393). */
16607
+ last: number().nullable()
16608
+ });
16609
+ var QuerySeriesSchema = object({
16610
+ scope: string(),
16611
+ /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
16612
+ before: object({
16613
+ t: number(),
16614
+ value: number().nullable()
16615
+ }).nullable(),
16616
+ points: array(QueryPointSchema).readonly()
16617
+ });
16618
+ /** The window part of a query, shared by the device and node forms. */
16619
+ var QueryWindowShape = {
16620
+ key: string(),
16621
+ scope: string().optional(),
16622
+ from: number(),
16623
+ to: number(),
16624
+ resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
16625
+ maxPoints: number().int().positive().max(5e3).default(1e3)
16626
+ };
16627
+ var QueryResultSchema = object({
16628
+ resolution: DeviceHistoryResolutionSchema,
16629
+ series: array(QuerySeriesSchema).readonly(),
16630
+ truncated: boolean()
16631
+ });
16632
+ var TierStatusSchema = object({
16633
+ tier: DeviceHistoryResolutionSchema,
16634
+ /** `null` until the first background count answered. */
16635
+ rows: number().int().nullable(),
16636
+ /** `rows` times a fixed per-row estimate — approximate, labelled so. */
16637
+ approxBytes: number().nullable(),
16638
+ countedAt: number().nullable()
16639
+ });
16640
+ /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
16641
+ var DeviceHistoryStatusSchema = object({
16642
+ startedAt: number(),
16643
+ /** The store is declared, series loaded and the first reconcile has answered. */
16644
+ ready: boolean(),
16645
+ series: number().int(),
16646
+ metrics: number().int(),
16647
+ optedOutDevices: number().int(),
16648
+ tiers: array(TierStatusSchema).readonly(),
16649
+ capture: object({
16650
+ eventsSeen: number().int(),
16651
+ pointsEmitted: number().int(),
16652
+ pointsWritten: number().int(),
16653
+ pointsDropped: number().int(),
16654
+ bufferDepth: number().int(),
16655
+ trailingEmitted: number().int(),
16656
+ reconciledPoints: number().int(),
16657
+ reconcileRuns: number().int(),
16658
+ reconcileFailures: number().int(),
16659
+ lastReconcileAt: number().nullable(),
16660
+ lastFlushAt: number().nullable(),
16661
+ flushFailures: number().int(),
16662
+ skipped: record(string(), number().int())
16663
+ }),
16664
+ ingest: object({
16665
+ accepted: number().int(),
16666
+ refused: record(string(), number().int())
16667
+ }),
16668
+ rollup: object({
16669
+ last5mAt: number().nullable(),
16670
+ last1hAt: number().nullable(),
16671
+ last1dAt: number().nullable(),
16672
+ errors: number().int(),
16673
+ dirty5m: number().int(),
16674
+ dirty1h: number().int(),
16675
+ dirty1d: number().int()
16676
+ }),
16677
+ retention: object({
16678
+ lastRunAt: number().nullable(),
16679
+ deleted: record(string(), number().int()),
16680
+ purgedSeries: number().int()
16681
+ }),
16682
+ directory: object({
16683
+ devices: number().int(),
16684
+ lastRefreshAt: number().nullable()
16685
+ })
16686
+ });
16687
+ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
16688
+ deviceId: number().int(),
16689
+ ...QueryWindowShape
16690
+ }), QueryResultSchema), method(object({
16691
+ nodeId: string().min(1),
16692
+ ...QueryWindowShape
16693
+ }), QueryResultSchema, { auth: "admin" }), method(object({
16694
+ name: string().regex(/^[a-z0-9-]+$/),
16695
+ subjectKind: _enum(["device", "node"]),
16696
+ kind: DeviceHistoryKindSchema,
16697
+ unit: string().optional(),
16698
+ displayName: string().min(1),
16699
+ ingest: _enum(["points", "buckets"])
16700
+ }), object({ key: string() }), {
16701
+ kind: "mutation",
16702
+ auth: "admin"
16703
+ }), method(object({ points: array(object({
16704
+ key: string(),
16705
+ subject: DeviceHistorySubjectSchema,
16706
+ scope: string().default(""),
16707
+ ts: number(),
16708
+ value: number()
16709
+ })).max(5e3) }), IngestResultSchema, {
16710
+ kind: "mutation",
16711
+ auth: "admin"
16712
+ }), method(object({ buckets: array(object({
16713
+ key: string(),
16714
+ subject: DeviceHistorySubjectSchema,
16715
+ scope: string().default(""),
16716
+ bucketStart: number(),
16717
+ samples: number().int().positive(),
16718
+ sum: number(),
16719
+ min: number(),
16720
+ max: number(),
16721
+ last: number().nullable(),
16722
+ lastTs: number().nullable()
16723
+ })).max(5e3) }), IngestResultSchema, {
16724
+ kind: "mutation",
16725
+ auth: "admin"
16726
+ }), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
16727
+ deviceId: number().int(),
16728
+ enabled: boolean()
16729
+ }), object({ enabled: boolean() }), {
16730
+ kind: "mutation",
16731
+ auth: "admin"
16732
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
16531
16733
  var DeviceCaStatusSchema = discriminatedUnion("state", [
16532
16734
  object({ state: literal("absent") }),
16533
16735
  object({
@@ -55360,7 +55562,7 @@ var MotionOnMotionChangedDataSchema = object({
55360
55562
  /** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
55361
55563
  triggeredBy: MotionTriggeredBySchema.optional()
55362
55564
  });
55363
- DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
55565
+ DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
55364
55566
  object({
55365
55567
  enabled: boolean(),
55366
55568
  /** Ms epoch of the last operator-driven change. */
@@ -62815,6 +63017,66 @@ Object.freeze({
62815
63017
  addonId: null,
62816
63018
  access: "create"
62817
63019
  },
63020
+ "deviceHistory.declareSeries": {
63021
+ capName: "device-history",
63022
+ capScope: "system",
63023
+ addonId: null,
63024
+ access: "create"
63025
+ },
63026
+ "deviceHistory.getDeviceEnabled": {
63027
+ capName: "device-history",
63028
+ capScope: "system",
63029
+ addonId: null,
63030
+ access: "view"
63031
+ },
63032
+ "deviceHistory.getStatus": {
63033
+ capName: "device-history",
63034
+ capScope: "system",
63035
+ addonId: null,
63036
+ access: "view"
63037
+ },
63038
+ "deviceHistory.listNodeSeries": {
63039
+ capName: "device-history",
63040
+ capScope: "system",
63041
+ addonId: null,
63042
+ access: "view"
63043
+ },
63044
+ "deviceHistory.listSeries": {
63045
+ capName: "device-history",
63046
+ capScope: "system",
63047
+ addonId: null,
63048
+ access: "view"
63049
+ },
63050
+ "deviceHistory.query": {
63051
+ capName: "device-history",
63052
+ capScope: "system",
63053
+ addonId: null,
63054
+ access: "view"
63055
+ },
63056
+ "deviceHistory.queryNode": {
63057
+ capName: "device-history",
63058
+ capScope: "system",
63059
+ addonId: null,
63060
+ access: "view"
63061
+ },
63062
+ "deviceHistory.record": {
63063
+ capName: "device-history",
63064
+ capScope: "system",
63065
+ addonId: null,
63066
+ access: "create"
63067
+ },
63068
+ "deviceHistory.recordBuckets": {
63069
+ capName: "device-history",
63070
+ capScope: "system",
63071
+ addonId: null,
63072
+ access: "create"
63073
+ },
63074
+ "deviceHistory.setDeviceEnabled": {
63075
+ capName: "device-history",
63076
+ capScope: "system",
63077
+ addonId: null,
63078
+ access: "create"
63079
+ },
62818
63080
  "deviceManager.addLocation": {
62819
63081
  capName: "device-manager",
62820
63082
  capScope: "system",
@@ -69606,6 +69868,26 @@ Object.freeze({
69606
69868
  form: "single",
69607
69869
  optional: false
69608
69870
  }],
69871
+ "deviceHistory.getDeviceEnabled": [{
69872
+ name: "deviceId",
69873
+ form: "single",
69874
+ optional: false
69875
+ }],
69876
+ "deviceHistory.listSeries": [{
69877
+ name: "deviceId",
69878
+ form: "single",
69879
+ optional: false
69880
+ }],
69881
+ "deviceHistory.query": [{
69882
+ name: "deviceId",
69883
+ form: "single",
69884
+ optional: false
69885
+ }],
69886
+ "deviceHistory.setDeviceEnabled": [{
69887
+ name: "deviceId",
69888
+ form: "single",
69889
+ optional: false
69890
+ }],
69609
69891
  "deviceManager.adoptionRelease": [{
69610
69892
  name: "camDeviceId",
69611
69893
  form: "single",
@@ -71784,6 +72066,7 @@ Object.freeze({
71784
72066
  "network-access": "ingress",
71785
72067
  "smtp-provider": "email"
71786
72068
  });
72069
+ DeviceType.Camera;
71787
72070
  var G711_SCALE_CORRECTION_DB = {
71788
72071
  PCMU: 20 * Math.log10(4),
71789
72072
  PCMA: 20 * Math.log10(8)
@@ -5756,7 +5756,7 @@ var ZodIssueCode = {
5756
5756
  var ZodFirstPartyTypeKind;
5757
5757
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5758
5758
  //#endregion
5759
- //#region ../types/dist/sleep-BBF1iXUi.mjs
5759
+ //#region ../types/dist/sleep--g-h2_c_.mjs
5760
5760
  /**
5761
5761
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5762
5762
  * window to float samples (D455).
@@ -16502,6 +16502,208 @@ method(object({
16502
16502
  kind: "mutation",
16503
16503
  auth: "admin"
16504
16504
  }), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
16505
+ /**
16506
+ * device-history — the ONE mechanism for numeric history (D850).
16507
+ *
16508
+ * A device value is recorded because its capability says so (the `history`
16509
+ * block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
16510
+ * other series is DECLARED by the addon that produces it and fed with points
16511
+ * (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
16512
+ * 1d are computed here and nowhere else. Storage is `history.db` (D851).
16513
+ *
16514
+ * Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
16515
+ * checked against the `callerAddonId` the transport stamps into a call that
16516
+ * crossed a process (never in an input schema, so a session cannot supply it).
16517
+ * A call with no stamp is refused `not-owner`. The methods are `admin` so a
16518
+ * non-admin session never reaches them; an addon's `ctx.api` call bypasses the
16519
+ * tier by design.
16520
+ */
16521
+ /** Whose history: a real device, or a cluster node (load, memory). */
16522
+ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
16523
+ kind: literal("device"),
16524
+ deviceId: number().int()
16525
+ }), object({
16526
+ kind: literal("node"),
16527
+ nodeId: string().min(1)
16528
+ })]);
16529
+ var DeviceHistoryKindSchema = _enum([
16530
+ "gauge",
16531
+ "counter",
16532
+ "boolean"
16533
+ ]);
16534
+ var DeviceHistoryResolutionSchema = _enum([
16535
+ "raw",
16536
+ "5m",
16537
+ "1h",
16538
+ "1d"
16539
+ ]);
16540
+ /** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
16541
+ var DeviceHistoryRefusalReasonSchema = _enum([
16542
+ "undeclared",
16543
+ "not-owner",
16544
+ "opted-out",
16545
+ "not-a-real-device",
16546
+ "rate",
16547
+ "ingest-mismatch",
16548
+ "out-of-range"
16549
+ ]);
16550
+ var RefusalSchema = object({
16551
+ key: string(),
16552
+ reason: DeviceHistoryRefusalReasonSchema,
16553
+ count: number().int()
16554
+ });
16555
+ var IngestResultSchema = object({
16556
+ accepted: number().int(),
16557
+ refused: array(RefusalSchema).readonly()
16558
+ });
16559
+ var SeriesInfoSchema = object({
16560
+ key: string(),
16561
+ scope: string(),
16562
+ kind: DeviceHistoryKindSchema,
16563
+ /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
16564
+ unit: string().nullable(),
16565
+ displayName: string(),
16566
+ source: _enum(["cap", "addon"]),
16567
+ firstTs: number(),
16568
+ lastTs: number()
16569
+ });
16570
+ var QueryPointSchema = object({
16571
+ /** Raw: the point's time. Rollup: the bucket start. */
16572
+ t: number(),
16573
+ samples: number().int(),
16574
+ /** `sum / samples`. */
16575
+ mean: number().nullable(),
16576
+ /** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
16577
+ twMean: number().nullable(),
16578
+ min: number(),
16579
+ max: number(),
16580
+ /** `null` is unknown, never zero (D393). */
16581
+ last: number().nullable()
16582
+ });
16583
+ var QuerySeriesSchema = object({
16584
+ scope: string(),
16585
+ /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
16586
+ before: object({
16587
+ t: number(),
16588
+ value: number().nullable()
16589
+ }).nullable(),
16590
+ points: array(QueryPointSchema).readonly()
16591
+ });
16592
+ /** The window part of a query, shared by the device and node forms. */
16593
+ var QueryWindowShape = {
16594
+ key: string(),
16595
+ scope: string().optional(),
16596
+ from: number(),
16597
+ to: number(),
16598
+ resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
16599
+ maxPoints: number().int().positive().max(5e3).default(1e3)
16600
+ };
16601
+ var QueryResultSchema = object({
16602
+ resolution: DeviceHistoryResolutionSchema,
16603
+ series: array(QuerySeriesSchema).readonly(),
16604
+ truncated: boolean()
16605
+ });
16606
+ var TierStatusSchema = object({
16607
+ tier: DeviceHistoryResolutionSchema,
16608
+ /** `null` until the first background count answered. */
16609
+ rows: number().int().nullable(),
16610
+ /** `rows` times a fixed per-row estimate — approximate, labelled so. */
16611
+ approxBytes: number().nullable(),
16612
+ countedAt: number().nullable()
16613
+ });
16614
+ /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
16615
+ var DeviceHistoryStatusSchema = object({
16616
+ startedAt: number(),
16617
+ /** The store is declared, series loaded and the first reconcile has answered. */
16618
+ ready: boolean(),
16619
+ series: number().int(),
16620
+ metrics: number().int(),
16621
+ optedOutDevices: number().int(),
16622
+ tiers: array(TierStatusSchema).readonly(),
16623
+ capture: object({
16624
+ eventsSeen: number().int(),
16625
+ pointsEmitted: number().int(),
16626
+ pointsWritten: number().int(),
16627
+ pointsDropped: number().int(),
16628
+ bufferDepth: number().int(),
16629
+ trailingEmitted: number().int(),
16630
+ reconciledPoints: number().int(),
16631
+ reconcileRuns: number().int(),
16632
+ reconcileFailures: number().int(),
16633
+ lastReconcileAt: number().nullable(),
16634
+ lastFlushAt: number().nullable(),
16635
+ flushFailures: number().int(),
16636
+ skipped: record(string(), number().int())
16637
+ }),
16638
+ ingest: object({
16639
+ accepted: number().int(),
16640
+ refused: record(string(), number().int())
16641
+ }),
16642
+ rollup: object({
16643
+ last5mAt: number().nullable(),
16644
+ last1hAt: number().nullable(),
16645
+ last1dAt: number().nullable(),
16646
+ errors: number().int(),
16647
+ dirty5m: number().int(),
16648
+ dirty1h: number().int(),
16649
+ dirty1d: number().int()
16650
+ }),
16651
+ retention: object({
16652
+ lastRunAt: number().nullable(),
16653
+ deleted: record(string(), number().int()),
16654
+ purgedSeries: number().int()
16655
+ }),
16656
+ directory: object({
16657
+ devices: number().int(),
16658
+ lastRefreshAt: number().nullable()
16659
+ })
16660
+ });
16661
+ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
16662
+ deviceId: number().int(),
16663
+ ...QueryWindowShape
16664
+ }), QueryResultSchema), method(object({
16665
+ nodeId: string().min(1),
16666
+ ...QueryWindowShape
16667
+ }), QueryResultSchema, { auth: "admin" }), method(object({
16668
+ name: string().regex(/^[a-z0-9-]+$/),
16669
+ subjectKind: _enum(["device", "node"]),
16670
+ kind: DeviceHistoryKindSchema,
16671
+ unit: string().optional(),
16672
+ displayName: string().min(1),
16673
+ ingest: _enum(["points", "buckets"])
16674
+ }), object({ key: string() }), {
16675
+ kind: "mutation",
16676
+ auth: "admin"
16677
+ }), method(object({ points: array(object({
16678
+ key: string(),
16679
+ subject: DeviceHistorySubjectSchema,
16680
+ scope: string().default(""),
16681
+ ts: number(),
16682
+ value: number()
16683
+ })).max(5e3) }), IngestResultSchema, {
16684
+ kind: "mutation",
16685
+ auth: "admin"
16686
+ }), method(object({ buckets: array(object({
16687
+ key: string(),
16688
+ subject: DeviceHistorySubjectSchema,
16689
+ scope: string().default(""),
16690
+ bucketStart: number(),
16691
+ samples: number().int().positive(),
16692
+ sum: number(),
16693
+ min: number(),
16694
+ max: number(),
16695
+ last: number().nullable(),
16696
+ lastTs: number().nullable()
16697
+ })).max(5e3) }), IngestResultSchema, {
16698
+ kind: "mutation",
16699
+ auth: "admin"
16700
+ }), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
16701
+ deviceId: number().int(),
16702
+ enabled: boolean()
16703
+ }), object({ enabled: boolean() }), {
16704
+ kind: "mutation",
16705
+ auth: "admin"
16706
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
16505
16707
  var DeviceCaStatusSchema = discriminatedUnion("state", [
16506
16708
  object({ state: literal("absent") }),
16507
16709
  object({
@@ -55334,7 +55536,7 @@ var MotionOnMotionChangedDataSchema = object({
55334
55536
  /** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
55335
55537
  triggeredBy: MotionTriggeredBySchema.optional()
55336
55538
  });
55337
- DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
55539
+ DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
55338
55540
  object({
55339
55541
  enabled: boolean(),
55340
55542
  /** Ms epoch of the last operator-driven change. */
@@ -62789,6 +62991,66 @@ Object.freeze({
62789
62991
  addonId: null,
62790
62992
  access: "create"
62791
62993
  },
62994
+ "deviceHistory.declareSeries": {
62995
+ capName: "device-history",
62996
+ capScope: "system",
62997
+ addonId: null,
62998
+ access: "create"
62999
+ },
63000
+ "deviceHistory.getDeviceEnabled": {
63001
+ capName: "device-history",
63002
+ capScope: "system",
63003
+ addonId: null,
63004
+ access: "view"
63005
+ },
63006
+ "deviceHistory.getStatus": {
63007
+ capName: "device-history",
63008
+ capScope: "system",
63009
+ addonId: null,
63010
+ access: "view"
63011
+ },
63012
+ "deviceHistory.listNodeSeries": {
63013
+ capName: "device-history",
63014
+ capScope: "system",
63015
+ addonId: null,
63016
+ access: "view"
63017
+ },
63018
+ "deviceHistory.listSeries": {
63019
+ capName: "device-history",
63020
+ capScope: "system",
63021
+ addonId: null,
63022
+ access: "view"
63023
+ },
63024
+ "deviceHistory.query": {
63025
+ capName: "device-history",
63026
+ capScope: "system",
63027
+ addonId: null,
63028
+ access: "view"
63029
+ },
63030
+ "deviceHistory.queryNode": {
63031
+ capName: "device-history",
63032
+ capScope: "system",
63033
+ addonId: null,
63034
+ access: "view"
63035
+ },
63036
+ "deviceHistory.record": {
63037
+ capName: "device-history",
63038
+ capScope: "system",
63039
+ addonId: null,
63040
+ access: "create"
63041
+ },
63042
+ "deviceHistory.recordBuckets": {
63043
+ capName: "device-history",
63044
+ capScope: "system",
63045
+ addonId: null,
63046
+ access: "create"
63047
+ },
63048
+ "deviceHistory.setDeviceEnabled": {
63049
+ capName: "device-history",
63050
+ capScope: "system",
63051
+ addonId: null,
63052
+ access: "create"
63053
+ },
62792
63054
  "deviceManager.addLocation": {
62793
63055
  capName: "device-manager",
62794
63056
  capScope: "system",
@@ -69580,6 +69842,26 @@ Object.freeze({
69580
69842
  form: "single",
69581
69843
  optional: false
69582
69844
  }],
69845
+ "deviceHistory.getDeviceEnabled": [{
69846
+ name: "deviceId",
69847
+ form: "single",
69848
+ optional: false
69849
+ }],
69850
+ "deviceHistory.listSeries": [{
69851
+ name: "deviceId",
69852
+ form: "single",
69853
+ optional: false
69854
+ }],
69855
+ "deviceHistory.query": [{
69856
+ name: "deviceId",
69857
+ form: "single",
69858
+ optional: false
69859
+ }],
69860
+ "deviceHistory.setDeviceEnabled": [{
69861
+ name: "deviceId",
69862
+ form: "single",
69863
+ optional: false
69864
+ }],
69583
69865
  "deviceManager.adoptionRelease": [{
69584
69866
  name: "camDeviceId",
69585
69867
  form: "single",
@@ -71758,6 +72040,7 @@ Object.freeze({
71758
72040
  "network-access": "ingress",
71759
72041
  "smtp-provider": "email"
71760
72042
  });
72043
+ DeviceType.Camera;
71761
72044
  var G711_SCALE_CORRECTION_DB = {
71762
72045
  PCMU: 20 * Math.log10(4),
71763
72046
  PCMA: 20 * Math.log10(8)
@@ -1,5 +1,5 @@
1
1
  import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
- import { b as i, y as a } from "./responsive-Pow15MKn.mjs";
2
+ import { b as i, y as a } from "./responsive-DyoB_c2Y.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-EXT3i1_G.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CbS0rHPV.mjs";
2
2
  export { t as get, e as init };
@@ -1,5 +1,5 @@
1
1
  import { _ as e, b as t, c as n, g as r, l as i, m as a, n as o, r as s, t as c, u as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
- import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D_ZqRreN.mjs";
2
+ import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BGNXnwH_.mjs";
3
3
  import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  t();
@@ -1,5 +1,5 @@
1
1
  import { b as e, c as t, g as n, m as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
- import { b as i } from "./responsive-Pow15MKn.mjs";
2
+ import { b as i } from "./responsive-DyoB_c2Y.mjs";
3
3
  var a = i("camera", [["path", {
4
4
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
5
5
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { b as e } from "./responsive-Pow15MKn.mjs";
1
+ import { b as e } from "./responsive-DyoB_c2Y.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { b as e } from "./responsive-Pow15MKn.mjs";
1
+ import { b as e } from "./responsive-DyoB_c2Y.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",