@camstack/addon-training 0.1.43 → 0.1.45

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 (20) hide show
  1. package/dist/{MotionZonesSettings-YpCetvNg.mjs → MotionZonesSettings-XzsKyqsB.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-DJ34xZMc.mjs → PrivacyMaskSettings-BIVtbhpL.mjs} +2 -2
  3. package/dist/{SceneMonitorEditor-ChyCoZy6.mjs → SceneMonitorEditor-BdXyBsiC.mjs} +1 -1
  4. package/dist/_stub.js +3958 -3958
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-B5F2D49H.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-C96pI_Rk.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D6zlMXZo.mjs +26 -0
  7. package/dist/{dist-ZBXOtBdC.js → dist-BkEnS7-I.js} +363 -11
  8. package/dist/{dist-C7yODd9D.mjs → dist-CcO4XtoH.mjs} +363 -11
  9. package/dist/{hostInit-Ci39xaf6.mjs → hostInit-CbFhe3-_.mjs} +2 -2
  10. package/dist/index.js +1 -1
  11. package/dist/orchestrator/training.addon.js +1 -1
  12. package/dist/orchestrator/training.addon.mjs +1 -1
  13. package/dist/{player-overlays-CLkmW1-R.mjs → player-overlays-CbBz3FEH.mjs} +1 -1
  14. package/dist/providers/modal/training-modal.addon.js +1 -1
  15. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  16. package/dist/remoteEntry.js +1 -1
  17. package/dist/{responsive-DaJFlnYN.mjs → responsive-5vpaGGPe.mjs} +1 -1
  18. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-Cp9TxI8g.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-CN6k5r8V.mjs} +1 -1
  19. package/package.json +1 -1
  20. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BH6lTdjB.mjs +0 -26
@@ -5420,7 +5420,7 @@ var ZodIssueCode = {
5420
5420
  var ZodFirstPartyTypeKind;
5421
5421
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5422
5422
  //#endregion
5423
- //#region ../types/dist/sleep-BBF1iXUi.mjs
5423
+ //#region ../types/dist/sleep-DAX0-2v9.mjs
5424
5424
  /**
5425
5425
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5426
5426
  * window to float samples (D455).
@@ -12203,6 +12203,12 @@ var ConvertResultSchema = object({
12203
12203
  files: array(string()).readonly()
12204
12204
  })).readonly()
12205
12205
  });
12206
+ _enum(["new-session", "step-up"]);
12207
+ /** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
12208
+ var AppLoginPathSchema = discriminatedUnion("kind", [object({ kind: literal("native") }), object({
12209
+ kind: literal("browser"),
12210
+ startPath: string().startsWith("/")
12211
+ })]);
12206
12212
  /**
12207
12213
  * Device certificates (D855) — the wire contract shared by the hub, the admin
12208
12214
  * UI and the native viewer.
@@ -12362,7 +12368,9 @@ object({
12362
12368
  signature: literal(DEVICE_CERT_SIGNATURE),
12363
12369
  messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
12364
12370
  /** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
12365
- clients: array(_enum(["native", "web"]))
12371
+ clients: array(_enum(["native", "web"])),
12372
+ /** The app executes it itself, silently (D858). */
12373
+ app: AppLoginPathSchema.nullable()
12366
12374
  });
