@camstack/addon-provider-wyze 0.2.130 → 0.2.131
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
|
@@ -5402,7 +5402,7 @@ var ZodIssueCode = {
|
|
|
5402
5402
|
var ZodFirstPartyTypeKind;
|
|
5403
5403
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5404
5404
|
//#endregion
|
|
5405
|
-
//#region ../types/dist/sleep-
|
|
5405
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5406
5406
|
/**
|
|
5407
5407
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5408
5408
|
* window to float samples (D455).
|
|
@@ -15148,6 +15148,10 @@ var DeviceInfoSchema = object({
|
|
|
15148
15148
|
isCamera: boolean(),
|
|
15149
15149
|
/** Current config values — serializable snapshot */
|
|
15150
15150
|
config: record(string(), unknown()),
|
|
15151
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15152
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15153
|
+
* when the owning runner has not reported them. */
|
|
15154
|
+
secretConfigPaths: array(string()).optional(),
|
|
15151
15155
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15152
15156
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15153
15157
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -15353,7 +15357,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15353
15357
|
* call (workers re-register on init), so probe-driven updates
|
|
15354
15358
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15355
15359
|
features: array(string()).optional(),
|
|
15356
|
-
config: record(string(), unknown())
|
|
15360
|
+
config: record(string(), unknown()),
|
|
15361
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15362
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15363
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15364
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15365
|
+
* omits it and the keyword backstop applies. */
|
|
15366
|
+
secretConfigPaths: array(string()).optional()
|
|
15357
15367
|
});
|
|
15358
15368
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15359
15369
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -17012,7 +17022,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17012
17022
|
icon: string().optional(),
|
|
17013
17023
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17014
17024
|
startUrl: string(),
|
|
17015
|
-
stage: LoginStageEnum
|
|
17025
|
+
stage: LoginStageEnum,
|
|
17026
|
+
/**
|
|
17027
|
+
* The provider names an external identity a signed-in user can link to
|
|
17028
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17029
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17030
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17031
|
+
*/
|
|
17032
|
+
linkable: boolean().optional()
|
|
17016
17033
|
}),
|
|
17017
17034
|
object({
|
|
17018
17035
|
kind: literal("widget"),
|
|
@@ -22447,7 +22464,13 @@ var RetrainFrameSchema = object({
|
|
|
22447
22464
|
sizeBytes: number().int(),
|
|
22448
22465
|
width: number().int(),
|
|
22449
22466
|
height: number().int(),
|
|
22450
|
-
copiedAt: number()
|
|
22467
|
+
copiedAt: number(),
|
|
22468
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22469
|
+
capturedAt: number().optional(),
|
|
22470
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22471
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22472
|
+
* a false positive. */
|
|
22473
|
+
complete: boolean()
|
|
22451
22474
|
});
|
|
22452
22475
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22453
22476
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22468,6 +22491,51 @@ var RetrainFrameListSchema = object({
|
|
|
22468
22491
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22469
22492
|
autoPickMediaId: number().int().optional()
|
|
22470
22493
|
});
|
|
22494
|
+
/**
|
|
22495
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22496
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22497
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22498
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22499
|
+
* export carried (`exportedInBatch`).
|
|
22500
|
+
*/
|
|
22501
|
+
var RetrainExportFilterSchema = object({
|
|
22502
|
+
deviceIds: array(number()).optional(),
|
|
22503
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
22504
|
+
batchId: string().optional(),
|
|
22505
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22506
|
+
completeOnly: boolean().optional()
|
|
22507
|
+
});
|
|
22508
|
+
/**
|
|
22509
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22510
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22511
|
+
* convention — the classifier layout.
|
|
22512
|
+
*/
|
|
22513
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22514
|
+
/**
|
|
22515
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22516
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22517
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22518
|
+
* logged.
|
|
22519
|
+
*/
|
|
22520
|
+
var RetrainArchiveTargetSchema = object({
|
|
22521
|
+
kind: literal("http"),
|
|
22522
|
+
method: _enum(["PUT", "POST"]),
|
|
22523
|
+
url: string().url(),
|
|
22524
|
+
headers: record(string(), string()).optional()
|
|
22525
|
+
});
|
|
22526
|
+
var RetrainArchiveResultSchema = object({
|
|
22527
|
+
batchId: string(),
|
|
22528
|
+
frames: number().int(),
|
|
22529
|
+
crops: number().int(),
|
|
22530
|
+
annotations: number().int(),
|
|
22531
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22532
|
+
missing: number().int(),
|
|
22533
|
+
bytes: number().int(),
|
|
22534
|
+
/** sha256 of the exact bytes sent. */
|
|
22535
|
+
sha256: string(),
|
|
22536
|
+
/** The target's HTTP status. */
|
|
22537
|
+
status: number().int()
|
|
22538
|
+
});
|
|
22471
22539
|
/** What the operator asked the assist to look for. */
|
|
22472
22540
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22473
22541
|
kind: literal("package"),
|
|
@@ -23262,9 +23330,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23262
23330
|
}), RetrainTransitionResultSchema, {
|
|
23263
23331
|
kind: "mutation",
|
|
23264
23332
|
auth: "admin"
|
|
23265
|
-
}), method(
|
|
23333
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
23266
23334
|
kind: "query",
|
|
23267
23335
|
auth: "admin"
|
|
23336
|
+
}), method(object({
|
|
23337
|
+
deviceId: number(),
|
|
23338
|
+
trackId: string(),
|
|
23339
|
+
frameId: string(),
|
|
23340
|
+
complete: boolean()
|
|
23341
|
+
}), RetrainFrameSchema, {
|
|
23342
|
+
kind: "mutation",
|
|
23343
|
+
auth: "admin"
|
|
23344
|
+
}), method(object({
|
|
23345
|
+
filter: RetrainExportFilterSchema,
|
|
23346
|
+
layout: RetrainExportLayoutSchema,
|
|
23347
|
+
target: RetrainArchiveTargetSchema
|
|
23348
|
+
}), RetrainArchiveResultSchema, {
|
|
23349
|
+
kind: "mutation",
|
|
23350
|
+
auth: "admin",
|
|
23351
|
+
timeoutMs: 60 * 6e4
|
|
23268
23352
|
}), method(object({
|
|
23269
23353
|
/** Which of the three event tables owns the row. */
|
|
23270
23354
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26698,7 +26782,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26698
26782
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26699
26783
|
* operator already consented to.
|
|
26700
26784
|
*/
|
|
26701
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26785
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26786
|
+
/**
|
|
26787
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26788
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26789
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26790
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26791
|
+
*/
|
|
26792
|
+
linkIntent: string().optional(),
|
|
26793
|
+
/**
|
|
26794
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26795
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26796
|
+
*/
|
|
26797
|
+
issuer: string().optional()
|
|
26702
26798
|
});
|
|
26703
26799
|
method(object({
|
|
26704
26800
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28633,7 +28729,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28633
28729
|
* field their hints were silently stripped by the schema and the
|
|
28634
28730
|
* adaptive ladder started blind on the client's display size.
|
|
28635
28731
|
*/
|
|
28636
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28732
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28733
|
+
/**
|
|
28734
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28735
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28736
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28737
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28738
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28739
|
+
*
|
|
28740
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28741
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28742
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28743
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28744
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28745
|
+
* flag must not become a second door to the camera's speaker.
|
|
28746
|
+
*/
|
|
28747
|
+
talkback: boolean().optional()
|
|
28637
28748
|
}), object({
|
|
28638
28749
|
sessionId: string(),
|
|
28639
28750
|
sdpAnswer: string()
|
|
@@ -38995,6 +39106,32 @@ var TotpStatusSchema = object({
|
|
|
38995
39106
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
38996
39107
|
confirmedAt: number().nullable()
|
|
38997
39108
|
});
|
|
39109
|
+
/**
|
|
39110
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39111
|
+
* and scoped tokens.
|
|
39112
|
+
*
|
|
39113
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39114
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39115
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39116
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39117
|
+
* provider.
|
|
39118
|
+
*/
|
|
39119
|
+
var ExternalIdentitySchema = object({
|
|
39120
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39121
|
+
provider: string(),
|
|
39122
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39123
|
+
subject: string(),
|
|
39124
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39125
|
+
issuer: string(),
|
|
39126
|
+
userId: string(),
|
|
39127
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39128
|
+
label: string().optional(),
|
|
39129
|
+
linkedAt: number()
|
|
39130
|
+
});
|
|
39131
|
+
var ExternalIdentityKeySchema = object({
|
|
39132
|
+
provider: string().min(1),
|
|
39133
|
+
subject: string().min(1)
|
|
39134
|
+
});
|
|
38998
39135
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
38999
39136
|
kind: "mutation",
|
|
39000
39137
|
auth: "admin",
|
|
@@ -39108,7 +39245,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39108
39245
|
userId: string(),
|
|
39109
39246
|
username: string(),
|
|
39110
39247
|
scopes: array(TokenScopeSchema)
|
|
39111
|
-
}).nullable(), { access: "view" }), method(
|
|
39248
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39249
|
+
userId: string(),
|
|
39250
|
+
issuer: string()
|
|
39251
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39252
|
+
userId: string(),
|
|
39253
|
+
issuer: string().min(1),
|
|
39254
|
+
label: string().optional()
|
|
39255
|
+
}), object({ success: literal(true) }), {
|
|
39256
|
+
kind: "mutation",
|
|
39257
|
+
auth: "admin",
|
|
39258
|
+
access: "create"
|
|
39259
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
39260
|
+
kind: "mutation",
|
|
39261
|
+
auth: "admin",
|
|
39262
|
+
access: "delete"
|
|
39263
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
39112
39264
|
kind: "mutation",
|
|
39113
39265
|
auth: "admin",
|
|
39114
39266
|
access: "delete"
|
|
@@ -45748,6 +45900,12 @@ Object.freeze({
|
|
|
45748
45900
|
addonId: null,
|
|
45749
45901
|
access: "create"
|
|
45750
45902
|
},
|
|
45903
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45904
|
+
capName: "pipeline-analytics",
|
|
45905
|
+
capScope: "device",
|
|
45906
|
+
addonId: null,
|
|
45907
|
+
access: "create"
|
|
45908
|
+
},
|
|
45751
45909
|
"pipelineAnalytics.setTrackFlags": {
|
|
45752
45910
|
capName: "pipeline-analytics",
|
|
45753
45911
|
capScope: "device",
|
|
@@ -45784,6 +45942,12 @@ Object.freeze({
|
|
|
45784
45942
|
addonId: null,
|
|
45785
45943
|
access: "delete"
|
|
45786
45944
|
},
|
|
45945
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45946
|
+
capName: "pipeline-analytics",
|
|
45947
|
+
capScope: "device",
|
|
45948
|
+
addonId: null,
|
|
45949
|
+
access: "create"
|
|
45950
|
+
},
|
|
45787
45951
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45788
45952
|
capName: "pipeline-executor",
|
|
45789
45953
|
capScope: "system",
|
|
@@ -48136,18 +48300,36 @@ Object.freeze({
|
|
|
48136
48300
|
addonId: null,
|
|
48137
48301
|
access: "delete"
|
|
48138
48302
|
},
|
|
48303
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48304
|
+
capName: "user-management",
|
|
48305
|
+
capScope: "system",
|
|
48306
|
+
addonId: null,
|
|
48307
|
+
access: "view"
|
|
48308
|
+
},
|
|
48139
48309
|
"userManagement.getTotpStatus": {
|
|
48140
48310
|
capName: "user-management",
|
|
48141
48311
|
capScope: "system",
|
|
48142
48312
|
addonId: null,
|
|
48143
48313
|
access: "view"
|
|
48144
48314
|
},
|
|
48315
|
+
"userManagement.linkExternalIdentity": {
|
|
48316
|
+
capName: "user-management",
|
|
48317
|
+
capScope: "system",
|
|
48318
|
+
addonId: null,
|
|
48319
|
+
access: "create"
|
|
48320
|
+
},
|
|
48145
48321
|
"userManagement.listApiKeys": {
|
|
48146
48322
|
capName: "user-management",
|
|
48147
48323
|
capScope: "system",
|
|
48148
48324
|
addonId: null,
|
|
48149
48325
|
access: "view"
|
|
48150
48326
|
},
|
|
48327
|
+
"userManagement.listExternalIdentities": {
|
|
48328
|
+
capName: "user-management",
|
|
48329
|
+
capScope: "system",
|
|
48330
|
+
addonId: null,
|
|
48331
|
+
access: "view"
|
|
48332
|
+
},
|
|
48151
48333
|
"userManagement.listOauthSessions": {
|
|
48152
48334
|
capName: "user-management",
|
|
48153
48335
|
capScope: "system",
|
|
@@ -48226,6 +48408,12 @@ Object.freeze({
|
|
|
48226
48408
|
addonId: null,
|
|
48227
48409
|
access: "create"
|
|
48228
48410
|
},
|
|
48411
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48412
|
+
capName: "user-management",
|
|
48413
|
+
capScope: "system",
|
|
48414
|
+
addonId: null,
|
|
48415
|
+
access: "delete"
|
|
48416
|
+
},
|
|
48229
48417
|
"userManagement.updateUser": {
|
|
48230
48418
|
capName: "user-management",
|
|
48231
48419
|
capScope: "system",
|
|
@@ -51565,6 +51753,11 @@ Object.freeze({
|
|
|
51565
51753
|
form: "single",
|
|
51566
51754
|
optional: false
|
|
51567
51755
|
}],
|
|
51756
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51757
|
+
name: "deviceId",
|
|
51758
|
+
form: "single",
|
|
51759
|
+
optional: false
|
|
51760
|
+
}],
|
|
51568
51761
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51569
51762
|
name: "deviceId",
|
|
51570
51763
|
form: "single",
|
|
@@ -58247,8 +58440,8 @@ function defaultWyzeCloudFacadeFactory(credentials) {
|
|
|
58247
58440
|
}
|
|
58248
58441
|
var wyzeCredentialsSchema = object({
|
|
58249
58442
|
email: string().min(1).describe("Wyze account email"),
|
|
58250
|
-
password: string().min(1).describe("Wyze account password"),
|
|
58251
|
-
apiKey: string().min(1).describe("Wyze developer API key"),
|
|
58443
|
+
password: string().min(1).describe("Wyze account password").meta({ secret: true }),
|
|
58444
|
+
apiKey: string().min(1).describe("Wyze developer API key").meta({ secret: true }),
|
|
58252
58445
|
apiId: string().min(1).describe("Wyze developer Key ID")
|
|
58253
58446
|
});
|
|
58254
58447
|
var TEST_LABEL = "Signs in to the Wyze cloud with these account credentials";
|
package/dist/addon.mjs
CHANGED
|
@@ -5381,7 +5381,7 @@ var ZodIssueCode = {
|
|
|
5381
5381
|
var ZodFirstPartyTypeKind;
|
|
5382
5382
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5383
5383
|
//#endregion
|
|
5384
|
-
//#region ../types/dist/sleep-
|
|
5384
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5385
5385
|
/**
|
|
5386
5386
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5387
5387
|
* window to float samples (D455).
|
|
@@ -15127,6 +15127,10 @@ var DeviceInfoSchema = object({
|
|
|
15127
15127
|
isCamera: boolean(),
|
|
15128
15128
|
/** Current config values — serializable snapshot */
|
|
15129
15129
|
config: record(string(), unknown()),
|
|
15130
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15131
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15132
|
+
* when the owning runner has not reported them. */
|
|
15133
|
+
secretConfigPaths: array(string()).optional(),
|
|
15130
15134
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15131
15135
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15132
15136
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -15332,7 +15336,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
15332
15336
|
* call (workers re-register on init), so probe-driven updates
|
|
15333
15337
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
15334
15338
|
features: array(string()).optional(),
|
|
15335
|
-
config: record(string(), unknown())
|
|
15339
|
+
config: record(string(), unknown()),
|
|
15340
|
+
/** Config paths the device's own schema DECLARES secret
|
|
15341
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
15342
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
15343
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
15344
|
+
* omits it and the keyword backstop applies. */
|
|
15345
|
+
secretConfigPaths: array(string()).optional()
|
|
15336
15346
|
});
|
|
15337
15347
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
15338
15348
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -16991,7 +17001,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
16991
17001
|
icon: string().optional(),
|
|
16992
17002
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
16993
17003
|
startUrl: string(),
|
|
16994
|
-
stage: LoginStageEnum
|
|
17004
|
+
stage: LoginStageEnum,
|
|
17005
|
+
/**
|
|
17006
|
+
* The provider names an external identity a signed-in user can link to
|
|
17007
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17008
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17009
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17010
|
+
*/
|
|
17011
|
+
linkable: boolean().optional()
|
|
16995
17012
|
}),
|
|
16996
17013
|
object({
|
|
16997
17014
|
kind: literal("widget"),
|
|
@@ -22426,7 +22443,13 @@ var RetrainFrameSchema = object({
|
|
|
22426
22443
|
sizeBytes: number().int(),
|
|
22427
22444
|
width: number().int(),
|
|
22428
22445
|
height: number().int(),
|
|
22429
|
-
copiedAt: number()
|
|
22446
|
+
copiedAt: number(),
|
|
22447
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
22448
|
+
capturedAt: number().optional(),
|
|
22449
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
22450
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
22451
|
+
* a false positive. */
|
|
22452
|
+
complete: boolean()
|
|
22430
22453
|
});
|
|
22431
22454
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
22432
22455
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -22447,6 +22470,51 @@ var RetrainFrameListSchema = object({
|
|
|
22447
22470
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
22448
22471
|
autoPickMediaId: number().int().optional()
|
|
22449
22472
|
});
|
|
22473
|
+
/**
|
|
22474
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
22475
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
22476
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
22477
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
22478
|
+
* export carried (`exportedInBatch`).
|
|
22479
|
+
*/
|
|
22480
|
+
var RetrainExportFilterSchema = object({
|
|
22481
|
+
deviceIds: array(number()).optional(),
|
|
22482
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
22483
|
+
batchId: string().optional(),
|
|
22484
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
22485
|
+
completeOnly: boolean().optional()
|
|
22486
|
+
});
|
|
22487
|
+
/**
|
|
22488
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
22489
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
22490
|
+
* convention — the classifier layout.
|
|
22491
|
+
*/
|
|
22492
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
22493
|
+
/**
|
|
22494
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
22495
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
22496
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
22497
|
+
* logged.
|
|
22498
|
+
*/
|
|
22499
|
+
var RetrainArchiveTargetSchema = object({
|
|
22500
|
+
kind: literal("http"),
|
|
22501
|
+
method: _enum(["PUT", "POST"]),
|
|
22502
|
+
url: string().url(),
|
|
22503
|
+
headers: record(string(), string()).optional()
|
|
22504
|
+
});
|
|
22505
|
+
var RetrainArchiveResultSchema = object({
|
|
22506
|
+
batchId: string(),
|
|
22507
|
+
frames: number().int(),
|
|
22508
|
+
crops: number().int(),
|
|
22509
|
+
annotations: number().int(),
|
|
22510
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
22511
|
+
missing: number().int(),
|
|
22512
|
+
bytes: number().int(),
|
|
22513
|
+
/** sha256 of the exact bytes sent. */
|
|
22514
|
+
sha256: string(),
|
|
22515
|
+
/** The target's HTTP status. */
|
|
22516
|
+
status: number().int()
|
|
22517
|
+
});
|
|
22450
22518
|
/** What the operator asked the assist to look for. */
|
|
22451
22519
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
22452
22520
|
kind: literal("package"),
|
|
@@ -23241,9 +23309,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23241
23309
|
}), RetrainTransitionResultSchema, {
|
|
23242
23310
|
kind: "mutation",
|
|
23243
23311
|
auth: "admin"
|
|
23244
|
-
}), method(
|
|
23312
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
23245
23313
|
kind: "query",
|
|
23246
23314
|
auth: "admin"
|
|
23315
|
+
}), method(object({
|
|
23316
|
+
deviceId: number(),
|
|
23317
|
+
trackId: string(),
|
|
23318
|
+
frameId: string(),
|
|
23319
|
+
complete: boolean()
|
|
23320
|
+
}), RetrainFrameSchema, {
|
|
23321
|
+
kind: "mutation",
|
|
23322
|
+
auth: "admin"
|
|
23323
|
+
}), method(object({
|
|
23324
|
+
filter: RetrainExportFilterSchema,
|
|
23325
|
+
layout: RetrainExportLayoutSchema,
|
|
23326
|
+
target: RetrainArchiveTargetSchema
|
|
23327
|
+
}), RetrainArchiveResultSchema, {
|
|
23328
|
+
kind: "mutation",
|
|
23329
|
+
auth: "admin",
|
|
23330
|
+
timeoutMs: 60 * 6e4
|
|
23247
23331
|
}), method(object({
|
|
23248
23332
|
/** Which of the three event tables owns the row. */
|
|
23249
23333
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -26677,7 +26761,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
26677
26761
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
26678
26762
|
* operator already consented to.
|
|
26679
26763
|
*/
|
|
26680
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
26764
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
26765
|
+
/**
|
|
26766
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
26767
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
26768
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
26769
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
26770
|
+
*/
|
|
26771
|
+
linkIntent: string().optional(),
|
|
26772
|
+
/**
|
|
26773
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
26774
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
26775
|
+
*/
|
|
26776
|
+
issuer: string().optional()
|
|
26681
26777
|
});
|
|
26682
26778
|
method(object({
|
|
26683
26779
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -28612,7 +28708,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28612
28708
|
* field their hints were silently stripped by the schema and the
|
|
28613
28709
|
* adaptive ladder started blind on the client's display size.
|
|
28614
28710
|
*/
|
|
28615
|
-
hints: webrtcClientHintsSchema.optional()
|
|
28711
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
28712
|
+
/**
|
|
28713
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
28714
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
28715
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
28716
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
28717
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
28718
|
+
*
|
|
28719
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
28720
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
28721
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
28722
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
28723
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
28724
|
+
* flag must not become a second door to the camera's speaker.
|
|
28725
|
+
*/
|
|
28726
|
+
talkback: boolean().optional()
|
|
28616
28727
|
}), object({
|
|
28617
28728
|
sessionId: string(),
|
|
28618
28729
|
sdpAnswer: string()
|
|
@@ -38974,6 +39085,32 @@ var TotpStatusSchema = object({
|
|
|
38974
39085
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
38975
39086
|
confirmedAt: number().nullable()
|
|
38976
39087
|
});
|
|
39088
|
+
/**
|
|
39089
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
39090
|
+
* and scoped tokens.
|
|
39091
|
+
*
|
|
39092
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
39093
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
39094
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
39095
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
39096
|
+
* provider.
|
|
39097
|
+
*/
|
|
39098
|
+
var ExternalIdentitySchema = object({
|
|
39099
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
39100
|
+
provider: string(),
|
|
39101
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
39102
|
+
subject: string(),
|
|
39103
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
39104
|
+
issuer: string(),
|
|
39105
|
+
userId: string(),
|
|
39106
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
39107
|
+
label: string().optional(),
|
|
39108
|
+
linkedAt: number()
|
|
39109
|
+
});
|
|
39110
|
+
var ExternalIdentityKeySchema = object({
|
|
39111
|
+
provider: string().min(1),
|
|
39112
|
+
subject: string().min(1)
|
|
39113
|
+
});
|
|
38977
39114
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
38978
39115
|
kind: "mutation",
|
|
38979
39116
|
auth: "admin",
|
|
@@ -39087,7 +39224,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
39087
39224
|
userId: string(),
|
|
39088
39225
|
username: string(),
|
|
39089
39226
|
scopes: array(TokenScopeSchema)
|
|
39090
|
-
}).nullable(), { access: "view" }), method(
|
|
39227
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
39228
|
+
userId: string(),
|
|
39229
|
+
issuer: string()
|
|
39230
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
39231
|
+
userId: string(),
|
|
39232
|
+
issuer: string().min(1),
|
|
39233
|
+
label: string().optional()
|
|
39234
|
+
}), object({ success: literal(true) }), {
|
|
39235
|
+
kind: "mutation",
|
|
39236
|
+
auth: "admin",
|
|
39237
|
+
access: "create"
|
|
39238
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
39239
|
+
kind: "mutation",
|
|
39240
|
+
auth: "admin",
|
|
39241
|
+
access: "delete"
|
|
39242
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
39091
39243
|
kind: "mutation",
|
|
39092
39244
|
auth: "admin",
|
|
39093
39245
|
access: "delete"
|
|
@@ -45727,6 +45879,12 @@ Object.freeze({
|
|
|
45727
45879
|
addonId: null,
|
|
45728
45880
|
access: "create"
|
|
45729
45881
|
},
|
|
45882
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
45883
|
+
capName: "pipeline-analytics",
|
|
45884
|
+
capScope: "device",
|
|
45885
|
+
addonId: null,
|
|
45886
|
+
access: "create"
|
|
45887
|
+
},
|
|
45730
45888
|
"pipelineAnalytics.setTrackFlags": {
|
|
45731
45889
|
capName: "pipeline-analytics",
|
|
45732
45890
|
capScope: "device",
|
|
@@ -45763,6 +45921,12 @@ Object.freeze({
|
|
|
45763
45921
|
addonId: null,
|
|
45764
45922
|
access: "delete"
|
|
45765
45923
|
},
|
|
45924
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
45925
|
+
capName: "pipeline-analytics",
|
|
45926
|
+
capScope: "device",
|
|
45927
|
+
addonId: null,
|
|
45928
|
+
access: "create"
|
|
45929
|
+
},
|
|
45766
45930
|
"pipelineExecutor.cacheFrameInPool": {
|
|
45767
45931
|
capName: "pipeline-executor",
|
|
45768
45932
|
capScope: "system",
|
|
@@ -48115,18 +48279,36 @@ Object.freeze({
|
|
|
48115
48279
|
addonId: null,
|
|
48116
48280
|
access: "delete"
|
|
48117
48281
|
},
|
|
48282
|
+
"userManagement.findUserByExternalIdentity": {
|
|
48283
|
+
capName: "user-management",
|
|
48284
|
+
capScope: "system",
|
|
48285
|
+
addonId: null,
|
|
48286
|
+
access: "view"
|
|
48287
|
+
},
|
|
48118
48288
|
"userManagement.getTotpStatus": {
|
|
48119
48289
|
capName: "user-management",
|
|
48120
48290
|
capScope: "system",
|
|
48121
48291
|
addonId: null,
|
|
48122
48292
|
access: "view"
|
|
48123
48293
|
},
|
|
48294
|
+
"userManagement.linkExternalIdentity": {
|
|
48295
|
+
capName: "user-management",
|
|
48296
|
+
capScope: "system",
|
|
48297
|
+
addonId: null,
|
|
48298
|
+
access: "create"
|
|
48299
|
+
},
|
|
48124
48300
|
"userManagement.listApiKeys": {
|
|
48125
48301
|
capName: "user-management",
|
|
48126
48302
|
capScope: "system",
|
|
48127
48303
|
addonId: null,
|
|
48128
48304
|
access: "view"
|
|
48129
48305
|
},
|
|
48306
|
+
"userManagement.listExternalIdentities": {
|
|
48307
|
+
capName: "user-management",
|
|
48308
|
+
capScope: "system",
|
|
48309
|
+
addonId: null,
|
|
48310
|
+
access: "view"
|
|
48311
|
+
},
|
|
48130
48312
|
"userManagement.listOauthSessions": {
|
|
48131
48313
|
capName: "user-management",
|
|
48132
48314
|
capScope: "system",
|
|
@@ -48205,6 +48387,12 @@ Object.freeze({
|
|
|
48205
48387
|
addonId: null,
|
|
48206
48388
|
access: "create"
|
|
48207
48389
|
},
|
|
48390
|
+
"userManagement.unlinkExternalIdentity": {
|
|
48391
|
+
capName: "user-management",
|
|
48392
|
+
capScope: "system",
|
|
48393
|
+
addonId: null,
|
|
48394
|
+
access: "delete"
|
|
48395
|
+
},
|
|
48208
48396
|
"userManagement.updateUser": {
|
|
48209
48397
|
capName: "user-management",
|
|
48210
48398
|
capScope: "system",
|
|
@@ -51544,6 +51732,11 @@ Object.freeze({
|
|
|
51544
51732
|
form: "single",
|
|
51545
51733
|
optional: false
|
|
51546
51734
|
}],
|
|
51735
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
51736
|
+
name: "deviceId",
|
|
51737
|
+
form: "single",
|
|
51738
|
+
optional: false
|
|
51739
|
+
}],
|
|
51547
51740
|
"pipelineAnalytics.setTrackFlags": [{
|
|
51548
51741
|
name: "deviceId",
|
|
51549
51742
|
form: "single",
|
|
@@ -58226,8 +58419,8 @@ function defaultWyzeCloudFacadeFactory(credentials) {
|
|
|
58226
58419
|
}
|
|
58227
58420
|
var wyzeCredentialsSchema = object({
|
|
58228
58421
|
email: string().min(1).describe("Wyze account email"),
|
|
58229
|
-
password: string().min(1).describe("Wyze account password"),
|
|
58230
|
-
apiKey: string().min(1).describe("Wyze developer API key"),
|
|
58422
|
+
password: string().min(1).describe("Wyze account password").meta({ secret: true }),
|
|
58423
|
+
apiKey: string().min(1).describe("Wyze developer API key").meta({ secret: true }),
|
|
58231
58424
|
apiId: string().min(1).describe("Wyze developer Key ID")
|
|
58232
58425
|
});
|
|
58233
58426
|
var TEST_LABEL = "Signs in to the Wyze cloud with these account credentials";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-wyze",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.131",
|
|
4
4
|
"description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|