@camstack/addon-agent-ui 1.2.139 → 1.2.140
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 +139 -2
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5361,7 +5361,7 @@ var ZodIssueCode = {
|
|
|
5361
5361
|
var ZodFirstPartyTypeKind;
|
|
5362
5362
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5363
5363
|
//#endregion
|
|
5364
|
-
//#region ../types/dist/sleep-
|
|
5364
|
+
//#region ../types/dist/sleep-COWaSCAi.mjs
|
|
5365
5365
|
/**
|
|
5366
5366
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5367
5367
|
* window to float samples (D455).
|
|
@@ -7533,6 +7533,24 @@ object({
|
|
|
7533
7533
|
unreachable: number()
|
|
7534
7534
|
})
|
|
7535
7535
|
});
|
|
7536
|
+
/** The wire shape of {@link PeerBytesTicket} — see the type for what it is. */
|
|
7537
|
+
var PeerBytesTicketSchema = object({
|
|
7538
|
+
/** `http://127.0.0.1:<port>/<token>`. One `GET` takes it. */
|
|
7539
|
+
url: string().min(1),
|
|
7540
|
+
/**
|
|
7541
|
+
* The HOST node this URL means something on — the hub or a named agent,
|
|
7542
|
+
* never a runner. {@link AddonPeerBytes.open} compares it to its own and
|
|
7543
|
+
* refuses `cross-node` by name when they differ, without dialling.
|
|
7544
|
+
*/
|
|
7545
|
+
hostNodeId: string().min(1),
|
|
7546
|
+
expiresAtMs: number().int().nonnegative(),
|
|
7547
|
+
/**
|
|
7548
|
+
* What the producer DECLARED the body to be, when it knows — `null` when it
|
|
7549
|
+
* does not. Never `0` for unknown (D393): a consumer sizing a bound off this
|
|
7550
|
+
* must be able to tell "the producer did not say" from "the body is empty".
|
|
7551
|
+
*/
|
|
7552
|
+
declaredBytes: number().int().nonnegative().nullable()
|
|
7553
|
+
});
|
|
7536
7554
|
/**
|
|
7537
7555
|
* Adoption job — the background form of `device-adoption.adopt`.
|
|
7538
7556
|
*
|
|
@@ -24092,6 +24110,7 @@ _enum([
|
|
|
24092
24110
|
"sleeping",
|
|
24093
24111
|
"camera-refused",
|
|
24094
24112
|
"no-keyframe",
|
|
24113
|
+
"decode-failed",
|
|
24095
24114
|
"no-catalog-row",
|
|
24096
24115
|
"unsupported",
|
|
24097
24116
|
"unknown-device",
|
|
@@ -24366,6 +24385,32 @@ var ClipBytesSchema = object({
|
|
|
24366
24385
|
durationMs: number().positive().optional()
|
|
24367
24386
|
});
|
|
24368
24387
|
/**
|
|
24388
|
+
* Where a clip's finished bytes can be TAKEN (D613) — the answer to
|
|
24389
|
+
* {@link videoclipsCapability.methods.offerClipBytes}.
|
|
24390
|
+
*
|
|
24391
|
+
* Everything {@link ClipBytesSchema} carries except the bytes themselves, plus
|
|
24392
|
+
* the one-shot ticket that leads to them. The metadata is answered BEFORE the
|
|
24393
|
+
* transfer on purpose: a consumer learns which twin it got, what to call the
|
|
24394
|
+
* file and how long the clip runs without having to read a byte, so a decision
|
|
24395
|
+
* it would make on that metadata (a wrong twin, an implausible duration) costs
|
|
24396
|
+
* no transfer at all.
|
|
24397
|
+
*/
|
|
24398
|
+
var ClipBytesOfferSchema = object({
|
|
24399
|
+
/**
|
|
24400
|
+
* One shot, seconds-long, loopback, on the PROVIDER's own host. Open it with
|
|
24401
|
+
* `ctx.peerBytes.open(...)`, which refuses a ticket from another node by
|
|
24402
|
+
* name rather than dialling a port that means something else here.
|
|
24403
|
+
*/
|
|
24404
|
+
ticket: PeerBytesTicketSchema,
|
|
24405
|
+
contentType: string(),
|
|
24406
|
+
/** Suggested filename, extension included. */
|
|
24407
|
+
name: string(),
|
|
24408
|
+
/** Which twin was actually served — see {@link ClipBytesSchema.served}. */
|
|
24409
|
+
served: CamProfileSchema,
|
|
24410
|
+
/** See {@link ClipBytesSchema.durationMs}. Absent when nothing measured it. */
|
|
24411
|
+
durationMs: number().positive().optional()
|
|
24412
|
+
});
|
|
24413
|
+
/**
|
|
24369
24414
|
* Where a clip's STREAM can be dialled (D597) — the answer to
|
|
24370
24415
|
* {@link videoclipsCapability.methods.dialClipStream}.
|
|
24371
24416
|
*
|
|
@@ -24441,6 +24486,44 @@ var ClipStreamDialSchema = object({
|
|
|
24441
24486
|
/** Why `servedAudio` is `none` although sound was asked for. */
|
|
24442
24487
|
audioReason: ClipStreamAudioReasonSchema.optional()
|
|
24443
24488
|
});
|
|
24489
|
+
/**
|
|
24490
|
+
* What a surface may DRAW for this provider's clips — the answer to
|
|
24491
|
+
* {@link videoclipsCapability.methods.getPlaybackOptions} (D612).
|
|
24492
|
+
*
|
|
24493
|
+
* The envelope is a PROVIDER fact, not a clip fact, and that is measured, not
|
|
24494
|
+
* assumed: the broker's `chooseClipPath` reads exactly two inputs — whether
|
|
24495
|
+
* `dialClipStream` and `readClipBytes` are wired — and both are constants of
|
|
24496
|
+
* the broker's own closure over the provider's methods. The `profile` it is
|
|
24497
|
+
* handed is explicitly not read. So every clip of a provider is served the
|
|
24498
|
+
* same way, and a per-clip channel carried a value that could not vary. The
|
|
24499
|
+
* per-clip `clipTransport` server message was removed for exactly that reason.
|
|
24500
|
+
*
|
|
24501
|
+
* Queried per camera, before a clip is picked, so a control is rendered or
|
|
24502
|
+
* DISABLED rather than offered and refused at play time (D62: a disabled
|
|
24503
|
+
* control reads as unavailable, one that undoes the gesture reads as broken).
|
|
24504
|
+
*/
|
|
24505
|
+
var ClipPlaybackOptionsSchema = object({
|
|
24506
|
+
/**
|
|
24507
|
+
* How this provider's clips reach the player. `stream` is the provider's
|
|
24508
|
+
* forward-only fMP4 (D597); `file` is one bounded by-handle fetch of the
|
|
24509
|
+
* whole clip, `stbl` indexed (D575).
|
|
24510
|
+
*/
|
|
24511
|
+
transport: _enum(["stream", "file"]),
|
|
24512
|
+
/** `forward` = only ahead of the playhead. `free` = anywhere. */
|
|
24513
|
+
seek: _enum(["forward", "free"]),
|
|
24514
|
+
/** Frame-step BACKWARD is meaningful. Forward always is. */
|
|
24515
|
+
stepBack: boolean(),
|
|
24516
|
+
/** Whether the scrub gesture is served, as opposed to refused by name. */
|
|
24517
|
+
scrub: boolean(),
|
|
24518
|
+
/**
|
|
24519
|
+
* The rates that can be delivered, ascending, always containing `1`. The
|
|
24520
|
+
* viewer draws its picker from this and from nothing else — a constant it
|
|
24521
|
+
* keeps instead is the second authority that produced the defect: `8` and
|
|
24522
|
+
* `16` were offered, the broker clamped them to `4`, and no line anywhere
|
|
24523
|
+
* said so. `0` is not a member: pause is the absence of a rate.
|
|
24524
|
+
*/
|
|
24525
|
+
rates: array(number().positive()).min(1).readonly()
|
|
24526
|
+
});
|
|
24444
24527
|
var ClipSourceAvailabilitySchema = object({
|
|
24445
24528
|
state: _enum([
|
|
24446
24529
|
"ok",
|
|
@@ -24600,6 +24683,29 @@ DeviceType.Camera, method(object({
|
|
|
24600
24683
|
}), ClipBytesSchema, {
|
|
24601
24684
|
kind: "query",
|
|
24602
24685
|
auth: "protected"
|
|
24686
|
+
}), optionalMethod(object({
|
|
24687
|
+
deviceId: number(),
|
|
24688
|
+
clipId: string().min(1),
|
|
24689
|
+
/** WHICH provider holds the bytes — see `readClipBytes.provider`. */
|
|
24690
|
+
provider: string().min(1),
|
|
24691
|
+
/** Which twin — `low | mid` → the sub file, `high` → the main twin. */
|
|
24692
|
+
profile: CamProfileSchema.optional(),
|
|
24693
|
+
/**
|
|
24694
|
+
* The CALLER's byte bound, so an over-size clip is refused before the
|
|
24695
|
+
* camera is touched rather than after. Capped by
|
|
24696
|
+
* {@link VIDEOCLIPS_MAX_OFFER_BYTES} whatever is passed; absent means
|
|
24697
|
+
* that ceiling.
|
|
24698
|
+
*/
|
|
24699
|
+
maxBytes: number().int().positive().optional(),
|
|
24700
|
+
/**
|
|
24701
|
+
* The operator's authorisation to wake a sleeping camera for this
|
|
24702
|
+
* read. Absent — the default — means a sleeping standalone battery
|
|
24703
|
+
* camera is REFUSED by name, before any session is opened.
|
|
24704
|
+
*/
|
|
24705
|
+
wake: ClipWakeSchema.optional()
|
|
24706
|
+
}), ClipBytesOfferSchema, {
|
|
24707
|
+
kind: "query",
|
|
24708
|
+
auth: "protected"
|
|
24603
24709
|
}), optionalMethod(object({
|
|
24604
24710
|
deviceId: number(),
|
|
24605
24711
|
clipId: string().min(1),
|
|
@@ -24621,6 +24727,15 @@ DeviceType.Camera, method(object({
|
|
|
24621
24727
|
}), ClipStreamDialSchema, {
|
|
24622
24728
|
kind: "query",
|
|
24623
24729
|
auth: "protected"
|
|
24730
|
+
}), optionalMethod(object({
|
|
24731
|
+
deviceId: number(),
|
|
24732
|
+
/** WHICH provider to ask — the `addonId` a {@link ClipSourceSchema}
|
|
24733
|
+
* row carries. Required for the same reason `listClips` requires it:
|
|
24734
|
+
* a collection cap has no "the bound one" to resolve to (D554). */
|
|
24735
|
+
provider: string().min(1)
|
|
24736
|
+
}), ClipPlaybackOptionsSchema, {
|
|
24737
|
+
kind: "query",
|
|
24738
|
+
auth: "protected"
|
|
24624
24739
|
});
|
|
24625
24740
|
/**
|
|
24626
24741
|
* Optional client-side hints sent at session creation to help the provider
|
|
@@ -40997,6 +41112,12 @@ Object.freeze({
|
|
|
40997
41112
|
addonId: null,
|
|
40998
41113
|
access: "view"
|
|
40999
41114
|
},
|
|
41115
|
+
"videoclips.getPlaybackOptions": {
|
|
41116
|
+
capName: "videoclips",
|
|
41117
|
+
capScope: "device",
|
|
41118
|
+
addonId: null,
|
|
41119
|
+
access: "view"
|
|
41120
|
+
},
|
|
41000
41121
|
"videoclips.listClips": {
|
|
41001
41122
|
capName: "videoclips",
|
|
41002
41123
|
capScope: "device",
|
|
@@ -41009,6 +41130,12 @@ Object.freeze({
|
|
|
41009
41130
|
addonId: null,
|
|
41010
41131
|
access: "view"
|
|
41011
41132
|
},
|
|
41133
|
+
"videoclips.offerClipBytes": {
|
|
41134
|
+
capName: "videoclips",
|
|
41135
|
+
capScope: "device",
|
|
41136
|
+
addonId: null,
|
|
41137
|
+
access: "view"
|
|
41138
|
+
},
|
|
41012
41139
|
"videoclips.readClipBytes": {
|
|
41013
41140
|
capName: "videoclips",
|
|
41014
41141
|
capScope: "device",
|
|
@@ -43055,6 +43182,11 @@ Object.freeze({
|
|
|
43055
43182
|
form: "single",
|
|
43056
43183
|
optional: false
|
|
43057
43184
|
}],
|
|
43185
|
+
"videoclips.getPlaybackOptions": [{
|
|
43186
|
+
name: "deviceId",
|
|
43187
|
+
form: "single",
|
|
43188
|
+
optional: false
|
|
43189
|
+
}],
|
|
43058
43190
|
"videoclips.listClips": [{
|
|
43059
43191
|
name: "deviceId",
|
|
43060
43192
|
form: "single",
|
|
@@ -43065,6 +43197,11 @@ Object.freeze({
|
|
|
43065
43197
|
form: "single",
|
|
43066
43198
|
optional: false
|
|
43067
43199
|
}],
|
|
43200
|
+
"videoclips.offerClipBytes": [{
|
|
43201
|
+
name: "deviceId",
|
|
43202
|
+
form: "single",
|
|
43203
|
+
optional: false
|
|
43204
|
+
}],
|
|
43068
43205
|
"videoclips.readClipBytes": [{
|
|
43069
43206
|
name: "deviceId",
|
|
43070
43207
|
form: "single",
|
|
@@ -43749,7 +43886,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
43749
43886
|
capability: adminUiCapability,
|
|
43750
43887
|
provider: {
|
|
43751
43888
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
43752
|
-
getVersion: async () => ({ version: "1.2.
|
|
43889
|
+
getVersion: async () => ({ version: "1.2.140" })
|
|
43753
43890
|
}
|
|
43754
43891
|
}];
|
|
43755
43892
|
}
|