@effect-agent/platform-cloudflare 0.1.0-beta.130 → 0.1.0-beta.132
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/Alarm.mjs +2 -1
- package/dist/Alarm.mjs.map +1 -1
- package/dist/{BrowserSession-DxCN-5F9.d.mts → BrowserSession-DP6b-cpL.d.mts} +18 -2
- package/dist/{BrowserSession-BplIoNfi.mjs → BrowserSession-DWoRC_iM.mjs} +67 -4
- package/dist/BrowserSession-DWoRC_iM.mjs.map +1 -0
- package/dist/BrowserSession.d.mts +1 -1
- package/dist/BrowserSession.mjs +2 -2
- package/dist/CloudflareThreadClient.d.mts +86 -86
- package/dist/{InteractiveBrowser-D-xxDv_f.mjs → InteractiveBrowser-CxFT-Nwm.mjs} +2 -2
- package/dist/{InteractiveBrowser-D-xxDv_f.mjs.map → InteractiveBrowser-CxFT-Nwm.mjs.map} +1 -1
- package/dist/InteractiveBrowser.mjs +1 -1
- package/dist/{ThreadObject-CcS4Q2iT.d.mts → ThreadObject-D8GzJxJB.d.mts} +41 -41
- package/dist/ThreadObject.d.mts +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/Alarm.ts +9 -2
- package/src/BrowserSession.ts +33 -0
- package/src/internal/browser-readonly-live-view.ts +111 -0
- package/dist/BrowserSession-BplIoNfi.mjs.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { BrowserCredentialAccess, CardCredential, CredentialFillError, CredentialFillResult, CredentialOrigin, CredentialTarget, FillCredentialRequest, LoginCredential } from "./BrowserCredentials.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { Cause, Clock, Context, Effect, Exit, Layer, Redacted, Schema, Scope, Semaphore } from "effect";
|
|
3
|
+
import { C as reportedBrowserError, S as reportBrowserCause, b as BrowserRunFailure, c as BrowserRunLiveViewResult, n as BrowserRunHandoffResult, r as BrowserRunHandoffState, s as BrowserRunLiveViewRequest, t as BrowserRunHandoffRequest, v as BrowserRunSessionLifecycle, x as browserFailure, y as BrowserRunBinding } from "./InteractiveBrowser-CxFT-Nwm.mjs";
|
|
4
|
+
import { Cause, Clock, Context, Effect, Exit, Layer, Redacted, Schema, Scope, Semaphore, Stream } from "effect";
|
|
5
|
+
import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http";
|
|
5
6
|
//#region src/internal/browser-credentials.ts
|
|
6
7
|
/** Supplied only under the attachment lock, with the remaining command/session budget. */
|
|
7
8
|
var BrowserSessionPage = class extends Context.Service()("@effect-agent/platform-cloudflare/internal/BrowserSessionPage") {};
|
|
@@ -206,6 +207,63 @@ const fillCredential = Effect.fnUntraced(function* (input) {
|
|
|
206
207
|
}), Effect.withTracerEnabled(false));
|
|
207
208
|
});
|
|
208
209
|
//#endregion
|
|
210
|
+
//#region src/internal/browser-readonly-live-view.ts
|
|
211
|
+
const Identity = Schema.Struct({
|
|
212
|
+
sessionId: Schema.String.check(Schema.isUUID()),
|
|
213
|
+
targetId: Schema.NonEmptyString.check(Schema.isMaxLength(256))
|
|
214
|
+
});
|
|
215
|
+
const Reply = Schema.fromJsonString(Schema.Struct({
|
|
216
|
+
id: Identity.fields.targetId,
|
|
217
|
+
options: Schema.Struct({
|
|
218
|
+
mode: Schema.Literal("tab"),
|
|
219
|
+
guardrails: Schema.Struct({ mode: Schema.Literal("readonly") })
|
|
220
|
+
}),
|
|
221
|
+
devtoolsFrontendUrl: Schema.String
|
|
222
|
+
}));
|
|
223
|
+
const operation = "session.readonlyLiveView";
|
|
224
|
+
/** Only the REST endpoint can mint provider-enforced read-only connections. */
|
|
225
|
+
var BrowserRunReadonlyLiveView = class extends Context.Service()("@effect-agent/platform-cloudflare/internal/BrowserRunReadonlyLiveView") {
|
|
226
|
+
static layer(options) {
|
|
227
|
+
return Layer.effect(this, Effect.gen(function* () {
|
|
228
|
+
const client = yield* HttpClient.HttpClient;
|
|
229
|
+
return { mint: Effect.fnUntraced(function* (sessionId, targetId, request) {
|
|
230
|
+
const identity = yield* Schema.decodeEffect(Identity)({
|
|
231
|
+
sessionId: Redacted.value(sessionId),
|
|
232
|
+
targetId: Redacted.value(targetId)
|
|
233
|
+
});
|
|
234
|
+
const input = yield* Schema.decodeEffect(BrowserRunLiveViewRequest)(request);
|
|
235
|
+
const response = yield* client.execute(HttpClientRequest.post(`https://api.cloudflare.com/client/v4/accounts/${options.accountId}/browser-rendering/devtools/browser/${identity.sessionId}/live_view`).pipe(HttpClientRequest.bearerToken(options.apiToken), HttpClientRequest.bodyJsonUnsafe({
|
|
236
|
+
mode: input.mode,
|
|
237
|
+
expiresInMs: input.expiresInMs,
|
|
238
|
+
targetId: identity.targetId,
|
|
239
|
+
guardrails: { mode: "readonly" }
|
|
240
|
+
}))).pipe(Effect.provideService(FetchHttpClient.RequestInit, { redirect: "manual" }));
|
|
241
|
+
if (response.status !== 200) return yield* new BrowserRunFailure({
|
|
242
|
+
operation,
|
|
243
|
+
reason: "provider",
|
|
244
|
+
status: response.status
|
|
245
|
+
});
|
|
246
|
+
const bytes = yield* Stream.runFoldEffect(response.stream, () => /* @__PURE__ */ new Uint8Array(), (body, chunk) => {
|
|
247
|
+
if (body.byteLength + chunk.byteLength > 16384) return Effect.fail(new BrowserRunFailure({
|
|
248
|
+
operation,
|
|
249
|
+
reason: "malformed"
|
|
250
|
+
}));
|
|
251
|
+
const combined = new Uint8Array(body.byteLength + chunk.byteLength);
|
|
252
|
+
combined.set(body);
|
|
253
|
+
combined.set(chunk, body.byteLength);
|
|
254
|
+
return Effect.succeed(combined);
|
|
255
|
+
});
|
|
256
|
+
const reply = yield* Schema.decodeEffect(Reply)(new TextDecoder().decode(bytes));
|
|
257
|
+
if (reply.id !== identity.targetId) return yield* new BrowserRunFailure({
|
|
258
|
+
operation,
|
|
259
|
+
reason: "malformed"
|
|
260
|
+
});
|
|
261
|
+
return yield* Schema.decodeEffect(BrowserRunLiveViewResult)({ devtoolsFrontendUrl: Redacted.make(reply.devtoolsFrontendUrl) });
|
|
262
|
+
}, Effect.mapError((cause) => browserFailure(operation, cause)), Effect.withTracerEnabled(false)) };
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
//#endregion
|
|
209
267
|
//#region src/BrowserSession.ts
|
|
210
268
|
var BrowserSession_exports = /* @__PURE__ */ __exportAll({
|
|
211
269
|
BrowserRunHandoffRequest: () => BrowserRunHandoffRequest,
|
|
@@ -290,6 +348,7 @@ var BrowserSessions = class BrowserSessions extends Context.Service()("@effect-a
|
|
|
290
348
|
static layerNoDeps = Layer.effect(this, Effect.gen(function* () {
|
|
291
349
|
const binding = yield* BrowserRunBinding;
|
|
292
350
|
const lifecycle = yield* BrowserRunSessionLifecycle;
|
|
351
|
+
const readonlyLiveView = yield* BrowserRunReadonlyLiveView;
|
|
293
352
|
const close = (sessionId) => decode(SessionId, sessionId).pipe(Effect.flatMap((id) => lifecycle.close(id).pipe(Effect.mapError(() => failure("cleanup", "not-dispatched", "unconfirmed")))));
|
|
294
353
|
const cleanup = (sessionId) => close(sessionId).pipe(Effect.as("confirmed"), Effect.catchCause((cause) => reportBrowserCause("session.close", cause).pipe(Effect.as("unconfirmed"))));
|
|
295
354
|
const connect = Effect.fnUntraced(function* (sessionId) {
|
|
@@ -403,6 +462,10 @@ var BrowserSessions = class BrowserSessions extends Context.Service()("@effect-a
|
|
|
403
462
|
mode: value.mode,
|
|
404
463
|
expiresInMs: value.expiresInMs
|
|
405
464
|
}, Schema.Struct({ devtoolsFrontendUrl: Schema.String }))), Effect.flatMap((value) => decode(BrowserRunLiveViewResult, { devtoolsFrontendUrl: Redacted.make(value.devtoolsFrontendUrl) }))),
|
|
465
|
+
getReadOnlyLiveView: (authorize, request) => decode(BrowserRunLiveViewRequest, request).pipe(Effect.flatMap((value) => runEffect((commandTimeoutMillis) => authorize.pipe(Effect.andThen(() => readonlyLiveView.mint(reference.sessionId, reference.targetId, value).pipe(Effect.tapCause((cause) => reportBrowserCause("session.readonlyLiveView", cause)), Effect.mapError(() => reportedBrowserError(failure("provider"))))), Effect.timeoutOrElse({
|
|
466
|
+
duration: commandTimeoutMillis,
|
|
467
|
+
orElse: () => Effect.fail(failure("timeout"))
|
|
468
|
+
}))))),
|
|
406
469
|
getHandoffState: (authorize) => command(authorize, "Cloudflare.getHandoffState", {}, Schema.Struct({
|
|
407
470
|
active: Schema.Boolean,
|
|
408
471
|
handoffId: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1024))),
|
|
@@ -433,10 +496,10 @@ var BrowserSessions = class BrowserSessions extends Context.Service()("@effect-a
|
|
|
433
496
|
});
|
|
434
497
|
}));
|
|
435
498
|
static layer(options) {
|
|
436
|
-
return this.layerNoDeps.pipe(Layer.provide(BrowserRunBinding.layer(options.browser)), Layer.provide(BrowserRunSessionLifecycle.layer(options)));
|
|
499
|
+
return this.layerNoDeps.pipe(Layer.provide(BrowserRunBinding.layer(options.browser)), Layer.provide(BrowserRunSessionLifecycle.layer(options)), Layer.provide(BrowserRunReadonlyLiveView.layer(options)));
|
|
437
500
|
}
|
|
438
501
|
};
|
|
439
502
|
//#endregion
|
|
440
503
|
export { BrowserSessions as a, BrowserSession_exports as i, BrowserSessionOptions as n, BrowserSessionReference as r, BrowserSessionError as t };
|
|
441
504
|
|
|
442
|
-
//# sourceMappingURL=BrowserSession-
|
|
505
|
+
//# sourceMappingURL=BrowserSession-DWoRC_iM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserSession-DWoRC_iM.mjs","names":[],"sources":["../src/internal/browser-credentials.ts","../src/internal/browser-readonly-live-view.ts","../src/BrowserSession.ts"],"sourcesContent":["import { Cause, Context, Effect, Redacted, Schema } from \"effect\";\nimport type { Frame, Page } from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport {\n BrowserCredentialAccess,\n type BrowserCredentialMaterial,\n CardCredential,\n type CredentialDispatch,\n type CredentialFieldRole,\n CredentialFillError,\n CredentialFillResult,\n CredentialOrigin,\n CredentialTarget,\n FillCredentialRequest,\n LoginCredential,\n type CredentialAccessRequest,\n} from \"../BrowserCredentials.ts\";\n\n/** Supplied only under the attachment lock, with the remaining command/session budget. */\nexport class BrowserSessionPage extends Context.Service<\n BrowserSessionPage,\n {\n readonly page: Page;\n readonly commandTimeoutMillis: number;\n }\n>()(\"@effect-agent/platform-cloudflare/internal/BrowserSessionPage\") {}\n\nconst TargetReply = Schema.Union([\n Schema.Struct({ action: Schema.String.check(Schema.isMaxLength(2048)) }),\n Schema.Struct({ reason: Schema.Literals([\"stale-target\", \"unsupported\"]) }),\n]);\n\nconst WriteReply = Schema.Literals([\n \"filled\",\n \"stale-target\",\n \"unsupported-before-write\",\n \"unsupported\",\n]);\n\n// One invocation-local isolated-world handle. Actual nodes and fingerprints never leave the page.\n// This program neither discovers controls nor classifies roles nor observes page content.\nconst prepareFields = `(() => {\n const doc = document;\n let fields = [];\n let form;\n let snapshots = [];\n const describe = el => {\n if (!el || !el.isConnected || el.ownerDocument !== doc || doc !== document) return null;\n const native = el instanceof HTMLTextAreaElement ||\n (el instanceof HTMLSelectElement && !el.multiple) ||\n (el instanceof HTMLInputElement && ['text','email','password','tel','number','month','search','url','date','time','week','datetime-local'].includes(el.type));\n if (!native || el.matches(':disabled') || el.readOnly || !el.form) return null;\n const values = [el.form.action, el.form.method, el.form.enctype, el.name, el.type, el.autocomplete ?? ''];\n if (values.some(value => value.length > 2048)) return null;\n return JSON.stringify(values);\n };\n const validate = () => fields.length > 0 && fields.every((el, index) =>\n el.form === form && describe(el) !== null && describe(el) === snapshots[index]);\n return {\n prepare(selectors) {\n try {\n fields = selectors.map(selector => {\n const matches = doc.querySelectorAll(selector);\n return matches.length === 1 ? matches[0] : null;\n });\n } catch { return {reason: 'stale-target'}; }\n if (fields.some(el => !el) || new Set(fields).size !== fields.length) return {reason: 'stale-target'};\n snapshots = fields.map(describe);\n form = fields[0].form;\n if (!form || snapshots.some(value => value === null) || fields.some(el => el.form !== form)) return {reason: 'unsupported'};\n return {action: form.action};\n },\n target() { return validate() ? {action: form.action} : {reason: 'stale-target'}; },\n fill(index, value) {\n if (!validate()) return 'stale-target';\n const el = fields[index];\n if (el instanceof HTMLSelectElement) {\n const options = [...el.options].filter(option => option.value === value);\n if (options.length !== 1 || options[0].matches(':disabled')) return 'unsupported-before-write';\n }\n let prototype = Object.getPrototypeOf(el);\n let setter;\n while (prototype && !setter) { setter = Object.getOwnPropertyDescriptor(prototype, 'value')?.set; prototype = Object.getPrototypeOf(prototype); }\n if (!setter) return 'unsupported-before-write';\n setter.call(el, value);\n if (el.value !== value) return 'unsupported';\n el.dispatchEvent(new Event('input', {bubbles: true}));\n el.dispatchEvent(new Event('change', {bubbles: true}));\n return 'filled';\n }\n };\n})()`;\n\nconst secretFor = (material: BrowserCredentialMaterial, role: typeof CredentialFieldRole.Type) => {\n if (material._tag === \"LoginCredential\")\n return role === \"username\"\n ? material.username\n : role === \"password\"\n ? material.password\n : undefined;\n switch (role) {\n case \"card-name\":\n return material.name;\n case \"card-number\":\n return material.number;\n case \"card-expiry\":\n return material.expiry;\n case \"card-expiry-month\":\n return material.expiryMonth;\n case \"card-expiry-year\":\n return material.expiryYear;\n case \"card-security-code\":\n return material.securityCode;\n case \"username\":\n case \"password\":\n return undefined;\n }\n};\n\n/**\n * Fill explicit native fields on an existing page without submitting. The owning browser session\n * serializes operations and closes on timeout, interruption or uncertain dispatch; this function releases\n * only its local handles. Ordinary native observations remain available, including credential echoes.\n */\nexport const fillCredential = Effect.fnUntraced(function* (\n input: FillCredentialRequest,\n): Effect.fn.Return<\n CredentialFillResult,\n CredentialFillError,\n BrowserCredentialAccess | BrowserSessionPage\n> {\n const { page, commandTimeoutMillis } = yield* BrowserSessionPage;\n let dispatch: typeof CredentialDispatch.Type = \"not-dispatched\";\n let filled = 0;\n\n const fail = (reason: CredentialFillError[\"reason\"]) =>\n new CredentialFillError({ reason, dispatch, filled, cleanup: \"not-requested\" });\n\n const remote = <A>(run: (signal: AbortSignal) => Promise<A>) =>\n Effect.tryPromise({\n try: async (signal) => {\n try {\n return { ok: true as const, value: await run(signal) };\n } catch {\n return { ok: false as const };\n }\n },\n catch: () => fail(\"provider\"),\n }).pipe(\n Effect.flatMap((result) =>\n result.ok ? Effect.succeed(result.value) : Effect.fail(fail(\"provider\")),\n ),\n );\n\n const release = (handles: ReadonlyArray<{ dispose(): Promise<void> }>) =>\n Effect.promise(async () => {\n await Promise.all(handles.map((handle) => handle.dispose().catch(() => {})));\n }).pipe(Effect.interruptible, Effect.timeoutOption(\"1 second\"), Effect.asVoid);\n\n const acquire = <A extends { dispose(): Promise<void> }>(run: () => Promise<ReadonlyArray<A>>) =>\n Effect.acquireRelease(\n remote(async (signal) => {\n const handles = await run();\n\n if (signal.aborted) {\n await Promise.all(handles.map((handle) => handle.dispose().catch(() => {})));\n throw fail(\"provider\");\n }\n\n return handles;\n }).pipe(Effect.interruptible),\n release,\n );\n\n const origin = (value: string) =>\n Effect.try({\n try: () => {\n const url = new URL(value);\n\n if (url.username || url.password) throw fail(\"denied\");\n\n return url.origin;\n },\n catch: () => fail(\"denied\"),\n }).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(CredentialOrigin)),\n Effect.mapError(() => fail(\"denied\")),\n );\n\n return yield* Effect.gen(function* () {\n const request = yield* Schema.decodeEffect(FillCredentialRequest, {\n onExcessProperty: \"error\",\n })(input).pipe(Effect.mapError(() => fail(\"denied\")));\n\n const roles = request.fields.map((field) => field.role);\n\n if (\n new Set(roles).size !== roles.length ||\n roles.some(\n (role) => (request.kind === \"login\") !== (role === \"username\" || role === \"password\"),\n )\n )\n return yield* fail(\"denied\");\n const access = yield* BrowserCredentialAccess;\n let frame: Frame = page.mainFrame();\n\n for (const selector of request.frame ?? []) {\n const matches = yield* acquire(() => frame.$$(selector));\n const element = matches[0];\n\n if (matches.length !== 1 || element === undefined) return yield* fail(\"stale-target\");\n const child = yield* remote(() => element.contentFrame());\n\n if (child === null) return yield* fail(\"unsupported\");\n frame = child;\n }\n\n const handles = yield* acquire(async () => [\n await frame.isolatedRealm().evaluateHandle(prepareFields),\n ]);\n\n const held = handles[0];\n\n if (held === undefined) return yield* fail(\"provider\");\n\n const inspect = (raw: unknown) =>\n Schema.decodeUnknownEffect(TargetReply)(raw).pipe(\n Effect.mapError(() => fail(\"provider\")),\n Effect.flatMap((reply) =>\n \"reason\" in reply ? Effect.fail(fail(reply.reason)) : Effect.succeed(reply.action),\n ),\n );\n\n const action = yield* remote(() =>\n held.evaluate(\n (state, selectors) => {\n if (typeof state !== \"object\" || state === null) return null;\n\n return Reflect.apply(Reflect.get(state, \"prepare\"), state, [selectors]);\n },\n request.fields.map((field) => field.selector),\n ),\n ).pipe(Effect.flatMap(inspect));\n\n const target = CredentialTarget.make({\n topOrigin: yield* origin(page.url()),\n frameOrigin: yield* origin(frame.url()),\n recipientOrigin: yield* origin(action),\n });\n\n const authorization: CredentialAccessRequest = {\n credential: request.credential,\n kind: request.kind,\n target,\n roles,\n };\n\n const authorize = Effect.suspend(() => access.authorize(authorization)).pipe(\n Effect.mapError((error) => fail(error.reason)),\n );\n\n const validate = Effect.gen(function* () {\n if (\n frame.detached ||\n (yield* origin(page.url())) !== target.topOrigin ||\n (yield* origin(frame.url())) !== target.frameOrigin\n )\n return yield* fail(\"stale-target\");\n\n const current = yield* remote(() =>\n held.evaluate((state) => {\n if (typeof state !== \"object\" || state === null) return null;\n\n return Reflect.apply(Reflect.get(state, \"target\"), state, []);\n }),\n ).pipe(Effect.flatMap(inspect));\n\n if ((yield* origin(current)) !== target.recipientOrigin) return yield* fail(\"stale-target\");\n });\n\n yield* authorize;\n yield* validate;\n\n const raw = yield* access\n .resolve(authorization)\n .pipe(Effect.mapError((error) => fail(error.reason)));\n\n const material = yield* Schema.decodeEffect(\n request.kind === \"login\" ? LoginCredential : CardCredential,\n )(raw).pipe(Effect.mapError(() => fail(\"resolver\")));\n\n for (const role of roles)\n if (secretFor(material, role) === undefined) return yield* fail(\"missing-credential\");\n for (const [index, role] of roles.entries()) {\n yield* authorize;\n yield* validate;\n const value = secretFor(material, role);\n\n if (value === undefined) return yield* fail(\"missing-credential\");\n const previous = dispatch;\n\n const result = yield* remote((signal) => {\n if (signal.aborted) return Promise.reject(fail(\"provider\"));\n dispatch = \"possibly-dispatched\";\n\n return held.evaluate(\n (state, field, secret) => {\n if (typeof state !== \"object\" || state === null) return \"stale-target\";\n\n return Reflect.apply(Reflect.get(state, \"fill\"), state, [field, secret]);\n },\n index,\n Redacted.value(value),\n );\n }).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(WriteReply)),\n Effect.mapError(() => fail(\"provider\")),\n );\n\n if (result === \"stale-target\" || result === \"unsupported-before-write\") {\n dispatch = previous;\n\n return yield* fail(result === \"stale-target\" ? \"stale-target\" : \"unsupported\");\n }\n if (result === \"unsupported\") return yield* fail(\"unsupported\");\n dispatch = \"dispatched\";\n filled++;\n }\n\n return CredentialFillResult.make({ dispatch: \"dispatched\", filled });\n }).pipe(\n Effect.scoped,\n Effect.timeoutOrElse({\n duration: commandTimeoutMillis,\n orElse: () => Effect.fail(fail(\"timeout\")),\n }),\n Effect.catchCause((cause) => {\n if (Cause.hasInterrupts(cause)) return Effect.interrupt;\n if (\n cause.reasons.some(\n (reason) =>\n reason._tag === \"Die\" ||\n (reason._tag === \"Fail\" && !Schema.is(CredentialFillError)(reason.error)),\n )\n )\n return Effect.fail(fail(\"provider\"));\n\n const expected = cause.reasons.find(\n (reason) => reason._tag === \"Fail\" && Schema.is(CredentialFillError)(reason.error),\n );\n\n return Effect.fail(\n fail(\n expected?._tag === \"Fail\" && Schema.is(CredentialFillError)(expected.error)\n ? expected.error.reason\n : \"provider\",\n ),\n );\n }),\n Effect.withTracerEnabled(false),\n );\n});\n","import { Context, Effect, Layer, Redacted, Schema, Stream } from \"effect\";\nimport { FetchHttpClient, HttpClient, HttpClientRequest } from \"effect/unstable/http\";\n\nimport { BrowserRunLiveViewRequest, BrowserRunLiveViewResult } from \"../InteractiveBrowser.ts\";\nimport { browserFailure, BrowserRunFailure } from \"./browser-failure.ts\";\nimport type { BrowserRunLifecycleOptions } from \"./browser-session-lifecycle.ts\";\n\nconst Identity = Schema.Struct({\n sessionId: Schema.String.check(Schema.isUUID()),\n targetId: Schema.NonEmptyString.check(Schema.isMaxLength(256)),\n});\n\nconst Reply = Schema.fromJsonString(\n Schema.Struct({\n id: Identity.fields.targetId,\n options: Schema.Struct({\n mode: Schema.Literal(\"tab\"),\n guardrails: Schema.Struct({ mode: Schema.Literal(\"readonly\") }),\n }),\n devtoolsFrontendUrl: Schema.String,\n }),\n);\n\nconst operation = \"session.readonlyLiveView\";\n\n/** Only the REST endpoint can mint provider-enforced read-only connections. */\nexport class BrowserRunReadonlyLiveView extends Context.Service<\n BrowserRunReadonlyLiveView,\n {\n readonly mint: (\n sessionId: Redacted.Redacted<string>,\n targetId: Redacted.Redacted<string>,\n request: BrowserRunLiveViewRequest,\n ) => Effect.Effect<BrowserRunLiveViewResult, BrowserRunFailure>;\n }\n>()(\"@effect-agent/platform-cloudflare/internal/BrowserRunReadonlyLiveView\") {\n static layer(options: BrowserRunLifecycleOptions) {\n return Layer.effect(\n this,\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient;\n\n const mint = Effect.fnUntraced(\n function* (\n sessionId: Redacted.Redacted<string>,\n targetId: Redacted.Redacted<string>,\n request: BrowserRunLiveViewRequest,\n ) {\n const identity = yield* Schema.decodeEffect(Identity)({\n sessionId: Redacted.value(sessionId),\n targetId: Redacted.value(targetId),\n });\n\n const input = yield* Schema.decodeEffect(BrowserRunLiveViewRequest)(request);\n\n const response = yield* client\n .execute(\n HttpClientRequest.post(\n `https://api.cloudflare.com/client/v4/accounts/${options.accountId}/browser-rendering/devtools/browser/${identity.sessionId}/live_view`,\n ).pipe(\n HttpClientRequest.bearerToken(options.apiToken),\n HttpClientRequest.bodyJsonUnsafe({\n mode: input.mode,\n expiresInMs: input.expiresInMs,\n targetId: identity.targetId,\n guardrails: { mode: \"readonly\" },\n }),\n ),\n )\n .pipe(Effect.provideService(FetchHttpClient.RequestInit, { redirect: \"manual\" }));\n\n if (response.status !== 200)\n return yield* new BrowserRunFailure({\n operation,\n reason: \"provider\",\n status: response.status,\n });\n\n const bytes = yield* Stream.runFoldEffect(\n response.stream,\n () => new Uint8Array(),\n (body, chunk) => {\n if (body.byteLength + chunk.byteLength > 16_384)\n return Effect.fail(new BrowserRunFailure({ operation, reason: \"malformed\" }));\n const combined = new Uint8Array(body.byteLength + chunk.byteLength);\n\n combined.set(body);\n combined.set(chunk, body.byteLength);\n\n return Effect.succeed(combined);\n },\n );\n\n const reply = yield* Schema.decodeEffect(Reply)(new TextDecoder().decode(bytes));\n\n if (reply.id !== identity.targetId)\n return yield* new BrowserRunFailure({ operation, reason: \"malformed\" });\n\n return yield* Schema.decodeEffect(BrowserRunLiveViewResult)({\n devtoolsFrontendUrl: Redacted.make(reply.devtoolsFrontendUrl),\n });\n },\n Effect.mapError((cause) => browserFailure(operation, cause)),\n Effect.withTracerEnabled(false),\n );\n\n return { mint };\n }),\n );\n }\n}\n","/// <reference types=\"@cloudflare/workers-types\" />\n\nimport {\n Cause,\n Clock,\n Context,\n Effect,\n Exit,\n Layer,\n Redacted,\n Schema,\n Semaphore,\n Scope,\n} from \"effect\";\nimport type { Page } from \"puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js\";\n\nimport {\n CredentialFillError,\n type BrowserCredentialAccess,\n type CredentialFillResult,\n type FillCredentialRequest,\n} from \"./BrowserCredentials.ts\";\nimport {\n BrowserRunHandoffRequest,\n BrowserRunHandoffResult,\n BrowserRunHandoffState,\n BrowserRunLiveViewRequest,\n BrowserRunLiveViewResult,\n} from \"./InteractiveBrowser.ts\";\nimport { BrowserRunBinding, type BrowserRunAttachment } from \"./internal/browser-binding.ts\";\nimport { BrowserSessionPage, fillCredential } from \"./internal/browser-credentials.ts\";\nimport { reportBrowserCause, reportedBrowserError } from \"./internal/browser-failure.ts\";\nimport { BrowserRunReadonlyLiveView } from \"./internal/browser-readonly-live-view.ts\";\nimport {\n BrowserRunSessionLifecycle,\n type BrowserRunLifecycleOptions,\n} from \"./internal/browser-session-lifecycle.ts\";\n\nexport {\n BrowserRunHandoffRequest,\n BrowserRunHandoffResult,\n BrowserRunHandoffState,\n BrowserRunLiveViewRequest,\n BrowserRunLiveViewResult,\n};\n\nconst PositiveMillis = Schema.Int.check(\n Schema.isGreaterThan(0),\n Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER),\n);\n\nconst SessionId = Schema.Redacted(Schema.String.check(Schema.isUUID()));\nconst ProviderId = Schema.Redacted(Schema.NonEmptyString.check(Schema.isMaxLength(256)));\n\n/** Private host record, not a model capability. Persist together with the owner's controller state. */\nexport class BrowserSessionReference extends Schema.Class<BrowserSessionReference>(\n \"BrowserSessionReference\",\n)({\n version: Schema.Literal(1),\n sessionId: SessionId,\n contextId: ProviderId,\n targetId: ProviderId,\n expiresAt: PositiveMillis,\n commandTimeoutMillis: PositiveMillis,\n}) {}\n\nexport class BrowserSessionOptions extends Schema.Class<BrowserSessionOptions>(\n \"BrowserSessionOptions\",\n)({\n maxElapsedMillis: PositiveMillis,\n keepAliveMillis: Schema.optionalKey(PositiveMillis.check(Schema.isLessThanOrEqualTo(600_000))),\n commandTimeoutMillis: Schema.optionalKey(PositiveMillis),\n}) {}\n\n/** No SDK text, selectors, page data, or credential values are retained in public failures. */\nexport class BrowserSessionError extends Schema.TaggedError<BrowserSessionError>()(\n \"BrowserSessionError\",\n {\n reason: Schema.Literals([\n \"invalid\",\n \"expired\",\n \"missing-page\",\n \"busy\",\n \"closed\",\n \"provider\",\n \"timeout\",\n \"cleanup\",\n ]),\n dispatch: Schema.Literals([\"not-dispatched\", \"possibly-dispatched\"]),\n cleanup: Schema.Literals([\"not-requested\", \"confirmed\", \"unconfirmed\"]),\n },\n) {}\n\n/**\n * One local attachment to an application-owned browser. Scope release disconnects; it never\n * transfers ownership or closes a healthy remote session. The owner serializes attachments,\n * fences old attempts, authorizes human access, and calls BrowserSessions.close on expiry/stop.\n * Native callbacks are trusted host code: never retain SDK handles or start unawaited work.\n */\nexport interface BrowserSession {\n readonly reference: BrowserSessionReference;\n /**\n * Check current authority under the lock before native dispatch. A settled SDK rejection leaves\n * the session available for inspection, but may have changed the website; never retry blindly.\n * Timeout/interruption fences outstanding SDK work and terminates the exact browser.\n */\n readonly run: <A, E, R>(\n authorize: Effect.Effect<void, E, R>,\n action: (page: Page) => Promise<A>,\n ) => Effect.Effect<A, E | BrowserSessionError, R>;\n /**\n * Resolves host-owned material under fresh credential grants. Never submits or retries a write.\n * Credential timeouts retain acknowledged writes and dispatch evidence alongside cleanup.\n */\n readonly fillCredential: (\n request: FillCredentialRequest,\n ) => Effect.Effect<\n CredentialFillResult,\n CredentialFillError | BrowserSessionError,\n BrowserCredentialAccess\n >;\n readonly handoff: <E, R>(\n authorize: Effect.Effect<void, E, R>,\n request: BrowserRunHandoffRequest,\n ) => Effect.Effect<BrowserRunHandoffResult, E | BrowserSessionError, R>;\n readonly getLiveView: <E, R>(\n authorize: Effect.Effect<void, E, R>,\n request: BrowserRunLiveViewRequest,\n ) => Effect.Effect<BrowserRunLiveViewResult, E | BrowserSessionError, R>;\n /**\n * Mint a provider-enforced read-only connection to this exact page. Requires REST credentials;\n * missing read-only confirmation fails closed, never falling back to an interactive URL.\n * Expiry limits new connections, not established connections or access to visible page data.\n */\n readonly getReadOnlyLiveView: <E, R>(\n authorize: Effect.Effect<void, E, R>,\n request: BrowserRunLiveViewRequest,\n ) => Effect.Effect<BrowserRunLiveViewResult, E | BrowserSessionError, R>;\n readonly getHandoffState: <E, R>(\n authorize: Effect.Effect<void, E, R>,\n ) => Effect.Effect<BrowserRunHandoffState, E | BrowserSessionError, R>;\n}\n\nconst failure = (\n reason: BrowserSessionError[\"reason\"],\n dispatch: BrowserSessionError[\"dispatch\"] = \"not-dispatched\",\n cleanup: BrowserSessionError[\"cleanup\"] = \"not-requested\",\n) => new BrowserSessionError({ reason, dispatch, cleanup });\n\nconst decode = <A>(schema: Schema.Codec<A>, input: unknown) =>\n Schema.decodeUnknownEffect(schema, { onExcessProperty: \"error\" })(input).pipe(\n Effect.mapError(() => failure(\"invalid\")),\n );\n\n// Catch inside the Promise before workerd can report an unhandled foreign diagnostic.\nconst native = Effect.fnUntraced(function* <A>(\n operation: string,\n action: (signal: AbortSignal) => Promise<A>,\n) {\n const runReport = Effect.runPromiseWith(yield* Effect.context<never>());\n\n return yield* Effect.tryPromise({\n try: async (signal) => {\n try {\n return { ok: true as const, value: await action(signal) };\n } catch (cause) {\n if (!signal.aborted || cause !== signal.reason)\n await runReport(reportBrowserCause(operation, Cause.fail(cause)));\n\n return { ok: false as const };\n }\n },\n catch: () => failure(\"provider\"),\n }).pipe(\n Effect.flatMap((result) =>\n result.ok\n ? Effect.succeed(result.value)\n : Effect.fail(reportedBrowserError(failure(\"provider\"))),\n ),\n Effect.withTracerEnabled(false),\n );\n});\n\nconst targetId = (page: Page) =>\n native(\"session.target\", async () => {\n const cdp = await page.createCDPSession();\n\n try {\n return (await cdp.send(\"Target.getTargetInfo\")).targetInfo.targetId;\n } finally {\n await cdp.detach();\n }\n });\n\nexport interface BrowserSessionsOptions extends BrowserRunLifecycleOptions {\n readonly browser: Pick<BrowserRun, \"fetch\">;\n}\n\n/** Native Cloudflare sessions; no framework browser workflow, checkpoint transfer, or observation policy. */\nexport class BrowserSessions extends Context.Service<\n BrowserSessions,\n {\n /**\n * Allocate once and commit its private reference in retain. Failed/uncommitted creation closes\n * the allocation. After retain succeeds the application owns remote cleanup, independent of\n * attempt Scopes. A lost allocation reply can remain indeterminate until provider idle expiry.\n */\n readonly create: <E, R>(\n options: BrowserSessionOptions,\n retain: (reference: BrowserSessionReference) => Effect.Effect<void, E, R>,\n ) => Effect.Effect<BrowserSessionReference, E | BrowserSessionError, R>;\n /** Attach only the exact saved context/page. Never recreate missing/expired state. */\n readonly attach: (\n reference: BrowserSessionReference,\n ) => Effect.Effect<BrowserSession, BrowserSessionError, Scope.Scope>;\n /** Refresh provider inactivity only; the owner must still enforce its expiresAt. */\n readonly keepAlive: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, BrowserSessionError>;\n readonly close: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, BrowserSessionError>;\n }\n>()(\"@effect-agent/platform-cloudflare/BrowserSessions\") {\n static readonly layerNoDeps = Layer.effect(\n this,\n Effect.gen(function* () {\n const binding = yield* BrowserRunBinding;\n const lifecycle = yield* BrowserRunSessionLifecycle;\n const readonlyLiveView = yield* BrowserRunReadonlyLiveView;\n\n const close = (sessionId: Redacted.Redacted<string>) =>\n decode(SessionId, sessionId).pipe(\n Effect.flatMap((id) =>\n lifecycle\n .close(id)\n .pipe(Effect.mapError(() => failure(\"cleanup\", \"not-dispatched\", \"unconfirmed\"))),\n ),\n );\n\n const cleanup = (sessionId: Redacted.Redacted<string>) =>\n close(sessionId).pipe(\n Effect.as(\"confirmed\" as const),\n Effect.catchCause((cause) =>\n reportBrowserCause(\"session.close\", cause).pipe(Effect.as(\"unconfirmed\" as const)),\n ),\n );\n\n const connect = Effect.fnUntraced(function* (sessionId: Redacted.Redacted<string>) {\n let attachment: BrowserRunAttachment | undefined;\n\n const retire = Effect.suspend(() =>\n attachment === undefined\n ? Effect.void\n : attachment.retire.pipe(\n // Dispatch is already fenced; give the socket close handshake the same\n // bounded window as keepalive instead of failing a settled command after 1s.\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () => Effect.fail(failure(\"cleanup\")),\n }),\n Effect.catchCause((cause) =>\n reportBrowserCause(\"session.disconnect\", cause).pipe(\n Effect.andThen(Effect.die(failure(\"cleanup\", \"not-dispatched\", \"unconfirmed\"))),\n ),\n ),\n ),\n );\n\n yield* Effect.addFinalizer(() => retire);\n\n const browser = yield* native(\"session.connect\", (signal) => {\n attachment = binding.connect(Redacted.value(sessionId), \"session.connect\", signal);\n\n return attachment.browser;\n });\n\n return { browser, retire };\n });\n\n const create = <E, R>(\n input: BrowserSessionOptions,\n retain: (reference: BrowserSessionReference) => Effect.Effect<void, E, R>,\n ) =>\n Effect.gen(function* () {\n const options = yield* decode(BrowserSessionOptions, input);\n const expiresAt = (yield* Clock.currentTimeMillis) + options.maxElapsedMillis;\n\n if (!Number.isSafeInteger(expiresAt)) return yield* failure(\"invalid\");\n let sessionId: Redacted.Redacted<string> | undefined;\n let retained = false;\n const runCleanup = Effect.runPromiseWith(yield* Effect.context<never>());\n\n yield* Effect.addFinalizer(() =>\n sessionId === undefined || retained ? Effect.void : cleanup(sessionId),\n );\n sessionId = yield* native(\"session.acquire\", async (signal) => {\n const id = Redacted.make(\n await binding.acquire(options.keepAliveMillis ?? 600_000, \"session.acquire\"),\n );\n\n if (signal.aborted) {\n await runCleanup(cleanup(id));\n signal.throwIfAborted();\n }\n\n return id;\n });\n const { browser } = yield* connect(sessionId);\n\n const page = yield* native(\"session.page\", async () => {\n const context = await browser.createBrowserContext();\n\n return await context.newPage();\n });\n\n const reference = yield* decode(BrowserSessionReference, {\n version: 1,\n sessionId,\n contextId: Redacted.make(page.browserContext().id ?? \"\"),\n targetId: Redacted.make(yield* targetId(page)),\n expiresAt,\n commandTimeoutMillis: options.commandTimeoutMillis ?? 30_000,\n });\n\n yield* Effect.uninterruptibleMask((restore) =>\n restore(retain(reference)).pipe(\n Effect.tap(() =>\n Effect.sync(() => {\n retained = true;\n }),\n ),\n ),\n );\n\n return reference;\n }).pipe(\n Effect.scoped,\n Effect.timeoutOrElse({\n duration: \"30 seconds\",\n orElse: () => Effect.fail(failure(\"timeout\")),\n }),\n Effect.withTracerEnabled(false),\n );\n\n const attachPage = Effect.fnUntraced(function* (input: BrowserSessionReference) {\n const reference = yield* decode(BrowserSessionReference, input);\n\n if (reference.expiresAt <= (yield* Clock.currentTimeMillis))\n return yield* failure(\"expired\");\n const scope = yield* Effect.scope;\n const { browser, retire } = yield* connect(reference.sessionId);\n\n const context = browser\n .browserContexts()\n .find((value) => value.id === Redacted.value(reference.contextId));\n\n if (context === undefined) return yield* failure(\"missing-page\");\n let page: Page | undefined;\n\n for (const candidate of yield* native(\"session.pages\", () => context.pages())) {\n if ((yield* targetId(candidate)) === Redacted.value(reference.targetId)) {\n page = candidate;\n break;\n }\n }\n if (page === undefined) return yield* failure(\"missing-page\");\n const currentPage = page;\n const lock = yield* Semaphore.make(1);\n let invalid = false;\n\n const terminate = Effect.suspend(() => {\n invalid = true;\n\n return retire.pipe(\n Effect.catchCause((cause) => reportBrowserCause(\"session.disconnect\", cause)),\n Effect.andThen(cleanup(reference.sessionId)),\n );\n });\n\n const runEffect = <A, E, R>(\n action: (commandTimeoutMillis: number) => Effect.Effect<A, E, R>,\n ) =>\n lock\n .withPermitsIfAvailable(1)(\n Effect.gen(function* () {\n if (invalid || scope.state._tag === \"Closed\" || !browser.isConnected())\n return yield* failure(\"closed\");\n const remaining = reference.expiresAt - (yield* Clock.currentTimeMillis);\n\n if (remaining <= 0) {\n return yield* failure(\"expired\", \"not-dispatched\", yield* terminate);\n }\n\n return yield* action(Math.min(remaining, reference.commandTimeoutMillis)).pipe(\n Effect.catchDefect((defect) =>\n reportBrowserCause(\"session.command\", Cause.die(defect)).pipe(\n Effect.andThen(terminate),\n Effect.flatMap((closed) =>\n Effect.fail(failure(\"provider\", \"possibly-dispatched\", closed)),\n ),\n ),\n ),\n Effect.onInterrupt(() => terminate),\n );\n }),\n )\n .pipe(\n Effect.flatMap(Effect.fromOption(() => failure(\"busy\"))),\n Effect.withTracerEnabled(false),\n );\n\n const run = <A, E, R>(\n authorize: Effect.Effect<void, E, R>,\n action: (page: Page) => Promise<A>,\n terminateOnError = false,\n ) =>\n runEffect((commandTimeoutMillis) =>\n authorize.pipe(\n Effect.andThen(() =>\n native(\"session.command\", () => action(currentPage)).pipe(\n Effect.catch((error) =>\n Effect.gen(function* () {\n const closed = terminateOnError ? yield* terminate : \"not-requested\";\n\n return yield* reportedBrowserError(\n failure(error.reason, \"possibly-dispatched\", closed),\n );\n }),\n ),\n ),\n ),\n Effect.timeoutOrElse({\n duration: commandTimeoutMillis,\n orElse: () =>\n terminate.pipe(\n Effect.flatMap((closed) =>\n Effect.fail(failure(\"timeout\", \"possibly-dispatched\", closed)),\n ),\n ),\n }),\n ),\n );\n\n const command = <A, E, R>(\n authorize: Effect.Effect<void, E, R>,\n method: string,\n parameters: Record<string, string | number>,\n schema: Schema.Codec<A>,\n ) =>\n run(\n authorize,\n async (page) => {\n const cdp = await page.createCDPSession();\n\n try {\n const result: unknown = await Reflect.apply(cdp.send, cdp, [method, parameters]);\n\n return Schema.decodeUnknownSync(schema)(result);\n } finally {\n await cdp.detach();\n }\n },\n method === \"Cloudflare.handoff\",\n );\n\n const session: BrowserSession = {\n reference,\n run,\n fillCredential: (request) =>\n runEffect((commandTimeoutMillis) =>\n fillCredential(request).pipe(\n Effect.provideService(BrowserSessionPage, {\n page: currentPage,\n commandTimeoutMillis,\n }),\n Effect.catchIf(\n (error) => error.reason === \"timeout\" || error.dispatch === \"possibly-dispatched\",\n (error) =>\n terminate.pipe(\n Effect.flatMap((cleanup) =>\n Effect.fail(CredentialFillError.make({ ...error, cleanup })),\n ),\n ),\n ),\n ),\n ),\n handoff: (authorize, request) =>\n decode(BrowserRunHandoffRequest, request).pipe(\n Effect.flatMap((value) =>\n command(\n authorize,\n \"Cloudflare.handoff\",\n { instructions: value.instructions, timeout: value.timeout },\n Schema.Struct({\n handoffId: Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n }),\n ),\n ),\n Effect.map((value) =>\n BrowserRunHandoffResult.make({ handoffId: Redacted.make(value.handoffId) }),\n ),\n ),\n getLiveView: (authorize, request) =>\n decode(BrowserRunLiveViewRequest, request).pipe(\n Effect.flatMap((value) =>\n command(\n authorize,\n \"Cloudflare.getLiveView\",\n { mode: value.mode, expiresInMs: value.expiresInMs },\n Schema.Struct({ devtoolsFrontendUrl: Schema.String }),\n ),\n ),\n Effect.flatMap((value) =>\n decode(BrowserRunLiveViewResult, {\n devtoolsFrontendUrl: Redacted.make(value.devtoolsFrontendUrl),\n }),\n ),\n ),\n getReadOnlyLiveView: (authorize, request) =>\n decode(BrowserRunLiveViewRequest, request).pipe(\n Effect.flatMap((value) =>\n runEffect((commandTimeoutMillis) =>\n authorize.pipe(\n Effect.andThen(() =>\n readonlyLiveView.mint(reference.sessionId, reference.targetId, value).pipe(\n Effect.tapCause((cause) =>\n reportBrowserCause(\"session.readonlyLiveView\", cause),\n ),\n Effect.mapError(() => reportedBrowserError(failure(\"provider\"))),\n ),\n ),\n Effect.timeoutOrElse({\n duration: commandTimeoutMillis,\n orElse: () => Effect.fail(failure(\"timeout\")),\n }),\n ),\n ),\n ),\n ),\n getHandoffState: (authorize) =>\n command(\n authorize,\n \"Cloudflare.getHandoffState\",\n {},\n Schema.Struct({\n active: Schema.Boolean,\n handoffId: Schema.optionalKey(\n Schema.NonEmptyString.check(Schema.isMaxLength(1024)),\n ),\n durationMs: Schema.optionalKey(Schema.Natural),\n }),\n ).pipe(\n Effect.map((value) =>\n BrowserRunHandoffState.make({\n active: value.active,\n ...(value.handoffId === undefined\n ? {}\n : { handoffId: Redacted.make(value.handoffId) }),\n ...(value.durationMs === undefined ? {} : { durationMs: value.durationMs }),\n }),\n ),\n ),\n };\n\n return session;\n });\n\n const attach = Effect.fnUntraced(function* (input: BrowserSessionReference) {\n const reference = yield* decode(BrowserSessionReference, input);\n const scope = yield* Scope.fork(yield* Effect.scope);\n\n return yield* attachPage(reference).pipe(\n Effect.provideService(Scope.Scope, scope),\n Effect.timeoutOrElse({\n duration: reference.commandTimeoutMillis,\n orElse: () =>\n reportBrowserCause(\"session.connect\", Cause.fail(failure(\"timeout\"))).pipe(\n Effect.andThen(Effect.fail(reportedBrowserError(failure(\"timeout\")))),\n ),\n }),\n Effect.onExit((exit) => (Exit.isFailure(exit) ? Scope.close(scope, exit) : Effect.void)),\n );\n });\n\n return BrowserSessions.of({\n create,\n attach,\n close,\n keepAlive: (sessionId) =>\n decode(SessionId, sessionId).pipe(\n Effect.flatMap((id) =>\n binding.keepAlive(Redacted.value(id)).pipe(\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () => Effect.fail(failure(\"timeout\")),\n }),\n Effect.catch((error) =>\n reportBrowserCause(\"session.keepAlive\", Cause.fail(error)).pipe(\n Effect.andThen(\n Effect.fail(\n reportedBrowserError(\n failure(error.reason === \"timeout\" ? \"timeout\" : \"provider\"),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n Effect.withTracerEnabled(false),\n ),\n });\n }),\n );\n\n static layer(options: BrowserSessionsOptions) {\n return this.layerNoDeps.pipe(\n Layer.provide(BrowserRunBinding.layer(options.browser)),\n Layer.provide(BrowserRunSessionLifecycle.layer(options)),\n Layer.provide(BrowserRunReadonlyLiveView.layer(options)),\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { _ as BrowserRunLiveViewRequest, i as BrowserRunHandoffState, n as BrowserRunHandoffRequest, r as BrowserRunHandoffResult, v as BrowserRunLiveViewResult } from "./InteractiveBrowser-BnqY_Y-F.mjs";
|
|
2
|
-
import { i as BrowserSessionReference, n as BrowserSessionError, o as BrowserSessions, r as BrowserSessionOptions, s as BrowserSessionsOptions, t as BrowserSession } from "./BrowserSession-
|
|
2
|
+
import { i as BrowserSessionReference, n as BrowserSessionError, o as BrowserSessions, r as BrowserSessionOptions, s as BrowserSessionsOptions, t as BrowserSession } from "./BrowserSession-DP6b-cpL.mjs";
|
|
3
3
|
export { BrowserRunHandoffRequest, BrowserRunHandoffResult, BrowserRunHandoffState, BrowserRunLiveViewRequest, BrowserRunLiveViewResult, BrowserSession, BrowserSessionError, BrowserSessionOptions, BrowserSessionReference, BrowserSessions, BrowserSessionsOptions };
|
package/dist/BrowserSession.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import "./BrowserCredentials.mjs";
|
|
2
|
-
import { c as BrowserRunLiveViewResult, n as BrowserRunHandoffResult, r as BrowserRunHandoffState, s as BrowserRunLiveViewRequest, t as BrowserRunHandoffRequest } from "./InteractiveBrowser-
|
|
3
|
-
import { a as BrowserSessions, n as BrowserSessionOptions, r as BrowserSessionReference, t as BrowserSessionError } from "./BrowserSession-
|
|
2
|
+
import { c as BrowserRunLiveViewResult, n as BrowserRunHandoffResult, r as BrowserRunHandoffState, s as BrowserRunLiveViewRequest, t as BrowserRunHandoffRequest } from "./InteractiveBrowser-CxFT-Nwm.mjs";
|
|
3
|
+
import { a as BrowserSessions, n as BrowserSessionOptions, r as BrowserSessionReference, t as BrowserSessionError } from "./BrowserSession-DWoRC_iM.mjs";
|
|
4
4
|
export { BrowserRunHandoffRequest, BrowserRunHandoffResult, BrowserRunHandoffState, BrowserRunLiveViewRequest, BrowserRunLiveViewResult, BrowserSessionError, BrowserSessionOptions, BrowserSessionReference, BrowserSessions };
|
|
@@ -692,53 +692,6 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
692
692
|
readonly createdAt: string;
|
|
693
693
|
readonly deploymentId: string;
|
|
694
694
|
readonly payload: {
|
|
695
|
-
readonly _tag: "SubagentStarted";
|
|
696
|
-
readonly runId: string;
|
|
697
|
-
readonly toolCallId: string;
|
|
698
|
-
readonly childThreadId: string;
|
|
699
|
-
readonly childSubmissionId: string;
|
|
700
|
-
readonly childReceiptId: string;
|
|
701
|
-
readonly childRunId: string;
|
|
702
|
-
} | {
|
|
703
|
-
readonly _tag: "ToolCallPrepared";
|
|
704
|
-
readonly runId: string;
|
|
705
|
-
readonly turnId: string;
|
|
706
|
-
readonly turn: number;
|
|
707
|
-
readonly toolCallId: string;
|
|
708
|
-
readonly toolName: string;
|
|
709
|
-
readonly parameters: Schema.Json;
|
|
710
|
-
readonly parametersDigest: string;
|
|
711
|
-
readonly executionKind?: "delegation" | "orchestration" | "ordinary" | undefined;
|
|
712
|
-
readonly executionClass?: "idempotent" | "readonly" | "uncertain" | undefined;
|
|
713
|
-
readonly replay?: string | undefined;
|
|
714
|
-
} | {
|
|
715
|
-
readonly _tag: "ToolCallUnknown";
|
|
716
|
-
readonly runId: string;
|
|
717
|
-
readonly turn: number;
|
|
718
|
-
readonly toolCallId: string;
|
|
719
|
-
readonly toolName: string;
|
|
720
|
-
readonly reason: string;
|
|
721
|
-
} | {
|
|
722
|
-
readonly _tag: "ToolApprovalDecided";
|
|
723
|
-
readonly runId: string;
|
|
724
|
-
readonly turn: number;
|
|
725
|
-
readonly toolCallId: string;
|
|
726
|
-
readonly decision: "approved" | "denied";
|
|
727
|
-
readonly resolver: string;
|
|
728
|
-
readonly reason: string;
|
|
729
|
-
} | {
|
|
730
|
-
readonly _tag: "ToolCallResolved";
|
|
731
|
-
readonly runId: string;
|
|
732
|
-
readonly toolCallId: string;
|
|
733
|
-
readonly resolution: "completed-with-result" | "failed-with-error" | "never-started" | "safe-retry";
|
|
734
|
-
readonly author: string;
|
|
735
|
-
readonly reason: string;
|
|
736
|
-
} | {
|
|
737
|
-
readonly _tag: "AbortRequested";
|
|
738
|
-
readonly submissionId: string;
|
|
739
|
-
readonly author: string;
|
|
740
|
-
readonly reason: string;
|
|
741
|
-
} | {
|
|
742
695
|
readonly _tag: "ThreadCreated";
|
|
743
696
|
readonly agentId: string;
|
|
744
697
|
readonly definitions: {
|
|
@@ -930,6 +883,18 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
930
883
|
readonly inputTokens?: number | undefined;
|
|
931
884
|
readonly outputTokens?: number | undefined;
|
|
932
885
|
readonly costMicrousd?: number | undefined;
|
|
886
|
+
} | {
|
|
887
|
+
readonly _tag: "ToolCallPrepared";
|
|
888
|
+
readonly runId: string;
|
|
889
|
+
readonly turnId: string;
|
|
890
|
+
readonly turn: number;
|
|
891
|
+
readonly toolCallId: string;
|
|
892
|
+
readonly toolName: string;
|
|
893
|
+
readonly parameters: Schema.Json;
|
|
894
|
+
readonly parametersDigest: string;
|
|
895
|
+
readonly executionKind?: "delegation" | "orchestration" | "ordinary" | undefined;
|
|
896
|
+
readonly executionClass?: "idempotent" | "readonly" | "uncertain" | undefined;
|
|
897
|
+
readonly replay?: string | undefined;
|
|
933
898
|
} | {
|
|
934
899
|
readonly _tag: "ToolCallSettled";
|
|
935
900
|
readonly toolSelection?: {
|
|
@@ -941,6 +906,20 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
941
906
|
readonly result: Schema.Json;
|
|
942
907
|
readonly isFailure: boolean;
|
|
943
908
|
readonly budgetRejected?: true | undefined;
|
|
909
|
+
} | {
|
|
910
|
+
readonly _tag: "ToolCallUnknown";
|
|
911
|
+
readonly runId: string;
|
|
912
|
+
readonly turn: number;
|
|
913
|
+
readonly toolCallId: string;
|
|
914
|
+
readonly toolName: string;
|
|
915
|
+
readonly reason: string;
|
|
916
|
+
} | {
|
|
917
|
+
readonly _tag: "ToolCallResolved";
|
|
918
|
+
readonly runId: string;
|
|
919
|
+
readonly toolCallId: string;
|
|
920
|
+
readonly resolution: "completed-with-result" | "failed-with-error" | "never-started" | "safe-retry";
|
|
921
|
+
readonly author: string;
|
|
922
|
+
readonly reason: string;
|
|
944
923
|
} | {
|
|
945
924
|
readonly _tag: "ToolStepSettled";
|
|
946
925
|
readonly runId: string;
|
|
@@ -956,6 +935,14 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
956
935
|
readonly toolCallId: string;
|
|
957
936
|
readonly toolName: string;
|
|
958
937
|
readonly parametersDigest: string;
|
|
938
|
+
} | {
|
|
939
|
+
readonly _tag: "ToolApprovalDecided";
|
|
940
|
+
readonly runId: string;
|
|
941
|
+
readonly turn: number;
|
|
942
|
+
readonly toolCallId: string;
|
|
943
|
+
readonly decision: "approved" | "denied";
|
|
944
|
+
readonly resolver: string;
|
|
945
|
+
readonly reason: string;
|
|
959
946
|
} | {
|
|
960
947
|
readonly _tag: "ModelResponseInterrupted";
|
|
961
948
|
readonly runId: string;
|
|
@@ -982,6 +969,11 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
982
969
|
readonly runDisposition?: Schema.Json | undefined;
|
|
983
970
|
readonly finishReason?: "budget-exhausted" | undefined;
|
|
984
971
|
readonly exhausted?: "tokens" | "tool-calls" | "turns" | undefined;
|
|
972
|
+
} | {
|
|
973
|
+
readonly _tag: "AbortRequested";
|
|
974
|
+
readonly submissionId: string;
|
|
975
|
+
readonly author: string;
|
|
976
|
+
readonly reason: string;
|
|
985
977
|
} | {
|
|
986
978
|
readonly _tag: "SubmissionSettled";
|
|
987
979
|
readonly submissionId: string;
|
|
@@ -1116,6 +1108,14 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
1116
1108
|
readonly childLifetimes?: readonly ("attached" | "background")[] | undefined;
|
|
1117
1109
|
} | undefined;
|
|
1118
1110
|
readonly depth?: number | undefined;
|
|
1111
|
+
} | {
|
|
1112
|
+
readonly _tag: "SubagentStarted";
|
|
1113
|
+
readonly runId: string;
|
|
1114
|
+
readonly toolCallId: string;
|
|
1115
|
+
readonly childThreadId: string;
|
|
1116
|
+
readonly childSubmissionId: string;
|
|
1117
|
+
readonly childReceiptId: string;
|
|
1118
|
+
readonly childRunId: string;
|
|
1119
1119
|
} | {
|
|
1120
1120
|
readonly _tag: "SubagentJoined";
|
|
1121
1121
|
readonly runId: string;
|
|
@@ -1600,18 +1600,43 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
1600
1600
|
readonly message: string;
|
|
1601
1601
|
readonly cause?: Schema.Json | undefined;
|
|
1602
1602
|
} | {
|
|
1603
|
-
readonly _tag: "
|
|
1604
|
-
readonly
|
|
1603
|
+
readonly _tag: "ThreadNotMaterialized";
|
|
1604
|
+
readonly threadId: string;
|
|
1605
1605
|
} | {
|
|
1606
|
-
readonly _tag: "
|
|
1607
|
-
readonly
|
|
1608
|
-
readonly
|
|
1609
|
-
readonly
|
|
1606
|
+
readonly _tag: "ThreadStoreError";
|
|
1607
|
+
readonly operation: string;
|
|
1608
|
+
readonly message: string;
|
|
1609
|
+
readonly cause?: Schema.Json | undefined;
|
|
1610
|
+
readonly diagnostic?: {
|
|
1611
|
+
readonly causeTag: string;
|
|
1612
|
+
readonly operation: string;
|
|
1613
|
+
readonly decoder?: string | undefined;
|
|
1614
|
+
readonly issueTag?: string | undefined;
|
|
1615
|
+
readonly sequence?: number | undefined;
|
|
1616
|
+
} | undefined;
|
|
1610
1617
|
} | {
|
|
1611
1618
|
readonly _tag: "LedgerError";
|
|
1612
1619
|
readonly operation: string;
|
|
1613
1620
|
readonly message: string;
|
|
1614
1621
|
readonly cause?: import("effect-agent/failure-diagnostic").Diagnostic | undefined;
|
|
1622
|
+
} | {
|
|
1623
|
+
readonly _tag: "AppendConflict";
|
|
1624
|
+
readonly threadId: string;
|
|
1625
|
+
readonly batchId: string;
|
|
1626
|
+
readonly reason: "batch-digest" | "record-identity" | "tail";
|
|
1627
|
+
readonly actualTailSequence?: number | undefined;
|
|
1628
|
+
readonly actualTailDigest?: string | undefined;
|
|
1629
|
+
} | {
|
|
1630
|
+
readonly _tag: "FenceRejected";
|
|
1631
|
+
readonly threadId: string;
|
|
1632
|
+
readonly actualEpoch: number;
|
|
1633
|
+
readonly attemptedEpoch: number;
|
|
1634
|
+
} | {
|
|
1635
|
+
readonly _tag: "OperationDenied";
|
|
1636
|
+
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
1637
|
+
readonly reason: string;
|
|
1638
|
+
readonly threadId?: string | undefined;
|
|
1639
|
+
readonly submissionId?: string | undefined;
|
|
1615
1640
|
} | {
|
|
1616
1641
|
readonly _tag: "AdmissionConflict";
|
|
1617
1642
|
readonly threadId: string;
|
|
@@ -1628,13 +1653,6 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
1628
1653
|
} | {
|
|
1629
1654
|
readonly _tag: "AgentInputError";
|
|
1630
1655
|
readonly message: string;
|
|
1631
|
-
} | {
|
|
1632
|
-
readonly _tag: "AppendConflict";
|
|
1633
|
-
readonly threadId: string;
|
|
1634
|
-
readonly batchId: string;
|
|
1635
|
-
readonly reason: "batch-digest" | "record-identity" | "tail";
|
|
1636
|
-
readonly actualTailSequence?: number | undefined;
|
|
1637
|
-
readonly actualTailDigest?: string | undefined;
|
|
1638
1656
|
} | {
|
|
1639
1657
|
readonly _tag: "DigestError";
|
|
1640
1658
|
readonly message: string;
|
|
@@ -1642,32 +1660,6 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
1642
1660
|
} | {
|
|
1643
1661
|
readonly _tag: "DurableRuntimeFailpointError";
|
|
1644
1662
|
readonly location: "abort:after-intent" | "approval:after-request-append" | "approval:after-suspend" | "checkpoint:after-save" | "checkpoint:before-save" | "claim:after-claim" | "compaction:after-canonical-append" | "compaction:before-canonical-append" | "input:after-canonical-append" | "join:after-canonical-append" | "join:after-claim" | "policy:after-reservation-append" | "policy:before-reservation-append" | "resolve:after-intent" | "run:after-duration-append" | "run:after-start-append" | "run:before-duration-append" | "run:before-start-append" | "step:after-step-append" | "subagent:after-admit" | "subagent:after-child-abort-intent" | "subagent:after-child-ready" | "subagent:after-join-append" | "subagent:after-release" | "subagent:after-release-pending" | "subagent:after-request-append" | "subagent:after-reserve" | "subagent:after-sibling-settle" | "subagent:after-start-append" | "subagent:after-suspend" | "subagent:before-join-append" | "submit:after-admit" | "submit:after-materialize" | "terminalize:after-canonical-append" | "terminalize:after-reserve" | "tools:after-prepared-append" | "tools:after-unavailable-append" | "tools:before-prepared-append" | "tools:before-unavailable-append" | "turn:after-canonical-append" | "turn:after-response-append" | "turn:after-results-append" | "update:after-canonical-append" | "update:after-delivery-insert" | "update:before-canonical-append" | "update:before-delivery-insert" | "worker:after-completion-append" | "worker:after-origin-append" | "worker:after-report-append" | "worker:after-report-delivery" | "worker:after-source-append" | "worker:after-stop-append" | "worker:after-stop-seal" | "worker:after-subtree-append" | "worker:before-completion-append" | "worker:before-origin-append" | "worker:before-report-append" | "worker:before-report-delivery" | "worker:before-source-append" | "worker:before-stop-append" | "worker:before-stop-seal" | "worker:before-subtree-append";
|
|
1645
|
-
} | {
|
|
1646
|
-
readonly _tag: "FenceRejected";
|
|
1647
|
-
readonly threadId: string;
|
|
1648
|
-
readonly actualEpoch: number;
|
|
1649
|
-
readonly attemptedEpoch: number;
|
|
1650
|
-
} | {
|
|
1651
|
-
readonly _tag: "ThreadNotMaterialized";
|
|
1652
|
-
readonly threadId: string;
|
|
1653
|
-
} | {
|
|
1654
|
-
readonly _tag: "ThreadStoreError";
|
|
1655
|
-
readonly operation: string;
|
|
1656
|
-
readonly message: string;
|
|
1657
|
-
readonly cause?: Schema.Json | undefined;
|
|
1658
|
-
readonly diagnostic?: {
|
|
1659
|
-
readonly causeTag: string;
|
|
1660
|
-
readonly operation: string;
|
|
1661
|
-
readonly decoder?: string | undefined;
|
|
1662
|
-
readonly issueTag?: string | undefined;
|
|
1663
|
-
readonly sequence?: number | undefined;
|
|
1664
|
-
} | undefined;
|
|
1665
|
-
} | {
|
|
1666
|
-
readonly _tag: "OperationDenied";
|
|
1667
|
-
readonly operation: "abort" | "awaitSettlement" | "explain" | "observe" | "resolveApproval" | "resolveUnknown" | "retry" | "scanObligations" | "verify" | "wake";
|
|
1668
|
-
readonly reason: string;
|
|
1669
|
-
readonly threadId?: string | undefined;
|
|
1670
|
-
readonly submissionId?: string | undefined;
|
|
1671
1663
|
} | {
|
|
1672
1664
|
readonly _tag: "SettlementConflict";
|
|
1673
1665
|
readonly submissionId: string;
|
|
@@ -1676,6 +1668,14 @@ export declare const encodeHostResponse: (input: AbortRecorded | ApprovalRecorde
|
|
|
1676
1668
|
readonly _tag: "JoinedToHost";
|
|
1677
1669
|
readonly submissionId: string;
|
|
1678
1670
|
readonly hostSubmissionId: string;
|
|
1671
|
+
} | {
|
|
1672
|
+
readonly _tag: "AdmissionLimitExceeded";
|
|
1673
|
+
readonly limit: "database-bytes" | "input-bytes" | "queue-depth";
|
|
1674
|
+
readonly actual: number;
|
|
1675
|
+
readonly maximum: number;
|
|
1676
|
+
} | {
|
|
1677
|
+
readonly _tag: "HostProtocolError";
|
|
1678
|
+
readonly message: string;
|
|
1679
1679
|
} | {
|
|
1680
1680
|
readonly _tag: "ApprovalConflict";
|
|
1681
1681
|
readonly submissionId: string;
|
|
@@ -1918,6 +1918,6 @@ const CloudflareInteractiveBrowser = {
|
|
|
1918
1918
|
hostLayer: (options) => browserRunInteractiveHostLayer().pipe(Layer.provide(interactiveBindingLayer(options)))
|
|
1919
1919
|
};
|
|
1920
1920
|
//#endregion
|
|
1921
|
-
export { BrowserRunCleanupError as _, BrowserRunInteractiveCheckpoint as a,
|
|
1921
|
+
export { reportedBrowserError as C, reportBrowserCause as S, BrowserRunCleanupError as _, BrowserRunInteractiveCheckpoint as a, BrowserRunFailure as b, BrowserRunLiveViewResult as c, BrowserRunViewport as d, CloudflareInteractiveBrowser as f, isBrowserRunUndispatchedActionError as g, browserRunInteractiveLayer as h, BrowserRunInteractiveBinding as i, BrowserRunPageIdentity as l, browserRunInteractiveImplementation as m, BrowserRunHandoffResult as n, BrowserRunInteractiveHost as o, browserRunInteractiveHostLayer as p, BrowserRunHandoffState as r, BrowserRunLiveViewRequest as s, BrowserRunHandoffRequest as t, BrowserRunPageObservation as u, BrowserRunSessionLifecycle as v, browserFailure as x, BrowserRunBinding as y };
|
|
1922
1922
|
|
|
1923
|
-
//# sourceMappingURL=InteractiveBrowser-
|
|
1923
|
+
//# sourceMappingURL=InteractiveBrowser-CxFT-Nwm.mjs.map
|