12367
12375
  var ExpressionBindingSourceSchema = union([
12368
12376
  object({
@@ -15936,6 +15944,208 @@ method(object({
15936
15944
  kind: "mutation",
15937
15945
  auth: "admin"
15938
15946
  }), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
15947
+ /**
15948
+ * device-history — the ONE mechanism for numeric history (D850).
15949
+ *
15950
+ * A device value is recorded because its capability says so (the `history`
15951
+ * block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
15952
+ * other series is DECLARED by the addon that produces it and fed with points
15953
+ * (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
15954
+ * 1d are computed here and nowhere else. Storage is `history.db` (D851).
15955
+ *
15956
+ * Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
15957
+ * checked against the `callerAddonId` the transport stamps into a call that
15958
+ * crossed a process (never in an input schema, so a session cannot supply it).
15959
+ * A call with no stamp is refused `not-owner`. The methods are `admin` so a
15960
+ * non-admin session never reaches them; an addon's `ctx.api` call bypasses the
15961
+ * tier by design.
15962
+ */
15963
+ /** Whose history: a real device, or a cluster node (load, memory). */
15964
+ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
15965
+ kind: literal("device"),
15966
+ deviceId: number().int()
15967
+ }), object({
15968
+ kind: literal("node"),
15969
+ nodeId: string().min(1)
15970
+ })]);
15971
+ var DeviceHistoryKindSchema = _enum([
15972
+ "gauge",
15973
+ "counter",
15974
+ "boolean"
15975
+ ]);
15976
+ var DeviceHistoryResolutionSchema = _enum([
15977
+ "raw",
15978
+ "5m",
15979
+ "1h",
15980
+ "1d"
15981
+ ]);
15982
+ /** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
15983
+ var DeviceHistoryRefusalReasonSchema = _enum([
15984
+ "undeclared",
15985
+ "not-owner",
15986
+ "opted-out",
15987
+ "not-a-real-device",
15988
+ "rate",
15989
+ "ingest-mismatch",
15990
+ "out-of-range"
15991
+ ]);
15992
+ var RefusalSchema = object({
15993
+ key: string(),
15994
+ reason: DeviceHistoryRefusalReasonSchema,
15995
+ count: number().int()
15996
+ });
15997
+ var IngestResultSchema = object({
15998
+ accepted: number().int(),
15999
+ refused: array(RefusalSchema).readonly()
16000
+ });
16001
+ var SeriesInfoSchema = object({
16002
+ key: string(),
16003
+ scope: string(),
16004
+ kind: DeviceHistoryKindSchema,
16005
+ /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
16006
+ unit: string().nullable(),
16007
+ displayName: string(),
16008
+ source: _enum(["cap", "addon"]),
16009
+ firstTs: number(),
16010
+ lastTs: number()
16011
+ });
16012
+ var QueryPointSchema = object({
16013
+ /** Raw: the point's time. Rollup: the bucket start. */
16014
+ t: number(),
16015
+ samples: number().int(),
16016
+ /** `sum / samples`. */
16017
+ mean: number().nullable(),
16018
+ /** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
16019
+ twMean: number().nullable(),
16020
+ min: number(),
16021
+ max: number(),
16022
+ /** `null` is unknown, never zero (D393). */
16023
+ last: number().nullable()
16024
+ });
16025
+ var QuerySeriesSchema = object({
16026
+ scope: string(),
16027
+ /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
16028
+ before: object({
16029
+ t: number(),
16030
+ value: number().nullable()
16031
+ }).nullable(),
16032
+ points: array(QueryPointSchema).readonly()
16033
+ });
16034
+ /** The window part of a query, shared by the device and node forms. */
16035
+ var QueryWindowShape = {
16036
+ key: string(),
16037
+ scope: string().optional(),
16038
+ from: number(),
16039
+ to: number(),
16040
+ resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
16041
+ maxPoints: number().int().positive().max(5e3).default(1e3)
16042
+ };
16043
+ var QueryResultSchema = object({
16044
+ resolution: DeviceHistoryResolutionSchema,
16045
+ series: array(QuerySeriesSchema).readonly(),
16046
+ truncated: boolean()
16047
+ });
16048
+ var TierStatusSchema = object({
16049
+ tier: DeviceHistoryResolutionSchema,
16050
+ /** `null` until the first background count answered. */
16051
+ rows: number().int().nullable(),
16052
+ /** `rows` times a fixed per-row estimate — approximate, labelled so. */
16053
+ approxBytes: number().nullable(),
16054
+ countedAt: number().nullable()
16055
+ });
16056
+ /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
16057
+ var DeviceHistoryStatusSchema = object({
16058
+ startedAt: number(),
16059
+ /** The store is declared, series loaded and the first reconcile has answered. */
16060
+ ready: boolean(),
16061
+ series: number().int(),
16062
+ metrics: number().int(),
16063
+ optedOutDevices: number().int(),
16064
+ tiers: array(TierStatusSchema).readonly(),
16065
+ capture: object({
16066
+ eventsSeen: number().int(),
16067
+ pointsEmitted: number().int(),
16068
+ pointsWritten: number().int(),
16069
+ pointsDropped: number().int(),
16070
+ bufferDepth: number().int(),
16071
+ trailingEmitted: number().int(),
16072
+ reconciledPoints: number().int(),
16073
+ reconcileRuns: number().int(),
16074
+ reconcileFailures: number().int(),
16075
+ lastReconcileAt: number().nullable(),
16076
+ lastFlushAt: number().nullable(),
16077
+ flushFailures: number().int(),
16078
+ skipped: record(string(), number().int())
16079
+ }),
16080
+ ingest: object({
16081
+ accepted: number().int(),
16082
+ refused: record(string(), number().int())
16083
+ }),
16084
+ rollup: object({
16085
+ last5mAt: number().nullable(),
16086
+ last1hAt: number().nullable(),
16087
+ last1dAt: number().nullable(),
16088
+ errors: number().int(),
16089
+ dirty5m: number().int(),
16090
+ dirty1h: number().int(),
16091
+ dirty1d: number().int()
16092
+ }),
16093
+ retention: object({
16094
+ lastRunAt: number().nullable(),
16095
+ deleted: record(string(), number().int()),
16096
+ purgedSeries: number().int()
16097
+ }),
16098
+ directory: object({
16099
+ devices: number().int(),
16100
+ lastRefreshAt: number().nullable()
16101
+ })
16102
+ });
16103
+ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
16104
+ deviceId: number().int(),
16105
+ ...QueryWindowShape
16106
+ }), QueryResultSchema), method(object({
16107
+ nodeId: string().min(1),
16108
+ ...QueryWindowShape
16109
+ }), QueryResultSchema, { auth: "admin" }), method(object({
16110
+ name: string().regex(/^[a-z0-9-]+$/),
16111
+ subjectKind: _enum(["device", "node"]),
16112
+ kind: DeviceHistoryKindSchema,
16113
+ unit: string().optional(),
16114
+ displayName: string().min(1),
16115
+ ingest: _enum(["points", "buckets"])
16116
+ }), object({ key: string() }), {
16117
+ kind: "mutation",
16118
+ auth: "admin"
16119
+ }), method(object({ points: array(object({
16120
+ key: string(),
16121
+ subject: DeviceHistorySubjectSchema,
16122
+ scope: string().default(""),
16123
+ ts: number(),
16124
+ value: number()
16125
+ })).max(5e3) }), IngestResultSchema, {
16126
+ kind: "mutation",
16127
+ auth: "admin"
16128
+ }), method(object({ buckets: array(object({
16129
+ key: string(),
16130
+ subject: DeviceHistorySubjectSchema,
16131
+ scope: string().default(""),
16132
+ bucketStart: number(),
16133
+ samples: number().int().positive(),
16134
+ sum: number(),
16135
+ min: number(),
16136
+ max: number(),
16137
+ last: number().nullable(),
16138
+ lastTs: number().nullable()
16139
+ })).max(5e3) }), IngestResultSchema, {
16140
+ kind: "mutation",
16141
+ auth: "admin"
16142
+ }), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
16143
+ deviceId: number().int(),
16144
+ enabled: boolean()
16145
+ }), object({ enabled: boolean() }), {
16146
+ kind: "mutation",
16147
+ auth: "admin"
16148
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
15939
16149
  var DeviceCaStatusSchema = discriminatedUnion("state", [
15940
16150
  object({ state: literal("absent") }),
15941
16151
  object({
@@ -16053,6 +16263,9 @@ method(object({}), object({
16053
16263
  }), {
16054
16264
  kind: "mutation",
16055
16265
  auth: "admin"
16266
+ }), method(object({}), object({ ok: literal(true) }), {
16267
+ kind: "mutation",
16268
+ auth: "admin"
16056
16269
  }), method(object({
16057
16270
  certPem: string().min(1),
16058
16271
  caCertPem: string().min(1),
@@ -38800,7 +39013,13 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
38800
39013
  * `beginExternalLink` offer exactly the redirect methods that set this,
38801
39014
  * whatever their id. Absent / false — a login button only.
38802
39015
  */
38803
- linkable: boolean().optional()
39016
+ linkable: boolean().optional(),
39017
+ /**
39018
+ * How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
39019
+ * when the route understands the app flow query (`app=1&code_challenge=…`),
39020
+ * `null`/absent when there is no app path - the app hides the method.
39021
+ */
39022
+ app: AppLoginPathSchema.nullable().optional()
38804
39023
  }),
38805
39024
  object({
38806
39025
  kind: literal("widget"),
@@ -38812,7 +39031,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
38812
39031
  bundle: string(),
38813
39032
  /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
38814
39033
  remote: WidgetRemoteSchema,
38815
- stage: LoginStageEnum
39034
+ stage: LoginStageEnum,
39035
+ /** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
39036
+ app: AppLoginPathSchema.nullable().optional()
38816
39037
  }),
38817
39038
  object({
38818
39039
  kind: literal("passkey"),
@@ -38824,7 +39045,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
38824
39045
  /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
38825
39046
  rpId: string(),
38826
39047
  /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
38827
- origin: string().nullable()
39048
+ origin: string().nullable(),
39049
+ /** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
39050
+ app: AppLoginPathSchema.nullable().optional()
38828
39051
  })
38829
39052
  ]);
38830
39053
  method(_void(), array(LoginMethodContributionSchema).readonly());
@@ -39334,7 +39557,21 @@ var NetworkEndpointSchema = object({
39334
39557
  url: string(),
39335
39558
  hostname: string(),
39336
39559
  port: number(),
39337
- protocol: _enum(["http", "https"])
39560
+ protocol: _enum(["http", "https"]),
39561
+ /**
39562
+ * Whether this address survives a restart of its provider. `false` = it is
39563
+ * re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
39564
+ * hub never selects such an address AUTOMATICALLY for a role (D860), though
39565
+ * it stays visible and an operator may still flag it. Absent = stable: every
39566
+ * provider except a Quick tunnel owns a name that does not change.
39567
+ */
39568
+ stable: boolean().optional()
39569
+ });
39570
+ object({
39571
+ url: string(),
39572
+ /** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
39573
+ stable: boolean().optional(),
39574
+ updated: boolean().optional()
39338
39575
  });
39339
39576
  var NetworkAccessStatusSchema = object({
39340
39577
  connected: boolean(),
@@ -49357,7 +49594,20 @@ var SsoBridgeClaimsSchema = object({
49357
49594
  * request to present the matching cookie — a login bridge is useless in
49358
49595
  * any other browser.
49359
49596
  */
49360
- browserBinding: string().optional()
49597
+ browserBinding: string().optional(),
49598
+ /**
49599
+ * The native app that started this sign-in (D858): its PKCE challenge,
49600
+ * `state`, purpose and allow-listed return URL, copied from the server-side
49601
+ * pending OIDC state. A bridge carrying it is finished ONLY at
49602
+ * `/api/auth/sso/finish-app` (which mints a handoff code, never a web
49603
+ * session); `/api/auth/sso/finish` refuses it.
49604
+ */
49605
+ app: object({
49606
+ codeChallenge: string(),
49607
+ state: string(),
49608
+ purpose: _enum(["new-session", "step-up"]),
49609
+ redirect: string()
49610
+ }).optional()
49361
49611
  });
49362
49612
  method(object({
49363
49613
  claims: SsoBridgeClaimsSchema,
@@ -51563,7 +51813,12 @@ var SearchResultSchema = object({
51563
51813
  publishedAt: string(),
51564
51814
  author: string(),
51565
51815
  installed: boolean(),
51566
- installedVersion: string().optional()
51816
+ installedVersion: string().optional(),
51817
+ /**
51818
+ * Capability names the package's addons declare (from its published
51819
+ * manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
51820
+ */
51821
+ capabilities: array(string()).readonly().nullable()
51567
51822
  });
51568
51823
  var AutoUpdateSettingsSchema = object({
51569
51824
  channel: ChannelSchema,
@@ -51725,7 +51980,11 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
51725
51980
  }), method(object({ packageName: string().optional() }), PackageInstallationsSchema, { auth: "admin" }), method(_void(), ReloadPackagesResultSchema, {
51726
51981
  kind: "mutation",
51727
51982
  auth: "admin"
51728
- }), method(object({ query: string().optional() }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
51983
+ }), method(object({
51984
+ query: string().optional(),
51985
+ /** Only packages whose addons declare this capability (unknown ones excluded). */
51986
+ capability: string().optional()
51987
+ }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
51729
51988
  name: string().min(1),
51730
51989
  version: string().optional(),
51731
51990
  nodeId: string().optional()
@@ -54133,7 +54392,13 @@ var ConnectionEndpointSchema = object({
54133
54392
  * calls so the client can sort even if the cap returns a new
54134
54393
  * ordering between polls.
54135
54394
  */
54136
- priority: number()
54395
+ priority: number(),
54396
+ /**
54397
+ * `false` = the address changes on its own (a Quick tunnel, re-issued on
54398
+ * every respawn). Automatic role resolution skips it (D860); an explicit
54399
+ * operator flag still honours it. Absent = stable.
54400
+ */
54401
+ stable: boolean().optional()
54137
54402
  });
54138
54403
  /**
54139
54404
  * Where the advertised local port came from. Ordered most → least
@@ -54762,7 +55027,7 @@ var MotionOnMotionChangedDataSchema = object({
54762
55027
  /** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
54763
55028
  triggeredBy: MotionTriggeredBySchema.optional()
54764
55029
  });
54765
- DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
55030
+ DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
54766
55031
  object({
54767
55032
  enabled: boolean(),
54768
55033
  /** Ms epoch of the last operator-driven change. */
@@ -62219,6 +62484,66 @@ Object.freeze({
62219
62484
  addonId: null,
62220
62485
  access: "create"
62221
62486
  },
62487
+ "deviceHistory.declareSeries": {
62488
+ capName: "device-history",
62489
+ capScope: "system",
62490
+ addonId: null,
62491
+ access: "create"
62492
+ },
62493
+ "deviceHistory.getDeviceEnabled": {
62494
+ capName: "device-history",
62495
+ capScope: "system",
62496
+ addonId: null,
62497
+ access: "view"
62498
+ },
62499
+ "deviceHistory.getStatus": {
62500
+ capName: "device-history",
62501
+ capScope: "system",
62502
+ addonId: null,
62503
+ access: "view"
62504
+ },
62505
+ "deviceHistory.listNodeSeries": {
62506
+ capName: "device-history",
62507
+ capScope: "system",
62508
+ addonId: null,
62509
+ access: "view"
62510
+ },
62511
+ "deviceHistory.listSeries": {
62512
+ capName: "device-history",
62513
+ capScope: "system",
62514
+ addonId: null,
62515
+ access: "view"
62516
+ },
62517
+ "deviceHistory.query": {
62518
+ capName: "device-history",
62519
+ capScope: "system",
62520
+ addonId: null,
62521
+ access: "view"
62522
+ },
62523
+ "deviceHistory.queryNode": {
62524
+ capName: "device-history",
62525
+ capScope: "system",
62526
+ addonId: null,
62527
+ access: "view"
62528
+ },
62529
+ "deviceHistory.record": {
62530
+ capName: "device-history",
62531
+ capScope: "system",
62532
+ addonId: null,
62533
+ access: "create"
62534
+ },
62535
+ "deviceHistory.recordBuckets": {
62536
+ capName: "device-history",
62537
+ capScope: "system",
62538
+ addonId: null,
62539
+ access: "create"
62540
+ },
62541
+ "deviceHistory.setDeviceEnabled": {
62542
+ capName: "device-history",
62543
+ capScope: "system",
62544
+ addonId: null,
62545
+ access: "create"
62546
+ },
62222
62547
  "deviceManager.addLocation": {
62223
62548
  capName: "device-manager",
62224
62549
  capScope: "system",
@@ -64283,6 +64608,12 @@ Object.freeze({
64283
64608
  addonId: null,
64284
64609
  access: "create"
64285
64610
  },
64611
+ "nodeCertificates.forgetHub": {
64612
+ capName: "node-certificates",
64613
+ capScope: "system",
64614
+ addonId: null,
64615
+ access: "delete"
64616
+ },
64286
64617
  "nodeCertificates.getCertificates": {
64287
64618
  capName: "node-certificates",
64288
64619
  capScope: "system",
@@ -69010,6 +69341,26 @@ Object.freeze({
69010
69341
  form: "single",
69011
69342
  optional: false
69012
69343
  }],
69344
+ "deviceHistory.getDeviceEnabled": [{
69345
+ name: "deviceId",
69346
+ form: "single",
69347
+ optional: false
69348
+ }],
69349
+ "deviceHistory.listSeries": [{
69350
+ name: "deviceId",
69351
+ form: "single",
69352
+ optional: false
69353
+ }],
69354
+ "deviceHistory.query": [{
69355
+ name: "deviceId",
69356
+ form: "single",
69357
+ optional: false
69358
+ }],
69359
+ "deviceHistory.setDeviceEnabled": [{
69360
+ name: "deviceId",
69361
+ form: "single",
69362
+ optional: false
69363
+ }],
69013
69364
  "deviceManager.adoptionRelease": [{
69014
69365
  name: "camDeviceId",
69015
69366
  form: "single",
@@ -71188,6 +71539,7 @@ Object.freeze({
71188
71539
  "network-access": "ingress",
71189
71540
  "smtp-provider": "email"
71190
71541
  });
71542
+ DeviceType.Camera;
71191
71543
  var G711_SCALE_CORRECTION_DB = {
71192
71544
  PCMU: 20 * Math.log10(4),
71193
71545
  PCMA: 20 * Math.log10(8)