@camstack/addon-matter-broker 0.2.121 → 0.2.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +204 -10
- package/dist/addon.mjs +204 -10
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5384,7 +5384,7 @@ var ZodIssueCode = {
|
|
|
5384
5384
|
var ZodFirstPartyTypeKind;
|
|
5385
5385
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5386
5386
|
//#endregion
|
|
5387
|
-
//#region ../types/dist/sleep-
|
|
5387
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5388
5388
|
/**
|
|
5389
5389
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5390
5390
|
* window to float samples (D455).
|
|
@@ -15159,6 +15159,10 @@ var DeviceInfoSchema = object({
|
|
|
15159
15159
|
isCamera: boolean(),
|
|
15160
15160
|
/** Current config values — serializable snapshot */
|
|
15161
15161
|
config: record(string$2(), unknown()),
|
|
15162
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15163
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15164
|
+
* when the owning runner has not reported them. */
|
|
15165
|
+
secretConfigPaths: array(string$2()).optional(),
|
|
15162
15166
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15163
15167
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15164
15168
|
metadata: record(string$2(), unknown()).nullable().optional(),
|
|
@@ -15364,7 +15368,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15364
15368
|
* call (workers re-register on init), so probe-driven updates
|
|
15365
15369
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15366
15370
|
features: array(string$2()).optional(),
|
|
15367
|
-
config: record(string$2(), unknown())
|
|
15371
|
+
config: record(string$2(), unknown()),
|
|
15372
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15373
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15374
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15375
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15376
|
+
* omits it and the keyword backstop applies. */
|
|
15377
|
+
secretConfigPaths: array(string$2()).optional()
|
|
15368
15378
|
});
|
|
15369
15379
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15370
15380
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -17023,7 +17033,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17023
17033
|
icon: string$2().optional(),
|
|
17024
17034
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17025
17035
|
startUrl: string$2(),
|
|
17026
|
-
stage: LoginStageEnum
|
|
17036
|
+
stage: LoginStageEnum,
|
|
17037
|
+
/**
|
|
17038
|
+
* The provider names an external identity a signed-in user can link to
|
|
17039
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17040
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17041
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17042
|
+
*/
|
|
17043
|
+
linkable: boolean().optional()
|
|
17027
17044
|
}),
|
|
17028
17045
|
object({
|
|
17029
17046
|
kind: literal("widget"),
|
|
@@ -22458,7 +22475,13 @@ var RetrainFrameSchema = object({
|
|
|
22458
22475
|
sizeBytes: number().int(),
|
|
22459
22476
|
width: number().int(),
|
|
22460
22477
|
height: number().int(),
|
|
22461
|
-
copiedAt: number()
|
|
22478
|
+
copiedAt: number(),
|
|
22479
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22480
|
+
capturedAt: number().optional(),
|
|
22481
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22482
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22483
|
+
* a false positive. */
|
|
22484
|
+
complete: boolean()
|
|
22462
22485
|
});
|
|
22463
22486
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22464
22487
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22479,6 +22502,51 @@ var RetrainFrameListSchema = object({
|
|
|
22479
22502
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22480
22503
|
autoPickMediaId: number().int().optional()
|
|
22481
22504
|
});
|
|
22505
|
+
/**
|
|
22506
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22507
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22508
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22509
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22510
|
+
* export carried (`exportedInBatch`).
|
|
22511
|
+
*/
|
|
22512
|
+
var RetrainExportFilterSchema = object({
|
|
22513
|
+
deviceIds: array(number()).optional(),
|
|
22514
|
+
frameIds: array(string$2()).max(2e4).optional(),
|
|
22515
|
+
batchId: string$2().optional(),
|
|
22516
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22517
|
+
completeOnly: boolean().optional()
|
|
22518
|
+
});
|
|
22519
|
+
/**
|
|
22520
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22521
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22522
|
+
* convention — the classifier layout.
|
|
22523
|
+
*/
|
|
22524
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22525
|
+
/**
|
|
22526
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22527
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22528
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22529
|
+
* logged.
|
|
22530
|
+
*/
|
|
22531
|
+
var RetrainArchiveTargetSchema = object({
|
|
22532
|
+
kind: literal("http"),
|
|
22533
|
+
method: _enum(["PUT", "POST"]),
|
|
22534
|
+
url: string$2().url(),
|
|
22535
|
+
headers: record(string$2(), string$2()).optional()
|
|
22536
|
+
});
|
|
22537
|
+
var RetrainArchiveResultSchema = object({
|
|
22538
|
+
batchId: string$2(),
|
|
22539
|
+
frames: number().int(),
|
|
22540
|
+
crops: number().int(),
|
|
22541
|
+
annotations: number().int(),
|
|
22542
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22543
|
+
missing: number().int(),
|
|
22544
|
+
bytes: number().int(),
|
|
22545
|
+
/** sha256 of the exact bytes sent. */
|
|
22546
|
+
sha256: string$2(),
|
|
22547
|
+
/** The target's HTTP status. */
|
|
22548
|
+
status: number().int()
|
|
22549
|
+
});
|
|
22482
22550
|
/** What the operator asked the assist to look for. */
|
|
22483
22551
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22484
22552
|
kind: literal("package"),
|
|
@@ -23273,9 +23341,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23273
23341
|
}), RetrainTransitionResultSchema, {
|
|
23274
23342
|
kind: "mutation",
|
|
23275
23343
|
auth: "admin"
|
|
23276
|
-
}), method(
|
|
23344
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string$2() }), {
|
|
23277
23345
|
kind: "query",
|
|
23278
23346
|
auth: "admin"
|
|
23347
|
+
}), method(object({
|
|
23348
|
+
deviceId: number(),
|
|
23349
|
+
trackId: string$2(),
|
|
23350
|
+
frameId: string$2(),
|
|
23351
|
+
complete: boolean()
|
|
23352
|
+
}), RetrainFrameSchema, {
|
|
23353
|
+
kind: "mutation",
|
|
23354
|
+
auth: "admin"
|
|
23355
|
+
}), method(object({
|
|
23356
|
+
filter: RetrainExportFilterSchema,
|
|
23357
|
+
layout: RetrainExportLayoutSchema,
|
|
23358
|
+
target: RetrainArchiveTargetSchema
|
|
23359
|
+
}), RetrainArchiveResultSchema, {
|
|
23360
|
+
kind: "mutation",
|
|
23361
|
+
auth: "admin",
|
|
23362
|
+
timeoutMs: 60 * 6e4
|
|
23279
23363
|
}), method(object({
|
|
23280
23364
|
/** Which of the three event tables owns the row. */
|
|
23281
23365
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26605,7 +26689,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26605
26689
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26606
26690
|
* operator already consented to.
|
|
26607
26691
|
*/
|
|
26608
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26692
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26693
|
+
/**
|
|
26694
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26695
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26696
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26697
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26698
|
+
*/
|
|
26699
|
+
linkIntent: string$2().optional(),
|
|
26700
|
+
/**
|
|
26701
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26702
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26703
|
+
*/
|
|
26704
|
+
issuer: string$2().optional()
|
|
26609
26705
|
});
|
|
26610
26706
|
method(object({
|
|
26611
26707
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28540,7 +28636,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28540
28636
|
* field their hints were silently stripped by the schema and the
|
|
28541
28637
|
* adaptive ladder started blind on the client's display size.
|
|
28542
28638
|
*/
|
|
28543
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28639
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28640
|
+
/**
|
|
28641
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28642
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28643
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28644
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28645
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28646
|
+
*
|
|
28647
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28648
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28649
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28650
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28651
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28652
|
+
* flag must not become a second door to the camera's speaker.
|
|
28653
|
+
*/
|
|
28654
|
+
talkback: boolean().optional()
|
|
28544
28655
|
}), object({
|
|
28545
28656
|
sessionId: string$2(),
|
|
28546
28657
|
sdpAnswer: string$2()
|
|
@@ -38911,6 +39022,32 @@ var TotpStatusSchema = object({
|
|
|
38911
39022
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
38912
39023
|
confirmedAt: number().nullable()
|
|
38913
39024
|
});
|
|
39025
|
+
/**
|
|
39026
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39027
|
+
* and scoped tokens.
|
|
39028
|
+
*
|
|
39029
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39030
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39031
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39032
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39033
|
+
* provider.
|
|
39034
|
+
*/
|
|
39035
|
+
var ExternalIdentitySchema = object({
|
|
39036
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39037
|
+
provider: string$2(),
|
|
39038
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39039
|
+
subject: string$2(),
|
|
39040
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39041
|
+
issuer: string$2(),
|
|
39042
|
+
userId: string$2(),
|
|
39043
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39044
|
+
label: string$2().optional(),
|
|
39045
|
+
linkedAt: number()
|
|
39046
|
+
});
|
|
39047
|
+
var ExternalIdentityKeySchema = object({
|
|
39048
|
+
provider: string$2().min(1),
|
|
39049
|
+
subject: string$2().min(1)
|
|
39050
|
+
});
|
|
38914
39051
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
38915
39052
|
kind: "mutation",
|
|
38916
39053
|
auth: "admin",
|
|
@@ -39024,7 +39161,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39024
39161
|
userId: string$2(),
|
|
39025
39162
|
username: string$2(),
|
|
39026
39163
|
scopes: array(TokenScopeSchema)
|
|
39027
|
-
}).nullable(), { access: "view" }), method(
|
|
39164
|
+
}).nullable(), { access: "view" }), method(object({ userId: string$2() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39165
|
+
userId: string$2(),
|
|
39166
|
+
issuer: string$2()
|
|
39167
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39168
|
+
userId: string$2(),
|
|
39169
|
+
issuer: string$2().min(1),
|
|
39170
|
+
label: string$2().optional()
|
|
39171
|
+
}), object({ success: literal(true) }), {
|
|
39172
|
+
kind: "mutation",
|
|
39173
|
+
auth: "admin",
|
|
39174
|
+
access: "create"
|
|
39175
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string$2() }), object({ success: boolean() }), {
|
|
39176
|
+
kind: "mutation",
|
|
39177
|
+
auth: "admin",
|
|
39178
|
+
access: "delete"
|
|
39179
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string$2() }), object({ success: boolean() }), {
|
|
39028
39180
|
kind: "mutation",
|
|
39029
39181
|
auth: "admin",
|
|
39030
39182
|
access: "delete"
|
|
@@ -45664,6 +45816,12 @@ Object.freeze({
|
|
|
45664
45816
|
addonId: null,
|
|
45665
45817
|
access: "create"
|
|
45666
45818
|
},
|
|
45819
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45820
|
+
capName: "pipeline-analytics",
|
|
45821
|
+
capScope: "device",
|
|
45822
|
+
addonId: null,
|
|
45823
|
+
access: "create"
|
|
45824
|
+
},
|
|
45667
45825
|
"pipelineAnalytics.setTrackFlags": {
|
|
45668
45826
|
capName: "pipeline-analytics",
|
|
45669
45827
|
capScope: "device",
|
|
@@ -45700,6 +45858,12 @@ Object.freeze({
|
|
|
45700
45858
|
addonId: null,
|
|
45701
45859
|
access: "delete"
|
|
45702
45860
|
},
|
|
45861
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45862
|
+
capName: "pipeline-analytics",
|
|
45863
|
+
capScope: "device",
|
|
45864
|
+
addonId: null,
|
|
45865
|
+
access: "create"
|
|
45866
|
+
},
|
|
45703
45867
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45704
45868
|
capName: "pipeline-executor",
|
|
45705
45869
|
capScope: "system",
|
|
@@ -48052,18 +48216,36 @@ Object.freeze({
|
|
|
48052
48216
|
addonId: null,
|
|
48053
48217
|
access: "delete"
|
|
48054
48218
|
},
|
|
48219
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48220
|
+
capName: "user-management",
|
|
48221
|
+
capScope: "system",
|
|
48222
|
+
addonId: null,
|
|
48223
|
+
access: "view"
|
|
48224
|
+
},
|
|
48055
48225
|
"userManagement.getTotpStatus": {
|
|
48056
48226
|
capName: "user-management",
|
|
48057
48227
|
capScope: "system",
|
|
48058
48228
|
addonId: null,
|
|
48059
48229
|
access: "view"
|
|
48060
48230
|
},
|
|
48231
|
+
"userManagement.linkExternalIdentity": {
|
|
48232
|
+
capName: "user-management",
|
|
48233
|
+
capScope: "system",
|
|
48234
|
+
addonId: null,
|
|
48235
|
+
access: "create"
|
|
48236
|
+
},
|
|
48061
48237
|
"userManagement.listApiKeys": {
|
|
48062
48238
|
capName: "user-management",
|
|
48063
48239
|
capScope: "system",
|
|
48064
48240
|
addonId: null,
|
|
48065
48241
|
access: "view"
|
|
48066
48242
|
},
|
|
48243
|
+
"userManagement.listExternalIdentities": {
|
|
48244
|
+
capName: "user-management",
|
|
48245
|
+
capScope: "system",
|
|
48246
|
+
addonId: null,
|
|
48247
|
+
access: "view"
|
|
48248
|
+
},
|
|
48067
48249
|
"userManagement.listOauthSessions": {
|
|
48068
48250
|
capName: "user-management",
|
|
48069
48251
|
capScope: "system",
|
|
@@ -48142,6 +48324,12 @@ Object.freeze({
|
|
|
48142
48324
|
addonId: null,
|
|
48143
48325
|
access: "create"
|
|
48144
48326
|
},
|
|
48327
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48328
|
+
capName: "user-management",
|
|
48329
|
+
capScope: "system",
|
|
48330
|
+
addonId: null,
|
|
48331
|
+
access: "delete"
|
|
48332
|
+
},
|
|
48145
48333
|
"userManagement.updateUser": {
|
|
48146
48334
|
capName: "user-management",
|
|
48147
48335
|
capScope: "system",
|
|
@@ -51481,6 +51669,11 @@ Object.freeze({
|
|
|
51481
51669
|
form: "single",
|
|
51482
51670
|
optional: false
|
|
51483
51671
|
}],
|
|
51672
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51673
|
+
name: "deviceId",
|
|
51674
|
+
form: "single",
|
|
51675
|
+
optional: false
|
|
51676
|
+
}],
|
|
51484
51677
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51485
51678
|
name: "deviceId",
|
|
51486
51679
|
form: "single",
|
|
@@ -163479,11 +163672,11 @@ var MatterBrokerRegistry = class {
|
|
|
163479
163672
|
*/
|
|
163480
163673
|
var matterConnectionSchema = object({
|
|
163481
163674
|
/** Optional Thread operational dataset (hex) for Thread device onboarding. */
|
|
163482
|
-
threadDataset: string$2().default("").describe("Thread operational dataset (hex) — required only for Thread devices"),
|
|
163675
|
+
threadDataset: string$2().default("").describe("Thread operational dataset (hex) — required only for Thread devices").meta({ secret: true }),
|
|
163483
163676
|
/** Optional Wi-Fi SSID for Wi-Fi device onboarding over BLE. */
|
|
163484
163677
|
wifiSsid: string$2().default("").describe("Wi-Fi SSID — required only for BLE Wi-Fi onboarding"),
|
|
163485
163678
|
/** Optional Wi-Fi password for Wi-Fi device onboarding over BLE. */
|
|
163486
|
-
wifiPassword: string$2().default("").describe("Wi-Fi password (optional)"),
|
|
163679
|
+
wifiPassword: string$2().default("").describe("Wi-Fi password (optional)").meta({ secret: true }),
|
|
163487
163680
|
/** PULL-reconcile interval for the commissioned-node inventory. */
|
|
163488
163681
|
reconcileIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(3e5)).describe("Node-inventory reconcile interval (ms)")
|
|
163489
163682
|
});
|
|
@@ -163514,6 +163707,7 @@ function buildConnectionFormSchema() {
|
|
|
163514
163707
|
{
|
|
163515
163708
|
type: "text",
|
|
163516
163709
|
key: "threadDataset",
|
|
163710
|
+
secret: true,
|
|
163517
163711
|
label: "Thread operational dataset (hex, optional)",
|
|
163518
163712
|
placeholder: "0e08000000000001…"
|
|
163519
163713
|
},
|
package/dist/addon.mjs
CHANGED
|
@@ -5382,7 +5382,7 @@ var ZodIssueCode = {
|
|
|
5382
5382
|
var ZodFirstPartyTypeKind;
|
|
5383
5383
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5384
5384
|
//#endregion
|
|
5385
|
-
//#region ../types/dist/sleep-
|
|
5385
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5386
5386
|
/**
|
|
5387
5387
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5388
5388
|
* window to float samples (D455).
|
|
@@ -15157,6 +15157,10 @@ var DeviceInfoSchema = object({
|
|
|
15157
15157
|
isCamera: boolean(),
|
|
15158
15158
|
/** Current config values — serializable snapshot */
|
|
15159
15159
|
config: record(string$2(), unknown()),
|
|
15160
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15161
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15162
|
+
* when the owning runner has not reported them. */
|
|
15163
|
+
secretConfigPaths: array(string$2()).optional(),
|
|
15160
15164
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15161
15165
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15162
15166
|
metadata: record(string$2(), unknown()).nullable().optional(),
|
|
@@ -15362,7 +15366,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15362
15366
|
* call (workers re-register on init), so probe-driven updates
|
|
15363
15367
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15364
15368
|
features: array(string$2()).optional(),
|
|
15365
|
-
config: record(string$2(), unknown())
|
|
15369
|
+
config: record(string$2(), unknown()),
|
|
15370
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15371
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15372
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15373
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15374
|
+
* omits it and the keyword backstop applies. */
|
|
15375
|
+
secretConfigPaths: array(string$2()).optional()
|
|
15366
15376
|
});
|
|
15367
15377
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15368
15378
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -17021,7 +17031,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17021
17031
|
icon: string$2().optional(),
|
|
17022
17032
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17023
17033
|
startUrl: string$2(),
|
|
17024
|
-
stage: LoginStageEnum
|
|
17034
|
+
stage: LoginStageEnum,
|
|
17035
|
+
/**
|
|
17036
|
+
* The provider names an external identity a signed-in user can link to
|
|
17037
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17038
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17039
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17040
|
+
*/
|
|
17041
|
+
linkable: boolean().optional()
|
|
17025
17042
|
}),
|
|
17026
17043
|
object({
|
|
17027
17044
|
kind: literal("widget"),
|
|
@@ -22456,7 +22473,13 @@ var RetrainFrameSchema = object({
|
|
|
22456
22473
|
sizeBytes: number().int(),
|
|
22457
22474
|
width: number().int(),
|
|
22458
22475
|
height: number().int(),
|
|
22459
|
-
copiedAt: number()
|
|
22476
|
+
copiedAt: number(),
|
|
22477
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22478
|
+
capturedAt: number().optional(),
|
|
22479
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22480
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22481
|
+
* a false positive. */
|
|
22482
|
+
complete: boolean()
|
|
22460
22483
|
});
|
|
22461
22484
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22462
22485
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22477,6 +22500,51 @@ var RetrainFrameListSchema = object({
|
|
|
22477
22500
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22478
22501
|
autoPickMediaId: number().int().optional()
|
|
22479
22502
|
});
|
|
22503
|
+
/**
|
|
22504
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22505
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22506
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22507
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22508
|
+
* export carried (`exportedInBatch`).
|
|
22509
|
+
*/
|
|
22510
|
+
var RetrainExportFilterSchema = object({
|
|
22511
|
+
deviceIds: array(number()).optional(),
|
|
22512
|
+
frameIds: array(string$2()).max(2e4).optional(),
|
|
22513
|
+
batchId: string$2().optional(),
|
|
22514
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22515
|
+
completeOnly: boolean().optional()
|
|
22516
|
+
});
|
|
22517
|
+
/**
|
|
22518
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22519
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22520
|
+
* convention — the classifier layout.
|
|
22521
|
+
*/
|
|
22522
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22523
|
+
/**
|
|
22524
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22525
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22526
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22527
|
+
* logged.
|
|
22528
|
+
*/
|
|
22529
|
+
var RetrainArchiveTargetSchema = object({
|
|
22530
|
+
kind: literal("http"),
|
|
22531
|
+
method: _enum(["PUT", "POST"]),
|
|
22532
|
+
url: string$2().url(),
|
|
22533
|
+
headers: record(string$2(), string$2()).optional()
|
|
22534
|
+
});
|
|
22535
|
+
var RetrainArchiveResultSchema = object({
|
|
22536
|
+
batchId: string$2(),
|
|
22537
|
+
frames: number().int(),
|
|
22538
|
+
crops: number().int(),
|
|
22539
|
+
annotations: number().int(),
|
|
22540
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22541
|
+
missing: number().int(),
|
|
22542
|
+
bytes: number().int(),
|
|
22543
|
+
/** sha256 of the exact bytes sent. */
|
|
22544
|
+
sha256: string$2(),
|
|
22545
|
+
/** The target's HTTP status. */
|
|
22546
|
+
status: number().int()
|
|
22547
|
+
});
|
|
22480
22548
|
/** What the operator asked the assist to look for. */
|
|
22481
22549
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22482
22550
|
kind: literal("package"),
|
|
@@ -23271,9 +23339,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23271
23339
|
}), RetrainTransitionResultSchema, {
|
|
23272
23340
|
kind: "mutation",
|
|
23273
23341
|
auth: "admin"
|
|
23274
|
-
}), method(
|
|
23342
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string$2() }), {
|
|
23275
23343
|
kind: "query",
|
|
23276
23344
|
auth: "admin"
|
|
23345
|
+
}), method(object({
|
|
23346
|
+
deviceId: number(),
|
|
23347
|
+
trackId: string$2(),
|
|
23348
|
+
frameId: string$2(),
|
|
23349
|
+
complete: boolean()
|
|
23350
|
+
}), RetrainFrameSchema, {
|
|
23351
|
+
kind: "mutation",
|
|
23352
|
+
auth: "admin"
|
|
23353
|
+
}), method(object({
|
|
23354
|
+
filter: RetrainExportFilterSchema,
|
|
23355
|
+
layout: RetrainExportLayoutSchema,
|
|
23356
|
+
target: RetrainArchiveTargetSchema
|
|
23357
|
+
}), RetrainArchiveResultSchema, {
|
|
23358
|
+
kind: "mutation",
|
|
23359
|
+
auth: "admin",
|
|
23360
|
+
timeoutMs: 60 * 6e4
|
|
23277
23361
|
}), method(object({
|
|
23278
23362
|
/** Which of the three event tables owns the row. */
|
|
23279
23363
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26603,7 +26687,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26603
26687
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26604
26688
|
* operator already consented to.
|
|
26605
26689
|
*/
|
|
26606
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26690
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26691
|
+
/**
|
|
26692
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26693
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26694
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26695
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26696
|
+
*/
|
|
26697
|
+
linkIntent: string$2().optional(),
|
|
26698
|
+
/**
|
|
26699
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26700
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26701
|
+
*/
|
|
26702
|
+
issuer: string$2().optional()
|
|
26607
26703
|
});
|
|
26608
26704
|
method(object({
|
|
26609
26705
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28538,7 +28634,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28538
28634
|
* field their hints were silently stripped by the schema and the
|
|
28539
28635
|
* adaptive ladder started blind on the client's display size.
|
|
28540
28636
|
*/
|
|
28541
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28637
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28638
|
+
/**
|
|
28639
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28640
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28641
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28642
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28643
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28644
|
+
*
|
|
28645
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28646
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28647
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28648
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28649
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28650
|
+
* flag must not become a second door to the camera's speaker.
|
|
28651
|
+
*/
|
|
28652
|
+
talkback: boolean().optional()
|
|
28542
28653
|
}), object({
|
|
28543
28654
|
sessionId: string$2(),
|
|
28544
28655
|
sdpAnswer: string$2()
|
|
@@ -38909,6 +39020,32 @@ var TotpStatusSchema = object({
|
|
|
38909
39020
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
38910
39021
|
confirmedAt: number().nullable()
|
|
38911
39022
|
});
|
|
39023
|
+
/**
|
|
39024
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39025
|
+
* and scoped tokens.
|
|
39026
|
+
*
|
|
39027
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39028
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39029
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39030
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39031
|
+
* provider.
|
|
39032
|
+
*/
|
|
39033
|
+
var ExternalIdentitySchema = object({
|
|
39034
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39035
|
+
provider: string$2(),
|
|
39036
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39037
|
+
subject: string$2(),
|
|
39038
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39039
|
+
issuer: string$2(),
|
|
39040
|
+
userId: string$2(),
|
|
39041
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39042
|
+
label: string$2().optional(),
|
|
39043
|
+
linkedAt: number()
|
|
39044
|
+
});
|
|
39045
|
+
var ExternalIdentityKeySchema = object({
|
|
39046
|
+
provider: string$2().min(1),
|
|
39047
|
+
subject: string$2().min(1)
|
|
39048
|
+
});
|
|
38912
39049
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
38913
39050
|
kind: "mutation",
|
|
38914
39051
|
auth: "admin",
|
|
@@ -39022,7 +39159,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39022
39159
|
userId: string$2(),
|
|
39023
39160
|
username: string$2(),
|
|
39024
39161
|
scopes: array(TokenScopeSchema)
|
|
39025
|
-
}).nullable(), { access: "view" }), method(
|
|
39162
|
+
}).nullable(), { access: "view" }), method(object({ userId: string$2() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39163
|
+
userId: string$2(),
|
|
39164
|
+
issuer: string$2()
|
|
39165
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39166
|
+
userId: string$2(),
|
|
39167
|
+
issuer: string$2().min(1),
|
|
39168
|
+
label: string$2().optional()
|
|
39169
|
+
}), object({ success: literal(true) }), {
|
|
39170
|
+
kind: "mutation",
|
|
39171
|
+
auth: "admin",
|
|
39172
|
+
access: "create"
|
|
39173
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string$2() }), object({ success: boolean() }), {
|
|
39174
|
+
kind: "mutation",
|
|
39175
|
+
auth: "admin",
|
|
39176
|
+
access: "delete"
|
|
39177
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string$2() }), object({ success: boolean() }), {
|
|
39026
39178
|
kind: "mutation",
|
|
39027
39179
|
auth: "admin",
|
|
39028
39180
|
access: "delete"
|
|
@@ -45662,6 +45814,12 @@ Object.freeze({
|
|
|
45662
45814
|
addonId: null,
|
|
45663
45815
|
access: "create"
|
|
45664
45816
|
},
|
|
45817
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45818
|
+
capName: "pipeline-analytics",
|
|
45819
|
+
capScope: "device",
|
|
45820
|
+
addonId: null,
|
|
45821
|
+
access: "create"
|
|
45822
|
+
},
|
|
45665
45823
|
"pipelineAnalytics.setTrackFlags": {
|
|
45666
45824
|
capName: "pipeline-analytics",
|
|
45667
45825
|
capScope: "device",
|
|
@@ -45698,6 +45856,12 @@ Object.freeze({
|
|
|
45698
45856
|
addonId: null,
|
|
45699
45857
|
access: "delete"
|
|
45700
45858
|
},
|
|
45859
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45860
|
+
capName: "pipeline-analytics",
|
|
45861
|
+
capScope: "device",
|
|
45862
|
+
addonId: null,
|
|
45863
|
+
access: "create"
|
|
45864
|
+
},
|
|
45701
45865
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45702
45866
|
capName: "pipeline-executor",
|
|
45703
45867
|
capScope: "system",
|
|
@@ -48050,18 +48214,36 @@ Object.freeze({
|
|
|
48050
48214
|
addonId: null,
|
|
48051
48215
|
access: "delete"
|
|
48052
48216
|
},
|
|
48217
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48218
|
+
capName: "user-management",
|
|
48219
|
+
capScope: "system",
|
|
48220
|
+
addonId: null,
|
|
48221
|
+
access: "view"
|
|
48222
|
+
},
|
|
48053
48223
|
"userManagement.getTotpStatus": {
|
|
48054
48224
|
capName: "user-management",
|
|
48055
48225
|
capScope: "system",
|
|
48056
48226
|
addonId: null,
|
|
48057
48227
|
access: "view"
|
|
48058
48228
|
},
|
|
48229
|
+
"userManagement.linkExternalIdentity": {
|
|
48230
|
+
capName: "user-management",
|
|
48231
|
+
capScope: "system",
|
|
48232
|
+
addonId: null,
|
|
48233
|
+
access: "create"
|
|
48234
|
+
},
|
|
48059
48235
|
"userManagement.listApiKeys": {
|
|
48060
48236
|
capName: "user-management",
|
|
48061
48237
|
capScope: "system",
|
|
48062
48238
|
addonId: null,
|
|
48063
48239
|
access: "view"
|
|
48064
48240
|
},
|
|
48241
|
+
"userManagement.listExternalIdentities": {
|
|
48242
|
+
capName: "user-management",
|
|
48243
|
+
capScope: "system",
|
|
48244
|
+
addonId: null,
|
|
48245
|
+
access: "view"
|
|
48246
|
+
},
|
|
48065
48247
|
"userManagement.listOauthSessions": {
|
|
48066
48248
|
capName: "user-management",
|
|
48067
48249
|
capScope: "system",
|
|
@@ -48140,6 +48322,12 @@ Object.freeze({
|
|
|
48140
48322
|
addonId: null,
|
|
48141
48323
|
access: "create"
|
|
48142
48324
|
},
|
|
48325
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48326
|
+
capName: "user-management",
|
|
48327
|
+
capScope: "system",
|
|
48328
|
+
addonId: null,
|
|
48329
|
+
access: "delete"
|
|
48330
|
+
},
|
|
48143
48331
|
"userManagement.updateUser": {
|
|
48144
48332
|
capName: "user-management",
|
|
48145
48333
|
capScope: "system",
|
|
@@ -51479,6 +51667,11 @@ Object.freeze({
|
|
|
51479
51667
|
form: "single",
|
|
51480
51668
|
optional: false
|
|
51481
51669
|
}],
|
|
51670
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51671
|
+
name: "deviceId",
|
|
51672
|
+
form: "single",
|
|
51673
|
+
optional: false
|
|
51674
|
+
}],
|
|
51482
51675
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51483
51676
|
name: "deviceId",
|
|
51484
51677
|
form: "single",
|
|
@@ -163477,11 +163670,11 @@ var MatterBrokerRegistry = class {
|
|
|
163477
163670
|
*/
|
|
163478
163671
|
var matterConnectionSchema = object({
|
|
163479
163672
|
/** Optional Thread operational dataset (hex) for Thread device onboarding. */
|
|
163480
|
-
threadDataset: string$2().default("").describe("Thread operational dataset (hex) — required only for Thread devices"),
|
|
163673
|
+
threadDataset: string$2().default("").describe("Thread operational dataset (hex) — required only for Thread devices").meta({ secret: true }),
|
|
163481
163674
|
/** Optional Wi-Fi SSID for Wi-Fi device onboarding over BLE. */
|
|
163482
163675
|
wifiSsid: string$2().default("").describe("Wi-Fi SSID — required only for BLE Wi-Fi onboarding"),
|
|
163483
163676
|
/** Optional Wi-Fi password for Wi-Fi device onboarding over BLE. */
|
|
163484
|
-
wifiPassword: string$2().default("").describe("Wi-Fi password (optional)"),
|
|
163677
|
+
wifiPassword: string$2().default("").describe("Wi-Fi password (optional)").meta({ secret: true }),
|
|
163485
163678
|
/** PULL-reconcile interval for the commissioned-node inventory. */
|
|
163486
163679
|
reconcileIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(3e5)).describe("Node-inventory reconcile interval (ms)")
|
|
163487
163680
|
});
|
|
@@ -163512,6 +163705,7 @@ function buildConnectionFormSchema() {
|
|
|
163512
163705
|
{
|
|
163513
163706
|
type: "text",
|
|
163514
163707
|
key: "threadDataset",
|
|
163708
|
+
secret: true,
|
|
163515
163709
|
label: "Thread operational dataset (hex, optional)",
|
|
163516
163710
|
placeholder: "0e08000000000001…"
|
|
163517
163711
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-matter-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.122",
|
|
4
4
|
"description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|