@aperture-browser/api-schema 0.0.0-init.0 → 0.0.0-nightly.101.c63f90ec6164

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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 HttpClientError from "effect/unstable/http/HttpClientError";
5
- import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
6
- import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
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 SessionCollaborationCapabilities = Schema.Struct({
180
- "editorToken": Schema.String.annotate({ "examples": ["ape_019f6cf0000070008000000000000010_REDACTED"] }),
181
- "viewerToken": Schema.String.annotate({ "examples": ["apv_019f6cf0000070008000000000000010_REDACTED"] })
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 SessionProxy = Schema.Struct({
187
- "upstream": Schema.Literals([
188
- "direct",
189
- "proxy",
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
- "url": Schema.optionalKey(Schema.String.annotate({
196
- "description": "Generic upstream proxy URL. Omitted unless `upstream` is `proxy`. The password is masked, so this value cannot be replayed as a write.",
197
- "examples": ["socks5://user:pass@proxy.example.com:1080"]
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": "Stored session egress proxy assignment. Secrets are write-only — tunnel auth never appears here, and an upstream proxy URL comes back with its password masked.",
209
- "identifier": "SessionProxy"
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 Recording = Schema.Struct({
298
- "recordingId": Schema.String.annotate({
299
- "description": "Stable recording identifier retained across target changes.",
300
- "format": "uuid"
301
- }),
302
- "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." }),
303
- "targetId": Schema.String.annotate({ "description": "Identifier of the top-level target currently recorded." }),
304
- "captureGeneration": Schema.Number.annotate({
305
- "description": "Assignment generation for the current top-level target.",
306
- "format": "int64"
307
- }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
308
- "status": Schema.Literals([
309
- "starting",
310
- "running",
311
- "stopped",
312
- "failed"
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
- "stopReason": Schema.optionalKey(Schema.String.annotate({ "description": "Lifecycle reason recorded after the recording stops or fails." })),
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": "One logical recording of a top-level target.",
327
- "identifier": "Recording"
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"
@@ -348,13 +298,28 @@ const RetargetSessionRecordingInput = Schema.Struct({ "targetId": Schema.String.
348
298
  "description": "Destination for a running tab recording.",
349
299
  "identifier": "RetargetSessionRecordingInput"
350
300
  });
301
+ const RecordingCaptionInput = Schema.Struct({
302
+ "text": Schema.String.annotate({ "description": "Caption text. Whitespace is trimmed." }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })).check(Schema.isMaxCodePoints(200).annotate({ "expected": "a string with at most 200 code points" })),
303
+ "durationMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Display duration in milliseconds. Zero or omitted means 3000; other values must be at least 200." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(3e4).annotate({ "expected": "a value less than or equal to 30000" })))
304
+ }).annotate({ "identifier": "RecordingCaptionInput" });
305
+ const RecordingRect = Schema.Struct({
306
+ "x": Schema.Number.annotate({ "description": "Left edge in viewport CSS pixels." }).check(Schema.isFinite().annotate({ "expected": "a finite number" })),
307
+ "y": Schema.Number.annotate({ "description": "Top edge in viewport CSS pixels." }).check(Schema.isFinite().annotate({ "expected": "a finite number" })),
308
+ "width": Schema.Number.check(Schema.isFinite().annotate({ "expected": "a finite number" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
309
+ "height": Schema.Number.check(Schema.isFinite().annotate({ "expected": "a finite number" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" }))
310
+ }).annotate({ "identifier": "RecordingRect" });
311
+ const RecordingPoint = Schema.Struct({
312
+ "x": Schema.Number.annotate({ "description": "Horizontal position in viewport CSS pixels." }).check(Schema.isFinite().annotate({ "expected": "a finite number" })),
313
+ "y": Schema.Number.annotate({ "description": "Vertical position in viewport CSS pixels." }).check(Schema.isFinite().annotate({ "expected": "a finite number" }))
314
+ }).annotate({ "identifier": "RecordingPoint" });
351
315
  const SessionFile = Schema.Struct({
316
+ "type": Schema.Literal("file"),
352
317
  "name": Schema.String.annotate({
353
318
  "description": "File name without directory components.",
354
319
  "examples": ["screencast-20260801T120000Z.webm"]
355
320
  }),
356
321
  "relativePath": Schema.String.annotate({
357
- "description": "Path below the session root. The first component is `downloads` or `recordings`.",
322
+ "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
323
  "examples": ["recordings/screencast-20260801T120000Z.webm"]
359
324
  }),
360
325
  "size": Schema.Number.annotate({
@@ -370,11 +335,51 @@ const SessionFile = Schema.Struct({
370
335
  "mimeType": Schema.String.annotate({
371
336
  "description": "Detected media type.",
372
337
  "examples": ["video/webm"]
373
- })
338
+ }),
339
+ "sandboxPath": Schema.optionalKey(Schema.String.annotate({
340
+ "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.",
341
+ "examples": ["/session/files/recordings/screencast-20260801T120000Z.webm"]
342
+ }))
374
343
  }).annotate({
375
344
  "description": "Regular file retained with a browser session.",
376
345
  "identifier": "SessionFile"
377
346
  });
347
+ const SessionDirectory = Schema.Struct({
348
+ "type": Schema.Literal("directory"),
349
+ "name": Schema.String.annotate({
350
+ "description": "Directory name without parent components.",
351
+ "examples": ["invoices"]
352
+ }),
353
+ "relativePath": Schema.String.annotate({
354
+ "description": "Path below the session files root.",
355
+ "examples": ["uploads/invoices"]
356
+ }),
357
+ "modifiedAt": Schema.String.annotate({ "format": "date-time" })
358
+ }).annotate({
359
+ "description": "Directory below the session files root.",
360
+ "identifier": "SessionDirectory"
361
+ });
362
+ const __ClientMultipartFile = Schema.instanceOf(globalThis.Blob, { expected: "File | Blob" });
363
+ const MoveSessionFileInput = Schema.Struct({
364
+ "from": Schema.String.annotate({
365
+ "description": "Current path from a `SessionFileEntry` result.",
366
+ "examples": ["downloads/invoice.pdf"]
367
+ }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
368
+ "to": Schema.String.annotate({
369
+ "description": "New path below the session files root. Missing directories are created.",
370
+ "examples": ["uploads/invoices/2026-08.pdf"]
371
+ }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))
372
+ }).annotate({
373
+ "description": "Current and new path of a session file.",
374
+ "identifier": "MoveSessionFileInput"
375
+ });
376
+ const CreateSessionDirectoryInput = Schema.Struct({ "relativePath": Schema.String.annotate({
377
+ "description": "Path below the session files root. Missing parents are created.",
378
+ "examples": ["uploads/invoices"]
379
+ }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })) }).annotate({
380
+ "description": "Directory to create.",
381
+ "identifier": "CreateSessionDirectoryInput"
382
+ });
378
383
  const SessionFileDownloadURLInput = Schema.Struct({
379
384
  "relativePath": Schema.String.annotate({
380
385
  "description": "Path from a `SessionFile` result.",
@@ -383,7 +388,11 @@ const SessionFileDownloadURLInput = Schema.Struct({
383
388
  "ttlSeconds": Schema.optionalKey(Schema.Number.annotate({
384
389
  "description": "Requested lifetime in seconds. Omit it to use `signed_file_url_ttl`; values above `signed_file_url_max_ttl` are rejected.",
385
390
  "examples": [900]
386
- }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })))
391
+ }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" }))),
392
+ "disposition": Schema.optionalKey(Schema.Literals(["attachment", "inline"]).annotate({
393
+ "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.",
394
+ "default": "attachment"
395
+ }))
387
396
  }).annotate({
388
397
  "description": "Session file path and requested signed URL lifetime.",
389
398
  "identifier": "SessionFileDownloadURLInput"
@@ -400,7 +409,7 @@ const SessionFileDownloadURL = Schema.Struct({
400
409
  "format": "date-time"
401
410
  })
402
411
  }).annotate({
403
- "description": "Signed attachment URL for one session file.",
412
+ "description": "Signed URL for one session file.",
404
413
  "identifier": "SessionFileDownloadURL"
405
414
  });
406
415
  const UpdateSnapshotInput = Schema.Struct({ "description": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
@@ -410,6 +419,40 @@ const UpdateSnapshotInput = Schema.Struct({ "description": Schema.optionalKey(Sc
410
419
  "description": "Replacement snapshot description.",
411
420
  "identifier": "UpdateSnapshotInput"
412
421
  });
422
+ const LiveSessionErrorBody = Schema.Struct({ "error": Schema.String.annotate({ "examples": ["file exceeds upload limit"] }) }).annotate({
423
+ "description": "Error raised inside a running session. It carries a message but no stable code.",
424
+ "identifier": "LiveSessionErrorBody"
425
+ });
426
+ const SetViewportInput = Schema.Struct({
427
+ "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" })),
428
+ "width": Schema.Number.annotate({
429
+ "description": "Logical width in CSS pixels. Widths below 500 are raised to 500.",
430
+ "examples": [1280]
431
+ }).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" })),
432
+ "height": Schema.Number.annotate({
433
+ "description": "Logical height in CSS pixels.",
434
+ "examples": [720]
435
+ }).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" })),
436
+ "deviceScaleFactor": Schema.optionalKey(Schema.Number.annotate({
437
+ "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.",
438
+ "examples": [1]
439
+ }).check(Schema.isFinite().annotate({ "expected": "a finite number" })))
440
+ }).annotate({
441
+ "description": "Requested logical viewport of one top-level target.",
442
+ "identifier": "SetViewportInput"
443
+ });
444
+ const Viewport = Schema.Struct({
445
+ "width": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
446
+ "height": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
447
+ "contentWidth": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
448
+ "contentHeight": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
449
+ "canvasWidth": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
450
+ "canvasHeight": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
451
+ "deviceScaleFactor": Schema.Number.annotate({ "description": "Effective device pixel ratio." }).check(Schema.isFinite().annotate({ "expected": "a finite number" }))
452
+ }).annotate({
453
+ "description": "Logical size, DPR-scaled content rectangle, and 64x64-bucketed media canvas of a target.",
454
+ "identifier": "Viewport"
455
+ });
413
456
  const Tenant = Schema.Struct({
414
457
  "id": Schema.suspend(() => UUIDv7).annotate({ "description": "Tenant identifier." }),
415
458
  "displayName": Schema.String.annotate({
@@ -520,19 +563,78 @@ const TenantMembership = Schema.Struct({
520
563
  "updatedAt": Schema.String.annotate({ "format": "date-time" })
521
564
  }).annotate({ "identifier": "TenantMembership" });
522
565
  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 SessionMedia = Schema.Struct({
524
- "mode": Schema.Literals(["auto", "cdp"]).annotate({
525
- "description": "Configured media mode. `auto` enables deployment-selected media support; `cdp` exposes Chrome DevTools access only.",
526
- "examples": ["auto"]
566
+ const IceServer = Schema.Struct({
567
+ "urls": Schema.Array(Schema.String).annotate({
568
+ "description": "STUN or TURN server URLs.",
569
+ "examples": [["turn:turn.example.com:3478?transport=udp"]]
527
570
  }),
528
- "webrtcProducer": Schema.Boolean.annotate({
529
- "description": "Whether the compositor WebRTC producer is available for this session.",
530
- "examples": [true]
571
+ "username": Schema.optionalKey(Schema.String.annotate({
572
+ "description": "TURN username. Omitted when the server does not require authentication.",
573
+ "examples": ["aperture-session"]
574
+ })),
575
+ "credential": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
576
+ "description": "TURN credential. Treat it as a secret and do not persist it in logs.",
577
+ "examples": ["REDACTED"]
578
+ }))
579
+ }).annotate({
580
+ "description": "ICE server configuration supplied to WebRTC consumers.",
581
+ "identifier": "IceServer"
582
+ });
583
+ const SessionCollaborationCapabilities = Schema.Struct({
584
+ "editorToken": Schema.suspend(() => SensitiveString).annotate({ "examples": ["ape_019f6cf0000070008000000000000010_REDACTED"] }),
585
+ "viewerToken": Schema.suspend(() => SensitiveString).annotate({ "examples": ["apv_019f6cf0000070008000000000000010_REDACTED"] })
586
+ }).annotate({
587
+ "description": "Owner-visible role-scoped secrets used to build collaboration links.",
588
+ "identifier": "SessionCollaborationCapabilities"
589
+ });
590
+ const SessionThumbnail = Schema.Struct({
591
+ "url": Schema.suspend(() => SensitiveString).annotate({
592
+ "description": "Thumbnail of the tab most recently shown to a live-session client.",
593
+ "format": "uri"
531
594
  }),
532
- "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." }))
595
+ "targetUrlTemplate": Schema.suspend(() => SensitiveString).annotate({ "description": "Tab thumbnail URL with a literal `{targetId}` placeholder for a top-level target ID." }),
596
+ "expiresAt": Schema.String.annotate({ "format": "date-time" })
533
597
  }).annotate({
534
- "description": "Media capabilities currently available for the session.",
535
- "identifier": "SessionMedia"
598
+ "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",
599
+ "identifier": "SessionThumbnail"
600
+ });
601
+ const BrowserStorageEntry = Schema.Struct({
602
+ "name": Schema.String,
603
+ "value": Schema.suspend(() => SensitiveString).annotate({ "description": "Browser storage value. Never log this field." })
604
+ }).annotate({ "identifier": "BrowserStorageEntry" });
605
+ const InitialIndexedDBRecord = Schema.Struct({
606
+ "key": Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone key." }),
607
+ "value": Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone value." })
608
+ }).annotate({ "identifier": "InitialIndexedDBRecord" });
609
+ const InitialOPFSFile = Schema.Struct({
610
+ "path": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
611
+ "body": Schema.suspend(() => SensitiveString).annotate({ "contentEncoding": "base64" })
612
+ }).annotate({ "identifier": "InitialOPFSFile" });
613
+ const ProxyUpstream = Schema.Struct({
614
+ "url": Schema.String.annotate({
615
+ "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).",
616
+ "examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
617
+ }),
618
+ "auth": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
619
+ "description": "Bearer secret for a tunnel URL's handshake. Required for a tunnel URL and invalid for a proxy URL. Write-only; never returned.",
620
+ "examples": ["REDACTED"]
621
+ }))
622
+ }).annotate({
623
+ "description": "A named upstream that proxy rules route through.",
624
+ "identifier": "ProxyUpstream"
625
+ });
626
+ const ProxyTunnelConfig = Schema.Struct({
627
+ "url": Schema.optionalKey(Schema.String.annotate({
628
+ "description": "Compound tunnel URL (`ws+yamux+socks5://` or `wss+yamux+socks5://`).",
629
+ "examples": ["wss+yamux+socks5://tunnel.example.com/t/019f6cf0-0000-7000-8000-000000000010"]
630
+ })),
631
+ "auth": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
632
+ "description": "Bearer secret for the tunnel handshake. Write-only; never returned.",
633
+ "examples": ["REDACTED"]
634
+ }))
635
+ }).annotate({
636
+ "description": "Legacy tunnel endpoint for `upstream` `tunnel`; both fields are required with it. Use a tunnel URL in `upstreams`.",
637
+ "identifier": "ProxyTunnelConfig"
536
638
  });
537
639
  const InitialCacheStorageEntry = Schema.Struct({
538
640
  "url": Schema.String.annotate({ "format": "uri" }),
@@ -540,7 +642,7 @@ const InitialCacheStorageEntry = Schema.Struct({
540
642
  "responseHeaders": StringMap,
541
643
  "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
644
  "responseStatusText": Schema.String,
543
- "responseBody": Schema.String.annotate({ "contentEncoding": "base64" })
645
+ "responseBody": Schema.suspend(() => SensitiveString).annotate({ "contentEncoding": "base64" })
544
646
  }).annotate({ "identifier": "InitialCacheStorageEntry" });
545
647
  const ReplaceTagsInput = Schema.Struct({ "tags": Schema.suspend(() => StringMap).annotate({ "description": "Complete tag map. Keys and values must contain non-whitespace characters." }) }).annotate({
546
648
  "description": "Complete replacement tag set. The map may be empty to clear all tags.",
@@ -554,7 +656,7 @@ const PromoteSessionInput = Schema.Struct({
554
656
  "name": Schema.String.annotate({
555
657
  "description": "Tenant-unique snapshot name. Leading and trailing whitespace is removed.",
556
658
  "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.*" })),
659
+ }).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
660
  "description": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
559
661
  "description": "Optional snapshot description. `null` creates the snapshot without a description.",
560
662
  "examples": ["Signed-in storefront state for checkout tests"]
@@ -610,12 +712,32 @@ const Snapshot = Schema.Struct({
610
712
  "description": "Reusable retained browser filesystem state. Deletion is soft until the retention deadline.",
611
713
  "identifier": "Snapshot"
612
714
  });
613
- const InitialTargetStorageOrigin = Schema.Struct({
614
- "origin": Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
615
- "entries": Schema.Array(BrowserStorageEntry)
616
- }).annotate({ "identifier": "InitialTargetStorageOrigin" });
715
+ const SessionProxy = Schema.Struct({
716
+ "upstreams": Schema.Record(Schema.String, SessionProxyUpstream),
717
+ "rules": Schema.Array(ProxyRule),
718
+ "upstream": Schema.Literals([
719
+ "direct",
720
+ "proxy",
721
+ "tunnel"
722
+ ]).annotate({
723
+ "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.",
724
+ "examples": ["tunnel"]
725
+ }),
726
+ "url": Schema.optionalKey(Schema.String.annotate({
727
+ "description": "Legacy upstream proxy URL with its password masked. Only present when `upstream` is exactly `proxy`.",
728
+ "examples": ["socks5://user:xxxxx@proxy.example.com:1080"]
729
+ })),
730
+ "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." })),
731
+ "bypass": Schema.optionalKey(Schema.String.annotate({
732
+ "description": "Legacy `;`-separated matches of the leading `direct` rules. Only present with an exact `proxy` or `tunnel` value.",
733
+ "examples": ["*.internal.example.com"]
734
+ }))
735
+ }).annotate({
736
+ "description": "Stored session egress proxy configuration. Secrets are write-only, so this value cannot be replayed as a write.",
737
+ "identifier": "SessionProxy"
738
+ });
617
739
  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-]*$" })),
740
+ "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
741
  "id": Schema.optionalKey(Schema.String),
620
742
  "name": Schema.optionalKey(Schema.String),
621
743
  "inputType": Schema.optionalKey(Schema.String),
@@ -629,13 +751,13 @@ const InitialBrowserElementLocator = Schema.Struct({
629
751
  });
630
752
  const InitialBrowserCookie = Schema.Struct({
631
753
  "name": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
632
- "value": Schema.String.annotate({ "description": "Cookie value. Never log this field." }),
754
+ "value": Schema.suspend(() => SensitiveString).annotate({ "description": "Cookie value. Never log this field." }),
633
755
  "domain": Schema.String.annotate({ "examples": [".example.com"] }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
634
756
  "hostOnly": Schema.optionalKey(Schema.Boolean.annotate({
635
757
  "description": "Scope the cookie to exactly `domain`, without subdomains. `domain` must then be a plain hostname.",
636
758
  "default": false
637
759
  })),
638
- "path": Schema.String.annotate({ "examples": ["/"] }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^\\/")).annotate({ "expected": "a string matching the RegExp ^\\/" })),
760
+ "path": Schema.String.annotate({ "examples": ["/"] }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^\\/", "u")).annotate({ "expected": "a string matching the RegExp ^\\/" })),
639
761
  "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
762
  "httpOnly": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
641
763
  "secure": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
@@ -651,53 +773,69 @@ const InitialIndexedDBIndex = Schema.Struct({
651
773
  "unique": Schema.Boolean,
652
774
  "multiEntry": Schema.Boolean
653
775
  }).annotate({ "identifier": "InitialIndexedDBIndex" });
654
- const ProxyConfig = Schema.Struct({
655
- "upstream": Schema.optionalKey(Schema.Literals([
656
- "direct",
657
- "proxy",
658
- "tunnel"
659
- ]).annotate({
660
- "description": "Upstream strategy for new connections. Defaults to `direct`.",
661
- "examples": ["tunnel"]
662
- })),
663
- "url": Schema.optionalKey(Schema.String.annotate({
664
- "description": "Generic upstream proxy URL (`http`, `https`, `socks`, `socks5`, `socks5h`). Required when `upstream` is `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).",
665
- "examples": ["socks5://user:pass@proxy.example.com:1080"]
666
- })),
667
- "tunnel": Schema.optionalKey(ProxyTunnelConfig),
668
- "bypass": Schema.optionalKey(Schema.String.annotate({
669
- "description": "Extra `--proxy-bypass-list` entries. Loopback is always bypassed.",
670
- "examples": ["*.internal.example.com"]
671
- }))
776
+ const Recording = Schema.Struct({
777
+ "recordingId": Schema.String.annotate({
778
+ "description": "Stable recording identifier retained across target changes.",
779
+ "format": "uuid"
780
+ }),
781
+ "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." }),
782
+ "targetId": Schema.String.annotate({ "description": "Identifier of the top-level target currently recorded." }),
783
+ "captureGeneration": Schema.Number.annotate({
784
+ "description": "Assignment generation for the current top-level target.",
785
+ "format": "int64"
786
+ }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
787
+ "status": Schema.Literals([
788
+ "starting",
789
+ "running",
790
+ "stopped",
791
+ "failed"
792
+ ]),
793
+ "stopReason": Schema.optionalKey(Schema.String.annotate({ "description": "Lifecycle reason recorded after the recording stops or fails." })),
794
+ "relativePath": Schema.String.annotate({
795
+ "description": "Session file path below the session files root; host paths are never exposed.",
796
+ "examples": ["recordings/recording-550e8400-e29b-41d4-a716-446655440000.webm"]
797
+ }),
798
+ "startedAt": Schema.String.annotate({ "format": "date-time" }),
799
+ "stoppedAt": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })),
800
+ "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" }))),
801
+ "fps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
802
+ "bitrateKbps": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
803
+ "codec": Schema.Literals(["vp8", "h264-va"]),
804
+ "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." }),
805
+ "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." })),
806
+ "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`." })),
807
+ "editError": Schema.optionalKey(RecordingEditError)
672
808
  }).annotate({
673
- "description": "Session egress proxy assignment. Omitted for direct egress.",
674
- "identifier": "ProxyConfig"
809
+ "description": "One logical recording of a top-level target.",
810
+ "identifier": "Recording"
675
811
  });
676
- const UpdateProxyAssignment = Schema.Struct({
677
- "upstream": Schema.optionalKey(Schema.Literals([
678
- "direct",
679
- "proxy",
680
- "tunnel"
681
- ]).annotate({
682
- "description": "Upstream strategy for new connections. Defaults to `direct`.",
683
- "examples": ["tunnel"]
684
- })),
685
- "url": Schema.optionalKey(Schema.String.annotate({
686
- "description": "Generic upstream proxy URL (`http`, `https`, `socks`, `socks5`, `socks5h`). Required when `upstream` is `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).",
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
- }))
812
+ const RecordingFocusInput = Schema.Struct({
813
+ "rect": Schema.optionalKey(RecordingRect),
814
+ "selector": Schema.optionalKey(Schema.String.annotate({ "description": "CSS selector in the top-level document; pass instead of rect." }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))),
815
+ "zoom": Schema.Number.check(Schema.isFinite().annotate({ "expected": "a finite number" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })).check(Schema.isLessThanOrEqualTo(4).annotate({ "expected": "a value less than or equal to 4" })),
816
+ "durationMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Hold duration in milliseconds. Zero or omitted means 2000; other values must be at least 200." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(1e4).annotate({ "expected": "a value less than or equal to 10000" })))
817
+ }).annotate({ "identifier": "RecordingFocusInput" });
818
+ const RecordingAttentionInput = Schema.Struct({
819
+ "point": Schema.optionalKey(RecordingPoint),
820
+ "selector": Schema.optionalKey(Schema.String.annotate({ "description": "CSS selector in the top-level document; pass instead of point." }).check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" }))),
821
+ "radius": Schema.optionalKey(Schema.Number.annotate({ "description": "Circle radius in CSS pixels. Zero or omitted means 40; other values must be at least 8." }).check(Schema.isFinite().annotate({ "expected": "a finite number" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(300).annotate({ "expected": "a value less than or equal to 300" }))),
822
+ "loops": Schema.optionalKey(Schema.Number.annotate({ "description": "Number of circles. Zero or omitted means 2." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(5).annotate({ "expected": "a value less than or equal to 5" }))),
823
+ "durationMs": Schema.optionalKey(Schema.Number.annotate({ "description": "Circle duration in milliseconds. Zero or omitted means 1200; other values must be at least 300." }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })).check(Schema.isLessThanOrEqualTo(5e3).annotate({ "expected": "a value less than or equal to 5000" })))
824
+ }).annotate({ "identifier": "RecordingAttentionInput" });
825
+ const SessionFileEntry = Schema.Union([SessionFile, SessionDirectory], { mode: "oneOf" }).annotate({
826
+ "description": "A session file or directory, told apart by `type`.",
827
+ "identifier": "SessionFileEntry"
828
+ });
829
+ const TargetViewport = Schema.Struct({
830
+ "targetId": Schema.String,
831
+ "generation": Schema.Number.annotate({
832
+ "description": "Assignment generation of the target's media output.",
833
+ "format": "int64"
834
+ }).check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(0).annotate({ "expected": "a value greater than or equal to 0" })),
835
+ "viewport": Viewport
698
836
  }).annotate({
699
- "description": "Replacement session egress proxy assignment.",
700
- "identifier": "UpdateProxyAssignment"
837
+ "description": "Viewport applied to a top-level target.",
838
+ "identifier": "TargetViewport"
701
839
  });
702
840
  const TenantPage = Schema.Struct({
703
841
  "data": Schema.Array(Tenant),
@@ -782,7 +920,7 @@ const CreateAdminTokenInput = Schema.Union([Schema.Struct({
782
920
  "name": Schema.String.annotate({
783
921
  "description": "Operator-assigned name. Leading and trailing whitespace is removed.",
784
922
  "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.*" })),
923
+ }).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
924
  "authorityType": Schema.Literal("system_admin"),
787
925
  "scopes": Schema.Array(Scope).annotate({
788
926
  "description": "Must include `system:admin`.",
@@ -802,7 +940,7 @@ const CreateAdminTokenInput = Schema.Union([Schema.Struct({
802
940
  "name": Schema.String.annotate({
803
941
  "description": "Operator-assigned name. Leading and trailing whitespace is removed.",
804
942
  "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.*" })),
943
+ }).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
944
  "authorityType": Schema.Literal("tenant"),
807
945
  "tenantId": Schema.suspend(() => UUIDv7).annotate({ "description": "Active tenant to bind permanently to the token." }),
808
946
  "scopes": Schema.Array(TenantScope).annotate({
@@ -824,7 +962,7 @@ const CreateTenantTokenInput = Schema.Struct({
824
962
  "name": Schema.String.annotate({
825
963
  "description": "Operator-assigned name. Leading and trailing whitespace is removed.",
826
964
  "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.*" })),
965
+ }).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
966
  "scopes": Schema.Array(TenantScope).annotate({
829
967
  "description": "Tenant-compatible scopes. `system:admin` and `tenants:write` are rejected.",
830
968
  "examples": [["sessions:read", "sessions:write"]]
@@ -840,73 +978,70 @@ const CreateTenantTokenInput = Schema.Struct({
840
978
  "description": "Token definition automatically bound to the authenticated tenant.",
841
979
  "identifier": "CreateTenantTokenInput"
842
980
  });
843
- const Session = Schema.Struct({
844
- "id": Schema.suspend(() => UUIDv7).annotate({ "description": "Session identifier." }),
845
- "tenantId": Schema.suspend(() => UUIDv7).annotate({ "description": "Tenant that owns the session." }),
846
- "baseSnapshotName": Schema.optionalKey(Schema.String.annotate({
847
- "description": "Snapshot name used as the session base. Omitted for a blank session.",
848
- "examples": ["signed-in-base"]
849
- })),
850
- "label": Schema.optionalKey(Schema.String.annotate({
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"
981
+ const LiveSessionFailure = Schema.Union([Error, LiveSessionErrorBody], { mode: "oneOf" }).annotate({
982
+ "description": "Failure of a live-session route.",
983
+ "identifier": "LiveSessionFailure"
984
+ });
985
+ const SessionMedia = Schema.Struct({
986
+ "mode": Schema.Literals(["auto", "cdp"]).annotate({
987
+ "description": "Configured media mode. `auto` enables deployment-selected media support; `cdp` exposes Chrome DevTools access only.",
988
+ "examples": ["auto"]
864
989
  }),
865
- "startedAt": Schema.optionalKey(Schema.String.annotate({
866
- "description": "Most recent successful browser start time. Omitted before startup succeeds.",
867
- "examples": ["2026-07-17T12:00:03Z"],
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"
990
+ "webrtcProducer": Schema.Boolean.annotate({
991
+ "description": "Whether the compositor WebRTC producer is available for this session.",
992
+ "examples": [true]
884
993
  }),
885
- "lastConnectedAt": Schema.optionalKey(Schema.String.annotate({
886
- "description": "Most recent routed client activity time. Omitted until a client connects.",
887
- "examples": ["2026-07-17T12:30:00Z"],
888
- "format": "date-time"
889
- })),
890
- "suspendedAt": Schema.optionalKey(Schema.String.annotate({
891
- "description": "Most recent suspension time. Omitted unless the session is suspended.",
892
- "examples": ["2026-07-17T13:00:00Z"],
893
- "format": "date-time"
894
- })),
895
- "tags": Schema.optionalKey(Schema.suspend(() => StringMap).annotate({ "description": "Session metadata tags. Omitted when no tags are set." })),
896
- "cdpUrl": Schema.optionalKey(Schema.String.annotate({
897
- "description": "Authenticated Chrome DevTools endpoint. Omitted when the session is not currently routable. Use it with `sessionToken`.",
898
- "examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
899
- "format": "uri"
994
+ "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." }))
995
+ }).annotate({
996
+ "description": "Media capabilities currently available for the session.",
997
+ "identifier": "SessionMedia"
998
+ });
999
+ const InitialTargetStorageOrigin = Schema.Struct({
1000
+ "origin": Schema.String.annotate({ "format": "uri" }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
1001
+ "entries": Schema.Array(BrowserStorageEntry)
1002
+ }).annotate({ "identifier": "InitialTargetStorageOrigin" });
1003
+ const ProxyConfig = Schema.Struct({
1004
+ "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." })),
1005
+ "rules": Schema.optionalKey(Schema.Array(ProxyRule).check(Schema.isMaxLength(256).annotate({ "expected": "a value with a length of at most 256" }))),
1006
+ "upstream": Schema.optionalKey(Schema.Literals([
1007
+ "direct",
1008
+ "proxy",
1009
+ "tunnel"
1010
+ ]).annotate({
1011
+ "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.",
1012
+ "examples": ["tunnel"]
900
1013
  })),
901
- "sessionToken": Schema.optionalKey(Schema.String.annotate({
902
- "description": "Session access secret returned when live access credentials are available. Rotation invalidates the previous token immediately.",
903
- "examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
1014
+ "url": Schema.optionalKey(Schema.String.annotate({
1015
+ "description": "Legacy upstream proxy URL, required with `upstream` `proxy`. Use `upstreams` and `rules`.",
1016
+ "examples": ["socks5://user:pass@proxy.example.com:1080"]
904
1017
  })),
905
- "collaboration": Schema.optionalKey(SessionCollaborationCapabilities),
906
- "proxy": Schema.optionalKey(SessionProxy)
1018
+ "tunnel": Schema.optionalKey(ProxyTunnelConfig),
1019
+ "bypass": Schema.optionalKey(Schema.String.annotate({
1020
+ "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`.",
1021
+ "examples": ["*.internal.example.com"]
1022
+ }))
907
1023
  }).annotate({
908
- "description": "Browser session state, retention metadata, tags, and currently available access credentials.",
909
- "identifier": "Session"
1024
+ "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.",
1025
+ "identifier": "ProxyConfig"
1026
+ });
1027
+ const UpdateProxyConfig = Schema.Struct({
1028
+ "upstreams": Schema.optionalKey(Schema.Record(Schema.String, ProxyUpstream)),
1029
+ "rules": Schema.optionalKey(Schema.Array(ProxyRule).check(Schema.isMaxLength(256).annotate({ "expected": "a value with a length of at most 256" }))),
1030
+ "upstream": Schema.optionalKey(Schema.Literals([
1031
+ "direct",
1032
+ "proxy",
1033
+ "tunnel"
1034
+ ]).annotate({ "description": "Legacy single-upstream shape; use `upstreams` and `rules`." })),
1035
+ "url": Schema.optionalKey(Schema.String.annotate({ "description": "Legacy upstream proxy URL; use `upstreams` and `rules`." })),
1036
+ "tunnel": Schema.optionalKey(ProxyTunnelConfig),
1037
+ "bypass": Schema.optionalKey(Schema.String.annotate({ "description": "Legacy hosts to send direct; use `upstreams` and `rules`." })),
1038
+ "drain": Schema.optionalKey(Schema.Boolean.annotate({
1039
+ "description": "Reset live tunnel streams instead of letting them drain. New connections use the new rules either way.",
1040
+ "examples": [false]
1041
+ }))
1042
+ }).annotate({
1043
+ "description": "Replacement session egress proxy configuration. Fields other than `drain` are as in `ProxyConfig`.",
1044
+ "identifier": "UpdateProxyConfig"
910
1045
  });
911
1046
  const InitialCacheStorageCache = Schema.Struct({
912
1047
  "name": Schema.String,
@@ -925,14 +1060,14 @@ const SnapshotPage = Schema.Struct({
925
1060
  });
926
1061
  const InitialBrowserControlState = Schema.Struct({
927
1062
  "locator": InitialBrowserElementLocator,
928
- "value": Schema.String,
1063
+ "value": SensitiveString,
929
1064
  "checked": Schema.optionalKey(Schema.Boolean),
930
1065
  "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
1066
  "selection": Schema.optionalKey(InitialBrowserControlSelection)
932
1067
  }).annotate({ "identifier": "InitialBrowserControlState" });
933
1068
  const InitialBrowserContentEditableState = Schema.Struct({
934
1069
  "locator": InitialBrowserElementLocator,
935
- "html": Schema.String
1070
+ "html": SensitiveString
936
1071
  }).annotate({ "identifier": "InitialBrowserContentEditableState" });
937
1072
  const InitialBrowserElementScrollPosition = Schema.Struct({
938
1073
  "locator": InitialBrowserElementLocator,
@@ -968,7 +1103,7 @@ const TokenPage = Schema.Struct({
968
1103
  });
969
1104
  const CreateTokenResponse = Schema.Struct({
970
1105
  "token": Token,
971
- "rawToken": Schema.String.annotate({
1106
+ "rawToken": Schema.suspend(() => SensitiveString).annotate({
972
1107
  "description": "One-time Aperture API bearer token. Store it immediately; later reads return only token metadata.",
973
1108
  "examples": ["apt_019f6cf0000070008000000000000002_REDACTED"]
974
1109
  })
@@ -976,6 +1111,84 @@ const CreateTokenResponse = Schema.Struct({
976
1111
  "description": "Created token metadata and its one-time bearer secret.",
977
1112
  "identifier": "CreateTokenResponse"
978
1113
  });
1114
+ const Session = Schema.Struct({
1115
+ "id": Schema.suspend(() => UUIDv7).annotate({ "description": "Session identifier." }),
1116
+ "tenantId": Schema.suspend(() => UUIDv7).annotate({ "description": "Tenant that owns the session." }),
1117
+ "baseSnapshotName": Schema.optionalKey(Schema.String.annotate({
1118
+ "description": "Snapshot name used as the session base. Omitted for a blank session.",
1119
+ "examples": ["signed-in-base"]
1120
+ })),
1121
+ "label": Schema.optionalKey(Schema.String.annotate({
1122
+ "description": "Optional operator-facing session label.",
1123
+ "examples": ["checkout smoke test"]
1124
+ })),
1125
+ "status": SessionStatus,
1126
+ "browserChannel": Schema.optionalKey(Schema.String.annotate({
1127
+ "description": "Browser channel used to create and reopen the session.",
1128
+ "examples": ["chromium"]
1129
+ })),
1130
+ "media": SessionMedia,
1131
+ "createdAt": Schema.String.annotate({
1132
+ "description": "Time the session record was created.",
1133
+ "examples": ["2026-07-17T12:00:00Z"],
1134
+ "format": "date-time"
1135
+ }),
1136
+ "startedAt": Schema.optionalKey(Schema.String.annotate({
1137
+ "description": "Most recent successful browser start time. Omitted before startup succeeds.",
1138
+ "examples": ["2026-07-17T12:00:03Z"],
1139
+ "format": "date-time"
1140
+ })),
1141
+ "stoppedAt": Schema.optionalKey(Schema.String.annotate({
1142
+ "description": "Most recent browser stop time. Omitted while no stop has occurred.",
1143
+ "examples": ["2026-07-17T13:00:00Z"],
1144
+ "format": "date-time"
1145
+ })),
1146
+ "deletedAt": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({
1147
+ "description": "Soft-deletion time, or `null` for a session that has not been deleted.",
1148
+ "examples": [null],
1149
+ "format": "date-time"
1150
+ })),
1151
+ "expiresAt": Schema.String.annotate({
1152
+ "description": "Retention deadline after which the session and its overlay may be purged. This is not token expiry.",
1153
+ "examples": ["2026-07-24T12:00:00Z"],
1154
+ "format": "date-time"
1155
+ }),
1156
+ "lastConnectedAt": Schema.optionalKey(Schema.String.annotate({
1157
+ "description": "Most recent routed client activity time. Omitted until a client connects.",
1158
+ "examples": ["2026-07-17T12:30:00Z"],
1159
+ "format": "date-time"
1160
+ })),
1161
+ "suspendedAt": Schema.optionalKey(Schema.String.annotate({
1162
+ "description": "Most recent suspension time. Omitted unless the session is suspended.",
1163
+ "examples": ["2026-07-17T13:00:00Z"],
1164
+ "format": "date-time"
1165
+ })),
1166
+ "tags": Schema.optionalKey(Schema.suspend(() => StringMap).annotate({ "description": "Session metadata tags. Omitted when no tags are set." })),
1167
+ "cdpUrl": Schema.optionalKey(Schema.String.annotate({
1168
+ "description": "Authenticated Chrome DevTools endpoint. Omitted when the session is not currently routable. Use it with `sessionToken`.",
1169
+ "examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
1170
+ "format": "uri"
1171
+ })),
1172
+ "sessionToken": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
1173
+ "description": "Session access secret returned when live access credentials are available. Rotation invalidates the previous token immediately.",
1174
+ "examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
1175
+ })),
1176
+ "collaboration": Schema.optionalKey(SessionCollaborationCapabilities),
1177
+ "thumbnail": Schema.optionalKey(SessionThumbnail),
1178
+ "proxy": Schema.optionalKey(SessionProxy)
1179
+ }).annotate({
1180
+ "description": "Browser session state, retention metadata, tags, and currently available access credentials.",
1181
+ "identifier": "Session"
1182
+ });
1183
+ const InitialBrowserDocumentSelection = Schema.Struct({
1184
+ "anchor": InitialBrowserSelectionEndpoint,
1185
+ "focus": InitialBrowserSelectionEndpoint
1186
+ }).annotate({ "identifier": "InitialBrowserDocumentSelection" });
1187
+ const InitialIndexedDBDatabase = Schema.Struct({
1188
+ "name": Schema.String,
1189
+ "version": Schema.Number.check(Schema.isInt().annotate({ "expected": "an integer" })).check(Schema.isGreaterThanOrEqualTo(1).annotate({ "expected": "a value greater than or equal to 1" })),
1190
+ "objectStores": Schema.Array(InitialIndexedDBObjectStore)
1191
+ }).annotate({ "identifier": "InitialIndexedDBDatabase" });
979
1192
  const SessionPage = Schema.Struct({
980
1193
  "data": Schema.Array(Session),
981
1194
  "meta": PageMeta
@@ -990,7 +1203,7 @@ const CreateSessionResult = Schema.Struct({
990
1203
  "examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
991
1204
  "format": "uri"
992
1205
  }),
993
- "sessionToken": Schema.String.annotate({
1206
+ "sessionToken": Schema.suspend(() => SensitiveString).annotate({
994
1207
  "description": "Initial session access secret. Store it immediately.",
995
1208
  "examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
996
1209
  })
@@ -1009,7 +1222,7 @@ const SessionMutation = Schema.Struct({
1009
1222
  "examples": ["https://aperture.example.com/cdp/019f6cf0-0000-7000-8000-000000000010"],
1010
1223
  "format": "uri"
1011
1224
  })),
1012
- "sessionToken": Schema.optionalKey(Schema.String.annotate({
1225
+ "sessionToken": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({
1013
1226
  "description": "Current raw session access secret. Omitted by operations that do not expose or replace credentials.",
1014
1227
  "examples": ["aps_019f6cf0000070008000000000000010_REDACTED"]
1015
1228
  }))
@@ -1017,19 +1230,10 @@ const SessionMutation = Schema.Struct({
1017
1230
  "description": "Updated session and operation-specific live access credentials when available.",
1018
1231
  "identifier": "SessionMutation"
1019
1232
  });
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
1233
  const InitialBrowserDocumentState = Schema.Struct({
1030
1234
  "version": Schema.Literal(1),
1031
- "windowName": Schema.optionalKey(Schema.String),
1032
- "historyState": Schema.optionalKey(Schema.String.annotate({ "description": "JSON-encoded structured-clone history state." })),
1235
+ "windowName": Schema.optionalKey(SensitiveString),
1236
+ "historyState": Schema.optionalKey(Schema.suspend(() => SensitiveString).annotate({ "description": "JSON-encoded structured-clone history state." })),
1033
1237
  "controls": Schema.Array(InitialBrowserControlState).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
1034
1238
  "contentEditables": Schema.Array(InitialBrowserContentEditableState).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
1035
1239
  "scrollPositions": Schema.Array(InitialBrowserElementScrollPosition).check(Schema.isMaxLength(1e4).annotate({ "expected": "a value with a length of at most 10000" })),
@@ -1043,8 +1247,8 @@ const InitialStorageOrigin = Schema.Struct({
1043
1247
  "origin": Schema.String.annotate({
1044
1248
  "examples": ["https://example.com"],
1045
1249
  "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" }))),
1250
+ }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/[^/]+$", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/[^/]+$" })),
1251
+ "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
1252
  "localStorage": Schema.Array(BrowserStorageEntry),
1049
1253
  "indexedDB": Schema.optionalKey(Schema.Array(InitialIndexedDBDatabase)),
1050
1254
  "cacheStorage": Schema.optionalKey(Schema.Array(InitialCacheStorageCache)),
@@ -1058,7 +1262,7 @@ const InitialBrowserTarget = Schema.Struct({
1058
1262
  "description": "Absolute HTTP or HTTPS URL without embedded credentials.",
1059
1263
  "examples": ["https://example.com/account"],
1060
1264
  "format": "uri"
1061
- }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/" })),
1265
+ }).check(Schema.isPattern(/* @__PURE__ */ new RegExp("^https?:\\/\\/", "u")).annotate({ "expected": "a string matching the RegExp ^https?:\\/\\/" })),
1062
1266
  "sessionStorage": Schema.optionalKey(Schema.Array(InitialTargetStorageOrigin).annotate({ "description": "Per-origin session storage installed in target frames before page scripts execute." })),
1063
1267
  "scroll": Schema.optionalKey(InitialBrowserScrollPosition),
1064
1268
  "documentState": Schema.optionalKey(InitialBrowserDocumentState),
@@ -1133,7 +1337,8 @@ const ListTenantsParams = Schema.Struct({
1133
1337
  "deleted",
1134
1338
  "all"
1135
1339
  ]).annotate({ "default": "active" })),
1136
- "includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false }))
1340
+ "includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
1341
+ "query": Schema.optionalKey(Schema.String)
1137
1342
  });
1138
1343
  const ListTenants200 = TenantPage;
1139
1344
  const ListTenantsdefault = Error;
@@ -1240,6 +1445,7 @@ const ListSessionsParams = Schema.Struct({
1240
1445
  "cursor": Schema.optionalKey(Schema.String),
1241
1446
  "includeDeleted": Schema.optionalKey(Schema.Boolean.annotate({ "default": false })),
1242
1447
  "status": Schema.optionalKey(SessionStatus),
1448
+ "query": Schema.optionalKey(Schema.String),
1243
1449
  "tagKey": Schema.optionalKey(Schema.Array(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })))),
1244
1450
  "tagValue": Schema.optionalKey(Schema.Array(Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })))),
1245
1451
  "tagOperator": Schema.optionalKey(Schema.Array(Schema.Literals([
@@ -1273,7 +1479,7 @@ const ReplaceSessionTagsRequestJson = ReplaceTagsInput;
1273
1479
  const ReplaceSessionTags200 = SessionMutation;
1274
1480
  const ReplaceSessionTagsdefault = Error;
1275
1481
  const UpdateSessionProxyParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1276
- const UpdateSessionProxyRequestJson = UpdateProxyAssignment;
1482
+ const UpdateSessionProxyRequestJson = UpdateProxyConfig;
1277
1483
  const UpdateSessionProxy200 = SessionMutation;
1278
1484
  const UpdateSessionProxydefault = Error;
1279
1485
  const SuspendSessionParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
@@ -1295,6 +1501,14 @@ const SetSessionCursorParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.op
1295
1501
  const SetSessionCursorRequestJson = CursorVisibility;
1296
1502
  const SetSessionCursor200 = CursorVisibility;
1297
1503
  const SetSessionCursordefault = Error;
1504
+ const GetSessionThumbnailParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1505
+ const GetSessionThumbnaildefault = Error;
1506
+ const GetSessionTargetThumbnailParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1507
+ const GetSessionTargetThumbnaildefault = Error;
1508
+ const ExportSessionStorageStateParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1509
+ const ExportSessionStorageStateRequestJson = ExportSessionStorageStateInput;
1510
+ const ExportSessionStorageState200 = InitialBrowserStorageState;
1511
+ const ExportSessionStorageStatedefault = Error;
1298
1512
  const ListSessionRecordingsParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1299
1513
  const ListSessionRecordings200 = Schema.Array(Recording);
1300
1514
  const ListSessionRecordingsdefault = Error;
@@ -1309,9 +1523,42 @@ const RetargetSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": S
1309
1523
  const RetargetSessionRecordingRequestJson = RetargetSessionRecordingInput;
1310
1524
  const RetargetSessionRecording200 = Recording;
1311
1525
  const RetargetSessionRecordingdefault = Error;
1526
+ const CaptionSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1527
+ const CaptionSessionRecordingRequestJson = RecordingCaptionInput;
1528
+ const CaptionSessionRecordingdefault = Error;
1529
+ const FocusSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1530
+ const FocusSessionRecordingRequestJson = RecordingFocusInput;
1531
+ const FocusSessionRecordingdefault = Error;
1532
+ const AttentionSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1533
+ const AttentionSessionRecordingRequestJson = RecordingAttentionInput;
1534
+ const AttentionSessionRecordingdefault = Error;
1312
1535
  const StopSessionRecordingParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1313
- const StopSessionRecording200 = SessionFile;
1536
+ const StopSessionRecording200 = Recording;
1314
1537
  const StopSessionRecordingdefault = Error;
1538
+ const ListSessionFilesParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1539
+ const ListSessionFiles200 = Schema.Array(SessionFileEntry);
1540
+ const ListSessionFilesdefault = Error;
1541
+ const UploadSessionFilesParams = Schema.Struct({
1542
+ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7),
1543
+ "directory": Schema.optionalKey(Schema.String.annotate({ "default": "uploads" }))
1544
+ });
1545
+ const UploadSessionFilesRequestFormData = Schema.Struct({ "files": Schema.optionalKey(Schema.Array(__ClientMultipartFile)) });
1546
+ const UploadSessionFiles201 = Schema.Struct({ "files": Schema.Array(SessionFile) }).annotate({ "description": "Files stored by this request, in request order." });
1547
+ const UploadSessionFilesdefault = Error;
1548
+ const DeleteSessionFileParams = Schema.Struct({
1549
+ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7),
1550
+ "relativePath": Schema.String.check(Schema.isMinLength(1).annotate({ "expected": "a value with a length of at least 1" })),
1551
+ "recursive": Schema.optionalKey(Schema.Boolean.annotate({ "default": false }))
1552
+ });
1553
+ const DeleteSessionFiledefault = Error;
1554
+ const MoveSessionFileParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1555
+ const MoveSessionFileRequestJson = MoveSessionFileInput;
1556
+ const MoveSessionFile200 = SessionFileEntry;
1557
+ const MoveSessionFiledefault = Error;
1558
+ const CreateSessionDirectoryParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1559
+ const CreateSessionDirectoryRequestJson = CreateSessionDirectoryInput;
1560
+ const CreateSessionDirectory201 = SessionDirectory;
1561
+ const CreateSessionDirectorydefault = Error;
1315
1562
  const CreateSessionFileDownloadURLParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1316
1563
  const CreateSessionFileDownloadURLRequestJson = SessionFileDownloadURLInput;
1317
1564
  const CreateSessionFileDownloadURL200 = SessionFileDownloadURL;
@@ -1365,6 +1612,14 @@ const ListEventsParams = Schema.Struct({
1365
1612
  });
1366
1613
  const ListEvents200 = EventPage;
1367
1614
  const ListEventsdefault = Error;
1615
+ const UploadLiveSessionFilesParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1616
+ const UploadLiveSessionFilesRequestFormData = Schema.Struct({ "files": Schema.optionalKey(Schema.Array(__ClientMultipartFile)) });
1617
+ const UploadLiveSessionFiles201 = Schema.Struct({ "files": Schema.Array(SessionFile) }).annotate({ "description": "Files stored by this request, in request order." });
1618
+ const UploadLiveSessionFilesdefault = LiveSessionFailure;
1619
+ const SetSessionViewportParams = Schema.Struct({ "X-Aperture-Tenant-Id": Schema.optionalKey(UUIDv7) });
1620
+ const SetSessionViewportRequestJson = SetViewportInput;
1621
+ const SetSessionViewport200 = TargetViewport;
1622
+ const SetSessionViewportdefault = LiveSessionFailure;
1368
1623
  const make = (httpClient, options = {}) => {
1369
1624
  const unexpectedStatus = (response) => Effect.flatMap(Effect.orElseSucceed(response.json, () => "Unexpected status code"), (description) => Effect.fail(new HttpClientError.HttpClientError({ reason: new HttpClientError.StatusCodeError({
1370
1625
  request: response.request,
@@ -1392,6 +1647,9 @@ const make = (httpClient, options = {}) => {
1392
1647
  if (path.split("/").some((segment) => /^(?:\.|%2e){1,2}$/i.test(segment))) return fail("Request paths cannot contain dot segments");
1393
1648
  return Effect.succeed(method(path));
1394
1649
  });
1650
+ const executeStreamRequest = (request) => Effect.suspend(() => options.transformClient ? Effect.flatMap(options.transformClient(httpClient), (client) => HttpClient.filterStatusOk(client).execute(request)) : HttpClient.filterStatusOk(httpClient).execute(request));
1651
+ const decodeBinary = (response) => Effect.map(response.arrayBuffer, (buffer) => new Uint8Array(buffer));
1652
+ const binaryRequest = (request) => executeStreamRequest(request).pipe(Effect.map((response) => response.stream), Stream.unwrap);
1395
1653
  const decodeSuccess = (schema) => (response) => HttpClientResponse.schemaBodyJson(schema)(response);
1396
1654
  return {
1397
1655
  httpClient,
@@ -1411,7 +1669,8 @@ const make = (httpClient, options = {}) => {
1411
1669
  "limit": options?.params?.["limit"],
1412
1670
  "cursor": options?.params?.["cursor"],
1413
1671
  "deleted": options?.params?.["deleted"],
1414
- "includeDeleted": options?.params?.["includeDeleted"]
1672
+ "includeDeleted": options?.params?.["includeDeleted"],
1673
+ "query": options?.params?.["query"]
1415
1674
  }), withResponse(options?.config)(HttpClientResponse.matchStatus({
1416
1675
  "2xx": decodeSuccess(ListTenants200),
1417
1676
  orElse: unexpectedStatus
@@ -1548,6 +1807,7 @@ const make = (httpClient, options = {}) => {
1548
1807
  "cursor": options?.params?.["cursor"],
1549
1808
  "includeDeleted": options?.params?.["includeDeleted"],
1550
1809
  "status": options?.params?.["status"],
1810
+ "query": options?.params?.["query"],
1551
1811
  "tagKey": options?.params?.["tagKey"],
1552
1812
  "tagValue": options?.params?.["tagValue"],
1553
1813
  "tagOperator": options?.params?.["tagOperator"]
@@ -1603,6 +1863,22 @@ const make = (httpClient, options = {}) => {
1603
1863
  "2xx": decodeSuccess(SetSessionCursor200),
1604
1864
  orElse: unexpectedStatus
1605
1865
  }))))),
1866
+ "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({
1867
+ "2xx": decodeSuccess(GetSessionThumbnaildefault),
1868
+ "200": decodeBinary,
1869
+ orElse: unexpectedStatus
1870
+ }))))),
1871
+ "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)))),
1872
+ "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({
1873
+ "2xx": decodeSuccess(GetSessionTargetThumbnaildefault),
1874
+ "200": decodeBinary,
1875
+ orElse: unexpectedStatus
1876
+ }))))),
1877
+ "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)))),
1878
+ "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({
1879
+ "2xx": decodeSuccess(ExportSessionStorageState200),
1880
+ orElse: unexpectedStatus
1881
+ }))))),
1606
1882
  "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
1883
  "2xx": decodeSuccess(ListSessionRecordings200),
1608
1884
  orElse: unexpectedStatus
@@ -1619,10 +1895,49 @@ const make = (httpClient, options = {}) => {
1619
1895
  "2xx": decodeSuccess(RetargetSessionRecording200),
1620
1896
  orElse: unexpectedStatus
1621
1897
  }))))),
1898
+ "captionSessionRecording": (sessionId, recordingId, options) => __makePathRequest(HttpClientRequest.post, [sessionId, recordingId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/recordings/" + __encodePathParam(recordingId) + "/caption").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({
1899
+ "2xx": decodeSuccess(CaptionSessionRecordingdefault),
1900
+ "204": () => Effect.void,
1901
+ orElse: unexpectedStatus
1902
+ }))))),
1903
+ "focusSessionRecording": (sessionId, recordingId, options) => __makePathRequest(HttpClientRequest.post, [sessionId, recordingId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/recordings/" + __encodePathParam(recordingId) + "/focus").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({
1904
+ "2xx": decodeSuccess(FocusSessionRecordingdefault),
1905
+ "204": () => Effect.void,
1906
+ orElse: unexpectedStatus
1907
+ }))))),
1908
+ "attentionSessionRecording": (sessionId, recordingId, options) => __makePathRequest(HttpClientRequest.post, [sessionId, recordingId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/recordings/" + __encodePathParam(recordingId) + "/attention").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({
1909
+ "2xx": decodeSuccess(AttentionSessionRecordingdefault),
1910
+ "204": () => Effect.void,
1911
+ orElse: unexpectedStatus
1912
+ }))))),
1622
1913
  "stopSessionRecording": (sessionId, recordingId, options) => __makePathRequest(HttpClientRequest.post, [sessionId, recordingId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/recordings/" + __encodePathParam(recordingId) + "/stop").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({
1623
1914
  "2xx": decodeSuccess(StopSessionRecording200),
1624
1915
  orElse: unexpectedStatus
1625
1916
  }))))),
