@aperture-browser/api-schema 0.0.0-init.0 → 0.0.0-nightly.100.78b4e7ef6edc
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/README.md +2 -0
- package/dist/index.d.ts +1395 -455
- package/dist/index.js +537 -265
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import * as Data from "effect/Data";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
|
+
import "effect/Redacted";
|
|
3
4
|
import * as Schema from "effect/Schema";
|
|
4
|
-
import * as
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
5
|
+
import * as Stream from "effect/Stream";
|
|
6
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
7
|
+
import * as HttpClientError from "effect/http/HttpClientError";
|
|
8
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
9
|
+
import * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
7
10
|
//#region src/api.gen.ts
|
|
8
11
|
const Health = Schema.Struct({
|
|
9
12
|
"status": Schema.Literal("ok").annotate({ "description": "Process health. A successful response currently reports `ok`." }),
|
|
@@ -109,7 +112,7 @@ const PageMeta = Schema.Struct({
|
|
|
109
112
|
const TenantInput = Schema.Struct({ "displayName": Schema.String.annotate({
|
|
110
113
|
"description": "Human-readable tenant name. Leading and trailing whitespace is removed and whitespace-only values are rejected.",
|
|
111
114
|
"examples": ["Example engineering"]
|
|
112
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })) }).annotate({
|
|
115
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })) }).annotate({
|
|
113
116
|
"description": "Tenant fields accepted by create and update operations.",
|
|
114
117
|
"identifier": "TenantInput"
|
|
115
118
|
});
|
|
@@ -118,7 +121,7 @@ const UserInput = Schema.Struct({
|
|
|
118
121
|
"description": "Optional normalized login and contact email.",
|
|
119
122
|
"format": "email"
|
|
120
123
|
})),
|
|
121
|
-
"displayName": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
124
|
+
"displayName": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
122
125
|
"isSystemAdmin": Schema.Boolean.annotate({ "description": "Grants deployment-wide administration independently of tenant memberships." })
|
|
123
126
|
}).annotate({ "identifier": "UserInput" });
|
|
124
127
|
const UserInvitation = Schema.Struct({
|
|
@@ -139,6 +142,7 @@ const TenantScope = Schema.Literals([
|
|
|
139
142
|
"examples": ["sessions:write"],
|
|
140
143
|
"identifier": "TenantScope"
|
|
141
144
|
});
|
|
145
|
+
const SensitiveString = Schema.RedactedFromValue(Schema.String).annotate({ "identifier": "SensitiveString" });
|
|
142
146
|
const SessionStatus = Schema.Literals([
|
|
143
147
|
"creating",
|
|
144
148
|
"running",
|
|
@@ -151,23 +155,6 @@ const SessionStatus = Schema.Literals([
|
|
|
151
155
|
"examples": ["running"],
|
|
152
156
|
"identifier": "SessionStatus"
|
|
153
157
|
});
|
|
154
|
-
const IceServer = Schema.Struct({
|
|
155
|
-
"urls": Schema.Array(Schema.String).annotate({
|
|
156
|
-
"description": "STUN or TURN server URLs.",
|
|
157
|
-
"examples": [["turn:turn.example.com:3478?transport=udp"]]
|
|
158
|
-
}),
|
|
159
|
-
"username": Schema.optionalKey(Schema.String.annotate({
|
|
160
|
-
"description": "TURN username. Omitted when the server does not require authentication.",
|
|
161
|
-
"examples": ["aperture-session"]
|
|
162
|
-
})),
|
|
163
|
-
"credential": Schema.optionalKey(Schema.String.annotate({
|
|
164
|
-
"description": "TURN credential. Treat it as a secret and do not persist it in logs.",
|
|
165
|
-
"examples": ["REDACTED"]
|
|
166
|
-
}))
|
|
167
|
-
}).annotate({
|
|
168
|
-
"description": "ICE server configuration supplied to WebRTC consumers.",
|
|
169
|
-
"identifier": "IceServer"
|
|
170
|
-
});
|
|
171
158
|
const StringMap = Schema.Record(Schema.String, Schema.String).annotate({
|
|
172
159
|
"description": "Arbitrary string key-value metadata. Tag-writing operations additionally reject blank keys and blank values.",
|
|
173
160
|
"examples": [{
|
|
@@ -176,43 +163,28 @@ const StringMap = Schema.Record(Schema.String, Schema.String).annotate({
|
|
|
176
163
|
}],
|
|
177
164
|
"identifier": "StringMap"
|
|
178
165
|
});
|
|
179
|
-
const
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
}).annotate({
|
|
183
|
-
"description": "Owner-visible role-scoped secrets used to build collaboration links.",
|
|
184
|
-
"identifier": "SessionCollaborationCapabilities"
|
|
166
|
+
const SessionProxyUpstream = Schema.Struct({ "url": Schema.String.annotate({ "examples": ["socks5://user:xxxxx@proxy.example.com:1080"] }) }).annotate({
|
|
167
|
+
"description": "A named upstream as stored. The secret is never returned and proxy URL passwords are masked.",
|
|
168
|
+
"identifier": "SessionProxyUpstream"
|
|
185
169
|
});
|
|
186
|
-
const
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"
|
|
190
|
-
"tunnel"
|
|
191
|
-
]).annotate({
|
|
192
|
-
"description": "Upstream strategy for new connections.",
|
|
193
|
-
"examples": ["tunnel"]
|
|
170
|
+
const ProxyRule = Schema.Struct({
|
|
171
|
+
"match": Schema.String.annotate({
|
|
172
|
+
"description": "`host` or `host:port`, where the host is exact, `*.suffix` for subdomains, or `*` for any host. `*` never matches `localhost`, which only a rule naming it routes. Loopback IPs never reach the proxy, so local services are matched as `localhost`.",
|
|
173
|
+
"examples": ["*.example.test"]
|
|
194
174
|
}),
|
|
195
|
-
"
|
|
196
|
-
"description": "
|
|
197
|
-
"examples": ["
|
|
198
|
-
})
|
|
199
|
-
"tunnel": Schema.optionalKey(Schema.Struct({ "url": Schema.optionalKey(Schema.String.annotate({
|
|
200
|
-
"description": "Compound tunnel URL.",
|
|
201
|
-
"examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
|
|
202
|
-
})) }).annotate({ "description": "Tunnel endpoint. Omitted unless `upstream` is `tunnel`. The secret is never returned." })),
|
|
203
|
-
"bypass": Schema.optionalKey(Schema.String.annotate({
|
|
204
|
-
"description": "Extra `--proxy-bypass-list` entries.",
|
|
205
|
-
"examples": ["*.internal.example.com"]
|
|
206
|
-
}))
|
|
175
|
+
"via": Schema.String.annotate({
|
|
176
|
+
"description": "`direct` dials from the session host, `refuse` fails the connection, `local` uses the attached local tunnel and fails while none is attached. Anything else names an upstream, or is an inline proxy URL without a secret.",
|
|
177
|
+
"examples": ["operator"]
|
|
178
|
+
})
|
|
207
179
|
}).annotate({
|
|
208
|
-
"description": "
|
|
209
|
-
"identifier": "
|
|
180
|
+
"description": "Routes the browser connections its match covers.",
|
|
181
|
+
"identifier": "ProxyRule"
|
|
210
182
|
});
|
|
211
183
|
const BrowserConfig = Schema.Struct({
|
|
212
184
|
"channel": Schema.String.annotate({
|
|
213
185
|
"description": "Channel returned by `GET /api/browser/channels`.",
|
|
214
186
|
"examples": ["chromium"]
|
|
215
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
187
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
216
188
|
"args": Schema.optionalKey(Schema.Array(Schema.String).annotate({
|
|
217
189
|
"description": "Additional Chromium command-line arguments. Aperture rejects arguments that conflict with supervisor-owned behavior or deployment policy.",
|
|
218
190
|
"examples": [["--lang=en-US"]]
|
|
@@ -221,16 +193,12 @@ const BrowserConfig = Schema.Struct({
|
|
|
221
193
|
"description": "Browser runtime configuration used to create or reopen the session.",
|
|
222
194
|
"identifier": "BrowserConfig"
|
|
223
195
|
});
|
|
224
|
-
const BrowserStorageEntry = Schema.Struct({
|
|
225
|
-
"name": Schema.String,
|
|
226
|
-
"value": Schema.String.annotate({ "description": "Browser storage value. Never log this field." })
|
|
227
|
-
}).annotate({ "identifier": "BrowserStorageEntry" });
|
|
228
196
|
const InitialBrowserScrollPosition = Schema.Struct({
|
|
229
197
|
"x": Schema.Number.check(Schema.isFinite().annotate({ "expected": "a finite number" })),
|
|
230
198
|
"y": Schema.Number.check(Schema.isFinite().annotate({ "expected": "a finite number" }))
|
|
231
199
|
}).annotate({ "identifier": "InitialBrowserScrollPosition" });
|
|
232
200
|
const InitialBrowserElementPathStep = Schema.Struct({
|
|
233
|
-
"tag": Schema.String.check(Schema.isPattern(/* @__PURE__ */ new RegExp("^[a-z][a-z0-9-]*$")).annotate({ "expected": "a string matching the RegExp ^[a-z][a-z0-9-]*$" })),
|
|
201
|
+
"tag": Schema.String.check(Schema.isPattern(/* @__PURE__ */ new RegExp("^[a-z][a-z0-9-]*$", "u")).annotate({ "expected": "a string matching the RegExp ^[a-z][a-z0-9-]*$" })),
|
|
234
202
|
"index": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" }))
|
|
235
203
|
}).annotate({ "identifier": "InitialBrowserElementPathStep" });
|
|
236
204
|
const InitialBrowserControlSelection = Schema.Struct({
|
|
@@ -248,7 +216,7 @@ const BrowserCookieSameSite = Schema.Literals([
|
|
|
248
216
|
"None"
|
|
249
217
|
]).annotate({ "identifier": "BrowserCookieSameSite" });
|
|
250
218
|
const InitialBrowserCookiePartitionKey = Schema.Struct({
|
|
251
|
-
"topLevelSite": Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
|
|
219
|
+
"topLevelSite": Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
|
|
252
220
|
"hasCrossSiteAncestor": Schema.optionalKey(Schema.Boolean)
|
|
253
221
|
}).annotate({ "identifier": "InitialBrowserCookiePartitionKey" });
|
|
254
222
|
const InitialIndexedDBKeyPath = Schema.Struct({
|
|
@@ -269,62 +237,34 @@ const InitialIndexedDBIndexKeyPath = Schema.Struct({
|
|
|
269
237
|
"description": "Index key path. String paths contain one value; array paths contain at least one.",
|
|
270
238
|
"identifier": "InitialIndexedDBIndexKeyPath"
|
|
271
239
|
});
|
|
272
|
-
const InitialIndexedDBRecord = Schema.Struct({
|
|
273
|
-
"key": Schema.String.annotate({ "description": "JSON-encoded structured-clone key." }),
|
|
274
|
-
"value": Schema.String.annotate({ "description": "JSON-encoded structured-clone value." })
|
|
275
|
-
}).annotate({ "identifier": "InitialIndexedDBRecord" });
|
|
276
|
-
const InitialOPFSFile = Schema.Struct({
|
|
277
|
-
"path": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
278
|
-
"body": Schema.String.annotate({ "contentEncoding": "base64" })
|
|
279
|
-
}).annotate({ "identifier": "InitialOPFSFile" });
|
|
280
|
-
const ProxyTunnelConfig = Schema.Struct({
|
|
281
|
-
"url": Schema.optionalKey(Schema.String.annotate({
|
|
282
|
-
"description": "Compound tunnel URL (`ws+yamux+socks5://` or `wss+yamux+socks5://`).",
|
|
283
|
-
"examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
|
|
284
|
-
})),
|
|
285
|
-
"auth": Schema.optionalKey(Schema.String.annotate({
|
|
286
|
-
"description": "Per-assignment bearer secret for the tunnel handshake. Write-only; never returned.",
|
|
287
|
-
"examples": ["REDACTED"]
|
|
288
|
-
}))
|
|
289
|
-
}).annotate({
|
|
290
|
-
"description": "Tunnel endpoint for the `tunnel` upstream. Minted by the tunnel operator.",
|
|
291
|
-
"identifier": "ProxyTunnelConfig"
|
|
292
|
-
});
|
|
293
240
|
const CursorVisibility = Schema.Struct({ "visible": Schema.Boolean.annotate({ "description": "Whether to include the remote cursor in live streams and recordings." }) }).annotate({
|
|
294
241
|
"description": "Whether the remote browser cursor is composited into session media.",
|
|
295
242
|
"identifier": "CursorVisibility"
|
|
296
243
|
});
|
|
297
|
-
const
|
|
298
|
-
"
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
"
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
"
|
|
310
|
-
"
|
|
311
|
-
"
|
|
312
|
-
"
|
|
244
|
+
const ExportSessionStorageStateInput = Schema.Struct({ "origins": Schema.Union([Schema.Literal("open-tabs"), Schema.Array(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isMaxCodePoints(2048).annotate({ "expected": "a string with at most 2048 code points" }))).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isMaxLength(100).annotate({ "expected": "a value with a length of at most 100" }))], { mode: "oneOf" }).annotate({ "description": "Exact origins and/or * patterns, or open-tabs to select current pages and frames." }) }).annotate({
|
|
245
|
+
"examples": [
|
|
246
|
+
{ "origins": ["*"] },
|
|
247
|
+
{ "origins": ["https://example.com", "https://*.example.org"] },
|
|
248
|
+
{ "origins": "open-tabs" }
|
|
249
|
+
],
|
|
250
|
+
"identifier": "ExportSessionStorageStateInput"
|
|
251
|
+
});
|
|
252
|
+
const RecordingEditError = Schema.Struct({
|
|
253
|
+
"code": Schema.Literals([
|
|
254
|
+
"ffmpeg_unavailable",
|
|
255
|
+
"open_failed",
|
|
256
|
+
"nothing_kept",
|
|
257
|
+
"analysis_failed",
|
|
258
|
+
"plan_failed",
|
|
259
|
+
"render_failed",
|
|
260
|
+
"timeout",
|
|
261
|
+
"cancelled",
|
|
262
|
+
"timeline_failed"
|
|
313
263
|
]),
|
|
314
|
-
"
|
|
315
|
-
"relativePath": Schema.String.annotate({
|
|
316
|
-
"description": "Path below the session root; absolute host paths are never exposed.",
|
|
317
|
-
"examples": ["recordings/recording-550e8400-e29b-41d4-a716-446655440000.webm"]
|
|
318
|
-
}),
|
|
319
|
-
"startedAt": Schema.String.annotate({ "format": "date-time" }),
|
|
320
|
-
"stoppedAt": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })),
|
|
321
|
-
"sizeBytes": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" }))),
|
|
322
|
-
"fps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
323
|
-
"bitrateKbps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
324
|
-
"codec": Schema.Literals(["vp8", "h264-va"])
|
|
264
|
+
"message": Schema.String
|
|
325
265
|
}).annotate({
|
|
326
|
-
"description": "
|
|
327
|
-
"identifier": "
|
|
266
|
+
"description": "Why a recording has no edit although one was due or a timeline could not be written. The raw video is published regardless.",
|
|
267
|
+
"identifier": "RecordingEditError"
|
|
328
268
|
});
|
|
329
269
|
const CreateSessionRecordingInput = Schema.Struct({
|
|
330
270
|
"targetId": Schema.String.annotate({ "description": "Identifier of the ready top-level target to record." }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
@@ -339,7 +279,17 @@ const CreateSessionRecordingInput = Schema.Struct({
|
|
|
339
279
|
"codec": Schema.optionalKey(Schema.Literals(["vp8", "h264-va"]).annotate({
|
|
340
280
|
"description": "Video codec. Omit for the instance default.",
|
|
341
281
|
"examples": ["vp8"]
|
|
342
|
-
}))
|
|
282
|
+
})),
|
|
283
|
+
"capture": Schema.optionalKey(Schema.Literals(["continuous", "bursts"]).annotate({ "description": "With `bursts`, the edited video keeps only the stretches around browser tool calls, from `burst.leadMs` before a call to `burst.tailMs` after it, longer until the screen has stood still for `burst.settleMs` but at most `burst.maxTailMs`, and the recording follows the tab the automation acts on. The raw video is always the whole capture. Defaults to `continuous`. Cannot be combined with `idle`. Needs `recording_ffmpeg_executable` on the instance." })),
|
|
284
|
+
"presentation": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Run browser automation at presentation pace while the recording runs. Needs nothing of the instance." })),
|
|
285
|
+
"idle": Schema.optionalKey(Schema.Literals(["cut", "speed"]).annotate({ "description": "Remove (`cut`) or fast-forward (`speed`) the stretches of a continuous recording in which neither the picture nor the automation changes, in the edited video. Needs `recording_ffmpeg_executable` on the instance." })),
|
|
286
|
+
"ripple": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Mark clicks with a ripple in the edited video. Needs `recording_ffmpeg_executable` on the instance." })),
|
|
287
|
+
"burst": Schema.optionalKey(Schema.Struct({
|
|
288
|
+
"leadMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Kept before a tool call. Defaults to 500." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(6e4).annotate({ "expected": "a value less than or equal to 60000" }))),
|
|
289
|
+
"tailMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Kept after a tool call. Defaults to 800." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(6e4).annotate({ "expected": "a value less than or equal to 60000" }))),
|
|
290
|
+
"settleMs": Schema.optionalKey(Schema.Number.annotate({ "description": "How long the screen must stand still to count as settled. Defaults to 400." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(6e4).annotate({ "expected": "a value less than or equal to 60000" }))),
|
|
291
|
+
"maxTailMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Longest wait for the screen to settle after a call. Defaults to 3000." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(6e4).annotate({ "expected": "a value less than or equal to 60000" })))
|
|
292
|
+
}).annotate({ "description": "Burst sizes in milliseconds for `capture` `bursts`; rejected without it. Omitted or zero fields take the defaults. `tailMs` must not exceed `maxTailMs` (default 3000)." }))
|
|
343
293
|
}).annotate({
|
|
344
294
|
"description": "Top-level target and optional recording settings.",
|
|
345
295
|
"identifier": "CreateSessionRecordingInput"
|
|
@@ -349,12 +299,13 @@ const RetargetSessionRecordingInput = Schema.Struct({ "targetId": Schema.String.
|
|
|
349
299
|
"identifier": "RetargetSessionRecordingInput"
|
|
350
300
|
});
|
|
351
301
|
const SessionFile = Schema.Struct({
|
|
302
|
+
"type": Schema.Literal("file"),
|
|
352
303
|
"name": Schema.String.annotate({
|
|
353
304
|
"description": "File name without directory components.",
|
|
354
305
|
"examples": ["screencast-20260801T120000Z.webm"]
|
|
355
306
|
}),
|
|
356
307
|
"relativePath": Schema.String.annotate({
|
|
357
|
-
"description": "Path below the session root.
|
|
308
|
+
"description": "Path below the session files root. Browser downloads are under `downloads/`, recordings under `recordings/`, uploads under `uploads/`, and Playwright MCP output under `outputs/`. Pass it to `browser_file_upload` or to create a signed download URL.",
|
|
358
309
|
"examples": ["recordings/screencast-20260801T120000Z.webm"]
|
|
359
310
|
}),
|
|
360
311
|
"size": Schema.Number.annotate({
|
|
@@ -370,11 +321,51 @@ const SessionFile = Schema.Struct({
|
|
|
370
321
|
"mimeType": Schema.String.annotate({
|
|
371
322
|
"description": "Detected media type.",
|
|
372
323
|
"examples": ["video/webm"]
|
|
373
|
-
})
|
|
324
|
+
}),
|
|
325
|
+
"sandboxPath": Schema.optionalKey(Schema.String.annotate({
|
|
326
|
+
"description": "Path of the file inside the session's browser sandbox, under the fixed `/session/files` root, for CDP `DOM.setFileInputFiles`. It is readable by the browser while the session runs. Absent for files of sessions created before session files moved under one root that are still in their old location.",
|
|
327
|
+
"examples": ["/session/files/recordings/screencast-20260801T120000Z.webm"]
|
|
328
|
+
}))
|
|
374
329
|
}).annotate({
|
|
375
330
|
"description": "Regular file retained with a browser session.",
|
|
376
331
|
"identifier": "SessionFile"
|
|
377
332
|
});
|
|
333
|
+
const SessionDirectory = Schema.Struct({
|
|
334
|
+
"type": Schema.Literal("directory"),
|
|
335
|
+
"name": Schema.String.annotate({
|
|
336
|
+
"description": "Directory name without parent components.",
|
|
337
|
+
"examples": ["invoices"]
|
|
338
|
+
}),
|
|
339
|
+
"relativePath": Schema.String.annotate({
|
|
340
|
+
"description": "Path below the session files root.",
|
|
341
|
+
"examples": ["uploads/invoices"]
|
|
342
|
+
}),
|
|
343
|
+
"modifiedAt": Schema.String.annotate({ "format": "date-time" })
|
|
344
|
+
}).annotate({
|
|
345
|
+
"description": "Directory below the session files root.",
|
|
346
|
+
"identifier": "SessionDirectory"
|
|
347
|
+
});
|
|
348
|
+
const __ClientMultipartFile = Schema.instanceOf(globalThis.Blob, { expected: "File | Blob" });
|
|
349
|
+
const MoveSessionFileInput = Schema.Struct({
|
|
350
|
+
"from": Schema.String.annotate({
|
|
351
|
+
"description": "Current path from a `SessionFileEntry` result.",
|
|
352
|
+
"examples": ["downloads/invoice.pdf"]
|
|
353
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
354
|
+
"to": Schema.String.annotate({
|
|
355
|
+
"description": "New path below the session files root. Missing directories are created.",
|
|
356
|
+
"examples": ["uploads/invoices/2026-08.pdf"]
|
|
357
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))
|
|
358
|
+
}).annotate({
|
|
359
|
+
"description": "Current and new path of a session file.",
|
|
360
|
+
"identifier": "MoveSessionFileInput"
|
|
361
|
+
});
|
|
362
|
+
const CreateSessionDirectoryInput = Schema.Struct({ "relativePath": Schema.String.annotate({
|
|
363
|
+
"description": "Path below the session files root. Missing parents are created.",
|
|
364
|
+
"examples": ["uploads/invoices"]
|
|
365
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })) }).annotate({
|
|
366
|
+
"description": "Directory to create.",
|
|
367
|
+
"identifier": "CreateSessionDirectoryInput"
|
|
368
|
+
});
|
|
378
369
|
const SessionFileDownloadURLInput = Schema.Struct({
|
|
379
370
|
"relativePath": Schema.String.annotate({
|
|
380
371
|
"description": "Path from a `SessionFile` result.",
|
|
@@ -383,7 +374,11 @@ const SessionFileDownloadURLInput = Schema.Struct({
|
|
|
383
374
|
"ttlSeconds": Schema.optionalKey(Schema.Number.annotate({
|
|
384
375
|
"description": "Requested lifetime in seconds. Omit it to use `signed_file_url_ttl`; values above `signed_file_url_max_ttl` are rejected.",
|
|
385
376
|
"examples": [900]
|
|
386
|
-
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })))
|
|
377
|
+
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" }))),
|
|
378
|
+
"disposition": Schema.optionalKey(Schema.Literals(["attachment", "inline"]).annotate({
|
|
379
|
+
"description": "How the URL presents the file. `inline` lets browsers display it, for example as an `<img>` source. Either way it is served with its detected `Content-Type`, `X-Content-Type-Options: nosniff`, and byte-range support. Content that can run scripts, such as HTML or SVG, also gets `Content-Security-Policy: sandbox`; images, audio, video, PDFs, and plain text do not, so browser viewers keep working.",
|
|
380
|
+
"default": "attachment"
|
|
381
|
+
}))
|
|
387
382
|
}).annotate({
|
|
388
383
|
"description": "Session file path and requested signed URL lifetime.",
|
|
389
384
|
"identifier": "SessionFileDownloadURLInput"
|
|
@@ -400,7 +395,7 @@ const SessionFileDownloadURL = Schema.Struct({
|
|
|
400
395
|
"format": "date-time"
|
|
401
396
|
})
|
|
402
397
|
}).annotate({
|
|
403
|
-
"description": "Signed
|
|
398
|
+
"description": "Signed URL for one session file.",
|
|
404
399
|
"identifier": "SessionFileDownloadURL"
|
|
405
400
|
});
|
|
406
401
|
const UpdateSnapshotInput = Schema.Struct({ "description": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
|
|
@@ -410,6 +405,40 @@ const UpdateSnapshotInput = Schema.Struct({ "description": Schema.optionalKey(Sc
|
|
|
410
405
|
"description": "Replacement snapshot description.",
|
|
411
406
|
"identifier": "UpdateSnapshotInput"
|
|
412
407
|
});
|
|
408
|
+
const LiveSessionErrorBody = Schema.Struct({ "error": Schema.String.annotate({ "examples": ["file exceeds upload limit"] }) }).annotate({
|
|
409
|
+
"description": "Error raised inside a running session. It carries a message but no stable code.",
|
|
410
|
+
"identifier": "LiveSessionErrorBody"
|
|
411
|
+
});
|
|
412
|
+
const SetViewportInput = Schema.Struct({
|
|
413
|
+
"targetId": Schema.String.annotate({ "description": "Identifier of the top-level target to resize." }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
414
|
+
"width": Schema.Number.annotate({
|
|
415
|
+
"description": "Logical width in CSS pixels. Widths below 500 are raised to 500.",
|
|
416
|
+
"examples": [1280]
|
|
417
|
+
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })).check(Schema.isLessThanOrEqualTo(16384).annotate({ "expected": "a value less than or equal to 16384" })),
|
|
418
|
+
"height": Schema.Number.annotate({
|
|
419
|
+
"description": "Logical height in CSS pixels.",
|
|
420
|
+
"examples": [720]
|
|
421
|
+
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })).check(Schema.isLessThanOrEqualTo(16384).annotate({ "expected": "a value less than or equal to 16384" })),
|
|
422
|
+
"deviceScaleFactor": Schema.optionalKey(Schema.Number.annotate({
|
|
423
|
+
"description": "Device pixel ratio, rounded to 1/120. Omit or use a non-positive value for 1. The scaled content size may not exceed 16384 pixels.",
|
|
424
|
+
"examples": [1]
|
|
425
|
+
}).check(Schema.isFinite().annotate({ "expected": "a finite number" })))
|
|
426
|
+
}).annotate({
|
|
427
|
+
"description": "Requested logical viewport of one top-level target.",
|
|
428
|
+
"identifier": "SetViewportInput"
|
|
429
|
+
});
|
|
430
|
+
const Viewport = Schema.Struct({
|
|
431
|
+
"width": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
432
|
+
"height": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
433
|
+
"contentWidth": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
434
|
+
"contentHeight": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
435
|
+
"canvasWidth": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
436
|
+
"canvasHeight": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
437
|
+
"deviceScaleFactor": Schema.Number.annotate({ "description": "Effective device pixel ratio." }).check(Schema.isFinite().annotate({ "expected": "a finite number" }))
|
|
438
|
+
}).annotate({
|
|
439
|
+
"description": "Logical size, DPR-scaled content rectangle, and 64x64-bucketed media canvas of a target.",
|
|
440
|
+
"identifier": "Viewport"
|
|
441
|
+
});
|
|
413
442
|
const Tenant = Schema.Struct({
|
|
414
443
|
"id": Schema.suspend(() => UUIDv7).annotate({ "description": "Tenant identifier." }),
|
|
415
444
|
"displayName": Schema.String.annotate({
|
|
@@ -520,19 +549,78 @@ const TenantMembership = Schema.Struct({
|
|
|
520
549
|
"updatedAt": Schema.String.annotate({ "format": "date-time" })
|
|
521
550
|
}).annotate({ "identifier": "TenantMembership" });
|
|
522
551
|
const TenantMembershipInput = Schema.Struct({ "scopes": Schema.Array(TenantScope).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isUnique().annotate({ "expected": "an array with unique items" })) }).annotate({ "identifier": "TenantMembershipInput" });
|
|
523
|
-
const
|
|
524
|
-
"
|
|
525
|
-
"description": "
|
|
526
|
-
"examples": ["
|
|
552
|
+
const IceServer = Schema.Struct({
|
|
553
|
+
"urls": Schema.Array(Schema.String).annotate({
|
|
554
|
+
"description": "STUN or TURN server URLs.",
|
|
555
|
+
"examples": [["turn:turn.example.com:3478?transport=udp"]]
|
|
527
556
|
}),
|
|
528
|
-
"
|
|
529
|
-
"description": "
|
|
530
|
-
"examples": [
|
|
557
|
+
"username": Schema.optionalKey(Schema.String.annotate({
|
|
558
|
+
"description": "TURN username. Omitted when the server does not require authentication.",
|
|
559
|
+
"examples": ["aperture-session"]
|
|
560
|
+
})),
|
|
561
|
+
"credential": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
|
|
562
|
+
"description": "TURN credential. Treat it as a secret and do not persist it in logs.",
|
|
563
|
+
"examples": ["REDACTED"]
|
|
564
|
+
}))
|
|
565
|
+
}).annotate({
|
|
566
|
+
"description": "ICE server configuration supplied to WebRTC consumers.",
|
|
567
|
+
"identifier": "IceServer"
|
|
568
|
+
});
|
|
569
|
+
const SessionCollaborationCapabilities = Schema.Struct({
|
|
570
|
+
"editorToken": Schema.suspend(() => SensitiveString).annotate({ "examples": ["ape_019f6cf0000070008000000000000010_REDACTED"] }),
|
|
571
|
+
"viewerToken": Schema.suspend(() => SensitiveString).annotate({ "examples": ["apv_019f6cf0000070008000000000000010_REDACTED"] })
|
|
572
|
+
}).annotate({
|
|
573
|
+
"description": "Owner-visible role-scoped secrets used to build collaboration links.",
|
|
574
|
+
"identifier": "SessionCollaborationCapabilities"
|
|
575
|
+
});
|
|
576
|
+
const SessionThumbnail = Schema.Struct({
|
|
577
|
+
"url": Schema.suspend(() => SensitiveString).annotate({
|
|
578
|
+
"description": "Thumbnail of the tab most recently shown to a live-session client.",
|
|
579
|
+
"format": "uri"
|
|
531
580
|
}),
|
|
532
|
-
"
|
|
581
|
+
"targetUrlTemplate": Schema.suspend(() => SensitiveString).annotate({ "description": "Tab thumbnail URL with a literal `{targetId}` placeholder for a top-level target ID." }),
|
|
582
|
+
"expiresAt": Schema.String.annotate({ "format": "date-time" })
|
|
533
583
|
}).annotate({
|
|
534
|
-
"description": "
|
|
535
|
-
"identifier": "
|
|
584
|
+
"description": "Signed thumbnail URLs for image elements. They need no other credentials and expire after the\nconfigured signed URL lifetime; every session response returns fresh ones. Present while the\nsession is running, or while suspended when thumbnails were saved.\n",
|
|
585
|
+
"identifier": "SessionThumbnail"
|
|
586
|
+
});
|
|
587
|
+
const BrowserStorageEntry = Schema.Struct({
|
|
588
|
+
"name": Schema.String,
|
|
589
|
+
"value": Schema.suspend(() => SensitiveString).annotate({ "description": "Browser storage value. Never log this field." })
|
|
590
|
+
}).annotate({ "identifier": "BrowserStorageEntry" });
|
|
591
|
+
const InitialIndexedDBRecord = Schema.Struct({
|
|
592
|
+
"key": Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone key." }),
|
|
593
|
+
"value": Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone value." })
|
|
594
|
+
}).annotate({ "identifier": "InitialIndexedDBRecord" });
|
|
595
|
+
const InitialOPFSFile = Schema.Struct({
|
|
596
|
+
"path": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
597
|
+
"body": Schema.suspend(() => SensitiveString).annotate({ "contentEncoding": "base64" })
|
|
598
|
+
}).annotate({ "identifier": "InitialOPFSFile" });
|
|
599
|
+
const ProxyUpstream = Schema.Struct({
|
|
600
|
+
"url": Schema.String.annotate({
|
|
601
|
+
"description": "A generic proxy URL (`http`, `https`, `socks`, `socks5`, `socks5h`) or a compound tunnel URL (`ws+yamux+socks5://`, `wss+yamux+socks5://`). Proxy credentials go in the userinfo (`socks5://user:pass@host:1080`) and are sent as Basic `Proxy-Authorization` for `http`/`https` or RFC 1929 username/password for the socks schemes. An omitted port defaults to 1080 (socks), 80 (http) or 443 (https).",
|
|
602
|
+
"examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
|
|
603
|
+
}),
|
|
604
|
+
"auth": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
|
|
605
|
+
"description": "Bearer secret for a tunnel URL's handshake. Required for a tunnel URL and invalid for a proxy URL. Write-only; never returned.",
|
|
606
|
+
"examples": ["REDACTED"]
|
|
607
|
+
}))
|
|
608
|
+
}).annotate({
|
|
609
|
+
"description": "A named upstream that proxy rules route through.",
|
|
610
|
+
"identifier": "ProxyUpstream"
|
|
611
|
+
});
|
|
612
|
+
const ProxyTunnelConfig = Schema.Struct({
|
|
613
|
+
"url": Schema.optionalKey(Schema.String.annotate({
|
|
614
|
+
"description": "Compound tunnel URL (`ws+yamux+socks5://` or `wss+yamux+socks5://`).",
|
|
615
|
+
"examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
|
|
616
|
+
})),
|
|
617
|
+
"auth": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
|
|
618
|
+
"description": "Bearer secret for the tunnel handshake. Write-only; never returned.",
|
|
619
|
+
"examples": ["REDACTED"]
|
|
620
|
+
}))
|
|
621
|
+
}).annotate({
|
|
622
|
+
"description": "Legacy tunnel endpoint for `upstream` `tunnel`; both fields are required with it. Use a tunnel URL in `upstreams`.",
|
|
623
|
+
"identifier": "ProxyTunnelConfig"
|
|
536
624
|
});
|
|
537
625
|
const InitialCacheStorageEntry = Schema.Struct({
|
|
538
626
|
"url": Schema.String.annotate({ "format": "uri" }),
|
|
@@ -540,7 +628,7 @@ const InitialCacheStorageEntry = Schema.Struct({
|
|
|
540
628
|
"responseHeaders": StringMap,
|
|
541
629
|
"responseStatus": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(100).annotate({ "expected": "a value greater than or equal to 100" })).check(Schema.isLessThanOrEqualTo(599).annotate({ "expected": "a value less than or equal to 599" })),
|
|
542
630
|
"responseStatusText": Schema.String,
|
|
543
|
-
"responseBody": Schema.
|
|
631
|
+
"responseBody": Schema.suspend(() => SensitiveString).annotate({ "contentEncoding": "base64" })
|
|
544
632
|
}).annotate({ "identifier": "InitialCacheStorageEntry" });
|
|
545
633
|
const ReplaceTagsInput = Schema.Struct({ "tags": Schema.suspend(() => StringMap).annotate({ "description": "Complete tag map. Keys and values must contain non-whitespace characters." }) }).annotate({
|
|
546
634
|
"description": "Complete replacement tag set. The map may be empty to clear all tags.",
|
|
@@ -554,7 +642,7 @@ const PromoteSessionInput = Schema.Struct({
|
|
|
554
642
|
"name": Schema.String.annotate({
|
|
555
643
|
"description": "Tenant-unique snapshot name. Leading and trailing whitespace is removed.",
|
|
556
644
|
"examples": ["signed-in-base"]
|
|
557
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
645
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
558
646
|
"description": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
|
|
559
647
|
"description": "Optional snapshot description. `null` creates the snapshot without a description.",
|
|
560
648
|
"examples": ["Signed-in storefront state for checkout tests"]
|
|
@@ -610,12 +698,32 @@ const Snapshot = Schema.Struct({
|
|
|
610
698
|
"description": "Reusable retained browser filesystem state. Deletion is soft until the retention deadline.",
|
|
611
699
|
"identifier": "Snapshot"
|
|
612
700
|
});
|
|
613
|
-
const
|
|
614
|
-
"
|
|
615
|
-
"
|
|
616
|
-
|
|
701
|
+
const SessionProxy = Schema.Struct({
|
|
702
|
+
"upstreams": Schema.Record(Schema.String, SessionProxyUpstream),
|
|
703
|
+
"rules": Schema.Array(ProxyRule),
|
|
704
|
+
"upstream": Schema.Literals([
|
|
705
|
+
"direct",
|
|
706
|
+
"proxy",
|
|
707
|
+
"tunnel"
|
|
708
|
+
]).annotate({
|
|
709
|
+
"description": "Legacy single-upstream view of `rules`; read `upstreams` and `rules` instead. Exact when the rules are optional leading `direct` rules followed by one final `*` rule via an upstream proxy or tunnel, with no other upstreams, and `direct` when there are no rules. Otherwise it approximates the route of the last `*` rule (`local` reads as `tunnel`, `refuse` as `direct`), or `direct` without one, and `url`, `tunnel` and `bypass` are omitted.",
|
|
710
|
+
"examples": ["tunnel"]
|
|
711
|
+
}),
|
|
712
|
+
"url": Schema.optionalKey(Schema.String.annotate({
|
|
713
|
+
"description": "Legacy upstream proxy URL with its password masked. Only present when `upstream` is exactly `proxy`.",
|
|
714
|
+
"examples": ["socks5://user:xxxxx@proxy.example.com:1080"]
|
|
715
|
+
})),
|
|
716
|
+
"tunnel": Schema.optionalKey(Schema.Struct({ "url": Schema.optionalKey(Schema.String.annotate({ "examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"] })) }).annotate({ "description": "Legacy tunnel endpoint. Only present when `upstream` is exactly `tunnel`. The secret is never returned." })),
|
|
717
|
+
"bypass": Schema.optionalKey(Schema.String.annotate({
|
|
718
|
+
"description": "Legacy `;`-separated matches of the leading `direct` rules. Only present with an exact `proxy` or `tunnel` value.",
|
|
719
|
+
"examples": ["*.internal.example.com"]
|
|
720
|
+
}))
|
|
721
|
+
}).annotate({
|
|
722
|
+
"description": "Stored session egress proxy configuration. Secrets are write-only, so this value cannot be replayed as a write.",
|
|
723
|
+
"identifier": "SessionProxy"
|
|
724
|
+
});
|
|
617
725
|
const InitialBrowserElementLocator = Schema.Struct({
|
|
618
|
-
"tag": Schema.String.check(Schema.isPattern(/* @__PURE__ */ new RegExp("^[a-z][a-z0-9-]*$")).annotate({ "expected": "a string matching the RegExp ^[a-z][a-z0-9-]*$" })),
|
|
726
|
+
"tag": Schema.String.check(Schema.isPattern(/* @__PURE__ */ new RegExp("^[a-z][a-z0-9-]*$", "u")).annotate({ "expected": "a string matching the RegExp ^[a-z][a-z0-9-]*$" })),
|
|
619
727
|
"id": Schema.optionalKey(Schema.String),
|
|
620
728
|
"name": Schema.optionalKey(Schema.String),
|
|
621
729
|
"inputType": Schema.optionalKey(Schema.String),
|
|
@@ -629,13 +737,13 @@ const InitialBrowserElementLocator = Schema.Struct({
|
|
|
629
737
|
});
|
|
630
738
|
const InitialBrowserCookie = Schema.Struct({
|
|
631
739
|
"name": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
632
|
-
"value": Schema.
|
|
740
|
+
"value": Schema.suspend(() => SensitiveString).annotate({ "description": "Cookie value. Never log this field." }),
|
|
633
741
|
"domain": Schema.String.annotate({ "examples": [".example.com"] }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
634
742
|
"hostOnly": Schema.optionalKey(Schema.Boolean.annotate({
|
|
635
743
|
"description": "Scope the cookie to exactly `domain`, without subdomains. `domain` must then be a plain hostname.",
|
|
636
744
|
"default": false
|
|
637
745
|
})),
|
|
638
|
-
"path": Schema.String.annotate({ "examples": ["/"] }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^\\/")).annotate({ "expected": "a string matching the RegExp ^\\/" })),
|
|
746
|
+
"path": Schema.String.annotate({ "examples": ["/"] }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^\\/", "u")).annotate({ "expected": "a string matching the RegExp ^\\/" })),
|
|
639
747
|
"expires": Schema.optionalKey(Schema.Number.annotate({ "description": "Unix timestamp in seconds. Omit for a session cookie." }).check(Schema.isFinite().annotate({ "expected": "a finite number" })).check(Schema.isGreaterThan(0).annotate({ "expected": "a value greater than 0" }))),
|
|
640
748
|
"httpOnly": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
|
|
641
749
|
"secure": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
|
|
@@ -651,53 +759,56 @@ const InitialIndexedDBIndex = Schema.Struct({
|
|
|
651
759
|
"unique": Schema.Boolean,
|
|
652
760
|
"multiEntry": Schema.Boolean
|
|
653
761
|
}).annotate({ "identifier": "InitialIndexedDBIndex" });
|
|
654
|
-
const
|
|
655
|
-
"
|
|
656
|
-
"
|
|
657
|
-
"
|
|
658
|
-
|
|
659
|
-
]).annotate({
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
"
|
|
670
|
-
|
|
671
|
-
}))
|
|
762
|
+
const Recording = Schema.Struct({
|
|
763
|
+
"recordingId": Schema.String.annotate({
|
|
764
|
+
"description": "Stable recording identifier retained across target changes.",
|
|
765
|
+
"format": "uuid"
|
|
766
|
+
}),
|
|
767
|
+
"mode": Schema.Literals(["tab", "viewer"]).annotate({ "description": "Tab recordings stay on their specified top-level target; viewer recordings follow a live session client's selected top-level target and cannot be explicitly retargeted." }),
|
|
768
|
+
"targetId": Schema.String.annotate({ "description": "Identifier of the top-level target currently recorded." }),
|
|
769
|
+
"captureGeneration": Schema.Number.annotate({
|
|
770
|
+
"description": "Assignment generation for the current top-level target.",
|
|
771
|
+
"format": "int64"
|
|
772
|
+
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
|
|
773
|
+
"status": Schema.Literals([
|
|
774
|
+
"starting",
|
|
775
|
+
"running",
|
|
776
|
+
"stopped",
|
|
777
|
+
"failed"
|
|
778
|
+
]),
|
|
779
|
+
"stopReason": Schema.optionalKey(Schema.String.annotate({ "description": "Lifecycle reason recorded after the recording stops or fails." })),
|
|
780
|
+
"relativePath": Schema.String.annotate({
|
|
781
|
+
"description": "Session file path below the session files root; host paths are never exposed.",
|
|
782
|
+
"examples": ["recordings/recording-550e8400-e29b-41d4-a716-446655440000.webm"]
|
|
783
|
+
}),
|
|
784
|
+
"startedAt": Schema.String.annotate({ "format": "date-time" }),
|
|
785
|
+
"stoppedAt": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })),
|
|
786
|
+
"sizeBytes": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" }))),
|
|
787
|
+
"fps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
788
|
+
"bitrateKbps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
789
|
+
"codec": Schema.Literals(["vp8", "h264-va"]),
|
|
790
|
+
"editing": Schema.Boolean.annotate({ "description": "Whether the edit a requested stop makes is still running. The raw video is already published; `editedRelativePath`, `timelineRelativePath` and `editError` are filled once this is false." }),
|
|
791
|
+
"editedRelativePath": Schema.optionalKey(Schema.String.annotate({ "description": "The edited H.264 video, published next to the raw one as `<name>.edited.mp4`, once a stop made it." })),
|
|
792
|
+
"timelineRelativePath": Schema.optionalKey(Schema.String.annotate({ "description": "What the recording's automation did and when, in the raw and edited video's time, published as `<name>.timeline.json`." })),
|
|
793
|
+
"editError": Schema.optionalKey(RecordingEditError)
|
|
672
794
|
}).annotate({
|
|
673
|
-
"description": "
|
|
674
|
-
"identifier": "
|
|
795
|
+
"description": "One logical recording of a top-level target.",
|
|
796
|
+
"identifier": "Recording"
|
|
675
797
|
});
|
|
676
|
-
const
|
|
677
|
-
"
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
"
|
|
684
|
-
|
|
685
|
-
"
|
|
686
|
-
|
|
687
|
-
"examples": ["socks5://user:pass@proxy.example.com:1080"]
|
|
688
|
-
})),
|
|
689
|
-
"tunnel": Schema.optionalKey(ProxyTunnelConfig),
|
|
690
|
-
"bypass": Schema.optionalKey(Schema.String.annotate({
|
|
691
|
-
"description": "Extra `--proxy-bypass-list` entries. Loopback is always bypassed.",
|
|
692
|
-
"examples": ["*.internal.example.com"]
|
|
693
|
-
})),
|
|
694
|
-
"drain": Schema.optionalKey(Schema.Boolean.annotate({
|
|
695
|
-
"description": "Reset live tunnel streams instead of letting them drain. New connections use the new assignment either way.",
|
|
696
|
-
"examples": [false]
|
|
697
|
-
}))
|
|
798
|
+
const SessionFileEntry = Schema.Union([SessionFile, SessionDirectory], { mode: "oneOf" }).annotate({
|
|
799
|
+
"description": "A session file or directory, told apart by `type`.",
|
|
800
|
+
"identifier": "SessionFileEntry"
|
|
801
|
+
});
|
|
802
|
+
const TargetViewport = Schema.Struct({
|
|
803
|
+
"targetId": Schema.String,
|
|
804
|
+
"generation": Schema.Number.annotate({
|
|
805
|
+
"description": "Assignment generation of the target's media output.",
|
|
806
|
+
"format": "int64"
|
|
807
|
+
}).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
|
|
808
|
+
"viewport": Viewport
|
|
698
809
|
}).annotate({
|
|
699
|
-
"description": "
|
|
700
|
-
"identifier": "
|
|
810
|
+
"description": "Viewport applied to a top-level target.",
|
|
811
|
+
"identifier": "TargetViewport"
|
|
701
812
|
});
|
|
702
813
|
const TenantPage = Schema.Struct({
|
|
703
814
|
"data": Schema.Array(Tenant),
|
|
@@ -782,7 +893,7 @@ const CreateAdminTokenInput = Schema.Union([Schema.Struct({
|
|
|
782
893
|
"name": Schema.String.annotate({
|
|
783
894
|
"description": "Operator-assigned name. Leading and trailing whitespace is removed.",
|
|
784
895
|
"examples": ["platform admin"]
|
|
785
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
896
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
786
897
|
"authorityType": Schema.Literal("system_admin"),
|
|
787
898
|
"scopes": Schema.Array(Scope).annotate({
|
|
788
899
|
"description": "Must include `system:admin`.",
|
|
@@ -802,7 +913,7 @@ const CreateAdminTokenInput = Schema.Union([Schema.Struct({
|
|
|
802
913
|
"name": Schema.String.annotate({
|
|
803
914
|
"description": "Operator-assigned name. Leading and trailing whitespace is removed.",
|
|
804
915
|
"examples": ["tenant automation"]
|
|
805
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
916
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
806
917
|
"authorityType": Schema.Literal("tenant"),
|
|
807
918
|
"tenantId": Schema.suspend(() => UUIDv7).annotate({ "description": "Active tenant to bind permanently to the token." }),
|
|
808
919
|
"scopes": Schema.Array(TenantScope).annotate({
|
|
@@ -824,7 +935,7 @@ const CreateTenantTokenInput = Schema.Struct({
|
|
|
824
935
|
"name": Schema.String.annotate({
|
|
825
936
|
"description": "Operator-assigned name. Leading and trailing whitespace is removed.",
|
|
826
937
|
"examples": ["browser worker"]
|
|
827
|
-
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
938
|
+
}).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isPattern(/* @__PURE__ */ new RegExp(".*\\S.*", "u")).annotate({ "expected": "a string matching the RegExp .*\\S.*" })),
|
|
828
939
|
"scopes": Schema.Array(TenantScope).annotate({
|
|
829
940
|
"description": "Tenant-compatible scopes. `system:admin` and `tenants:write` are rejected.",
|
|
830
941
|
"examples": [["sessions:read", "sessions:write"]]
|
|
@@ -840,73 +951,70 @@ const CreateTenantTokenInput = Schema.Struct({
|
|
|
840
951
|
"description": "Token definition automatically bound to the authenticated tenant.",
|
|
841
952
|
"identifier": "CreateTenantTokenInput"
|
|
842
953
|
});
|
|
843
|
-
const
|
|
844
|
-
"
|
|
845
|
-
"
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
"description": "Optional operator-facing session label.",
|
|
852
|
-
"examples": ["checkout smoke test"]
|
|
853
|
-
})),
|
|
854
|
-
"status": SessionStatus,
|
|
855
|
-
"browserChannel": Schema.optionalKey(Schema.String.annotate({
|
|
856
|
-
"description": "Browser channel used to create and reopen the session.",
|
|
857
|
-
"examples": ["chromium"]
|
|
858
|
-
})),
|
|
859
|
-
"media": SessionMedia,
|
|
860
|
-
"createdAt": Schema.String.annotate({
|
|
861
|
-
"description": "Time the session record was created.",
|
|
862
|
-
"examples": ["2026-07-17T12:00:00Z"],
|
|
863
|
-
"format": "date-time"
|
|
954
|
+
const LiveSessionFailure = Schema.Union([Error, LiveSessionErrorBody], { mode: "oneOf" }).annotate({
|
|
955
|
+
"description": "Failure of a live-session route.",
|
|
956
|
+
"identifier": "LiveSessionFailure"
|
|
957
|
+
});
|
|
958
|
+
const SessionMedia = Schema.Struct({
|
|
959
|
+
"mode": Schema.Literals(["auto", "cdp"]).annotate({
|
|
960
|
+
"description": "Configured media mode. `auto` enables deployment-selected media support; `cdp` exposes Chrome DevTools access only.",
|
|
961
|
+
"examples": ["auto"]
|
|
864
962
|
}),
|
|
865
|
-
"
|
|
866
|
-
"description": "
|
|
867
|
-
"examples": [
|
|
868
|
-
"format": "date-time"
|
|
869
|
-
})),
|
|
870
|
-
"stoppedAt": Schema.optionalKey(Schema.String.annotate({
|
|
871
|
-
"description": "Most recent browser stop time. Omitted while no stop has occurred.",
|
|
872
|
-
"examples": ["2026-07-17T13:00:00Z"],
|
|
873
|
-
"format": "date-time"
|
|
874
|
-
})),
|
|
875
|
-
"deletedAt": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
|
|
876
|
-
"description": "Soft-deletion time, or `null` for a session that has not been deleted.",
|
|
877
|
-
"examples": [null],
|
|
878
|
-
"format": "date-time"
|
|
879
|
-
})),
|
|
880
|
-
"expiresAt": Schema.String.annotate({
|
|
881
|
-
"description": "Retention deadline after which the session and its overlay may be purged. This is not token expiry.",
|
|
882
|
-
"examples": ["2026-07-24T12:00:00Z"],
|
|
883
|
-
"format": "date-time"
|
|
963
|
+
"webrtcProducer": Schema.Boolean.annotate({
|
|
964
|
+
"description": "Whether the compositor WebRTC producer is available for this session.",
|
|
965
|
+
"examples": [true]
|
|
884
966
|
}),
|
|
885
|
-
"
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
"
|
|
896
|
-
"
|
|
897
|
-
|
|
898
|
-
"
|
|
899
|
-
"
|
|
967
|
+
"iceServers": Schema.optionalKey(Schema.Array(IceServer).annotate({ "description": "ICE configuration for WebRTC setup. Omitted when WebRTC is unavailable or does not need configured ICE servers." }))
|
|
968
|
+
}).annotate({
|
|
969
|
+
"description": "Media capabilities currently available for the session.",
|
|
970
|
+
"identifier": "SessionMedia"
|
|
971
|
+
});
|
|
972
|
+
const InitialTargetStorageOrigin = Schema.Struct({
|
|
973
|
+
"origin": Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
|
|
974
|
+
"entries": Schema.Array(BrowserStorageEntry)
|
|
975
|
+
}).annotate({ "identifier": "InitialTargetStorageOrigin" });
|
|
976
|
+
const ProxyConfig = Schema.Struct({
|
|
977
|
+
"upstreams": Schema.optionalKey(Schema.Record(Schema.String, ProxyUpstream).annotate({ "description": "Upstreams by name. Names use lowercase letters, digits and dashes; `direct`, `refuse` and `local` are reserved." })),
|
|
978
|
+
"rules": Schema.optionalKey(Schema.Array(ProxyRule).check(Schema.isMaxLength(256).annotate({ "expected": "a value with a length of at most 256" }))),
|
|
979
|
+
"upstream": Schema.optionalKey(Schema.Literals([
|
|
980
|
+
"direct",
|
|
981
|
+
"proxy",
|
|
982
|
+
"tunnel"
|
|
983
|
+
]).annotate({
|
|
984
|
+
"description": "Legacy single-upstream shape; use `upstreams` and `rules`. Cannot be combined with them. `proxy` becomes a final `*` rule via `url`, `tunnel` a `tunnel` upstream and a final `*` rule via it, each preceded by `direct` rules for the `bypass` entries. `direct` or omitted means no rules.",
|
|
985
|
+
"examples": ["tunnel"]
|
|
900
986
|
})),
|
|
901
|
-
"
|
|
902
|
-
"description": "
|
|
903
|
-
"examples": ["
|
|
987
|
+
"url": Schema.optionalKey(Schema.String.annotate({
|
|
988
|
+
"description": "Legacy upstream proxy URL, required with `upstream` `proxy`. Use `upstreams` and `rules`.",
|
|
989
|
+
"examples": ["socks5://user:pass@proxy.example.com:1080"]
|
|
904
990
|
})),
|
|
905
|
-
"
|
|
906
|
-
"
|
|
991
|
+
"tunnel": Schema.optionalKey(ProxyTunnelConfig),
|
|
992
|
+
"bypass": Schema.optionalKey(Schema.String.annotate({
|
|
993
|
+
"description": "Legacy hosts to send direct, separated by `;` or `,`. Each entry must be a valid rule `match`; a leading `.` means any subdomain. CIDR ranges, `<local>` and scheme prefixes are rejected. Use `upstreams` and `rules`.",
|
|
994
|
+
"examples": ["*.internal.example.com"]
|
|
995
|
+
}))
|
|
907
996
|
}).annotate({
|
|
908
|
-
"description": "
|
|
909
|
-
"identifier": "
|
|
997
|
+
"description": "Session egress proxy configuration. Rules are checked in order and the first match routes the connection; unmatched connections go direct, and unmatched `localhost` stays on the session host. Omitted for direct egress.",
|
|
998
|
+
"identifier": "ProxyConfig"
|
|
999
|
+
});
|
|
1000
|
+
const UpdateProxyConfig = Schema.Struct({
|
|
1001
|
+
"upstreams": Schema.optionalKey(Schema.Record(Schema.String, ProxyUpstream)),
|
|
1002
|
+
"rules": Schema.optionalKey(Schema.Array(ProxyRule).check(Schema.isMaxLength(256).annotate({ "expected": "a value with a length of at most 256" }))),
|
|
1003
|
+
"upstream": Schema.optionalKey(Schema.Literals([
|
|
1004
|
+
"direct",
|
|
1005
|
+
"proxy",
|
|
1006
|
+
"tunnel"
|
|
1007
|
+
]).annotate({ "description": "Legacy single-upstream shape; use `upstreams` and `rules`." })),
|
|
1008
|
+
"url": Schema.optionalKey(Schema.String.annotate({ "description": "Legacy upstream proxy URL; use `upstreams` and `rules`." })),
|
|
1009
|
+
"tunnel": Schema.optionalKey(ProxyTunnelConfig),
|
|
1010
|
+
"bypass": Schema.optionalKey(Schema.String.annotate({ "description": "Legacy hosts to send direct; use `upstreams` and `rules`." })),
|
|
1011
|
+
"drain": Schema.optionalKey(Schema.Boolean.annotate({
|
|
1012
|
+
"description": "Reset live tunnel streams instead of letting them drain. New connections use the new rules either way.",
|
|
1013
|
+
"examples": [false]
|
|
1014
|
+
}))
|
|
1015
|
+
}).annotate({
|
|
1016
|
+
"description": "Replacement session egress proxy configuration. Fields other than `drain` are as in `ProxyConfig`.",
|
|
1017
|
+
"identifier": "UpdateProxyConfig"
|
|
910
1018
|
});
|
|
911
1019
|
const InitialCacheStorageCache = Schema.Struct({
|
|
912
1020
|
"name": Schema.String,
|
|
@@ -925,14 +1033,14 @@ const SnapshotPage = Schema.Struct({
|
|
|
925
1033
|
});
|
|
926
1034
|
const InitialBrowserControlState = Schema.Struct({
|
|
927
1035
|
"locator": InitialBrowserElementLocator,
|
|
928
|
-
"value":
|
|
1036
|
+
"value": SensitiveString,
|
|
929
1037
|
"checked": Schema.optionalKey(Schema.Boolean),
|
|
930
1038
|
"selectedIndices": Schema.optionalKey(Schema.Array(Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })))),
|
|
931
1039
|
"selection": Schema.optionalKey(InitialBrowserControlSelection)
|
|
932
1040
|
}).annotate({ "identifier": "InitialBrowserControlState" });
|
|
933
1041
|
const InitialBrowserContentEditableState = Schema.Struct({
|
|
934
1042
|
"locator": InitialBrowserElementLocator,
|
|
935
|
-
"html":
|
|
1043
|
+
"html": SensitiveString
|
|
936
1044
|
}).annotate({ "identifier": "InitialBrowserContentEditableState" });
|
|
937
1045
|
const InitialBrowserElementScrollPosition = Schema.Struct({
|
|
938
1046
|
"locator": InitialBrowserElementLocator,
|
|
@@ -968,7 +1076,7 @@ const TokenPage = Schema.Struct({
|
|
|
968
1076
|
});
|
|
969
1077
|
const CreateTokenResponse = Schema.Struct({
|
|
970
1078
|
"token": Token,
|
|
971
|
-
"rawToken": Schema.
|
|
1079
|
+
"rawToken": Schema.suspend(() => SensitiveString).annotate({
|
|
972
1080
|
"description": "One-time Aperture API bearer token. Store it immediately; later reads return only token metadata.",
|
|
973
1081
|
"examples": ["apt_019f6cf0000070008000000000000002_REDACTED"]
|
|
974
1082
|
})
|
|
@@ -976,6 +1084,84 @@ const CreateTokenResponse = Schema.Struct({
|
|
|
976
1084
|
"description": "Created token metadata and its one-time bearer secret.",
|
|
977
1085
|
"identifier": "CreateTokenResponse"
|
|
978
1086
|
});
|
|
1087
|
+
const Session = Schema.Struct({
|
|
1088
|
+
"id": Schema.suspend(() => UUIDv7).annotate({ "description": "Session identifier." }),
|
|
1089
|
+
"tenantId": Schema.suspend(() => UUIDv7).annotate({ "description": "Tenant that owns the session." }),
|
|
1090
|
+
"baseSnapshotName": Schema.optionalKey(Schema.String.annotate({
|
|
1091
|
+
"description": "Snapshot name used as the session base. Omitted for a blank session.",
|
|
1092
|
+
"examples": ["signed-in-base"]
|
|
1093
|
+
})),
|
|
1094
|
+
"label": Schema.optionalKey(Schema.String.annotate({
|
|
1095
|
+
"description": "Optional operator-facing session label.",
|
|
1096
|
+
"examples": ["checkout smoke test"]
|
|
1097
|
+
})),
|
|
1098
|
+
"status": SessionStatus,
|
|
1099
|
+
"browserChannel": Schema.optionalKey(Schema.String.annotate({
|
|
1100
|
+
"description": "Browser channel used to create and reopen the session.",
|
|
1101
|
+
"examples": ["chromium"]
|
|
1102
|
+
})),
|
|
1103
|
+
"media": SessionMedia,
|
|
1104
|
+
"createdAt": Schema.String.annotate({
|
|
1105
|
+
"description": "Time the session record was created.",
|
|
1106
|
+
"examples": ["2026-07-17T12:00:00Z"],
|
|
1107
|
+
"format": "date-time"
|
|
1108
|
+
}),
|
|
1109
|
+
"startedAt": Schema.optionalKey(Schema.String.annotate({
|
|
1110
|
+
"description": "Most recent successful browser start time. Omitted before startup succeeds.",
|
|
1111
|
+
"examples": ["2026-07-17T12:00:03Z"],
|
|
1112
|
+
"format": "date-time"
|
|
1113
|
+
})),
|
|
1114
|
+
"stoppedAt": Schema.optionalKey(Schema.String.annotate({
|
|
1115
|
+
"description": "Most recent browser stop time. Omitted while no stop has occurred.",
|
|
1116
|
+
"examples": ["2026-07-17T13:00:00Z"],
|
|
1117
|
+
"format": "date-time"
|
|
1118
|
+
})),
|
|
1119
|
+
"deletedAt": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
|
|
1120
|
+
"description": "Soft-deletion time, or `null` for a session that has not been deleted.",
|
|
1121
|
+
"examples": [null],
|
|
1122
|
+
"format": "date-time"
|
|
1123
|
+
})),
|
|
1124
|
+
"expiresAt": Schema.String.annotate({
|
|
1125
|
+
"description": "Retention deadline after which the session and its overlay may be purged. This is not token expiry.",
|
|
1126
|
+
"examples": ["2026-07-24T12:00:00Z"],
|
|
1127
|
+
"format": "date-time"
|
|
1128
|
+
}),
|
|
1129
|
+
"lastConnectedAt": Schema.optionalKey(Schema.String.annotate({
|
|
1130
|
+
"description": "Most recent routed client activity time. Omitted until a client connects.",
|
|
1131
|
+
"examples": ["2026-07-17T12:30:00Z"],
|
|
1132
|
+
"format": "date-time"
|
|
1133
|
+
})),
|
|
1134
|
+
"suspendedAt": Schema.optionalKey(Schema.String.annotate({
|
|
1135
|
+
"description": "Most recent suspension time. Omitted unless the session is suspended.",
|
|
1136
|
+
"examples": ["2026-07-17T13:00:00Z"],
|
|
1137
|
+
"format": "date-time"
|
|
1138
|
+
})),
|
|
1139
|
+
"tags": Schema.optionalKey(Schema.suspend(() => StringMap).annotate({ "description": "Session metadata tags. Omitted when no tags are set." })),
|
|
1140
|
+
"cdpUrl": Schema.optionalKey(Schema.String.annotate({
|
|
1141
|
+
"description": "Authenticated Chrome DevTools endpoint. Omitted when the session is not currently routable. Use it with `sessionToken`.",
|
|
1142
|
+
"examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
|
|
1143
|
+
"format": "uri"
|
|
1144
|
+
})),
|
|
1145
|
+
"sessionToken": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
|
|
1146
|
+
"description": "Session access secret returned when live access credentials are available. Rotation invalidates the previous token immediately.",
|
|
1147
|
+
"examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
|
|
1148
|
+
})),
|
|
1149
|
+
"collaboration": Schema.optionalKey(SessionCollaborationCapabilities),
|
|
1150
|
+
"thumbnail": Schema.optionalKey(SessionThumbnail),
|
|
1151
|
+
"proxy": Schema.optionalKey(SessionProxy)
|
|
1152
|
+
}).annotate({
|
|
1153
|
+
"description": "Browser session state, retention metadata, tags, and currently available access credentials.",
|
|
1154
|
+
"identifier": "Session"
|
|
1155
|
+
});
|
|
1156
|
+
const InitialBrowserDocumentSelection = Schema.Struct({
|
|
1157
|
+
"anchor": InitialBrowserSelectionEndpoint,
|
|
1158
|
+
"focus": InitialBrowserSelectionEndpoint
|
|
1159
|
+
}).annotate({ "identifier": "InitialBrowserDocumentSelection" });
|
|
1160
|
+
const InitialIndexedDBDatabase = Schema.Struct({
|
|
1161
|
+
"name": Schema.String,
|
|
1162
|
+
"version": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
1163
|
+
"objectStores": Schema.Array(InitialIndexedDBObjectStore)
|
|
1164
|
+
}).annotate({ "identifier": "InitialIndexedDBDatabase" });
|
|
979
1165
|
const SessionPage = Schema.Struct({
|
|
980
1166
|
"data": Schema.Array(Session),
|
|
981
1167
|
"meta": PageMeta
|
|
@@ -990,7 +1176,7 @@ const CreateSessionResult = Schema.Struct({
|
|
|
990
1176
|
"examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
|
|
991
1177
|
"format": "uri"
|
|
992
1178
|
}),
|
|
993
|
-
"sessionToken": Schema.
|
|
1179
|
+
"sessionToken": Schema.suspend(() => SensitiveString).annotate({
|
|
994
1180
|
"description": "Initial session access secret. Store it immediately.",
|
|
995
1181
|
"examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
|
|
996
1182
|
})
|
|
@@ -1009,7 +1195,7 @@ const SessionMutation = Schema.Struct({
|
|
|
1009
1195
|
"examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
|
|
1010
1196
|
"format": "uri"
|
|
1011
1197
|
})),
|
|
1012
|
-
"sessionToken": Schema.optionalKey(Schema.
|
|
1198
|
+
"sessionToken": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
|
|
1013
1199
|
"description": "Current raw session access secret. Omitted by operations that do not expose or replace credentials.",
|
|
1014
1200
|
"examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
|
|
1015
1201
|
}))
|
|
@@ -1017,19 +1203,10 @@ const SessionMutation = Schema.Struct({
|
|
|
1017
1203
|
"description": "Updated session and operation-specific live access credentials when available.",
|
|
1018
1204
|
"identifier": "SessionMutation"
|
|
1019
1205
|
});
|
|
1020
|
-
const InitialBrowserDocumentSelection = Schema.Struct({
|
|
1021
|
-
"anchor": InitialBrowserSelectionEndpoint,
|
|
1022
|
-
"focus": InitialBrowserSelectionEndpoint
|
|
1023
|
-
}).annotate({ "identifier": "InitialBrowserDocumentSelection" });
|
|
1024
|
-
const InitialIndexedDBDatabase = Schema.Struct({
|
|
1025
|
-
"name": Schema.String,
|
|
1026
|
-
"version": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
|
|
1027
|
-
"objectStores": Schema.Array(InitialIndexedDBObjectStore)
|
|
1028
|
-
}).annotate({ "identifier": "InitialIndexedDBDatabase" });
|
|
1029
1206
|
const InitialBrowserDocumentState = Schema.Struct({
|
|
1030
1207
|
"version": Schema.Literal(1),
|
|
1031
|
-
"windowName": Schema.optionalKey(
|
|
1032
|
-
"historyState": Schema.optionalKey(Schema.
|
|
1208
|
+
"windowName": Schema.optionalKey(SensitiveString),
|
|
1209
|
+
"historyState": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone history state." })),
|
|
1033
1210
|
"controls": Schema.Array(InitialBrowserControlState).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
|
|
1034
1211
|
"contentEditables": Schema.Array(InitialBrowserContentEditableState).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
|
|
1035
1212
|
"scrollPositions": Schema.Array(InitialBrowserElementScrollPosition).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
|
|
@@ -1043,8 +1220,8 @@ const InitialStorageOrigin = Schema.Struct({
|
|
|
1043
1220
|
"origin": Schema.String.annotate({
|
|
1044
1221
|
"examples": ["https://example.com"],
|
|
1045
1222
|
"format": "uri"
|
|
1046
|
-
}).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
|
|
1047
|
-
"ancestorOrigins": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" }))).annotate({ "description": "Top-down HTTP origin chain for partitioned storage. Omitted for a top-level origin." }).check(Schema.isMaxLength(32).annotate({ "expected": "a value with a length of at most 32" }))),
|
|
1223
|
+
}).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
|
|
1224
|
+
"ancestorOrigins": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" }))).annotate({ "description": "Top-down HTTP origin chain for partitioned storage. Omitted for a top-level origin." }).check(Schema.isMaxLength(32).annotate({ "expected": "a value with a length of at most 32" }))),
|
|
1048
1225
|
"localStorage": Schema.Array(BrowserStorageEntry),
|
|
1049
1226
|
"indexedDB": Schema.optionalKey(Schema.Array(InitialIndexedDBDatabase)),
|
|
1050
1227
|
"cacheStorage": Schema.optionalKey(Schema.Array(InitialCacheStorageCache)),
|
|
@@ -1058,7 +1235,7 @@ const InitialBrowserTarget = Schema.Struct({
|
|
|
1058
1235
|
"description": "Absolute HTTP or HTTPS URL without embedded credentials.",
|
|
1059
1236
|
"examples": ["https://example.com/account"],
|
|
1060
1237
|
"format": "uri"
|
|
1061
|
-
}).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/" })),
|
|
1238
|
+
}).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/" })),
|
|
1062
1239
|
"sessionStorage": Schema.optionalKey(Schema.Array(InitialTargetStorageOrigin).annotate({ "description": "Per-origin session storage installed in target frames before page scripts execute." })),
|
|
1063
1240
|
"scroll": Schema.optionalKey(InitialBrowserScrollPosition),
|
|
1064
1241
|
"documentState": Schema.optionalKey(InitialBrowserDocumentState),
|
|
@@ -1133,7 +1310,8 @@ const ListTenantsParams = Schema.Struct({
|
|
|
1133
1310
|
"deleted",
|
|
1134
1311
|
"all"
|
|
1135
1312
|
]).annotate({ "default": "active" })),
|
|
1136
|
-
"includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false }))
|
|
1313
|
+
"includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
|
|
1314
|
+
"query": Schema.optionalKey(Schema.String)
|
|
1137
1315
|
});
|
|
1138
1316
|
const ListTenants200 = TenantPage;
|
|
1139
1317
|
const ListTenantsdefault = Error;
|
|
@@ -1240,6 +1418,7 @@ const ListSessionsParams = Schema.Struct({
|
|
|
1240
1418
|
"cursor": Schema.optionalKey(Schema.String),
|
|
1241
1419
|
"includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
|
|
1242
1420
|
"status": Schema.optionalKey(SessionStatus),
|
|
1421
|
+
"query": Schema.optionalKey(Schema.String),
|
|
1243
1422
|
"tagKey": Schema.optionalKey(Schema.Array(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })))),
|
|
1244
1423
|
"tagValue": Schema.optionalKey(Schema.Array(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })))),
|
|
1245
1424
|
"tagOperator": Schema.optionalKey(Schema.Array(Schema.Literals([
|
|
@@ -1273,7 +1452,7 @@ const ReplaceSessionTagsRequestJson = ReplaceTagsInput;
|
|
|
1273
1452
|
const ReplaceSessionTags200 = SessionMutation;
|
|
1274
1453
|
const ReplaceSessionTagsdefault = Error;
|
|
1275
1454
|
const UpdateSessionProxyParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1276
|
-
const UpdateSessionProxyRequestJson =
|
|
1455
|
+
const UpdateSessionProxyRequestJson = UpdateProxyConfig;
|
|
1277
1456
|
const UpdateSessionProxy200 = SessionMutation;
|
|
1278
1457
|
const UpdateSessionProxydefault = Error;
|
|
1279
1458
|
const SuspendSessionParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
@@ -1295,6 +1474,14 @@ const SetSessionCursorParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.op
|
|
|
1295
1474
|
const SetSessionCursorRequestJson = CursorVisibility;
|
|
1296
1475
|
const SetSessionCursor200 = CursorVisibility;
|
|
1297
1476
|
const SetSessionCursordefault = Error;
|
|
1477
|
+
const GetSessionThumbnailParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1478
|
+
const GetSessionThumbnaildefault = Error;
|
|
1479
|
+
const GetSessionTargetThumbnailParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1480
|
+
const GetSessionTargetThumbnaildefault = Error;
|
|
1481
|
+
const ExportSessionStorageStateParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1482
|
+
const ExportSessionStorageStateRequestJson = ExportSessionStorageStateInput;
|
|
1483
|
+
const ExportSessionStorageState200 = InitialBrowserStorageState;
|
|
1484
|
+
const ExportSessionStorageStatedefault = Error;
|
|
1298
1485
|
const ListSessionRecordingsParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1299
1486
|
const ListSessionRecordings200 = Schema.Array(Recording);
|
|
1300
1487
|
const ListSessionRecordingsdefault = Error;
|
|
@@ -1310,8 +1497,32 @@ const RetargetSessionRecordingRequestJson = RetargetSessionRecordingInput;
|
|
|
1310
1497
|
const RetargetSessionRecording200 = Recording;
|
|
1311
1498
|
const RetargetSessionRecordingdefault = Error;
|
|
1312
1499
|
const StopSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1313
|
-
const StopSessionRecording200 =
|
|
1500
|
+
const StopSessionRecording200 = Recording;
|
|
1314
1501
|
const StopSessionRecordingdefault = Error;
|
|
1502
|
+
const ListSessionFilesParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1503
|
+
const ListSessionFiles200 = Schema.Array(SessionFileEntry);
|
|
1504
|
+
const ListSessionFilesdefault = Error;
|
|
1505
|
+
const UploadSessionFilesParams = Schema.Struct({
|
|
1506
|
+
"X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7),
|
|
1507
|
+
"directory": Schema.optionalKey(Schema.String.annotate({ "default": "uploads" }))
|
|
1508
|
+
});
|
|
1509
|
+
const UploadSessionFilesRequestFormData = Schema.Struct({ "files": Schema.optionalKey(Schema.Array(__ClientMultipartFile)) });
|
|
1510
|
+
const UploadSessionFiles201 = Schema.Struct({ "files": Schema.Array(SessionFile) }).annotate({ "description": "Files stored by this request, in request order." });
|
|
1511
|
+
const UploadSessionFilesdefault = Error;
|
|
1512
|
+
const DeleteSessionFileParams = Schema.Struct({
|
|
1513
|
+
"X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7),
|
|
1514
|
+
"relativePath": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
|
|
1515
|
+
"recursive": Schema.optionalKey(Schema.Boolean.annotate({ "default": false }))
|
|
1516
|
+
});
|
|
1517
|
+
const DeleteSessionFiledefault = Error;
|
|
1518
|
+
const MoveSessionFileParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1519
|
+
const MoveSessionFileRequestJson = MoveSessionFileInput;
|
|
1520
|
+
const MoveSessionFile200 = SessionFileEntry;
|
|
1521
|
+
const MoveSessionFiledefault = Error;
|
|
1522
|
+
const CreateSessionDirectoryParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1523
|
+
const CreateSessionDirectoryRequestJson = CreateSessionDirectoryInput;
|
|
1524
|
+
const CreateSessionDirectory201 = SessionDirectory;
|
|
1525
|
+
const CreateSessionDirectorydefault = Error;
|
|
1315
1526
|
const CreateSessionFileDownloadURLParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1316
1527
|
const CreateSessionFileDownloadURLRequestJson = SessionFileDownloadURLInput;
|
|
1317
1528
|
const CreateSessionFileDownloadURL200 = SessionFileDownloadURL;
|
|
@@ -1365,6 +1576,14 @@ const ListEventsParams = Schema.Struct({
|
|
|
1365
1576
|
});
|
|
1366
1577
|
const ListEvents200 = EventPage;
|
|
1367
1578
|
const ListEventsdefault = Error;
|
|
1579
|
+
const UploadLiveSessionFilesParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1580
|
+
const UploadLiveSessionFilesRequestFormData = Schema.Struct({ "files": Schema.optionalKey(Schema.Array(__ClientMultipartFile)) });
|
|
1581
|
+
const UploadLiveSessionFiles201 = Schema.Struct({ "files": Schema.Array(SessionFile) }).annotate({ "description": "Files stored by this request, in request order." });
|
|
1582
|
+
const UploadLiveSessionFilesdefault = LiveSessionFailure;
|
|
1583
|
+
const SetSessionViewportParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
|
|
1584
|
+
const SetSessionViewportRequestJson = SetViewportInput;
|
|
1585
|
+
const SetSessionViewport200 = TargetViewport;
|
|
1586
|
+
const SetSessionViewportdefault = LiveSessionFailure;
|
|
1368
1587
|
const make = (httpClient, options = {}) => {
|
|
1369
1588
|
const unexpectedStatus = (response) => Effect.flatMap(Effect.orElseSucceed(response.json, () => "Unexpected status code"), (description) => Effect.fail(new HttpClientError.HttpClientError({ reason: new HttpClientError.StatusCodeError({
|
|
1370
1589
|
request: response.request,
|
|
@@ -1392,6 +1611,9 @@ const make = (httpClient, options = {}) => {
|
|
|
1392
1611
|
if (path.split("/").some((segment) => /^(?:\.|%2e){1,2}$/i.test(segment))) return fail("Request paths cannot contain dot segments");
|
|
1393
1612
|
return Effect.succeed(method(path));
|
|
1394
1613
|
});
|
|
1614
|
+
const executeStreamRequest = (request) => Effect.suspend(() => options.transformClient ? Effect.flatMap(options.transformClient(httpClient), (client) => HttpClient.filterStatusOk(client).execute(request)) : HttpClient.filterStatusOk(httpClient).execute(request));
|
|
1615
|
+
const decodeBinary = (response) => Effect.map(response.arrayBuffer, (buffer) => new Uint8Array(buffer));
|
|
1616
|
+
const binaryRequest = (request) => executeStreamRequest(request).pipe(Effect.map((response) => response.stream), Stream.unwrap);
|
|
1395
1617
|
const decodeSuccess = (schema) => (response) => HttpClientResponse.schemaBodyJson(schema)(response);
|
|
1396
1618
|
return {
|
|
1397
1619
|
httpClient,
|
|
@@ -1411,7 +1633,8 @@ const make = (httpClient, options = {}) => {
|
|
|
1411
1633
|
"limit": options?.params?.["limit"],
|
|
1412
1634
|
"cursor": options?.params?.["cursor"],
|
|
1413
1635
|
"deleted": options?.params?.["deleted"],
|
|
1414
|
-
"includeDeleted": options?.params?.["includeDeleted"]
|
|
1636
|
+
"includeDeleted": options?.params?.["includeDeleted"],
|
|
1637
|
+
"query": options?.params?.["query"]
|
|
1415
1638
|
}), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1416
1639
|
"2xx": decodeSuccess(ListTenants200),
|
|
1417
1640
|
orElse: unexpectedStatus
|
|
@@ -1548,6 +1771,7 @@ const make = (httpClient, options = {}) => {
|
|
|
1548
1771
|
"cursor": options?.params?.["cursor"],
|
|
1549
1772
|
"includeDeleted": options?.params?.["includeDeleted"],
|
|
1550
1773
|
"status": options?.params?.["status"],
|
|
1774
|
+
"query": options?.params?.["query"],
|
|
1551
1775
|
"tagKey": options?.params?.["tagKey"],
|
|
1552
1776
|
"tagValue": options?.params?.["tagValue"],
|
|
1553
1777
|
"tagOperator": options?.params?.["tagOperator"]
|
|
@@ -1603,6 +1827,22 @@ const make = (httpClient, options = {}) => {
|
|
|
1603
1827
|
"2xx": decodeSuccess(SetSessionCursor200),
|
|
1604
1828
|
orElse: unexpectedStatus
|
|
1605
1829
|
}))))),
|
|
1830
|
+
"getSessionThumbnail": (sessionId, options) => __makePathRequest(HttpClientRequest.get, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/thumbnail").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1831
|
+
"2xx": decodeSuccess(GetSessionThumbnaildefault),
|
|
1832
|
+
"200": decodeBinary,
|
|
1833
|
+
orElse: unexpectedStatus
|
|
1834
|
+
}))))),
|
|
1835
|
+
"getSessionThumbnailStream": (sessionId, options) => Stream.unwrap(__makePathRequest(HttpClientRequest.get, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/thumbnail").pipe(Effect.map((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), binaryRequest)))),
|
|
1836
|
+
"getSessionTargetThumbnail": (sessionId, targetId, options) => __makePathRequest(HttpClientRequest.get, [sessionId, targetId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/targets/" + __encodePathParam(targetId) + "/thumbnail").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1837
|
+
"2xx": decodeSuccess(GetSessionTargetThumbnaildefault),
|
|
1838
|
+
"200": decodeBinary,
|
|
1839
|
+
orElse: unexpectedStatus
|
|
1840
|
+
}))))),
|
|
1841
|
+
"getSessionTargetThumbnailStream": (sessionId, targetId, options) => Stream.unwrap(__makePathRequest(HttpClientRequest.get, [sessionId, targetId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/targets/" + __encodePathParam(targetId) + "/thumbnail").pipe(Effect.map((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), binaryRequest)))),
|
|
1842
|
+
"exportSessionStorageState": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/storage-state").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyJsonUnsafe(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1843
|
+
"2xx": decodeSuccess(ExportSessionStorageState200),
|
|
1844
|
+
orElse: unexpectedStatus
|
|
1845
|
+
}))))),
|
|
1606
1846
|
"listSessionRecordings": (sessionId, options) => __makePathRequest(HttpClientRequest.get, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/recordings").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1607
1847
|
"2xx": decodeSuccess(ListSessionRecordings200),
|
|
1608
1848
|
orElse: unexpectedStatus
|
|
@@ -1623,6 +1863,30 @@ const make = (httpClient, options = {}) => {
|
|
|
1623
1863
|
"2xx": decodeSuccess(StopSessionRecording200),
|
|
1624
1864
|
orElse: unexpectedStatus
|
|
1625
1865
|
}))))),
|
|
1866
|
+
"listSessionFiles": (sessionId, options) => __makePathRequest(HttpClientRequest.get, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1867
|
+
"2xx": decodeSuccess(ListSessionFiles200),
|
|
1868
|
+
orElse: unexpectedStatus
|
|
1869
|
+
}))))),
|
|
1870
|
+
"uploadSessionFiles": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setUrlParams({ "directory": options.params?.["directory"] }), HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyFormDataRecord(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1871
|
+
"2xx": decodeSuccess(UploadSessionFiles201),
|
|
1872
|
+
orElse: unexpectedStatus
|
|
1873
|
+
}))))),
|
|
1874
|
+
"deleteSessionFile": (sessionId, options) => __makePathRequest(HttpClientRequest.delete, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setUrlParams({
|
|
1875
|
+
"relativePath": options.params["relativePath"],
|
|
1876
|
+
"recursive": options.params["recursive"]
|
|
1877
|
+
}), HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1878
|
+
"2xx": decodeSuccess(DeleteSessionFiledefault),
|
|
1879
|
+
"204": () => Effect.void,
|
|
1880
|
+
orElse: unexpectedStatus
|
|
1881
|
+
}))))),
|
|
1882
|
+
"moveSessionFile": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files/move").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyJsonUnsafe(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1883
|
+
"2xx": decodeSuccess(MoveSessionFile200),
|
|
1884
|
+
orElse: unexpectedStatus
|
|
1885
|
+
}))))),
|
|
1886
|
+
"createSessionDirectory": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files/directories").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyJsonUnsafe(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1887
|
+
"2xx": decodeSuccess(CreateSessionDirectory201),
|
|
1888
|
+
orElse: unexpectedStatus
|
|
1889
|
+
}))))),
|
|
1626
1890
|
"createSessionFileDownloadURL": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files/download-url").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyJsonUnsafe(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1627
1891
|
"2xx": decodeSuccess(CreateSessionFileDownloadURL200),
|
|
1628
1892
|
orElse: unexpectedStatus
|
|
@@ -1668,7 +1932,15 @@ const make = (httpClient, options = {}) => {
|
|
|
1668
1932
|
}), HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
|
|
1669
1933
|
"2xx": decodeSuccess(ListEvents200),
|
|
1670
1934
|
orElse: unexpectedStatus
|
|
1671
|
-
})))
|
|
1935
|
+
}))),
|
|
1936
|
+
"uploadLiveSessionFiles": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/sessions/" + __encodePathParam(sessionId) + "/uploads").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyFormDataRecord(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1937
|
+
"2xx": decodeSuccess(UploadLiveSessionFiles201),
|
|
1938
|
+
orElse: unexpectedStatus
|
|
1939
|
+
}))))),
|
|
1940
|
+
"setSessionViewport": (sessionId, options) => __makePathRequest(HttpClientRequest.post, [sessionId], () => "/sessions/" + __encodePathParam(sessionId) + "/browser/viewport").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), HttpClientRequest.bodyJsonUnsafe(options.payload), withResponse(options.config)(HttpClientResponse.matchStatus({
|
|
1941
|
+
"2xx": decodeSuccess(SetSessionViewport200),
|
|
1942
|
+
orElse: unexpectedStatus
|
|
1943
|
+
})))))
|
|
1672
1944
|
};
|
|
1673
1945
|
};
|
|
1674
1946
|
var ApertureApiErrorImpl = class extends Data.Error {};
|
|
@@ -1679,6 +1951,6 @@ const ApertureApiError = (tag, cause, response) => new ApertureApiErrorImpl({
|
|
|
1679
1951
|
request: response.request
|
|
1680
1952
|
});
|
|
1681
1953
|
//#endregion
|
|
1682
|
-
export { ApertureApiError, AuditEvent, AuditEventPage, AuthMe, AuthorityType, BrowserChannel, BrowserChannels, BrowserConfig, BrowserCookieSameSite, BrowserStorageEntry, CreateAdminToken201, CreateAdminTokenInput, CreateAdminTokenRequestJson, CreateAdminTokendefault, CreateSession201, CreateSessionFileDownloadURL200, CreateSessionFileDownloadURLParams, CreateSessionFileDownloadURLRequestJson, CreateSessionFileDownloadURLdefault, CreateSessionInput, CreateSessionParams, CreateSessionRecording201, CreateSessionRecordingInput, CreateSessionRecordingParams, CreateSessionRecordingRequestJson, CreateSessionRecordingdefault, CreateSessionRequestJson, CreateSessionResult, CreateSessiondefault, CreateTenant201, CreateTenantRequestJson, CreateTenantToken201, CreateTenantTokenInput, CreateTenantTokenRequestJson, CreateTenantTokendefault, CreateTenantdefault, CreateTokenResponse, CreateUser201, CreateUserInvitation201, CreateUserInvitationdefault, CreateUserRequestJson, CreateUserdefault, CursorVisibility, DeleteSession200, DeleteSessionParams, DeleteSessiondefault, DeleteSnapshot200, DeleteSnapshotParams, DeleteSnapshotdefault, DeleteTenant200, DeleteTenantMembershipdefault, DeleteTenantdefault, DisableUser200, DisableUserdefault, Error, ErrorDetail, Event, EventPage, GetCurrentPrincipal200, GetCurrentPrincipalParams, GetCurrentPrincipaldefault, GetHealth200, GetSession200, GetSessionCursor200, GetSessionCursorParams, GetSessionCursordefault, GetSessionParams, GetSessionRecording200, GetSessionRecordingParams, GetSessionRecordingdefault, GetSessiondefault, GetSessionsBulk200, GetSessionsBulkParams, GetSessionsBulkRequestJson, GetSessionsBulkdefault, GetTenant200, GetTenantdefault, GetUser200, GetUserdefault, Health, IceServer, InitialBrowserContentEditableState, InitialBrowserControlSelection, InitialBrowserControlState, InitialBrowserCookie, InitialBrowserCookiePartitionKey, InitialBrowserDocumentSelection, InitialBrowserDocumentState, InitialBrowserElementLocator, InitialBrowserElementPathStep, InitialBrowserElementScrollPosition, InitialBrowserScrollPosition, InitialBrowserSelectionEndpoint, InitialBrowserStorageState, InitialBrowserTarget, InitialCacheStorageCache, InitialCacheStorageEntry, InitialIndexedDBDatabase, InitialIndexedDBIndex, InitialIndexedDBIndexKeyPath, InitialIndexedDBKeyPath, InitialIndexedDBObjectStore, InitialIndexedDBRecord, InitialOPFSFile, InitialStorageOrigin, InitialTargetStorageOrigin, ListAdminTokens200, ListAdminTokensParams, ListAdminTokensdefault, ListAuditEvents200, ListAuditEventsParams, ListAuditEventsdefault, ListBrowserChannels200, ListBrowserChannelsdefault, ListEvents200, ListEventsParams, ListEventsdefault, ListSessionRecordings200, ListSessionRecordingsParams, ListSessionRecordingsdefault, ListSessions200, ListSessionsParams, ListSessionsdefault, ListSnapshots200, ListSnapshotsParams, ListSnapshotsdefault, ListTenantMemberships200, ListTenantMembershipsdefault, ListTenantTokens200, ListTenantTokensParams, ListTenantTokensdefault, ListTenants200, ListTenantsParams, ListTenantsdefault, ListUserMemberships200, ListUserMembershipsdefault, ListUsers200, ListUsersParams, ListUsersdefault, PageMeta, Principal, PrincipalType, PromoteSession200, PromoteSessionInput, PromoteSessionParams, PromoteSessionRequestJson, PromoteSessiondefault, ProxyConfig, ProxyTunnelConfig, Recording, ReopenSession200, ReopenSessionParams, ReopenSessiondefault, ReplaceSessionTags200, ReplaceSessionTagsParams, ReplaceSessionTagsRequestJson, ReplaceSessionTagsdefault, ReplaceSnapshotTags200, ReplaceSnapshotTagsParams, ReplaceSnapshotTagsRequestJson, ReplaceSnapshotTagsdefault, ReplaceTagsInput, ResourceGrant, ResourceMode, ResourceType, RestoreSnapshot200, RestoreSnapshotParams, RestoreSnapshotdefault, RestoreTenant200, RestoreTenantdefault, RestoreUser200, RestoreUserdefault, RetargetSessionRecording200, RetargetSessionRecordingInput, RetargetSessionRecordingParams, RetargetSessionRecordingRequestJson, RetargetSessionRecordingdefault, RevokeAdminTokendefault, RevokeTenantTokendefault, RotateCollaborationCapability200, RotateCollaborationCapabilityParams, RotateCollaborationCapabilitydefault, RotateSessionToken200, RotateSessionTokenParams, RotateSessionTokendefault, Scope, Session, SessionBulkInput, SessionBulkResponse, SessionCollaborationCapabilities, SessionFile, SessionFileDownloadURL, SessionFileDownloadURLInput, SessionMedia, SessionMutation, SessionPage, SessionProxy, SessionStatus, SetSessionCursor200, SetSessionCursorParams, SetSessionCursorRequestJson, SetSessionCursordefault, Snapshot, SnapshotMutation, SnapshotPage, StopSessionRecording200, StopSessionRecordingParams, StopSessionRecordingdefault, StringMap, SuspendSession200, SuspendSessionParams, SuspendSessiondefault, Tenant, TenantInput, TenantMembership, TenantMembershipInput, TenantPage, TenantScope, Token, TokenPage, UUIDv7,
|
|
1954
|
+
export { ApertureApiError, AuditEvent, AuditEventPage, AuthMe, AuthorityType, BrowserChannel, BrowserChannels, BrowserConfig, BrowserCookieSameSite, BrowserStorageEntry, CreateAdminToken201, CreateAdminTokenInput, CreateAdminTokenRequestJson, CreateAdminTokendefault, CreateSession201, CreateSessionDirectory201, CreateSessionDirectoryInput, CreateSessionDirectoryParams, CreateSessionDirectoryRequestJson, CreateSessionDirectorydefault, CreateSessionFileDownloadURL200, CreateSessionFileDownloadURLParams, CreateSessionFileDownloadURLRequestJson, CreateSessionFileDownloadURLdefault, CreateSessionInput, CreateSessionParams, CreateSessionRecording201, CreateSessionRecordingInput, CreateSessionRecordingParams, CreateSessionRecordingRequestJson, CreateSessionRecordingdefault, CreateSessionRequestJson, CreateSessionResult, CreateSessiondefault, CreateTenant201, CreateTenantRequestJson, CreateTenantToken201, CreateTenantTokenInput, CreateTenantTokenRequestJson, CreateTenantTokendefault, CreateTenantdefault, CreateTokenResponse, CreateUser201, CreateUserInvitation201, CreateUserInvitationdefault, CreateUserRequestJson, CreateUserdefault, CursorVisibility, DeleteSession200, DeleteSessionFileParams, DeleteSessionFiledefault, DeleteSessionParams, DeleteSessiondefault, DeleteSnapshot200, DeleteSnapshotParams, DeleteSnapshotdefault, DeleteTenant200, DeleteTenantMembershipdefault, DeleteTenantdefault, DisableUser200, DisableUserdefault, Error, ErrorDetail, Event, EventPage, ExportSessionStorageState200, ExportSessionStorageStateInput, ExportSessionStorageStateParams, ExportSessionStorageStateRequestJson, ExportSessionStorageStatedefault, GetCurrentPrincipal200, GetCurrentPrincipalParams, GetCurrentPrincipaldefault, GetHealth200, GetSession200, GetSessionCursor200, GetSessionCursorParams, GetSessionCursordefault, GetSessionParams, GetSessionRecording200, GetSessionRecordingParams, GetSessionRecordingdefault, GetSessionTargetThumbnailParams, GetSessionTargetThumbnaildefault, GetSessionThumbnailParams, GetSessionThumbnaildefault, GetSessiondefault, GetSessionsBulk200, GetSessionsBulkParams, GetSessionsBulkRequestJson, GetSessionsBulkdefault, GetTenant200, GetTenantdefault, GetUser200, GetUserdefault, Health, IceServer, InitialBrowserContentEditableState, InitialBrowserControlSelection, InitialBrowserControlState, InitialBrowserCookie, InitialBrowserCookiePartitionKey, InitialBrowserDocumentSelection, InitialBrowserDocumentState, InitialBrowserElementLocator, InitialBrowserElementPathStep, InitialBrowserElementScrollPosition, InitialBrowserScrollPosition, InitialBrowserSelectionEndpoint, InitialBrowserStorageState, InitialBrowserTarget, InitialCacheStorageCache, InitialCacheStorageEntry, InitialIndexedDBDatabase, InitialIndexedDBIndex, InitialIndexedDBIndexKeyPath, InitialIndexedDBKeyPath, InitialIndexedDBObjectStore, InitialIndexedDBRecord, InitialOPFSFile, InitialStorageOrigin, InitialTargetStorageOrigin, ListAdminTokens200, ListAdminTokensParams, ListAdminTokensdefault, ListAuditEvents200, ListAuditEventsParams, ListAuditEventsdefault, ListBrowserChannels200, ListBrowserChannelsdefault, ListEvents200, ListEventsParams, ListEventsdefault, ListSessionFiles200, ListSessionFilesParams, ListSessionFilesdefault, ListSessionRecordings200, ListSessionRecordingsParams, ListSessionRecordingsdefault, ListSessions200, ListSessionsParams, ListSessionsdefault, ListSnapshots200, ListSnapshotsParams, ListSnapshotsdefault, ListTenantMemberships200, ListTenantMembershipsdefault, ListTenantTokens200, ListTenantTokensParams, ListTenantTokensdefault, ListTenants200, ListTenantsParams, ListTenantsdefault, ListUserMemberships200, ListUserMembershipsdefault, ListUsers200, ListUsersParams, ListUsersdefault, LiveSessionErrorBody, LiveSessionFailure, MoveSessionFile200, MoveSessionFileInput, MoveSessionFileParams, MoveSessionFileRequestJson, MoveSessionFiledefault, PageMeta, Principal, PrincipalType, PromoteSession200, PromoteSessionInput, PromoteSessionParams, PromoteSessionRequestJson, PromoteSessiondefault, ProxyConfig, ProxyRule, ProxyTunnelConfig, ProxyUpstream, Recording, RecordingEditError, ReopenSession200, ReopenSessionParams, ReopenSessiondefault, ReplaceSessionTags200, ReplaceSessionTagsParams, ReplaceSessionTagsRequestJson, ReplaceSessionTagsdefault, ReplaceSnapshotTags200, ReplaceSnapshotTagsParams, ReplaceSnapshotTagsRequestJson, ReplaceSnapshotTagsdefault, ReplaceTagsInput, ResourceGrant, ResourceMode, ResourceType, RestoreSnapshot200, RestoreSnapshotParams, RestoreSnapshotdefault, RestoreTenant200, RestoreTenantdefault, RestoreUser200, RestoreUserdefault, RetargetSessionRecording200, RetargetSessionRecordingInput, RetargetSessionRecordingParams, RetargetSessionRecordingRequestJson, RetargetSessionRecordingdefault, RevokeAdminTokendefault, RevokeTenantTokendefault, RotateCollaborationCapability200, RotateCollaborationCapabilityParams, RotateCollaborationCapabilitydefault, RotateSessionToken200, RotateSessionTokenParams, RotateSessionTokendefault, Scope, SensitiveString, Session, SessionBulkInput, SessionBulkResponse, SessionCollaborationCapabilities, SessionDirectory, SessionFile, SessionFileDownloadURL, SessionFileDownloadURLInput, SessionFileEntry, SessionMedia, SessionMutation, SessionPage, SessionProxy, SessionProxyUpstream, SessionStatus, SessionThumbnail, SetSessionCursor200, SetSessionCursorParams, SetSessionCursorRequestJson, SetSessionCursordefault, SetSessionViewport200, SetSessionViewportParams, SetSessionViewportRequestJson, SetSessionViewportdefault, SetViewportInput, Snapshot, SnapshotMutation, SnapshotPage, StopSessionRecording200, StopSessionRecordingParams, StopSessionRecordingdefault, StringMap, SuspendSession200, SuspendSessionParams, SuspendSessiondefault, TargetViewport, Tenant, TenantInput, TenantMembership, TenantMembershipInput, TenantPage, TenantScope, Token, TokenPage, UUIDv7, UpdateProxyConfig, UpdateSelectedTenant200, UpdateSelectedTenantRequestJson, UpdateSelectedTenantdefault, UpdateSessionProxy200, UpdateSessionProxyParams, UpdateSessionProxyRequestJson, UpdateSessionProxydefault, UpdateSnapshot200, UpdateSnapshotInput, UpdateSnapshotParams, UpdateSnapshotRequestJson, UpdateSnapshotdefault, UpdateTenant200, UpdateTenantRequestJson, UpdateTenantdefault, UpdateUser200, UpdateUserRequestJson, UpdateUserdefault, UploadLiveSessionFiles201, UploadLiveSessionFilesParams, UploadLiveSessionFilesRequestFormData, UploadLiveSessionFilesdefault, UploadSessionFiles201, UploadSessionFilesParams, UploadSessionFilesRequestFormData, UploadSessionFilesdefault, UpsertTenantMembership200, UpsertTenantMembershipRequestJson, UpsertTenantMembershipdefault, User, UserInput, UserInvitation, UserPage, Viewport, __ClientMultipartFile, make };
|
|
1683
1955
|
|
|
1684
1956
|
//# sourceMappingURL=index.js.map
|