@camstack/addon-provider-rademacher 0.2.122 → 0.2.123
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 +202 -9
- package/dist/addon.mjs +202 -9
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -6355,7 +6355,7 @@ var ZodIssueCode = {
|
|
|
6355
6355
|
var ZodFirstPartyTypeKind;
|
|
6356
6356
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6357
6357
|
//#endregion
|
|
6358
|
-
//#region ../types/dist/sleep-
|
|
6358
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
6359
6359
|
/**
|
|
6360
6360
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6361
6361
|
* window to float samples (D455).
|
|
@@ -16177,6 +16177,10 @@ var DeviceInfoSchema = object({
|
|
|
16177
16177
|
isCamera: boolean(),
|
|
16178
16178
|
/** Current config values — serializable snapshot */
|
|
16179
16179
|
config: record(string(), unknown()),
|
|
16180
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
16181
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
16182
|
+
* when the owning runner has not reported them. */
|
|
16183
|
+
secretConfigPaths: array(string()).optional(),
|
|
16180
16184
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
16181
16185
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
16182
16186
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -16382,7 +16386,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
16382
16386
|
* call (workers re-register on init), so probe-driven updates
|
|
16383
16387
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
16384
16388
|
features: array(string()).optional(),
|
|
16385
|
-
config: record(string(), unknown())
|
|
16389
|
+
config: record(string(), unknown()),
|
|
16390
|
+
/** Config paths the device's own schema DECLARES secret
|
|
16391
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
16392
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
16393
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
16394
|
+
* omits it and the keyword backstop applies. */
|
|
16395
|
+
secretConfigPaths: array(string()).optional()
|
|
16386
16396
|
});
|
|
16387
16397
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
16388
16398
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -18041,7 +18051,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
18041
18051
|
icon: string().optional(),
|
|
18042
18052
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
18043
18053
|
startUrl: string(),
|
|
18044
|
-
stage: LoginStageEnum
|
|
18054
|
+
stage: LoginStageEnum,
|
|
18055
|
+
/**
|
|
18056
|
+
* The provider names an external identity a signed-in user can link to
|
|
18057
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
18058
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
18059
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
18060
|
+
*/
|
|
18061
|
+
linkable: boolean().optional()
|
|
18045
18062
|
}),
|
|
18046
18063
|
object({
|
|
18047
18064
|
kind: literal("widget"),
|
|
@@ -23476,7 +23493,13 @@ var RetrainFrameSchema = object({
|
|
|
23476
23493
|
sizeBytes: number().int(),
|
|
23477
23494
|
width: number().int(),
|
|
23478
23495
|
height: number().int(),
|
|
23479
|
-
copiedAt: number()
|
|
23496
|
+
copiedAt: number(),
|
|
23497
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
23498
|
+
capturedAt: number().optional(),
|
|
23499
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
23500
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
23501
|
+
* a false positive. */
|
|
23502
|
+
complete: boolean()
|
|
23480
23503
|
});
|
|
23481
23504
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
23482
23505
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -23497,6 +23520,51 @@ var RetrainFrameListSchema = object({
|
|
|
23497
23520
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
23498
23521
|
autoPickMediaId: number().int().optional()
|
|
23499
23522
|
});
|
|
23523
|
+
/**
|
|
23524
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
23525
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
23526
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
23527
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
23528
|
+
* export carried (`exportedInBatch`).
|
|
23529
|
+
*/
|
|
23530
|
+
var RetrainExportFilterSchema = object({
|
|
23531
|
+
deviceIds: array(number()).optional(),
|
|
23532
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
23533
|
+
batchId: string().optional(),
|
|
23534
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
23535
|
+
completeOnly: boolean().optional()
|
|
23536
|
+
});
|
|
23537
|
+
/**
|
|
23538
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
23539
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
23540
|
+
* convention — the classifier layout.
|
|
23541
|
+
*/
|
|
23542
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
23543
|
+
/**
|
|
23544
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
23545
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
23546
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
23547
|
+
* logged.
|
|
23548
|
+
*/
|
|
23549
|
+
var RetrainArchiveTargetSchema = object({
|
|
23550
|
+
kind: literal("http"),
|
|
23551
|
+
method: _enum(["PUT", "POST"]),
|
|
23552
|
+
url: string().url(),
|
|
23553
|
+
headers: record(string(), string()).optional()
|
|
23554
|
+
});
|
|
23555
|
+
var RetrainArchiveResultSchema = object({
|
|
23556
|
+
batchId: string(),
|
|
23557
|
+
frames: number().int(),
|
|
23558
|
+
crops: number().int(),
|
|
23559
|
+
annotations: number().int(),
|
|
23560
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
23561
|
+
missing: number().int(),
|
|
23562
|
+
bytes: number().int(),
|
|
23563
|
+
/** sha256 of the exact bytes sent. */
|
|
23564
|
+
sha256: string(),
|
|
23565
|
+
/** The target's HTTP status. */
|
|
23566
|
+
status: number().int()
|
|
23567
|
+
});
|
|
23500
23568
|
/** What the operator asked the assist to look for. */
|
|
23501
23569
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
23502
23570
|
kind: literal("package"),
|
|
@@ -24291,9 +24359,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24291
24359
|
}), RetrainTransitionResultSchema, {
|
|
24292
24360
|
kind: "mutation",
|
|
24293
24361
|
auth: "admin"
|
|
24294
|
-
}), method(
|
|
24362
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
24295
24363
|
kind: "query",
|
|
24296
24364
|
auth: "admin"
|
|
24365
|
+
}), method(object({
|
|
24366
|
+
deviceId: number(),
|
|
24367
|
+
trackId: string(),
|
|
24368
|
+
frameId: string(),
|
|
24369
|
+
complete: boolean()
|
|
24370
|
+
}), RetrainFrameSchema, {
|
|
24371
|
+
kind: "mutation",
|
|
24372
|
+
auth: "admin"
|
|
24373
|
+
}), method(object({
|
|
24374
|
+
filter: RetrainExportFilterSchema,
|
|
24375
|
+
layout: RetrainExportLayoutSchema,
|
|
24376
|
+
target: RetrainArchiveTargetSchema
|
|
24377
|
+
}), RetrainArchiveResultSchema, {
|
|
24378
|
+
kind: "mutation",
|
|
24379
|
+
auth: "admin",
|
|
24380
|
+
timeoutMs: 60 * 6e4
|
|
24297
24381
|
}), method(object({
|
|
24298
24382
|
/** Which of the three event tables owns the row. */
|
|
24299
24383
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -27623,7 +27707,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
27623
27707
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
27624
27708
|
* operator already consented to.
|
|
27625
27709
|
*/
|
|
27626
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
27710
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
27711
|
+
/**
|
|
27712
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
27713
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
27714
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
27715
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
27716
|
+
*/
|
|
27717
|
+
linkIntent: string().optional(),
|
|
27718
|
+
/**
|
|
27719
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
27720
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
27721
|
+
*/
|
|
27722
|
+
issuer: string().optional()
|
|
27627
27723
|
});
|
|
27628
27724
|
method(object({
|
|
27629
27725
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -29558,7 +29654,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
29558
29654
|
* field their hints were silently stripped by the schema and the
|
|
29559
29655
|
* adaptive ladder started blind on the client's display size.
|
|
29560
29656
|
*/
|
|
29561
|
-
hints: webrtcClientHintsSchema.optional()
|
|
29657
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
29658
|
+
/**
|
|
29659
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
29660
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
29661
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
29662
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
29663
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
29664
|
+
*
|
|
29665
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
29666
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
29667
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
29668
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
29669
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
29670
|
+
* flag must not become a second door to the camera's speaker.
|
|
29671
|
+
*/
|
|
29672
|
+
talkback: boolean().optional()
|
|
29562
29673
|
}), object({
|
|
29563
29674
|
sessionId: string(),
|
|
29564
29675
|
sdpAnswer: string()
|
|
@@ -39912,6 +40023,32 @@ var TotpStatusSchema = object({
|
|
|
39912
40023
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
39913
40024
|
confirmedAt: number().nullable()
|
|
39914
40025
|
});
|
|
40026
|
+
/**
|
|
40027
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
40028
|
+
* and scoped tokens.
|
|
40029
|
+
*
|
|
40030
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
40031
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
40032
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
40033
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
40034
|
+
* provider.
|
|
40035
|
+
*/
|
|
40036
|
+
var ExternalIdentitySchema = object({
|
|
40037
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
40038
|
+
provider: string(),
|
|
40039
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
40040
|
+
subject: string(),
|
|
40041
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
40042
|
+
issuer: string(),
|
|
40043
|
+
userId: string(),
|
|
40044
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
40045
|
+
label: string().optional(),
|
|
40046
|
+
linkedAt: number()
|
|
40047
|
+
});
|
|
40048
|
+
var ExternalIdentityKeySchema = object({
|
|
40049
|
+
provider: string().min(1),
|
|
40050
|
+
subject: string().min(1)
|
|
40051
|
+
});
|
|
39915
40052
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
39916
40053
|
kind: "mutation",
|
|
39917
40054
|
auth: "admin",
|
|
@@ -40025,7 +40162,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
40025
40162
|
userId: string(),
|
|
40026
40163
|
username: string(),
|
|
40027
40164
|
scopes: array(TokenScopeSchema)
|
|
40028
|
-
}).nullable(), { access: "view" }), method(
|
|
40165
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
40166
|
+
userId: string(),
|
|
40167
|
+
issuer: string()
|
|
40168
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
40169
|
+
userId: string(),
|
|
40170
|
+
issuer: string().min(1),
|
|
40171
|
+
label: string().optional()
|
|
40172
|
+
}), object({ success: literal(true) }), {
|
|
40173
|
+
kind: "mutation",
|
|
40174
|
+
auth: "admin",
|
|
40175
|
+
access: "create"
|
|
40176
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
40177
|
+
kind: "mutation",
|
|
40178
|
+
auth: "admin",
|
|
40179
|
+
access: "delete"
|
|
40180
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
40029
40181
|
kind: "mutation",
|
|
40030
40182
|
auth: "admin",
|
|
40031
40183
|
access: "delete"
|
|
@@ -46665,6 +46817,12 @@ Object.freeze({
|
|
|
46665
46817
|
addonId: null,
|
|
46666
46818
|
access: "create"
|
|
46667
46819
|
},
|
|
46820
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
46821
|
+
capName: "pipeline-analytics",
|
|
46822
|
+
capScope: "device",
|
|
46823
|
+
addonId: null,
|
|
46824
|
+
access: "create"
|
|
46825
|
+
},
|
|
46668
46826
|
"pipelineAnalytics.setTrackFlags": {
|
|
46669
46827
|
capName: "pipeline-analytics",
|
|
46670
46828
|
capScope: "device",
|
|
@@ -46701,6 +46859,12 @@ Object.freeze({
|
|
|
46701
46859
|
addonId: null,
|
|
46702
46860
|
access: "delete"
|
|
46703
46861
|
},
|
|
46862
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
46863
|
+
capName: "pipeline-analytics",
|
|
46864
|
+
capScope: "device",
|
|
46865
|
+
addonId: null,
|
|
46866
|
+
access: "create"
|
|
46867
|
+
},
|
|
46704
46868
|
"pipelineExecutor.cacheFrameInPool": {
|
|
46705
46869
|
capName: "pipeline-executor",
|
|
46706
46870
|
capScope: "system",
|
|
@@ -49053,18 +49217,36 @@ Object.freeze({
|
|
|
49053
49217
|
addonId: null,
|
|
49054
49218
|
access: "delete"
|
|
49055
49219
|
},
|
|
49220
|
+
"userManagement.findUserByExternalIdentity": {
|
|
49221
|
+
capName: "user-management",
|
|
49222
|
+
capScope: "system",
|
|
49223
|
+
addonId: null,
|
|
49224
|
+
access: "view"
|
|
49225
|
+
},
|
|
49056
49226
|
"userManagement.getTotpStatus": {
|
|
49057
49227
|
capName: "user-management",
|
|
49058
49228
|
capScope: "system",
|
|
49059
49229
|
addonId: null,
|
|
49060
49230
|
access: "view"
|
|
49061
49231
|
},
|
|
49232
|
+
"userManagement.linkExternalIdentity": {
|
|
49233
|
+
capName: "user-management",
|
|
49234
|
+
capScope: "system",
|
|
49235
|
+
addonId: null,
|
|
49236
|
+
access: "create"
|
|
49237
|
+
},
|
|
49062
49238
|
"userManagement.listApiKeys": {
|
|
49063
49239
|
capName: "user-management",
|
|
49064
49240
|
capScope: "system",
|
|
49065
49241
|
addonId: null,
|
|
49066
49242
|
access: "view"
|
|
49067
49243
|
},
|
|
49244
|
+
"userManagement.listExternalIdentities": {
|
|
49245
|
+
capName: "user-management",
|
|
49246
|
+
capScope: "system",
|
|
49247
|
+
addonId: null,
|
|
49248
|
+
access: "view"
|
|
49249
|
+
},
|
|
49068
49250
|
"userManagement.listOauthSessions": {
|
|
49069
49251
|
capName: "user-management",
|
|
49070
49252
|
capScope: "system",
|
|
@@ -49143,6 +49325,12 @@ Object.freeze({
|
|
|
49143
49325
|
addonId: null,
|
|
49144
49326
|
access: "create"
|
|
49145
49327
|
},
|
|
49328
|
+
"userManagement.unlinkExternalIdentity": {
|
|
49329
|
+
capName: "user-management",
|
|
49330
|
+
capScope: "system",
|
|
49331
|
+
addonId: null,
|
|
49332
|
+
access: "delete"
|
|
49333
|
+
},
|
|
49146
49334
|
"userManagement.updateUser": {
|
|
49147
49335
|
capName: "user-management",
|
|
49148
49336
|
capScope: "system",
|
|
@@ -52482,6 +52670,11 @@ Object.freeze({
|
|
|
52482
52670
|
form: "single",
|
|
52483
52671
|
optional: false
|
|
52484
52672
|
}],
|
|
52673
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
52674
|
+
name: "deviceId",
|
|
52675
|
+
form: "single",
|
|
52676
|
+
optional: false
|
|
52677
|
+
}],
|
|
52485
52678
|
"pipelineAnalytics.setTrackFlags": [{
|
|
52486
52679
|
name: "deviceId",
|
|
52487
52680
|
form: "single",
|
|
@@ -54543,7 +54736,7 @@ var MB = 1024 * 1024;
|
|
|
54543
54736
|
*/
|
|
54544
54737
|
var rademacherConnectionSchema = object({
|
|
54545
54738
|
host: string().min(1).describe("HomePilot hub host name or IP address"),
|
|
54546
|
-
password: string().default("").describe("Hub password (leave blank for an unprotected hub)"),
|
|
54739
|
+
password: string().default("").describe("Hub password (leave blank for an unprotected hub)").meta({ secret: true }),
|
|
54547
54740
|
basePath: string().default("").describe("API base path override (blank = auto-probe: v1 \"\" / v2 \"/hp\")"),
|
|
54548
54741
|
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(2e3).max(36e5).default(3e4)).describe("Device-state poll interval (ms)")
|
|
54549
54742
|
});
|
package/dist/addon.mjs
CHANGED
|
@@ -6354,7 +6354,7 @@ var ZodIssueCode = {
|
|
|
6354
6354
|
var ZodFirstPartyTypeKind;
|
|
6355
6355
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6356
6356
|
//#endregion
|
|
6357
|
-
//#region ../types/dist/sleep-
|
|
6357
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
6358
6358
|
/**
|
|
6359
6359
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6360
6360
|
* window to float samples (D455).
|
|
@@ -16176,6 +16176,10 @@ var DeviceInfoSchema = object({
|
|
|
16176
16176
|
isCamera: boolean(),
|
|
16177
16177
|
/** Current config values — serializable snapshot */
|
|
16178
16178
|
config: record(string(), unknown()),
|
|
16179
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
16180
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
16181
|
+
* when the owning runner has not reported them. */
|
|
16182
|
+
secretConfigPaths: array(string()).optional(),
|
|
16179
16183
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
16180
16184
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
16181
16185
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -16381,7 +16385,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
16381
16385
|
* call (workers re-register on init), so probe-driven updates
|
|
16382
16386
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
16383
16387
|
features: array(string()).optional(),
|
|
16384
|
-
config: record(string(), unknown())
|
|
16388
|
+
config: record(string(), unknown()),
|
|
16389
|
+
/** Config paths the device's own schema DECLARES secret
|
|
16390
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
16391
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
16392
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
16393
|
+
* omits it and the keyword backstop applies. */
|
|
16394
|
+
secretConfigPaths: array(string()).optional()
|
|
16385
16395
|
});
|
|
16386
16396
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
16387
16397
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -18040,7 +18050,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
18040
18050
|
icon: string().optional(),
|
|
18041
18051
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
18042
18052
|
startUrl: string(),
|
|
18043
|
-
stage: LoginStageEnum
|
|
18053
|
+
stage: LoginStageEnum,
|
|
18054
|
+
/**
|
|
18055
|
+
* The provider names an external identity a signed-in user can link to
|
|
18056
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
18057
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
18058
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
18059
|
+
*/
|
|
18060
|
+
linkable: boolean().optional()
|
|
18044
18061
|
}),
|
|
18045
18062
|
object({
|
|
18046
18063
|
kind: literal("widget"),
|
|
@@ -23475,7 +23492,13 @@ var RetrainFrameSchema = object({
|
|
|
23475
23492
|
sizeBytes: number().int(),
|
|
23476
23493
|
width: number().int(),
|
|
23477
23494
|
height: number().int(),
|
|
23478
|
-
copiedAt: number()
|
|
23495
|
+
copiedAt: number(),
|
|
23496
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
23497
|
+
capturedAt: number().optional(),
|
|
23498
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
23499
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
23500
|
+
* a false positive. */
|
|
23501
|
+
complete: boolean()
|
|
23479
23502
|
});
|
|
23480
23503
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
23481
23504
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -23496,6 +23519,51 @@ var RetrainFrameListSchema = object({
|
|
|
23496
23519
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
23497
23520
|
autoPickMediaId: number().int().optional()
|
|
23498
23521
|
});
|
|
23522
|
+
/**
|
|
23523
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
23524
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
23525
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
23526
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
23527
|
+
* export carried (`exportedInBatch`).
|
|
23528
|
+
*/
|
|
23529
|
+
var RetrainExportFilterSchema = object({
|
|
23530
|
+
deviceIds: array(number()).optional(),
|
|
23531
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
23532
|
+
batchId: string().optional(),
|
|
23533
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
23534
|
+
completeOnly: boolean().optional()
|
|
23535
|
+
});
|
|
23536
|
+
/**
|
|
23537
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
23538
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
23539
|
+
* convention — the classifier layout.
|
|
23540
|
+
*/
|
|
23541
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
23542
|
+
/**
|
|
23543
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
23544
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
23545
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
23546
|
+
* logged.
|
|
23547
|
+
*/
|
|
23548
|
+
var RetrainArchiveTargetSchema = object({
|
|
23549
|
+
kind: literal("http"),
|
|
23550
|
+
method: _enum(["PUT", "POST"]),
|
|
23551
|
+
url: string().url(),
|
|
23552
|
+
headers: record(string(), string()).optional()
|
|
23553
|
+
});
|
|
23554
|
+
var RetrainArchiveResultSchema = object({
|
|
23555
|
+
batchId: string(),
|
|
23556
|
+
frames: number().int(),
|
|
23557
|
+
crops: number().int(),
|
|
23558
|
+
annotations: number().int(),
|
|
23559
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
23560
|
+
missing: number().int(),
|
|
23561
|
+
bytes: number().int(),
|
|
23562
|
+
/** sha256 of the exact bytes sent. */
|
|
23563
|
+
sha256: string(),
|
|
23564
|
+
/** The target's HTTP status. */
|
|
23565
|
+
status: number().int()
|
|
23566
|
+
});
|
|
23499
23567
|
/** What the operator asked the assist to look for. */
|
|
23500
23568
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
23501
23569
|
kind: literal("package"),
|
|
@@ -24290,9 +24358,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24290
24358
|
}), RetrainTransitionResultSchema, {
|
|
24291
24359
|
kind: "mutation",
|
|
24292
24360
|
auth: "admin"
|
|
24293
|
-
}), method(
|
|
24361
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
24294
24362
|
kind: "query",
|
|
24295
24363
|
auth: "admin"
|
|
24364
|
+
}), method(object({
|
|
24365
|
+
deviceId: number(),
|
|
24366
|
+
trackId: string(),
|
|
24367
|
+
frameId: string(),
|
|
24368
|
+
complete: boolean()
|
|
24369
|
+
}), RetrainFrameSchema, {
|
|
24370
|
+
kind: "mutation",
|
|
24371
|
+
auth: "admin"
|
|
24372
|
+
}), method(object({
|
|
24373
|
+
filter: RetrainExportFilterSchema,
|
|
24374
|
+
layout: RetrainExportLayoutSchema,
|
|
24375
|
+
target: RetrainArchiveTargetSchema
|
|
24376
|
+
}), RetrainArchiveResultSchema, {
|
|
24377
|
+
kind: "mutation",
|
|
24378
|
+
auth: "admin",
|
|
24379
|
+
timeoutMs: 60 * 6e4
|
|
24296
24380
|
}), method(object({
|
|
24297
24381
|
/** Which of the three event tables owns the row. */
|
|
24298
24382
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -27622,7 +27706,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
27622
27706
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
27623
27707
|
* operator already consented to.
|
|
27624
27708
|
*/
|
|
27625
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
27709
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
27710
|
+
/**
|
|
27711
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
27712
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
27713
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
27714
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
27715
|
+
*/
|
|
27716
|
+
linkIntent: string().optional(),
|
|
27717
|
+
/**
|
|
27718
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
27719
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
27720
|
+
*/
|
|
27721
|
+
issuer: string().optional()
|
|
27626
27722
|
});
|
|
27627
27723
|
method(object({
|
|
27628
27724
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -29557,7 +29653,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
29557
29653
|
* field their hints were silently stripped by the schema and the
|
|
29558
29654
|
* adaptive ladder started blind on the client's display size.
|
|
29559
29655
|
*/
|
|
29560
|
-
hints: webrtcClientHintsSchema.optional()
|
|
29656
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
29657
|
+
/**
|
|
29658
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
29659
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
29660
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
29661
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
29662
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
29663
|
+
*
|
|
29664
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
29665
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
29666
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
29667
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
29668
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
29669
|
+
* flag must not become a second door to the camera's speaker.
|
|
29670
|
+
*/
|
|
29671
|
+
talkback: boolean().optional()
|
|
29561
29672
|
}), object({
|
|
29562
29673
|
sessionId: string(),
|
|
29563
29674
|
sdpAnswer: string()
|
|
@@ -39911,6 +40022,32 @@ var TotpStatusSchema = object({
|
|
|
39911
40022
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
39912
40023
|
confirmedAt: number().nullable()
|
|
39913
40024
|
});
|
|
40025
|
+
/**
|
|
40026
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
40027
|
+
* and scoped tokens.
|
|
40028
|
+
*
|
|
40029
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
40030
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
40031
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
40032
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
40033
|
+
* provider.
|
|
40034
|
+
*/
|
|
40035
|
+
var ExternalIdentitySchema = object({
|
|
40036
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
40037
|
+
provider: string(),
|
|
40038
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
40039
|
+
subject: string(),
|
|
40040
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
40041
|
+
issuer: string(),
|
|
40042
|
+
userId: string(),
|
|
40043
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
40044
|
+
label: string().optional(),
|
|
40045
|
+
linkedAt: number()
|
|
40046
|
+
});
|
|
40047
|
+
var ExternalIdentityKeySchema = object({
|
|
40048
|
+
provider: string().min(1),
|
|
40049
|
+
subject: string().min(1)
|
|
40050
|
+
});
|
|
39914
40051
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
39915
40052
|
kind: "mutation",
|
|
39916
40053
|
auth: "admin",
|
|
@@ -40024,7 +40161,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
40024
40161
|
userId: string(),
|
|
40025
40162
|
username: string(),
|
|
40026
40163
|
scopes: array(TokenScopeSchema)
|
|
40027
|
-
}).nullable(), { access: "view" }), method(
|
|
40164
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
40165
|
+
userId: string(),
|
|
40166
|
+
issuer: string()
|
|
40167
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
40168
|
+
userId: string(),
|
|
40169
|
+
issuer: string().min(1),
|
|
40170
|
+
label: string().optional()
|
|
40171
|
+
}), object({ success: literal(true) }), {
|
|
40172
|
+
kind: "mutation",
|
|
40173
|
+
auth: "admin",
|
|
40174
|
+
access: "create"
|
|
40175
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
40176
|
+
kind: "mutation",
|
|
40177
|
+
auth: "admin",
|
|
40178
|
+
access: "delete"
|
|
40179
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
40028
40180
|
kind: "mutation",
|
|
40029
40181
|
auth: "admin",
|
|
40030
40182
|
access: "delete"
|
|
@@ -46664,6 +46816,12 @@ Object.freeze({
|
|
|
46664
46816
|
addonId: null,
|
|
46665
46817
|
access: "create"
|
|
46666
46818
|
},
|
|
46819
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
46820
|
+
capName: "pipeline-analytics",
|
|
46821
|
+
capScope: "device",
|
|
46822
|
+
addonId: null,
|
|
46823
|
+
access: "create"
|
|
46824
|
+
},
|
|
46667
46825
|
"pipelineAnalytics.setTrackFlags": {
|
|
46668
46826
|
capName: "pipeline-analytics",
|
|
46669
46827
|
capScope: "device",
|
|
@@ -46700,6 +46858,12 @@ Object.freeze({
|
|
|
46700
46858
|
addonId: null,
|
|
46701
46859
|
access: "delete"
|
|
46702
46860
|
},
|
|
46861
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
46862
|
+
capName: "pipeline-analytics",
|
|
46863
|
+
capScope: "device",
|
|
46864
|
+
addonId: null,
|
|
46865
|
+
access: "create"
|
|
46866
|
+
},
|
|
46703
46867
|
"pipelineExecutor.cacheFrameInPool": {
|
|
46704
46868
|
capName: "pipeline-executor",
|
|
46705
46869
|
capScope: "system",
|
|
@@ -49052,18 +49216,36 @@ Object.freeze({
|
|
|
49052
49216
|
addonId: null,
|
|
49053
49217
|
access: "delete"
|
|
49054
49218
|
},
|
|
49219
|
+
"userManagement.findUserByExternalIdentity": {
|
|
49220
|
+
capName: "user-management",
|
|
49221
|
+
capScope: "system",
|
|
49222
|
+
addonId: null,
|
|
49223
|
+
access: "view"
|
|
49224
|
+
},
|
|
49055
49225
|
"userManagement.getTotpStatus": {
|
|
49056
49226
|
capName: "user-management",
|
|
49057
49227
|
capScope: "system",
|
|
49058
49228
|
addonId: null,
|
|
49059
49229
|
access: "view"
|
|
49060
49230
|
},
|
|
49231
|
+
"userManagement.linkExternalIdentity": {
|
|
49232
|
+
capName: "user-management",
|
|
49233
|
+
capScope: "system",
|
|
49234
|
+
addonId: null,
|
|
49235
|
+
access: "create"
|
|
49236
|
+
},
|
|
49061
49237
|
"userManagement.listApiKeys": {
|
|
49062
49238
|
capName: "user-management",
|
|
49063
49239
|
capScope: "system",
|
|
49064
49240
|
addonId: null,
|
|
49065
49241
|
access: "view"
|
|
49066
49242
|
},
|
|
49243
|
+
"userManagement.listExternalIdentities": {
|
|
49244
|
+
capName: "user-management",
|
|
49245
|
+
capScope: "system",
|
|
49246
|
+
addonId: null,
|
|
49247
|
+
access: "view"
|
|
49248
|
+
},
|
|
49067
49249
|
"userManagement.listOauthSessions": {
|
|
49068
49250
|
capName: "user-management",
|
|
49069
49251
|
capScope: "system",
|
|
@@ -49142,6 +49324,12 @@ Object.freeze({
|
|
|
49142
49324
|
addonId: null,
|
|
49143
49325
|
access: "create"
|
|
49144
49326
|
},
|
|
49327
|
+
"userManagement.unlinkExternalIdentity": {
|
|
49328
|
+
capName: "user-management",
|
|
49329
|
+
capScope: "system",
|
|
49330
|
+
addonId: null,
|
|
49331
|
+
access: "delete"
|
|
49332
|
+
},
|
|
49145
49333
|
"userManagement.updateUser": {
|
|
49146
49334
|
capName: "user-management",
|
|
49147
49335
|
capScope: "system",
|
|
@@ -52481,6 +52669,11 @@ Object.freeze({
|
|
|
52481
52669
|
form: "single",
|
|
52482
52670
|
optional: false
|
|
52483
52671
|
}],
|
|
52672
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
52673
|
+
name: "deviceId",
|
|
52674
|
+
form: "single",
|
|
52675
|
+
optional: false
|
|
52676
|
+
}],
|
|
52484
52677
|
"pipelineAnalytics.setTrackFlags": [{
|
|
52485
52678
|
name: "deviceId",
|
|
52486
52679
|
form: "single",
|
|
@@ -54542,7 +54735,7 @@ var MB = 1024 * 1024;
|
|
|
54542
54735
|
*/
|
|
54543
54736
|
var rademacherConnectionSchema = object({
|
|
54544
54737
|
host: string().min(1).describe("HomePilot hub host name or IP address"),
|
|
54545
|
-
password: string().default("").describe("Hub password (leave blank for an unprotected hub)"),
|
|
54738
|
+
password: string().default("").describe("Hub password (leave blank for an unprotected hub)").meta({ secret: true }),
|
|
54546
54739
|
basePath: string().default("").describe("API base path override (blank = auto-probe: v1 \"\" / v2 \"/hp\")"),
|
|
54547
54740
|
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(2e3).max(36e5).default(3e4)).describe("Device-state poll interval (ms)")
|
|
54548
54741
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.123",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|