1917
+ "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({
1918
+ "2xx": decodeSuccess(ListSessionFiles200),
1919
+ orElse: unexpectedStatus
1920
+ }))))),
1921
+ "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({
1922
+ "2xx": decodeSuccess(UploadSessionFiles201),
1923
+ orElse: unexpectedStatus
1924
+ }))))),
1925
+ "deleteSessionFile": (sessionId, options) => __makePathRequest(HttpClientRequest.delete, [sessionId], () => "/api/sessions/" + __encodePathParam(sessionId) + "/files").pipe(Effect.flatMap((request) => request.pipe(HttpClientRequest.setUrlParams({
1926
+ "relativePath": options.params["relativePath"],
1927
+ "recursive": options.params["recursive"]
1928
+ }), HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options.params["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options.config)(HttpClientResponse.matchStatus({
1929
+ "2xx": decodeSuccess(DeleteSessionFiledefault),
1930
+ "204": () => Effect.void,
1931
+ orElse: unexpectedStatus
1932
+ }))))),
1933
+ "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({
1934
+ "2xx": decodeSuccess(MoveSessionFile200),
1935
+ orElse: unexpectedStatus
1936
+ }))))),
1937
+ "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({
1938
+ "2xx": decodeSuccess(CreateSessionDirectory201),
1939
+ orElse: unexpectedStatus
1940
+ }))))),
1626
1941
  "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
