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 +1 @@
1
- {"version":3,"file":"Browser.mjs","names":["makeBrowserSession","Bootstrap.empty"],"sources":["../src/Browser.ts"],"sourcesContent":["import { Context, Effect, Layer, type Option, type Redacted, Scope } from \"effect\";\n\nimport * as Bootstrap from \"./Bootstrap.ts\";\nimport { BrowserbaseBrowserBinding } from \"./BrowserBinding.ts\";\nimport type {\n Checkpoint,\n CheckpointOptions,\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 WheelRequest,\n} from \"./BrowserData.ts\";\nimport {\n type ControlFacts,\n ActionResult,\n AutomationOptions,\n BrowserPolicy,\n ClickRequest,\n type FrameInfo,\n InlineFiles,\n type Observation,\n type PageInfo,\n type SelectFilesRequest,\n Selector,\n type Target,\n Viewport,\n} from \"./BrowserData.ts\";\nimport type { CleanupResult } from \"./Cleanup.ts\";\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport type { InitializationError } from \"./Errors.ts\";\nimport {\n type AllocationError,\n BrowserError,\n type BrowserOperation,\n type ContextError,\n type SessionError,\n} from \"./Errors.ts\";\nimport { makeBindings, preparePlan, type Bindings } from \"./internal/browser/Bindings.ts\";\nimport { compileBootstrap } from \"./internal/browser/Bootstrap.ts\";\nimport type { NativeFileSelection } from \"./internal/browser/Driver.ts\";\nimport type { LiveView } from \"./internal/browser/LiveView.ts\";\nimport {\n checked,\n decoded,\n makeSession as makeBrowserSession,\n} from \"./internal/browser/PublicSession.ts\";\nimport {\n acquireSession,\n borrowedRemote,\n ownedRemote,\n type SessionControls,\n} from \"./internal/browser/Session.ts\";\nimport type { ContextWriterPermit } from \"./internal/session/WriterFacts.ts\";\nimport { issuedUpload } from \"./internal/upload/Issued.ts\";\nimport type { LaunchRecipe } from \"./Launch.ts\";\nimport { Identifier, type AllocationAttempt, type SessionReference } from \"./References.ts\";\nimport { BrowserbaseSessions } from \"./Sessions.ts\";\nimport { DownloadObservation } from \"./Transfers.ts\";\n\nexport type { LiveView } from \"./internal/browser/LiveView.ts\";\n\n/** Host configuration. Credentials live in the Client; a model never selects these values. */\nexport interface BrowserOptions extends AutomationOptions {\n readonly launch: LaunchRecipe;\n /** Required whenever the launch recipe persists a context. */\n readonly contextWriter?: ContextWriterPermit;\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\nexport interface Handoff {\n readonly token: Redacted.Redacted<string>;\n readonly view: LiveView;\n}\n\n/**\n * A host's decision about one control, made on facts read from the exact node immediately\n * before input. Returning anything but `true`, or throwing, sends nothing and fails `denied`.\n * It is a plain synchronous function on purpose: it runs while the owner's permit is held, where\n * waiting on a model or a network call would stall every other operation. It is not an atomic\n * check-and-input transaction, because page script can still run before the native input lands.\n */\nexport interface ElementAdmission {\n readonly admit: (facts: ControlFacts) => boolean;\n}\n\n/**\n * A navigation the browser is still performing. The owner's permit was released when it was\n * dispatched, so while it loads a host may read, `checkpoint`, hold and resume this page, and\n * use any other page. Anything that would change this page fails `busy` until it settles.\n *\n * Leaving its scope unsettled fences the session, exactly as an interrupted mutation does,\n * because nothing then knows what the browser did. It is never replayed.\n */\nexport interface NavigationOperation {\n /** What was navigated, read before dispatch. */\n readonly target: Target;\n /**\n * The document reached DOMContentLoaded. It belongs to this one navigation: a successor that\n * reaches the same URL fails it instead. Interrupting a waiter stops nothing in the browser.\n */\n readonly completed: Effect.Effect<NavigationResult, BrowserError>;\n /**\n * Asks the browser to stop loading and waits for this navigation to settle, after which\n * `completed` fails `interrupted`. Success is a known outcome and the session stays usable:\n * the page holds whatever had loaded. It does not undo anything the page already did.\n */\n readonly stop: Effect.Effect<void, BrowserError>;\n}\n\n/** One selected page and frame at one connection generation, never the current DOM. */\nexport interface BoundTarget {\n readonly navigate: (request: NavigateRequest) => Effect.Effect<NavigationResult, BrowserError>;\n /** `navigate`, left in flight: the same single dispatch, completed by the caller. */\n readonly startNavigation: (\n request: StartNavigationRequest,\n ) => Effect.Effect<NavigationOperation, BrowserError, Scope.Scope>;\n readonly readText: (request: ReadTextRequest) => Effect.Effect<TextResult, BrowserError>;\n readonly click: (request: ClickRequest) => Effect.Effect<ActionResult, BrowserError>;\n readonly fill: (request: FillRequest) => Effect.Effect<ActionResult, BrowserError>;\n /** Script in the page: instantaneous, and it raises no wheel event. */\n readonly scroll: (request: ScrollRequest) => Effect.Effect<ActionResult, BrowserError>;\n /** One real pointer move, in main-frame viewport pixels. */\n readonly pointerMove: (request: PointerMoveRequest) => Effect.Effect<InputReceipt, BrowserError>;\n /** Places the pointer on one exact element where it is, or fails `not-visible` unsent. */\n readonly hover: (request: HoverRequest) => Effect.Effect<InputReceipt, BrowserError>;\n /** One real wheel event; the browser decides what under the pointer scrolls. */\n readonly wheel: (request: WheelRequest) => Effect.Effect<InputReceipt, BrowserError>;\n /** One real key stroke to whatever has focus, or fails `not-focused` unsent if `into` lacks it. */\n readonly press: (request: PressRequest) => Effect.Effect<InputReceipt, BrowserError>;\n /** Text as the real key strokes that produce it, under the same focus rule as `press`. */\n readonly type: (request: TypeRequest) => Effect.Effect<InputReceipt, BrowserError>;\n readonly screenshot: (\n request: ScreenshotRequest,\n ) => Effect.Effect<ScreenshotResult, BrowserError>;\n}\n\n/**\n * Host control over one owned browser. This is not a serializable model value: copying a\n * session object cannot copy its capture, page-control or connection authority.\n */\nexport interface BrowserSession<E = never> {\n /** First fail-session callback cause, preserving the consumer's error type on the host. */\n readonly failure: Effect.Effect<never, E | InitializationError>;\n /** Bounded host-only evidence; consumer causes are never projected into a page reply. */\n readonly bindingDiagnostics: Effect.Effect<Bootstrap.BindingDiagnostics<E>>;\n readonly bind: () => BoundTarget;\n /** Re-reads the live selection first, so a stale generation fails before any dispatch. */\n readonly currentTarget: Effect.Effect<BoundTarget, BrowserError>;\n readonly target: Effect.Effect<Target, BrowserError>;\n /**\n * The one observation whose nodes later actions may name. `scope: \"viewport\"` keeps only text\n * and controls that are on screen and reachable; the default reads the whole document. It is\n * safe to show a model: it carries no destination, form or field value.\n */\n readonly observe: (options?: ObservationOptions) => Effect.Effect<Observation, BrowserError>;\n /**\n * Passive evidence for a recorder, with a picture when asked. It issues no references and\n * leaves the observation above exactly as it was. Host-only: it carries control facts.\n */\n readonly checkpoint: (options?: CheckpointOptions) => Effect.Effect<Checkpoint, BrowserError>;\n /** Host-only facts about one observed control, read from that exact node just now. */\n readonly controlFacts: (reference: ObservedElement) => Effect.Effect<ControlFacts, BrowserError>;\n /**\n * After a page hold, nothing observed on that page may be acted on unchecked. This checks one\n * reference: still attached, and still the control that was inspected. It never searches by\n * selector or label for a substitute, and it sends nothing.\n */\n readonly revalidateElement: (\n reference: ObservedElement,\n ) => Effect.Effect<ObservedElement, BrowserError>;\n readonly clickElement: (\n reference: ObservedElement,\n admission?: ElementAdmission,\n ) => Effect.Effect<ActionResult, BrowserError>;\n readonly fillElement: (\n reference: ObservedElement,\n value: string,\n admission?: ElementAdmission,\n ) => Effect.Effect<ActionResult, BrowserError>;\n readonly hoverElement: (\n reference: ObservedElement,\n admission?: ElementAdmission,\n ) => Effect.Effect<InputReceipt, BrowserError>;\n /** A key stroke sent only if the exact node an observation named already has focus. */\n readonly pressElement: (\n reference: ObservedElement,\n stroke: KeyStroke,\n admission?: ElementAdmission,\n ) => Effect.Effect<InputReceipt, BrowserError>;\n /** Real typing with `fillElement`'s exactness: that node must already have focus. */\n readonly typeElement: (\n reference: ObservedElement,\n text: string,\n admission?: ElementAdmission,\n ) => Effect.Effect<InputReceipt, BrowserError>;\n readonly pages: Effect.Effect<ReadonlyArray<PageInfo>, BrowserError>;\n readonly frames: Effect.Effect<ReadonlyArray<FrameInfo>, BrowserError>;\n readonly selectPage: (pageId: string) => Effect.Effect<BoundTarget, BrowserError>;\n readonly selectFrame: (frameId: string) => Effect.Effect<BoundTarget, BrowserError>;\n /** Create a tab without selecting it. */\n readonly createPage: Effect.Effect<string, BrowserError>;\n readonly closePage: (pageId: string) => Effect.Effect<void, BrowserError>;\n readonly resizeViewport: (viewport: Viewport) => Effect.Effect<void, BrowserError>;\n readonly waitFor: (request: {\n readonly selector: string;\n readonly state: \"visible\" | \"hidden\" | \"attached\" | \"detached\";\n }) => Effect.Effect<void, BrowserError>;\n /** Navigation observation is registered before the single click dispatch. */\n readonly clickAndWait: (request: ClickRequest) => Effect.Effect<ActionResult, BrowserError>;\n /**\n * Readiness of the current document only. Dependent operations wait for it themselves;\n * this reports it without charging an action, so a caller can decide what to do about a\n * document that predates the registrations.\n */\n readonly ready: Effect.Effect<Bootstrap.ReadinessOutcome, InitializationError>;\n}\n\n/** Browserbase identity, remote artifacts and provider cleanup remain hosted capabilities. */\nexport interface BrowserbaseSession<E = never> extends BrowserSession<E> {\n readonly reference: SessionReference;\n readonly clickForDownload: (\n request: ClickRequest,\n ) => Effect.Effect<DownloadObservation, BrowserError>;\n /** Attaches to an existing file input; an uploaded branch needs a receipt for this session. */\n readonly selectFiles: (request: SelectFilesRequest) => Effect.Effect<ActionResult, BrowserError>;\n /** Registers the chooser observation before the single click that opens it. */\n readonly clickForFileSelection: (\n request: SelectFilesRequest,\n ) => Effect.Effect<ActionResult, BrowserError>;\n readonly liveView: (expiresInSeconds?: number) => Effect.Effect<LiveView, BrowserError>;\n readonly beginHandoff: (expiresInSeconds?: number) => Effect.Effect<Handoff, BrowserError>;\n readonly resume: (\n token: Redacted.Redacted<string>,\n operatorReleasedControl: boolean,\n ) => Effect.Effect<Observation, BrowserError>;\n readonly detach: Effect.Effect<\n { readonly reference: SessionReference; readonly targetId: string },\n BrowserError\n >;\n readonly reconnect: (\n operatorReleasedControl: boolean,\n ) => Effect.Effect<Observation, BrowserError | InitializationError>;\n readonly close: Effect.Effect<CleanupResult, BrowserError>;\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n}\n\n/** Dependencies are captured at acquisition, not erased into an environment-free service Layer. */\nexport interface OpenOptions<E = never, R = never> {\n readonly bootstrap?: Bootstrap.Plan<E, R>;\n}\n\nexport interface AttachRequest<E = never, R = never> extends OpenOptions<E, R> {\n readonly policy: BrowserPolicy;\n /** The exact page to resume; without it the session must have exactly one page. */\n readonly target?: { readonly targetId: string };\n /** Bounded admission of a session the provider has not finished starting. */\n readonly pendingWaitMillis?: number;\n}\n\nexport interface BrowserAcquisition<E = never> {\n readonly reference: SessionReference;\n readonly attempt: AllocationAttempt;\n readonly failure: Effect.Effect<never, E | InitializationError>;\n readonly connect: Effect.Effect<BrowserbaseSession<E>, BrowserError | E | InitializationError>;\n readonly close: Effect.Effect<CleanupResult, BrowserError>;\n}\n\n/**\n * Uploaded selection is admitted by the identity of a receipt this package issued for this\n * exact session, never by a path read off the caller's value. A fabricated receipt has no\n * issuance record, so an arbitrary server pathname can never become an attached file.\n */\nconst selection = (\n request: SelectFilesRequest,\n reference: SessionReference,\n operation: BrowserOperation,\n): Effect.Effect<ReadonlyArray<NativeFileSelection>, BrowserError> =>\n Effect.suspend(() => {\n const invalid = BrowserError.make({\n operation,\n reason: \"configuration\",\n outcome: \"undispatched\",\n });\n\n if (request.selection._tag === \"Inline\") {\n return checked(InlineFiles, request.selection.files, operation).pipe(\n Effect.map((files) =>\n files.map((file) => ({\n _tag: \"Inline\" as const,\n name: file.name,\n mediaType: file.mediaType,\n // The dispatched bytes cannot change after they were validated.\n bytes: new Uint8Array(file.bytes),\n })),\n ),\n );\n }\n\n const uploads = request.selection.uploads;\n\n if (!Array.isArray(uploads) || uploads.length < 1 || uploads.length > 8)\n return Effect.fail(invalid);\n const files: NativeFileSelection[] = [];\n\n for (const receipt of uploads) {\n const issued = issuedUpload(receipt);\n\n if (issued === undefined)\n return Effect.fail(\n BrowserError.make({ operation, reason: \"authorization\", outcome: \"undispatched\" }),\n );\n if (\n issued.reference.projectId !== reference.projectId ||\n issued.reference.sessionId !== reference.sessionId\n )\n return Effect.fail(\n BrowserError.make({ operation, reason: \"authorization\", outcome: \"undispatched\" }),\n );\n files.push({ _tag: \"Remote\", path: issued.remotePath });\n }\n\n return Effect.succeed(files);\n });\n\nconst makeSession = <E>(\n controls: SessionControls,\n bindings: Bindings<E>,\n): BrowserbaseSession<E> => {\n const session = makeBrowserSession(controls, bindings);\n const navigate = (url: string) => decoded(ActionResult, \"action-result\")({ url });\n\n return Object.assign(session, {\n reference: controls.reference,\n clickForDownload: (request) =>\n checked(ClickRequest, request, \"download-action\").pipe(\n Effect.flatMap((value) => controls.clickForDownload(value.selector)),\n Effect.flatMap((raw) =>\n decoded(\n DownloadObservation,\n \"download-action\",\n )({ ...raw, reference: controls.reference }),\n ),\n ),\n selectFiles: (request) =>\n checked(Selector, request.selector, \"select-files\").pipe(\n Effect.flatMap((selector) =>\n selection(request, controls.reference, \"select-files\").pipe(\n Effect.flatMap((files) => controls.selectFiles(selector, files)),\n ),\n ),\n Effect.flatMap(navigate),\n ),\n clickForFileSelection: (request) =>\n checked(Selector, request.selector, \"file-chooser\").pipe(\n Effect.flatMap((selector) =>\n selection(request, controls.reference, \"file-chooser\").pipe(\n Effect.flatMap((files) => controls.clickForFileSelection(selector, files)),\n ),\n ),\n Effect.flatMap(navigate),\n ),\n liveView: (ttl = 60) => controls.liveView(ttl),\n beginHandoff: (ttl = 60) => controls.beginHandoff(ttl),\n resume: (token, released) => controls.resume(token, released),\n detach: controls.detach,\n reconnect: (released) => controls.reconnect(released),\n close: controls.close,\n cleanupResult: controls.cleanupResult,\n } satisfies Omit<BrowserbaseSession<E>, keyof BrowserSession<E>>);\n};\n\n/**\n * Credentials, budgets and connection lifetime are fixed when this Layer is built. Building it\n * allocates nothing and loads no native peer; every acquisition is scoped by its caller.\n */\nexport class BrowserbaseBrowser extends Context.Service<\n BrowserbaseBrowser,\n {\n readonly acquire: <E = never, R = never>(\n policy: BrowserPolicy,\n request?: OpenOptions<E, R>,\n ) => Effect.Effect<\n BrowserAcquisition<E>,\n AllocationError | BrowserError | ContextError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n /** Borrowed control of a session this process did not allocate and will not release. */\n readonly attach: <E = never, R = never>(\n reference: SessionReference,\n request: AttachRequest<E, R>,\n ) => Effect.Effect<\n BrowserbaseSession<E>,\n BrowserError | SessionError | E | InitializationError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n readonly open: <E = never, R = never>(\n policy: BrowserPolicy,\n request?: OpenOptions<E, R>,\n ) => Effect.Effect<\n BrowserbaseSession<E>,\n AllocationError | BrowserError | ContextError | E | InitializationError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n /** Race the consumer with typed callback failure and confirm cleanup before normal success. */\n readonly withBrowser: <E, R, A, E2, R2>(\n policy: BrowserPolicy,\n request: OpenOptions<E, R>,\n use: (session: BrowserbaseSession<E>) => Effect.Effect<A, E2, R2>,\n ) => Effect.Effect<\n A,\n AllocationError | BrowserError | ContextError | InitializationError | E | E2,\n Exclude<R | R2, Scope.Scope>\n >;\n }\n>()(\"effect-browserbase/Browser\") {\n static layer(\n options: BrowserOptions,\n ): Layer.Layer<BrowserbaseBrowser, BrowserError, BrowserbaseClient | BrowserbaseSessions> {\n return Layer.effect(\n BrowserbaseBrowser,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n // The engine is fixed where the Layer is built, like the account it connects for.\n const binding = yield* BrowserbaseBrowserBinding;\n const automation = yield* checked(AutomationOptions, projected(options), \"configure\");\n\n const viewport = yield* checked(\n Viewport,\n options.launch.viewport._tag === \"Fixed\"\n ? { width: options.launch.viewport.width, height: options.launch.viewport.height }\n : { width: 1280, height: 720 },\n \"configure\",\n );\n\n const actionTimeoutMillis = automation.actionTimeoutMillis ?? 10_000;\n const maxPages = automation.maxPages ?? 10;\n const pageControl = automation.pageControl ?? false;\n const popupPolicy = automation.popupPolicy ?? \"retain\";\n const dialogPolicy = automation.dialogPolicy ?? \"dismiss\";\n\n if (\n pageControl &&\n (options.launch.keepAlive === true || popupPolicy === \"pause\" || dialogPolicy === \"pause\")\n )\n return yield* BrowserError.make({\n operation: \"configure\",\n reason: \"unsupported\",\n outcome: \"undispatched\",\n });\n\n if (options.launch.context?.persist === true && options.contextWriter === undefined)\n return yield* BrowserError.make({ operation: \"configure\", reason: \"context-lease\" });\n\n // A retired layer-level bootstrap must not be silently discarded for JavaScript callers.\n if (Object.prototype.hasOwnProperty.call(options, \"bootstrap\"))\n return yield* BrowserError.make({\n operation: \"configure\",\n reason: \"configuration\",\n outcome: \"undispatched\",\n });\n\n const driver = {\n pageControl,\n viewport,\n maxPages,\n popupPolicy,\n dialogPolicy,\n preserveViewport: options.launch.viewport._tag !== \"Fixed\",\n ...(automation.initialPage === undefined\n ? {}\n : \"targetId\" in automation.initialPage\n ? { initialTargetId: automation.initialPage.targetId }\n : { newPage: true }),\n };\n\n const acquire = Effect.fnUntraced(function* <E = never, R = never>(\n policy: BrowserPolicy,\n request: OpenOptions<E, R> = {},\n ) {\n const fixed = yield* checked(BrowserPolicy, policy, \"configure\");\n const plan = yield* preparePlan<E, R>(request.bootstrap ?? Bootstrap.empty);\n // The sequential child keeps remote cleanup ahead of callback-scope finalization even\n // when a consumer deliberately gives its outer Scope parallel finalizers.\n const scope = yield* Scope.fork(yield* Scope.Scope, \"sequential\");\n const bindings = yield* makeBindings(plan).pipe(Scope.provide(scope));\n const bootstrap = compileBootstrap(plan);\n\n const acquired = yield* acquireSession(\n {\n maxActions: fixed.maxActions,\n maxElapsedMillis: fixed.maxElapsedMillis,\n actionTimeoutMillis,\n },\n {\n remote: ownedRemote({\n launch: options.launch,\n ...(options.contextWriter === undefined\n ? {}\n : { contextWriter: options.contextWriter }),\n ...(options.onCleanup === undefined ? {} : { onCleanup: options.onCleanup }),\n ...(options.onAllocationUncertain === undefined\n ? {}\n : { onAllocationUncertain: options.onAllocationUncertain }),\n }),\n keepAlive: options.launch.keepAlive === true,\n driver: { ...driver, ...(bootstrap === undefined ? {} : { bootstrap }) },\n connectBindings: bindings.connect,\n maxReturnedBytes: fixed.maxReturnedBytes,\n },\n ).pipe(\n // The Layer owns the one account and resource service; acquisition never re-resolves them.\n Effect.provideService(BrowserbaseClient, client),\n Effect.provideService(BrowserbaseSessions, sessions),\n Effect.provideService(BrowserbaseBrowserBinding, binding),\n Scope.provide(scope),\n );\n\n // One public session object is shared by repeated connect calls in this scope.\n const connected = yield* Effect.cached(\n acquired.connect.pipe(Effect.map((controls) => makeSession(controls, bindings))),\n );\n\n return {\n reference: acquired.reference,\n attempt: acquired.lease.attempt,\n failure: bindings.failure,\n close: acquired.close,\n connect: Effect.raceFirst(\n bindings.failure,\n acquired.connect.pipe(Effect.andThen(connected)),\n ).pipe(Effect.onError(() => acquired.close.pipe(Effect.asVoid))),\n } satisfies BrowserAcquisition<E>;\n });\n\n /**\n * Borrowing a session another process allocated. The launch recipe is not replayed and\n * no allocation is attempted: the requested target is resolved explicitly, credentials\n * are fetched fresh because expiry races the caller's own status read, and this scope\n * disconnects locally without ever requesting release. Detaching and reattaching inside\n * a borrowed scope is deliberately absent; attaching again is the cross-process path,\n * and it revalidates the session instead of assuming it is still there.\n */\n const attach = Effect.fnUntraced(function* <E = never, R = never>(\n reference: SessionReference,\n request: AttachRequest<E, R>,\n ) {\n const fixed = yield* checked(BrowserPolicy, request.policy, \"configure\");\n const plan = yield* preparePlan<E, R>(request.bootstrap ?? Bootstrap.empty);\n const scope = yield* Scope.fork(yield* Scope.Scope, \"sequential\");\n const bindings = yield* makeBindings(plan).pipe(Scope.provide(scope));\n const bootstrap = compileBootstrap(plan);\n\n const targetId =\n request.target === undefined\n ? undefined\n : yield* checked(Identifier, request.target.targetId, \"configure\");\n\n const acquired = yield* acquireSession(\n {\n maxActions: fixed.maxActions,\n maxElapsedMillis: fixed.maxElapsedMillis,\n actionTimeoutMillis,\n },\n {\n remote: borrowedRemote({\n reference,\n ...(request.pendingWaitMillis === undefined\n ? {}\n : { pendingWaitMillis: request.pendingWaitMillis }),\n ...(options.onCleanup === undefined ? {} : { onCleanup: options.onCleanup }),\n }),\n keepAlive: false,\n driver: {\n ...driver,\n ...(bootstrap === undefined ? {} : { bootstrap }),\n newPage: false,\n preserveViewport: true,\n ...(targetId === undefined ? {} : { initialTargetId: targetId }),\n },\n maxReturnedBytes: fixed.maxReturnedBytes,\n connectBindings: bindings.connect,\n },\n ).pipe(\n Effect.provideService(BrowserbaseClient, client),\n Effect.provideService(BrowserbaseSessions, sessions),\n Effect.provideService(BrowserbaseBrowserBinding, binding),\n Scope.provide(scope),\n );\n\n return yield* Effect.raceFirst(\n bindings.failure,\n acquired.connect.pipe(Effect.map((controls) => makeSession(controls, bindings))),\n ).pipe(Effect.onError(() => acquired.close.pipe(Effect.asVoid)));\n });\n\n return BrowserbaseBrowser.of({\n acquire,\n attach,\n open: (policy, request) =>\n acquire(policy, request).pipe(Effect.flatMap((acquired) => acquired.connect)),\n withBrowser: (policy, request, use) =>\n Effect.scoped(\n Effect.gen(function* () {\n const acquired = yield* acquire(policy, request);\n const session = yield* acquired.connect;\n\n const result = yield* Effect.raceFirst(\n session.failure,\n Effect.suspend(() => use(session)),\n );\n\n const cleanup = yield* session.close;\n\n if (\n cleanup.remote !== \"confirmed\" ||\n cleanup.local !== \"closed\" ||\n cleanup.issues.length > 0\n )\n return yield* BrowserError.make({\n operation: \"close\",\n reason: \"provider\",\n outcome: \"unknown\",\n });\n\n return result;\n }),\n ),\n });\n }),\n );\n }\n}\n\n/** Only the automation fields cross the schema boundary; launch and callbacks are separate. */\nconst projected = (options: BrowserOptions) => ({\n ...(options.actionTimeoutMillis === undefined\n ? {}\n : { actionTimeoutMillis: options.actionTimeoutMillis }),\n ...(options.maxPages === undefined ? {} : { maxPages: options.maxPages }),\n ...(options.initialPage === undefined ? {} : { initialPage: options.initialPage }),\n ...(options.popupPolicy === undefined ? {} : { popupPolicy: options.popupPolicy }),\n ...(options.dialogPolicy === undefined ? {} : { dialogPolicy: options.dialogPolicy }),\n ...(options.pageControl === undefined ? {} : { pageControl: options.pageControl }),\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Browser.mjs","names":[],"sources":["../src/internal/session/Attachment.ts","../src/internal/session/Browser.ts","../src/Browser.ts"],"sourcesContent":["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 const result = cleanup;\n const notify = options.onCleanup;\n\n if (result !== undefined) {\n yield* reported(Effect.suspend(() => reportCleanup(result)));\n if (notify !== undefined) yield* reported(Effect.suspend(() => notify(result)));\n }\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 { Effect, Option, type Redacted } from \"effect\";\nimport type { Lifetime, Source } from \"effect-browser/browser-runtime\";\nimport { BrowserError, Reasons } from \"effect-browser/errors\";\n\nimport type { CleanupResult } from \"../../Cleanup.ts\";\nimport { BrowserbaseClient } from \"../../Client.ts\";\nimport type { AllocationError, ContextError, SessionError } from \"../../Errors.ts\";\nimport type { LaunchRecipe } from \"../../Launch.ts\";\nimport type { AllocationAttempt, SessionReference } from \"../../References.ts\";\nimport { BrowserbaseSessions } from \"../../Sessions.ts\";\nimport { issueLiveView, type LiveView } from \"../browser/LiveView.ts\";\nimport { browserRequestFailure } from \"../browser/RequestFailure.ts\";\nimport { acquireRemote } from \"./Acquisition.ts\";\nimport { attachRemote } from \"./Attachment.ts\";\nimport type { ContextWriterPermit } from \"./WriterFacts.ts\";\n\nexport interface RemoteLease extends Lifetime {\n readonly reference: SessionReference;\n readonly closeChecked: Effect.Effect<CleanupResult, BrowserError>;\n readonly attempt?: AllocationAttempt;\n readonly release: Effect.Effect<CleanupResult>;\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n readonly liveView: (ttl: number) => Effect.Effect<LiveView, BrowserError>;\n}\n\ntype RemoteSource<L extends Lifetime, E> = Source<L, E, BrowserbaseClient | BrowserbaseSessions>;\n\n/** A borrowed connection closes without requiring or requesting remote termination. */\nconst checkedCleanup = (\n close: Effect.Effect<CleanupResult>,\n): Effect.Effect<CleanupResult, BrowserError> =>\n close.pipe(\n Effect.filterOrFail(\n (result) =>\n result.local === \"closed\" &&\n result.issues.length === 0 &&\n (result.ownership === \"borrowed\"\n ? result.remote === \"not-owned\"\n : result.remote === \"confirmed\"),\n () =>\n BrowserError.make({\n operation: \"close\",\n reason: Reasons.Provider.make({}),\n outcome: \"unknown\",\n }),\n ),\n );\n\nconst withConnection = <\n A extends {\n readonly reference: SessionReference;\n readonly connection: (\n timeoutMillis: number,\n ) => Effect.Effect<Redacted.Redacted<string>, SessionError>;\n readonly release: Effect.Effect<CleanupResult>;\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n },\n>(\n acquired: A,\n) => ({\n ...acquired,\n connection: (timeoutMillis: number) =>\n acquired\n .connection(timeoutMillis)\n .pipe(Effect.mapError((error) => browserRequestFailure(\"connect\", error))),\n closeChecked: checkedCleanup(acquired.release),\n controlRetired: acquired.cleanupResult.pipe(\n Effect.map(\n (result) =>\n Option.isSome(result) &&\n result.value.ownership === \"owned\" &&\n result.value.remote === \"confirmed\",\n ),\n ),\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) => browserRequestFailure(\"reconnect\", error)),\n Effect.flatMap((status) =>\n status.status === \"RUNNING\"\n ? Effect.void\n : Effect.fail(\n BrowserError.make({\n operation: \"reconnect\",\n reason: Reasons.Expired.make({}),\n outcome: \"undispatched\",\n }),\n ),\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 {\n ...withConnection(acquired),\n ...providerControls(client, sessions, acquired.reference),\n };\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 {\n ...withConnection(acquired),\n ...providerControls(client, sessions, acquired.reference),\n };\n });\n","import { Context, Effect, Layer, type Option, type Redacted, Schema, type Scope } from \"effect\";\nimport type { BrowserSession, OpenOptions } from \"effect-browser/browser\";\nimport type {\n ActionResult,\n AutomationOptions,\n BrowserPolicy,\n ClickRequest,\n Observation,\n} from \"effect-browser/browser-data\";\nimport * as BrowserRuntime from \"effect-browser/browser-runtime\";\nimport {\n BrowserError,\n Reasons,\n type BrowserOperation,\n type InitializationError,\n} from \"effect-browser/errors\";\n\nimport { BrowserbaseBrowserBinding } from \"./BrowserBinding.ts\";\nimport type { CleanupResult } from \"./Cleanup.ts\";\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport type { AllocationError, ContextError, SessionError } from \"./Errors.ts\";\nimport type { LiveView } from \"./internal/browser/LiveView.ts\";\nimport { borrowedRemote, ownedRemote, type RemoteLease } from \"./internal/session/Browser.ts\";\nimport type { ContextWriterPermit } from \"./internal/session/WriterFacts.ts\";\nimport { issuedUpload } from \"./internal/upload/Issued.ts\";\nimport type { LaunchRecipe } from \"./Launch.ts\";\nimport type { AllocationAttempt, SessionReference } from \"./References.ts\";\nimport { BrowserbaseSessions } from \"./Sessions.ts\";\nimport { DownloadObservation, type SelectFilesRequest } from \"./Transfers.ts\";\n\nexport type { LiveView } from \"./internal/browser/LiveView.ts\";\nexport type { FileSelection, SelectFilesRequest } from \"./Transfers.ts\";\n\n/** Host configuration. Credentials live in the Client; a model never selects these values. */\nexport interface BrowserOptions extends AutomationOptions {\n readonly launch: LaunchRecipe;\n /** Required whenever the launch recipe persists a context. */\n readonly contextWriter?: ContextWriterPermit;\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\nexport interface Handoff {\n readonly token: Redacted.Redacted<string>;\n readonly view: LiveView;\n}\n\n/** Browserbase identity, remote artifacts and provider cleanup remain hosted capabilities. */\nexport interface BrowserbaseSession<E = never> extends BrowserSession<E> {\n readonly reference: SessionReference;\n readonly closeChecked: Effect.Effect<CleanupResult, BrowserError>;\n readonly clickForDownload: (\n request: ClickRequest,\n ) => Effect.Effect<DownloadObservation, BrowserError>;\n /** Attaches to an existing file input; an uploaded branch needs a receipt for this session. */\n readonly selectFiles: (request: SelectFilesRequest) => Effect.Effect<ActionResult, BrowserError>;\n /** Registers the chooser observation before the single click that opens it. */\n readonly clickForFileSelection: (\n request: SelectFilesRequest,\n ) => Effect.Effect<ActionResult, BrowserError>;\n readonly liveView: (expiresInSeconds?: number) => Effect.Effect<LiveView, BrowserError>;\n readonly beginHandoff: (expiresInSeconds?: number) => Effect.Effect<Handoff, BrowserError>;\n readonly resume: (\n token: Redacted.Redacted<string>,\n operatorReleasedControl: boolean,\n ) => Effect.Effect<Observation, BrowserError>;\n readonly detach: Effect.Effect<\n { readonly reference: SessionReference; readonly targetId: string },\n BrowserError\n >;\n readonly reconnect: (\n operatorReleasedControl: boolean,\n ) => Effect.Effect<Observation, BrowserError | InitializationError>;\n readonly close: Effect.Effect<CleanupResult>;\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n}\n\nexport interface AttachRequest<E = never, R = never> extends OpenOptions<E, R> {\n readonly policy: BrowserPolicy;\n /** The exact page to resume; without it the session must have exactly one page. */\n readonly target?: { readonly targetId: string };\n /** Bounded admission of a session the provider has not finished starting. */\n readonly pendingWaitMillis?: number;\n}\n\nexport interface BrowserAcquisition<E = never> {\n readonly reference: SessionReference;\n readonly attempt: AllocationAttempt;\n readonly failure: Effect.Effect<never, E | InitializationError>;\n readonly connect: Effect.Effect<BrowserbaseSession<E>, BrowserError | E | InitializationError>;\n readonly close: Effect.Effect<CleanupResult>;\n}\n\n/** Only receipts issued for this exact provider session may resolve to stored paths. */\nconst selection = (\n request: SelectFilesRequest,\n reference: SessionReference,\n operation: BrowserOperation,\n): Effect.Effect<BrowserRuntime.ResolvedFileSelection, BrowserError> =>\n Effect.suspend(() => {\n if (request.selection._tag === \"Inline\")\n return Effect.succeed<BrowserRuntime.ResolvedFileSelection>({\n _tag: \"Inline\",\n files: request.selection.files,\n });\n\n const uploads = request.selection.uploads;\n\n if (!Array.isArray(uploads) || uploads.length < 1 || uploads.length > 8)\n return Effect.fail(\n BrowserError.make({\n operation,\n reason: Reasons.Configuration.make({}),\n outcome: \"undispatched\",\n }),\n );\n const paths: string[] = [];\n\n for (const receipt of uploads) {\n const issued = issuedUpload(receipt);\n\n if (\n issued === undefined ||\n issued.reference.projectId !== reference.projectId ||\n issued.reference.sessionId !== reference.sessionId\n )\n return Effect.fail(\n BrowserError.make({\n operation,\n reason: Reasons.Authorization.make({}),\n outcome: \"undispatched\",\n }),\n );\n paths.push(issued.remotePath);\n }\n\n return Effect.succeed<BrowserRuntime.ResolvedFileSelection>({ _tag: \"Stored\", paths });\n });\n\nconst makeSession = <E>(\n connection: BrowserRuntime.Connection<SessionReference, E>,\n lifetime: RemoteLease,\n): BrowserbaseSession<E> => {\n const { session, operations } = connection;\n\n // Decorating the same object preserves its private capture and page-control associations.\n return Object.assign(session, {\n reference: lifetime.reference,\n closeChecked: session.closeChecked.pipe(Effect.andThen(lifetime.closeChecked)),\n clickForDownload: (request) =>\n operations.clickForDownload(request).pipe(\n Effect.flatMap((event) =>\n Schema.decodeEffect(DownloadObservation)({\n ...event,\n reference: lifetime.reference,\n }).pipe(\n Effect.mapError(() =>\n BrowserError.make({\n operation: \"download-action\",\n reason: Reasons.Malformed.make({}),\n outcome: \"unknown\",\n }),\n ),\n ),\n ),\n ),\n selectFiles: (request) =>\n selection(request, lifetime.reference, \"select-files\").pipe(\n Effect.flatMap((files) =>\n operations.selectFiles({ selector: request.selector, selection: files }),\n ),\n ),\n clickForFileSelection: (request) =>\n selection(request, lifetime.reference, \"file-chooser\").pipe(\n Effect.flatMap((files) =>\n operations.clickForFileSelection({ selector: request.selector, selection: files }),\n ),\n ),\n liveView: (ttl = 60) => operations.liveView(lifetime.liveView(ttl)),\n beginHandoff: (ttl = 60) => operations.beginHandoff(lifetime.liveView(ttl)),\n resume: operations.resume,\n detach: operations.detach,\n reconnect: operations.reconnect,\n close: lifetime.release,\n cleanupResult: lifetime.cleanupResult,\n } satisfies Omit<BrowserbaseSession<E>, Exclude<keyof BrowserSession<E>, \"closeChecked\">>);\n};\n\nexport class BrowserbaseBrowser extends Context.Service<\n BrowserbaseBrowser,\n {\n readonly acquire: <E = never, R = never>(\n policy: BrowserPolicy,\n request?: OpenOptions<E, R>,\n ) => Effect.Effect<\n BrowserAcquisition<E>,\n AllocationError | BrowserError | ContextError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n /** Borrowed control of a session this process did not allocate and will not release. */\n readonly attach: <E = never, R = never>(\n reference: SessionReference,\n request: AttachRequest<E, R>,\n ) => Effect.Effect<\n BrowserbaseSession<E>,\n BrowserError | SessionError | E | InitializationError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n readonly open: <E = never, R = never>(\n policy: BrowserPolicy,\n request?: OpenOptions<E, R>,\n ) => Effect.Effect<\n BrowserbaseSession<E>,\n AllocationError | BrowserError | ContextError | E | InitializationError,\n Scope.Scope | Exclude<R, Scope.Scope>\n >;\n }\n>()(\"effect-browserbase/Browser\") {\n /** Open through the configured account and browser service, in the caller's scope. */\n static open<E = never, R = never>(policy: BrowserPolicy, request?: OpenOptions<E, R>) {\n return Effect.flatMap(BrowserbaseBrowser, (browser) => browser.open(policy, request));\n }\n\n /** Allocate the provider lifetime before connecting, preserving its attempt and cleanup. */\n static acquire<E = never, R = never>(policy: BrowserPolicy, request?: OpenOptions<E, R>) {\n return Effect.flatMap(BrowserbaseBrowser, (browser) => browser.acquire(policy, request));\n }\n\n /** Borrow a provider session without acquiring release authority over it. */\n static attach<E = never, R = never>(reference: SessionReference, request: AttachRequest<E, R>) {\n return Effect.flatMap(BrowserbaseBrowser, (browser) => browser.attach(reference, request));\n }\n\n static layer(\n options: BrowserOptions,\n ): Layer.Layer<BrowserbaseBrowser, BrowserError, BrowserbaseClient | BrowserbaseSessions> {\n return Layer.effect(\n BrowserbaseBrowser,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n const binding = yield* BrowserbaseBrowserBinding;\n\n if (options.launch.context?.persist === true && options.contextWriter === undefined)\n return yield* BrowserError.make({\n operation: \"configure\",\n reason: Reasons.ContextLease.make({}),\n outcome: \"undispatched\",\n });\n if (Object.prototype.hasOwnProperty.call(options, \"bootstrap\"))\n return yield* BrowserError.make({\n operation: \"configure\",\n reason: Reasons.Configuration.make({}),\n outcome: \"undispatched\",\n });\n\n const runtime = yield* BrowserRuntime.make({\n implementation: \"browserbase-playwright-cdp\",\n binding,\n automation: projected(options),\n viewport:\n options.launch.viewport._tag === \"Fixed\"\n ? { width: options.launch.viewport.width, height: options.launch.viewport.height }\n : { width: 1280, height: 720 },\n preserveViewport: options.launch.viewport._tag !== \"Fixed\",\n keepAlive: options.launch.keepAlive === true,\n });\n\n const source =\n <L extends BrowserRuntime.Lifetime, E>(\n remote: BrowserRuntime.Source<L, E, BrowserbaseClient | BrowserbaseSessions>,\n ): BrowserRuntime.Source<L, E> =>\n (cleanup, deadline) =>\n remote(cleanup, deadline).pipe(\n Effect.provideService(BrowserbaseClient, client),\n Effect.provideService(BrowserbaseSessions, sessions),\n );\n\n const acquire = Effect.fnUntraced(function* <E = never, R = never>(\n policy: BrowserPolicy,\n request: OpenOptions<E, R> = {},\n ) {\n const acquired = yield* runtime.acquire(\n policy,\n source(\n ownedRemote({\n launch: options.launch,\n ...(options.contextWriter === undefined\n ? {}\n : { contextWriter: options.contextWriter }),\n ...(options.onCleanup === undefined ? {} : { onCleanup: options.onCleanup }),\n ...(options.onAllocationUncertain === undefined\n ? {}\n : { onAllocationUncertain: options.onAllocationUncertain }),\n }),\n ),\n request,\n );\n\n const connected = yield* Effect.cached(\n acquired.connect.pipe(\n Effect.map((connection) => makeSession(connection, acquired.lifetime)),\n ),\n );\n\n return {\n reference: acquired.reference,\n attempt: acquired.lifetime.attempt,\n failure: acquired.failure,\n close: acquired.close,\n connect: acquired.connect.pipe(Effect.andThen(connected)),\n } satisfies BrowserAcquisition<E>;\n });\n\n const attach = Effect.fnUntraced(function* <E = never, R = never>(\n reference: SessionReference,\n request: AttachRequest<E, R>,\n ) {\n const acquired = yield* runtime.acquire(\n request.policy,\n source(\n borrowedRemote({\n reference,\n ...(request.pendingWaitMillis === undefined\n ? {}\n : { pendingWaitMillis: request.pendingWaitMillis }),\n ...(options.onCleanup === undefined ? {} : { onCleanup: options.onCleanup }),\n }),\n ),\n {\n ...(request.bootstrap === undefined ? {} : { bootstrap: request.bootstrap }),\n existingTarget: request.target ?? {},\n },\n );\n\n return yield* acquired.connect.pipe(\n Effect.map((connection) => makeSession(connection, acquired.lifetime)),\n );\n });\n\n return BrowserbaseBrowser.of({\n acquire,\n attach,\n open: (policy, request) =>\n acquire(policy, request).pipe(Effect.flatMap((acquired) => acquired.connect)),\n });\n }),\n );\n }\n}\n\n/** Only the automation fields cross the schema boundary; launch and callbacks are separate. */\nconst projected = (options: BrowserOptions) => ({\n ...(options.maxHostReads === undefined ? {} : { maxHostReads: options.maxHostReads }),\n ...(options.actionTimeoutMillis === undefined\n ? {}\n : { actionTimeoutMillis: options.actionTimeoutMillis }),\n ...(options.maxPages === undefined ? {} : { maxPages: options.maxPages }),\n ...(options.initialPage === undefined ? {} : { initialPage: options.initialPage }),\n ...(options.popupPolicy === undefined ? {} : { popupPolicy: options.popupPolicy }),\n ...(options.dialogPolicy === undefined ? {} : { dialogPolicy: options.dialogPolicy }),\n ...(options.pageControl === undefined ? {} : { pageControl: options.pageControl }),\n});\n"],"mappings":"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"}
@@ -1,40 +1,13 @@
1
- import { BrowserError } from "./Errors.mjs";
2
- import { Context, Effect, Layer, Redacted } from "effect";
1
+ import { Context, Layer } from "effect";
2
+ import * as BrowserRuntime from "effect-browser/browser-runtime";
3
3
  //#region src/BrowserBinding.d.ts
4
- /**
5
- * The trusted native engine an owned or borrowed browser connects through. It is opaque: only
6
- * this module issues one, so a value that merely has this shape is refused before allocation
7
- * rather than trusted with a connection.
8
- */
9
- export interface BrowserBinding {
10
- readonly _tag: "BrowserbaseBrowserBinding";
11
- }
12
- export interface PlaywrightOptions {
13
- /**
14
- * Trusted host routing. It runs only after the provider-issued address passed the same strict
15
- * checks as the default, and returns the CDP endpoint to connect to instead. A local engine
16
- * reached this way says nothing about how a hosted connection behaves.
17
- */
18
- readonly resolveEndpoint?: (provider: {
19
- readonly url: Redacted.Redacted<string>;
20
- }) => Effect.Effect<string, BrowserError>;
21
- /**
22
- * Trusted instrumentation of the engine's own browser object, called once per connection with
23
- * the endpoint it reached, before the owner drives it. The object is typed `unknown` so that
24
- * no declaration of this package names the optional native peer; it is host configuration,
25
- * never model-facing.
26
- */
27
- readonly onConnected?: (connection: {
28
- readonly native: unknown;
29
- readonly endpoint: string;
30
- }) => void;
31
- }
32
- /** Playwright over CDP, lazily loaded at connection time and never at Layer construction. */
4
+ export type BrowserBinding = BrowserRuntime.BrowserBinding;
5
+ export type PlaywrightOptions = BrowserRuntime.PlaywrightOptions;
6
+ /** Validate provider authority before invoking any trusted host routing. */
33
7
  export declare const playwright: (options?: PlaywrightOptions) => BrowserBinding;
34
- /** Defaults to Playwright with the provider's own address, so no consumer has to provide it. */
35
- export declare const BrowserbaseBrowserBinding: Context.Reference<BrowserBinding>;
36
- /** Supply a binding to every browser Layer built beneath it. */
8
+ export declare const BrowserbaseBrowserBinding: Context.Reference<BrowserRuntime.BrowserBinding>;
37
9
  export declare const layer: (binding: BrowserBinding) => Layer.Layer<never>;
38
10
  export declare const layerPlaywright: Layer.Layer<never>;
39
11
  //#endregion
12
+ export {};
40
13
  //# sourceMappingURL=BrowserBinding.d.mts.map
@@ -1,2 +1,31 @@
1
- import { i as playwright, n as layer, r as layerPlaywright, t as BrowserbaseBrowserBinding } from "./BrowserBinding-DlJTGYZL.mjs";
1
+ import { n as validateConnection } from "./Connection-DcvJZEdc.mjs";
2
+ import { Context, Effect, Layer, Redacted } from "effect";
3
+ import { BrowserError, Reasons } from "effect-browser/errors";
4
+ import * as BrowserRuntime from "effect-browser/browser-runtime";
5
+ //#region src/BrowserBinding.ts
6
+ /** Validate provider authority before invoking any trusted host routing. */
7
+ const playwright = (options = {}) => {
8
+ const { resolveEndpoint, onConnected } = options;
9
+ return BrowserRuntime.playwright({
10
+ resolveEndpoint: ({ url }) => Effect.gen(function* () {
11
+ const validated = yield* Effect.try({
12
+ try: () => validateConnection(Redacted.value(url)),
13
+ catch: (error) => error instanceof BrowserError ? error : BrowserError.make({
14
+ operation: "connect",
15
+ reason: Reasons.Malformed.make({}),
16
+ outcome: "undispatched"
17
+ })
18
+ });
19
+ return yield* resolveEndpoint === void 0 ? Effect.succeed(validated) : resolveEndpoint({ url: Redacted.make(validated) });
20
+ }),
21
+ ...onConnected === void 0 ? {} : { onConnected }
22
+ });
23
+ };
24
+ const defaultBinding = playwright();
25
+ const BrowserbaseBrowserBinding = Context.Reference("effect-browserbase/BrowserBinding", { defaultValue: () => defaultBinding });
26
+ const layer = (binding) => Layer.succeed(BrowserbaseBrowserBinding, binding);
27
+ const layerPlaywright = layer(defaultBinding);
28
+ //#endregion
2
29
  export { BrowserbaseBrowserBinding, layer, layerPlaywright, playwright };
30
+
31
+ //# sourceMappingURL=BrowserBinding.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserBinding.mjs","names":[],"sources":["../src/BrowserBinding.ts"],"sourcesContent":["import { Context, Effect, Layer, Redacted } from \"effect\";\nimport * as BrowserRuntime from \"effect-browser/browser-runtime\";\nimport { BrowserError, Reasons } from \"effect-browser/errors\";\n\nimport { validateConnection } from \"./internal/provider/Connection.ts\";\n\nexport type BrowserBinding = BrowserRuntime.BrowserBinding;\nexport type PlaywrightOptions = BrowserRuntime.PlaywrightOptions;\n\n/** Validate provider authority before invoking any trusted host routing. */\nexport const playwright = (options: PlaywrightOptions = {}): BrowserBinding => {\n const { resolveEndpoint, onConnected } = options;\n\n return BrowserRuntime.playwright({\n resolveEndpoint: ({ url }) =>\n Effect.gen(function* () {\n const validated = yield* Effect.try({\n try: () => validateConnection(Redacted.value(url)),\n catch: (error) =>\n error instanceof BrowserError\n ? error\n : BrowserError.make({\n operation: \"connect\",\n reason: Reasons.Malformed.make({}),\n outcome: \"undispatched\",\n }),\n });\n\n return yield* resolveEndpoint === undefined\n ? Effect.succeed(validated)\n : resolveEndpoint({ url: Redacted.make(validated) });\n }),\n ...(onConnected === undefined ? {} : { onConnected }),\n });\n};\n\nconst defaultBinding = playwright();\n\nexport const BrowserbaseBrowserBinding = Context.Reference<BrowserBinding>(\n \"effect-browserbase/BrowserBinding\",\n { defaultValue: () => defaultBinding },\n);\n\nexport const layer = (binding: BrowserBinding): Layer.Layer<never> =>\n Layer.succeed(BrowserbaseBrowserBinding, binding);\n\nexport const layerPlaywright: Layer.Layer<never> = layer(defaultBinding);\n"],"mappings":";;;;;;AAUA,MAAa,cAAc,UAA6B,CAAC,MAAsB;CAC7E,MAAM,EAAE,iBAAiB,gBAAgB;CAEzC,OAAO,eAAe,WAAW;EAC/B,kBAAkB,EAAE,UAClB,OAAO,IAAI,aAAa;GACtB,MAAM,YAAY,OAAO,OAAO,IAAI;IAClC,WAAW,mBAAmB,SAAS,MAAM,GAAG,CAAC;IACjD,QAAQ,UACN,iBAAiB,eACb,QACA,aAAa,KAAK;KAChB,WAAW;KACX,QAAQ,QAAQ,UAAU,KAAK,CAAC,CAAC;KACjC,SAAS;IACX,CAAC;GACT,CAAC;GAED,OAAO,OAAO,oBAAoB,KAAA,IAC9B,OAAO,QAAQ,SAAS,IACxB,gBAAgB,EAAE,KAAK,SAAS,KAAK,SAAS,EAAE,CAAC;EACvD,CAAC;EACH,GAAI,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY;CACrD,CAAC;AACH;AAEA,MAAM,iBAAiB,WAAW;AAElC,MAAa,4BAA4B,QAAQ,UAC/C,qCACA,EAAE,oBAAoB,eAAe,CACvC;AAEA,MAAa,SAAS,YACpB,MAAM,QAAQ,2BAA2B,OAAO;AAElD,MAAa,kBAAsC,MAAM,cAAc"}
@@ -1,9 +1,7 @@
1
1
  import { CertificateError } from "./Errors.mjs";
2
- import { t as BrowserbaseClient } from "./Client-Ca0zSg1n.mjs";
2
+ import { BrowserbaseClient } from "./Client.mjs";
3
3
  import { Context, Effect, Layer, Schema } from "effect";
4
- declare namespace Certificates_d_exports {
5
- export { BrowserbaseCertificates, CertificateMetadata, CertificateUpload };
6
- }
4
+ //#region src/Certificates.d.ts
7
5
  declare const CertificateMetadata_base: Schema.Class<CertificateMetadata, Schema.Struct<{
8
6
  readonly certificateId: Schema.NonEmptyString;
9
7
  readonly projectId: Schema.NonEmptyString;
@@ -31,5 +29,5 @@ export declare class BrowserbaseCertificates extends BrowserbaseCertificates_bas
31
29
  static readonly layer: Layer.Layer<BrowserbaseCertificates, never, BrowserbaseClient>;
32
30
  }
33
31
  //#endregion
34
- export { Certificates_d_exports as t };
32
+ export {};
35
33
  //# sourceMappingURL=Certificates.d.mts.map
@@ -1,15 +1,10 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
1
  import { Identifier } from "./References.mjs";
3
2
  import { CertificateError } from "./Errors.mjs";
4
3
  import { SafeFilename } from "./Transfers.mjs";
5
- import { t as BrowserbaseClient } from "./Client-D1_xYM9o.mjs";
4
+ import { t as BrowserbaseClient } from "./Client-BQteUePT.mjs";
6
5
  import { t as resource } from "./Resource-DBksC4zB.mjs";
7
6
  import { Context, Effect, Layer, Schema } from "effect";
8
7
  //#region src/Certificates.ts
9
- var Certificates_exports = /* @__PURE__ */ __exportAll({
10
- BrowserbaseCertificates: () => BrowserbaseCertificates,
11
- CertificateMetadata: () => CertificateMetadata
12
- });
13
8
  const Timestamp = Schema.String.check(Schema.isMaxLength(64));
14
9
  const MAX_CERTIFICATE_BYTES = 1048576;
15
10
  /** Select a certificate at launch with `provider.proxySettings.caCertificates: [certificateId]`. */
@@ -85,6 +80,6 @@ var BrowserbaseCertificates = class BrowserbaseCertificates extends Context.Serv
85
80
  }));
