effect-browserbase 0.1.0-beta.104 → 0.2.0-beta.0

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.
Files changed (135) hide show
  1. package/README.md +61 -305
  2. package/dist/Account.d.mts +4 -6
  3. package/dist/Account.mjs +4 -9
  4. package/dist/Account.mjs.map +1 -1
  5. package/dist/{Acquisition-WBafHwXH.mjs → Acquisition-D8o4jtCg.mjs} +22 -68
  6. package/dist/Acquisition-D8o4jtCg.mjs.map +1 -0
  7. package/dist/Agents.d.mts +4 -6
  8. package/dist/Agents.mjs +3 -19
  9. package/dist/Agents.mjs.map +1 -1
  10. package/dist/Allocation.d.mts +9 -11
  11. package/dist/Allocation.mjs +2 -4
  12. package/dist/Allocation.mjs.map +1 -1
  13. package/dist/Browser.d.mts +23 -141
  14. package/dist/Browser.mjs +208 -164
  15. package/dist/Browser.mjs.map +1 -1
  16. package/dist/BrowserBinding.d.mts +7 -34
  17. package/dist/BrowserBinding.mjs +30 -1
  18. package/dist/BrowserBinding.mjs.map +1 -0
  19. package/dist/Certificates.d.mts +3 -5
  20. package/dist/Certificates.mjs +2 -7
  21. package/dist/Certificates.mjs.map +1 -1
  22. package/dist/{Cleanup-G2YpTCuU.d.mts → Cleanup-DMTDBir8.d.mts} +5 -6
  23. package/dist/Cleanup.d.mts +3 -2
  24. package/dist/Cleanup.mjs +1 -6
  25. package/dist/Cleanup.mjs.map +1 -1
  26. package/dist/{Client-D1_xYM9o.mjs → Client-BQteUePT.mjs} +2 -4
  27. package/dist/{Client-D1_xYM9o.mjs.map → Client-BQteUePT.mjs.map} +1 -1
  28. package/dist/Client.d.mts +51 -2
  29. package/dist/Client.mjs +1 -1
  30. package/dist/Connection-DcvJZEdc.mjs +65 -0
  31. package/dist/Connection-DcvJZEdc.mjs.map +1 -0
  32. package/dist/ContextCoordination.d.mts +5 -6
  33. package/dist/ContextCoordination.mjs +1 -8
  34. package/dist/ContextCoordination.mjs.map +1 -1
  35. package/dist/Contexts.d.mts +4 -6
  36. package/dist/Contexts.mjs +2 -8
  37. package/dist/Contexts.mjs.map +1 -1
  38. package/dist/Downloads.d.mts +6 -8
  39. package/dist/Downloads.mjs +3 -8
  40. package/dist/Downloads.mjs.map +1 -1
  41. package/dist/Errors.d.mts +3 -26
  42. package/dist/Errors.mjs +1 -137
  43. package/dist/Errors.mjs.map +1 -1
  44. package/dist/{Extensions-ClZbYb1H.mjs → Extensions-nMNMPGCc.mjs} +3 -9
  45. package/dist/{Extensions-ClZbYb1H.mjs.map → Extensions-nMNMPGCc.mjs.map} +1 -1
  46. package/dist/Extensions.d.mts +4 -6
  47. package/dist/Extensions.mjs +1 -1
  48. package/dist/Functions.d.mts +4 -6
  49. package/dist/Functions.mjs +3 -17
  50. package/dist/Functions.mjs.map +1 -1
  51. package/dist/{Launch-BHcAEq05.mjs → Launch-m0fxzJ49.mjs} +5 -5
  52. package/dist/Launch-m0fxzJ49.mjs.map +1 -0
  53. package/dist/Launch.d.mts +130 -2
  54. package/dist/Launch.mjs +4 -11
  55. package/dist/Launch.mjs.map +1 -1
  56. package/dist/PageFetch.d.mts +3 -5
  57. package/dist/PageFetch.mjs +2 -8
  58. package/dist/PageFetch.mjs.map +1 -1
  59. package/dist/Projects.d.mts +3 -5
  60. package/dist/Projects.mjs +2 -8
  61. package/dist/Projects.mjs.map +1 -1
  62. package/dist/Recordings.d.mts +6 -8
  63. package/dist/Recordings.mjs +3 -5
  64. package/dist/Recordings.mjs.map +1 -1
  65. package/dist/{References-URDAtapt.d.mts → References-DOH3Wu44.d.mts} +5 -6
  66. package/dist/References.d.mts +3 -2
  67. package/dist/References.mjs +10 -18
  68. package/dist/References.mjs.map +1 -1
  69. package/dist/Replays.d.mts +6 -8
  70. package/dist/Replays.mjs +3 -5
  71. package/dist/Replays.mjs.map +1 -1
  72. package/dist/Search.d.mts +3 -5
  73. package/dist/Search.mjs +2 -9
  74. package/dist/Search.mjs.map +1 -1
  75. package/dist/{SessionData-DRKcKCqw.d.mts → SessionData-5xYZDshJ.d.mts} +5 -6
  76. package/dist/SessionData.d.mts +3 -2
  77. package/dist/SessionData.mjs +1 -8
  78. package/dist/SessionData.mjs.map +1 -1
  79. package/dist/{Sessions-CtbseWEh.mjs → Sessions-DoQGg9nB.mjs} +34 -18
  80. package/dist/Sessions-DoQGg9nB.mjs.map +1 -0
  81. package/dist/{Sessions-B8E4kMxo.d.mts → Sessions-tFJYaXFq.d.mts} +8 -8
  82. package/dist/Sessions.d.mts +4 -3
  83. package/dist/Sessions.mjs +1 -1
  84. package/dist/{Transfers-Czv5IZzJ.d.mts → Transfers-GVqzrDWl.d.mts} +22 -9
  85. package/dist/Transfers.d.mts +3 -2
  86. package/dist/Transfers.mjs +12 -28
  87. package/dist/Transfers.mjs.map +1 -1
  88. package/dist/Uploads.d.mts +6 -8
  89. package/dist/Uploads.mjs +3 -5
  90. package/dist/Uploads.mjs.map +1 -1
  91. package/dist/Webhooks.d.mts +3 -5
  92. package/dist/Webhooks.mjs +2 -11
  93. package/dist/Webhooks.mjs.map +1 -1
  94. package/dist/{WriterFacts-osvYAsIx.d.mts → WriterFacts-5CPBGG1P.d.mts} +4 -3
  95. package/dist/index.d.mts +27 -31
  96. package/dist/index.mjs +26 -31
  97. package/package.json +3 -28
  98. package/dist/Acquisition-WBafHwXH.mjs.map +0 -1
  99. package/dist/Association-CEps4hYP.mjs +0 -10
  100. package/dist/Association-CEps4hYP.mjs.map +0 -1
  101. package/dist/Bootstrap-BXuzZojd.mjs +0 -194
  102. package/dist/Bootstrap-BXuzZojd.mjs.map +0 -1
  103. package/dist/Bootstrap-m7lHgj0D.d.mts +0 -177
  104. package/dist/Bootstrap.d.mts +0 -2
  105. package/dist/Bootstrap.mjs +0 -2
  106. package/dist/BrowserBinding-DlJTGYZL.mjs +0 -2508
  107. package/dist/BrowserBinding-DlJTGYZL.mjs.map +0 -1
  108. package/dist/BrowserData-LpcAuAub.d.mts +0 -369
  109. package/dist/BrowserData.d.mts +0 -2
  110. package/dist/BrowserData.mjs +0 -442
  111. package/dist/BrowserData.mjs.map +0 -1
  112. package/dist/Capture-Bc0z9IAi.mjs +0 -571
  113. package/dist/Capture-Bc0z9IAi.mjs.map +0 -1
  114. package/dist/Capture-BvWI-l1A.d.mts +0 -168
  115. package/dist/Capture.d.mts +0 -2
  116. package/dist/Capture.mjs +0 -2
  117. package/dist/Client-Ca0zSg1n.d.mts +0 -53
  118. package/dist/Images-DgscEfSf.mjs +0 -127
  119. package/dist/Images-DgscEfSf.mjs.map +0 -1
  120. package/dist/Launch-BHcAEq05.mjs.map +0 -1
  121. package/dist/Launch-C8CfaYxb.d.mts +0 -132
  122. package/dist/LocalBrowser-BLancJ3R.d.mts +0 -79
  123. package/dist/LocalBrowser-DsQLWNL1.mjs +0 -439
  124. package/dist/LocalBrowser-DsQLWNL1.mjs.map +0 -1
  125. package/dist/LocalBrowser.d.mts +0 -2
  126. package/dist/LocalBrowser.mjs +0 -2
  127. package/dist/PageControl.d.mts +0 -16
  128. package/dist/PageControl.mjs +0 -36
  129. package/dist/PageControl.mjs.map +0 -1
  130. package/dist/PageControlAssociation-DabEg5AR.mjs +0 -10
  131. package/dist/PageControlAssociation-DabEg5AR.mjs.map +0 -1
  132. package/dist/Session-D4nT9hOO.mjs +0 -1379
  133. package/dist/Session-D4nT9hOO.mjs.map +0 -1
  134. package/dist/Sessions-CtbseWEh.mjs.map +0 -1
  135. package/dist/rolldown-runtime-D7D4PA-g.mjs +0 -13