1942
  "2xx": decodeSuccess(CreateSessionFileDownloadURL200),
1628
1943
  orElse: unexpectedStatus
@@ -1668,7 +1983,15 @@ const make = (httpClient, options = {}) => {
1668
1983
  }), HttpClientRequest.setHeaders({ "X-Aperture-Tenant-Id": options?.params?.["X-Aperture-Tenant-Id"] ?? void 0 }), withResponse(options?.config)(HttpClientResponse.matchStatus({
1669
1984
  "2xx": decodeSuccess(ListEvents200),
1670
1985
  orElse: unexpectedStatus
1671
- })))
1986
+ }))),
1987
+ "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({
1988
+ "2xx": decodeSuccess(UploadLiveSessionFiles201),
1989
+ orElse: unexpectedStatus
1990
+ }))))),
1991
+ "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({
1992
+ "2xx": decodeSuccess(SetSessionViewport200),
1993
+ orElse: unexpectedStatus
1994
+ })))))
1672
1995
  };
1673
1996
  };
1674
1997
  var ApertureApiErrorImpl = class extends Data.Error {};
@@ -1679,6 +2002,6 @@ const ApertureApiError = (tag, cause, response) => new ApertureApiErrorImpl({
1679
2002
  request: response.request
1680
2003
  });