86
81
  };
87
82
  //#endregion
88
- export { BrowserbaseCertificates, CertificateMetadata, Certificates_exports as t };
83
+ export { BrowserbaseCertificates, CertificateMetadata };
89
84
 
90
85
  //# sourceMappingURL=Certificates.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Certificates.mjs","names":[],"sources":["../src/Certificates.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { CertificateError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { Identifier } from \"./References.ts\";\nimport { SafeFilename } from \"./Transfers.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst MAX_CERTIFICATE_BYTES = 1024 * 1024;\n\n/** Select a certificate at launch with `provider.proxySettings.caCertificates: [certificateId]`. */\nexport class CertificateMetadata extends Schema.Class<CertificateMetadata>(\n \"BrowserbaseCertificateMetadata\",\n)({\n certificateId: Identifier,\n projectId: Identifier,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport interface CertificateUpload {\n /** PEM or DER bytes of one CA certificate. */\n readonly bytes: Uint8Array;\n /** Portable basename sent with the part; defaults to `certificate.pem`. */\n readonly filename?: string;\n readonly maxBytes?: number;\n readonly timeoutMillis?: number;\n}\n\nconst Upload = Schema.Struct({\n filename: Schema.optionalKey(SafeFilename),\n maxBytes: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_CERTIFICATE_BYTES })),\n ),\n timeoutMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 600_000 })),\n ),\n});\n\nconst ProviderCertificate = Schema.Struct({\n id: Identifier,\n projectId: Identifier,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\n/** Proxy CA certificates. Registration is one bounded multipart mutation, never retried. */\nexport class BrowserbaseCertificates extends Context.Service<\n BrowserbaseCertificates,\n {\n readonly create: (\n upload: CertificateUpload,\n ) => Effect.Effect<CertificateMetadata, CertificateError>;\n readonly list: Effect.Effect<ReadonlyArray<CertificateMetadata>, CertificateError>;\n readonly retrieve: (\n certificateId: string,\n ) => Effect.Effect<CertificateMetadata, CertificateError>;\n readonly delete: (certificateId: string) => Effect.Effect<void, CertificateError>;\n }\n>()(\"effect-browserbase/Certificates\") {\n static readonly layer: Layer.Layer<BrowserbaseCertificates, never, BrowserbaseClient> =\n Layer.effect(\n BrowserbaseCertificates,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const api = resource<CertificateError>(client, (failure) => CertificateError.make(failure));\n\n const own = (operation: CertificateError[\"operation\"], mutation: boolean) =>\n Effect.fnUntraced(function* (value: typeof ProviderCertificate.Type) {\n if (value.projectId !== client.projectId)\n return yield* api.malformed(operation, mutation);\n\n const { id, ...rest } = value;\n\n return CertificateMetadata.make({ certificateId: id, ...rest });\n });\n\n const create = Effect.fn(\"BrowserbaseCertificates.create\")(function* (\n upload: CertificateUpload,\n ) {\n const { bytes, ...options } = upload;\n const value = yield* api.input(Upload, options, \"certificate-create\");\n const owned = new Uint8Array(bytes);\n\n const raw = yield* client\n .upload(\n \"/v1/certificates\",\n {\n field: \"file\",\n filename: value.filename ?? \"certificate.pem\",\n mediaType: \"application/x-pem-file\",\n bytes: owned,\n },\n {\n maxBytes: value.maxBytes ?? 64 * 1024,\n ...(value.timeoutMillis === undefined\n ? {}\n : { timeoutMillis: value.timeoutMillis }),\n },\n )\n .pipe(Effect.mapError(api.fromClient(\"certificate-create\")));\n\n const created = yield* Schema.decodeUnknownEffect(ProviderCertificate)(raw).pipe(\n Effect.mapError(() => api.malformed(\"certificate-create\", true)),\n );\n\n return yield* own(\"certificate-create\", true)(created);\n });\n\n const list = api\n .request(\n \"GET\",\n \"/v1/certificates\",\n Schema.Array(ProviderCertificate).check(Schema.isMaxLength(1024)),\n \"certificate-list\",\n )\n .pipe(\n Effect.flatMap(Effect.forEach(own(\"certificate-list\", false))),\n Effect.withSpan(\"BrowserbaseCertificates.list\"),\n );\n\n const retrieve = Effect.fn(\"BrowserbaseCertificates.retrieve\")(function* (\n certificateId: string,\n ) {\n const id = yield* api.input(Identifier, certificateId, \"certificate-retrieve\");\n\n const value = yield* api.request(\n \"GET\",\n `/v1/certificates/${api.segment(id)}`,\n ProviderCertificate,\n \"certificate-retrieve\",\n );\n\n if (value.id !== id) return yield* api.malformed(\"certificate-retrieve\", false);\n\n return yield* own(\"certificate-retrieve\", false)(value);\n });\n\n const remove = Effect.fn(\"BrowserbaseCertificates.delete\")(function* (\n certificateId: string,\n ) {\n const id = yield* api.input(Identifier, certificateId, \"certificate-delete\");\n\n yield* api.remove(`/v1/certificates/${api.segment(id)}`, \"certificate-delete\");\n });\n\n return BrowserbaseCertificates.of({ create, list, retrieve, delete: remove });\n }),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Certificates.mjs","names":[],"sources":["../src/Certificates.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { CertificateError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { Identifier } from \"./References.ts\";\nimport { SafeFilename } from \"./Transfers.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst MAX_CERTIFICATE_BYTES = 1024 * 1024;\n\n/** Select a certificate at launch with `provider.proxySettings.caCertificates: [certificateId]`. */\nexport class CertificateMetadata extends Schema.Class<CertificateMetadata>(\n \"BrowserbaseCertificateMetadata\",\n)({\n certificateId: Identifier,\n projectId: Identifier,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport interface CertificateUpload {\n /** PEM or DER bytes of one CA certificate. */\n readonly bytes: Uint8Array;\n /** Portable basename sent with the part; defaults to `certificate.pem`. */\n readonly filename?: string;\n readonly maxBytes?: number;\n readonly timeoutMillis?: number;\n}\n\nconst Upload = Schema.Struct({\n filename: Schema.optionalKey(SafeFilename),\n maxBytes: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_CERTIFICATE_BYTES })),\n ),\n timeoutMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 600_000 })),\n ),\n});\n\nconst ProviderCertificate = Schema.Struct({\n id: Identifier,\n projectId: Identifier,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\n/** Proxy CA certificates. Registration is one bounded multipart mutation, never retried. */\nexport class BrowserbaseCertificates extends Context.Service<\n BrowserbaseCertificates,\n {\n readonly create: (\n upload: CertificateUpload,\n ) => Effect.Effect<CertificateMetadata, CertificateError>;\n readonly list: Effect.Effect<ReadonlyArray<CertificateMetadata>, CertificateError>;\n readonly retrieve: (\n certificateId: string,\n ) => Effect.Effect<CertificateMetadata, CertificateError>;\n readonly delete: (certificateId: string) => Effect.Effect<void, CertificateError>;\n }\n>()(\"effect-browserbase/Certificates\") {\n static readonly layer: Layer.Layer<BrowserbaseCertificates, never, BrowserbaseClient> =\n Layer.effect(\n BrowserbaseCertificates,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n const api = resource<CertificateError>(client, (failure) => CertificateError.make(failure));\n\n const own = (operation: CertificateError[\"operation\"], mutation: boolean) =>\n Effect.fnUntraced(function* (value: typeof ProviderCertificate.Type) {\n if (value.projectId !== client.projectId)\n return yield* api.malformed(operation, mutation);\n\n const { id, ...rest } = value;\n\n return CertificateMetadata.make({ certificateId: id, ...rest });\n });\n\n const create = Effect.fn(\"BrowserbaseCertificates.create\")(function* (\n upload: CertificateUpload,\n ) {\n const { bytes, ...options } = upload;\n const value = yield* api.input(Upload, options, \"certificate-create\");\n const owned = new Uint8Array(bytes);\n\n const raw = yield* client\n .upload(\n \"/v1/certificates\",\n {\n field: \"file\",\n filename: value.filename ?? \"certificate.pem\",\n mediaType: \"application/x-pem-file\",\n bytes: owned,\n },\n {\n maxBytes: value.maxBytes ?? 64 * 1024,\n ...(value.timeoutMillis === undefined\n ? {}\n : { timeoutMillis: value.timeoutMillis }),\n },\n )\n .pipe(Effect.mapError(api.fromClient(\"certificate-create\")));\n\n const created = yield* Schema.decodeUnknownEffect(ProviderCertificate)(raw).pipe(\n Effect.mapError(() => api.malformed(\"certificate-create\", true)),\n );\n\n return yield* own(\"certificate-create\", true)(created);\n });\n\n const list = api\n .request(\n \"GET\",\n \"/v1/certificates\",\n Schema.Array(ProviderCertificate).check(Schema.isMaxLength(1024)),\n \"certificate-list\",\n )\n .pipe(\n Effect.flatMap(Effect.forEach(own(\"certificate-list\", false))),\n Effect.withSpan(\"BrowserbaseCertificates.list\"),\n );\n\n const retrieve = Effect.fn(\"BrowserbaseCertificates.retrieve\")(function* (\n certificateId: string,\n ) {\n const id = yield* api.input(Identifier, certificateId, \"certificate-retrieve\");\n\n const value = yield* api.request(\n \"GET\",\n `/v1/certificates/${api.segment(id)}`,\n ProviderCertificate,\n \"certificate-retrieve\",\n );\n\n if (value.id !== id) return yield* api.malformed(\"certificate-retrieve\", false);\n\n return yield* own(\"certificate-retrieve\", false)(value);\n });\n\n const remove = Effect.fn(\"BrowserbaseCertificates.delete\")(function* (\n certificateId: string,\n ) {\n const id = yield* api.input(Identifier, certificateId, \"certificate-delete\");\n\n yield* api.remove(`/v1/certificates/${api.segment(id)}`, \"certificate-delete\");\n });\n\n return BrowserbaseCertificates.of({ create, list, retrieve, delete: remove });\n }),\n );\n}\n"],"mappings":"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"}
