@camstack/addon-provider-dreame 0.2.128 → 0.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 +203 -10
- package/dist/addon.mjs +203 -10
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -58273,7 +58273,7 @@ var ZodIssueCode = {
|
|
|
58273
58273
|
var ZodFirstPartyTypeKind;
|
|
58274
58274
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
58275
58275
|
//#endregion
|
|
58276
|
-
//#region ../types/dist/sleep-
|
|
58276
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
58277
58277
|
/**
|
|
58278
58278
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
58279
58279
|
* window to float samples (D455).
|
|
@@ -67999,6 +67999,10 @@ var DeviceInfoSchema = object({
|
|
|
67999
67999
|
isCamera: boolean(),
|
|
68000
68000
|
/** Current config values — serializable snapshot */
|
|
68001
68001
|
config: record(string(), unknown()),
|
|
68002
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
68003
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
68004
|
+
* when the owning runner has not reported them. */
|
|
68005
|
+
secretConfigPaths: array(string()).optional(),
|
|
68002
68006
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
68003
68007
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
68004
68008
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -68204,7 +68208,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
68204
68208
|
* call (workers re-register on init), so probe-driven updates
|
|
68205
68209
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
68206
68210
|
features: array(string()).optional(),
|
|
68207
|
-
config: record(string(), unknown())
|
|
68211
|
+
config: record(string(), unknown()),
|
|
68212
|
+
/** Config paths the device's own schema DECLARES secret
|
|
68213
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
68214
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
68215
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
68216
|
+
* omits it and the keyword backstop applies. */
|
|
68217
|
+
secretConfigPaths: array(string()).optional()
|
|
68208
68218
|
});
|
|
68209
68219
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
68210
68220
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -69875,7 +69885,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
69875
69885
|
icon: string().optional(),
|
|
69876
69886
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
69877
69887
|
startUrl: string(),
|
|
69878
|
-
stage: LoginStageEnum
|
|
69888
|
+
stage: LoginStageEnum,
|
|
69889
|
+
/**
|
|
69890
|
+
* The provider names an external identity a signed-in user can link to
|
|
69891
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
69892
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
69893
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
69894
|
+
*/
|
|
69895
|
+
linkable: boolean().optional()
|
|
69879
69896
|
}),
|
|
69880
69897
|
object({
|
|
69881
69898
|
kind: literal("widget"),
|
|
@@ -75310,7 +75327,13 @@ var RetrainFrameSchema = object({
|
|
|
75310
75327
|
sizeBytes: number().int(),
|
|
75311
75328
|
width: number().int(),
|
|
75312
75329
|
height: number().int(),
|
|
75313
|
-
copiedAt: number()
|
|
75330
|
+
copiedAt: number(),
|
|
75331
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
75332
|
+
capturedAt: number().optional(),
|
|
75333
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
75334
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
75335
|
+
* a false positive. */
|
|
75336
|
+
complete: boolean()
|
|
75314
75337
|
});
|
|
75315
75338
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
75316
75339
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -75331,6 +75354,51 @@ var RetrainFrameListSchema = object({
|
|
|
75331
75354
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
75332
75355
|
autoPickMediaId: number().int().optional()
|
|
75333
75356
|
});
|
|
75357
|
+
/**
|
|
75358
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
75359
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
75360
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
75361
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
75362
|
+
* export carried (`exportedInBatch`).
|
|
75363
|
+
*/
|
|
75364
|
+
var RetrainExportFilterSchema = object({
|
|
75365
|
+
deviceIds: array(number()).optional(),
|
|
75366
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
75367
|
+
batchId: string().optional(),
|
|
75368
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
75369
|
+
completeOnly: boolean().optional()
|
|
75370
|
+
});
|
|
75371
|
+
/**
|
|
75372
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
75373
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
75374
|
+
* convention — the classifier layout.
|
|
75375
|
+
*/
|
|
75376
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
75377
|
+
/**
|
|
75378
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
75379
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
75380
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
75381
|
+
* logged.
|
|
75382
|
+
*/
|
|
75383
|
+
var RetrainArchiveTargetSchema = object({
|
|
75384
|
+
kind: literal("http"),
|
|
75385
|
+
method: _enum(["PUT", "POST"]),
|
|
75386
|
+
url: string().url(),
|
|
75387
|
+
headers: record(string(), string()).optional()
|
|
75388
|
+
});
|
|
75389
|
+
var RetrainArchiveResultSchema = object({
|
|
75390
|
+
batchId: string(),
|
|
75391
|
+
frames: number().int(),
|
|
75392
|
+
crops: number().int(),
|
|
75393
|
+
annotations: number().int(),
|
|
75394
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
75395
|
+
missing: number().int(),
|
|
75396
|
+
bytes: number().int(),
|
|
75397
|
+
/** sha256 of the exact bytes sent. */
|
|
75398
|
+
sha256: string(),
|
|
75399
|
+
/** The target's HTTP status. */
|
|
75400
|
+
status: number().int()
|
|
75401
|
+
});
|
|
75334
75402
|
/** What the operator asked the assist to look for. */
|
|
75335
75403
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
75336
75404
|
kind: literal("package"),
|
|
@@ -76125,9 +76193,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
76125
76193
|
}), RetrainTransitionResultSchema, {
|
|
76126
76194
|
kind: "mutation",
|
|
76127
76195
|
auth: "admin"
|
|
76128
|
-
}), method(
|
|
76196
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
76129
76197
|
kind: "query",
|
|
76130
76198
|
auth: "admin"
|
|
76199
|
+
}), method(object({
|
|
76200
|
+
deviceId: number(),
|
|
76201
|
+
trackId: string(),
|
|
76202
|
+
frameId: string(),
|
|
76203
|
+
complete: boolean()
|
|
76204
|
+
}), RetrainFrameSchema, {
|
|
76205
|
+
kind: "mutation",
|
|
76206
|
+
auth: "admin"
|
|
76207
|
+
}), method(object({
|
|
76208
|
+
filter: RetrainExportFilterSchema,
|
|
76209
|
+
layout: RetrainExportLayoutSchema,
|
|
76210
|
+
target: RetrainArchiveTargetSchema
|
|
76211
|
+
}), RetrainArchiveResultSchema, {
|
|
76212
|
+
kind: "mutation",
|
|
76213
|
+
auth: "admin",
|
|
76214
|
+
timeoutMs: 60 * 6e4
|
|
76131
76215
|
}), method(object({
|
|
76132
76216
|
/** Which of the three event tables owns the row. */
|
|
76133
76217
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -79457,7 +79541,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
79457
79541
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
79458
79542
|
* operator already consented to.
|
|
79459
79543
|
*/
|
|
79460
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
79544
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
79545
|
+
/**
|
|
79546
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
79547
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
79548
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
79549
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
79550
|
+
*/
|
|
79551
|
+
linkIntent: string().optional(),
|
|
79552
|
+
/**
|
|
79553
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
79554
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
79555
|
+
*/
|
|
79556
|
+
issuer: string().optional()
|
|
79461
79557
|
});
|
|
79462
79558
|
method(object({
|
|
79463
79559
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -81392,7 +81488,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
81392
81488
|
* field their hints were silently stripped by the schema and the
|
|
81393
81489
|
* adaptive ladder started blind on the client's display size.
|
|
81394
81490
|
*/
|
|
81395
|
-
hints: webrtcClientHintsSchema.optional()
|
|
81491
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
81492
|
+
/**
|
|
81493
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
81494
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
81495
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
81496
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
81497
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
81498
|
+
*
|
|
81499
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
81500
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
81501
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
81502
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
81503
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
81504
|
+
* flag must not become a second door to the camera's speaker.
|
|
81505
|
+
*/
|
|
81506
|
+
talkback: boolean().optional()
|
|
81396
81507
|
}), object({
|
|
81397
81508
|
sessionId: string(),
|
|
81398
81509
|
sdpAnswer: string()
|
|
@@ -91919,6 +92030,32 @@ var TotpStatusSchema = object({
|
|
|
91919
92030
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
91920
92031
|
confirmedAt: number().nullable()
|
|
91921
92032
|
});
|
|
92033
|
+
/**
|
|
92034
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
92035
|
+
* and scoped tokens.
|
|
92036
|
+
*
|
|
92037
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
92038
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
92039
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
92040
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
92041
|
+
* provider.
|
|
92042
|
+
*/
|
|
92043
|
+
var ExternalIdentitySchema = object({
|
|
92044
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
92045
|
+
provider: string(),
|
|
92046
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
92047
|
+
subject: string(),
|
|
92048
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
92049
|
+
issuer: string(),
|
|
92050
|
+
userId: string(),
|
|
92051
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
92052
|
+
label: string().optional(),
|
|
92053
|
+
linkedAt: number()
|
|
92054
|
+
});
|
|
92055
|
+
var ExternalIdentityKeySchema = object({
|
|
92056
|
+
provider: string().min(1),
|
|
92057
|
+
subject: string().min(1)
|
|
92058
|
+
});
|
|
91922
92059
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
91923
92060
|
kind: "mutation",
|
|
91924
92061
|
auth: "admin",
|
|
@@ -92032,7 +92169,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
92032
92169
|
userId: string(),
|
|
92033
92170
|
username: string(),
|
|
92034
92171
|
scopes: array(TokenScopeSchema)
|
|
92035
|
-
}).nullable(), { access: "view" }), method(
|
|
92172
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
92173
|
+
userId: string(),
|
|
92174
|
+
issuer: string()
|
|
92175
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
92176
|
+
userId: string(),
|
|
92177
|
+
issuer: string().min(1),
|
|
92178
|
+
label: string().optional()
|
|
92179
|
+
}), object({ success: literal(true) }), {
|
|
92180
|
+
kind: "mutation",
|
|
92181
|
+
auth: "admin",
|
|
92182
|
+
access: "create"
|
|
92183
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
92184
|
+
kind: "mutation",
|
|
92185
|
+
auth: "admin",
|
|
92186
|
+
access: "delete"
|
|
92187
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
92036
92188
|
kind: "mutation",
|
|
92037
92189
|
auth: "admin",
|
|
92038
92190
|
access: "delete"
|
|
@@ -98672,6 +98824,12 @@ Object.freeze({
|
|
|
98672
98824
|
addonId: null,
|
|
98673
98825
|
access: "create"
|
|
98674
98826
|
},
|
|
98827
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
98828
|
+
capName: "pipeline-analytics",
|
|
98829
|
+
capScope: "device",
|
|
98830
|
+
addonId: null,
|
|
98831
|
+
access: "create"
|
|
98832
|
+
},
|
|
98675
98833
|
"pipelineAnalytics.setTrackFlags": {
|
|
98676
98834
|
capName: "pipeline-analytics",
|
|
98677
98835
|
capScope: "device",
|
|
@@ -98708,6 +98866,12 @@ Object.freeze({
|
|
|
98708
98866
|
addonId: null,
|
|
98709
98867
|
access: "delete"
|
|
98710
98868
|
},
|
|
98869
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
98870
|
+
capName: "pipeline-analytics",
|
|
98871
|
+
capScope: "device",
|
|
98872
|
+
addonId: null,
|
|
98873
|
+
access: "create"
|
|
98874
|
+
},
|
|
98711
98875
|
"pipelineExecutor.cacheFrameInPool": {
|
|
98712
98876
|
capName: "pipeline-executor",
|
|
98713
98877
|
capScope: "system",
|
|
@@ -101060,18 +101224,36 @@ Object.freeze({
|
|
|
101060
101224
|
addonId: null,
|
|
101061
101225
|
access: "delete"
|
|
101062
101226
|
},
|
|
101227
|
+
"userManagement.findUserByExternalIdentity": {
|
|
101228
|
+
capName: "user-management",
|
|
101229
|
+
capScope: "system",
|
|
101230
|
+
addonId: null,
|
|
101231
|
+
access: "view"
|
|
101232
|
+
},
|
|
101063
101233
|
"userManagement.getTotpStatus": {
|
|
101064
101234
|
capName: "user-management",
|
|
101065
101235
|
capScope: "system",
|
|
101066
101236
|
addonId: null,
|
|
101067
101237
|
access: "view"
|
|
101068
101238
|
},
|
|
101239
|
+
"userManagement.linkExternalIdentity": {
|
|
101240
|
+
capName: "user-management",
|
|
101241
|
+
capScope: "system",
|
|
101242
|
+
addonId: null,
|
|
101243
|
+
access: "create"
|
|
101244
|
+
},
|
|
101069
101245
|
"userManagement.listApiKeys": {
|
|
101070
101246
|
capName: "user-management",
|
|
101071
101247
|
capScope: "system",
|
|
101072
101248
|
addonId: null,
|
|
101073
101249
|
access: "view"
|
|
101074
101250
|
},
|
|
101251
|
+
"userManagement.listExternalIdentities": {
|
|
101252
|
+
capName: "user-management",
|
|
101253
|
+
capScope: "system",
|
|
101254
|
+
addonId: null,
|
|
101255
|
+
access: "view"
|
|
101256
|
+
},
|
|
101075
101257
|
"userManagement.listOauthSessions": {
|
|
101076
101258
|
capName: "user-management",
|
|
101077
101259
|
capScope: "system",
|
|
@@ -101150,6 +101332,12 @@ Object.freeze({
|
|
|
101150
101332
|
addonId: null,
|
|
101151
101333
|
access: "create"
|
|
101152
101334
|
},
|
|
101335
|
+
"userManagement.unlinkExternalIdentity": {
|
|
101336
|
+
capName: "user-management",
|
|
101337
|
+
capScope: "system",
|
|
101338
|
+
addonId: null,
|
|
101339
|
+
access: "delete"
|
|
101340
|
+
},
|
|
101153
101341
|
"userManagement.updateUser": {
|
|
101154
101342
|
capName: "user-management",
|
|
101155
101343
|
capScope: "system",
|
|
@@ -104489,6 +104677,11 @@ Object.freeze({
|
|
|
104489
104677
|
form: "single",
|
|
104490
104678
|
optional: false
|
|
104491
104679
|
}],
|
|
104680
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
104681
|
+
name: "deviceId",
|
|
104682
|
+
form: "single",
|
|
104683
|
+
optional: false
|
|
104684
|
+
}],
|
|
104492
104685
|
"pipelineAnalytics.setTrackFlags": [{
|
|
104493
104686
|
name: "deviceId",
|
|
104494
104687
|
form: "single",
|
|
@@ -106574,7 +106767,7 @@ var DreameRegionSchema = _enum(DREAME_REGIONS);
|
|
|
106574
106767
|
*/
|
|
106575
106768
|
var dreameConfigSchema = object({
|
|
106576
106769
|
username: string().min(1).describe("Dreamehome account email / username"),
|
|
106577
|
-
password: string().min(1).describe("Dreamehome account password"),
|
|
106770
|
+
password: string().min(1).describe("Dreamehome account password").meta({ secret: true }),
|
|
106578
106771
|
region: DreameRegionSchema.default("eu").describe("Dreame cloud region"),
|
|
106579
106772
|
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(0).max(36e5).default(3e4)).describe("Poll fallback interval (ms) while MQTT push is down — 0 disables")
|
|
106580
106773
|
});
|
|
@@ -108215,7 +108408,7 @@ var dreameChildSchema = object({
|
|
|
108215
108408
|
}).optional(),
|
|
108216
108409
|
navigationDisabledEntryIds: array(string()).optional(),
|
|
108217
108410
|
/** Privacy PIN set at pairing — required to wake a coded camera (camera child only). */
|
|
108218
|
-
navigationAccessCode: string().optional(),
|
|
108411
|
+
navigationAccessCode: string().optional().meta({ secret: true }),
|
|
108219
108412
|
/**
|
|
108220
108413
|
* The video backend the robot should sit on (camera child only).
|
|
108221
108414
|
*
|
package/dist/addon.mjs
CHANGED
|
@@ -58270,7 +58270,7 @@ var ZodIssueCode = {
|
|
|
58270
58270
|
var ZodFirstPartyTypeKind;
|
|
58271
58271
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
58272
58272
|
//#endregion
|
|
58273
|
-
//#region ../types/dist/sleep-
|
|
58273
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
58274
58274
|
/**
|
|
58275
58275
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
58276
58276
|
* window to float samples (D455).
|
|
@@ -67996,6 +67996,10 @@ var DeviceInfoSchema = object({
|
|
|
67996
67996
|
isCamera: boolean(),
|
|
67997
67997
|
/** Current config values — serializable snapshot */
|
|
67998
67998
|
config: record(string(), unknown()),
|
|
67999
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
68000
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
68001
|
+
* when the owning runner has not reported them. */
|
|
68002
|
+
secretConfigPaths: array(string()).optional(),
|
|
67999
68003
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
68000
68004
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
68001
68005
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -68201,7 +68205,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
68201
68205
|
* call (workers re-register on init), so probe-driven updates
|
|
68202
68206
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
68203
68207
|
features: array(string()).optional(),
|
|
68204
|
-
config: record(string(), unknown())
|
|
68208
|
+
config: record(string(), unknown()),
|
|
68209
|
+
/** Config paths the device's own schema DECLARES secret
|
|
68210
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
68211
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
68212
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
68213
|
+
* omits it and the keyword backstop applies. */
|
|
68214
|
+
secretConfigPaths: array(string()).optional()
|
|
68205
68215
|
});
|
|
68206
68216
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
68207
68217
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -69872,7 +69882,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
69872
69882
|
icon: string().optional(),
|
|
69873
69883
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
69874
69884
|
startUrl: string(),
|
|
69875
|
-
stage: LoginStageEnum
|
|
69885
|
+
stage: LoginStageEnum,
|
|
69886
|
+
/**
|
|
69887
|
+
* The provider names an external identity a signed-in user can link to
|
|
69888
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
69889
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
69890
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
69891
|
+
*/
|
|
69892
|
+
linkable: boolean().optional()
|
|
69876
69893
|
}),
|
|
69877
69894
|
object({
|
|
69878
69895
|
kind: literal("widget"),
|
|
@@ -75307,7 +75324,13 @@ var RetrainFrameSchema = object({
|
|
|
75307
75324
|
sizeBytes: number().int(),
|
|
75308
75325
|
width: number().int(),
|
|
75309
75326
|
height: number().int(),
|
|
75310
|
-
copiedAt: number()
|
|
75327
|
+
copiedAt: number(),
|
|
75328
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
75329
|
+
capturedAt: number().optional(),
|
|
75330
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
75331
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
75332
|
+
* a false positive. */
|
|
75333
|
+
complete: boolean()
|
|
75311
75334
|
});
|
|
75312
75335
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
75313
75336
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -75328,6 +75351,51 @@ var RetrainFrameListSchema = object({
|
|
|
75328
75351
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
75329
75352
|
autoPickMediaId: number().int().optional()
|
|
75330
75353
|
});
|
|
75354
|
+
/**
|
|
75355
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
75356
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
75357
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
75358
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
75359
|
+
* export carried (`exportedInBatch`).
|
|
75360
|
+
*/
|
|
75361
|
+
var RetrainExportFilterSchema = object({
|
|
75362
|
+
deviceIds: array(number()).optional(),
|
|
75363
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
75364
|
+
batchId: string().optional(),
|
|
75365
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
75366
|
+
completeOnly: boolean().optional()
|
|
75367
|
+
});
|
|
75368
|
+
/**
|
|
75369
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
75370
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
75371
|
+
* convention — the classifier layout.
|
|
75372
|
+
*/
|
|
75373
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
75374
|
+
/**
|
|
75375
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
75376
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
75377
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
75378
|
+
* logged.
|
|
75379
|
+
*/
|
|
75380
|
+
var RetrainArchiveTargetSchema = object({
|
|
75381
|
+
kind: literal("http"),
|
|
75382
|
+
method: _enum(["PUT", "POST"]),
|
|
75383
|
+
url: string().url(),
|
|
75384
|
+
headers: record(string(), string()).optional()
|
|
75385
|
+
});
|
|
75386
|
+
var RetrainArchiveResultSchema = object({
|
|
75387
|
+
batchId: string(),
|
|
75388
|
+
frames: number().int(),
|
|
75389
|
+
crops: number().int(),
|
|
75390
|
+
annotations: number().int(),
|
|
75391
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
75392
|
+
missing: number().int(),
|
|
75393
|
+
bytes: number().int(),
|
|
75394
|
+
/** sha256 of the exact bytes sent. */
|
|
75395
|
+
sha256: string(),
|
|
75396
|
+
/** The target's HTTP status. */
|
|
75397
|
+
status: number().int()
|
|
75398
|
+
});
|
|
75331
75399
|
/** What the operator asked the assist to look for. */
|
|
75332
75400
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
75333
75401
|
kind: literal("package"),
|
|
@@ -76122,9 +76190,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
76122
76190
|
}), RetrainTransitionResultSchema, {
|
|
76123
76191
|
kind: "mutation",
|
|
76124
76192
|
auth: "admin"
|
|
76125
|
-
}), method(
|
|
76193
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
76126
76194
|
kind: "query",
|
|
76127
76195
|
auth: "admin"
|
|
76196
|
+
}), method(object({
|
|
76197
|
+
deviceId: number(),
|
|
76198
|
+
trackId: string(),
|
|
76199
|
+
frameId: string(),
|
|
76200
|
+
complete: boolean()
|
|
76201
|
+
}), RetrainFrameSchema, {
|
|
76202
|
+
kind: "mutation",
|
|
76203
|
+
auth: "admin"
|
|
76204
|
+
}), method(object({
|
|
76205
|
+
filter: RetrainExportFilterSchema,
|
|
76206
|
+
layout: RetrainExportLayoutSchema,
|
|
76207
|
+
target: RetrainArchiveTargetSchema
|
|
76208
|
+
}), RetrainArchiveResultSchema, {
|
|
76209
|
+
kind: "mutation",
|
|
76210
|
+
auth: "admin",
|
|
76211
|
+
timeoutMs: 60 * 6e4
|
|
76128
76212
|
}), method(object({
|
|
76129
76213
|
/** Which of the three event tables owns the row. */
|
|
76130
76214
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -79454,7 +79538,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
79454
79538
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
79455
79539
|
* operator already consented to.
|
|
79456
79540
|
*/
|
|
79457
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
79541
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
79542
|
+
/**
|
|
79543
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
79544
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
79545
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
79546
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
79547
|
+
*/
|
|
79548
|
+
linkIntent: string().optional(),
|
|
79549
|
+
/**
|
|
79550
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
79551
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
79552
|
+
*/
|
|
79553
|
+
issuer: string().optional()
|
|
79458
79554
|
});
|
|
79459
79555
|
method(object({
|
|
79460
79556
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -81389,7 +81485,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
81389
81485
|
* field their hints were silently stripped by the schema and the
|
|
81390
81486
|
* adaptive ladder started blind on the client's display size.
|
|
81391
81487
|
*/
|
|
81392
|
-
hints: webrtcClientHintsSchema.optional()
|
|
81488
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
81489
|
+
/**
|
|
81490
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
81491
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
81492
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
81493
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
81494
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
81495
|
+
*
|
|
81496
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
81497
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
81498
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
81499
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
81500
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
81501
|
+
* flag must not become a second door to the camera's speaker.
|
|
81502
|
+
*/
|
|
81503
|
+
talkback: boolean().optional()
|
|
81393
81504
|
}), object({
|
|
81394
81505
|
sessionId: string(),
|
|
81395
81506
|
sdpAnswer: string()
|
|
@@ -91916,6 +92027,32 @@ var TotpStatusSchema = object({
|
|
|
91916
92027
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
91917
92028
|
confirmedAt: number().nullable()
|
|
91918
92029
|
});
|
|
92030
|
+
/**
|
|
92031
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
92032
|
+
* and scoped tokens.
|
|
92033
|
+
*
|
|
92034
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
92035
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
92036
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
92037
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
92038
|
+
* provider.
|
|
92039
|
+
*/
|
|
92040
|
+
var ExternalIdentitySchema = object({
|
|
92041
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
92042
|
+
provider: string(),
|
|
92043
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
92044
|
+
subject: string(),
|
|
92045
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
92046
|
+
issuer: string(),
|
|
92047
|
+
userId: string(),
|
|
92048
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
92049
|
+
label: string().optional(),
|
|
92050
|
+
linkedAt: number()
|
|
92051
|
+
});
|
|
92052
|
+
var ExternalIdentityKeySchema = object({
|
|
92053
|
+
provider: string().min(1),
|
|
92054
|
+
subject: string().min(1)
|
|
92055
|
+
});
|
|
91919
92056
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
91920
92057
|
kind: "mutation",
|
|
91921
92058
|
auth: "admin",
|
|
@@ -92029,7 +92166,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
92029
92166
|
userId: string(),
|
|
92030
92167
|
username: string(),
|
|
92031
92168
|
scopes: array(TokenScopeSchema)
|
|
92032
|
-
}).nullable(), { access: "view" }), method(
|
|
92169
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
92170
|
+
userId: string(),
|
|
92171
|
+
issuer: string()
|
|
92172
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
92173
|
+
userId: string(),
|
|
92174
|
+
issuer: string().min(1),
|
|
92175
|
+
label: string().optional()
|
|
92176
|
+
}), object({ success: literal(true) }), {
|
|
92177
|
+
kind: "mutation",
|
|
92178
|
+
auth: "admin",
|
|
92179
|
+
access: "create"
|
|
92180
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
92181
|
+
kind: "mutation",
|
|
92182
|
+
auth: "admin",
|
|
92183
|
+
access: "delete"
|
|
92184
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
92033
92185
|
kind: "mutation",
|
|
92034
92186
|
auth: "admin",
|
|
92035
92187
|
access: "delete"
|
|
@@ -98669,6 +98821,12 @@ Object.freeze({
|
|
|
98669
98821
|
addonId: null,
|
|
98670
98822
|
access: "create"
|
|
98671
98823
|
},
|
|
98824
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
98825
|
+
capName: "pipeline-analytics",
|
|
98826
|
+
capScope: "device",
|
|
98827
|
+
addonId: null,
|
|
98828
|
+
access: "create"
|
|
98829
|
+
},
|
|
98672
98830
|
"pipelineAnalytics.setTrackFlags": {
|
|
98673
98831
|
capName: "pipeline-analytics",
|
|
98674
98832
|
capScope: "device",
|
|
@@ -98705,6 +98863,12 @@ Object.freeze({
|
|
|
98705
98863
|
addonId: null,
|
|
98706
98864
|
access: "delete"
|
|
98707
98865
|
},
|
|
98866
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
98867
|
+
capName: "pipeline-analytics",
|
|
98868
|
+
capScope: "device",
|
|
98869
|
+
addonId: null,
|
|
98870
|
+
access: "create"
|
|
98871
|
+
},
|
|
98708
98872
|
"pipelineExecutor.cacheFrameInPool": {
|
|
98709
98873
|
capName: "pipeline-executor",
|
|
98710
98874
|
capScope: "system",
|
|
@@ -101057,18 +101221,36 @@ Object.freeze({
|
|
|
101057
101221
|
addonId: null,
|
|
101058
101222
|
access: "delete"
|
|
101059
101223
|
},
|
|
101224
|
+
"userManagement.findUserByExternalIdentity": {
|
|
101225
|
+
capName: "user-management",
|
|
101226
|
+
capScope: "system",
|
|
101227
|
+
addonId: null,
|
|
101228
|
+
access: "view"
|
|
101229
|
+
},
|
|
101060
101230
|
"userManagement.getTotpStatus": {
|
|
101061
101231
|
capName: "user-management",
|
|
101062
101232
|
capScope: "system",
|
|
101063
101233
|
addonId: null,
|
|
101064
101234
|
access: "view"
|
|
101065
101235
|
},
|
|
101236
|
+
"userManagement.linkExternalIdentity": {
|
|
101237
|
+
capName: "user-management",
|
|
101238
|
+
capScope: "system",
|
|
101239
|
+
addonId: null,
|
|
101240
|
+
access: "create"
|
|
101241
|
+
},
|
|
101066
101242
|
"userManagement.listApiKeys": {
|
|
101067
101243
|
capName: "user-management",
|
|
101068
101244
|
capScope: "system",
|
|
101069
101245
|
addonId: null,
|
|
101070
101246
|
access: "view"
|
|
101071
101247
|
},
|
|
101248
|
+
"userManagement.listExternalIdentities": {
|
|
101249
|
+
capName: "user-management",
|
|
101250
|
+
capScope: "system",
|
|
101251
|
+
addonId: null,
|
|
101252
|
+
access: "view"
|
|
101253
|
+
},
|
|
101072
101254
|
"userManagement.listOauthSessions": {
|
|
101073
101255
|
capName: "user-management",
|
|
101074
101256
|
capScope: "system",
|
|
@@ -101147,6 +101329,12 @@ Object.freeze({
|
|
|
101147
101329
|
addonId: null,
|
|
101148
101330
|
access: "create"
|
|
101149
101331
|
},
|
|
101332
|
+
"userManagement.unlinkExternalIdentity": {
|
|
101333
|
+
capName: "user-management",
|
|
101334
|
+
capScope: "system",
|
|
101335
|
+
addonId: null,
|
|
101336
|
+
access: "delete"
|
|
101337
|
+
},
|
|
101150
101338
|
"userManagement.updateUser": {
|
|
101151
101339
|
capName: "user-management",
|
|
101152
101340
|
capScope: "system",
|
|
@@ -104486,6 +104674,11 @@ Object.freeze({
|
|
|
104486
104674
|
form: "single",
|
|
104487
104675
|
optional: false
|
|
104488
104676
|
}],
|
|
104677
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
104678
|
+
name: "deviceId",
|
|
104679
|
+
form: "single",
|
|
104680
|
+
optional: false
|
|
104681
|
+
}],
|
|
104489
104682
|
"pipelineAnalytics.setTrackFlags": [{
|
|
104490
104683
|
name: "deviceId",
|
|
104491
104684
|
form: "single",
|
|
@@ -106571,7 +106764,7 @@ var DreameRegionSchema = _enum(DREAME_REGIONS);
|
|
|
106571
106764
|
*/
|
|
106572
106765
|
var dreameConfigSchema = object({
|
|
106573
106766
|
username: string().min(1).describe("Dreamehome account email / username"),
|
|
106574
|
-
password: string().min(1).describe("Dreamehome account password"),
|
|
106767
|
+
password: string().min(1).describe("Dreamehome account password").meta({ secret: true }),
|
|
106575
106768
|
region: DreameRegionSchema.default("eu").describe("Dreame cloud region"),
|
|
106576
106769
|
pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(0).max(36e5).default(3e4)).describe("Poll fallback interval (ms) while MQTT push is down — 0 disables")
|
|
106577
106770
|
});
|
|
@@ -108212,7 +108405,7 @@ var dreameChildSchema = object({
|
|
|
108212
108405
|
}).optional(),
|
|
108213
108406
|
navigationDisabledEntryIds: array(string()).optional(),
|
|
108214
108407
|
/** Privacy PIN set at pairing — required to wake a coded camera (camera child only). */
|
|
108215
|
-
navigationAccessCode: string().optional(),
|
|
108408
|
+
navigationAccessCode: string().optional().meta({ secret: true }),
|
|
108216
108409
|
/**
|
|
108217
108410
|
* The video backend the robot should sit on (camera child only).
|
|
108218
108411
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreame",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.129",
|
|
4
4
|
"description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|