1681
2004
  //#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, UpdateProxyAssignment, UpdateSelectedTenant200, UpdateSelectedTenantRequestJson, UpdateSelectedTenantdefault, UpdateSessionProxy200, UpdateSessionProxyParams, UpdateSessionProxyRequestJson, UpdateSessionProxydefault, UpdateSnapshot200, UpdateSnapshotInput, UpdateSnapshotParams, UpdateSnapshotRequestJson, UpdateSnapshotdefault, UpdateTenant200, UpdateTenantRequestJson, UpdateTenantdefault, UpdateUser200, UpdateUserRequestJson, UpdateUserdefault, UpsertTenantMembership200, UpsertTenantMembershipRequestJson, UpsertTenantMembershipdefault, User, UserInput, UserInvitation, UserPage, make };
2005
+ export { ApertureApiError, AttentionSessionRecordingParams, AttentionSessionRecordingRequestJson, AttentionSessionRecordingdefault, AuditEvent, AuditEventPage, AuthMe, AuthorityType, BrowserChannel, BrowserChannels, BrowserConfig, BrowserCookieSameSite, BrowserStorageEntry, CaptionSessionRecordingParams, CaptionSessionRecordingRequestJson, CaptionSessionRecordingdefault, 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, FocusSessionRecordingParams, FocusSessionRecordingRequestJson, FocusSessionRecordingdefault, 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, RecordingAttentionInput, RecordingCaptionInput, RecordingEditError, RecordingFocusInput, RecordingPoint, RecordingRect, 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
2006
 
1684
2007
  //# sourceMappingURL=index.js.map