@camstack/addon-model-studio 1.1.257 → 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.
- package/dist/{MotionZonesSettings-BT84Wq37.mjs → MotionZonesSettings-D85Kti2I.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-DdIj9GFm.mjs → PrivacyMaskSettings-Cj_Afwxb.mjs} +4 -4
- package/dist/{SceneMonitorEditor-BcP_WDA0.mjs → SceneMonitorEditor-B66YfelB.mjs} +3 -3
- package/dist/_stub.js +23 -23
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BleLhneU.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-wSH7KpHb.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BGNXnwH_.mjs +26 -0
- package/dist/{hostInit-ny0khOL5.mjs → hostInit-nJa6_txV.mjs} +2 -2
- package/dist/model-studio.addon.js +666 -2
- package/dist/model-studio.addon.mjs +666 -2
- package/dist/{player-overlays-ljYzYEn3.mjs → player-overlays-miGdycLL.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-BDi_5uNs.mjs → responsive-DyoB_c2Y.mjs} +1 -1
- package/dist/{scene-monitor-copy-BL2nsF7x.mjs → scene-monitor-copy-DBTY-6gg.mjs} +1 -1
- package/dist/{square-CoH9q721.mjs → square-Bgxk1vlP.mjs} +1 -1
- package/dist/{trash-2-Cxq92wV_.mjs → trash-2-9ynW2pBt.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CRMC3HGj.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CbS0rHPV.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C-FI2Czt.mjs +0 -26
|
@@ -5756,7 +5756,7 @@ var ZodIssueCode = {
|
|
|
5756
5756
|
var ZodFirstPartyTypeKind;
|
|
5757
5757
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5758
5758
|
//#endregion
|
|
5759
|
-
//#region ../types/dist/sleep-
|
|
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).
|
|
@@ -12741,6 +12741,167 @@ var ConvertResultSchema = object({
|
|
|
12741
12741
|
entry: ModelCatalogEntrySchema,
|
|
12742
12742
|
artifacts: array(ConvertArtifactSchema).readonly()
|
|
12743
12743
|
});
|
|
12744
|
+
/**
|
|
12745
|
+
* Device certificates (D855) — the wire contract shared by the hub, the admin
|
|
12746
|
+
* UI and the native viewer.
|
|
12747
|
+
*
|
|
12748
|
+
* A device (a phone) generates its OWN P-256 key pair in hardware (Secure
|
|
12749
|
+
* Enclave / Android Keystore / a non-extractable WebCrypto key). The private
|
|
12750
|
+
* key never travels. The hub signs the PUBLIC key into an X.509 leaf under a
|
|
12751
|
+
* dedicated device CA; the device later proves possession of the key by
|
|
12752
|
+
* signing a hub-issued nonce, and the hub answers with the same session a
|
|
12753
|
+
* password login opens.
|
|
12754
|
+
*
|
|
12755
|
+
* Everything on the wire is a small string (a PEM, a base64url signature):
|
|
12756
|
+
* D613 is about bulk bytes, and a certificate is ~600 bytes.
|
|
12757
|
+
*/
|
|
12758
|
+
/** Signature algorithm of every device credential: ECDSA, curve P-256, SHA-256. */
|
|
12759
|
+
var DEVICE_CERT_SIGNATURE = "ecdsa-p256-sha256";
|
|
12760
|
+
/** First line of every signed message; a change of format bumps the version. */
|
|
12761
|
+
var DEVICE_SIGNATURE_MESSAGE_VERSION = "camstack-device-cert-v1";
|
|
12762
|
+
_enum([
|
|
12763
|
+
"login",
|
|
12764
|
+
"renew",
|
|
12765
|
+
"revoke"
|
|
12766
|
+
]);
|
|
12767
|
+
var DevicePlatformSchema = _enum([
|
|
12768
|
+
"ios",
|
|
12769
|
+
"android",
|
|
12770
|
+
"web",
|
|
12771
|
+
"other"
|
|
12772
|
+
]);
|
|
12773
|
+
var Base64UrlSchema = string().min(1).max(4096).regex(/^[A-Za-z0-9_-]+$/);
|
|
12774
|
+
var PemSchema = string().min(1).max(16384);
|
|
12775
|
+
/**
|
|
12776
|
+
* Why a device-certificate endpoint said no. Distinct from a transport / 5xx
|
|
12777
|
+
* failure: those carry no reason and mean "try again", never "the credential is
|
|
12778
|
+
* dead". The viewer switches on this exhaustively.
|
|
12779
|
+
*/
|
|
12780
|
+
var DeviceRefusalReasonSchema = _enum([
|
|
12781
|
+
"revoked",
|
|
12782
|
+
"unknown-credential",
|
|
12783
|
+
"expired",
|
|
12784
|
+
"bad-signature",
|
|
12785
|
+
"nonce-invalid",
|
|
12786
|
+
"rate-limited",
|
|
12787
|
+
"invalid-certificate",
|
|
12788
|
+
"superseded",
|
|
12789
|
+
"user-gone",
|
|
12790
|
+
"unavailable",
|
|
12791
|
+
"code-invalid",
|
|
12792
|
+
"self-enrollment-disabled",
|
|
12793
|
+
"step-up-required",
|
|
12794
|
+
"bad-public-key"
|
|
12795
|
+
]);
|
|
12796
|
+
var DeviceRefusalSchema = object({
|
|
12797
|
+
ok: literal(false),
|
|
12798
|
+
reason: DeviceRefusalReasonSchema,
|
|
12799
|
+
definitive: boolean(),
|
|
12800
|
+
retryAfterSeconds: number().optional()
|
|
12801
|
+
});
|
|
12802
|
+
object({
|
|
12803
|
+
code: string().min(1).max(256),
|
|
12804
|
+
/** SubjectPublicKeyInfo DER of the device's P-256 public key, base64url. */
|
|
12805
|
+
publicKeySpki: Base64UrlSchema,
|
|
12806
|
+
deviceName: string().min(1).max(80).optional(),
|
|
12807
|
+
platform: DevicePlatformSchema
|
|
12808
|
+
});
|
|
12809
|
+
discriminatedUnion("ok", [object({
|
|
12810
|
+
credentialId: string(),
|
|
12811
|
+
certPem: PemSchema,
|
|
12812
|
+
/** The device CA certificate the leaf chains to. */
|
|
12813
|
+
chainPem: PemSchema,
|
|
12814
|
+
notAfter: number(),
|
|
12815
|
+
user: object({
|
|
12816
|
+
id: string(),
|
|
12817
|
+
username: string()
|
|
12818
|
+
})
|
|
12819
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12820
|
+
object({
|
|
12821
|
+
/** The single-use step-up proof (`auth.deviceEnrollProofFrom…`). */
|
|
12822
|
+
proof: string().min(1).max(512),
|
|
12823
|
+
publicKeySpki: Base64UrlSchema,
|
|
12824
|
+
deviceName: string().min(1).max(80),
|
|
12825
|
+
platform: DevicePlatformSchema
|
|
12826
|
+
});
|
|
12827
|
+
object({
|
|
12828
|
+
proof: string(),
|
|
12829
|
+
expiresAt: number()
|
|
12830
|
+
});
|
|
12831
|
+
discriminatedUnion("ok", [object({
|
|
12832
|
+
nonce: string(),
|
|
12833
|
+
/** The origin to put in the signed message. The app compares it to the hub it dialled. */
|
|
12834
|
+
origin: string(),
|
|
12835
|
+
expiresAt: number(),
|
|
12836
|
+
signature: literal(DEVICE_CERT_SIGNATURE)
|
|
12837
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12838
|
+
object({
|
|
12839
|
+
certPem: PemSchema,
|
|
12840
|
+
nonce: string().min(1).max(256),
|
|
12841
|
+
/** ECDSA P-256 SHA-256 over {@link buildDeviceSignatureMessage}; raw r||s or DER, base64url. */
|
|
12842
|
+
signature: Base64UrlSchema
|
|
12843
|
+
});
|
|
12844
|
+
discriminatedUnion("ok", [object({
|
|
12845
|
+
credentialId: string(),
|
|
12846
|
+
certPem: PemSchema,
|
|
12847
|
+
chainPem: PemSchema,
|
|
12848
|
+
notAfter: number()
|
|
12849
|
+
}).extend({ ok: literal(true) }), DeviceRefusalSchema]);
|
|
12850
|
+
discriminatedUnion("ok", [object({
|
|
12851
|
+
ok: literal(true),
|
|
12852
|
+
credentialId: string(),
|
|
12853
|
+
sessionsEnded: number().int()
|
|
12854
|
+
}), DeviceRefusalSchema]);
|
|
12855
|
+
var DeviceCredentialStatusSchema = _enum([
|
|
12856
|
+
"active",
|
|
12857
|
+
"expired",
|
|
12858
|
+
"revoked"
|
|
12859
|
+
]);
|
|
12860
|
+
var DeviceCredentialSchema = object({
|
|
12861
|
+
id: string(),
|
|
12862
|
+
userId: string(),
|
|
12863
|
+
username: string().nullable(),
|
|
12864
|
+
deviceName: string(),
|
|
12865
|
+
platform: DevicePlatformSchema,
|
|
12866
|
+
enrolledVia: _enum(["qr", "self"]),
|
|
12867
|
+
/** SHA-256 of the leaf certificate DER, colon-hex. */
|
|
12868
|
+
fingerprint: string(),
|
|
12869
|
+
issuedAt: number(),
|
|
12870
|
+
expiresAt: number(),
|
|
12871
|
+
lastUsedAt: number().nullable(),
|
|
12872
|
+
lastUsedFrom: string().nullable(),
|
|
12873
|
+
revokedAt: number().nullable(),
|
|
12874
|
+
/** `admin:<userId>` | `user:<userId>` | `device` | `user-deleted`. */
|
|
12875
|
+
revokedBy: string().nullable(),
|
|
12876
|
+
status: DeviceCredentialStatusSchema
|
|
12877
|
+
});
|
|
12878
|
+
var StartEnrollmentOutputSchema = object({
|
|
12879
|
+
/** Shown once; only its hash is kept. */
|
|
12880
|
+
code: string(),
|
|
12881
|
+
expiresAt: number(),
|
|
12882
|
+
/** `camstack://enroll?hub=…&code=…` — what the QR encodes. */
|
|
12883
|
+
enrollUrl: string(),
|
|
12884
|
+
/** The hub origin in the link, or `null` when the hub could not name one (the link then has no `hub`). */
|
|
12885
|
+
hubOrigin: string().nullable(),
|
|
12886
|
+
/** Every origin the apps may try (role `appConnections`). */
|
|
12887
|
+
hubOrigins: array(string())
|
|
12888
|
+
});
|
|
12889
|
+
object({
|
|
12890
|
+
kind: literal("device-certificate"),
|
|
12891
|
+
id: literal("device-certificate"),
|
|
12892
|
+
label: string(),
|
|
12893
|
+
stage: literal("primary"),
|
|
12894
|
+
/** tRPC paths under the hub's `auth` router, so a client names no literal. */
|
|
12895
|
+
challengePath: literal("auth.getDeviceChallenge"),
|
|
12896
|
+
revokePath: literal("auth.revokeOwnDeviceCertificate"),
|
|
12897
|
+
enrollSelfPath: literal("auth.enrollSelf"),
|
|
12898
|
+
loginPath: literal("auth.loginWithDeviceCertificate"),
|
|
12899
|
+
renewPath: literal("auth.renewDeviceCertificate"),
|
|
12900
|
+
signature: literal(DEVICE_CERT_SIGNATURE),
|
|
12901
|
+
messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
|
|
12902
|
+
/** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
|
|
12903
|
+
clients: array(_enum(["native", "web"]))
|
|
12904
|
+
});
|
|
12744
12905
|
var ExpressionBindingSourceSchema = union([
|
|
12745
12906
|
object({
|
|
12746
12907
|
kind: literal("field").optional(),
|
|
@@ -16341,6 +16502,338 @@ method(object({
|
|
|
16341
16502
|
kind: "mutation",
|
|
16342
16503
|
auth: "admin"
|
|
16343
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" });
|
|
16707
|
+
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
16708
|
+
object({ state: literal("absent") }),
|
|
16709
|
+
object({
|
|
16710
|
+
state: literal("ready"),
|
|
16711
|
+
subject: string(),
|
|
16712
|
+
fingerprintSha256: string(),
|
|
16713
|
+
validTo: string()
|
|
16714
|
+
}),
|
|
16715
|
+
object({
|
|
16716
|
+
state: literal("unavailable"),
|
|
16717
|
+
reason: string()
|
|
16718
|
+
})
|
|
16719
|
+
]);
|
|
16720
|
+
var DeviceCertificateSettingsSchema = object({ selfEnrollment: _enum(["allowed", "disabled"]) });
|
|
16721
|
+
method(object({
|
|
16722
|
+
userId: string().min(1).optional(),
|
|
16723
|
+
includeRevoked: boolean().default(false)
|
|
16724
|
+
}), array(DeviceCredentialSchema).readonly(), { auth: "admin" }), method(object({
|
|
16725
|
+
userId: string().min(1),
|
|
16726
|
+
deviceName: string().min(1).max(80)
|
|
16727
|
+
}), StartEnrollmentOutputSchema, {
|
|
16728
|
+
kind: "mutation",
|
|
16729
|
+
auth: "admin",
|
|
16730
|
+
caller: "required"
|
|
16731
|
+
}), method(object({ id: string().min(1) }), object({
|
|
16732
|
+
revoked: boolean(),
|
|
16733
|
+
sessionsEnded: number().int(),
|
|
16734
|
+
status: DeviceCredentialStatusSchema
|
|
16735
|
+
}), {
|
|
16736
|
+
kind: "mutation",
|
|
16737
|
+
auth: "admin",
|
|
16738
|
+
caller: "required"
|
|
16739
|
+
}), method(object({}), DeviceCertificateSettingsSchema, { auth: "admin" }), method(DeviceCertificateSettingsSchema, DeviceCertificateSettingsSchema, {
|
|
16740
|
+
kind: "mutation",
|
|
16741
|
+
auth: "admin"
|
|
16742
|
+
}), method(object({ id: string().min(1) }), object({ result: _enum([
|
|
16743
|
+
"deleted",
|
|
16744
|
+
"live",
|
|
16745
|
+
"unknown"
|
|
16746
|
+
]) }), {
|
|
16747
|
+
kind: "mutation",
|
|
16748
|
+
auth: "admin",
|
|
16749
|
+
caller: "required"
|
|
16750
|
+
}), method(object({}), DeviceCaStatusSchema, { auth: "admin" }), method(object({
|
|
16751
|
+
id: string().min(1),
|
|
16752
|
+
deviceName: string().min(1).max(80)
|
|
16753
|
+
}), object({ renamed: boolean() }), {
|
|
16754
|
+
kind: "mutation",
|
|
16755
|
+
auth: "admin"
|
|
16756
|
+
});
|
|
16757
|
+
/**
|
|
16758
|
+
* `node-certificates` - what a node holds and the two renewals the hub drives
|
|
16759
|
+
* (D856): the node's MESH leaf (mutual TLS to the hub) and its HTTPS leaf (issued
|
|
16760
|
+
* from the hub's local CA so a device that trusts the hub root trusts the node).
|
|
16761
|
+
*
|
|
16762
|
+
* Provided by the AGENT RUNTIME (the synthetic `agent-runtime` addon id, like
|
|
16763
|
+
* `server-management`): the hub reaches it through the ordinary node-pinned
|
|
16764
|
+
* capability call - no new Moleculer action. The hub's own certificates are
|
|
16765
|
+
* handled in-process by the hub (`certificates` router), so this cap has no hub
|
|
16766
|
+
* provider.
|
|
16767
|
+
*
|
|
16768
|
+
* No private key ever crosses the mesh: the node generates its key pair, sends a
|
|
16769
|
+
* CSR, and the hub returns only the signed certificate.
|
|
16770
|
+
*/
|
|
16771
|
+
var MeshLeafInfoSchema = object({
|
|
16772
|
+
cn: string(),
|
|
16773
|
+
serial: string(),
|
|
16774
|
+
fingerprintSha256: string(),
|
|
16775
|
+
notBefore: number(),
|
|
16776
|
+
notAfter: number()
|
|
16777
|
+
});
|
|
16778
|
+
var HttpsLeafInfoSchema = object({
|
|
16779
|
+
fingerprintSha256: string(),
|
|
16780
|
+
issuer: string(),
|
|
16781
|
+
sans: array(string()),
|
|
16782
|
+
notBefore: number(),
|
|
16783
|
+
notAfter: number()
|
|
16784
|
+
});
|
|
16785
|
+
var NodeHttpsStateSchema = discriminatedUnion("state", [object({
|
|
16786
|
+
state: literal("served"),
|
|
16787
|
+
leaf: HttpsLeafInfoSchema
|
|
16788
|
+
}), object({
|
|
16789
|
+
state: literal("not-issued"),
|
|
16790
|
+
reason: string()
|
|
16791
|
+
})]);
|
|
16792
|
+
method(object({}), object({
|
|
16793
|
+
nodeId: string(),
|
|
16794
|
+
mesh: MeshLeafInfoSchema.nullable(),
|
|
16795
|
+
https: NodeHttpsStateSchema
|
|
16796
|
+
}), { auth: "admin" }), method(object({}), object({ csrPem: string() }), {
|
|
16797
|
+
kind: "mutation",
|
|
16798
|
+
auth: "admin"
|
|
16799
|
+
}), method(object({
|
|
16800
|
+
certPem: string().min(1),
|
|
16801
|
+
caCertPem: string().min(1),
|
|
16802
|
+
confirmWithinMs: number().int().min(1e4).max(6e5)
|
|
16803
|
+
}), object({
|
|
16804
|
+
fingerprintSha256: string(),
|
|
16805
|
+
serial: string()
|
|
16806
|
+
}), {
|
|
16807
|
+
kind: "mutation",
|
|
16808
|
+
auth: "admin"
|
|
16809
|
+
}), method(object({ fingerprintSha256: string() }), object({ confirmed: boolean() }), {
|
|
16810
|
+
kind: "mutation",
|
|
16811
|
+
auth: "admin"
|
|
16812
|
+
}), method(object({}), object({ rolledBack: boolean() }), {
|
|
16813
|
+
kind: "mutation",
|
|
16814
|
+
auth: "admin"
|
|
16815
|
+
}), method(object({}), object({
|
|
16816
|
+
csrPem: string(),
|
|
16817
|
+
hostnames: array(string()),
|
|
16818
|
+
addresses: array(string()),
|
|
16819
|
+
/** SHA-256 of the hub local CA this node pinned at its first install; `null` before one. */
|
|
16820
|
+
pinnedCaFingerprintSha256: string().nullable()
|
|
16821
|
+
}), {
|
|
16822
|
+
kind: "mutation",
|
|
16823
|
+
auth: "admin"
|
|
16824
|
+
}), method(object({
|
|
16825
|
+
certPem: string().min(1),
|
|
16826
|
+
caCertPem: string().min(1),
|
|
16827
|
+
/**
|
|
16828
|
+
* The hub signals that its local CA was rotated (D227) and this leaf chains to the NEW
|
|
16829
|
+
* one. Only the hub, over the authenticated mesh, can say so; a leaf with a different CA
|
|
16830
|
+
* and no signal is refused.
|
|
16831
|
+
*/
|
|
16832
|
+
caRotation: boolean().optional()
|
|
16833
|
+
}), HttpsLeafInfoSchema, {
|
|
16834
|
+
kind: "mutation",
|
|
16835
|
+
auth: "admin"
|
|
16836
|
+
});
|
|
16344
16837
|
var KeychainKeySourceSchema = object({
|
|
16345
16838
|
kind: _enum([
|
|
16346
16839
|
"config-file",
|
|
@@ -55043,7 +55536,7 @@ var MotionOnMotionChangedDataSchema = object({
|
|
|
55043
55536
|
/** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
|
|
55044
55537
|
triggeredBy: MotionTriggeredBySchema.optional()
|
|
55045
55538
|
});
|
|
55046
|
-
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
|
|
55539
|
+
DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
|
|
55047
55540
|
object({
|
|
55048
55541
|
enabled: boolean(),
|
|
55049
55542
|
/** Ms epoch of the last operator-driven change. */
|
|
@@ -62348,6 +62841,54 @@ Object.freeze({
|
|
|
62348
62841
|
addonId: null,
|
|
62349
62842
|
access: "create"
|
|
62350
62843
|
},
|
|
62844
|
+
"deviceCredentials.deleteDeviceCredential": {
|
|
62845
|
+
capName: "device-credentials",
|
|
62846
|
+
capScope: "system",
|
|
62847
|
+
addonId: null,
|
|
62848
|
+
access: "delete"
|
|
62849
|
+
},
|
|
62850
|
+
"deviceCredentials.getDeviceCaStatus": {
|
|
62851
|
+
capName: "device-credentials",
|
|
62852
|
+
capScope: "system",
|
|
62853
|
+
addonId: null,
|
|
62854
|
+
access: "view"
|
|
62855
|
+
},
|
|
62856
|
+
"deviceCredentials.getDeviceCertificateSettings": {
|
|
62857
|
+
capName: "device-credentials",
|
|
62858
|
+
capScope: "system",
|
|
62859
|
+
addonId: null,
|
|
62860
|
+
access: "view"
|
|
62861
|
+
},
|
|
62862
|
+
"deviceCredentials.listDeviceCredentials": {
|
|
62863
|
+
capName: "device-credentials",
|
|
62864
|
+
capScope: "system",
|
|
62865
|
+
addonId: null,
|
|
62866
|
+
access: "view"
|
|
62867
|
+
},
|
|
62868
|
+
"deviceCredentials.renameDeviceCredential": {
|
|
62869
|
+
capName: "device-credentials",
|
|
62870
|
+
capScope: "system",
|
|
62871
|
+
addonId: null,
|
|
62872
|
+
access: "create"
|
|
62873
|
+
},
|
|
62874
|
+
"deviceCredentials.revokeDeviceCredential": {
|
|
62875
|
+
capName: "device-credentials",
|
|
62876
|
+
capScope: "system",
|
|
62877
|
+
addonId: null,
|
|
62878
|
+
access: "delete"
|
|
62879
|
+
},
|
|
62880
|
+
"deviceCredentials.setDeviceCertificateSettings": {
|
|
62881
|
+
capName: "device-credentials",
|
|
62882
|
+
capScope: "system",
|
|
62883
|
+
addonId: null,
|
|
62884
|
+
access: "create"
|
|
62885
|
+
},
|
|
62886
|
+
"deviceCredentials.startEnrollment": {
|
|
62887
|
+
capName: "device-credentials",
|
|
62888
|
+
capScope: "system",
|
|
62889
|
+
addonId: null,
|
|
62890
|
+
access: "create"
|
|
62891
|
+
},
|
|
62351
62892
|
"deviceDiscovery.adoptDevice": {
|
|
62352
62893
|
capName: "device-discovery",
|
|
62353
62894
|
capScope: "device",
|
|
@@ -62450,6 +62991,66 @@ Object.freeze({
|
|
|
62450
62991
|
addonId: null,
|
|
62451
62992
|
access: "create"
|
|
62452
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
|
+
},
|
|
62453
63054
|
"deviceManager.addLocation": {
|
|
62454
63055
|
capName: "device-manager",
|
|
62455
63056
|
capScope: "system",
|
|
@@ -64508,6 +65109,48 @@ Object.freeze({
|
|
|
64508
65109
|
addonId: null,
|
|
64509
65110
|
access: "create"
|
|
64510
65111
|
},
|
|
65112
|
+
"nodeCertificates.confirmMeshLeaf": {
|
|
65113
|
+
capName: "node-certificates",
|
|
65114
|
+
capScope: "system",
|
|
65115
|
+
addonId: null,
|
|
65116
|
+
access: "create"
|
|
65117
|
+
},
|
|
65118
|
+
"nodeCertificates.getCertificates": {
|
|
65119
|
+
capName: "node-certificates",
|
|
65120
|
+
capScope: "system",
|
|
65121
|
+
addonId: null,
|
|
65122
|
+
access: "view"
|
|
65123
|
+
},
|
|
65124
|
+
"nodeCertificates.installHttpsCertificate": {
|
|
65125
|
+
capName: "node-certificates",
|
|
65126
|
+
capScope: "system",
|
|
65127
|
+
addonId: null,
|
|
65128
|
+
access: "create"
|
|
65129
|
+
},
|
|
65130
|
+
"nodeCertificates.installMeshLeaf": {
|
|
65131
|
+
capName: "node-certificates",
|
|
65132
|
+
capScope: "system",
|
|
65133
|
+
addonId: null,
|
|
65134
|
+
access: "create"
|
|
65135
|
+
},
|
|
65136
|
+
"nodeCertificates.prepareHttpsCertificate": {
|
|
65137
|
+
capName: "node-certificates",
|
|
65138
|
+
capScope: "system",
|
|
65139
|
+
addonId: null,
|
|
65140
|
+
access: "create"
|
|
65141
|
+
},
|
|
65142
|
+
"nodeCertificates.prepareMeshRenewal": {
|
|
65143
|
+
capName: "node-certificates",
|
|
65144
|
+
capScope: "system",
|
|
65145
|
+
addonId: null,
|
|
65146
|
+
access: "create"
|
|
65147
|
+
},
|
|
65148
|
+
"nodeCertificates.rollbackMeshLeaf": {
|
|
65149
|
+
capName: "node-certificates",
|
|
65150
|
+
capScope: "system",
|
|
65151
|
+
addonId: null,
|
|
65152
|
+
access: "create"
|
|
65153
|
+
},
|
|
64511
65154
|
"nodes.clusterAddonStatus": {
|
|
64512
65155
|
capName: "nodes",
|
|
64513
65156
|
capScope: "system",
|
|
@@ -69199,6 +69842,26 @@ Object.freeze({
|
|
|
69199
69842
|
form: "single",
|
|
69200
69843
|
optional: false
|
|
69201
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
|
+
}],
|
|
69202
69865
|
"deviceManager.adoptionRelease": [{
|
|
69203
69866
|
name: "camDeviceId",
|
|
69204
69867
|
form: "single",
|
|
@@ -71377,6 +72040,7 @@ Object.freeze({
|
|
|
71377
72040
|
"network-access": "ingress",
|
|
71378
72041
|
"smtp-provider": "email"
|
|
71379
72042
|
});
|
|
72043
|
+
DeviceType.Camera;
|
|
71380
72044
|
var G711_SCALE_CORRECTION_DB = {
|
|
71381
72045
|
PCMU: 20 * Math.log10(4),
|
|
71382
72046
|
PCMA: 20 * Math.log10(8)
|