@@ -1 +0,0 @@
1
- {"version":3,"file":"Session-D4nT9hOO.mjs","names":["Registration.snapshot","Registration.invoke","invoke"],"sources":["../src/internal/browser/BindingRunner.ts","../src/internal/browser/Bootstrap.ts","../src/internal/browser/Bindings.ts","../src/internal/browser/PublicSession.ts","../src/internal/session/Attachment.ts","../src/internal/browser/Owner.ts","../src/internal/browser/Session.ts"],"sourcesContent":["import { Effect, Exit, FiberSet, Scope } from \"effect\";\n\nimport type { CallbackFailureMode } from \"./CallbackTasks.ts\";\n\nexport type BindingRejection = \"closed\" | \"capacity\";\n\nexport type BindingAdmission<A, E> =\n | { readonly _tag: \"Rejected\"; readonly reason: BindingRejection }\n | { readonly _tag: \"Accepted\"; readonly result: Promise<Exit.Exit<A, E>> };\n\n/**\n * Scoped host runner for future page-callable bindings. Admission is synchronous and finite:\n * no Fiber exists until a slot has been reserved. The owning Scope interrupts accepted work;\n * consumer failures remain in an Exit on the host and are never page reply material here.\n */\nexport interface BindingRunner<I, A, E> {\n /** Fence new callbacks synchronously; the owning Scope still owns accepted work. */\n readonly close: () => void;\n readonly submit: (input: I, failureMode?: CallbackFailureMode) => BindingAdmission<A, E>;\n}\n\nexport const makeBindingRunner = <I, A, E, R>(\n capacity: number,\n handle: (input: I) => Effect.Effect<A, E, R>,\n onFault: () => void,\n): Effect.Effect<BindingRunner<I, A, E>, never, R | Scope.Scope> => {\n if (!Number.isSafeInteger(capacity) || capacity < 1)\n throw new RangeError(\"Invalid binding callback capacity\");\n\n return Effect.gen(function* () {\n const parent = yield* Scope.Scope;\n // Do not depend on an application's ambient finalizer strategy for callback ordering.\n // One private sequential child owns both FiberSet and the admission fence.\n const runtimeScope = yield* Scope.fork(parent, \"sequential\");\n\n const run = yield* FiberSet.makeRuntimePromise<R, Exit.Exit<A, E>, never>().pipe(\n Scope.provide(runtimeScope),\n );\n\n let accepting = true;\n let faulted = false;\n let inFlight = 0;\n\n const close = () => {\n accepting = false;\n };\n\n const fault = () => {\n if (!accepting || faulted) return;\n faulted = true;\n onFault();\n };\n\n // FiberSet registered its child-scope finalizer first. Sequential reverse registration\n // order therefore closes admission before the set interrupts accepted callbacks.\n yield* Scope.addFinalizer(runtimeScope, Effect.sync(close));\n\n const submit = (\n input: I,\n failureMode: CallbackFailureMode = \"fail-session\",\n ): BindingAdmission<A, E> => {\n if (!accepting || faulted) return { _tag: \"Rejected\", reason: \"closed\" };\n if (inFlight >= capacity) {\n if (failureMode === \"fail-session\") fault();\n\n return { _tag: \"Rejected\", reason: \"capacity\" };\n }\n\n inFlight++;\n // Construct the consumer Effect inside the admitted fiber as well: a consumer callback\n // that throws while producing its Effect is a host defect, not work allowed before admission.\n const execution = run(Effect.exit(Effect.suspend(() => handle(input))));\n\n const result = execution\n .then(\n (exit) => {\n if (failureMode === \"fail-session\" && Exit.isFailure(exit)) fault();\n\n return exit;\n },\n (error) => {\n if (failureMode === \"fail-session\") fault();\n throw error;\n },\n )\n .finally(() => {\n inFlight--;\n });\n\n // A native caller may disappear while the host callback is still settling. Keep the\n // Promise observed without consuming the Exit returned to a caller that is still present.\n void result.catch(() => {});\n\n return { _tag: \"Accepted\", result };\n };\n\n return { close, submit };\n });\n};\n","import type { Plan } from \"../../Bootstrap.ts\";\n\nexport interface ReadinessRequirement {\n readonly step: string;\n readonly expression: string;\n readonly timeoutMillis: number;\n readonly origins?: ReadonlyArray<string>;\n}\n\n/** What the native driver installs: one ordered bundle, its capabilities and its gates. */\nexport interface CompiledBootstrap {\n readonly bundle?: string;\n readonly permissions: ReadonlyArray<{\n readonly origin: string;\n readonly permissions: ReadonlyArray<string>;\n }>;\n readonly readiness: ReadonlyArray<ReadinessRequirement>;\n readonly existingDocuments: \"RequireFreshNavigation\" | \"AcceptAlreadyRunning\";\n}\n\nconst guarded = (content: string, origins: ReadonlyArray<string> | undefined): string =>\n origins === undefined\n ? `(() => {\\n${content}\\n})();`\n : `(() => {\\nconst origins = ${JSON.stringify([...origins])};\\nif (!origins.includes(globalThis.location && globalThis.location.origin)) return;\\n${content}\\n})();`;\n\n/**\n * Dependent steps become one script in declared order: a failing step stops the ones after it\n * rather than letting a later step observe half-initialized state. Origin-excluded steps are\n * skipped inside the document that reports the origin, never by guessing from a navigation URL.\n */\nexport const compileBootstrap = (\n plan: Pick<Plan, \"scripts\" | \"permissions\">,\n): CompiledBootstrap | undefined => {\n if (plan.scripts.length === 0 && plan.permissions.length === 0) return undefined;\n\n const bundle =\n plan.scripts.length === 0\n ? undefined\n : plan.scripts.map((script) => guarded(script.content, script.origins)).join(\"\\n\");\n\n const readiness = plan.scripts.flatMap((script) =>\n script.readiness === undefined\n ? []\n : [\n {\n step: script.id,\n expression: script.readiness.expression,\n timeoutMillis: script.readiness.timeoutMillis,\n ...(script.origins === undefined ? {} : { origins: script.origins }),\n },\n ],\n );\n\n // The most conservative declared policy governs the whole plan: one document is either\n // admitted for dependent work or it is not, and steps cannot disagree about that.\n const existingDocuments = plan.scripts.some(\n (script) => script.readiness?.existingDocuments === \"RequireFreshNavigation\",\n )\n ? \"RequireFreshNavigation\"\n : \"AcceptAlreadyRunning\";\n\n return {\n ...(bundle === undefined ? {} : { bundle }),\n permissions: plan.permissions.map((grant) => ({\n origin: grant.origin,\n permissions: [...grant.permissions],\n })),\n readiness,\n existingDocuments,\n };\n};\n\n/** Duplicate step identity would make registration order and readiness reports ambiguous. */\nexport const duplicateStep = (plan: Pick<Plan, \"scripts\" | \"permissions\" | \"bindings\">): boolean =>\n new Set(plan.scripts.map((script) => script.id)).size !== plan.scripts.length ||\n new Set(plan.permissions.map((grant) => grant.origin)).size !== plan.permissions.length ||\n new Set((plan.bindings ?? []).map((registration) => registration.name)).size !==\n (plan.bindings?.length ?? 0);\n","import { Cause, Deferred, Effect, Exit, Schema, Scope } from \"effect\";\n\nimport * as Bootstrap from \"../../Bootstrap.ts\";\nimport { BrowserError, InitializationError } from \"../../Errors.ts\";\nimport * as Registration from \"./BindingRegistration.ts\";\nimport { makeBindingRunner } from \"./BindingRunner.ts\";\nimport { duplicateStep } from \"./Bootstrap.ts\";\n\nexport interface NativeBindingCall {\n /** Validate native membership, allowed origin and the captured document before returning JSON. */\n readonly read: (signal: AbortSignal) => Promise<string>;\n /** Revalidate the same native caller/document; never substitute a newly selected document. */\n readonly check: (signal: AbortSignal) => Promise<void>;\n /** Idempotently fence retained handles and dispose late arrivals as they become available. */\n readonly dispose: () => Promise<void>;\n}\n\nexport interface NativeBinding {\n readonly name: string;\n readonly origins: ReadonlyArray<string>;\n readonly maxConcurrent: number;\n readonly maxInputBytes: number;\n readonly timeoutMillis: number;\n /** Rejected admission never calls read/check/dispose; the native callback still owns its handles. */\n readonly invoke: (call: NativeBindingCall) => Promise<string>;\n}\n\nexport interface ConnectionBindings {\n readonly bindings: ReadonlyArray<NativeBinding>;\n readonly close: () => void;\n /** Native registration/transport failure supervises the owner, not a single page invocation. */\n readonly reportFailure: (error: InitializationError) => void;\n /** Drain scoped Effect fibers. Late native promises remain observed and occupy capacity. */\n readonly dispose: Effect.Effect<void>;\n}\n\nexport interface Bindings<E> {\n readonly failure: Effect.Effect<never, E | InitializationError>;\n readonly diagnostics: Effect.Effect<Bootstrap.BindingDiagnostics<E>>;\n readonly connect: (\n onFault: () => void,\n isActive: () => boolean,\n isCurrent?: () => boolean,\n ) => Effect.Effect<ConnectionBindings, never, Scope.Scope>;\n}\n\nconst invalidPlan = () =>\n BrowserError.make({ operation: \"configure\", reason: \"configuration\", outcome: \"undispatched\" });\n\nconst AdmissionPlan = Schema.Struct({\n ...Bootstrap.Plan.fields,\n bindings: Schema.optionalKey(Schema.Array(Schema.Unknown).check(Schema.isMaxLength(16))),\n});\n\n/** Validate before allocation and retain an immutable snapshot, including authenticated callbacks. */\nexport const preparePlan = Effect.fnUntraced(function* <E, R>(\n plan: Bootstrap.Plan<E, R>,\n): Effect.fn.Return<Bootstrap.Plan<E, R>, BrowserError> {\n const source = yield* Effect.try({\n try: () => ({ ...plan }),\n catch: invalidPlan,\n });\n\n const data = yield* Schema.decodeEffect(AdmissionPlan, { onExcessProperty: \"error\" })(\n source,\n ).pipe(Effect.mapError(invalidPlan));\n\n if (duplicateStep({ scripts: data.scripts, permissions: data.permissions }))\n return yield* invalidPlan();\n const candidates = source.bindings === undefined ? [] : source.bindings;\n\n const bindings = yield* Effect.forEach([...candidates], (registration) =>\n Registration.snapshot(registration),\n );\n\n if (new Set(bindings.map((registration) => registration.name)).size !== bindings.length) {\n return yield* invalidPlan();\n }\n\n return Object.freeze({\n scripts: Object.freeze(\n data.scripts.map((script) =>\n Object.freeze({\n ...script,\n ...(script.origins === undefined ? {} : { origins: Object.freeze([...script.origins]) }),\n ...(script.readiness === undefined\n ? {}\n : { readiness: Object.freeze({ ...script.readiness }) }),\n }),\n ),\n ),\n permissions: Object.freeze(\n data.permissions.map((grant) =>\n Object.freeze({\n ...grant,\n permissions: Object.freeze([...grant.permissions]),\n }),\n ),\n ),\n ...(bindings.length === 0 ? {} : { bindings: Object.freeze(bindings) }),\n });\n});\n\nconst rejected = (): Promise<never> => {\n const error = new Error(\"Browser binding call rejected\");\n\n error.name = \"BrowserbaseBindingError\";\n error.stack = \"\";\n const result = Promise.reject(error);\n\n void result.catch(() => {});\n\n return result;\n};\n\nconst increment = (value: number) => Math.min(Number.MAX_SAFE_INTEGER, value + 1);\n\n/** The caller must pass preparePlan's snapshot; dependencies are captured at acquisition. */\nexport const makeBindings = Effect.fnUntraced(function* <E, R>(\n plan: Bootstrap.Plan<E, R>,\n): Effect.fn.Return<Bindings<E>, never, Exclude<R, Scope.Scope> | Scope.Scope> {\n // Effect.scoped installs a fresh invocation Scope inside this captured context. A consumer\n // handler never receives the acquisition Scope even when the actual context contains it.\n const consumer = yield* Effect.context<Exclude<R, Scope.Scope>>();\n const ownerScope = yield* Scope.fork(yield* Scope.Scope, \"sequential\");\n const failure = yield* Deferred.make<never, E | InitializationError>();\n const connections = new Set<ConnectionBindings>();\n const failures: Array<Bootstrap.BindingFailure<E>> = [];\n let droppedFailures = 0;\n let faulted = false;\n let ownerClosed = false;\n\n const entries = (plan.bindings ?? []).map((registration) => ({\n registration,\n state: {\n name: registration.name,\n inFlight: 0,\n pendingNative: 0,\n retired: 0,\n accepted: 0,\n succeeded: 0,\n rejected: 0,\n },\n }));\n\n yield* Scope.addFinalizer(\n ownerScope,\n Effect.suspend(() => {\n ownerClosed = true;\n const owned = [...connections];\n\n for (const connection of owned) connection.close();\n\n return Effect.forEach(owned, (connection) => connection.dispose, { discard: true });\n }),\n );\n\n const connect = Effect.fnUntraced(function* (\n onFault: () => void,\n isActive: () => boolean,\n isCurrent: () => boolean = isActive,\n ): Effect.fn.Return<ConnectionBindings, never, Scope.Scope> {\n const connectionScope = yield* Scope.fork(yield* Scope.Scope, \"sequential\");\n let closed = ownerClosed || faulted;\n const fences: Array<() => void> = [];\n const current = () => !closed && !ownerClosed && !faulted && isCurrent();\n const active = () => current() && isActive();\n\n const close = () => {\n closed = true;\n for (const fence of fences) fence();\n };\n\n const record = (\n registration: Pick<Registration.Registration<E, R>, \"name\" | \"failureMode\">,\n cause: Cause.Cause<E | InitializationError>,\n ) => {\n if (failures.length === 32) {\n failures.shift();\n droppedFailures = increment(droppedFailures);\n }\n failures.push(\n Object.freeze({ name: registration.name, mode: registration.failureMode, cause }),\n );\n if (registration.failureMode === \"fail-session\" && current()) {\n faulted = true;\n // The host can observe the original typed cause as soon as its owner is fenced.\n Deferred.doneUnsafe(failure, Effect.failCause(cause));\n for (const connection of connections) connection.close();\n onFault();\n }\n };\n\n const bindings = yield* Effect.forEach(entries, ({ registration, state }) =>\n Effect.gen(function* () {\n const error = (\n reason: InitializationError[\"reason\"],\n operation: InitializationError[\"operation\"] = \"callback\",\n ) => InitializationError.make({ operation, step: registration.name, reason });\n\n interface Work {\n readonly call: NativeBindingCall;\n pending: number;\n finished: boolean;\n released: boolean;\n }\n\n const release = (work: Work) => {\n if (!work.finished || work.pending !== 0 || work.released) return;\n work.released = true;\n state.inFlight--;\n state.retired--;\n };\n\n const track = <A>(work: Work, promise: Promise<A>): Promise<A> => {\n work.pending++;\n state.pendingNative++;\n\n const settled = () => {\n work.pending--;\n state.pendingNative--;\n release(work);\n };\n\n void promise.then(settled, settled);\n\n return promise;\n };\n\n const finish = (work: Work) => {\n if (work.finished) return;\n work.finished = true;\n state.retired++;\n\n // Disposal may complete before an abort-ignoring read. Both remain accounted for.\n const disposing = Promise.resolve()\n .then(() => work.call.dispose())\n .catch(() => {\n record(registration, Cause.fail(error(\"native\", \"dispose\")));\n });\n\n track(work, disposing);\n };\n\n const native = <A>(work: Work, action: (signal: AbortSignal) => Promise<A>) =>\n Effect.tryPromise({\n try: (signal) => track(work, action(signal)),\n catch: (cause) =>\n Schema.is(InitializationError)(cause) ? error(cause.reason) : error(\"native\"),\n });\n\n const execute = Effect.fnUntraced(function* (work: Work) {\n const check = Effect.suspend(() =>\n active() ? native(work, work.call.check) : Effect.fail(error(\"closed\")),\n );\n\n if (!active()) return yield* error(\"closed\");\n const text = yield* native(work, work.call.read);\n const result = yield* Registration.invoke(registration, text, check);\n\n yield* check;\n\n return result;\n });\n\n const runner = yield* makeBindingRunner(\n registration.maxConcurrent,\n (work: Work) =>\n Effect.scoped(execute(work)).pipe(\n Effect.timeoutOrElse({\n duration: registration.timeoutMillis,\n orElse: () => Effect.fail(error(\"timeout\")),\n }),\n Effect.provideContext(consumer),\n ),\n () => {},\n ).pipe(Scope.provide(connectionScope));\n\n fences.push(runner.close);\n\n const invoke = (call: NativeBindingCall): Promise<string> => {\n if (!active()) {\n state.rejected = increment(state.rejected);\n\n return rejected();\n }\n if (state.inFlight >= registration.maxConcurrent) {\n state.rejected = increment(state.rejected);\n record(registration, Cause.fail(error(\"busy\")));\n\n return rejected();\n }\n // This reservation also covers codec work, native validation and late native disposal.\n // It is shared across connections, so reconnect cannot reset quarantined capacity.\n state.inFlight++;\n state.accepted = increment(state.accepted);\n const work: Work = { call, pending: 0, finished: false, released: false };\n const admission = runner.submit(work, \"reject-call\");\n\n if (admission._tag === \"Rejected\") {\n state.rejected = increment(state.rejected);\n finish(work);\n\n return rejected();\n }\n\n const result = admission.result\n .then(\n (exit) => {\n if (Exit.isFailure(exit)) {\n state.rejected = increment(state.rejected);\n record(registration, exit.cause);\n\n return rejected();\n }\n if (!active()) {\n state.rejected = increment(state.rejected);\n\n return rejected();\n }\n state.succeeded = increment(state.succeeded);\n\n return exit.value;\n },\n () => {\n state.rejected = increment(state.rejected);\n if (active()) record(registration, Cause.fail(error(\"native\")));\n\n return rejected();\n },\n )\n .finally(() => finish(work));\n\n void result.catch(() => {});\n\n return result;\n };\n\n return Object.freeze({\n name: registration.name,\n origins: registration.origins,\n maxConcurrent: registration.maxConcurrent,\n maxInputBytes: registration.maxInputBytes,\n timeoutMillis: registration.timeoutMillis,\n invoke,\n });\n }),\n );\n\n const connection: ConnectionBindings = {\n bindings: Object.freeze(bindings),\n close,\n reportFailure: (error) => {\n if (!current()) return;\n record({ name: error.step, failureMode: \"fail-session\" }, Cause.fail(error));\n },\n dispose: Effect.sync(close).pipe(Effect.andThen(Scope.close(connectionScope, Exit.void))),\n };\n\n connections.add(connection);\n yield* Scope.addFinalizer(\n connectionScope,\n Effect.sync(() => {\n close();\n connections.delete(connection);\n }),\n );\n\n return connection;\n }, Effect.uninterruptible);\n\n return {\n failure: Deferred.await(failure),\n diagnostics: Effect.sync(() =>\n Object.freeze({\n faulted,\n bindings: Object.freeze(entries.map(({ state }) => Object.freeze({ ...state }))),\n failures: Object.freeze([...failures]),\n droppedFailures,\n }),\n ),\n connect,\n };\n});\n","import { Effect, Schema } from \"effect\";\n\nimport type * as Bootstrap from \"../../Bootstrap.ts\";\nimport type { BrowserSession, BoundTarget } from \"../../Browser.ts\";\nimport {\n ActionResult,\n Checkpoint,\n CheckpointOptions,\n ClickRequest,\n FillRequest,\n HoverRequest,\n InputReceipt,\n KeyStroke,\n NavigateRequest,\n NavigationResult,\n ObservationOptions,\n ObservedElement,\n PointerMoveRequest,\n PressRequest,\n ReadTextRequest,\n ScreenshotRequest,\n ScreenshotResult,\n ScrollRequest,\n StartNavigationRequest,\n TextResult,\n TypeRequest,\n Viewport,\n WheelRequest,\n} from \"../../BrowserData.ts\";\nimport { BrowserError, type BrowserOperation, InitializationError } from \"../../Errors.ts\";\nimport { Identifier } from \"../../References.ts\";\nimport { associate } from \"./Association.ts\";\nimport type { Bindings } from \"./Bindings.ts\";\nimport { associatePageControl } from \"./PageControlAssociation.ts\";\nimport type { BoundControls, SessionControls, SessionLease } from \"./Session.ts\";\n\nexport const checked = <A>(\n schema: Schema.Codec<A, unknown, never, never>,\n value: unknown,\n operation: BrowserOperation,\n) =>\n Schema.decodeUnknownEffect(schema)(value, { onExcessProperty: \"error\" }).pipe(\n Effect.mapError(() =>\n BrowserError.make({ operation, reason: \"configuration\", outcome: \"undispatched\" }),\n ),\n );\n\nexport const decoded =\n <A>(schema: Schema.Codec<A, unknown, never, never>, operation: BrowserOperation) =>\n (value: unknown) =>\n Schema.decodeUnknownEffect(schema)(value).pipe(\n Effect.mapError(() => BrowserError.make({ operation, reason: \"malformed\" })),\n );\n\nconst action = decoded(ActionResult, \"action-result\");\nconst pointerMoved = decoded(InputReceipt, \"pointer-move\");\nconst hovered = decoded(InputReceipt, \"hover\");\nconst wheeled = decoded(InputReceipt, \"wheel\");\nconst pressed = decoded(InputReceipt, \"press\");\nconst typed = decoded(InputReceipt, \"type\");\n\nconst makeTarget = (bound: BoundControls): BoundTarget => ({\n navigate: (request) =>\n checked(NavigateRequest, request, \"navigate\").pipe(\n Effect.flatMap((value) => bound.navigate(value.url)),\n Effect.flatMap((url) => decoded(NavigationResult, \"navigate\")({ url })),\n ),\n startNavigation: (request) =>\n checked(StartNavigationRequest, request, \"navigate\").pipe(\n Effect.flatMap((value) => bound.startNavigation(value.url, value.timeoutMillis)),\n Effect.map((operation) => ({\n target: operation.target,\n completed: operation.completed.pipe(\n Effect.flatMap((url) => decoded(NavigationResult, \"navigate\")({ url })),\n ),\n stop: operation.stop,\n })),\n ),\n readText: (request) =>\n checked(ReadTextRequest, request, \"read-text\").pipe(\n Effect.flatMap((value) => bound.readText(value.selector)),\n Effect.flatMap((text) => decoded(TextResult, \"read-text\")({ text })),\n ),\n click: (request) =>\n checked(ClickRequest, request, \"click\").pipe(\n Effect.flatMap((value) => bound.click(value.selector)),\n Effect.flatMap((url) => action({ url })),\n ),\n fill: (request) =>\n checked(FillRequest, request, \"fill\").pipe(\n Effect.flatMap((value) => bound.fill(value.selector, value.value)),\n Effect.flatMap((url) => action({ url })),\n ),\n scroll: (request) =>\n checked(ScrollRequest, request, \"scroll\").pipe(\n Effect.flatMap((value) => bound.scroll(value.deltaX, value.deltaY)),\n Effect.flatMap((url) => action({ url })),\n ),\n pointerMove: (request) =>\n checked(PointerMoveRequest, request, \"pointer-move\").pipe(\n Effect.flatMap((value) => bound.pointerMove(value.to)),\n Effect.flatMap((input) => pointerMoved({ ...input, kind: \"pointer-move\" })),\n ),\n hover: (request) =>\n checked(HoverRequest, request, \"hover\").pipe(\n Effect.flatMap((value) => bound.hover(value.selector)),\n Effect.flatMap((input) => hovered({ ...input, kind: \"hover\" })),\n ),\n wheel: (request) =>\n checked(WheelRequest, request, \"wheel\").pipe(\n Effect.flatMap((value) =>\n bound\n .wheel(value.deltaX, value.deltaY, value.at)\n .pipe(\n Effect.flatMap((input) =>\n wheeled({ ...input, kind: \"wheel\", delta: { x: value.deltaX, y: value.deltaY } }),\n ),\n ),\n ),\n ),\n press: (request) =>\n checked(PressRequest, request, \"press\").pipe(\n Effect.flatMap((value) => bound.press(value.key, value.modifiers ?? [], value.into)),\n Effect.flatMap((input) => pressed({ ...input, kind: \"press\" })),\n ),\n type: (request) =>\n checked(TypeRequest, request, \"type\").pipe(\n Effect.flatMap((value) => bound.type(value.text, value.into)),\n Effect.flatMap((input) => typed({ ...input, kind: \"type\" })),\n ),\n screenshot: (request) =>\n checked(ScreenshotRequest, request, \"screenshot\").pipe(\n Effect.flatMap((value) => bound.screenshot(value.fullPage)),\n Effect.flatMap((bytes) =>\n decoded(\n ScreenshotResult,\n \"screenshot\",\n )({ mediaType: \"image/png\", bytes: new Uint8Array(bytes) }),\n ),\n ),\n});\n\n/** A browser-operation failure keeps its meaning when it is reported as an initialization one. */\nconst initialization = (reason: BrowserError[\"reason\"]): InitializationError[\"reason\"] =>\n reason === \"busy\"\n ? \"busy\"\n : reason === \"closed\" || reason === \"disconnected\"\n ? \"closed\"\n : reason === \"timeout\"\n ? \"timeout\"\n : reason === \"stale\"\n ? \"stale\"\n : reason === \"unsupported\"\n ? \"unsupported\"\n : reason === \"configuration\"\n ? \"configuration\"\n : \"native\";\n\nexport const makeSession = <E>(\n controls: SessionControls<SessionLease>,\n bindings: Bindings<E>,\n): BrowserSession<E> => {\n const currentTarget = controls.currentTarget.pipe(Effect.map(() => makeTarget(controls.bind())));\n\n const Wait = Schema.Struct({\n selector: ClickRequest.fields.selector,\n state: Schema.Literals([\"visible\", \"hidden\", \"attached\", \"detached\"]),\n });\n\n const navigate = (url: string) => action({ url });\n\n const session: BrowserSession<E> = {\n failure: bindings.failure,\n bindingDiagnostics: bindings.diagnostics,\n bind: () => makeTarget(controls.bind()),\n currentTarget,\n target: controls.currentTarget,\n observe: (options = {}) =>\n checked(ObservationOptions, options, \"observe\").pipe(\n Effect.flatMap((value) => controls.observe({ ...value, scope: value.scope ?? \"document\" })),\n ),\n checkpoint: (options = {}) =>\n checked(CheckpointOptions, options, \"checkpoint\").pipe(\n Effect.flatMap((value) =>\n controls.checkpoint({ ...value, picture: value.picture ?? false }),\n ),\n Effect.flatMap(({ picture, ...sampled }) =>\n decoded(\n Checkpoint,\n \"checkpoint\",\n )({\n ...sampled,\n ...(picture === undefined\n ? {}\n : { picture: { mediaType: \"image/png\", bytes: new Uint8Array(picture) } }),\n }),\n ),\n ),\n controlFacts: (reference) =>\n checked(ObservedElement, reference, \"control-facts\").pipe(\n Effect.flatMap(controls.controlFacts),\n ),\n revalidateElement: (reference) =>\n checked(ObservedElement, reference, \"revalidate\").pipe(\n Effect.flatMap((value) => controls.revalidate(value).pipe(Effect.as(value))),\n ),\n clickElement: (reference, admission) =>\n checked(ObservedElement, reference, \"click\").pipe(\n Effect.flatMap((value) => controls.bind().click(value, admission?.admit)),\n Effect.flatMap(navigate),\n ),\n fillElement: (reference, value, admission) =>\n checked(ObservedElement, reference, \"fill\").pipe(\n Effect.flatMap((element) =>\n checked(FillRequest.fields.value, value, \"fill\").pipe(\n Effect.flatMap((text) => controls.bind().fill(element, text, admission?.admit)),\n ),\n ),\n Effect.flatMap(navigate),\n ),\n hoverElement: (reference, admission) =>\n checked(ObservedElement, reference, \"hover\").pipe(\n Effect.flatMap((value) => controls.bind().hover(value, admission?.admit)),\n Effect.flatMap((input) => hovered({ ...input, kind: \"hover\" })),\n ),\n pressElement: (reference, stroke, admission) =>\n checked(ObservedElement, reference, \"press\").pipe(\n Effect.flatMap((element) =>\n checked(KeyStroke, stroke, \"press\").pipe(\n Effect.flatMap((value) =>\n controls.bind().press(value.key, value.modifiers ?? [], element, admission?.admit),\n ),\n ),\n ),\n Effect.flatMap((input) => pressed({ ...input, kind: \"press\" })),\n ),\n typeElement: (reference, text, admission) =>\n checked(ObservedElement, reference, \"type\").pipe(\n Effect.flatMap((element) =>\n checked(TypeRequest.fields.text, text, \"type\").pipe(\n Effect.flatMap((value) => controls.bind().type(value, element, admission?.admit)),\n ),\n ),\n Effect.flatMap((input) => typed({ ...input, kind: \"type\" })),\n ),\n pages: controls.pages,\n frames: controls.frames,\n selectPage: (id) =>\n checked(Identifier, id, \"select-page\").pipe(\n Effect.flatMap(controls.selectPage),\n Effect.andThen(currentTarget),\n ),\n selectFrame: (id) =>\n checked(Identifier, id, \"select-frame\").pipe(\n Effect.flatMap(controls.selectFrame),\n Effect.andThen(currentTarget),\n ),\n createPage: controls.createPage(),\n closePage: (id) =>\n checked(Identifier, id, \"close-page\").pipe(Effect.flatMap(controls.closePage)),\n resizeViewport: (viewport) =>\n checked(Viewport, viewport, \"resize\").pipe(Effect.flatMap(controls.resize)),\n waitFor: (request) =>\n checked(Wait, request, \"wait\").pipe(\n Effect.flatMap((value) => controls.waitFor(value.selector, value.state)),\n ),\n clickAndWait: (request) =>\n checked(ClickRequest, request, \"click-and-wait\").pipe(\n Effect.flatMap((value) => controls.clickAndWait(value.selector)),\n Effect.flatMap((url) => action({ url })),\n ),\n ready: controls.readiness.pipe(\n Effect.mapError((error) =>\n InitializationError.make({\n operation: \"ready\",\n step: \"session\",\n reason: initialization(error.reason),\n }),\n ),\n Effect.flatMap((state) =>\n state._tag === \"NotReady\"\n ? Effect.fail(\n InitializationError.make({\n operation: \"ready\",\n step: state.step,\n reason: state.reason === \"failed\" ? \"output\" : state.reason,\n }),\n )\n : Effect.succeed<Bootstrap.ReadinessOutcome>({ _tag: state._tag }),\n ),\n ),\n };\n\n associate(session, controls.capture);\n associatePageControl(session, controls.pageControl);\n\n return session;\n};\n","import { Effect, Exit, Option, Scope } from \"effect\";\n\nimport type { CleanupResult } from \"../../Cleanup.ts\";\nimport { BrowserbaseClient } from \"../../Client.ts\";\nimport { SessionError } from \"../../Errors.ts\";\nimport type { SessionReference } from \"../../References.ts\";\nimport { isTerminalSessionStatus } from \"../../SessionData.ts\";\nimport { BrowserbaseSessions } from \"../../Sessions.ts\";\nimport { connectionAddress } from \"../provider/Connection.ts\";\nimport {\n makeCleanup,\n noLocalConnection,\n reported,\n type CleanupLimits,\n type LocalCleanup,\n} from \"./Cleanup.ts\";\nimport { reportCleanup } from \"./Diagnostics.ts\";\n\nexport interface AttachmentOptions {\n readonly reference: SessionReference;\n /** Bounded admission of a session the provider has not finished starting. */\n readonly pendingWaitMillis?: number;\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n}\n\nconst failure = (reason: SessionError[\"reason\"]) =>\n SessionError.make({ operation: \"session-attach\", reason, outcome: \"undispatched\" });\n\n/**\n * Borrowing an already running session. This scope owns its local connection and nothing\n * else: no allocation attempt is made, no release is requested, and no Context-writer\n * authority is claimed. Whoever allocated the session keeps all three.\n */\nexport const attachRemote = Effect.fnUntraced(function* (\n options: AttachmentOptions,\n local: LocalCleanup = noLocalConnection,\n limits?: CleanupLimits,\n) {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n const parent = yield* Scope.Scope;\n const pendingWaitMillis = options.pendingWaitMillis ?? 0;\n\n if (\n !Number.isSafeInteger(pendingWaitMillis) ||\n pendingWaitMillis < 0 ||\n pendingWaitMillis > 600_000\n )\n return yield* failure(\"configuration\");\n\n // The status read validates project authority before anything is borrowed. A terminal\n // session needs a fresh allocation from durable state, never a reattachment.\n const observed = yield* sessions.retrieve(options.reference);\n\n if (isTerminalSessionStatus(observed.status)) return yield* failure(\"expired\");\n if (observed.status !== \"RUNNING\") {\n if (pendingWaitMillis === 0) return yield* failure(\"active\");\n yield* sessions.waitUntilRunning(observed.reference, { timeoutMillis: pendingWaitMillis });\n }\n const reference = observed.reference;\n\n return yield* Effect.uninterruptible(\n Effect.gen(function* () {\n const resourceScope = yield* Scope.make();\n let closing = false;\n let cleanup: CleanupResult | undefined;\n\n const terminate = yield* Effect.cached(\n Effect.uninterruptible(\n Effect.gen(function* () {\n closing = true;\n\n const coordinator = yield* makeCleanup(\n reference,\n \"borrowed\",\n sessions,\n local,\n (result) => {\n cleanup = result;\n },\n limits,\n );\n\n yield* coordinator.close;\n if (cleanup !== undefined) yield* reportCleanup(cleanup);\n if (cleanup !== undefined && options.onCleanup !== undefined)\n yield* reported(options.onCleanup(cleanup));\n }),\n ),\n );\n\n const closeScope = yield* Effect.cached(Scope.close(resourceScope, Exit.void));\n\n // Teardown is registered before the first connection, exactly as an owned scope does.\n yield* Scope.addFinalizer(resourceScope, terminate);\n yield* Scope.addFinalizer(parent, closeScope);\n\n return {\n reference,\n status: observed,\n connection: (timeoutMillis: number) =>\n Effect.suspend(() =>\n closing\n ? Effect.fail(\n SessionError.make({\n operation: \"session-connect\",\n reason: \"expired\",\n outcome: \"undispatched\",\n }),\n )\n : // Credentials are fetched fresh: an expiry can race the caller's own read.\n connectionAddress(client, sessions, reference, timeoutMillis),\n ),\n release: closeScope.pipe(\n Effect.andThen(\n Effect.suspend(() =>\n cleanup === undefined\n ? Effect.die(new Error(\"Borrowed session closed without cleanup evidence\"))\n : Effect.succeed(cleanup),\n ),\n ),\n ),\n cleanupResult: Effect.sync(() => Option.fromNullishOr(cleanup)),\n };\n }),\n );\n});\n","import { Clock, Effect, Schema, Semaphore } from \"effect\";\n\nimport { BrowserError, type BrowserOperation } from \"../../Errors.ts\";\nimport { deadlineAfter, nowMillis, until } from \"../Deadline.ts\";\nimport { publicError } from \"./NativeCalls.ts\";\n\n/** The browser domain's bounded step: one deadline, one declared BrowserError timeout. */\nexport const within = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n deadline: number,\n operation: BrowserOperation,\n onTimeout?: () => void,\n): Effect.Effect<A, E | BrowserError, R> =>\n until(effect, deadline, () => {\n onTimeout?.();\n\n return BrowserError.make({ operation, reason: \"timeout\" });\n });\n\nexport type Phase =\n | \"acquiring\"\n | \"open\"\n | \"paused\"\n | \"detached\"\n | \"uncertain\"\n | \"closing\"\n | \"closed\";\n\nexport type Invalidation =\n | \"observation\"\n | \"target-changed\"\n | \"resized\"\n | \"paused\"\n | \"disconnected\"\n | \"uncertain\"\n | \"closed\";\n\n/** One admitted native operation; checks at dispatch also fence late Promise continuations. */\nexport interface Ticket {\n readonly signal: AbortSignal;\n readonly deadline: number;\n readonly generation: number;\n readonly dispatched: boolean;\n readonly remainingMillis: () => number;\n check(): void;\n dispatch(): void;\n}\n\n/**\n * A dispatched mutation the browser is still performing after its permit was released: an\n * in-flight navigation. It keeps other mutations off that page while reads, holds and other\n * pages proceed. Like a permit it cannot be dropped silently: only a known outcome releases it.\n */\nexport interface Reservation {\n /** Aborted by any fence, so work that outlives its connection is never treated as current. */\n readonly signal: AbortSignal;\n /** `unknown` fences the owner, exactly as a mutation interrupted after dispatch does. */\n readonly settle: (outcome: \"known\" | \"unknown\") => void;\n}\n\nexport interface Limits {\n readonly maxActions: number;\n readonly maxElapsedMillis: number;\n readonly actionTimeoutMillis: number;\n}\n\nexport const makeOwner = Effect.fnUntraced(function* (limits: Limits) {\n const semaphore = yield* Semaphore.make(1);\n const clock = yield* Clock.Clock;\n const lifetimeDeadline = yield* deadlineAfter(limits.maxElapsedMillis);\n const hooks = new Set<(reason: Invalidation) => void>();\n\n const state = {\n phase: \"acquiring\" as Phase,\n generation: 0,\n revision: 0,\n selection: 0,\n actions: 0,\n };\n\n let active: AbortController | undefined;\n const reservations = new Map<string, AbortController>();\n\n const invalidate = (reason: Invalidation) => {\n state.revision++;\n for (const hook of hooks) hook(reason);\n };\n\n const fence = (phase: Phase, reason: Invalidation) => {\n if (\n state.phase === \"closed\" ||\n (state.phase === \"closing\" && phase !== \"closed\" && phase !== \"closing\")\n )\n return;\n state.phase = phase;\n state.generation++;\n active?.abort();\n for (const reservation of reservations.values()) reservation.abort();\n reservations.clear();\n invalidate(reason);\n };\n\n /** Taken under the permit that dispatched the work, so nothing can interleave before it. */\n const reserve = (key: string): Reservation => {\n // Outlives the fiber that dispatched it, and must be abortable by a fence from outside it.\n const controller = new AbortController();\n\n reservations.set(key, controller);\n\n return {\n signal: controller.signal,\n settle: (outcome) => {\n // A fence already cleared it, and decided the outcome for everything it aborted.\n if (reservations.get(key) !== controller) return;\n reservations.delete(key);\n if (outcome === \"unknown\") fence(\"uncertain\", \"uncertain\");\n },\n };\n };\n\n const guard = <A, E, R>(\n operation: BrowserOperation,\n body: (ticket: Ticket) => Effect.Effect<A, E, R>,\n options: {\n readonly charge?: boolean;\n readonly mutation?: boolean;\n readonly phases?: ReadonlyArray<Phase>;\n readonly verifyAfter?: boolean;\n readonly preflight?: Effect.Effect<void, BrowserError>;\n } = {},\n ): Effect.Effect<A, E | BrowserError, R> =>\n semaphore\n .withPermitsIfAvailable(1)(\n Effect.gen(function* () {\n if (!(options.phases ?? [\"open\"]).includes(state.phase)) {\n return yield* BrowserError.make({\n operation,\n reason: state.phase === \"paused\" ? \"busy\" : \"closed\",\n outcome: \"undispatched\",\n });\n }\n yield* options.preflight ?? Effect.void;\n const now = yield* nowMillis;\n\n if (now >= lifetimeDeadline) {\n fence(\"uncertain\", \"uncertain\");\n\n return yield* BrowserError.make({\n operation,\n reason: \"timeout\",\n outcome: \"undispatched\",\n });\n }\n if (options.charge !== false) {\n if (state.actions >= limits.maxActions)\n return yield* BrowserError.make({\n operation,\n reason: \"limit\",\n outcome: \"undispatched\",\n });\n state.actions++;\n }\n // The lifecycle fence must actively abort admitted native work outside the current fiber.\n // @effect-diagnostics-next-line abortControllerInEffect:off\n const controller = new AbortController();\n\n active = controller;\n let dispatched = false;\n const generation = state.generation;\n const allowed = options.phases ?? [\"open\"];\n\n const check = () => {\n if (\n controller.signal.aborted ||\n state.generation !== generation ||\n !allowed.includes(state.phase)\n ) {\n throw BrowserError.make({\n operation,\n reason: \"stale\",\n outcome: dispatched ? \"unknown\" : \"undispatched\",\n });\n }\n };\n\n const ticket: Ticket = {\n signal: controller.signal,\n deadline: Math.min(now + limits.actionTimeoutMillis, lifetimeDeadline),\n generation,\n remainingMillis: () =>\n Math.max(\n 1,\n Math.min(now + limits.actionTimeoutMillis, lifetimeDeadline) -\n Number(clock.monotonicTimeNanosUnsafe()) / 1_000_000,\n ),\n get dispatched() {\n return dispatched;\n },\n check,\n dispatch() {\n check();\n if (!dispatched && options.mutation) invalidate(\"observation\");\n dispatched = true;\n },\n };\n\n const uncertain = () => {\n controller.abort();\n if (dispatched && state.phase !== \"closing\" && state.phase !== \"closed\")\n fence(\"uncertain\", \"uncertain\");\n };\n\n return yield* within(body(ticket), ticket.deadline, operation, uncertain).pipe(\n Effect.tap((_) =>\n options.verifyAfter === false\n ? Effect.void\n : Effect.try({\n try: check,\n catch: () =>\n BrowserError.make({\n operation,\n reason: \"stale\",\n outcome: dispatched ? \"unknown\" : \"undispatched\",\n }),\n }),\n ),\n Effect.catch((error): Effect.Effect<never, E | BrowserError> => {\n if (dispatched) uncertain();\n // The permit adds dispatch evidence only to browser-operation errors. Typed\n // initialization/consumer failures retain their identity and original family.\n if (!Schema.is(BrowserError)(error)) return Effect.fail(error);\n\n return Effect.fail(\n BrowserError.make({\n operation,\n reason: error.reason,\n outcome: error.outcome ?? (dispatched ? \"unknown\" : \"undispatched\"),\n ...(error.status === undefined ? {} : { status: error.status }),\n ...(error.retryAfterMillis === undefined\n ? {}\n : { retryAfterMillis: error.retryAfterMillis }),\n }),\n );\n }),\n Effect.onInterrupt(() => Effect.sync(uncertain)),\n Effect.ensuring(\n Effect.sync(() => {\n controller.abort();\n if (active === controller) active = undefined;\n }),\n ),\n );\n }),\n )\n .pipe(\n Effect.flatMap(\n Effect.fromOption(() =>\n BrowserError.make({ operation, reason: \"busy\", outcome: \"undispatched\" }),\n ),\n ),\n );\n\n /** Lifecycle transitions are performed while holding guard's permit; close alone preempts it. */\n return {\n state,\n lifetimeDeadline,\n guard,\n reserve,\n reserved: (key: string): boolean => reservations.has(key),\n invalidate,\n fence,\n onInvalidate(hook: (reason: Invalidation) => void): () => void {\n hooks.add(hook);\n\n return () => {\n hooks.delete(hook);\n };\n },\n };\n});\n\nexport type Owner = Effect.Success<ReturnType<typeof makeOwner>>;\n\n/** Without a native answer, whether the step was sent is all the owner knows about it. */\nconst unsettled = (ticket: Ticket): Pick<BrowserError, \"reason\" | \"outcome\"> => ({\n reason: \"provider\",\n outcome: ticket.dispatched ? \"unknown\" : \"undispatched\",\n});\n\n/**\n * The one place a native step becomes a public error: whatever the driver raised, the caller\n * sees the operation it asked for.\n */\nexport const native = <A>(operation: BrowserOperation, ticket: Ticket, body: () => Promise<A>) =>\n Effect.callback<A, BrowserError>((resume) => {\n let done = false;\n\n const cleanup = () => {\n done = true;\n ticket.signal.removeEventListener(\"abort\", abort);\n };\n\n const abort = () => {\n if (done) return;\n cleanup();\n resume(\n Effect.fail(\n BrowserError.make({\n operation,\n reason: \"stale\",\n outcome: ticket.dispatched ? \"unknown\" : \"undispatched\",\n }),\n ),\n );\n };\n\n ticket.signal.addEventListener(\"abort\", abort, { once: true });\n try {\n ticket.check();\n // Observe both branches even after the waiter exits. Cancellation does not undo native work.\n void body().then(\n (value) => {\n if (!done) {\n cleanup();\n resume(Effect.succeed(value));\n }\n },\n (error: unknown) => {\n if (!done) {\n cleanup();\n resume(Effect.fail(publicError(error, operation, unsettled(ticket))));\n }\n },\n );\n } catch (error) {\n cleanup();\n resume(Effect.fail(publicError(error, operation, unsettled(ticket))));\n }\n\n return Effect.sync(cleanup);\n });\n","import { Clock, Deferred, Effect, Exit, type Option, Redacted, Schema, Scope } from \"effect\";\n\nimport { BrowserbaseBrowserBinding } from \"../../BrowserBinding.ts\";\nimport {\n type KeyModifier,\n Observation,\n type ObservedElement,\n type PageInfo,\n type PageSuspension,\n Target,\n type Viewport,\n} from \"../../BrowserData.ts\";\nimport type { CleanupResult } from \"../../Cleanup.ts\";\nimport { BrowserbaseClient } from \"../../Client.ts\";\nimport {\n type AllocationError,\n type ContextError,\n type SessionError,\n BrowserError,\n type BrowserOperation,\n} from \"../../Errors.ts\";\nimport type { LaunchRecipe } from \"../../Launch.ts\";\nimport type { AllocationAttempt, SessionReference } from \"../../References.ts\";\nimport { BrowserbaseSessions } from \"../../Sessions.ts\";\nimport { acquireRemote } from \"../session/Acquisition.ts\";\nimport { attachRemote } from \"../session/Attachment.ts\";\nimport type { LocalCleanup } from \"../session/Cleanup.ts\";\nimport type { ContextWriterPermit } from \"../session/WriterFacts.ts\";\nimport { type CaptureParent } from \"./Association.ts\";\nimport { bindingImplementation, type BindingImplementation } from \"./Binding.ts\";\nimport type { ConnectionBindings } from \"./Bindings.ts\";\nimport type { Driver, DriverEvents, DriverOptions, NativeFileSelection } from \"./Driver.ts\";\nimport { issueLiveView } from \"./LiveView.ts\";\nimport { publicError } from \"./NativeCalls.ts\";\nimport type { AdmissionPolicy } from \"./Observation.ts\";\nimport { makeOwner, native, type Limits, type Ticket } from \"./Owner.ts\";\nimport type { NativeInput, NativePoint } from \"./Pointer.ts\";\n\n/**\n * What this owner needs from the remote session it drives, whether it allocated that session\n * or borrowed one. Release authority lives behind `release`, so a borrowed lease cannot\n * accidentally expose one: the lease decides what closing means.\n */\nexport interface SessionLease {\n readonly reference: unknown;\n readonly connection: (\n timeoutMillis: number,\n ) => Effect.Effect<Redacted.Redacted<string>, SessionError | BrowserError>;\n readonly release: Effect.Effect<unknown>;\n readonly cleanupResult: Effect.Effect<Option.Option<unknown>>;\n /** Only a provider-backed lease can issue Live View or verify provider reconnect status. */\n readonly liveView?: (ttl: number) => ReturnType<typeof issueLiveView>;\n readonly verifyReconnect?: Effect.Effect<void, BrowserError>;\n}\n\nexport interface RemoteLease extends SessionLease {\n readonly reference: SessionReference;\n readonly attempt?: AllocationAttempt;\n readonly release: Effect.Effect<CleanupResult>;\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n}\n\nexport type RemoteSource<L extends SessionLease, E, R = BrowserbaseClient | BrowserbaseSessions> = (\n local: LocalCleanup,\n lifetimeDeadline: number,\n) => Effect.Effect<L, E, R | Scope.Scope>;\n\n/** Bounds a reading of the selected document. Already validated at the public boundary. */\nexport interface Reading {\n readonly scope: \"document\" | \"viewport\";\n readonly maxTextBytes?: number;\n readonly maxControls?: number;\n}\n\nexport interface SessionOptions<\n L extends SessionLease,\n E,\n R = BrowserbaseClient | BrowserbaseSessions,\n> {\n readonly remote: RemoteSource<L, E, R>;\n /** Private local acquisition selects the same driver without fabricating a provider binding. */\n readonly engine?: BindingImplementation;\n /** Only a keep-alive session may detach and reattach inside this owner. */\n readonly keepAlive: boolean;\n readonly driver: DriverOptions;\n readonly maxReturnedBytes: number;\n /** Consumer E/R stays with the typed public supervisor; this installs its captured runtime. */\n readonly connectBindings?: (\n onFault: () => void,\n isActive: () => boolean,\n isCurrent: () => boolean,\n ) => Effect.Effect<ConnectionBindings, never, Scope.Scope>;\n}\n\nexport interface OwnedLease extends RemoteLease {\n readonly attempt: AllocationAttempt;\n}\n\nexport interface OwnedOptions {\n /** The single provider-faithful launch description; the owner adds no second default body. */\n readonly launch: LaunchRecipe;\n /** Required for a persistent context; the writer permit, not this owner, holds that authority. */\n readonly contextWriter?: ContextWriterPermit;\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\n/** Allocates the session, and therefore owns releasing it. */\nconst providerControls = (\n client: BrowserbaseClient[\"Service\"],\n sessions: BrowserbaseSessions[\"Service\"],\n reference: SessionReference,\n) => ({\n liveView: (ttl: number) => issueLiveView(client, reference, ttl),\n verifyReconnect: sessions.retrieve(reference).pipe(\n Effect.mapError((error) => BrowserError.make({ operation: \"reconnect\", reason: error.reason })),\n Effect.flatMap((status) =>\n status.status === \"RUNNING\"\n ? Effect.void\n : Effect.fail(BrowserError.make({ operation: \"reconnect\", reason: \"expired\" })),\n ),\n ),\n});\n\nexport const ownedRemote =\n (\n options: OwnedOptions,\n ): RemoteSource<OwnedLease, AllocationError | BrowserError | ContextError> =>\n (local, lifetimeDeadline) =>\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n\n const acquired = yield* acquireRemote(\n {\n launch: options.launch,\n ...(options.contextWriter === undefined ? {} : { contextWriter: options.contextWriter }),\n allocationDeadline: lifetimeDeadline,\n ...(options.onCleanup === undefined ? {} : { onCleanup: options.onCleanup }),\n ...(options.onAllocationUncertain === undefined\n ? {}\n : { onAllocationUncertain: options.onAllocationUncertain }),\n },\n local,\n );\n\n return { ...acquired, ...providerControls(client, sessions, acquired.reference) };\n });\n\n/** Borrows a running session: local connection only, and never a release request. */\nexport const borrowedRemote =\n (options: {\n readonly reference: SessionReference;\n readonly pendingWaitMillis?: number;\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n }): RemoteSource<RemoteLease, SessionError> =>\n (local) =>\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n const acquired = yield* attachRemote(options, local);\n\n return { ...acquired, ...providerControls(client, sessions, acquired.reference) };\n });\n\n/**\n * The one owned browser. Remote allocation, release and terminal observation belong to the\n * canonical control plane; this owner supplies only the local connection's cleanup evidence.\n */\nexport const acquireSession = Effect.fnUntraced(function* <L extends SessionLease, E, R>(\n limits: Limits,\n options: SessionOptions<L, E, R>,\n) {\n // The engine is resolved before anything is allocated, so an unissued binding costs nothing.\n const engine = options.engine ?? bindingImplementation(yield* BrowserbaseBrowserBinding);\n\n if (engine === undefined)\n return yield* BrowserError.make({\n operation: \"connect\",\n reason: \"configuration\",\n outcome: \"undispatched\",\n });\n const parentScope = yield* Scope.Scope;\n // Register the binding lifetime BEFORE the remote cleanup finalizer. On natural Scope\n // shutdown that finalizer must fence the owner before any callback finalizer can reenter it.\n const bindingLifetime = yield* Scope.fork(parentScope, \"sequential\");\n const ended = yield* Deferred.make<void>();\n const owner = yield* makeOwner(limits);\n const clock = yield* Clock.Clock;\n\n let driver: Driver | undefined;\n let connectPending = false;\n // Native listeners can outlive disconnect. Authority belongs to this connection\n // lease, not merely to the current session phase or selected browser target.\n let activeConnection: object | undefined;\n let handoffToken: string | undefined;\n let reconnectTarget: string | undefined;\n let activeBindings: ConnectionBindings | undefined;\n\n const fenceBindings = () => {\n activeBindings?.close();\n driver?.fenceInitialization?.();\n };\n\n const disposeBindings = Effect.gen(function* () {\n const connection = activeBindings;\n\n activeBindings = undefined;\n const callbacks = yield* Effect.exit(connection?.dispose ?? Effect.void);\n\n const registrations = yield* Effect.tryPromise({\n try: () => driver?.disposeInitialization?.() ?? Promise.resolve(),\n catch: () => BrowserError.make({ operation: \"close\", reason: \"provider\" }),\n }).pipe(Effect.exit);\n\n if (Exit.isFailure(callbacks)) return yield* Effect.failCause(callbacks.cause);\n if (Exit.isFailure(registrations)) return yield* Effect.failCause(registrations.cause);\n });\n\n const capture: CaptureParent = {\n owner,\n target: () => {\n if (driver === undefined) throw BrowserError.make({ operation: \"target\", reason: \"closed\" });\n\n return Target.make({ generation: owner.state.generation, ...driver.selected() });\n },\n resolve: (ticket, requested) =>\n native(\"capture-start\", ticket, async () => {\n if (driver === undefined)\n throw BrowserError.make({ operation: \"capture\", reason: \"closed\" });\n const binding = await driver.capture(requested);\n\n return {\n key: binding.targetId,\n target: Target.make({\n generation: owner.state.generation,\n pageId: binding.pageId,\n frameId: binding.frameId,\n }),\n source: binding.source,\n };\n }),\n captureLeases: new Map(),\n captureReservedBytes: 0,\n };\n\n owner.onInvalidate((reason) => {\n driver?.invalidateObservation();\n if ([\"disconnected\", \"uncertain\", \"closed\"].includes(reason)) fenceBindings();\n if ([\"paused\", \"disconnected\", \"uncertain\", \"closed\"].includes(reason))\n for (const lease of capture.captureLeases.values()) lease.invalidate(reason);\n });\n\n /**\n * The local half of cleanup. Each step is an independent fact for the canonical\n * coordinator, which owns the release request and the terminal status observation.\n */\n const local: LocalCleanup = {\n fence: Effect.sync(() => {\n owner.fence(\"closing\", \"closed\");\n handoffToken = undefined;\n activeConnection = undefined;\n Deferred.doneUnsafe(ended, Effect.void);\n }),\n capture: Effect.suspend(() =>\n Effect.forEach([...capture.captureLeases.values()], (lease) => lease.stop, {\n discard: true,\n }),\n ),\n initialization: disposeBindings,\n disconnect: Effect.suspend(() => {\n const acquired = driver;\n\n driver = undefined;\n if (acquired === undefined)\n return Effect.succeed<CleanupResult[\"local\"]>(connectPending ? \"pending\" : \"not-connected\");\n\n return Effect.tryPromise({\n try: () => acquired.disconnect(),\n catch: () => BrowserError.make({ operation: \"disconnect\", reason: \"provider\" }),\n }).pipe(Effect.as<CleanupResult[\"local\"]>(\"closed\"));\n }).pipe(\n Effect.ensuring(\n Effect.sync(() => {\n owner.state.phase = \"closed\";\n }),\n ),\n ),\n };\n\n const acquired = yield* options.remote(local, owner.lifetimeDeadline);\n\n const ref: L[\"reference\"] = acquired.reference;\n const release: L[\"release\"] = acquired.release;\n const cleanupResult: L[\"cleanupResult\"] = acquired.cleanupResult;\n\n const closeScope = acquired.release.pipe(\n Effect.ensuring(Deferred.succeed(ended, undefined)),\n Effect.asVoid,\n );\n\n const connectionEvents = (connectionLease: object): DriverEvents => ({\n invalidate: (reason) => {\n if (activeConnection === connectionLease) owner.invalidate(reason);\n },\n disconnected: () => {\n if (activeConnection !== connectionLease) return;\n if (\n owner.state.phase !== \"closing\" &&\n owner.state.phase !== \"closed\" &&\n owner.state.phase !== \"detached\"\n ) {\n owner.fence(\"uncertain\", \"disconnected\");\n }\n },\n pause: () => {\n if (activeConnection !== connectionLease) return;\n if (owner.state.phase === \"open\") owner.fence(\"paused\", \"paused\");\n // An unsolicited popup/dialog during setup cannot be silently admitted by\n // the later connect commit. No usable handle has been exposed: fail closed.\n else if (owner.state.phase === \"acquiring\") owner.fence(\"uncertain\", \"uncertain\");\n },\n fault: () => {\n if (activeConnection !== connectionLease) return;\n if (owner.state.phase !== \"closing\" && owner.state.phase !== \"closed\")\n owner.fence(\"uncertain\", \"uncertain\");\n },\n });\n\n const connectNative = (url: Redacted.Redacted<unknown>, nativeOptions: DriverOptions) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const connectionLease = {};\n\n activeConnection = connectionLease;\n connectPending = true;\n const events = connectionEvents(connectionLease);\n\n const bindings =\n options.connectBindings === undefined\n ? undefined\n : yield* options\n .connectBindings(\n events.fault,\n () =>\n activeConnection === connectionLease &&\n (owner.state.phase === \"acquiring\" || owner.state.phase === \"open\"),\n () =>\n activeConnection === connectionLease &&\n [\"acquiring\", \"open\", \"paused\"].includes(owner.state.phase),\n )\n .pipe(Scope.provide(bindingLifetime));\n\n activeBindings = bindings;\n\n const retired = () =>\n activeConnection !== connectionLease ||\n [\"closing\", \"closed\", \"uncertain\"].includes(owner.state.phase);\n\n if (retired()) {\n bindings?.close();\n yield* bindings?.dispose ?? Effect.void;\n\n return yield* BrowserError.make({ operation: \"connect\", reason: \"closed\" });\n }\n\n const acquired = yield* restore(\n engine.connect({\n connection: Redacted.value(url),\n options: {\n ...nativeOptions,\n ...(bindings === undefined\n ? {}\n : {\n bindings: bindings.bindings,\n onBindingFault: bindings.reportFailure,\n }),\n },\n events,\n onAbandoned: () => bindings?.close(),\n onSettled: () => {\n if (activeConnection === connectionLease) connectPending = false;\n },\n }),\n );\n\n driver = acquired;\n if (\n activeConnection !== connectionLease ||\n owner.state.phase === \"closed\" ||\n owner.state.phase === \"closing\" ||\n owner.state.phase === \"uncertain\"\n ) {\n yield* Effect.tryPromise({\n try: () => acquired.disconnect(),\n catch: () => BrowserError.make({ operation: \"connect\", reason: \"provider\" }),\n }).pipe(Effect.ignore);\n driver = undefined;\n\n return yield* BrowserError.make({ operation: \"connect\", reason: \"closed\" });\n }\n\n return acquired;\n }),\n );\n\n const getDriver = () => {\n if (driver === undefined)\n throw BrowserError.make({\n operation: \"target\",\n reason: \"closed\",\n outcome: \"undispatched\",\n });\n\n return driver;\n };\n\n /**\n * Work that depends on an initialized document waits for the current document's readiness.\n * Navigation, selection and page management deliberately do not: initialization must never\n * deadlock the navigation that produces the document it is waiting for.\n */\n const dependent = [\n \"read-text\",\n \"checkpoint\",\n \"control-facts\",\n \"revalidate\",\n \"click\",\n \"fill\",\n \"scroll\",\n \"pointer-move\",\n \"hover\",\n \"wheel\",\n \"press\",\n \"type\",\n \"screenshot\",\n \"observe\",\n \"wait\",\n \"click-and-wait\",\n \"download-action\",\n \"select-files\",\n \"file-chooser\",\n ];\n\n const requireReady = async (operation: BrowserOperation, ticket: Ticket) => {\n if (!dependent.includes(operation)) return;\n const state = await getDriver().documentReadiness(ticket);\n\n if (state._tag === \"Ready\" || state._tag === \"NotApplicable\") return;\n throw BrowserError.make({\n operation,\n reason:\n state._tag === \"RequiresNavigation\" || state.reason === \"stale\"\n ? \"stale\"\n : state.reason === \"timeout\"\n ? \"timeout\"\n : \"failed\",\n outcome: \"undispatched\",\n });\n };\n\n /**\n * `dependent` is false for lifecycle observations, which report what is actually on the\n * reattached page. Readiness governs work that depends on initialization, not the reading\n * that tells a caller whether this document was initialized at all.\n */\n const observeInside = (\n ticket: Ticket,\n maximumBytes = Math.min(options.maxReturnedBytes, 16384),\n controls = 32,\n dependent = true,\n scope: \"document\" | \"viewport\" = \"document\",\n ) =>\n Effect.suspend(() => {\n const revision = owner.state.revision;\n\n return native(\"observe\", ticket, async () => {\n await getDriver().pageControl?.checkSelected(ticket);\n if (dependent) await requireReady(\"observe\", ticket);\n\n return getDriver().observe(scope, maximumBytes, controls, ticket);\n }).pipe(\n Effect.flatMap((raw) =>\n Effect.gen(function* () {\n if (owner.state.revision !== revision)\n return yield* BrowserError.make({ operation: \"observe\", reason: \"stale\" });\n\n const result = yield* Effect.try({\n try: () => Observation.make({ ...raw, target: capture.target(), revision }),\n catch: (error) => publicError(error, \"observe\", { reason: \"malformed\" }),\n });\n\n const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(Observation))(\n result,\n ).pipe(\n Effect.mapError(() =>\n BrowserError.make({ operation: \"observe\", reason: \"malformed\" }),\n ),\n );\n\n if (new TextEncoder().encode(encoded).length > options.maxReturnedBytes) {\n return yield* BrowserError.make({ operation: \"observe\", reason: \"limit\" });\n }\n\n return result;\n }),\n ),\n );\n });\n\n /** A requested text bound may narrow the policy's bound, never widen it. */\n const textBudget = (\n operation: BrowserOperation,\n requested: number | undefined,\n ): Effect.Effect<number, BrowserError> => {\n const bytes = requested ?? Math.min(options.maxReturnedBytes, 16384);\n\n return bytes > options.maxReturnedBytes\n ? Effect.fail(\n BrowserError.make({ operation, reason: \"configuration\", outcome: \"undispatched\" }),\n )\n : Effect.succeed(bytes);\n };\n\n // Reading a target is an ownership operation too. A native mutation that times out\n // after dispatch fences the owner as uncertain; retaining the last native target\n // must not manufacture a fresh usable handle in that state.\n const readSelected = owner.guard(\n \"target\",\n () =>\n Effect.try({\n try: capture.target,\n catch: () =>\n BrowserError.make({ operation: \"target\", reason: \"closed\", outcome: \"undispatched\" }),\n }),\n { charge: false },\n );\n\n /**\n * While a navigation is in flight on the selected page, nothing else may change that page.\n * Reads, checkpoints, holds and every other page proceed.\n */\n const unreserved = (operation: BrowserOperation) =>\n Effect.suspend(() => {\n let pageId: string | undefined;\n\n try {\n pageId = driver?.selected().pageId;\n } catch {\n // No selected target: the operation itself reports that, with its own reason.\n }\n\n return pageId !== undefined && owner.reserved(pageId)\n ? Effect.fail(BrowserError.make({ operation, reason: \"busy\", outcome: \"undispatched\" }))\n : Effect.void;\n });\n\n const nativeOperation = <A>(\n operation: BrowserOperation,\n action: (driver: Driver, ticket: Ticket) => Promise<A>,\n options: {\n readonly mutation?: boolean;\n readonly charge?: boolean;\n /** Opening or closing a tab is independent of the selected page's document. */\n readonly anyPage?: boolean;\n } = {},\n ) =>\n owner.guard(\n operation,\n (ticket) =>\n native(operation, ticket, async () => {\n // A held page is refused, never woken: none of these may run against one.\n if (\n [\n \"resize\",\n \"wait\",\n \"click-and-wait\",\n \"download-action\",\n \"select-files\",\n \"file-chooser\",\n \"checkpoint\",\n \"control-facts\",\n \"revalidate\",\n ].includes(operation)\n )\n await getDriver().pageControl?.checkSelected(ticket);\n await requireReady(operation, ticket);\n\n return action(getDriver(), ticket);\n }),\n {\n ...options,\n ...(options.mutation === true && options.anyPage !== true\n ? { preflight: unreserved(operation) }\n : {}),\n },\n );\n\n /** A bound handle captures the page selection and connection generation, never the current DOM. */\n const bind = () => {\n const generation = owner.state.generation,\n selection = owner.state.selection;\n\n const check = () => {\n if (owner.state.generation !== generation || owner.state.selection !== selection) {\n return Effect.fail(\n BrowserError.make({ operation: \"handle\", reason: \"stale\", outcome: \"undispatched\" }),\n );\n }\n\n return Effect.void;\n };\n\n const run = <A>(\n operation: BrowserOperation,\n action: (driver: Driver, ticket: Ticket) => Promise<A>,\n mutation = false,\n ) =>\n owner.guard(\n operation,\n (ticket) =>\n native(operation, ticket, async () => {\n await getDriver().pageControl?.checkSelected(ticket);\n await requireReady(operation, ticket);\n\n return action(getDriver(), ticket);\n }),\n {\n mutation,\n preflight: mutation\n ? Effect.suspend(check).pipe(Effect.andThen(unreserved(operation)))\n : Effect.suspend(check),\n },\n );\n\n /**\n * Native input, stamped on the host monotonic clock that stamps captured frames, around\n * the native command alone: admission and readiness are over before the clock is read.\n */\n const input = (\n operation: BrowserOperation,\n action: (driver: Driver, ticket: Ticket) => Promise<NativeInput>,\n ) =>\n run(\n operation,\n async (driver, ticket) => {\n // What the input is sent to, read first: input may replace the document it reaches.\n const target = capture.target();\n const startedMonotonicNanos = clock.monotonicTimeNanosUnsafe();\n const dispatched = await action(driver, ticket);\n\n return {\n ...dispatched,\n target,\n startedMonotonicNanos,\n completedMonotonicNanos: clock.monotonicTimeNanosUnsafe(),\n };\n },\n true,\n );\n\n /**\n * Dispatches under a short permit and leaves the browser loading outside it. The reservation\n * is taken under that same permit, so no other mutation can reach the page in between, and\n * it is released only on a known outcome: an unsettled operation whose scope closes, or a\n * navigation that fails after dispatch, fences the owner exactly as an interrupted mutation\n * always has. Interrupting a waiter on `completed` stops nothing; `stop` is the one way to.\n */\n const startNavigation = Effect.fnUntraced(function* (\n url: string,\n timeoutMillis = limits.actionTimeoutMillis,\n ) {\n const begun = yield* run(\n \"navigate\",\n async (driver, ticket) => {\n const target = capture.target();\n const navigation = await driver.beginNavigation(url, timeoutMillis, ticket);\n\n return { target, navigation, reservation: owner.reserve(navigation.pageId) };\n },\n true,\n );\n\n const { navigation, reservation } = begun;\n const outcome = yield* Deferred.make<string, BrowserError>();\n\n const failed = (reason: BrowserError[\"reason\"]) =>\n Effect.fail(BrowserError.make({ operation: \"navigate\", reason, outcome: \"unknown\" }));\n\n /**\n * A navigation has exactly one outcome, and whoever decides it first settles the\n * reservation. It is released before anyone waiting is told, so the operation a waiter\n * runs next is admitted rather than finding its own page still reserved.\n */\n const decide = (result: Effect.Effect<string, BrowserError>, known: boolean) => {\n if (Deferred.isDoneUnsafe(outcome)) return;\n reservation.settle(known ? \"known\" : \"unknown\");\n Deferred.doneUnsafe(outcome, result);\n };\n\n navigation.settled.then(\n (url) => decide(Effect.succeed(url), true),\n // Failed after dispatch, and nothing says what the browser did: unknown, as it always was.\n (error: unknown) =>\n decide(\n Effect.fail(publicError(error, \"navigate\", { reason: \"provider\", outcome: \"unknown\" })),\n false,\n ),\n );\n // A fence already cleared the reservation; this only releases anyone still waiting.\n reservation.signal.addEventListener(\"abort\", () => decide(failed(\"stale\"), true), {\n once: true,\n });\n // Left unsettled, nothing knows what the browser did with it.\n yield* Effect.addFinalizer(() => Effect.sync(() => decide(failed(\"stale\"), false)));\n\n return {\n target: begun.target,\n completed: Deferred.await(outcome),\n /**\n * The browser's acknowledgement is the known outcome. Playwright's own promise is not\n * waited for: an aborted parse fires no DOMContentLoaded, so it only ever times out.\n */\n stop: Effect.tryPromise({\n try: () => navigation.stop(),\n catch: (error) =>\n publicError(error, \"navigate-stop\", { reason: \"provider\", outcome: \"unknown\" }),\n }).pipe(\n Effect.timeoutOrElse({\n duration: 3000,\n orElse: () =>\n Effect.fail(\n BrowserError.make({\n operation: \"navigate-stop\",\n reason: \"timeout\",\n outcome: \"unknown\",\n }),\n ),\n }),\n Effect.tap(() => Effect.sync(() => decide(failed(\"interrupted\"), true))),\n ),\n };\n });\n\n return {\n startNavigation,\n // The same machinery, scoped to the call: leaving it unsettled fences, as it always has.\n navigate: (url: string) =>\n Effect.scoped(\n startNavigation(url).pipe(Effect.flatMap((operation) => operation.completed)),\n ),\n readText: (selector?: string) =>\n run(\"read-text\", (driver, ticket) =>\n driver.readText(selector, options.maxReturnedBytes, ticket),\n ),\n click: (target: string | ObservedElement, policy?: AdmissionPolicy) =>\n run(\"click\", (driver, ticket) => driver.click(target, ticket, policy), true),\n fill: (target: string | ObservedElement, value: string, policy?: AdmissionPolicy) =>\n run(\"fill\", (driver, ticket) => driver.fill(target, value, ticket, policy), true),\n scroll: (x: number, y: number) =>\n run(\"scroll\", (driver, ticket) => driver.scroll(x, y, ticket), true),\n pointerMove: (to: NativePoint) =>\n input(\"pointer-move\", (driver, ticket) => driver.pointerMove(to, ticket)),\n hover: (target: string | ObservedElement, policy?: AdmissionPolicy) =>\n input(\"hover\", (driver, ticket) => driver.hover(target, ticket, policy)),\n wheel: (deltaX: number, deltaY: number, at?: NativePoint) =>\n input(\"wheel\", (driver, ticket) => driver.wheel(deltaX, deltaY, at, ticket)),\n press: (\n key: string,\n modifiers: ReadonlyArray<KeyModifier>,\n into?: string | ObservedElement,\n policy?: AdmissionPolicy,\n ) => input(\"press\", (driver, ticket) => driver.press(key, modifiers, into, ticket, policy)),\n type: (text: string, into?: string | ObservedElement, policy?: AdmissionPolicy) =>\n input(\"type\", (driver, ticket) => driver.type(text, into, ticket, policy)),\n screenshot: (full: boolean) =>\n run(\"screenshot\", (driver, ticket) =>\n driver.screenshot(full, options.maxReturnedBytes, ticket),\n ),\n };\n };\n\n /**\n * The remaining execution lifetime bounds waiting for a RUNNING session and its endpoint,\n * within the resource service's own maximum wait. A long business budget does not become\n * an invalid provider-wait configuration.\n */\n const remainingMillis = () =>\n Math.min(\n 600_000,\n Math.max(\n 1,\n Math.ceil(owner.lifetimeDeadline - Number(clock.monotonicTimeNanosUnsafe()) / 1_000_000),\n ),\n );\n\n const connectionUrl = (operation: BrowserOperation) =>\n Effect.suspend(() => acquired.connection(remainingMillis())).pipe(\n Effect.mapError((error) => BrowserError.make({ operation, reason: error.reason })),\n );\n\n const connected = yield* Effect.cached(\n owner\n .guard(\n \"connect\",\n (ticket) =>\n connectionUrl(\"connect\").pipe(\n Effect.flatMap((url) => connectNative(url, options.driver)),\n Effect.andThen(\n native(\"connect\", ticket, async () => {\n getDriver().selected();\n }),\n ),\n Effect.tap(() =>\n Effect.sync(() => {\n owner.state.phase = \"open\";\n }),\n ),\n ),\n { phases: [\"acquiring\"], charge: false, verifyAfter: false },\n )\n .pipe(\n Effect.onError(() => closeScope),\n Effect.onInterrupt(() => closeScope),\n ),\n );\n\n const execution = () => {\n const port = getDriver().pageControl;\n\n if (port === undefined)\n throw BrowserError.make({\n operation: \"page-control\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n });\n\n return port;\n };\n\n const controls = {\n pageControl: {\n state: (page: PageInfo) =>\n nativeOperation(\"page-state\", (_driver, ticket) => execution().state(page, ticket), {\n charge: false,\n }),\n suspend: (page: PageInfo) =>\n nativeOperation(\"page-suspend\", (_driver, ticket) => execution().suspend(page, ticket), {\n charge: false,\n }),\n resume: (receipt: PageSuspension) =>\n nativeOperation(\"page-resume\", (_driver, ticket) => execution().resume(receipt, ticket), {\n charge: false,\n }),\n },\n reference: ref,\n capture,\n bind,\n currentTarget: readSelected,\n cleanupResult,\n close: release,\n observe: (reading: Reading = { scope: \"document\" }) =>\n textBudget(\"observe\", reading.maxTextBytes).pipe(\n Effect.flatMap((bytes) =>\n owner.guard(\"observe\", (ticket) =>\n observeInside(ticket, bytes, reading.maxControls ?? 32, true, reading.scope),\n ),\n ),\n ),\n /**\n * Passive: not a mutation, so the action observation and the selection are left exactly as\n * they were. A held page is refused rather than woken to be read.\n */\n checkpoint: (reading: Omit<Reading, \"scope\"> & { readonly picture: boolean }) =>\n textBudget(\"checkpoint\", reading.maxTextBytes).pipe(\n Effect.flatMap((bytes) =>\n nativeOperation(\"checkpoint\", async (driver, ticket) => {\n const target = capture.target();\n const revision = owner.state.revision;\n const startedMonotonicNanos = clock.monotonicTimeNanosUnsafe();\n\n const sampled = await driver.checkpoint(\n bytes,\n reading.maxControls ?? 32,\n reading.picture ? options.maxReturnedBytes : undefined,\n ticket,\n );\n\n return {\n ...sampled,\n target,\n revision,\n startedMonotonicNanos,\n completedMonotonicNanos: clock.monotonicTimeNanosUnsafe(),\n };\n }),\n ),\n ),\n controlFacts: (reference: ObservedElement) =>\n nativeOperation(\"control-facts\", (driver, ticket) => driver.controlFacts(reference, ticket)),\n /** Not charged: it sends no input and reads one node the caller was already given. */\n revalidate: (reference: ObservedElement) =>\n nativeOperation(\"revalidate\", (driver, ticket) => driver.revalidate(reference, ticket), {\n charge: false,\n }),\n // Inspecting readiness is not an action: it charges nothing and mutates nothing.\n readiness: owner.guard(\n \"ready\",\n (ticket) => native(\"ready\", ticket, () => getDriver().documentReadiness(ticket)),\n { charge: false },\n ),\n pages: nativeOperation(\"list-pages\", (driver, ticket) => driver.listPages(ticket), {\n charge: false,\n }),\n frames: nativeOperation(\"list-frames\", (driver, ticket) => driver.listFrames(ticket), {\n charge: false,\n }),\n selectPage: (id: string) =>\n nativeOperation(\n \"select-page\",\n async (driver, ticket) => {\n await driver.selectPage(id, ticket);\n owner.state.selection++;\n },\n { charge: false },\n ),\n selectFrame: (id: string) =>\n nativeOperation(\n \"select-frame\",\n async (driver, ticket) => {\n await driver.selectFrame(id, ticket);\n owner.state.selection++;\n },\n { charge: false },\n ),\n createPage: () =>\n nativeOperation(\"new-page\", (driver, ticket) => driver.newPage(ticket), {\n mutation: true,\n charge: false,\n anyPage: true,\n }),\n closePage: (id: string) =>\n nativeOperation(\"close-page\", (driver, ticket) => driver.closePage(id, ticket), {\n mutation: true,\n charge: false,\n anyPage: true,\n }),\n resize: (viewport: Viewport) =>\n nativeOperation(\"resize\", (driver, ticket) => driver.resize(viewport, ticket), {\n mutation: true,\n charge: false,\n }),\n waitFor: (selector: string, state: \"visible\" | \"hidden\" | \"attached\" | \"detached\") =>\n nativeOperation(\"wait\", (driver, ticket) => driver.waitFor(selector, state, ticket)),\n clickAndWait: (target: string | ObservedElement) =>\n nativeOperation(\"click-and-wait\", (driver, ticket) => driver.clickAndWait(target, ticket), {\n mutation: true,\n }),\n clickForDownload: (target: string | ObservedElement) =>\n nativeOperation(\n \"download-action\",\n (driver, ticket) => driver.clickForDownload(target, ticket),\n { mutation: true },\n ),\n selectFiles: (target: string | ObservedElement, files: ReadonlyArray<NativeFileSelection>) =>\n nativeOperation(\n \"select-files\",\n (driver, ticket) => driver.selectFiles(target, files, ticket),\n { mutation: true },\n ),\n clickForFileSelection: (\n target: string | ObservedElement,\n files: ReadonlyArray<NativeFileSelection>,\n ) =>\n nativeOperation(\n \"file-chooser\",\n (driver, ticket) => driver.clickForFileSelection(target, files, ticket),\n { mutation: true },\n ),\n liveView: (ttl: number) =>\n owner.guard(\n \"live-view\",\n () =>\n acquired.liveView === undefined\n ? Effect.fail(\n BrowserError.make({\n operation: \"live-view\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n }),\n )\n : acquired.liveView(ttl),\n {\n charge: false,\n phases: [\"open\", \"paused\"],\n },\n ),\n beginHandoff: (ttl: number) =>\n owner.guard(\n \"handoff\",\n () =>\n Effect.gen(function* () {\n if (options.driver.pageControl || acquired.liveView === undefined)\n return yield* BrowserError.make({\n operation: \"handoff\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n });\n if (owner.state.phase === \"open\") owner.fence(\"paused\", \"paused\");\n handoffToken ??= globalThis.crypto.randomUUID();\n // Failure to mint a view leaves automation paused; there is no finally/resume pair.\n const view = yield* acquired.liveView(ttl);\n\n return { token: Redacted.make(handoffToken), view };\n }),\n { charge: false, phases: [\"open\", \"paused\"], verifyAfter: false },\n ),\n resume: (token: Redacted.Redacted<string>, operatorReleasedControl: boolean) =>\n owner.guard(\n \"resume\",\n (ticket) =>\n Effect.gen(function* () {\n if (\n !operatorReleasedControl ||\n handoffToken === undefined ||\n Redacted.value(token) !== handoffToken\n ) {\n return yield* BrowserError.make({\n operation: \"resume\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n }\n yield* native(\"resume\", ticket, () => getDriver().dismissDialogs(ticket));\n const observation = yield* observeInside(ticket, undefined, undefined, false);\n\n // This synchronous commit remains under the same permit as the fresh observation.\n owner.state.phase = \"open\";\n handoffToken = undefined;\n\n return observation;\n }),\n { charge: false, phases: [\"paused\"], verifyAfter: false },\n ),\n detach: owner\n .guard(\n \"detach\",\n (ticket) =>\n Effect.gen(function* () {\n if (!options.keepAlive)\n return yield* BrowserError.make({\n operation: \"detach\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n });\n reconnectTarget = yield* native(\"detach\", ticket, () => getDriver().selectedTargetId());\n const attached = getDriver();\n\n activeConnection = undefined;\n owner.fence(\"detached\", \"disconnected\");\n const initialization = yield* Effect.exit(disposeBindings);\n\n const disconnected = yield* Effect.tryPromise({\n try: () => attached.disconnect(),\n catch: () => BrowserError.make({ operation: \"detach\", reason: \"disconnected\" }),\n }).pipe(Effect.exit);\n\n driver = undefined;\n if (Exit.isFailure(initialization))\n return yield* Effect.failCause(initialization.cause);\n if (Exit.isFailure(disconnected)) return yield* Effect.failCause(disconnected.cause);\n\n return { reference: ref, targetId: reconnectTarget };\n }),\n { charge: false, verifyAfter: false },\n )\n .pipe(Effect.onError(() => Effect.sync(() => owner.fence(\"uncertain\", \"uncertain\")))),\n reconnect: (operatorReleasedControl: boolean) =>\n owner\n .guard(\n \"reconnect\",\n (ticket) =>\n Effect.gen(function* () {\n if (\n !options.keepAlive ||\n reconnectTarget === undefined ||\n !operatorReleasedControl ||\n acquired.verifyReconnect === undefined\n ) {\n return yield* BrowserError.make({\n operation: \"reconnect\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n });\n }\n\n yield* acquired.verifyReconnect;\n owner.state.phase = \"acquiring\";\n const endpoint = yield* connectionUrl(\"reconnect\");\n\n yield* connectNative(endpoint, {\n ...options.driver,\n initialTargetId: reconnectTarget,\n newPage: false,\n preserveViewport: true,\n });\n const observation = yield* observeInside(ticket, undefined, undefined, false);\n\n owner.state.phase = \"open\";\n\n return observation;\n }),\n { charge: false, phases: [\"detached\", \"acquiring\"], verifyAfter: false },\n )\n .pipe(\n Effect.onError(() => closeScope),\n Effect.onInterrupt(() => closeScope),\n ),\n };\n\n // One timer belongs to the enclosing execution, never to an individual Tool call.\n const remaining = Math.max(\n 0,\n owner.lifetimeDeadline - Number(clock.monotonicTimeNanosUnsafe()) / 1_000_000,\n );\n\n // The execution lifetime distinguishes expiry from natural completion before\n // running the shared close path; this race has the required proven semantics.\n // @effect-diagnostics-next-line raceFirstWithSleepToTimeout:off\n yield* Effect.raceFirst(\n Effect.sleep(remaining).pipe(Effect.as(true)),\n Deferred.await(ended).pipe(Effect.as(false)),\n ).pipe(\n Effect.flatMap((expired) => (expired ? closeScope : Effect.void)),\n Effect.forkIn(parentScope),\n );\n\n return {\n reference: ref,\n /** The caller keeps its own lease type, including whether an allocation attempt exists. */\n lease: acquired,\n close: controls.close,\n connect: Effect.suspend(() =>\n owner.state.phase === \"closed\" || owner.state.phase === \"closing\"\n ? Effect.fail(\n BrowserError.make({\n operation: \"connect\",\n reason: \"closed\",\n outcome: \"undispatched\",\n }),\n )\n : connected.pipe(Effect.as(controls)),\n ),\n };\n});\n\nexport type SessionControls<L extends SessionLease = RemoteLease> =\n Effect.Success<ReturnType<typeof acquireSession<L, never, never>>> extends {\n connect: Effect.Effect<infer A, infer _E, infer _R>;\n }\n ? A\n : never;\n\nexport type BoundControls = ReturnType<SessionControls[\"bind\"]>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sessions-CtbseWEh.mjs","names":[],"sources":["../src/internal/browser/LiveView.ts","../src/Sessions.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport type { BrowserbaseClient } from \"../../Client.ts\";\nimport { BrowserError, ClientError } from \"../../Errors.ts\";\nimport { Identifier, type SessionReference } from \"../../References.ts\";\n\nconst LiveUrl = Schema.String.check(\n Schema.isMaxLength(16384),\n Schema.makeFilter((value) => {\n try {\n const url = new URL(value);\n\n return (\n url.protocol === \"https:\" &&\n !url.username &&\n !url.password &&\n (url.hostname === \"browserbase.com\" || url.hostname.endsWith(\".browserbase.com\"))\n );\n } catch {\n return false;\n }\n }),\n);\n\nconst Live = Schema.Struct({\n debuggerFullscreenUrl: LiveUrl,\n pages: Schema.Array(Schema.Struct({ id: Identifier, debuggerFullscreenUrl: LiveUrl })).check(\n Schema.isMaxLength(64),\n ),\n});\n\nexport interface LiveView {\n readonly session: Redacted.Redacted<string>;\n readonly pages: ReadonlyArray<{\n readonly liveViewPageId: string;\n readonly url: Redacted.Redacted<string>;\n }>;\n readonly requestedTtlSeconds: number;\n}\n\n/**\n * Issuing a debugger URL is an authorization step, not proof that an operator took control.\n * The URL is redacted here so it cannot be logged or returned as an ordinary model value.\n */\nexport const issueLiveUrls = Effect.fnUntraced(function* (\n client: BrowserbaseClient[\"Service\"],\n reference: SessionReference,\n expiresInSeconds: number,\n) {\n if (!Number.isSafeInteger(expiresInSeconds) || expiresInSeconds < 1 || expiresInSeconds > 21600)\n return yield* ClientError.make({\n operation: \"provider-read\",\n reason: \"configuration\",\n outcome: \"undispatched\",\n });\n if (reference.projectId !== client.projectId)\n return yield* ClientError.make({\n operation: \"provider-read\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n\n const raw = yield* client.json(\n \"GET\",\n `/v1/sessions/${encodeURIComponent(reference.sessionId)}/debug?expiresIn=${expiresInSeconds}`,\n );\n\n const value = yield* Schema.decodeUnknownEffect(Live)(raw).pipe(\n Effect.mapError(() => ClientError.make({ operation: \"provider-read\", reason: \"malformed\" })),\n );\n\n return {\n session: Redacted.make(value.debuggerFullscreenUrl),\n pages: value.pages.map((page) => ({\n liveViewPageId: page.id,\n url: Redacted.make(page.debuggerFullscreenUrl),\n })),\n requestedTtlSeconds: expiresInSeconds,\n } satisfies LiveView;\n});\n\nexport const issueLiveView = (\n client: BrowserbaseClient[\"Service\"],\n reference: SessionReference,\n expiresInSeconds: number,\n) =>\n issueLiveUrls(client, reference, expiresInSeconds).pipe(\n Effect.mapError((error) => BrowserError.make({ operation: \"live-view\", reason: error.reason })),\n );\n","import { Clock, Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport type { ClientError } from \"./Errors.ts\";\nimport { SessionError } from \"./Errors.ts\";\nimport { issueLiveUrls, type LiveView } from \"./internal/browser/LiveView.ts\";\nexport type { LiveView } from \"./internal/browser/LiveView.ts\";\nimport { SessionReference } from \"./References.ts\";\nimport {\n ProviderSession,\n SessionMetadata,\n SessionStatus,\n isTerminalSessionStatus,\n} from \"./SessionData.ts\";\nexport { SessionMetadata, SessionStatus, isTerminalSessionStatus } from \"./SessionData.ts\";\n\nexport const SessionListQuery = Schema.Struct({\n status: Schema.optionalKey(SessionStatus),\n q: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(2048))),\n});\n\nexport type SessionListQuery = typeof SessionListQuery.Type;\n\nexport const SessionWaitOptions = Schema.Struct({\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 600000 })),\n pollIntervalMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 25, maximum: 5000 })),\n ),\n});\n\nexport type SessionWaitOptions = typeof SessionWaitOptions.Type;\n\nconst Millis = Schema.Finite;\n\n/**\n * One CDP-level log entry. Protocol payloads are present only when requested: they carry\n * page content, cookies and typed input, so they are host evidence, never model input.\n */\nexport class SessionLogEntry extends Schema.Class<SessionLogEntry>(\"BrowserbaseSessionLogEntry\")({\n method: Schema.String.check(Schema.isMaxLength(256)),\n pageId: Schema.Int,\n frameId: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(256))),\n loaderId: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(256))),\n timestamp: Schema.optionalKey(Millis),\n requestTimestamp: Schema.optionalKey(Millis),\n responseTimestamp: Schema.optionalKey(Millis),\n params: Schema.optionalKey(Schema.Json),\n result: Schema.optionalKey(Schema.Json),\n}) {}\n\nconst ProviderLog = Schema.Struct({\n method: SessionLogEntry.fields.method,\n pageId: Schema.Int,\n sessionId: Schema.String,\n frameId: SessionLogEntry.fields.frameId,\n loaderId: SessionLogEntry.fields.loaderId,\n timestamp: Schema.optionalKey(Millis),\n request: Schema.optionalKey(\n Schema.Struct({\n params: Schema.optionalKey(Schema.Json),\n timestamp: Schema.optionalKey(Millis),\n }),\n ),\n response: Schema.optionalKey(\n Schema.Struct({\n result: Schema.optionalKey(Schema.Json),\n timestamp: Schema.optionalKey(Millis),\n }),\n ),\n});\n\nexport interface SessionLogOptions {\n /** Include CDP `params`/`result` payloads. Off by default; see `SessionLogEntry`. */\n readonly includePayloads?: boolean;\n}\n\nconst now = Clock.monotonicTimeNanos.pipe(Effect.map((value) => Number(value) / 1000000));\n\nconst fromClient = (operation: SessionError[\"operation\"], error: ClientError): SessionError =>\n SessionError.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 malformed = (operation: SessionError[\"operation\"], mutation = false) =>\n SessionError.make({\n operation,\n reason: \"malformed\",\n ...(mutation ? { outcome: \"unknown\" as const } : {}),\n });\n\nconst configuration = (operation: SessionError[\"operation\"]) =>\n SessionError.make({ operation, reason: \"configuration\", outcome: \"undispatched\" });\n\n/** Passive inspection never releases a remote session. Release is a separate explicit mutation. */\nexport class BrowserbaseSessions extends Context.Service<\n BrowserbaseSessions,\n {\n readonly retrieve: (\n reference: SessionReference,\n ) => Effect.Effect<SessionMetadata, SessionError>;\n readonly list: (\n query?: SessionListQuery,\n ) => Effect.Effect<ReadonlyArray<SessionMetadata>, SessionError>;\n readonly requestRelease: (\n reference: SessionReference,\n ) => Effect.Effect<SessionMetadata, SessionError>;\n readonly waitForTerminal: (\n reference: SessionReference,\n options: SessionWaitOptions,\n ) => Effect.Effect<SessionMetadata, SessionError>;\n readonly waitUntilRunning: (\n reference: SessionReference,\n options: SessionWaitOptions,\n ) => Effect.Effect<SessionMetadata, SessionError>;\n /** Session logs, bounded by the 1 MiB control-plane reply limit (`reason: \"limit\"`). */\n readonly logs: (\n reference: SessionReference,\n options?: SessionLogOptions,\n ) => Effect.Effect<ReadonlyArray<SessionLogEntry>, SessionError>;\n /**\n * Redacted Live View URLs for any session in the project, owned or not. Issuing a URL\n * grants view and input access to whoever holds it; it does not pause automation.\n */\n readonly liveUrls: (\n reference: SessionReference,\n expiresInSeconds?: number,\n ) => Effect.Effect<LiveView, SessionError>;\n }\n>()(\"effect-browserbase/Sessions\") {\n static readonly layer: Layer.Layer<BrowserbaseSessions, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseSessions,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const validate = Effect.fnUntraced(function* (\n reference: SessionReference,\n operation: SessionError[\"operation\"],\n ) {\n const ref = yield* Schema.decodeEffect(SessionReference)(reference, {\n onExcessProperty: \"error\",\n }).pipe(Effect.mapError(() => configuration(operation)));\n\n if (ref.projectId !== client.projectId)\n return yield* SessionError.make({\n operation,\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n\n return ref;\n });\n\n const decode = Effect.fnUntraced(function* (\n raw: unknown,\n operation: SessionError[\"operation\"],\n expected?: SessionReference,\n mutation = false,\n ) {\n const value = yield* Schema.decodeUnknownEffect(ProviderSession)(raw).pipe(\n Effect.mapError(() => malformed(operation, mutation)),\n );\n\n if (\n value.projectId !== client.projectId ||\n (expected !== undefined &&\n (value.id !== expected.sessionId || value.projectId !== expected.projectId))\n )\n return yield* malformed(operation, mutation);\n const { id, projectId, ...metadata } = value;\n\n return SessionMetadata.make({\n reference: SessionReference.make({ provider: \"browserbase\", projectId, sessionId: id }),\n ...metadata,\n });\n });\n\n const read = Effect.fnUntraced(function* (reference: SessionReference, deadline?: number) {\n const ref = yield* validate(reference, \"session-retrieve\");\n\n const raw = yield* client\n .json(\"GET\", `/v1/sessions/${encodeURIComponent(ref.sessionId)}`, undefined, deadline)\n .pipe(Effect.mapError((error) => fromClient(\"session-retrieve\", error)));\n\n return yield* decode(raw, \"session-retrieve\", ref);\n });\n\n const retrieve = Effect.fn(\"BrowserbaseSessions.retrieve\")(function* (\n reference: SessionReference,\n ) {\n return yield* read(reference);\n });\n\n const list = Effect.fn(\"BrowserbaseSessions.list\")(function* (query: SessionListQuery = {}) {\n const checked = yield* Schema.decodeEffect(SessionListQuery)(query, {\n onExcessProperty: \"error\",\n }).pipe(Effect.mapError(() => configuration(\"session-list\")));\n\n const search = new URLSearchParams();\n\n if (checked.status !== undefined) search.set(\"status\", checked.status);\n if (checked.q !== undefined) search.set(\"q\", checked.q);\n\n const raw = yield* client\n .json(\"GET\", `/v1/sessions${search.size === 0 ? \"\" : `?${search}`}`)\n .pipe(Effect.mapError((error) => fromClient(\"session-list\", error)));\n\n const rows = yield* Schema.decodeUnknownEffect(\n Schema.Array(ProviderSession).check(Schema.isMaxLength(1024)),\n )(raw).pipe(Effect.mapError(() => malformed(\"session-list\")));\n\n if (new Set(rows.map((row) => row.id)).size !== rows.length)\n return yield* malformed(\"session-list\");\n const output: SessionMetadata[] = [];\n\n for (const row of rows) output.push(yield* decode(row, \"session-list\"));\n\n return output;\n });\n\n const requestRelease = Effect.fn(\"BrowserbaseSessions.requestRelease\")(function* (\n reference: SessionReference,\n ) {\n const ref = yield* validate(reference, \"session-release\");\n\n const raw = yield* client\n .json(\"POST\", `/v1/sessions/${encodeURIComponent(ref.sessionId)}`, {\n projectId: ref.projectId,\n status: \"REQUEST_RELEASE\",\n })\n .pipe(Effect.mapError((error) => fromClient(\"session-release\", error)));\n\n return yield* decode(raw, \"session-release\", ref, true);\n });\n\n const wait = Effect.fnUntraced(function* (\n reference: SessionReference,\n options: SessionWaitOptions,\n untilRunning: boolean,\n ) {\n const bounds = yield* Schema.decodeEffect(SessionWaitOptions)(options, {\n onExcessProperty: \"error\",\n }).pipe(Effect.mapError(() => configuration(\"session-wait\")));\n\n const deadline = (yield* now) + bounds.timeoutMillis;\n\n for (;;) {\n const remaining = deadline - (yield* now);\n\n if (remaining <= 0)\n return yield* SessionError.make({ operation: \"session-wait\", reason: \"timeout\" });\n\n // The deadline bounds the provider read too, not just sleeps between reads.\n const metadata = yield* read(reference, deadline).pipe(\n Effect.timeoutOrElse({\n duration: remaining,\n orElse: () =>\n Effect.fail(SessionError.make({ operation: \"session-wait\", reason: \"timeout\" })),\n }),\n );\n\n if (\n untilRunning ? metadata.status === \"RUNNING\" : isTerminalSessionStatus(metadata.status)\n )\n return metadata;\n if (untilRunning && isTerminalSessionStatus(metadata.status))\n return yield* SessionError.make({ operation: \"session-wait\", reason: \"expired\" });\n yield* Effect.sleep(\n Math.max(0, Math.min(bounds.pollIntervalMillis ?? 250, deadline - (yield* now))),\n );\n }\n });\n\n const logs = Effect.fn(\"BrowserbaseSessions.logs\")(function* (\n reference: SessionReference,\n options: SessionLogOptions = {},\n ) {\n const ref = yield* validate(reference, \"session-logs\");\n\n const raw = yield* client\n .json(\"GET\", `/v1/sessions/${encodeURIComponent(ref.sessionId)}/logs`)\n .pipe(Effect.mapError((error) => fromClient(\"session-logs\", error)));\n\n const rows = yield* Schema.decodeUnknownEffect(\n Schema.Array(ProviderLog).check(Schema.isMaxLength(100_000)),\n )(raw).pipe(Effect.mapError(() => malformed(\"session-logs\")));\n\n if (rows.some((row) => row.sessionId !== ref.sessionId))\n return yield* malformed(\"session-logs\");\n\n return rows.map((row) =>\n SessionLogEntry.make({\n method: row.method,\n pageId: row.pageId,\n ...(row.frameId === undefined ? {} : { frameId: row.frameId }),\n ...(row.loaderId === undefined ? {} : { loaderId: row.loaderId }),\n ...(row.timestamp === undefined ? {} : { timestamp: row.timestamp }),\n ...(row.request?.timestamp === undefined\n ? {}\n : { requestTimestamp: row.request.timestamp }),\n ...(row.response?.timestamp === undefined\n ? {}\n : { responseTimestamp: row.response.timestamp }),\n ...(options.includePayloads === true && row.request?.params !== undefined\n ? { params: row.request.params }\n : {}),\n ...(options.includePayloads === true && row.response?.result !== undefined\n ? { result: row.response.result }\n : {}),\n }),\n );\n });\n\n const liveUrls = Effect.fn(\"BrowserbaseSessions.liveUrls\")(function* (\n reference: SessionReference,\n expiresInSeconds = 300,\n ) {\n const ref = yield* validate(reference, \"session-live-view\");\n\n return yield* issueLiveUrls(client, ref, expiresInSeconds).pipe(\n Effect.mapError((error) => fromClient(\"session-live-view\", error)),\n );\n });\n\n return BrowserbaseSessions.of({\n logs,\n liveUrls,\n retrieve,\n list,\n requestRelease,\n waitForTerminal: (ref, options) => wait(ref, options, false),\n waitUntilRunning: (ref, options) => wait(ref, options, true),\n });\n }),\n );\n}\n"],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __defProp = Object.defineProperty;
3
- var __exportAll = (all, no_symbols) => {
4
- let target = {};
5
- for (var name in all) __defProp(target, name, {
6
- get: all[name],
7
- enumerable: true
8
- });
9
- if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
- return target;
11
- };
12
- //#endregion
13
- export { __exportAll as t };