effect-browserbase 0.2.0-beta.6 → 0.2.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -21
- package/dist/Account.mjs +3 -3
- package/dist/{Acquisition-Ca4EE-Fg.mjs → Acquisition-BOABu_qJ.mjs} +21 -12
- package/dist/Acquisition-BOABu_qJ.mjs.map +1 -0
- package/dist/Agents.mjs +25 -25
- package/dist/Agents.mjs.map +1 -1
- package/dist/Allocation.mjs +1 -1
- package/dist/{Browser-BPcF550A.mjs → Browser-ByrWJ0ss.mjs} +21 -17
- package/dist/Browser-ByrWJ0ss.mjs.map +1 -0
- package/dist/Browser.d.mts +11 -9
- package/dist/Browser.mjs +1 -1
- package/dist/Certificates.mjs +9 -9
- package/dist/Certificates.mjs.map +1 -1
- package/dist/{Client-4RMKIpL2.mjs → Client-BEC4Q8ZS.mjs} +154 -14
- package/dist/Client-BEC4Q8ZS.mjs.map +1 -0
- package/dist/Client.mjs +1 -1
- package/dist/ContextCoordination.mjs +9 -8
- package/dist/ContextCoordination.mjs.map +1 -1
- package/dist/Contexts.mjs +7 -7
- package/dist/Contexts.mjs.map +1 -1
- package/dist/Downloads.mjs +10 -10
- package/dist/Downloads.mjs.map +1 -1
- package/dist/{Extensions-Dg3jHOf0.mjs → Extensions-BTUn9zhK.mjs} +8 -8
- package/dist/Extensions-BTUn9zhK.mjs.map +1 -0
- package/dist/Extensions.mjs +1 -1
- package/dist/Functions.mjs +27 -27
- package/dist/Functions.mjs.map +1 -1
- package/dist/PageFetch.mjs +4 -4
- package/dist/PageFetch.mjs.map +1 -1
- package/dist/Projects.mjs +5 -5
- package/dist/Projects.mjs.map +1 -1
- package/dist/Recordings.mjs +42 -27
- package/dist/Recordings.mjs.map +1 -1
- package/dist/Replays.mjs +6 -6
- package/dist/Replays.mjs.map +1 -1
- package/dist/{Resource-DBksC4zB.mjs → Resource-J7Kkk5mu.mjs} +7 -3
- package/dist/Resource-J7Kkk5mu.mjs.map +1 -0
- package/dist/Search.mjs +4 -4
- package/dist/Search.mjs.map +1 -1
- package/dist/{Sessions-BUoyPcPJ.mjs → Sessions-D2H5m6rF.mjs} +15 -15
- package/dist/Sessions-D2H5m6rF.mjs.map +1 -0
- package/dist/Sessions.mjs +1 -1
- package/dist/Testing.mjs +1 -1
- package/dist/Uploads.mjs +4 -4
- package/dist/Uploads.mjs.map +1 -1
- package/dist/Webhooks.mjs +14 -14
- package/dist/Webhooks.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/Acquisition-Ca4EE-Fg.mjs.map +0 -1
- package/dist/Browser-BPcF550A.mjs.map +0 -1
- package/dist/Client-4RMKIpL2.mjs.map +0 -1
- package/dist/Extensions-Dg3jHOf0.mjs.map +0 -1
- package/dist/Resource-DBksC4zB.mjs.map +0 -1
- package/dist/Sessions-BUoyPcPJ.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Extensions-BTUn9zhK.mjs","names":["Trace.span"],"sources":["../src/internal/extension/Archive.ts","../src/Extensions.ts"],"sourcesContent":["/**\n * A bounded, allocation-free inspection of an extension ZIP: enough to prove a root\n * `manifest.json` and reject traversal before an upload, never an extractor. No entry is\n * decompressed and no path is written; the provider remains the loader of record.\n */\nexport interface ArchiveFacts {\n readonly entries: number;\n /** Uncompressed size the central directory itself declares, not a measured expansion. */\n readonly declaredBytes: number;\n}\n\nexport type ArchiveRejection =\n | \"signature\"\n | \"malformed\"\n | \"unsupported\"\n | \"name\"\n | \"manifest\"\n | \"limit\";\n\nexport type ArchiveResult =\n | { readonly _tag: \"Accepted\"; readonly facts: ArchiveFacts }\n | { readonly _tag: \"Rejected\"; readonly reason: ArchiveRejection };\n\nconst MAX_ENTRIES = 4096;\nconst MAX_NAME_BYTES = 512;\nconst MAX_DECLARED_BYTES = 512 * 1024 * 1024;\nconst EOCD_SIZE = 22;\nconst LOCAL_HEADER_SIZE = 30;\nconst STORED = 0;\nconst DEFLATED = 8;\n\nconst LOCAL_HEADER = 0x04034b50;\nconst CENTRAL_HEADER = 0x02014b50;\nconst END_OF_CENTRAL_DIRECTORY = 0x06054b50;\n\nconst rejected = (reason: ArchiveRejection): ArchiveResult => ({ _tag: \"Rejected\", reason });\n\nconst control = (name: string): boolean =>\n [...name].some((character) => character < \" \" || character === \"\\x7f\");\n\n/** Any `..` or rooted member would name a file outside the extension directory. */\nconst unsafeName = (name: string): boolean =>\n name.length === 0 ||\n name.startsWith(\"/\") ||\n name.includes(\"\\\\\") ||\n name.includes(\"//\") ||\n /^[A-Za-z]:/.test(name) ||\n control(name) ||\n name.split(\"/\").some((segment) => segment === \".\" || segment === \"..\");\n\nexport const inspectExtensionArchive = (archive: Uint8Array): ArchiveResult => {\n if (archive.byteLength < EOCD_SIZE) return rejected(\"malformed\");\n const view = new DataView(archive.buffer, archive.byteOffset, archive.byteLength);\n const u16 = (offset: number) => view.getUint16(offset, true);\n const u32 = (offset: number) => view.getUint32(offset, true);\n\n if (u32(0) !== LOCAL_HEADER) return rejected(\"signature\");\n\n // The comment is bounded by its own 16-bit length, so the record cannot hide further back.\n const earliest = Math.max(0, archive.byteLength - EOCD_SIZE - 0xffff);\n let end = -1;\n\n for (let offset = archive.byteLength - EOCD_SIZE; offset >= earliest; offset--) {\n if (u32(offset) === END_OF_CENTRAL_DIRECTORY) {\n end = offset;\n break;\n }\n }\n if (end < 0) return rejected(\"malformed\");\n\n const entries = u16(end + 10);\n const directorySize = u32(end + 12);\n const directoryOffset = u32(end + 16);\n const commentLength = u16(end + 20);\n\n if (u16(end + 4) !== 0 || u16(end + 6) !== 0 || u16(end + 8) !== entries)\n return rejected(\"unsupported\");\n if (entries === 0xffff || directorySize === 0xffffffff || directoryOffset === 0xffffffff)\n return rejected(\"unsupported\");\n if (end + EOCD_SIZE + commentLength !== archive.byteLength) return rejected(\"malformed\");\n if (directoryOffset + directorySize > end) return rejected(\"malformed\");\n if (entries > MAX_ENTRIES) return rejected(\"limit\");\n\n const names = new TextDecoder(\"utf-8\", { fatal: true });\n const limit = directoryOffset + directorySize;\n let offset = directoryOffset;\n let declaredBytes = 0;\n let manifest = false;\n\n for (let index = 0; index < entries; index++) {\n if (offset + 46 > limit || u32(offset) !== CENTRAL_HEADER) return rejected(\"malformed\");\n const flags = u16(offset + 8);\n const method = u16(offset + 10);\n const compressed = u32(offset + 20);\n const declared = u32(offset + 24);\n const nameLength = u16(offset + 28);\n const extraLength = u16(offset + 30);\n const entryCommentLength = u16(offset + 32);\n const localOffset = u32(offset + 42);\n\n if (declared === 0xffffffff || compressed === 0xffffffff || localOffset === 0xffffffff)\n return rejected(\"unsupported\");\n // An encrypted or unusually compressed member is not something a browser will load.\n if ((flags & 1) !== 0 || (method !== STORED && method !== DEFLATED))\n return rejected(\"unsupported\");\n if (nameLength === 0 || nameLength > MAX_NAME_BYTES) return rejected(\"name\");\n if (offset + 46 + nameLength + extraLength + entryCommentLength > limit)\n return rejected(\"malformed\");\n if (localOffset >= directoryOffset) return rejected(\"malformed\");\n\n let name: string;\n\n try {\n name = names.decode(archive.subarray(offset + 46, offset + 46 + nameLength));\n } catch {\n return rejected(\"name\");\n }\n if (unsafeName(name)) return rejected(\"name\");\n\n // The directory must agree with the local header it points at: a member that describes\n // itself differently in two places has no single meaning worth uploading.\n if (localOffset + LOCAL_HEADER_SIZE > directoryOffset || u32(localOffset) !== LOCAL_HEADER)\n return rejected(\"malformed\");\n const localNameLength = u16(localOffset + 26);\n const localStart = localOffset + LOCAL_HEADER_SIZE;\n\n if (\n (u16(localOffset + 6) & 1) !== 0 ||\n u16(localOffset + 8) !== method ||\n localNameLength !== nameLength ||\n localStart + localNameLength + u16(localOffset + 28) + compressed > directoryOffset\n )\n return rejected(\"malformed\");\n\n try {\n if (names.decode(archive.subarray(localStart, localStart + localNameLength)) !== name)\n return rejected(\"malformed\");\n } catch {\n return rejected(\"name\");\n }\n if (name === \"manifest.json\") manifest = true;\n declaredBytes += declared;\n if (declaredBytes > MAX_DECLARED_BYTES) return rejected(\"limit\");\n offset += 46 + nameLength + extraLength + entryCommentLength;\n }\n if (offset !== limit) return rejected(\"malformed\");\n if (!manifest) return rejected(\"manifest\");\n\n return { _tag: \"Accepted\", facts: { entries, declaredBytes } };\n};\n","import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { type ClientError, ExtensionError } from \"./Errors.ts\";\nimport { inspectExtensionArchive } from \"./internal/extension/Archive.ts\";\nimport * as Trace from \"./internal/Trace.ts\";\nimport { ExtensionReference, Identifier } from \"./References.ts\";\nimport { SafeFilename } from \"./Transfers.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\n\n/** The provider documents a 100 MB archive; a caller may request less, never more. */\nconst MAX_ARCHIVE_BYTES = 100 * 1024 * 1024;\n\nconst ProviderExtension = Schema.Struct({\n id: Identifier,\n projectId: Identifier,\n fileName: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(1024))),\n createdAt: Schema.optionalKey(Timestamp),\n updatedAt: Schema.optionalKey(Timestamp),\n});\n\n/** Only fields the provider actually returned are reported; absence is never invented. */\nexport class ExtensionMetadata extends Schema.Class<ExtensionMetadata>(\n \"BrowserbaseExtensionMetadata\",\n)({\n reference: ExtensionReference,\n fileName: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(1024))),\n createdAt: Schema.optionalKey(Timestamp),\n updatedAt: Schema.optionalKey(Timestamp),\n}) {}\n\n/** Registration evidence is what this package inspected, not a provider load receipt. */\nexport class ExtensionRegistration extends Schema.Class<ExtensionRegistration>(\n \"BrowserbaseExtensionRegistration\",\n)({\n reference: ExtensionReference,\n archiveBytes: Schema.Natural,\n entries: Schema.Natural,\n declaredBytes: Schema.Natural,\n}) {}\n\nexport interface ExtensionUploadOptions {\n /** Portable basename sent with the part; defaults to `extension.zip`. */\n readonly filename?: string;\n readonly maxBytes?: number;\n readonly timeoutMillis?: number;\n}\n\nconst Upload = Schema.Struct({\n filename: Schema.optionalKey(\n SafeFilename.check(Schema.makeFilter((value) => value.toLowerCase().endsWith(\".zip\"))),\n ),\n maxBytes: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_ARCHIVE_BYTES })),\n ),\n timeoutMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 600_000 })),\n ),\n});\n\nconst fromClient = (operation: ExtensionError[\"operation\"], error: ClientError): ExtensionError =>\n ExtensionError.make({\n operation,\n reason: error.reason,\n ...(error.outcome === undefined ? {} : { outcome: error.outcome }),\n ...(error.status === undefined ? {} : { status: error.status }),\n ...(error.retryAfterMillis === undefined ? {} : { retryAfterMillis: error.retryAfterMillis }),\n });\n\nconst configuration = (operation: ExtensionError[\"operation\"]) =>\n ExtensionError.make({ operation, reason: \"configuration\", outcome: \"undispatched\" });\n\nconst malformed = (operation: ExtensionError[\"operation\"], mutation = false) =>\n ExtensionError.make({\n operation,\n reason: \"malformed\",\n ...(mutation ? { outcome: \"unknown\" as const } : {}),\n });\n\n/**\n * A provisioned extension is a durable project resource selected at launch, never uploaded\n * again on connect. The archive is inspected before transport; loading remains the provider's.\n */\nexport class BrowserbaseExtensions extends Context.Service<\n BrowserbaseExtensions,\n {\n readonly register: (\n archive: Uint8Array,\n options?: ExtensionUploadOptions,\n ) => Effect.Effect<ExtensionRegistration, ExtensionError>;\n readonly retrieve: (\n reference: ExtensionReference,\n ) => Effect.Effect<ExtensionMetadata, ExtensionError>;\n readonly delete: (reference: ExtensionReference) => Effect.Effect<void, ExtensionError>;\n }\n>()(\"effect-browserbase/Extensions\") {\n static readonly layer: Layer.Layer<BrowserbaseExtensions, never, BrowserbaseClient> =\n Layer.effect(\n BrowserbaseExtensions,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const validate = Effect.fnUntraced(function* (\n reference: ExtensionReference,\n operation: ExtensionError[\"operation\"],\n ) {\n const ref = yield* Schema.decodeEffect(ExtensionReference)(reference, {\n onExcessProperty: \"error\",\n }).pipe(Effect.mapError(() => configuration(operation)));\n\n if (ref.projectId !== client.projectId)\n return yield* ExtensionError.make({\n operation,\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n\n return ref;\n });\n\n const register = Effect.fnUntraced(function* (\n archive: Uint8Array,\n options: ExtensionUploadOptions = {},\n ) {\n const value = yield* Schema.decodeEffect(Upload)(options, {\n onExcessProperty: \"error\",\n }).pipe(Effect.mapError(() => configuration(\"extension-register\")));\n\n if (!(archive instanceof Uint8Array)) return yield* configuration(\"extension-register\");\n const maxBytes = value.maxBytes ?? MAX_ARCHIVE_BYTES;\n\n if (archive.byteLength < 1 || archive.byteLength > maxBytes)\n return yield* ExtensionError.make({\n operation: \"extension-archive\",\n reason: \"limit\",\n outcome: \"undispatched\",\n });\n\n // Inspect and send the same immutable bytes: a caller cannot swap the\n // archive between its manifest check and the multipart encoding.\n const owned = new Uint8Array(archive);\n const inspected = inspectExtensionArchive(owned);\n\n if (inspected._tag === \"Rejected\") {\n return yield* ExtensionError.make({\n operation: \"extension-archive\",\n reason:\n inspected.reason === \"limit\"\n ? \"limit\"\n : inspected.reason === \"name\"\n ? \"unsafe-filename\"\n : \"configuration\",\n outcome: \"undispatched\",\n });\n }\n\n const raw = yield* client\n .upload(\n \"/v1/extensions\",\n {\n field: \"file\",\n filename: value.filename ?? \"extension.zip\",\n mediaType: \"application/zip\",\n bytes: owned,\n },\n {\n maxBytes,\n ...(value.timeoutMillis === undefined\n ? {}\n : { timeoutMillis: value.timeoutMillis }),\n },\n )\n .pipe(Effect.mapError((error) => fromClient(\"extension-register\", error)));\n\n const created = yield* Schema.decodeUnknownEffect(ProviderExtension)(raw).pipe(\n Effect.mapError(() => malformed(\"extension-register\", true)),\n );\n\n if (created.projectId !== client.projectId)\n return yield* malformed(\"extension-register\", true);\n\n return ExtensionRegistration.make({\n reference: ExtensionReference.make({\n provider: \"browserbase\",\n projectId: client.projectId,\n extensionId: created.id,\n }),\n archiveBytes: owned.byteLength,\n entries: inspected.facts.entries,\n declaredBytes: inspected.facts.declaredBytes,\n });\n }, Trace.span(\"BrowserbaseExtensions.register\"));\n\n const retrieve = Effect.fnUntraced(function* (reference: ExtensionReference) {\n const ref = yield* validate(reference, \"extension-retrieve\");\n\n const raw = yield* client\n .json(\"GET\", `/v1/extensions/${encodeURIComponent(ref.extensionId)}`)\n .pipe(Effect.mapError((error) => fromClient(\"extension-retrieve\", error)));\n\n const value = yield* Schema.decodeUnknownEffect(ProviderExtension)(raw).pipe(\n Effect.mapError(() => malformed(\"extension-retrieve\")),\n );\n\n if (value.id !== ref.extensionId || value.projectId !== ref.projectId)\n return yield* malformed(\"extension-retrieve\");\n\n return ExtensionMetadata.make({\n reference: ref,\n ...(value.fileName === undefined ? {} : { fileName: value.fileName }),\n ...(value.createdAt === undefined ? {} : { createdAt: value.createdAt }),\n ...(value.updatedAt === undefined ? {} : { updatedAt: value.updatedAt }),\n });\n }, Trace.span(\"BrowserbaseExtensions.retrieve\"));\n\n const remove = Effect.fnUntraced(function* (reference: ExtensionReference) {\n const ref = yield* validate(reference, \"extension-delete\");\n\n yield* client\n .noContent(\"DELETE\", `/v1/extensions/${encodeURIComponent(ref.extensionId)}`)\n .pipe(Effect.mapError((error) => fromClient(\"extension-delete\", error)));\n }, Trace.span(\"BrowserbaseExtensions.delete\"));\n\n return BrowserbaseExtensions.of({ register, retrieve, delete: remove });\n }),\n );\n}\n"],"mappings":"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"}
|
package/dist/Extensions.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ExtensionMetadata, r as ExtensionRegistration, t as BrowserbaseExtensions } from "./Extensions-
|
|
1
|
+
import { n as ExtensionMetadata, r as ExtensionRegistration, t as BrowserbaseExtensions } from "./Extensions-BTUn9zhK.mjs";
|
|
2
2
|
export { BrowserbaseExtensions, ExtensionMetadata, ExtensionRegistration };
|
package/dist/Functions.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ContextReference, Identifier } from "./References.mjs";
|
|
2
2
|
import { PlatformError } from "./Errors.mjs";
|
|
3
|
-
import { t as BrowserbaseClient } from "./Client-
|
|
4
|
-
import { t as resource } from "./Resource-
|
|
3
|
+
import { r as span, t as BrowserbaseClient } from "./Client-BEC4Q8ZS.mjs";
|
|
4
|
+
import { t as resource } from "./Resource-J7Kkk5mu.mjs";
|
|
5
5
|
import { ProxyRule } from "./Launch.mjs";
|
|
6
6
|
import { n as proxy } from "./Launch-cAdE2rrZ.mjs";
|
|
7
7
|
import { r as isContextWriterBusy } from "./ContextWriter-CiEma24z.mjs";
|
|
@@ -184,19 +184,19 @@ var BrowserbaseFunctions = class BrowserbaseFunctions extends Context.Service()(
|
|
|
184
184
|
/** Every record names its project; a foreign or mismatched one is malformed. */
|
|
185
185
|
const owned = (operation, mutation, expected) => (value) => value.projectId === client.projectId && (expected === void 0 || value.id === expected) ? Effect.succeed(value) : Effect.fail(api.malformed(operation, mutation));
|
|
186
186
|
const id = (value, operation) => api.input(Identifier, value, operation);
|
|
187
|
-
const list = Effect.
|
|
187
|
+
const list = Effect.fnUntraced(function* (query = {}) {
|
|
188
188
|
const value = yield* api.input(FunctionPageQuery, query, "function-list");
|
|
189
189
|
const page = yield* api.request("GET", `/v1/functions${api.query(value)}`, DataPage(FunctionMetadata), "function-list");
|
|
190
190
|
return {
|
|
191
191
|
items: yield* Effect.forEach(page.data, owned("function-list", false)),
|
|
192
192
|
total: page.total
|
|
193
193
|
};
|
|
194
|
-
});
|
|
195
|
-
const retrieve = Effect.
|
|
194
|
+
}, span("BrowserbaseFunctions.list"));
|
|
195
|
+
const retrieve = Effect.fnUntraced(function* (functionId) {
|
|
196
196
|
const checked = yield* id(functionId, "function-retrieve");
|
|
197
197
|
return yield* api.request("GET", `/v1/functions/${api.segment(checked)}`, FunctionMetadata, "function-retrieve").pipe(Effect.flatMap(owned("function-retrieve", false, checked)));
|
|
198
|
-
});
|
|
199
|
-
const invoke = Effect.
|
|
198
|
+
}, span("BrowserbaseFunctions.retrieve"));
|
|
199
|
+
const invoke = Effect.fnUntraced(function* (functionId, request = {}) {
|
|
200
200
|
const checked = yield* id(functionId, "function-invoke");
|
|
201
201
|
const value = yield* api.input(FunctionInvokeRequest, request, "function-invoke");
|
|
202
202
|
const session = value.session;
|
|
@@ -231,8 +231,8 @@ var BrowserbaseFunctions = class BrowserbaseFunctions extends Context.Service()(
|
|
|
231
231
|
...value.params === void 0 ? {} : { params: value.params },
|
|
232
232
|
...sessionCreateParams === void 0 ? {} : { sessionCreateParams }
|
|
233
233
|
}).pipe(Effect.flatMap(owned("function-invoke", true)));
|
|
234
|
-
});
|
|
235
|
-
const versions = Effect.
|
|
234
|
+
}, span("BrowserbaseFunctions.invoke"));
|
|
235
|
+
const versions = Effect.fnUntraced(function* (functionId, query = {}) {
|
|
236
236
|
const checked = yield* id(functionId, "function-versions");
|
|
237
237
|
const value = yield* api.input(FunctionPageQuery, query, "function-versions");
|
|
238
238
|
const page = yield* api.request("GET", `/v1/functions/${api.segment(checked)}/versions${api.query(value)}`, ResultsPage(FunctionVersion), "function-versions");
|
|
@@ -240,12 +240,12 @@ var BrowserbaseFunctions = class BrowserbaseFunctions extends Context.Service()(
|
|
|
240
240
|
items: yield* Effect.forEach(page.results, owned("function-versions", false)),
|
|
241
241
|
total: page.total
|
|
242
242
|
};
|
|
243
|
-
});
|
|
244
|
-
const version = Effect.
|
|
243
|
+
}, span("BrowserbaseFunctions.versions"));
|
|
244
|
+
const version = Effect.fnUntraced(function* (versionId) {
|
|
245
245
|
const checked = yield* id(versionId, "function-version");
|
|
246
246
|
return yield* api.request("GET", `/v1/functions/versions/${api.segment(checked)}`, FunctionVersion, "function-version").pipe(Effect.flatMap(owned("function-version", false, checked)));
|
|
247
|
-
});
|
|
248
|
-
const invocations = Effect.
|
|
247
|
+
}, span("BrowserbaseFunctions.version"));
|
|
248
|
+
const invocations = Effect.fnUntraced(function* (versionId, query = {}) {
|
|
249
249
|
const checked = yield* id(versionId, "function-invocations");
|
|
250
250
|
const value = yield* api.input(FunctionStatusQuery, query, "function-invocations");
|
|
251
251
|
const page = yield* api.request("GET", `/v1/functions/versions/${api.segment(checked)}/invocations${api.query(value)}`, ResultsPage(FunctionInvocation), "function-invocations");
|
|
@@ -253,40 +253,40 @@ var BrowserbaseFunctions = class BrowserbaseFunctions extends Context.Service()(
|
|
|
253
253
|
items: yield* Effect.forEach(page.results, owned("function-invocations", false)),
|
|
254
254
|
total: page.total
|
|
255
255
|
};
|
|
256
|
-
});
|
|
257
|
-
const invocation = Effect.
|
|
256
|
+
}, span("BrowserbaseFunctions.invocations"));
|
|
257
|
+
const invocation = Effect.fnUntraced(function* (invocationId) {
|
|
258
258
|
const checked = yield* id(invocationId, "function-invocation");
|
|
259
259
|
return yield* api.request("GET", `/v1/functions/invocations/${api.segment(checked)}`, FunctionInvocation, "function-invocation").pipe(Effect.flatMap(owned("function-invocation", false, checked)));
|
|
260
|
-
});
|
|
260
|
+
}, span("BrowserbaseFunctions.invocation"));
|
|
261
261
|
const logs = (path, operation) => api.request("GET", path, Logs, operation).pipe(Effect.map((value) => ({
|
|
262
262
|
items: value.logs,
|
|
263
263
|
total: value.total
|
|
264
264
|
})));
|
|
265
|
-
const invocationLogs = Effect.
|
|
265
|
+
const invocationLogs = Effect.fnUntraced(function* (invocationId) {
|
|
266
266
|
const checked = yield* id(invocationId, "function-invocation-logs");
|
|
267
267
|
return yield* logs(`/v1/functions/invocations/${api.segment(checked)}/logs`, "function-invocation-logs");
|
|
268
|
-
});
|
|
269
|
-
const builds = Effect.
|
|
268
|
+
}, span("BrowserbaseFunctions.invocationLogs"));
|
|
269
|
+
const builds = Effect.fnUntraced(function* (query = {}) {
|
|
270
270
|
const value = yield* api.input(FunctionStatusQuery, query, "function-builds");
|
|
271
271
|
const page = yield* api.request("GET", `/v1/functions/builds${api.query(value)}`, DataPage(FunctionBuild), "function-builds");
|
|
272
272
|
return {
|
|
273
273
|
items: yield* Effect.forEach(page.data, owned("function-builds", false)),
|
|
274
274
|
total: page.total
|
|
275
275
|
};
|
|
276
|
-
});
|
|
277
|
-
const build = Effect.
|
|
276
|
+
}, span("BrowserbaseFunctions.builds"));
|
|
277
|
+
const build = Effect.fnUntraced(function* (buildId) {
|
|
278
278
|
const checked = yield* id(buildId, "function-build");
|
|
279
279
|
return yield* api.request("GET", `/v1/functions/builds/${api.segment(checked)}`, FunctionBuild, "function-build").pipe(Effect.flatMap(owned("function-build", false, checked)));
|
|
280
|
-
});
|
|
281
|
-
const buildLogs = Effect.
|
|
280
|
+
}, span("BrowserbaseFunctions.build"));
|
|
281
|
+
const buildLogs = Effect.fnUntraced(function* (buildId) {
|
|
282
282
|
const checked = yield* id(buildId, "function-build-logs");
|
|
283
283
|
return yield* logs(`/v1/functions/builds/${api.segment(checked)}/logs`, "function-build-logs");
|
|
284
|
-
});
|
|
285
|
-
const waitForInvocation = Effect.
|
|
284
|
+
}, span("BrowserbaseFunctions.buildLogs"));
|
|
285
|
+
const waitForInvocation = Effect.fnUntraced(function* (invocationId, options) {
|
|
286
286
|
const bounds = yield* api.input(FunctionWaitOptions, options, "function-wait");
|
|
287
287
|
const deadline = (yield* now) + bounds.timeoutMillis;
|
|
288
288
|
for (;;) {
|
|
289
|
-
const current = yield* invocation(invocationId);
|
|
289
|
+
const current = yield* invocation(invocationId).pipe(Effect.withTracerEnabled(false));
|
|
290
290
|
if (current.status === "COMPLETED" || current.status === "FAILED") return current;
|
|
291
291
|
const remaining = deadline - (yield* now);
|
|
292
292
|
if (remaining <= 0) return yield* api.make({
|
|
@@ -295,7 +295,7 @@ var BrowserbaseFunctions = class BrowserbaseFunctions extends Context.Service()(
|
|
|
295
295
|
});
|
|
296
296
|
yield* Effect.sleep(Math.min(bounds.pollIntervalMillis ?? 1e3, remaining));
|
|
297
297
|
}
|
|
298
|
-
});
|
|
298
|
+
}, span("BrowserbaseFunctions.waitForInvocation"));
|
|
299
299
|
return BrowserbaseFunctions.of({
|
|
300
300
|
list,
|
|
301
301
|
retrieve,
|
package/dist/Functions.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Functions.mjs","names":[],"sources":["../src/Functions.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { proxy } from \"./internal/provider/Launch.ts\";\nimport { isContextWriterBusy } from \"./internal/session/ContextWriter.ts\";\nimport { ProxyRule } from \"./Launch.ts\";\nimport { ContextReference, Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst JsonObject = Schema.Record(Schema.String, Schema.Json);\nconst Name = Schema.String.check(Schema.isMaxLength(1024));\nconst Status = Schema.Literals([\"PENDING\", \"RUNNING\", \"COMPLETED\", \"FAILED\"]);\n\nexport type FunctionStatus = typeof Status.Type;\n\nexport class FunctionMetadata extends Schema.Class<FunctionMetadata>(\"BrowserbaseFunctionMetadata\")(\n {\n id: Identifier,\n projectId: Identifier,\n name: Name,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n },\n) {}\n\nexport class FunctionVersion extends Schema.Class<FunctionVersion>(\"BrowserbaseFunctionVersion\")({\n id: Identifier,\n projectId: Identifier,\n functionId: Identifier,\n functionBuildId: Identifier,\n sessionCreateParams: Schema.optionalKey(JsonObject),\n userParamsSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class FunctionBuild extends Schema.Class<FunctionBuild>(\"BrowserbaseFunctionBuild\")({\n id: Identifier,\n projectId: Identifier,\n request: Schema.Struct({\n entrypoint: Name,\n functionNames: Schema.optionalKey(Schema.Array(Name).check(Schema.isMaxLength(1024))),\n }),\n status: Status,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Timestamp,\n endedAt: Schema.optionalKey(Timestamp),\n expiresAt: Timestamp,\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(4096))),\n }),\n ),\n}) {}\n\nexport class FunctionInvocation extends Schema.Class<FunctionInvocation>(\n \"BrowserbaseFunctionInvocation\",\n)({\n id: Identifier,\n projectId: Identifier,\n functionId: Identifier,\n versionId: Identifier,\n sessionId: Identifier,\n region: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(64))),\n params: Schema.optionalKey(JsonObject),\n status: Status,\n results: Schema.optionalKey(Schema.Json),\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(4096))),\n }),\n ),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Timestamp,\n endedAt: Schema.optionalKey(Timestamp),\n expiresAt: Timestamp,\n}) {}\n\nexport class FunctionLogLine extends Schema.Class<FunctionLogLine>(\"BrowserbaseFunctionLogLine\")({\n message: Schema.String.check(Schema.isMaxLength(65_536)),\n timestamp: Schema.Finite,\n}) {}\n\n/** The session a Function invocation runs in; the provider's invoke-time subset. */\nexport const FunctionSessionParams = Schema.Struct({\n /** Seconds, 60–900; the provider defaults to 900. */\n timeout: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 60, maximum: 900 }))),\n extensionId: Schema.optionalKey(Identifier),\n context: Schema.optionalKey(\n Schema.Struct({ reference: ContextReference, persist: Schema.Boolean }),\n ),\n proxies: Schema.optionalKey(\n Schema.Union([Schema.Boolean, Schema.Array(ProxyRule).check(Schema.isMaxLength(64))]),\n ),\n proxySettings: Schema.optionalKey(\n Schema.Struct({\n caCertificates: Schema.optionalKey(\n Schema.Array(Identifier).check(Schema.isMaxLength(64), Schema.isUnique()),\n ),\n }),\n ),\n userMetadata: Schema.optionalKey(\n Schema.Record(Schema.String.check(Schema.isMaxLength(128)), Schema.Json),\n ),\n browserSettings: Schema.optionalKey(\n Schema.Struct({\n viewport: Schema.optionalKey(\n Schema.Struct({\n width: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n ),\n height: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n ),\n }),\n ),\n blockAds: Schema.optionalKey(Schema.Boolean),\n solveCaptchas: Schema.optionalKey(Schema.Boolean),\n recordSession: Schema.optionalKey(Schema.Boolean),\n logSession: Schema.optionalKey(Schema.Boolean),\n verified: Schema.optionalKey(Schema.Boolean),\n captchaImageSelector: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n ),\n captchaInputSelector: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n ),\n os: Schema.optionalKey(Schema.Literals([\"windows\", \"mac\", \"linux\", \"mobile\", \"tablet\"])),\n size: Schema.optionalKey(Schema.Literals([\"small\", \"medium\", \"large\"])),\n enableNativeSelectPolyfill: Schema.optionalKey(Schema.Boolean),\n enablePdfViewer: Schema.optionalKey(Schema.Boolean),\n extensions: Schema.optionalKey(\n Schema.Array(Schema.Literals([\"onepassword\", \"browser-events\"])).check(Schema.isUnique()),\n ),\n allowedDomains: Schema.optionalKey(\n Schema.Array(Schema.NonEmptyString.check(Schema.isMaxLength(1024))).check(\n Schema.isMaxLength(64),\n Schema.isUnique(),\n ),\n ),\n ignoreCertificateErrors: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n});\n\nexport type FunctionSessionParams = typeof FunctionSessionParams.Type;\n\nexport const FunctionInvokeRequest = Schema.Struct({\n params: Schema.optionalKey(JsonObject),\n session: Schema.optionalKey(FunctionSessionParams),\n});\n\nexport type FunctionInvokeRequest = typeof FunctionInvokeRequest.Type;\n\nconst Offset = {\n offset: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 1_000_000 })),\n ),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n};\n\nexport const FunctionPageQuery = Schema.Struct(Offset);\nexport type FunctionPageQuery = typeof FunctionPageQuery.Type;\n\nexport const FunctionStatusQuery = Schema.Struct({ ...Offset, status: Schema.optionalKey(Status) });\nexport type FunctionStatusQuery = typeof FunctionStatusQuery.Type;\n\nexport const FunctionWaitOptions = Schema.Struct({\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 3_600_000 })),\n pollIntervalMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 250, maximum: 60_000 })),\n ),\n});\n\nexport type FunctionWaitOptions = typeof FunctionWaitOptions.Type;\n\nexport interface OffsetPage<A> {\n readonly items: ReadonlyArray<A>;\n readonly total: number;\n}\n\nconst DataPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({ data: Schema.Array(item).check(Schema.isMaxLength(100)), total: Schema.Natural });\n\nconst ResultsPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({\n results: Schema.Array(item).check(Schema.isMaxLength(100)),\n total: Schema.Natural,\n });\n\nconst Logs = Schema.Struct({\n logs: Schema.Array(FunctionLogLine).check(Schema.isMaxLength(100_000)),\n total: Schema.Natural,\n});\n\nconst now = Clock.monotonicTimeNanos.pipe(Effect.map((value) => Number(value) / 1_000_000));\n\n/**\n * Browserbase Functions: deployed code invoked in a provider-allocated session. Deployment\n * happens through Browserbase's CLI; this service reads, invokes and observes. `invoke` is\n * never retried, and a lost reply is `outcome: \"unknown\"`.\n */\nexport class BrowserbaseFunctions extends Context.Service<\n BrowserbaseFunctions,\n {\n readonly list: (\n query?: FunctionPageQuery,\n ) => Effect.Effect<OffsetPage<FunctionMetadata>, PlatformError>;\n readonly retrieve: (functionId: string) => Effect.Effect<FunctionMetadata, PlatformError>;\n readonly invoke: (\n functionId: string,\n request?: FunctionInvokeRequest,\n ) => Effect.Effect<FunctionInvocation, PlatformError>;\n readonly versions: (\n functionId: string,\n query?: FunctionPageQuery,\n ) => Effect.Effect<OffsetPage<FunctionVersion>, PlatformError>;\n readonly version: (versionId: string) => Effect.Effect<FunctionVersion, PlatformError>;\n readonly invocations: (\n versionId: string,\n query?: FunctionStatusQuery,\n ) => Effect.Effect<OffsetPage<FunctionInvocation>, PlatformError>;\n readonly invocation: (invocationId: string) => Effect.Effect<FunctionInvocation, PlatformError>;\n readonly invocationLogs: (\n invocationId: string,\n ) => Effect.Effect<OffsetPage<FunctionLogLine>, PlatformError>;\n readonly builds: (\n query?: FunctionStatusQuery,\n ) => Effect.Effect<OffsetPage<FunctionBuild>, PlatformError>;\n readonly build: (buildId: string) => Effect.Effect<FunctionBuild, PlatformError>;\n readonly buildLogs: (\n buildId: string,\n ) => Effect.Effect<OffsetPage<FunctionLogLine>, PlatformError>;\n /** Polls until the invocation is terminal. Interrupting the wait does not cancel it. */\n readonly waitForInvocation: (\n invocationId: string,\n options: FunctionWaitOptions,\n ) => Effect.Effect<FunctionInvocation, PlatformError>;\n }\n>()(\"effect-browserbase/Functions\") {\n static readonly layer: Layer.Layer<BrowserbaseFunctions, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseFunctions,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const api = resource<PlatformError>(client, (failure) =>\n PlatformError.make({ ...failure, service: \"functions\" }),\n );\n\n /** Every record names its project; a foreign or mismatched one is malformed. */\n const owned =\n <A extends { readonly id: string; readonly projectId: string }>(\n operation: PlatformError[\"operation\"],\n mutation: boolean,\n expected?: string,\n ) =>\n (value: A): Effect.Effect<A, PlatformError> =>\n value.projectId === client.projectId && (expected === undefined || value.id === expected)\n ? Effect.succeed(value)\n : Effect.fail(api.malformed(operation, mutation));\n\n const id = (value: string, operation: PlatformError[\"operation\"]) =>\n api.input(Identifier, value, operation);\n\n const list = Effect.fn(\"BrowserbaseFunctions.list\")(function* (\n query: FunctionPageQuery = {},\n ) {\n const value = yield* api.input(FunctionPageQuery, query, \"function-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions${api.query(value)}`,\n DataPage(FunctionMetadata),\n \"function-list\",\n );\n\n return {\n items: yield* Effect.forEach(page.data, owned(\"function-list\", false)),\n total: page.total,\n };\n });\n\n const retrieve = Effect.fn(\"BrowserbaseFunctions.retrieve\")(function* (functionId: string) {\n const checked = yield* id(functionId, \"function-retrieve\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/${api.segment(checked)}`,\n FunctionMetadata,\n \"function-retrieve\",\n )\n .pipe(Effect.flatMap(owned(\"function-retrieve\", false, checked)));\n });\n\n const invoke = Effect.fn(\"BrowserbaseFunctions.invoke\")(function* (\n functionId: string,\n request: FunctionInvokeRequest = {},\n ) {\n const checked = yield* id(functionId, \"function-invoke\");\n const value = yield* api.input(FunctionInvokeRequest, request, \"function-invoke\");\n const session = value.session;\n const context = session?.context;\n\n if (context !== undefined) {\n if (context.reference.projectId !== client.projectId)\n return yield* api.make({\n operation: \"function-invoke\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n if (context.persist && isContextWriterBusy(context.reference))\n return yield* api.make({\n operation: \"function-invoke\",\n reason: \"active\",\n outcome: \"undispatched\",\n });\n }\n\n const sessionCreateParams: Schema.Json | undefined =\n session === undefined\n ? undefined\n : {\n ...(session.timeout === undefined ? {} : { timeout: session.timeout }),\n ...(session.extensionId === undefined ? {} : { extensionId: session.extensionId }),\n ...(session.proxies === undefined\n ? {}\n : {\n proxies:\n typeof session.proxies === \"boolean\"\n ? session.proxies\n : session.proxies.map(proxy),\n }),\n ...(session.proxySettings === undefined\n ? {}\n : { proxySettings: session.proxySettings }),\n ...(session.userMetadata === undefined\n ? {}\n : { userMetadata: session.userMetadata }),\n ...(session.browserSettings === undefined && context === undefined\n ? {}\n : {\n browserSettings: {\n ...session.browserSettings,\n ...(context === undefined\n ? {}\n : {\n context: {\n id: context.reference.contextId,\n persist: context.persist,\n },\n }),\n },\n }),\n };\n\n return yield* api\n .request(\n \"POST\",\n `/v1/functions/${api.segment(checked)}/invoke`,\n FunctionInvocation,\n \"function-invoke\",\n {\n ...(value.params === undefined ? {} : { params: value.params }),\n ...(sessionCreateParams === undefined ? {} : { sessionCreateParams }),\n },\n )\n .pipe(Effect.flatMap(owned(\"function-invoke\", true)));\n });\n\n const versions = Effect.fn(\"BrowserbaseFunctions.versions\")(function* (\n functionId: string,\n query: FunctionPageQuery = {},\n ) {\n const checked = yield* id(functionId, \"function-versions\");\n const value = yield* api.input(FunctionPageQuery, query, \"function-versions\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/${api.segment(checked)}/versions${api.query(value)}`,\n ResultsPage(FunctionVersion),\n \"function-versions\",\n );\n\n return {\n items: yield* Effect.forEach(page.results, owned(\"function-versions\", false)),\n total: page.total,\n };\n });\n\n const version = Effect.fn(\"BrowserbaseFunctions.version\")(function* (versionId: string) {\n const checked = yield* id(versionId, \"function-version\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/versions/${api.segment(checked)}`,\n FunctionVersion,\n \"function-version\",\n )\n .pipe(Effect.flatMap(owned(\"function-version\", false, checked)));\n });\n\n const invocations = Effect.fn(\"BrowserbaseFunctions.invocations\")(function* (\n versionId: string,\n query: FunctionStatusQuery = {},\n ) {\n const checked = yield* id(versionId, \"function-invocations\");\n const value = yield* api.input(FunctionStatusQuery, query, \"function-invocations\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/versions/${api.segment(checked)}/invocations${api.query(value)}`,\n ResultsPage(FunctionInvocation),\n \"function-invocations\",\n );\n\n return {\n items: yield* Effect.forEach(page.results, owned(\"function-invocations\", false)),\n total: page.total,\n };\n });\n\n const invocation = Effect.fn(\"BrowserbaseFunctions.invocation\")(function* (\n invocationId: string,\n ) {\n const checked = yield* id(invocationId, \"function-invocation\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/invocations/${api.segment(checked)}`,\n FunctionInvocation,\n \"function-invocation\",\n )\n .pipe(Effect.flatMap(owned(\"function-invocation\", false, checked)));\n });\n\n const logs = (path: string, operation: PlatformError[\"operation\"]) =>\n api\n .request(\"GET\", path, Logs, operation)\n .pipe(Effect.map((value) => ({ items: value.logs, total: value.total })));\n\n const invocationLogs = Effect.fn(\"BrowserbaseFunctions.invocationLogs\")(function* (\n invocationId: string,\n ) {\n const checked = yield* id(invocationId, \"function-invocation-logs\");\n\n return yield* logs(\n `/v1/functions/invocations/${api.segment(checked)}/logs`,\n \"function-invocation-logs\",\n );\n });\n\n const builds = Effect.fn(\"BrowserbaseFunctions.builds\")(function* (\n query: FunctionStatusQuery = {},\n ) {\n const value = yield* api.input(FunctionStatusQuery, query, \"function-builds\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/builds${api.query(value)}`,\n DataPage(FunctionBuild),\n \"function-builds\",\n );\n\n return {\n items: yield* Effect.forEach(page.data, owned(\"function-builds\", false)),\n total: page.total,\n };\n });\n\n const build = Effect.fn(\"BrowserbaseFunctions.build\")(function* (buildId: string) {\n const checked = yield* id(buildId, \"function-build\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/builds/${api.segment(checked)}`,\n FunctionBuild,\n \"function-build\",\n )\n .pipe(Effect.flatMap(owned(\"function-build\", false, checked)));\n });\n\n const buildLogs = Effect.fn(\"BrowserbaseFunctions.buildLogs\")(function* (buildId: string) {\n const checked = yield* id(buildId, \"function-build-logs\");\n\n return yield* logs(\n `/v1/functions/builds/${api.segment(checked)}/logs`,\n \"function-build-logs\",\n );\n });\n\n const waitForInvocation = Effect.fn(\"BrowserbaseFunctions.waitForInvocation\")(function* (\n invocationId: string,\n options: FunctionWaitOptions,\n ) {\n const bounds = yield* api.input(FunctionWaitOptions, options, \"function-wait\");\n const deadline = (yield* now) + bounds.timeoutMillis;\n\n for (;;) {\n const current = yield* invocation(invocationId);\n\n if (current.status === \"COMPLETED\" || current.status === \"FAILED\") return current;\n const remaining = deadline - (yield* now);\n\n if (remaining <= 0)\n return yield* api.make({ operation: \"function-wait\", reason: \"timeout\" });\n yield* Effect.sleep(Math.min(bounds.pollIntervalMillis ?? 1_000, remaining));\n }\n });\n\n return BrowserbaseFunctions.of({\n list,\n retrieve,\n invoke,\n versions,\n version,\n invocations,\n invocation,\n invocationLogs,\n builds,\n build,\n buildLogs,\n waitForInvocation,\n });\n }),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Functions.mjs","names":["Trace.span"],"sources":["../src/Functions.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { proxy } from \"./internal/provider/Launch.ts\";\nimport { isContextWriterBusy } from \"./internal/session/ContextWriter.ts\";\nimport * as Trace from \"./internal/Trace.ts\";\nimport { ProxyRule } from \"./Launch.ts\";\nimport { ContextReference, Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst JsonObject = Schema.Record(Schema.String, Schema.Json);\nconst Name = Schema.String.check(Schema.isMaxLength(1024));\nconst Status = Schema.Literals([\"PENDING\", \"RUNNING\", \"COMPLETED\", \"FAILED\"]);\n\nexport type FunctionStatus = typeof Status.Type;\n\nexport class FunctionMetadata extends Schema.Class<FunctionMetadata>(\"BrowserbaseFunctionMetadata\")(\n {\n id: Identifier,\n projectId: Identifier,\n name: Name,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n },\n) {}\n\nexport class FunctionVersion extends Schema.Class<FunctionVersion>(\"BrowserbaseFunctionVersion\")({\n id: Identifier,\n projectId: Identifier,\n functionId: Identifier,\n functionBuildId: Identifier,\n sessionCreateParams: Schema.optionalKey(JsonObject),\n userParamsSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class FunctionBuild extends Schema.Class<FunctionBuild>(\"BrowserbaseFunctionBuild\")({\n id: Identifier,\n projectId: Identifier,\n request: Schema.Struct({\n entrypoint: Name,\n functionNames: Schema.optionalKey(Schema.Array(Name).check(Schema.isMaxLength(1024))),\n }),\n status: Status,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Timestamp,\n endedAt: Schema.optionalKey(Timestamp),\n expiresAt: Timestamp,\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(4096))),\n }),\n ),\n}) {}\n\nexport class FunctionInvocation extends Schema.Class<FunctionInvocation>(\n \"BrowserbaseFunctionInvocation\",\n)({\n id: Identifier,\n projectId: Identifier,\n functionId: Identifier,\n versionId: Identifier,\n sessionId: Identifier,\n region: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(64))),\n params: Schema.optionalKey(JsonObject),\n status: Status,\n results: Schema.optionalKey(Schema.Json),\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(4096))),\n }),\n ),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Timestamp,\n endedAt: Schema.optionalKey(Timestamp),\n expiresAt: Timestamp,\n}) {}\n\nexport class FunctionLogLine extends Schema.Class<FunctionLogLine>(\"BrowserbaseFunctionLogLine\")({\n message: Schema.String.check(Schema.isMaxLength(65_536)),\n timestamp: Schema.Finite,\n}) {}\n\n/** The session a Function invocation runs in; the provider's invoke-time subset. */\nexport const FunctionSessionParams = Schema.Struct({\n /** Seconds, 60–900; the provider defaults to 900. */\n timeout: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 60, maximum: 900 }))),\n extensionId: Schema.optionalKey(Identifier),\n context: Schema.optionalKey(\n Schema.Struct({ reference: ContextReference, persist: Schema.Boolean }),\n ),\n proxies: Schema.optionalKey(\n Schema.Union([Schema.Boolean, Schema.Array(ProxyRule).check(Schema.isMaxLength(64))]),\n ),\n proxySettings: Schema.optionalKey(\n Schema.Struct({\n caCertificates: Schema.optionalKey(\n Schema.Array(Identifier).check(Schema.isMaxLength(64), Schema.isUnique()),\n ),\n }),\n ),\n userMetadata: Schema.optionalKey(\n Schema.Record(Schema.String.check(Schema.isMaxLength(128)), Schema.Json),\n ),\n browserSettings: Schema.optionalKey(\n Schema.Struct({\n viewport: Schema.optionalKey(\n Schema.Struct({\n width: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n ),\n height: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n ),\n }),\n ),\n blockAds: Schema.optionalKey(Schema.Boolean),\n solveCaptchas: Schema.optionalKey(Schema.Boolean),\n recordSession: Schema.optionalKey(Schema.Boolean),\n logSession: Schema.optionalKey(Schema.Boolean),\n verified: Schema.optionalKey(Schema.Boolean),\n captchaImageSelector: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n ),\n captchaInputSelector: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n ),\n os: Schema.optionalKey(Schema.Literals([\"windows\", \"mac\", \"linux\", \"mobile\", \"tablet\"])),\n size: Schema.optionalKey(Schema.Literals([\"small\", \"medium\", \"large\"])),\n enableNativeSelectPolyfill: Schema.optionalKey(Schema.Boolean),\n enablePdfViewer: Schema.optionalKey(Schema.Boolean),\n extensions: Schema.optionalKey(\n Schema.Array(Schema.Literals([\"onepassword\", \"browser-events\"])).check(Schema.isUnique()),\n ),\n allowedDomains: Schema.optionalKey(\n Schema.Array(Schema.NonEmptyString.check(Schema.isMaxLength(1024))).check(\n Schema.isMaxLength(64),\n Schema.isUnique(),\n ),\n ),\n ignoreCertificateErrors: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n});\n\nexport type FunctionSessionParams = typeof FunctionSessionParams.Type;\n\nexport const FunctionInvokeRequest = Schema.Struct({\n params: Schema.optionalKey(JsonObject),\n session: Schema.optionalKey(FunctionSessionParams),\n});\n\nexport type FunctionInvokeRequest = typeof FunctionInvokeRequest.Type;\n\nconst Offset = {\n offset: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 1_000_000 })),\n ),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n};\n\nexport const FunctionPageQuery = Schema.Struct(Offset);\nexport type FunctionPageQuery = typeof FunctionPageQuery.Type;\n\nexport const FunctionStatusQuery = Schema.Struct({ ...Offset, status: Schema.optionalKey(Status) });\nexport type FunctionStatusQuery = typeof FunctionStatusQuery.Type;\n\nexport const FunctionWaitOptions = Schema.Struct({\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 3_600_000 })),\n pollIntervalMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 250, maximum: 60_000 })),\n ),\n});\n\nexport type FunctionWaitOptions = typeof FunctionWaitOptions.Type;\n\nexport interface OffsetPage<A> {\n readonly items: ReadonlyArray<A>;\n readonly total: number;\n}\n\nconst DataPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({ data: Schema.Array(item).check(Schema.isMaxLength(100)), total: Schema.Natural });\n\nconst ResultsPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({\n results: Schema.Array(item).check(Schema.isMaxLength(100)),\n total: Schema.Natural,\n });\n\nconst Logs = Schema.Struct({\n logs: Schema.Array(FunctionLogLine).check(Schema.isMaxLength(100_000)),\n total: Schema.Natural,\n});\n\nconst now = Clock.monotonicTimeNanos.pipe(Effect.map((value) => Number(value) / 1_000_000));\n\n/**\n * Browserbase Functions: deployed code invoked in a provider-allocated session. Deployment\n * happens through Browserbase's CLI; this service reads, invokes and observes. `invoke` is\n * never retried, and a lost reply is `outcome: \"unknown\"`.\n */\nexport class BrowserbaseFunctions extends Context.Service<\n BrowserbaseFunctions,\n {\n readonly list: (\n query?: FunctionPageQuery,\n ) => Effect.Effect<OffsetPage<FunctionMetadata>, PlatformError>;\n readonly retrieve: (functionId: string) => Effect.Effect<FunctionMetadata, PlatformError>;\n readonly invoke: (\n functionId: string,\n request?: FunctionInvokeRequest,\n ) => Effect.Effect<FunctionInvocation, PlatformError>;\n readonly versions: (\n functionId: string,\n query?: FunctionPageQuery,\n ) => Effect.Effect<OffsetPage<FunctionVersion>, PlatformError>;\n readonly version: (versionId: string) => Effect.Effect<FunctionVersion, PlatformError>;\n readonly invocations: (\n versionId: string,\n query?: FunctionStatusQuery,\n ) => Effect.Effect<OffsetPage<FunctionInvocation>, PlatformError>;\n readonly invocation: (invocationId: string) => Effect.Effect<FunctionInvocation, PlatformError>;\n readonly invocationLogs: (\n invocationId: string,\n ) => Effect.Effect<OffsetPage<FunctionLogLine>, PlatformError>;\n readonly builds: (\n query?: FunctionStatusQuery,\n ) => Effect.Effect<OffsetPage<FunctionBuild>, PlatformError>;\n readonly build: (buildId: string) => Effect.Effect<FunctionBuild, PlatformError>;\n readonly buildLogs: (\n buildId: string,\n ) => Effect.Effect<OffsetPage<FunctionLogLine>, PlatformError>;\n /** Polls until the invocation is terminal. Interrupting the wait does not cancel it. */\n readonly waitForInvocation: (\n invocationId: string,\n options: FunctionWaitOptions,\n ) => Effect.Effect<FunctionInvocation, PlatformError>;\n }\n>()(\"effect-browserbase/Functions\") {\n static readonly layer: Layer.Layer<BrowserbaseFunctions, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseFunctions,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const api = resource<PlatformError>(client, (failure) =>\n PlatformError.make({ ...failure, service: \"functions\" }),\n );\n\n /** Every record names its project; a foreign or mismatched one is malformed. */\n const owned =\n <A extends { readonly id: string; readonly projectId: string }>(\n operation: PlatformError[\"operation\"],\n mutation: boolean,\n expected?: string,\n ) =>\n (value: A): Effect.Effect<A, PlatformError> =>\n value.projectId === client.projectId && (expected === undefined || value.id === expected)\n ? Effect.succeed(value)\n : Effect.fail(api.malformed(operation, mutation));\n\n const id = (value: string, operation: PlatformError[\"operation\"]) =>\n api.input(Identifier, value, operation);\n\n const list = Effect.fnUntraced(function* (query: FunctionPageQuery = {}) {\n const value = yield* api.input(FunctionPageQuery, query, \"function-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions${api.query(value)}`,\n DataPage(FunctionMetadata),\n \"function-list\",\n );\n\n return {\n items: yield* Effect.forEach(page.data, owned(\"function-list\", false)),\n total: page.total,\n };\n }, Trace.span(\"BrowserbaseFunctions.list\"));\n\n const retrieve = Effect.fnUntraced(function* (functionId: string) {\n const checked = yield* id(functionId, \"function-retrieve\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/${api.segment(checked)}`,\n FunctionMetadata,\n \"function-retrieve\",\n )\n .pipe(Effect.flatMap(owned(\"function-retrieve\", false, checked)));\n }, Trace.span(\"BrowserbaseFunctions.retrieve\"));\n\n const invoke = Effect.fnUntraced(function* (\n functionId: string,\n request: FunctionInvokeRequest = {},\n ) {\n const checked = yield* id(functionId, \"function-invoke\");\n const value = yield* api.input(FunctionInvokeRequest, request, \"function-invoke\");\n const session = value.session;\n const context = session?.context;\n\n if (context !== undefined) {\n if (context.reference.projectId !== client.projectId)\n return yield* api.make({\n operation: \"function-invoke\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n if (context.persist && isContextWriterBusy(context.reference))\n return yield* api.make({\n operation: \"function-invoke\",\n reason: \"active\",\n outcome: \"undispatched\",\n });\n }\n\n const sessionCreateParams: Schema.Json | undefined =\n session === undefined\n ? undefined\n : {\n ...(session.timeout === undefined ? {} : { timeout: session.timeout }),\n ...(session.extensionId === undefined ? {} : { extensionId: session.extensionId }),\n ...(session.proxies === undefined\n ? {}\n : {\n proxies:\n typeof session.proxies === \"boolean\"\n ? session.proxies\n : session.proxies.map(proxy),\n }),\n ...(session.proxySettings === undefined\n ? {}\n : { proxySettings: session.proxySettings }),\n ...(session.userMetadata === undefined\n ? {}\n : { userMetadata: session.userMetadata }),\n ...(session.browserSettings === undefined && context === undefined\n ? {}\n : {\n browserSettings: {\n ...session.browserSettings,\n ...(context === undefined\n ? {}\n : {\n context: {\n id: context.reference.contextId,\n persist: context.persist,\n },\n }),\n },\n }),\n };\n\n return yield* api\n .request(\n \"POST\",\n `/v1/functions/${api.segment(checked)}/invoke`,\n FunctionInvocation,\n \"function-invoke\",\n {\n ...(value.params === undefined ? {} : { params: value.params }),\n ...(sessionCreateParams === undefined ? {} : { sessionCreateParams }),\n },\n )\n .pipe(Effect.flatMap(owned(\"function-invoke\", true)));\n }, Trace.span(\"BrowserbaseFunctions.invoke\"));\n\n const versions = Effect.fnUntraced(function* (\n functionId: string,\n query: FunctionPageQuery = {},\n ) {\n const checked = yield* id(functionId, \"function-versions\");\n const value = yield* api.input(FunctionPageQuery, query, \"function-versions\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/${api.segment(checked)}/versions${api.query(value)}`,\n ResultsPage(FunctionVersion),\n \"function-versions\",\n );\n\n return {\n items: yield* Effect.forEach(page.results, owned(\"function-versions\", false)),\n total: page.total,\n };\n }, Trace.span(\"BrowserbaseFunctions.versions\"));\n\n const version = Effect.fnUntraced(function* (versionId: string) {\n const checked = yield* id(versionId, \"function-version\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/versions/${api.segment(checked)}`,\n FunctionVersion,\n \"function-version\",\n )\n .pipe(Effect.flatMap(owned(\"function-version\", false, checked)));\n }, Trace.span(\"BrowserbaseFunctions.version\"));\n\n const invocations = Effect.fnUntraced(function* (\n versionId: string,\n query: FunctionStatusQuery = {},\n ) {\n const checked = yield* id(versionId, \"function-invocations\");\n const value = yield* api.input(FunctionStatusQuery, query, \"function-invocations\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/versions/${api.segment(checked)}/invocations${api.query(value)}`,\n ResultsPage(FunctionInvocation),\n \"function-invocations\",\n );\n\n return {\n items: yield* Effect.forEach(page.results, owned(\"function-invocations\", false)),\n total: page.total,\n };\n }, Trace.span(\"BrowserbaseFunctions.invocations\"));\n\n const invocation = Effect.fnUntraced(function* (invocationId: string) {\n const checked = yield* id(invocationId, \"function-invocation\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/invocations/${api.segment(checked)}`,\n FunctionInvocation,\n \"function-invocation\",\n )\n .pipe(Effect.flatMap(owned(\"function-invocation\", false, checked)));\n }, Trace.span(\"BrowserbaseFunctions.invocation\"));\n\n const logs = (path: string, operation: PlatformError[\"operation\"]) =>\n api\n .request(\"GET\", path, Logs, operation)\n .pipe(Effect.map((value) => ({ items: value.logs, total: value.total })));\n\n const invocationLogs = Effect.fnUntraced(function* (invocationId: string) {\n const checked = yield* id(invocationId, \"function-invocation-logs\");\n\n return yield* logs(\n `/v1/functions/invocations/${api.segment(checked)}/logs`,\n \"function-invocation-logs\",\n );\n }, Trace.span(\"BrowserbaseFunctions.invocationLogs\"));\n\n const builds = Effect.fnUntraced(function* (query: FunctionStatusQuery = {}) {\n const value = yield* api.input(FunctionStatusQuery, query, \"function-builds\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/functions/builds${api.query(value)}`,\n DataPage(FunctionBuild),\n \"function-builds\",\n );\n\n return {\n items: yield* Effect.forEach(page.data, owned(\"function-builds\", false)),\n total: page.total,\n };\n }, Trace.span(\"BrowserbaseFunctions.builds\"));\n\n const build = Effect.fnUntraced(function* (buildId: string) {\n const checked = yield* id(buildId, \"function-build\");\n\n return yield* api\n .request(\n \"GET\",\n `/v1/functions/builds/${api.segment(checked)}`,\n FunctionBuild,\n \"function-build\",\n )\n .pipe(Effect.flatMap(owned(\"function-build\", false, checked)));\n }, Trace.span(\"BrowserbaseFunctions.build\"));\n\n const buildLogs = Effect.fnUntraced(function* (buildId: string) {\n const checked = yield* id(buildId, \"function-build-logs\");\n\n return yield* logs(\n `/v1/functions/builds/${api.segment(checked)}/logs`,\n \"function-build-logs\",\n );\n }, Trace.span(\"BrowserbaseFunctions.buildLogs\"));\n\n const waitForInvocation = Effect.fnUntraced(function* (\n invocationId: string,\n options: FunctionWaitOptions,\n ) {\n const bounds = yield* api.input(FunctionWaitOptions, options, \"function-wait\");\n const deadline = (yield* now) + bounds.timeoutMillis;\n\n for (;;) {\n const current = yield* invocation(invocationId).pipe(Effect.withTracerEnabled(false));\n\n if (current.status === \"COMPLETED\" || current.status === \"FAILED\") return current;\n const remaining = deadline - (yield* now);\n\n if (remaining <= 0)\n return yield* api.make({ operation: \"function-wait\", reason: \"timeout\" });\n yield* Effect.sleep(Math.min(bounds.pollIntervalMillis ?? 1_000, remaining));\n }\n }, Trace.span(\"BrowserbaseFunctions.waitForInvocation\"));\n\n return BrowserbaseFunctions.of({\n list,\n retrieve,\n invoke,\n versions,\n version,\n invocations,\n invocation,\n invocationLogs,\n builds,\n build,\n buildLogs,\n waitForInvocation,\n });\n }),\n );\n}\n"],"mappings":"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"}
|
package/dist/PageFetch.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PlatformError } from "./Errors.mjs";
|
|
2
|
-
import { t as BrowserbaseClient } from "./Client-
|
|
3
|
-
import { t as resource } from "./Resource-
|
|
2
|
+
import { r as span, t as BrowserbaseClient } from "./Client-BEC4Q8ZS.mjs";
|
|
3
|
+
import { t as resource } from "./Resource-J7Kkk5mu.mjs";
|
|
4
4
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
5
5
|
//#region src/PageFetch.ts
|
|
6
6
|
const HttpUrl = Schema.NonEmptyString.check(Schema.isMaxLength(8192), Schema.makeFilter((value) => {
|
|
@@ -45,11 +45,11 @@ var BrowserbasePageFetch = class BrowserbasePageFetch extends Context.Service()(
|
|
|
45
45
|
...failure,
|
|
46
46
|
service: "fetch"
|
|
47
47
|
}));
|
|
48
|
-
const fetch = Effect.
|
|
48
|
+
const fetch = Effect.fnUntraced(function* (request) {
|
|
49
49
|
const value = yield* api.input(PageFetchRequest, request, "fetch");
|
|
50
50
|
if (value.schema !== void 0 && value.format !== "json") return yield* api.configuration("fetch");
|
|
51
51
|
return yield* api.request("POST", "/v1/fetch", PageFetchResult, "fetch", value);
|
|
52
|
-
});
|
|
52
|
+
}, span("BrowserbasePageFetch.fetch"));
|
|
53
53
|
return BrowserbasePageFetch.of({ fetch });
|
|
54
54
|
}));
|
|
55
55
|
};
|
package/dist/PageFetch.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageFetch.mjs","names":[],"sources":["../src/PageFetch.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\n\nconst HttpUrl = Schema.NonEmptyString.check(\n Schema.isMaxLength(8192),\n Schema.makeFilter((value) => {\n try {\n const url = new URL(value);\n\n return (\n (url.protocol === \"https:\" || url.protocol === \"http:\") && !url.username && !url.password\n );\n } catch {\n return false;\n }\n }),\n);\n\nexport const PageFetchRequest = Schema.Struct({\n url: HttpUrl,\n allowRedirects: Schema.optionalKey(Schema.Boolean),\n allowInsecureSsl: Schema.optionalKey(Schema.Boolean),\n proxies: Schema.optionalKey(Schema.Boolean),\n /** `raw` by default; `json` extracts with `schema`, `markdown` converts the page. */\n format: Schema.optionalKey(Schema.Literals([\"raw\", \"json\", \"markdown\"])),\n /** A JSON Schema describing the object to extract when `format` is `json`. */\n schema: Schema.optionalKey(Schema.Record(Schema.String, Schema.Json)),\n});\n\nexport type PageFetchRequest = typeof PageFetchRequest.Type;\n\nexport class PageFetchResult extends Schema.Class<PageFetchResult>(\"BrowserbasePageFetchResult\")({\n id: Schema.String.check(Schema.isMaxLength(256)),\n statusCode: Schema.Int,\n headers: Schema.Record(Schema.String, Schema.String),\n content: Schema.Union([Schema.String, Schema.Json]),\n contentType: Schema.String.check(Schema.isMaxLength(1024)),\n encoding: Schema.String.check(Schema.isMaxLength(64)),\n}) {}\n\n/**\n * Browserbase's Fetch API: one page retrieved by the provider without a browser session.\n * Replies are bounded by the 1 MiB control-plane limit (`reason: \"limit\"`); the POST is\n * never retried. Billing of each outcome is provider-owned. `statusCode` is the target\n * site's status, not the API's.\n */\nexport class BrowserbasePageFetch extends Context.Service<\n BrowserbasePageFetch,\n {\n readonly fetch: (request: PageFetchRequest) => Effect.Effect<PageFetchResult, PlatformError>;\n }\n>()(\"effect-browserbase/PageFetch\") {\n static readonly layer: Layer.Layer<BrowserbasePageFetch, never, BrowserbaseClient> = Layer.effect(\n BrowserbasePageFetch,\n Effect.gen(function* () {\n const api = resource<PlatformError>(yield* BrowserbaseClient, (failure) =>\n PlatformError.make({ ...failure, service: \"fetch\" }),\n );\n\n const fetch = Effect.
|
|
1
|
+
{"version":3,"file":"PageFetch.mjs","names":["Trace.span"],"sources":["../src/PageFetch.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport * as Trace from \"./internal/Trace.ts\";\n\nconst HttpUrl = Schema.NonEmptyString.check(\n Schema.isMaxLength(8192),\n Schema.makeFilter((value) => {\n try {\n const url = new URL(value);\n\n return (\n (url.protocol === \"https:\" || url.protocol === \"http:\") && !url.username && !url.password\n );\n } catch {\n return false;\n }\n }),\n);\n\nexport const PageFetchRequest = Schema.Struct({\n url: HttpUrl,\n allowRedirects: Schema.optionalKey(Schema.Boolean),\n allowInsecureSsl: Schema.optionalKey(Schema.Boolean),\n proxies: Schema.optionalKey(Schema.Boolean),\n /** `raw` by default; `json` extracts with `schema`, `markdown` converts the page. */\n format: Schema.optionalKey(Schema.Literals([\"raw\", \"json\", \"markdown\"])),\n /** A JSON Schema describing the object to extract when `format` is `json`. */\n schema: Schema.optionalKey(Schema.Record(Schema.String, Schema.Json)),\n});\n\nexport type PageFetchRequest = typeof PageFetchRequest.Type;\n\nexport class PageFetchResult extends Schema.Class<PageFetchResult>(\"BrowserbasePageFetchResult\")({\n id: Schema.String.check(Schema.isMaxLength(256)),\n statusCode: Schema.Int,\n headers: Schema.Record(Schema.String, Schema.String),\n content: Schema.Union([Schema.String, Schema.Json]),\n contentType: Schema.String.check(Schema.isMaxLength(1024)),\n encoding: Schema.String.check(Schema.isMaxLength(64)),\n}) {}\n\n/**\n * Browserbase's Fetch API: one page retrieved by the provider without a browser session.\n * Replies are bounded by the 1 MiB control-plane limit (`reason: \"limit\"`); the POST is\n * never retried. Billing of each outcome is provider-owned. `statusCode` is the target\n * site's status, not the API's.\n */\nexport class BrowserbasePageFetch extends Context.Service<\n BrowserbasePageFetch,\n {\n readonly fetch: (request: PageFetchRequest) => Effect.Effect<PageFetchResult, PlatformError>;\n }\n>()(\"effect-browserbase/PageFetch\") {\n static readonly layer: Layer.Layer<BrowserbasePageFetch, never, BrowserbaseClient> = Layer.effect(\n BrowserbasePageFetch,\n Effect.gen(function* () {\n const api = resource<PlatformError>(yield* BrowserbaseClient, (failure) =>\n PlatformError.make({ ...failure, service: \"fetch\" }),\n );\n\n const fetch = Effect.fnUntraced(function* (request: PageFetchRequest) {\n const value = yield* api.input(PageFetchRequest, request, \"fetch\");\n\n if (value.schema !== undefined && value.format !== \"json\")\n return yield* api.configuration(\"fetch\");\n\n return yield* api.request(\"POST\", \"/v1/fetch\", PageFetchResult, \"fetch\", value);\n }, Trace.span(\"BrowserbasePageFetch.fetch\"));\n\n return BrowserbasePageFetch.of({ fetch });\n }),\n );\n}\n"],"mappings":";;;;;AAOA,MAAM,UAAU,OAAO,eAAe,MACpC,OAAO,YAAY,IAAI,GACvB,OAAO,YAAY,UAAU;CAC3B,IAAI;EACF,MAAM,MAAM,IAAI,IAAI,KAAK;EAEzB,QACG,IAAI,aAAa,YAAY,IAAI,aAAa,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI;CAErF,QAAQ;EACN,OAAO;CACT;AACF,CAAC,CACH;AAEA,MAAa,mBAAmB,OAAO,OAAO;CAC5C,KAAK;CACL,gBAAgB,OAAO,YAAY,OAAO,OAAO;CACjD,kBAAkB,OAAO,YAAY,OAAO,OAAO;CACnD,SAAS,OAAO,YAAY,OAAO,OAAO;;CAE1C,QAAQ,OAAO,YAAY,OAAO,SAAS;EAAC;EAAO;EAAQ;CAAU,CAAC,CAAC;;CAEvE,QAAQ,OAAO,YAAY,OAAO,OAAO,OAAO,QAAQ,OAAO,IAAI,CAAC;AACtE,CAAC;AAID,IAAa,kBAAb,cAAqC,OAAO,MAAuB,4BAA4B,CAAC,CAAC;CAC/F,IAAI,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC;CAC/C,YAAY,OAAO;CACnB,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM;CACnD,SAAS,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC;CAClD,aAAa,OAAO,OAAO,MAAM,OAAO,YAAY,IAAI,CAAC;CACzD,UAAU,OAAO,OAAO,MAAM,OAAO,YAAY,EAAE,CAAC;AACtD,CAAC,CAAC,CAAC,CAAC;;;;;;;AAQJ,IAAa,uBAAb,MAAa,6BAA6B,QAAQ,QAKhD,CAAC,CAAC,8BAA8B,CAAC,CAAC;CAClC,OAAgB,QAAqE,MAAM,OACzF,sBACA,OAAO,IAAI,aAAa;EACtB,MAAM,MAAM,SAAwB,OAAO,oBAAoB,YAC7D,cAAc,KAAK;GAAE,GAAG;GAAS,SAAS;EAAQ,CAAC,CACrD;EAEA,MAAM,QAAQ,OAAO,WAAW,WAAW,SAA2B;GACpE,MAAM,QAAQ,OAAO,IAAI,MAAM,kBAAkB,SAAS,OAAO;GAEjE,IAAI,MAAM,WAAW,KAAA,KAAa,MAAM,WAAW,QACjD,OAAO,OAAO,IAAI,cAAc,OAAO;GAEzC,OAAO,OAAO,IAAI,QAAQ,QAAQ,aAAa,iBAAiB,SAAS,KAAK;EAChF,GAAGA,KAAW,4BAA4B,CAAC;EAE3C,OAAO,qBAAqB,GAAG,EAAE,MAAM,CAAC;CAC1C,CAAC,CACH;AACF"}
|
package/dist/Projects.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Identifier } from "./References.mjs";
|
|
2
2
|
import { ProjectError } from "./Errors.mjs";
|
|
3
|
-
import { t as BrowserbaseClient } from "./Client-
|
|
4
|
-
import { t as resource } from "./Resource-
|
|
3
|
+
import { r as span, t as BrowserbaseClient } from "./Client-BEC4Q8ZS.mjs";
|
|
4
|
+
import { t as resource } from "./Resource-J7Kkk5mu.mjs";
|
|
5
5
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
6
6
|
//#region src/Projects.ts
|
|
7
7
|
const Timestamp = Schema.String.check(Schema.isMaxLength(64));
|
|
@@ -43,15 +43,15 @@ var BrowserbaseProjects = class BrowserbaseProjects extends Context.Service()("e
|
|
|
43
43
|
const client = yield* BrowserbaseClient;
|
|
44
44
|
const api = resource(client, (failure) => ProjectError.make(failure));
|
|
45
45
|
const own = `/v1/projects/${api.segment(client.projectId)}`;
|
|
46
|
-
const list = api.request("GET", "/v1/projects", Schema.Array(ProviderProject).check(Schema.isMaxLength(1024)), "project-list").pipe(Effect.map((rows) => rows.map(project)),
|
|
47
|
-
const retrieve = api.request("GET", own, ProviderProject, "project-retrieve").pipe(Effect.flatMap((value) => value.id === client.projectId ? Effect.succeed(project(value)) : Effect.fail(api.malformed("project-retrieve", false))),
|
|
46
|
+
const list = api.request("GET", "/v1/projects", Schema.Array(ProviderProject).check(Schema.isMaxLength(1024)), "project-list").pipe(Effect.map((rows) => rows.map(project)), span("BrowserbaseProjects.list"));
|
|
47
|
+
const retrieve = api.request("GET", own, ProviderProject, "project-retrieve").pipe(Effect.flatMap((value) => value.id === client.projectId ? Effect.succeed(project(value)) : Effect.fail(api.malformed("project-retrieve", false))), span("BrowserbaseProjects.retrieve"));
|
|
48
48
|
const usage = api.request("GET", `${own}/usage`, Schema.Struct({
|
|
49
49
|
browserMinutes: Schema.Natural,
|
|
50
50
|
proxyBytes: Schema.Natural
|
|
51
51
|
}), "project-usage").pipe(Effect.map((value) => ProjectUsage.make({
|
|
52
52
|
projectId: client.projectId,
|
|
53
53
|
...value
|
|
54
|
-
})),
|
|
54
|
+
})), span("BrowserbaseProjects.usage"));
|
|
55
55
|
return BrowserbaseProjects.of({
|
|
56
56
|
list,
|
|
57
57
|
retrieve,
|
package/dist/Projects.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Projects.mjs","names":[],"sources":["../src/Projects.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { ProjectError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\n\nexport class ProjectMetadata extends Schema.Class<ProjectMetadata>(\"BrowserbaseProjectMetadata\")({\n projectId: Identifier,\n name: Schema.String.check(Schema.isMaxLength(1024)),\n ownerId: Schema.String.check(Schema.isMaxLength(256)),\n /** Default provider session lifetime in seconds. */\n defaultTimeout: Schema.Int,\n /** Maximum concurrent sessions. */\n concurrency: Schema.Int,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class ProjectUsage extends Schema.Class<ProjectUsage>(\"BrowserbaseProjectUsage\")({\n projectId: Identifier,\n browserMinutes: Schema.Natural,\n proxyBytes: Schema.Natural,\n}) {}\n\nconst ProviderProject = Schema.Struct({\n id: Identifier,\n name: ProjectMetadata.fields.name,\n ownerId: ProjectMetadata.fields.ownerId,\n defaultTimeout: Schema.Int,\n concurrency: Schema.Int,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\nconst project = ({ id, ...rest }: typeof ProviderProject.Type) =>\n ProjectMetadata.make({ projectId: id, ...rest });\n\n/**\n * Passive project inspection. `retrieve` and `usage` read the Client's own project; `list`\n * reports every project the API key can see. Nothing here changes provider state.\n */\nexport class BrowserbaseProjects extends Context.Service<\n BrowserbaseProjects,\n {\n readonly list: Effect.Effect<ReadonlyArray<ProjectMetadata>, ProjectError>;\n readonly retrieve: Effect.Effect<ProjectMetadata, ProjectError>;\n readonly usage: Effect.Effect<ProjectUsage, ProjectError>;\n }\n>()(\"effect-browserbase/Projects\") {\n static readonly layer: Layer.Layer<BrowserbaseProjects, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseProjects,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const api = resource<ProjectError>(client, (failure) => ProjectError.make(failure));\n const own = `/v1/projects/${api.segment(client.projectId)}`;\n\n const list = api\n .request(\n \"GET\",\n \"/v1/projects\",\n Schema.Array(ProviderProject).check(Schema.isMaxLength(1024)),\n \"project-list\",\n )\n .pipe(\n Effect.map((rows) => rows.map(project)),\n
|
|
1
|
+
{"version":3,"file":"Projects.mjs","names":["Trace.span"],"sources":["../src/Projects.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { ProjectError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport * as Trace from \"./internal/Trace.ts\";\nimport { Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\n\nexport class ProjectMetadata extends Schema.Class<ProjectMetadata>(\"BrowserbaseProjectMetadata\")({\n projectId: Identifier,\n name: Schema.String.check(Schema.isMaxLength(1024)),\n ownerId: Schema.String.check(Schema.isMaxLength(256)),\n /** Default provider session lifetime in seconds. */\n defaultTimeout: Schema.Int,\n /** Maximum concurrent sessions. */\n concurrency: Schema.Int,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class ProjectUsage extends Schema.Class<ProjectUsage>(\"BrowserbaseProjectUsage\")({\n projectId: Identifier,\n browserMinutes: Schema.Natural,\n proxyBytes: Schema.Natural,\n}) {}\n\nconst ProviderProject = Schema.Struct({\n id: Identifier,\n name: ProjectMetadata.fields.name,\n ownerId: ProjectMetadata.fields.ownerId,\n defaultTimeout: Schema.Int,\n concurrency: Schema.Int,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\nconst project = ({ id, ...rest }: typeof ProviderProject.Type) =>\n ProjectMetadata.make({ projectId: id, ...rest });\n\n/**\n * Passive project inspection. `retrieve` and `usage` read the Client's own project; `list`\n * reports every project the API key can see. Nothing here changes provider state.\n */\nexport class BrowserbaseProjects extends Context.Service<\n BrowserbaseProjects,\n {\n readonly list: Effect.Effect<ReadonlyArray<ProjectMetadata>, ProjectError>;\n readonly retrieve: Effect.Effect<ProjectMetadata, ProjectError>;\n readonly usage: Effect.Effect<ProjectUsage, ProjectError>;\n }\n>()(\"effect-browserbase/Projects\") {\n static readonly layer: Layer.Layer<BrowserbaseProjects, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseProjects,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const api = resource<ProjectError>(client, (failure) => ProjectError.make(failure));\n const own = `/v1/projects/${api.segment(client.projectId)}`;\n\n const list = api\n .request(\n \"GET\",\n \"/v1/projects\",\n Schema.Array(ProviderProject).check(Schema.isMaxLength(1024)),\n \"project-list\",\n )\n .pipe(\n Effect.map((rows) => rows.map(project)),\n Trace.span(\"BrowserbaseProjects.list\"),\n );\n\n const retrieve = api.request(\"GET\", own, ProviderProject, \"project-retrieve\").pipe(\n Effect.flatMap((value) =>\n value.id === client.projectId\n ? Effect.succeed(project(value))\n : Effect.fail(api.malformed(\"project-retrieve\", false)),\n ),\n Trace.span(\"BrowserbaseProjects.retrieve\"),\n );\n\n const usage = api\n .request(\n \"GET\",\n `${own}/usage`,\n Schema.Struct({ browserMinutes: Schema.Natural, proxyBytes: Schema.Natural }),\n \"project-usage\",\n )\n .pipe(\n Effect.map((value) => ProjectUsage.make({ projectId: client.projectId, ...value })),\n Trace.span(\"BrowserbaseProjects.usage\"),\n );\n\n return BrowserbaseProjects.of({ list, retrieve, usage });\n }),\n );\n}\n"],"mappings":";;;;;;AAQA,MAAM,YAAY,OAAO,OAAO,MAAM,OAAO,YAAY,EAAE,CAAC;AAE5D,IAAa,kBAAb,cAAqC,OAAO,MAAuB,4BAA4B,CAAC,CAAC;CAC/F,WAAW;CACX,MAAM,OAAO,OAAO,MAAM,OAAO,YAAY,IAAI,CAAC;CAClD,SAAS,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC;;CAEpD,gBAAgB,OAAO;;CAEvB,aAAa,OAAO;CACpB,WAAW;CACX,WAAW;AACb,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,eAAb,cAAkC,OAAO,MAAoB,yBAAyB,CAAC,CAAC;CACtF,WAAW;CACX,gBAAgB,OAAO;CACvB,YAAY,OAAO;AACrB,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAM,kBAAkB,OAAO,OAAO;CACpC,IAAI;CACJ,MAAM,gBAAgB,OAAO;CAC7B,SAAS,gBAAgB,OAAO;CAChC,gBAAgB,OAAO;CACvB,aAAa,OAAO;CACpB,WAAW;CACX,WAAW;AACb,CAAC;AAED,MAAM,WAAW,EAAE,IAAI,GAAG,WACxB,gBAAgB,KAAK;CAAE,WAAW;CAAI,GAAG;AAAK,CAAC;;;;;AAMjD,IAAa,sBAAb,MAAa,4BAA4B,QAAQ,QAO/C,CAAC,CAAC,6BAA6B,CAAC,CAAC;CACjC,OAAgB,QAAoE,MAAM,OACxF,qBACA,OAAO,IAAI,aAAa;EACtB,MAAM,SAAS,OAAO;EACtB,MAAM,MAAM,SAAuB,SAAS,YAAY,aAAa,KAAK,OAAO,CAAC;EAClF,MAAM,MAAM,gBAAgB,IAAI,QAAQ,OAAO,SAAS;EAExD,MAAM,OAAO,IACV,QACC,OACA,gBACA,OAAO,MAAM,eAAe,CAAC,CAAC,MAAM,OAAO,YAAY,IAAI,CAAC,GAC5D,cACF,CAAC,CACA,KACC,OAAO,KAAK,SAAS,KAAK,IAAI,OAAO,CAAC,GACtCA,KAAW,0BAA0B,CACvC;EAEF,MAAM,WAAW,IAAI,QAAQ,OAAO,KAAK,iBAAiB,kBAAkB,CAAC,CAAC,KAC5E,OAAO,SAAS,UACd,MAAM,OAAO,OAAO,YAChB,OAAO,QAAQ,QAAQ,KAAK,CAAC,IAC7B,OAAO,KAAK,IAAI,UAAU,oBAAoB,KAAK,CAAC,CAC1D,GACAA,KAAW,8BAA8B,CAC3C;EAEA,MAAM,QAAQ,IACX,QACC,OACA,GAAG,IAAI,SACP,OAAO,OAAO;GAAE,gBAAgB,OAAO;GAAS,YAAY,OAAO;EAAQ,CAAC,GAC5E,eACF,CAAC,CACA,KACC,OAAO,KAAK,UAAU,aAAa,KAAK;GAAE,WAAW,OAAO;GAAW,GAAG;EAAM,CAAC,CAAC,GAClFA,KAAW,2BAA2B,CACxC;EAEF,OAAO,oBAAoB,GAAG;GAAE;GAAM;GAAU;EAAM,CAAC;CACzD,CAAC,CACH;AACF"}
|
package/dist/Recordings.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Identifier } from "./References.mjs";
|
|
2
2
|
import { ArtifactError } from "./Errors.mjs";
|
|
3
|
+
import { i as stream, n as annotate, r as span, t as BrowserbaseClient } from "./Client-BEC4Q8ZS.mjs";
|
|
3
4
|
import { RecordingBatch, RecordingPage, RecordingPageReference } from "./Transfers.mjs";
|
|
4
|
-
import { t as BrowserbaseClient } from "./Client-4RMKIpL2.mjs";
|
|
5
5
|
import { n as transferPolicy } from "./TransferPolicy-DQ06i7SZ.mjs";
|
|
6
6
|
import { n as nowMillis, r as until, t as deadlineAfter } from "./Deadline-CrViaogr.mjs";
|
|
7
|
-
import { t as BrowserbaseSessions } from "./Sessions-
|
|
7
|
+
import { t as BrowserbaseSessions } from "./Sessions-D2H5m6rF.mjs";
|
|
8
8
|
import { t as requireTerminalSession } from "./Authorization-Ll5f_XNM.mjs";
|
|
9
9
|
import { Context, Effect, Layer, Redacted, Schema, Semaphore, Stream } from "effect";
|
|
10
10
|
//#region src/Recordings.ts
|
|
@@ -57,7 +57,7 @@ var BrowserbaseRecordings = class BrowserbaseRecordings extends Context.Service(
|
|
|
57
57
|
const status = Effect.fnUntraced(function* (ref) {
|
|
58
58
|
yield* authorize(ref);
|
|
59
59
|
return project(ref, yield* read(ref));
|
|
60
|
-
});
|
|
60
|
+
}, span("BrowserbaseRecordings.status"));
|
|
61
61
|
const request = (ref, mode = "initial") => requests.withPermits(1)(Effect.gen(function* () {
|
|
62
62
|
if (mode !== "initial" && mode !== "retry-failed") return yield* ArtifactError.make({
|
|
63
63
|
operation: "recording-request",
|
|
@@ -79,29 +79,44 @@ var BrowserbaseRecordings = class BrowserbaseRecordings extends Context.Service(
|
|
|
79
79
|
outcome: "unknown"
|
|
80
80
|
})))));
|
|
81
81
|
return project(ref, raw);
|
|
82
|
-
}));
|
|
83
|
-
const wait =
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
"
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
82
|
+
})).pipe(span("BrowserbaseRecordings.request"));
|
|
83
|
+
const wait = (ref, options = {}) => Effect.suspend(() => {
|
|
84
|
+
let failedPolls = 0;
|
|
85
|
+
let lastFailure;
|
|
86
|
+
let timedOut = false;
|
|
87
|
+
return Effect.gen(function* () {
|
|
88
|
+
const timeout = options.timeoutMillis ?? 12e4;
|
|
89
|
+
const interval = options.intervalMillis ?? 3e3;
|
|
90
|
+
if (!Number.isSafeInteger(timeout) || timeout < 1 || timeout > 6e5 || !Number.isSafeInteger(interval) || interval < 10 || interval > 3e4) return yield* failure("recording-wait", "configuration");
|
|
91
|
+
const deadline = yield* deadlineAfter(timeout);
|
|
92
|
+
yield* within(authorize(ref), deadline, "recording-wait").pipe(Effect.withTracerEnabled(false));
|
|
93
|
+
let latest = { downloads: [] };
|
|
94
|
+
for (;;) {
|
|
95
|
+
const result = yield* within(read(ref, deadline), deadline, "recording-wait").pipe(Effect.withTracerEnabled(false), Effect.tapError((error) => Effect.sync(() => {
|
|
96
|
+
failedPolls = Math.min(Number.MAX_SAFE_INTEGER, failedPolls + 1);
|
|
97
|
+
lastFailure = error.reason;
|
|
98
|
+
})), Effect.result);
|
|
99
|
+
if (result._tag === "Success") {
|
|
100
|
+
latest = result.success;
|
|
101
|
+
if (latest.downloads.every((page) => page.status === "COMPLETED" || page.status === "FAILED")) return project(ref, latest);
|
|
102
|
+
} else if (![
|
|
103
|
+
"timeout",
|
|
104
|
+
"rate-limited",
|
|
105
|
+
"provider",
|
|
106
|
+
"transport"
|
|
107
|
+
].includes(result.failure.reason)) return yield* result.failure;
|
|
108
|
+
const remaining = deadline - (yield* nowMillis);
|
|
109
|
+
if (remaining <= 0) {
|
|
110
|
+
timedOut = true;
|
|
111
|
+
return project(ref, latest, true);
|
|
112
|
+
}
|
|
113
|
+
yield* Effect.sleep(Math.min(interval, remaining));
|
|
114
|
+
}
|
|
115
|
+
}).pipe(Effect.onExit(() => annotate({
|
|
116
|
+
"browser.wait.timed-out": timedOut,
|
|
117
|
+
"browser.wait.failed-polls": failedPolls,
|
|
118
|
+
...lastFailure === void 0 ? {} : { "browser.wait.last-failure": lastFailure }
|
|
119
|
+
})), span("BrowserbaseRecordings.wait", { attributes: { "browser.operation": "recording-wait" } }));
|
|
105
120
|
});
|
|
106
121
|
const download = (ref, limits) => Stream.unwrap(Effect.gen(function* () {
|
|
107
122
|
yield* Schema.decodeEffect(RecordingPageReference)(ref).pipe(Effect.mapError(() => failure("recording-download", "configuration")));
|
|
@@ -114,7 +129,7 @@ var BrowserbaseRecordings = class BrowserbaseRecordings extends Context.Service(
|
|
|
114
129
|
if (page.status !== "COMPLETED") return yield* failure("recording-download", "active");
|
|
115
130
|
if (page.downloadUrl === void 0) return yield* failure("recording-download", "byos");
|
|
116
131
|
return client.media(Redacted.make(page.downloadUrl), maxBytes, ["video/mp4", "application/octet-stream"], timeoutMillis, deadline).pipe(Stream.mapError(fromClient("recording-download")));
|
|
117
|
-
}));
|
|
132
|
+
})).pipe(stream("BrowserbaseRecordings.download"));
|
|
118
133
|
return BrowserbaseRecordings.of({
|
|
119
134
|
request,
|
|
120
135
|
status,
|