@camstack/addon-osd-manager 0.1.233 → 0.1.234

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-BGTzmty7.mjs → MotionZonesSettings-CpC0VrRF.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-wElvVviL.mjs → PrivacyMaskSettings-DsRVLMGw.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-DsYkgb5P.mjs → SceneMonitorEditor-Bd_y21mf.mjs} +3 -3
  4. package/dist/_stub.js +11 -10
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CoDHKGxB.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CJ5YyyFD.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-cCq5NyzR.mjs +26 -0
  7. package/dist/{hostInit-DWuTgdTp.mjs → hostInit-BgZ8bjH8.mjs} +2 -2
  8. package/dist/index.js +382 -0
  9. package/dist/index.mjs +382 -0
  10. package/dist/{player-overlays-g5nnMIf3.mjs → player-overlays-Bfw9gqQd.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-BAd3l1Cq.mjs → responsive-CvsGDf2k.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-D_UXd-vB.mjs → scene-monitor-copy-Cp3j72cs.mjs} +1 -1
  14. package/dist/{square-CnHXcvE6.mjs → square-DRfiAJqL.mjs} +1 -1
  15. package/dist/{trash-2-Bl0J0QJm.mjs → trash-2-KaQPwGe5.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-Dar1zAug.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BlUDCAK-.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DTIq2p4w.mjs +0 -26
package/dist/index.js CHANGED
@@ -12155,6 +12155,167 @@ var ConvertResultSchema = object({
12155
12155
  files: array(string()).readonly()
12156
12156
  })).readonly()
12157
12157
  });
