@camstack/addon-provider-homematic 1.2.128 → 1.2.129
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
|
@@ -5379,7 +5379,7 @@ var ZodIssueCode = {
|
|
|
5379
5379
|
var ZodFirstPartyTypeKind;
|
|
5380
5380
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5381
5381
|
//#endregion
|
|
5382
|
-
//#region ../types/dist/sleep-
|
|
5382
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5383
5383
|
/**
|
|
5384
5384
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5385
5385
|
* window to float samples (D455).
|
|
@@ -15267,6 +15267,10 @@ var DeviceInfoSchema = object({
|
|
|
15267
15267
|
isCamera: boolean(),
|
|
15268
15268
|
/** Current config values — serializable snapshot */
|
|
15269
15269
|
config: record(string(), unknown()),
|
|
15270
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15271
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15272
|
+
* when the owning runner has not reported them. */
|
|
15273
|
+
secretConfigPaths: array(string()).optional(),
|
|
15270
15274
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15271
15275
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15272
15276
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -15472,7 +15476,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15472
15476
|
* call (workers re-register on init), so probe-driven updates
|
|
15473
15477
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15474
15478
|
features: array(string()).optional(),
|
|
15475
|
-
config: record(string(), unknown())
|
|
15479
|
+
config: record(string(), unknown()),
|
|
15480
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15481
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15482
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15483
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15484
|
+
* omits it and the keyword backstop applies. */
|
|
15485
|
+
secretConfigPaths: array(string()).optional()
|
|
15476
15486
|
});
|
|
15477
15487
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15478
15488
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -17131,7 +17141,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17131
17141
|
icon: string().optional(),
|
|
17132
17142
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17133
17143
|
startUrl: string(),
|
|
17134
|
-
stage: LoginStageEnum
|
|
17144
|
+
stage: LoginStageEnum,
|
|
17145
|
+
/**
|
|
17146
|
+
* The provider names an external identity a signed-in user can link to
|
|
17147
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17148
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17149
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17150
|
+
*/
|
|
17151
|
+
linkable: boolean().optional()
|
|
17135
17152
|
}),
|
|
17136
17153
|
object({
|
|
17137
17154
|
kind: literal("widget"),
|
|
@@ -22566,7 +22583,13 @@ var RetrainFrameSchema = object({
|
|
|
22566
22583
|
sizeBytes: number().int(),
|
|
22567
22584
|
width: number().int(),
|
|
22568
22585
|
height: number().int(),
|
|
22569
|
-
copiedAt: number()
|
|
22586
|
+
copiedAt: number(),
|
|
22587
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22588
|
+
capturedAt: number().optional(),
|
|
22589
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22590
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22591
|
+
* a false positive. */
|
|
22592
|
+
complete: boolean()
|
|
22570
22593
|
});
|
|
22571
22594
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22572
22595
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22587,6 +22610,51 @@ var RetrainFrameListSchema = object({
|
|
|
22587
22610
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22588
22611
|
autoPickMediaId: number().int().optional()
|
|
22589
22612
|
});
|
|
22613
|
+
/**
|
|
22614
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22615
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22616
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22617
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22618
|
+
* export carried (`exportedInBatch`).
|
|
22619
|
+
*/
|
|
22620
|
+
var RetrainExportFilterSchema = object({
|
|
22621
|
+
deviceIds: array(number()).optional(),
|
|
22622
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
22623
|
+
batchId: string().optional(),
|
|
22624
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22625
|
+
completeOnly: boolean().optional()
|
|
22626
|
+
});
|
|
22627
|
+
/**
|
|
22628
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22629
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22630
|
+
* convention — the classifier layout.
|
|
22631
|
+
*/
|
|
22632
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22633
|
+
/**
|
|
22634
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22635
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22636
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22637
|
+
* logged.
|
|
22638
|
+
*/
|
|
22639
|
+
var RetrainArchiveTargetSchema = object({
|
|
22640
|
+
kind: literal("http"),
|
|
22641
|
+
method: _enum(["PUT", "POST"]),
|
|
22642
|
+
url: string().url(),
|
|
22643
|
+
headers: record(string(), string()).optional()
|
|
22644
|
+
});
|
|
22645
|
+
var RetrainArchiveResultSchema = object({
|
|
22646
|
+
batchId: string(),
|
|
22647
|
+
frames: number().int(),
|
|
22648
|
+
crops: number().int(),
|
|
22649
|
+
annotations: number().int(),
|
|
22650
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22651
|
+
missing: number().int(),
|
|
22652
|
+
bytes: number().int(),
|
|
22653
|
+
/** sha256 of the exact bytes sent. */
|
|
22654
|
+
sha256: string(),
|
|
22655
|
+
/** The target's HTTP status. */
|
|
22656
|
+
status: number().int()
|
|
22657
|
+
});
|
|
22590
22658
|
/** What the operator asked the assist to look for. */
|
|
22591
22659
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22592
22660
|
kind: literal("package"),
|
|
@@ -23381,9 +23449,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23381
23449
|
}), RetrainTransitionResultSchema, {
|
|
23382
23450
|
kind: "mutation",
|
|
23383
23451
|
auth: "admin"
|
|
23384
|
-
}), method(
|
|
23452
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
23385
23453
|
kind: "query",
|
|
23386
23454
|
auth: "admin"
|
|
23455
|
+
}), method(object({
|
|
23456
|
+
deviceId: number(),
|
|
23457
|
+
trackId: string(),
|
|
23458
|
+
frameId: string(),
|
|
23459
|
+
complete: boolean()
|
|
23460
|
+
}), RetrainFrameSchema, {
|
|
23461
|
+
kind: "mutation",
|
|
23462
|
+
auth: "admin"
|
|
23463
|
+
}), method(object({
|
|
23464
|
+
filter: RetrainExportFilterSchema,
|
|
23465
|
+
layout: RetrainExportLayoutSchema,
|
|
23466
|
+
target: RetrainArchiveTargetSchema
|
|
23467
|
+
}), RetrainArchiveResultSchema, {
|
|
23468
|
+
kind: "mutation",
|
|
23469
|
+
auth: "admin",
|
|
23470
|
+
timeoutMs: 60 * 6e4
|
|
23387
23471
|
}), method(object({
|
|
23388
23472
|
/** Which of the three event tables owns the row. */
|
|
23389
23473
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26713,7 +26797,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26713
26797
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26714
26798
|
* operator already consented to.
|
|
26715
26799
|
*/
|
|
26716
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26800
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26801
|
+
/**
|
|
26802
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26803
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26804
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26805
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26806
|
+
*/
|
|
26807
|
+
linkIntent: string().optional(),
|
|
26808
|
+
/**
|
|
26809
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26810
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26811
|
+
*/
|
|
26812
|
+
issuer: string().optional()
|
|
26717
26813
|
});
|
|
26718
26814
|
method(object({
|
|
26719
26815
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28648,7 +28744,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28648
28744
|
* field their hints were silently stripped by the schema and the
|
|
28649
28745
|
* adaptive ladder started blind on the client's display size.
|
|
28650
28746
|
*/
|
|
28651
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28747
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28748
|
+
/**
|
|
28749
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28750
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28751
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28752
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28753
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28754
|
+
*
|
|
28755
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28756
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28757
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28758
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28759
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28760
|
+
* flag must not become a second door to the camera's speaker.
|
|
28761
|
+
*/
|
|
28762
|
+
talkback: boolean().optional()
|
|
28652
28763
|
}), object({
|
|
28653
28764
|
sessionId: string(),
|
|
28654
28765
|
sdpAnswer: string()
|
|
@@ -39002,6 +39113,32 @@ var TotpStatusSchema = object({
|
|
|
39002
39113
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
39003
39114
|
confirmedAt: number().nullable()
|
|
39004
39115
|
});
|
|
39116
|
+
/**
|
|
39117
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39118
|
+
* and scoped tokens.
|
|
39119
|
+
*
|
|
39120
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39121
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39122
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39123
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39124
|
+
* provider.
|
|
39125
|
+
*/
|
|
39126
|
+
var ExternalIdentitySchema = object({
|
|
39127
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39128
|
+
provider: string(),
|
|
39129
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39130
|
+
subject: string(),
|
|
39131
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39132
|
+
issuer: string(),
|
|
39133
|
+
userId: string(),
|
|
39134
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39135
|
+
label: string().optional(),
|
|
39136
|
+
linkedAt: number()
|
|
39137
|
+
});
|
|
39138
|
+
var ExternalIdentityKeySchema = object({
|
|
39139
|
+
provider: string().min(1),
|
|
39140
|
+
subject: string().min(1)
|
|
39141
|
+
});
|
|
39005
39142
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
39006
39143
|
kind: "mutation",
|
|
39007
39144
|
auth: "admin",
|
|
@@ -39115,7 +39252,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39115
39252
|
userId: string(),
|
|
39116
39253
|
username: string(),
|
|
39117
39254
|
scopes: array(TokenScopeSchema)
|
|
39118
|
-
}).nullable(), { access: "view" }), method(
|
|
39255
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39256
|
+
userId: string(),
|
|
39257
|
+
issuer: string()
|
|
39258
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39259
|
+
userId: string(),
|
|
39260
|
+
issuer: string().min(1),
|
|
39261
|
+
label: string().optional()
|
|
39262
|
+
}), object({ success: literal(true) }), {
|
|
39263
|
+
kind: "mutation",
|
|
39264
|
+
auth: "admin",
|
|
39265
|
+
access: "create"
|
|
39266
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
39267
|
+
kind: "mutation",
|
|
39268
|
+
auth: "admin",
|
|
39269
|
+
access: "delete"
|
|
39270
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
39119
39271
|
kind: "mutation",
|
|
39120
39272
|
auth: "admin",
|
|
39121
39273
|
access: "delete"
|
|
@@ -45755,6 +45907,12 @@ Object.freeze({
|
|
|
45755
45907
|
addonId: null,
|
|
45756
45908
|
access: "create"
|
|
45757
45909
|
},
|
|
45910
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45911
|
+
capName: "pipeline-analytics",
|
|
45912
|
+
capScope: "device",
|
|
45913
|
+
addonId: null,
|
|
45914
|
+
access: "create"
|
|
45915
|
+
},
|
|
45758
45916
|
"pipelineAnalytics.setTrackFlags": {
|
|
45759
45917
|
capName: "pipeline-analytics",
|
|
45760
45918
|
capScope: "device",
|
|
@@ -45791,6 +45949,12 @@ Object.freeze({
|
|
|
45791
45949
|
addonId: null,
|
|
45792
45950
|
access: "delete"
|
|
45793
45951
|
},
|
|
45952
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45953
|
+
capName: "pipeline-analytics",
|
|
45954
|
+
capScope: "device",
|
|
45955
|
+
addonId: null,
|
|
45956
|
+
access: "create"
|
|
45957
|
+
},
|
|
45794
45958
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45795
45959
|
capName: "pipeline-executor",
|
|
45796
45960
|
capScope: "system",
|
|
@@ -48143,18 +48307,36 @@ Object.freeze({
|
|
|
48143
48307
|
addonId: null,
|
|
48144
48308
|
access: "delete"
|
|
48145
48309
|
},
|
|
48310
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48311
|
+
capName: "user-management",
|
|
48312
|
+
capScope: "system",
|
|
48313
|
+
addonId: null,
|
|
48314
|
+
access: "view"
|
|
48315
|
+
},
|
|
48146
48316
|
"userManagement.getTotpStatus": {
|
|
48147
48317
|
capName: "user-management",
|
|
48148
48318
|
capScope: "system",
|
|
48149
48319
|
addonId: null,
|
|
48150
48320
|
access: "view"
|
|
48151
48321
|
},
|
|
48322
|
+
"userManagement.linkExternalIdentity": {
|
|
48323
|
+
capName: "user-management",
|
|
48324
|
+
capScope: "system",
|
|
48325
|
+
addonId: null,
|
|
48326
|
+
access: "create"
|
|
48327
|
+
},
|
|
48152
48328
|
"userManagement.listApiKeys": {
|
|
48153
48329
|
capName: "user-management",
|
|
48154
48330
|
capScope: "system",
|
|
48155
48331
|
addonId: null,
|
|
48156
48332
|
access: "view"
|
|
48157
48333
|
},
|
|
48334
|
+
"userManagement.listExternalIdentities": {
|
|
48335
|
+
capName: "user-management",
|
|
48336
|
+
capScope: "system",
|
|
48337
|
+
addonId: null,
|
|
48338
|
+
access: "view"
|
|
48339
|
+
},
|
|
48158
48340
|
"userManagement.listOauthSessions": {
|
|
48159
48341
|
capName: "user-management",
|
|
48160
48342
|
capScope: "system",
|
|
@@ -48233,6 +48415,12 @@ Object.freeze({
|
|
|
48233
48415
|
addonId: null,
|
|
48234
48416
|
access: "create"
|
|
48235
48417
|
},
|
|
48418
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48419
|
+
capName: "user-management",
|
|
48420
|
+
capScope: "system",
|
|
48421
|
+
addonId: null,
|
|
48422
|
+
access: "delete"
|
|
48423
|
+
},
|
|
48236
48424
|
"userManagement.updateUser": {
|
|
48237
48425
|
capName: "user-management",
|
|
48238
48426
|
capScope: "system",
|
|
@@ -51572,6 +51760,11 @@ Object.freeze({
|
|
|
51572
51760
|
form: "single",
|
|
51573
51761
|
optional: false
|
|
51574
51762
|
}],
|
|
51763
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51764
|
+
name: "deviceId",
|
|
51765
|
+
form: "single",
|
|
51766
|
+
optional: false
|
|
51767
|
+
}],
|
|
51575
51768
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51576
51769
|
name: "deviceId",
|
|
51577
51770
|
form: "single",
|
|
@@ -53723,7 +53916,7 @@ var homematicConfigSchema = object({
|
|
|
53723
53916
|
enableGroups: boolean().default(true).describe("Enable groups (heating groups / VirtualDevices)"),
|
|
53724
53917
|
enableBidcosWired: boolean().default(false).describe("Enable BidCos-Wired (HM-Wired)"),
|
|
53725
53918
|
username: string().default("").describe("WebUI username (optional — enables names / rooms / sysvars)"),
|
|
53726
|
-
password: string().default("").describe("WebUI password (optional)"),
|
|
53919
|
+
password: string().default("").describe("WebUI password (optional)").meta({ secret: true }),
|
|
53727
53920
|
callbackHost: string().default("").describe("Address the CCU calls back to for event push (this hub LAN IP)"),
|
|
53728
53921
|
callbackPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(2128)).describe("Local XML-RPC callback server port"),
|
|
53729
53922
|
tls: boolean().default(false).describe("Use TLS for the CCU transport")
|
package/dist/addon.mjs
CHANGED
|
@@ -5380,7 +5380,7 @@ var ZodIssueCode = {
|
|
|
5380
5380
|
var ZodFirstPartyTypeKind;
|
|
5381
5381
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5382
5382
|
//#endregion
|
|
5383
|
-
//#region ../types/dist/sleep-
|
|
5383
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5384
5384
|
/**
|
|
5385
5385
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5386
5386
|
* window to float samples (D455).
|
|
@@ -15268,6 +15268,10 @@ var DeviceInfoSchema = object({
|
|
|
15268
15268
|
isCamera: boolean(),
|
|
15269
15269
|
/** Current config values — serializable snapshot */
|
|
15270
15270
|
config: record(string(), unknown()),
|
|
15271
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15272
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15273
|
+
* when the owning runner has not reported them. */
|
|
15274
|
+
secretConfigPaths: array(string()).optional(),
|
|
15271
15275
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15272
15276
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15273
15277
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -15473,7 +15477,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15473
15477
|
* call (workers re-register on init), so probe-driven updates
|
|
15474
15478
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15475
15479
|
features: array(string()).optional(),
|
|
15476
|
-
config: record(string(), unknown())
|
|
15480
|
+
config: record(string(), unknown()),
|
|
15481
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15482
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15483
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15484
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15485
|
+
* omits it and the keyword backstop applies. */
|
|
15486
|
+
secretConfigPaths: array(string()).optional()
|
|
15477
15487
|
});
|
|
15478
15488
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15479
15489
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -17132,7 +17142,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17132
17142
|
icon: string().optional(),
|
|
17133
17143
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17134
17144
|
startUrl: string(),
|
|
17135
|
-
stage: LoginStageEnum
|
|
17145
|
+
stage: LoginStageEnum,
|
|
17146
|
+
/**
|
|
17147
|
+
* The provider names an external identity a signed-in user can link to
|
|
17148
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17149
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17150
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17151
|
+
*/
|
|
17152
|
+
linkable: boolean().optional()
|
|
17136
17153
|
}),
|
|
17137
17154
|
object({
|
|
17138
17155
|
kind: literal("widget"),
|
|
@@ -22567,7 +22584,13 @@ var RetrainFrameSchema = object({
|
|
|
22567
22584
|
sizeBytes: number().int(),
|
|
22568
22585
|
width: number().int(),
|
|
22569
22586
|
height: number().int(),
|
|
22570
|
-
copiedAt: number()
|
|
22587
|
+
copiedAt: number(),
|
|
22588
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22589
|
+
capturedAt: number().optional(),
|
|
22590
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22591
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22592
|
+
* a false positive. */
|
|
22593
|
+
complete: boolean()
|
|
22571
22594
|
});
|
|
22572
22595
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22573
22596
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22588,6 +22611,51 @@ var RetrainFrameListSchema = object({
|
|
|
22588
22611
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22589
22612
|
autoPickMediaId: number().int().optional()
|
|
22590
22613
|
});
|
|
22614
|
+
/**
|
|
22615
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22616
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22617
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22618
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22619
|
+
* export carried (`exportedInBatch`).
|
|
22620
|
+
*/
|
|
22621
|
+
var RetrainExportFilterSchema = object({
|
|
22622
|
+
deviceIds: array(number()).optional(),
|
|
22623
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
22624
|
+
batchId: string().optional(),
|
|
22625
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22626
|
+
completeOnly: boolean().optional()
|
|
22627
|
+
});
|
|
22628
|
+
/**
|
|
22629
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22630
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22631
|
+
* convention — the classifier layout.
|
|
22632
|
+
*/
|
|
22633
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22634
|
+
/**
|
|
22635
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22636
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22637
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22638
|
+
* logged.
|
|
22639
|
+
*/
|
|
22640
|
+
var RetrainArchiveTargetSchema = object({
|
|
22641
|
+
kind: literal("http"),
|
|
22642
|
+
method: _enum(["PUT", "POST"]),
|
|
22643
|
+
url: string().url(),
|
|
22644
|
+
headers: record(string(), string()).optional()
|
|
22645
|
+
});
|
|
22646
|
+
var RetrainArchiveResultSchema = object({
|
|
22647
|
+
batchId: string(),
|
|
22648
|
+
frames: number().int(),
|
|
22649
|
+
crops: number().int(),
|
|
22650
|
+
annotations: number().int(),
|
|
22651
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22652
|
+
missing: number().int(),
|
|
22653
|
+
bytes: number().int(),
|
|
22654
|
+
/** sha256 of the exact bytes sent. */
|
|
22655
|
+
sha256: string(),
|
|
22656
|
+
/** The target's HTTP status. */
|
|
22657
|
+
status: number().int()
|
|
22658
|
+
});
|
|
22591
22659
|
/** What the operator asked the assist to look for. */
|
|
22592
22660
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22593
22661
|
kind: literal("package"),
|
|
@@ -23382,9 +23450,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23382
23450
|
}), RetrainTransitionResultSchema, {
|
|
23383
23451
|
kind: "mutation",
|
|
23384
23452
|
auth: "admin"
|
|
23385
|
-
}), method(
|
|
23453
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
23386
23454
|
kind: "query",
|
|
23387
23455
|
auth: "admin"
|
|
23456
|
+
}), method(object({
|
|
23457
|
+
deviceId: number(),
|
|
23458
|
+
trackId: string(),
|
|
23459
|
+
frameId: string(),
|
|
23460
|
+
complete: boolean()
|
|
23461
|
+
}), RetrainFrameSchema, {
|
|
23462
|
+
kind: "mutation",
|
|
23463
|
+
auth: "admin"
|
|
23464
|
+
}), method(object({
|
|
23465
|
+
filter: RetrainExportFilterSchema,
|
|
23466
|
+
layout: RetrainExportLayoutSchema,
|
|
23467
|
+
target: RetrainArchiveTargetSchema
|
|
23468
|
+
}), RetrainArchiveResultSchema, {
|
|
23469
|
+
kind: "mutation",
|
|
23470
|
+
auth: "admin",
|
|
23471
|
+
timeoutMs: 60 * 6e4
|
|
23388
23472
|
}), method(object({
|
|
23389
23473
|
/** Which of the three event tables owns the row. */
|
|
23390
23474
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26714,7 +26798,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26714
26798
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26715
26799
|
* operator already consented to.
|
|
26716
26800
|
*/
|
|
26717
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26801
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26802
|
+
/**
|
|
26803
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26804
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26805
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26806
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26807
|
+
*/
|
|
26808
|
+
linkIntent: string().optional(),
|
|
26809
|
+
/**
|
|
26810
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26811
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26812
|
+
*/
|
|
26813
|
+
issuer: string().optional()
|
|
26718
26814
|
});
|
|
26719
26815
|
method(object({
|
|
26720
26816
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28649,7 +28745,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28649
28745
|
* field their hints were silently stripped by the schema and the
|
|
28650
28746
|
* adaptive ladder started blind on the client's display size.
|
|
28651
28747
|
*/
|
|
28652
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28748
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28749
|
+
/**
|
|
28750
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28751
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28752
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28753
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28754
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28755
|
+
*
|
|
28756
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28757
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28758
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28759
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28760
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28761
|
+
* flag must not become a second door to the camera's speaker.
|
|
28762
|
+
*/
|
|
28763
|
+
talkback: boolean().optional()
|
|
28653
28764
|
}), object({
|
|
28654
28765
|
sessionId: string(),
|
|
28655
28766
|
sdpAnswer: string()
|
|
@@ -39003,6 +39114,32 @@ var TotpStatusSchema = object({
|
|
|
39003
39114
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
39004
39115
|
confirmedAt: number().nullable()
|
|
39005
39116
|
});
|
|
39117
|
+
/**
|
|
39118
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39119
|
+
* and scoped tokens.
|
|
39120
|
+
*
|
|
39121
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39122
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39123
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39124
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39125
|
+
* provider.
|
|
39126
|
+
*/
|
|
39127
|
+
var ExternalIdentitySchema = object({
|
|
39128
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39129
|
+
provider: string(),
|
|
39130
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39131
|
+
subject: string(),
|
|
39132
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39133
|
+
issuer: string(),
|
|
39134
|
+
userId: string(),
|
|
39135
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39136
|
+
label: string().optional(),
|
|
39137
|
+
linkedAt: number()
|
|
39138
|
+
});
|
|
39139
|
+
var ExternalIdentityKeySchema = object({
|
|
39140
|
+
provider: string().min(1),
|
|
39141
|
+
subject: string().min(1)
|
|
39142
|
+
});
|
|
39006
39143
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
39007
39144
|
kind: "mutation",
|
|
39008
39145
|
auth: "admin",
|
|
@@ -39116,7 +39253,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39116
39253
|
userId: string(),
|
|
39117
39254
|
username: string(),
|
|
39118
39255
|
scopes: array(TokenScopeSchema)
|
|
39119
|
-
}).nullable(), { access: "view" }), method(
|
|
39256
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39257
|
+
userId: string(),
|
|
39258
|
+
issuer: string()
|
|
39259
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39260
|
+
userId: string(),
|
|
39261
|
+
issuer: string().min(1),
|
|
39262
|
+
label: string().optional()
|
|
39263
|
+
}), object({ success: literal(true) }), {
|
|
39264
|
+
kind: "mutation",
|
|
39265
|
+
auth: "admin",
|
|
39266
|
+
access: "create"
|
|
39267
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
39268
|
+
kind: "mutation",
|
|
39269
|
+
auth: "admin",
|
|
39270
|
+
access: "delete"
|
|
39271
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
39120
39272
|
kind: "mutation",
|
|
39121
39273
|
auth: "admin",
|
|
39122
39274
|
access: "delete"
|
|
@@ -45756,6 +45908,12 @@ Object.freeze({
|
|
|
45756
45908
|
addonId: null,
|
|
45757
45909
|
access: "create"
|
|
45758
45910
|
},
|
|
45911
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45912
|
+
capName: "pipeline-analytics",
|
|
45913
|
+
capScope: "device",
|
|
45914
|
+
addonId: null,
|
|
45915
|
+
access: "create"
|
|
45916
|
+
},
|
|
45759
45917
|
"pipelineAnalytics.setTrackFlags": {
|
|
45760
45918
|
capName: "pipeline-analytics",
|
|
45761
45919
|
capScope: "device",
|
|
@@ -45792,6 +45950,12 @@ Object.freeze({
|
|
|
45792
45950
|
addonId: null,
|
|
45793
45951
|
access: "delete"
|
|
45794
45952
|
},
|
|
45953
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45954
|
+
capName: "pipeline-analytics",
|
|
45955
|
+
capScope: "device",
|
|
45956
|
+
addonId: null,
|
|
45957
|
+
access: "create"
|
|
45958
|
+
},
|
|
45795
45959
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45796
45960
|
capName: "pipeline-executor",
|
|
45797
45961
|
capScope: "system",
|
|
@@ -48144,18 +48308,36 @@ Object.freeze({
|
|
|
48144
48308
|
addonId: null,
|
|
48145
48309
|
access: "delete"
|
|
48146
48310
|
},
|
|
48311
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48312
|
+
capName: "user-management",
|
|
48313
|
+
capScope: "system",
|
|
48314
|
+
addonId: null,
|
|
48315
|
+
access: "view"
|
|
48316
|
+
},
|
|
48147
48317
|
"userManagement.getTotpStatus": {
|
|
48148
48318
|
capName: "user-management",
|
|
48149
48319
|
capScope: "system",
|
|
48150
48320
|
addonId: null,
|
|
48151
48321
|
access: "view"
|
|
48152
48322
|
},
|
|
48323
|
+
"userManagement.linkExternalIdentity": {
|
|
48324
|
+
capName: "user-management",
|
|
48325
|
+
capScope: "system",
|
|
48326
|
+
addonId: null,
|
|
48327
|
+
access: "create"
|
|
48328
|
+
},
|
|
48153
48329
|
"userManagement.listApiKeys": {
|
|
48154
48330
|
capName: "user-management",
|
|
48155
48331
|
capScope: "system",
|
|
48156
48332
|
addonId: null,
|
|
48157
48333
|
access: "view"
|
|
48158
48334
|
},
|
|
48335
|
+
"userManagement.listExternalIdentities": {
|
|
48336
|
+
capName: "user-management",
|
|
48337
|
+
capScope: "system",
|
|
48338
|
+
addonId: null,
|
|
48339
|
+
access: "view"
|
|
48340
|
+
},
|
|
48159
48341
|
"userManagement.listOauthSessions": {
|
|
48160
48342
|
capName: "user-management",
|
|
48161
48343
|
capScope: "system",
|
|
@@ -48234,6 +48416,12 @@ Object.freeze({
|
|
|
48234
48416
|
addonId: null,
|
|
48235
48417
|
access: "create"
|
|
48236
48418
|
},
|
|
48419
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48420
|
+
capName: "user-management",
|
|
48421
|
+
capScope: "system",
|
|
48422
|
+
addonId: null,
|
|
48423
|
+
access: "delete"
|
|
48424
|
+
},
|
|
48237
48425
|
"userManagement.updateUser": {
|
|
48238
48426
|
capName: "user-management",
|
|
48239
48427
|
capScope: "system",
|
|
@@ -51573,6 +51761,11 @@ Object.freeze({
|
|
|
51573
51761
|
form: "single",
|
|
51574
51762
|
optional: false
|
|
51575
51763
|
}],
|
|
51764
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51765
|
+
name: "deviceId",
|
|
51766
|
+
form: "single",
|
|
51767
|
+
optional: false
|
|
51768
|
+
}],
|
|
51576
51769
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51577
51770
|
name: "deviceId",
|
|
51578
51771
|
form: "single",
|
|
@@ -53724,7 +53917,7 @@ var homematicConfigSchema = object({
|
|
|
53724
53917
|
enableGroups: boolean().default(true).describe("Enable groups (heating groups / VirtualDevices)"),
|
|
53725
53918
|
enableBidcosWired: boolean().default(false).describe("Enable BidCos-Wired (HM-Wired)"),
|
|
53726
53919
|
username: string().default("").describe("WebUI username (optional — enables names / rooms / sysvars)"),
|
|
53727
|
-
password: string().default("").describe("WebUI password (optional)"),
|
|
53920
|
+
password: string().default("").describe("WebUI password (optional)").meta({ secret: true }),
|
|
53728
53921
|
callbackHost: string().default("").describe("Address the CCU calls back to for event push (this hub LAN IP)"),
|
|
53729
53922
|
callbackPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(2128)).describe("Local XML-RPC callback server port"),
|
|
53730
53923
|
tls: boolean().default(false).describe("Use TLS for the CCU transport")
|
package/package.json
CHANGED