@@ -1,8 +1,6 @@
1
- import { o as SessionReference } from "./References-URDAtapt.mjs";
1
+ import { a as SessionReference } from "./References-DOH3Wu44.mjs";
2
2
  import { Schema } from "effect";
3
- declare namespace Cleanup_d_exports {
4
- export { CleanupIssue, CleanupResult };
5
- }
3
+ //#region src/Cleanup.d.ts
6
4
  declare const CleanupIssue_base: Schema.Class<CleanupIssue, Schema.Struct<{
7
5
  readonly step: Schema.Literals<readonly ["fence", "capture", "initialization", "disconnect", "release", "status"]>;
8
6
  readonly reason: Schema.Literals<readonly ["timeout", "failed", "interrupted"]>;
@@ -20,5 +18,6 @@ declare const CleanupResult_base: Schema.Class<CleanupResult, Schema.Struct<{
20
18
  /** Local disconnection, release acknowledgement, and terminal observation are separate facts. */
21
19
  declare class CleanupResult extends CleanupResult_base {}
22
20
  //#endregion
23
- export { CleanupResult as n, Cleanup_d_exports as r, CleanupIssue as t };
24
- //# sourceMappingURL=Cleanup-G2YpTCuU.d.mts.map
21
+ export { CleanupResult as n, CleanupIssue as t };
22
+ export {};
23
+ //# sourceMappingURL=Cleanup-DMTDBir8.d.mts.map
@@ -1,2 +1,3 @@
1
- import { n as CleanupResult, t as CleanupIssue } from "./Cleanup-G2YpTCuU.mjs";
2
- export { CleanupIssue, CleanupResult };
1
+ import { n as CleanupResult, t as CleanupIssue } from "./Cleanup-DMTDBir8.mjs";
2
+ export { CleanupIssue, CleanupResult };
3
+ export {};
package/dist/Cleanup.mjs CHANGED
@@ -1,12 +1,7 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
1
  import { SessionReference } from "./References.mjs";
3
2
  import { SessionStatus } from "./SessionData.mjs";
4
3
  import { Schema } from "effect";
5
4
  //#region src/Cleanup.ts
6
- var Cleanup_exports = /* @__PURE__ */ __exportAll({
7
- CleanupIssue: () => CleanupIssue,
8
- CleanupResult: () => CleanupResult
9
- });
10
5
  var CleanupIssue = class extends Schema.Class("BrowserbaseCleanupIssue")({
11
6
  step: Schema.Literals([
12
7
  "fence",
@@ -43,6 +38,6 @@ var CleanupResult = class extends Schema.Class("BrowserbaseCleanupResult")({
43
38
  issues: Schema.Array(CleanupIssue).check(Schema.isMaxLength(64))
44
39
  }) {};
45
40
  //#endregion
46
- export { CleanupIssue, CleanupResult, Cleanup_exports as t };
41
+ export { CleanupIssue, CleanupResult };
47
42
 
48
43
  //# sourceMappingURL=Cleanup.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cleanup.mjs","names":[],"sources":["../src/Cleanup.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport { SessionReference } from \"./References.ts\";\nimport { SessionStatus } from \"./SessionData.ts\";\n\nexport class CleanupIssue extends Schema.Class<CleanupIssue>(\"BrowserbaseCleanupIssue\")({\n step: Schema.Literals([\"fence\", \"capture\", \"initialization\", \"disconnect\", \"release\", \"status\"]),\n reason: Schema.Literals([\"timeout\", \"failed\", \"interrupted\"]),\n}) {}\n\n/** Local disconnection, release acknowledgement, and terminal observation are separate facts. */\nexport class CleanupResult extends Schema.Class<CleanupResult>(\"BrowserbaseCleanupResult\")({\n reference: SessionReference,\n ownership: Schema.Literals([\"owned\", \"borrowed\"]),\n releaseRequested: Schema.Boolean,\n remote: Schema.Literals([\"confirmed\", \"pending\", \"unknown\", \"not-owned\"]),\n local: Schema.Literals([\"closed\", \"failed\", \"not-connected\", \"pending\"]),\n observedStatus: Schema.optionalKey(SessionStatus),\n issues: Schema.Array(CleanupIssue).check(Schema.isMaxLength(64)),\n}) {}\n"],"mappings":";;;;;;;;;AAKA,IAAa,eAAb,cAAkC,OAAO,MAAoB,yBAAyB,CAAC,CAAC;CACtF,MAAM,OAAO,SAAS;EAAC;EAAS;EAAW;EAAkB;EAAc;EAAW;CAAQ,CAAC;CAC/F,QAAQ,OAAO,SAAS;EAAC;EAAW;EAAU;CAAa,CAAC;AAC9D,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,gBAAb,cAAmC,OAAO,MAAqB,0BAA0B,CAAC,CAAC;CACzF,WAAW;CACX,WAAW,OAAO,SAAS,CAAC,SAAS,UAAU,CAAC;CAChD,kBAAkB,OAAO;CACzB,QAAQ,OAAO,SAAS;EAAC;EAAa;EAAW;EAAW;CAAW,CAAC;CACxE,OAAO,OAAO,SAAS;EAAC;EAAU;EAAU;EAAiB;CAAS,CAAC;CACvE,gBAAgB,OAAO,YAAY,aAAa;CAChD,QAAQ,OAAO,MAAM,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,EAAE,CAAC;AACjE,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"Cleanup.mjs","names":[],"sources":["../src/Cleanup.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nimport { SessionReference } from \"./References.ts\";\nimport { SessionStatus } from \"./SessionData.ts\";\n\nexport class CleanupIssue extends Schema.Class<CleanupIssue>(\"BrowserbaseCleanupIssue\")({\n step: Schema.Literals([\"fence\", \"capture\", \"initialization\", \"disconnect\", \"release\", \"status\"]),\n reason: Schema.Literals([\"timeout\", \"failed\", \"interrupted\"]),\n}) {}\n\n/** Local disconnection, release acknowledgement, and terminal observation are separate facts. */\nexport class CleanupResult extends Schema.Class<CleanupResult>(\"BrowserbaseCleanupResult\")({\n reference: SessionReference,\n ownership: Schema.Literals([\"owned\", \"borrowed\"]),\n releaseRequested: Schema.Boolean,\n remote: Schema.Literals([\"confirmed\", \"pending\", \"unknown\", \"not-owned\"]),\n local: Schema.Literals([\"closed\", \"failed\", \"not-connected\", \"pending\"]),\n observedStatus: Schema.optionalKey(SessionStatus),\n issues: Schema.Array(CleanupIssue).check(Schema.isMaxLength(64)),\n}) {}\n"],"mappings":";;;;AAKA,IAAa,eAAb,cAAkC,OAAO,MAAoB,yBAAyB,CAAC,CAAC;CACtF,MAAM,OAAO,SAAS;EAAC;EAAS;EAAW;EAAkB;EAAc;EAAW;CAAQ,CAAC;CAC/F,QAAQ,OAAO,SAAS;EAAC;EAAW;EAAU;CAAa,CAAC;AAC9D,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,gBAAb,cAAmC,OAAO,MAAqB,0BAA0B,CAAC,CAAC;CACzF,WAAW;CACX,WAAW,OAAO,SAAS,CAAC,SAAS,UAAU,CAAC;CAChD,kBAAkB,OAAO;CACzB,QAAQ,OAAO,SAAS;EAAC;EAAa;EAAW;EAAW;CAAW,CAAC;CACxE,OAAO,OAAO,SAAS;EAAC;EAAU;EAAU;EAAiB;CAAS,CAAC;CACvE,gBAAgB,OAAO,YAAY,aAAa;CAChD,QAAQ,OAAO,MAAM,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,EAAE,CAAC;AACjE,CAAC,CAAC,CAAC,CAAC"}
@@ -1,4 +1,3 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
1
  import { Identifier } from "./References.mjs";
3
2
  import { ClientError } from "./Errors.mjs";
4
3
  import { SafeFilename } from "./Transfers.mjs";
@@ -392,7 +391,6 @@ const makeTransport = Effect.fnUntraced(function* (options) {
392
391
  });
393
392
  //#endregion
394
393
  //#region src/Client.ts
395
- var Client_exports = /* @__PURE__ */ __exportAll({ BrowserbaseClient: () => BrowserbaseClient });
396
394
  /**
397
395
  * One immutable Browserbase account and approved transport, shared by every resource Layer.
398
396
  * Constructing the Layer performs no request and never loads the native browser peer.
@@ -419,6 +417,6 @@ var BrowserbaseClient = class BrowserbaseClient extends Context.Service()("effec
419
417
  }
420
418
  };
421
419
  //#endregion
422
- export { Client_exports as n, BrowserbaseClient as t };
420
+ export { BrowserbaseClient as t };
423
421
 
424
- //# sourceMappingURL=Client-D1_xYM9o.mjs.map
422
+ //# sourceMappingURL=Client-BQteUePT.mjs.map