12158
+ /**
12159
+ * Device certificates (D855) — the wire contract shared by the hub, the admin
12160
+ * UI and the native viewer.
12161
+ *
12162
+ * A device (a phone) generates its OWN P-256 key pair in hardware (Secure
12163
+ * Enclave / Android Keystore / a non-extractable WebCrypto key). The private
12164
+ * key never travels. The hub signs the PUBLIC key into an X.509 leaf under a
12165
+ * dedicated device CA; the device later proves possession of the key by
12166
+ * signing a hub-issued nonce, and the hub answers with the same session a
12167
+ * password login opens.
12168
+ *
12169
+ * Everything on the wire is a small string (a PEM, a base64url signature):
12170
+ * D613 is about bulk bytes, and a certificate is ~600 bytes.
12171
+ */
12172
+ /** Signature algorithm of every device credential: ECDSA, curve P-256, SHA-256. */
12173
+ var DEVICE_CERT_SIGNATURE = "ecdsa-p256-sha256";
12174
+ /** First line of every signed message; a change of format bumps the version. */
12175
+ var DEVICE_SIGNATURE_MESSAGE_VERSION = "camstack-device-cert-v1";
12176
+ _enum([
12177
+ "login",
12178
+ "renew",
12179
+ "revoke"
12180
+ ]);
12181
+ var DevicePlatformSchema = _enum([
12182
+ "ios",
12183
+ "android",
12184
+ "web",
12185
+ "other"
12186
+ ]);
12187
+ var Base64UrlSchema = string().min(1).max(4096).regex(/^[A-Za-z0-9_-]+$/);
12188
+ var PemSchema = string().min(1).max(16384);
12189
+ /**
12190
+ * Why a device-certificate endpoint said no. Distinct from a transport / 5xx
12191
+ * failure: those carry no reason and mean "try again", never "the credential is
12192
+ * dead". The viewer switches on this exhaustively.
12193
+ */
12194
+ var DeviceRefusalReasonSchema = _enum([
12195
+ "revoked",
12196
+ "unknown-credential",
12197
+ "expired",
12198
+ "bad-signature",
12199
+ "nonce-invalid",
12200
+ "rate-limited",
12201
+ "invalid-certificate",
12202
+ "superseded",
12203
+ "user-gone",
12204
+ "unavailable",
12205
+ "code-invalid",
12206
+ "self-enrollment-disabled",
12207
+ "step-up-required",
12208
+ "bad-public-key"
12209
+ ]);
12210
+ var DeviceRefusalSchema = object({
12211
+ ok: literal(false),
12212
+ reason: DeviceRefusalReasonSchema,
12213
+ definitive: boolean(),
12214
+ retryAfterSeconds: number().optional()
12215
+ });
12216
+ object({
12217
+ code: string().min(1).max(256),
12218
+ /** SubjectPublicKeyInfo DER of the device's P-256 public key, base64url. */
12219
+ publicKeySpki: Base64UrlSchema,
12220
+ deviceName: string().min(1).max(80).optional(),
12221
+ platform: DevicePlatformSchema
12222
+ });
12223
+ discriminatedUnion("ok", [object({
12224
+ credentialId: string(),
12225
+ certPem: PemSchema,
12226
+ /** The device CA certificate the leaf chains to. */
12227
+ chainPem: PemSchema,
12228
+ notAfter: number(),
12229
+ user: object({
12230
+ id: string(),
12231
+ username: string()
12232
+ })
12233
+ }).extend({ ok: literal(true) }), DeviceRefusalSchema]);
12234
+ object({
12235
+ /** The single-use step-up proof (`auth.deviceEnrollProofFrom…`). */
12236
+ proof: string().min(1).max(512),
12237
+ publicKeySpki: Base64UrlSchema,
12238
+ deviceName: string().min(1).max(80),
12239
+ platform: DevicePlatformSchema
12240
+ });
12241
+ object({
12242
+ proof: string(),
12243
+ expiresAt: number()
12244
+ });
12245
+ discriminatedUnion("ok", [object({
12246
+ nonce: string(),
12247
+ /** The origin to put in the signed message. The app compares it to the hub it dialled. */
12248
+ origin: string(),
12249
+ expiresAt: number(),
12250
+ signature: literal(DEVICE_CERT_SIGNATURE)
12251
+ }).extend({ ok: literal(true) }), DeviceRefusalSchema]);
12252
+ object({
12253
+ certPem: PemSchema,
12254
+ nonce: string().min(1).max(256),
12255
+ /** ECDSA P-256 SHA-256 over {@link buildDeviceSignatureMessage}; raw r||s or DER, base64url. */
12256
+ signature: Base64UrlSchema
12257
+ });
12258
+ discriminatedUnion("ok", [object({
12259
+ credentialId: string(),
12260
+ certPem: PemSchema,
12261
+ chainPem: PemSchema,
12262
+ notAfter: number()
12263
+ }).extend({ ok: literal(true) }), DeviceRefusalSchema]);
12264
+ discriminatedUnion("ok", [object({
12265
+ ok: literal(true),
12266
+ credentialId: string(),
12267
+ sessionsEnded: number().int()
12268
+ }), DeviceRefusalSchema]);
12269
+ var DeviceCredentialStatusSchema = _enum([
12270
+ "active",
12271
+ "expired",
12272
+ "revoked"
12273
+ ]);
12274
+ var DeviceCredentialSchema = object({
12275
+ id: string(),
12276
+ userId: string(),
12277
+ username: string().nullable(),
12278
+ deviceName: string(),
12279
+ platform: DevicePlatformSchema,
12280
+ enrolledVia: _enum(["qr", "self"]),
12281
+ /** SHA-256 of the leaf certificate DER, colon-hex. */
12282
+ fingerprint: string(),
12283
+ issuedAt: number(),
12284
+ expiresAt: number(),
12285
+ lastUsedAt: number().nullable(),
12286
+ lastUsedFrom: string().nullable(),
12287
+ revokedAt: number().nullable(),
12288
+ /** `admin:<userId>` | `user:<userId>` | `device` | `user-deleted`. */
12289
+ revokedBy: string().nullable(),
12290
+ status: DeviceCredentialStatusSchema
12291
+ });
12292
+ var StartEnrollmentOutputSchema = object({
12293
+ /** Shown once; only its hash is kept. */
12294
+ code: string(),
12295
+ expiresAt: number(),
12296
+ /** `camstack://enroll?hub=…&code=…` — what the QR encodes. */
12297
+ enrollUrl: string(),
12298
+ /** The hub origin in the link, or `null` when the hub could not name one (the link then has no `hub`). */
12299
+ hubOrigin: string().nullable(),
12300
+ /** Every origin the apps may try (role `appConnections`). */
12301
+ hubOrigins: array(string())
12302
+ });
12303
+ object({
12304
+ kind: literal("device-certificate"),
12305
+ id: literal("device-certificate"),
12306
+ label: string(),
12307
+ stage: literal("primary"),
12308
+ /** tRPC paths under the hub's `auth` router, so a client names no literal. */
12309
+ challengePath: literal("auth.getDeviceChallenge"),
12310
+ revokePath: literal("auth.revokeOwnDeviceCertificate"),
12311
+ enrollSelfPath: literal("auth.enrollSelf"),
12312
+ loginPath: literal("auth.loginWithDeviceCertificate"),
12313
+ renewPath: literal("auth.renewDeviceCertificate"),
12314
+ signature: literal(DEVICE_CERT_SIGNATURE),
12315
+ messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
12316
+ /** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
12317
+ clients: array(_enum(["native", "web"]))
12318
+ });
12158
12319
  var ExpressionBindingSourceSchema = union([
12159
12320
  object({
12160
12321
  kind: literal("field").optional(),
@@ -15727,6 +15888,136 @@ method(object({
15727
15888
  kind: "mutation",
15728
15889
  auth: "admin"
15729
15890
  }), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
15891
+ var DeviceCaStatusSchema = discriminatedUnion("state", [
15892
+ object({ state: literal("absent") }),
15893
+ object({
15894
+ state: literal("ready"),
15895
+ subject: string(),
15896
+ fingerprintSha256: string(),
15897
+ validTo: string()
15898
+ }),
15899
+ object({
15900
+ state: literal("unavailable"),
15901
+ reason: string()
15902
+ })
15903
+ ]);
15904
+ var DeviceCertificateSettingsSchema = object({ selfEnrollment: _enum(["allowed", "disabled"]) });
15905
+ method(object({
15906
+ userId: string().min(1).optional(),
15907
+ includeRevoked: boolean().default(false)
15908
+ }), array(DeviceCredentialSchema).readonly(), { auth: "admin" }), method(object({
15909
+ userId: string().min(1),
15910
+ deviceName: string().min(1).max(80)
15911
+ }), StartEnrollmentOutputSchema, {
15912
+ kind: "mutation",
15913
+ auth: "admin",
15914
+ caller: "required"
15915
+ }), method(object({ id: string().min(1) }), object({
15916
+ revoked: boolean(),
15917
+ sessionsEnded: number().int(),
15918
+ status: DeviceCredentialStatusSchema
15919
+ }), {
15920
+ kind: "mutation",
15921
+ auth: "admin",
15922
+ caller: "required"
15923
+ }), method(object({}), DeviceCertificateSettingsSchema, { auth: "admin" }), method(DeviceCertificateSettingsSchema, DeviceCertificateSettingsSchema, {
15924
+ kind: "mutation",
15925
+ auth: "admin"
15926
+ }), method(object({ id: string().min(1) }), object({ result: _enum([
15927
+ "deleted",
15928
+ "live",
15929
+ "unknown"
15930
+ ]) }), {
15931
+ kind: "mutation",
15932
+ auth: "admin",
15933
+ caller: "required"
15934
+ }), method(object({}), DeviceCaStatusSchema, { auth: "admin" }), method(object({
15935
+ id: string().min(1),
15936
+ deviceName: string().min(1).max(80)
15937
+ }), object({ renamed: boolean() }), {
15938
+ kind: "mutation",
15939
+ auth: "admin"
15940
+ });
15941
+ /**
15942
+ * `node-certificates` - what a node holds and the two renewals the hub drives
15943
+ * (D856): the node's MESH leaf (mutual TLS to the hub) and its HTTPS leaf (issued
15944
+ * from the hub's local CA so a device that trusts the hub root trusts the node).
15945
+ *
15946
+ * Provided by the AGENT RUNTIME (the synthetic `agent-runtime` addon id, like
15947
+ * `server-management`): the hub reaches it through the ordinary node-pinned
15948
+ * capability call - no new Moleculer action. The hub's own certificates are
15949
+ * handled in-process by the hub (`certificates` router), so this cap has no hub
15950
+ * provider.
15951
+ *
15952
+ * No private key ever crosses the mesh: the node generates its key pair, sends a
15953
+ * CSR, and the hub returns only the signed certificate.
15954
+ */
15955
+ var MeshLeafInfoSchema = object({
15956
+ cn: string(),
15957
+ serial: string(),
15958
+ fingerprintSha256: string(),
15959
+ notBefore: number(),
15960
+ notAfter: number()
15961
+ });
15962
+ var HttpsLeafInfoSchema = object({
15963
+ fingerprintSha256: string(),
15964
+ issuer: string(),
15965
+ sans: array(string()),
15966
+ notBefore: number(),
15967
+ notAfter: number()
15968
+ });
15969
+ var NodeHttpsStateSchema = discriminatedUnion("state", [object({
15970
+ state: literal("served"),
15971
+ leaf: HttpsLeafInfoSchema
15972
+ }), object({
15973
+ state: literal("not-issued"),
15974
+ reason: string()
15975
+ })]);
15976
+ method(object({}), object({
15977
+ nodeId: string(),
15978
+ mesh: MeshLeafInfoSchema.nullable(),
15979
+ https: NodeHttpsStateSchema
15980
+ }), { auth: "admin" }), method(object({}), object({ csrPem: string() }), {
15981
+ kind: "mutation",
15982
+ auth: "admin"
15983
+ }), method(object({
15984
+ certPem: string().min(1),
15985
+ caCertPem: string().min(1),
15986
+ confirmWithinMs: number().int().min(1e4).max(6e5)
15987
+ }), object({
15988
+ fingerprintSha256: string(),
15989
+ serial: string()
15990
+ }), {
15991
+ kind: "mutation",
15992
+ auth: "admin"
15993
+ }), method(object({ fingerprintSha256: string() }), object({ confirmed: boolean() }), {
15994
+ kind: "mutation",
15995
+ auth: "admin"
15996
+ }), method(object({}), object({ rolledBack: boolean() }), {
15997
+ kind: "mutation",
15998
+ auth: "admin"
15999
+ }), method(object({}), object({
16000
+ csrPem: string(),
16001
+ hostnames: array(string()),
16002
+ addresses: array(string()),
16003
+ /** SHA-256 of the hub local CA this node pinned at its first install; `null` before one. */
16004
+ pinnedCaFingerprintSha256: string().nullable()
16005
+ }), {
16006
+ kind: "mutation",
16007
+ auth: "admin"
16008
+ }), method(object({
16009
+ certPem: string().min(1),
16010
+ caCertPem: string().min(1),
16011
+ /**
16012
+ * The hub signals that its local CA was rotated (D227) and this leaf chains to the NEW
16013
+ * one. Only the hub, over the authenticated mesh, can say so; a leaf with a different CA
16014
+ * and no signal is refused.
16015
+ */
16016
+ caRotation: boolean().optional()
16017
+ }), HttpsLeafInfoSchema, {
16018
+ kind: "mutation",
16019
+ auth: "admin"
16020
+ });
15730
16021
  var KeychainKeySourceSchema = object({
15731
16022
  kind: _enum([
15732
16023
  "config-file",
@@ -62621,6 +62912,54 @@ Object.freeze({
62621
62912
  addonId: null,
62622
62913
  access: "create"
62623
62914
  },
62915
+ "deviceCredentials.deleteDeviceCredential": {
62916
+ capName: "device-credentials",
62917
+ capScope: "system",
62918
+ addonId: null,
62919
+ access: "delete"
62920
+ },
62921
+ "deviceCredentials.getDeviceCaStatus": {
62922
+ capName: "device-credentials",
62923
+ capScope: "system",
62924
+ addonId: null,
62925
+ access: "view"
62926
+ },
62927
+ "deviceCredentials.getDeviceCertificateSettings": {
62928
+ capName: "device-credentials",
62929
+ capScope: "system",
62930
+ addonId: null,
62931
+ access: "view"
62932
+ },
62933
+ "deviceCredentials.listDeviceCredentials": {
62934
+ capName: "device-credentials",
62935
+ capScope: "system",
62936
+ addonId: null,
62937
+ access: "view"
62938
+ },
62939
+ "deviceCredentials.renameDeviceCredential": {
62940
+ capName: "device-credentials",
62941
+ capScope: "system",
62942
+ addonId: null,
62943
+ access: "create"
62944
+ },
62945
+ "deviceCredentials.revokeDeviceCredential": {
62946
+ capName: "device-credentials",
62947
+ capScope: "system",
62948
+ addonId: null,
62949
+ access: "delete"
62950
+ },
62951
+ "deviceCredentials.setDeviceCertificateSettings": {
62952
+ capName: "device-credentials",
62953
+ capScope: "system",
62954
+ addonId: null,
62955
+ access: "create"
62956
+ },
62957
+ "deviceCredentials.startEnrollment": {
62958
+ capName: "device-credentials",
62959
+ capScope: "system",
62960
+ addonId: null,
62961
+ access: "create"
62962
+ },
62624
62963
  "deviceDiscovery.adoptDevice": {
62625
62964
  capName: "device-discovery",
62626
62965
  capScope: "device",
@@ -64781,6 +65120,48 @@ Object.freeze({
64781
65120
  addonId: null,
64782
65121
  access: "create"
64783
65122
  },
65123
+ "nodeCertificates.confirmMeshLeaf": {
65124
+ capName: "node-certificates",
65125
+ capScope: "system",
65126
+ addonId: null,
65127
+ access: "create"
65128
+ },
65129
+ "nodeCertificates.getCertificates": {
65130
+ capName: "node-certificates",
65131
+ capScope: "system",
65132
+ addonId: null,
65133
+ access: "view"
65134
+ },
65135
+ "nodeCertificates.installHttpsCertificate": {
65136
+ capName: "node-certificates",
65137
+ capScope: "system",
65138
+ addonId: null,
65139
+ access: "create"
65140
+ },
65141
+ "nodeCertificates.installMeshLeaf": {
65142
+ capName: "node-certificates",
65143
+ capScope: "system",
65144
+ addonId: null,
65145
+ access: "create"
65146
+ },
65147
+ "nodeCertificates.prepareHttpsCertificate": {
65148
+ capName: "node-certificates",
65149
+ capScope: "system",
65150
+ addonId: null,
65151
+ access: "create"
65152
+ },
65153
+ "nodeCertificates.prepareMeshRenewal": {
65154
+ capName: "node-certificates",
65155
+ capScope: "system",
65156
+ addonId: null,
65157
+ access: "create"
65158
+ },
65159
+ "nodeCertificates.rollbackMeshLeaf": {
65160
+ capName: "node-certificates",
65161
+ capScope: "system",
65162
+ addonId: null,
65163
+ access: "create"
65164
+ },
64784
65165
  "nodes.clusterAddonStatus": {
64785
65166
  capName: "nodes",
64786
65167
  capScope: "system",
@@ -73493,6 +73874,7 @@ Object.freeze({
73493
73874
  "page": 1,
73494
73875
  "pageSize": 50
73495
73876
  } },
73877
+ "device-credentials": { "listDeviceCredentials": { "includeRevoked": false } },
73496
73878
  "device-manager": { "adoptionListCandidates": {
73497
73879
  "page": 1,
73498
73880
  "pageSize": 50