browser-use-sdk 3.5.0 → 3.8.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.
- package/README.md +12 -0
- package/dist/chunk-ESJIWN3M.js +175 -0
- package/dist/chunk-ESJIWN3M.js.map +1 -0
- package/dist/chunk-QMK4AUMH.cjs +175 -0
- package/dist/chunk-QMK4AUMH.cjs.map +1 -0
- package/dist/errors-DaHgFhIQ.d.cts +69 -0
- package/dist/errors-DaHgFhIQ.d.ts +69 -0
- package/dist/index.cjs +35 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +34 -13
- package/dist/index.js.map +1 -1
- package/dist/v3.cjs +45 -17
- package/dist/v3.cjs.map +1 -1
- package/dist/v3.d.cts +147 -124
- package/dist/v3.d.ts +147 -124
- package/dist/v3.js +45 -17
- package/dist/v3.js.map +1 -1
- package/package.json +17 -1
- package/dist/chunk-6TSB5AIP.js +0 -99
- package/dist/chunk-6TSB5AIP.js.map +0 -1
- package/dist/chunk-JT4IL3IZ.cjs +0 -99
- package/dist/chunk-JT4IL3IZ.cjs.map +0 -1
- package/dist/errors-BtB79l7x.d.cts +0 -30
- package/dist/errors-BtB79l7x.d.ts +0 -30
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/sauravpanda/Github/LLMs/Browser-Use/sdk/browser-use-node/dist/index.cjs","../src/v2/client.ts","../src/v2/resources/billing.ts","../src/v2/resources/browsers.ts","../src/v2/resources/files.ts","../src/v2/resources/marketplace.ts","../src/v2/resources/profiles.ts","../src/v2/resources/sessions.ts","../src/v2/resources/skills.ts","../src/v2/helpers.ts","../src/v2/resources/tasks.ts"],"names":[],"mappings":"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","file":"/Users/sauravpanda/Github/LLMs/Browser-Use/sdk/browser-use-node/dist/index.cjs","sourcesContent":[null,"import { z } from \"zod\";\nimport { HttpClient } from \"../core/http.js\";\nimport { Billing } from \"./resources/billing.js\";\nimport { Browsers } from \"./resources/browsers.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Marketplace } from \"./resources/marketplace.js\";\nimport { Profiles } from \"./resources/profiles.js\";\nimport { Sessions } from \"./resources/sessions.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { TaskRun } from \"./helpers.js\";\nimport type { CreateTaskBody } from \"./resources/tasks.js\";\nimport type { RunOptions } from \"./helpers.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.browser-use.com/api/v2\";\n\nexport interface BrowserUseOptions {\n apiKey?: string;\n baseUrl?: string;\n maxRetries?: number;\n timeout?: number;\n}\n\nexport type RunTaskOptions = Partial<Omit<CreateTaskBody, \"task\">> &\n RunOptions & { schema?: z.ZodType };\n\nexport class BrowserUse {\n readonly billing: Billing;\n readonly tasks: Tasks;\n readonly sessions: Sessions;\n readonly files: Files;\n readonly profiles: Profiles;\n readonly browsers: Browsers;\n readonly skills: Skills;\n readonly marketplace: Marketplace;\n\n private readonly http: HttpClient;\n\n constructor(options: BrowserUseOptions = {}) {\n const apiKey =\n options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n if (!apiKey) {\n throw new Error(\n \"No API key provided. Pass apiKey or set BROWSER_USE_API_KEY.\",\n );\n }\n this.http = new HttpClient({\n apiKey,\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n });\n\n this.billing = new Billing(this.http);\n this.tasks = new Tasks(this.http);\n this.sessions = new Sessions(this.http);\n this.files = new Files(this.http);\n this.profiles = new Profiles(this.http);\n this.browsers = new Browsers(this.http);\n this.skills = new Skills(this.http);\n this.marketplace = new Marketplace(this.http);\n }\n\n /**\n * Run an AI agent task.\n *\n * ```ts\n * // Simple — just get the output\n * const output = await client.run(\"Find the top HN post\");\n *\n * // Structured output (Zod)\n * const data = await client.run(\"Find product info\", { schema: ProductSchema });\n *\n * // Step-by-step progress\n * for await (const step of client.run(\"Go to google.com\")) {\n * console.log(`[${step.number}] ${step.nextGoal}`);\n * }\n * ```\n */\n run(task: string, options?: Omit<RunTaskOptions, \"schema\">): TaskRun<string>;\n run<T extends z.ZodType>(task: string, options: RunTaskOptions & { schema: T }): TaskRun<z.output<T>>;\n run(task: string, options?: RunTaskOptions): TaskRun<any> {\n const { schema, timeout, interval, ...rest } = options ?? {};\n const body: CreateTaskBody = { task, ...rest };\n if (schema) {\n body.structuredOutput = JSON.stringify(z.toJSONSchema(schema));\n }\n const promise = this.tasks.create(body);\n return new TaskRun(promise, this.tasks, schema, { timeout, interval });\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype AccountView = components[\"schemas\"][\"AccountView\"];\n\nexport class Billing {\n constructor(private readonly http: HttpClient) {}\n\n /** Get authenticated account billing information including credit balance. */\n account(): Promise<AccountView> {\n return this.http.get<AccountView>(\"/billing/account\");\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** All fields are optional (server applies defaults); body itself is required by the spec. */\nexport type CreateBrowserBody = Partial<components[\"schemas\"][\"CreateBrowserSessionRequest\"]>;\ntype BrowserSessionItemView = components[\"schemas\"][\"BrowserSessionItemView\"];\ntype BrowserSessionListResponse = components[\"schemas\"][\"BrowserSessionListResponse\"];\ntype BrowserSessionView = components[\"schemas\"][\"BrowserSessionView\"];\ntype UpdateBrowserSessionRequest = components[\"schemas\"][\"UpdateBrowserSessionRequest\"];\ntype BrowserDownloadListResponse = components[\"schemas\"][\"BrowserDownloadListResponse\"];\n\nexport interface BrowserListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport interface BrowserDownloadsParams {\n limit?: number;\n cursor?: string;\n includeUrls?: boolean;\n}\n\nexport class Browsers {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser session. */\n create(body: CreateBrowserBody = {}): Promise<BrowserSessionItemView> {\n if (body.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<BrowserSessionItemView>(\"/browsers\", body);\n }\n\n /** List browser sessions with optional filtering. */\n list(params?: BrowserListParams): Promise<BrowserSessionListResponse> {\n return this.http.get<BrowserSessionListResponse>(\n \"/browsers\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get detailed browser session information. */\n get(sessionId: string): Promise<BrowserSessionView> {\n return this.http.get<BrowserSessionView>(`/browsers/${sessionId}`);\n }\n\n /** Update a browser session (generic PATCH). */\n update(sessionId: string, body: UpdateBrowserSessionRequest): Promise<BrowserSessionView> {\n return this.http.patch<BrowserSessionView>(`/browsers/${sessionId}`, body);\n }\n\n /** Stop a browser session. */\n stop(sessionId: string): Promise<BrowserSessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** List files the browser downloaded to S3 during the session. */\n downloads(sessionId: string, params?: BrowserDownloadsParams): Promise<BrowserDownloadListResponse> {\n return this.http.get<BrowserDownloadListResponse>(\n `/browsers/${sessionId}/downloads`,\n params as Record<string, unknown>,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype UploadFileRequest = components[\"schemas\"][\"UploadFileRequest\"];\ntype UploadFilePresignedUrlResponse = components[\"schemas\"][\"UploadFilePresignedUrlResponse\"];\ntype TaskOutputFileResponse = components[\"schemas\"][\"TaskOutputFileResponse\"];\n\nexport class Files {\n constructor(private readonly http: HttpClient) {}\n\n /** Generate a presigned URL for uploading files to an agent session. */\n sessionUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/sessions/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Generate a presigned URL for uploading files to a browser session. */\n browserUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/browsers/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Get secure download URL for a task output file. */\n taskOutput(taskId: string, fileId: string): Promise<TaskOutputFileResponse> {\n return this.http.get<TaskOutputFileResponse>(\n `/files/tasks/${taskId}/output-files/${fileId}`,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype MarketplaceSkillListResponse = components[\"schemas\"][\"MarketplaceSkillListResponse\"];\ntype MarketplaceSkillResponse = components[\"schemas\"][\"MarketplaceSkillResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\n\nexport interface MarketplaceListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n category?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport class Marketplace {\n constructor(private readonly http: HttpClient) {}\n\n /** List all public skills in the marketplace. */\n list(params?: MarketplaceListParams): Promise<MarketplaceSkillListResponse> {\n return this.http.get<MarketplaceSkillListResponse>(\n \"/marketplace/skills\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get details of a specific marketplace skill by slug. */\n get(skillSlug: string): Promise<MarketplaceSkillResponse> {\n return this.http.get<MarketplaceSkillResponse>(`/marketplace/skills/${skillSlug}`);\n }\n\n /** Clone a public marketplace skill to your project. */\n clone(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/marketplace/skills/${skillId}/clone`);\n }\n\n /** Execute a marketplace skill. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(\n `/marketplace/skills/${skillId}/execute`,\n body,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ProfileCreateRequest = components[\"schemas\"][\"ProfileCreateRequest\"];\ntype ProfileListResponse = components[\"schemas\"][\"ProfileListResponse\"];\ntype ProfileUpdateRequest = components[\"schemas\"][\"ProfileUpdateRequest\"];\ntype ProfileView = components[\"schemas\"][\"ProfileView\"];\n\nexport interface ProfileListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n}\n\nexport class Profiles {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser profile. */\n create(body?: ProfileCreateRequest): Promise<ProfileView> {\n return this.http.post<ProfileView>(\"/profiles\", body);\n }\n\n /** List profiles with pagination. */\n list(params?: ProfileListParams): Promise<ProfileListResponse> {\n return this.http.get<ProfileListResponse>(\"/profiles\", params as Record<string, unknown>);\n }\n\n /** Get profile details. */\n get(profileId: string): Promise<ProfileView> {\n return this.http.get<ProfileView>(`/profiles/${profileId}`);\n }\n\n /** Update a browser profile. */\n update(profileId: string, body: ProfileUpdateRequest): Promise<ProfileView> {\n return this.http.patch<ProfileView>(`/profiles/${profileId}`, body);\n }\n\n /** Delete a browser profile. */\n delete(profileId: string): Promise<void> {\n return this.http.delete<void>(`/profiles/${profileId}`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** User-facing body: all fields are optional (API has defaults). */\ntype CreateSessionBody = Partial<components[\"schemas\"][\"CreateSessionRequest\"]>;\ntype SessionItemView = components[\"schemas\"][\"SessionItemView\"];\ntype SessionListResponse = components[\"schemas\"][\"SessionListResponse\"];\ntype SessionView = components[\"schemas\"][\"SessionView\"];\ntype ShareView = components[\"schemas\"][\"ShareView\"];\ntype UpdateSessionRequest = components[\"schemas\"][\"UpdateSessionRequest\"];\n\nexport interface SessionListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport class Sessions {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new session. */\n create(body?: CreateSessionBody): Promise<SessionItemView> {\n if (body?.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<SessionItemView>(\"/sessions\", body);\n }\n\n /** List sessions with optional filtering. */\n list(params?: SessionListParams): Promise<SessionListResponse> {\n return this.http.get<SessionListResponse>(\"/sessions\", params as Record<string, unknown>);\n }\n\n /** Get detailed session information. */\n get(sessionId: string): Promise<SessionView> {\n return this.http.get<SessionView>(`/sessions/${sessionId}`);\n }\n\n /** Update a session (generic PATCH). */\n update(sessionId: string, body: UpdateSessionRequest): Promise<SessionView> {\n return this.http.patch<SessionView>(`/sessions/${sessionId}`, body);\n }\n\n /** Stop a session and all its running tasks. */\n stop(sessionId: string): Promise<SessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** Delete a session with all its tasks. */\n delete(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}`);\n }\n\n /** Get public share information for a session. */\n getShare(sessionId: string): Promise<ShareView> {\n return this.http.get<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Create or return existing public share for a session. */\n createShare(sessionId: string): Promise<ShareView> {\n return this.http.post<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Remove public share for a session. */\n deleteShare(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Purge all session data (ZDR projects only). */\n purge(sessionId: string): Promise<void> {\n return this.http.post<void>(`/sessions/${sessionId}/purge`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype CreateSkillRequest = components[\"schemas\"][\"CreateSkillRequest\"];\ntype CreateSkillResponse = components[\"schemas\"][\"CreateSkillResponse\"];\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype RefineSkillRequest = components[\"schemas\"][\"RefineSkillRequest\"];\ntype RefineSkillResponse = components[\"schemas\"][\"RefineSkillResponse\"];\ntype SkillExecutionListResponse = components[\"schemas\"][\"SkillExecutionListResponse\"];\ntype SkillExecutionOutputResponse = components[\"schemas\"][\"SkillExecutionOutputResponse\"];\ntype SkillListResponse = components[\"schemas\"][\"SkillListResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\ntype UpdateSkillRequest = components[\"schemas\"][\"UpdateSkillRequest\"];\n\nexport interface SkillListParams {\n pageSize?: number;\n pageNumber?: number;\n isPublic?: boolean;\n isEnabled?: boolean;\n category?: string;\n query?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport interface SkillExecutionListParams {\n pageSize?: number;\n pageNumber?: number;\n}\n\nexport class Skills {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new skill via automated generation. */\n create(body: CreateSkillRequest): Promise<CreateSkillResponse> {\n return this.http.post<CreateSkillResponse>(\"/skills\", body);\n }\n\n /** List all skills owned by the project. */\n list(params?: SkillListParams): Promise<SkillListResponse> {\n return this.http.get<SkillListResponse>(\"/skills\", params as Record<string, unknown>);\n }\n\n /** Get details of a specific skill. */\n get(skillId: string): Promise<SkillResponse> {\n return this.http.get<SkillResponse>(`/skills/${skillId}`);\n }\n\n /** Delete a skill. */\n delete(skillId: string): Promise<void> {\n return this.http.delete<void>(`/skills/${skillId}`);\n }\n\n /** Update skill metadata. */\n update(skillId: string, body: UpdateSkillRequest): Promise<SkillResponse> {\n return this.http.patch<SkillResponse>(`/skills/${skillId}`, body);\n }\n\n /** Cancel the current in-progress generation for a skill. */\n cancel(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/cancel`);\n }\n\n /** Execute a skill with the provided parameters. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(`/skills/${skillId}/execute`, body);\n }\n\n /** Refine a skill based on feedback. */\n refine(skillId: string, body: RefineSkillRequest): Promise<RefineSkillResponse> {\n return this.http.post<RefineSkillResponse>(`/skills/${skillId}/refine`, body);\n }\n\n /** Rollback to the previous version. */\n rollback(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/rollback`);\n }\n\n /** List executions for a specific skill. */\n executions(skillId: string, params?: SkillExecutionListParams): Promise<SkillExecutionListResponse> {\n return this.http.get<SkillExecutionListResponse>(\n `/skills/${skillId}/executions`,\n params as Record<string, unknown>,\n );\n }\n\n /** Get presigned URL for downloading skill execution output. */\n executionOutput(skillId: string, executionId: string): Promise<SkillExecutionOutputResponse> {\n return this.http.get<SkillExecutionOutputResponse>(\n `/skills/${skillId}/executions/${executionId}/output`,\n );\n }\n}\n","import type { z } from \"zod\";\nimport type { components } from \"../generated/v2/types.js\";\nimport type { Tasks } from \"./resources/tasks.js\";\n\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskStepView = components[\"schemas\"][\"TaskStepView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\n\nexport const TERMINAL_STATUSES = new Set([\"finished\", \"stopped\"]);\n\n/** Task result with typed output. All TaskView fields are directly accessible. */\nexport type TaskResult<T = string | null> = Omit<TaskView, \"output\"> & { output: T };\n\nexport interface RunOptions {\n /** Maximum time to wait in milliseconds. Default: 300_000 (5 min). */\n timeout?: number;\n /** Polling interval in milliseconds. Default: 2_000. */\n interval?: number;\n}\n\n/**\n * Lazy task handle returned by `client.run()`.\n *\n * - `await client.run(...)` polls the lightweight status endpoint, returns a `TaskResult`.\n * - `for await (const step of client.run(...))` polls the full task, yields new steps.\n */\nexport class TaskRun<T = string> implements PromiseLike<TaskResult<T>> {\n private readonly _createPromise: Promise<TaskCreatedResponse>;\n private readonly _tasks: Tasks;\n private readonly _schema?: z.ZodType<T>;\n private readonly _timeout: number;\n private readonly _interval: number;\n\n private _taskId: string | null = null;\n private _result: TaskResult<T> | null = null;\n\n constructor(\n createPromise: Promise<TaskCreatedResponse>,\n tasks: Tasks,\n schema?: z.ZodType<T>,\n options?: RunOptions,\n ) {\n this._createPromise = createPromise;\n this._tasks = tasks;\n this._schema = schema;\n this._timeout = options?.timeout ?? 300_000;\n this._interval = options?.interval ?? 2_000;\n }\n\n /** Task ID (available after creation resolves). */\n get taskId(): string | null {\n return this._taskId;\n }\n\n /** Full task result (available after awaiting or iterating to completion). */\n get result(): TaskResult<T> | null {\n return this._result;\n }\n\n /** Enable `await client.run(...)` — polls status endpoint, returns TaskResult. */\n then<R1 = TaskResult<T>, R2 = never>(\n onFulfilled?: ((value: TaskResult<T>) => R1 | PromiseLike<R1>) | null,\n onRejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this._waitForOutput().then(onFulfilled, onRejected);\n }\n\n /** Enable `for await (const step of client.run(...))` — polls full task, yields new steps. */\n async *[Symbol.asyncIterator](): AsyncGenerator<TaskStepView> {\n const taskId = await this._ensureTaskId();\n let seen = 0;\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const task = await this._tasks.get(taskId);\n\n for (let i = seen; i < task.steps.length; i++) {\n yield task.steps[i];\n }\n seen = task.steps.length;\n\n if (TERMINAL_STATUSES.has(task.status)) {\n this._result = this._buildResult(task);\n return;\n }\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private async _ensureTaskId(): Promise<string> {\n if (this._taskId) return this._taskId;\n const created = await this._createPromise;\n this._taskId = created.id;\n return this._taskId;\n }\n\n /** Poll lightweight status endpoint until terminal, return TaskResult. */\n private async _waitForOutput(): Promise<TaskResult<T>> {\n const taskId = await this._ensureTaskId();\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const status = await this._tasks.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n const task = await this._tasks.get(taskId);\n this._result = this._buildResult(task);\n return this._result;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private _buildResult(task: TaskView): TaskResult<T> {\n const output = this._parseOutput(task.output);\n return { ...task, output };\n }\n\n private _parseOutput(output: string | null | undefined): T {\n if (output == null) return null as T;\n if (!this._schema) return output as unknown as T;\n return this._schema.parse(JSON.parse(output));\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\nimport { TERMINAL_STATUSES } from \"../helpers.js\";\n\n/** User-facing body: only `task` is required; everything else has API defaults. */\nexport type CreateTaskBody = Pick<components[\"schemas\"][\"CreateTaskRequest\"], \"task\"> &\n Partial<Omit<components[\"schemas\"][\"CreateTaskRequest\"], \"task\">>;\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskListResponse = components[\"schemas\"][\"TaskListResponse\"];\ntype TaskLogFileResponse = components[\"schemas\"][\"TaskLogFileResponse\"];\ntype TaskStatusView = components[\"schemas\"][\"TaskStatusView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\ntype UpdateTaskRequest = components[\"schemas\"][\"UpdateTaskRequest\"];\n\nexport interface TaskListParams {\n pageSize?: number;\n pageNumber?: number;\n sessionId?: string;\n filterBy?: string;\n after?: string;\n before?: string;\n}\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** Create and start a new AI agent task. */\n create(body: CreateTaskBody): Promise<TaskCreatedResponse> {\n return this.http.post<TaskCreatedResponse>(\"/tasks\", body);\n }\n\n /** List tasks with optional filtering. */\n list(params?: TaskListParams): Promise<TaskListResponse> {\n return this.http.get<TaskListResponse>(\"/tasks\", params as Record<string, unknown>);\n }\n\n /** Get detailed task information. */\n get(taskId: string): Promise<TaskView> {\n return this.http.get<TaskView>(`/tasks/${taskId}`);\n }\n\n /** Update a task (generic PATCH). */\n update(taskId: string, body: UpdateTaskRequest): Promise<TaskView> {\n return this.http.patch<TaskView>(`/tasks/${taskId}`, body);\n }\n\n /** Stop a running task. */\n stop(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop\" });\n }\n\n /** Stop a running task and its associated browser session. */\n stopTaskAndSession(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop_task_and_session\" });\n }\n\n /** Get lightweight task status (optimized for polling). */\n status(taskId: string): Promise<TaskStatusView> {\n return this.http.get<TaskStatusView>(`/tasks/${taskId}/status`);\n }\n\n /** Get secure download URL for task execution logs. */\n logs(taskId: string): Promise<TaskLogFileResponse> {\n return this.http.get<TaskLogFileResponse>(`/tasks/${taskId}/logs`);\n }\n\n /** Poll until a task reaches a terminal status, then return the full TaskView. */\n async wait(taskId: string, opts?: { timeout?: number; interval?: number }): Promise<TaskView> {\n const timeout = opts?.timeout ?? 300_000;\n const interval = opts?.interval ?? 2_000;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n const status = await this.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n return this.get(taskId);\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${timeout}ms`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/larsencundric/Documents/browser-use/sdk/browser-use-node/dist/index.cjs","../src/v2/client.ts","../src/v2/resources/billing.ts","../src/v2/resources/browsers.ts","../src/v2/resources/files.ts","../src/v2/resources/marketplace.ts","../src/v2/resources/profiles.ts","../src/v2/resources/sessions.ts","../src/v2/resources/skills.ts","../src/v2/helpers.ts","../src/v2/resources/tasks.ts"],"names":[],"mappings":"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","file":"/Users/larsencundric/Documents/browser-use/sdk/browser-use-node/dist/index.cjs","sourcesContent":[null,"import { z } from \"zod\";\nimport { HttpClient } from \"../core/http.js\";\nimport {\n X402_BASE_URL_DEFAULT_V2,\n type X402Client,\n wrapFetchWithX402,\n x402ClientFromPrivateKey,\n} from \"../core/x402.js\";\nimport { Billing } from \"./resources/billing.js\";\nimport { Browsers } from \"./resources/browsers.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Marketplace } from \"./resources/marketplace.js\";\nimport { Profiles } from \"./resources/profiles.js\";\nimport { Sessions } from \"./resources/sessions.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { TaskRun } from \"./helpers.js\";\nimport type { CreateTaskBody } from \"./resources/tasks.js\";\nimport type { RunOptions } from \"./helpers.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.browser-use.com/api/v2\";\n\nexport interface BrowserUseOptions {\n apiKey?: string;\n baseUrl?: string;\n maxRetries?: number;\n timeout?: number;\n /** Pre-built x402 client for pay-per-request authentication. */\n x402?: X402Client;\n /** EVM wallet private key for x402 mode (also reads `BROWSER_USE_X402_PRIVATE_KEY`). */\n x402PrivateKey?: string;\n}\n\nexport type RunTaskOptions = Partial<Omit<CreateTaskBody, \"task\">> &\n RunOptions & { schema?: z.ZodType };\n\nexport class BrowserUse {\n readonly billing: Billing;\n readonly tasks: Tasks;\n readonly sessions: Sessions;\n readonly files: Files;\n readonly profiles: Profiles;\n readonly browsers: Browsers;\n readonly skills: Skills;\n readonly marketplace: Marketplace;\n\n private readonly http: HttpClient;\n\n constructor(options: BrowserUseOptions = {}) {\n const x402PrivateKey =\n options.x402PrivateKey ?? process.env.BROWSER_USE_X402_PRIVATE_KEY;\n\n if (options.x402 || x402PrivateKey) {\n // Top-up mode: when apiKey is also set, forward it as a header so the\n // backend credits the API key's project instead of one keyed to the wallet.\n const topupKey = options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n const fetchPromise = (async () => {\n const x402Client = options.x402 ?? (await x402ClientFromPrivateKey(x402PrivateKey!));\n return wrapFetchWithX402(globalThis.fetch, x402Client);\n })();\n // Suppress unhandled-rejection warnings if the user constructs the client\n // but never makes a request\n fetchPromise.catch(() => {});\n this.http = new HttpClient({\n apiKey: topupKey,\n baseUrl: options.baseUrl ?? X402_BASE_URL_DEFAULT_V2,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n fetch: fetchPromise,\n });\n } else {\n const apiKey =\n options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n if (!apiKey) {\n throw new Error(\n \"No credentials provided. Pass apiKey / set BROWSER_USE_API_KEY, \" +\n \"or pass x402PrivateKey / set BROWSER_USE_X402_PRIVATE_KEY for \" +\n \"pay-per-request access via USDC.\",\n );\n }\n this.http = new HttpClient({\n apiKey,\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n });\n }\n\n this.billing = new Billing(this.http);\n this.tasks = new Tasks(this.http);\n this.sessions = new Sessions(this.http);\n this.files = new Files(this.http);\n this.profiles = new Profiles(this.http);\n this.browsers = new Browsers(this.http);\n this.skills = new Skills(this.http);\n this.marketplace = new Marketplace(this.http);\n }\n\n /**\n * Run an AI agent task.\n *\n * ```ts\n * // Simple — just get the output\n * const output = await client.run(\"Find the top HN post\");\n *\n * // Structured output (Zod)\n * const data = await client.run(\"Find product info\", { schema: ProductSchema });\n *\n * // Step-by-step progress\n * for await (const step of client.run(\"Go to google.com\")) {\n * console.log(`[${step.number}] ${step.nextGoal}`);\n * }\n * ```\n */\n run(task: string, options?: Omit<RunTaskOptions, \"schema\">): TaskRun<string>;\n run<T extends z.ZodType>(task: string, options: RunTaskOptions & { schema: T }): TaskRun<z.output<T>>;\n run(task: string, options?: RunTaskOptions): TaskRun<any> {\n const { schema, timeout, interval, ...rest } = options ?? {};\n const body: CreateTaskBody = { task, ...rest };\n if (schema) {\n body.structuredOutput = JSON.stringify(z.toJSONSchema(schema));\n }\n const promise = this.tasks.create(body);\n return new TaskRun(promise, this.tasks, schema, { timeout, interval });\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype AccountView = components[\"schemas\"][\"AccountView\"];\n\nexport class Billing {\n constructor(private readonly http: HttpClient) {}\n\n /** Get authenticated account billing information including credit balance. */\n account(): Promise<AccountView> {\n return this.http.get<AccountView>(\"/billing/account\");\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** All fields are optional (server applies defaults); body itself is required by the spec. */\nexport type CreateBrowserBody = Partial<components[\"schemas\"][\"CreateBrowserSessionRequest\"]>;\ntype BrowserSessionItemView = components[\"schemas\"][\"BrowserSessionItemView\"];\ntype BrowserSessionListResponse = components[\"schemas\"][\"BrowserSessionListResponse\"];\ntype BrowserSessionView = components[\"schemas\"][\"BrowserSessionView\"];\ntype UpdateBrowserSessionRequest = components[\"schemas\"][\"UpdateBrowserSessionRequest\"];\ntype BrowserDownloadListResponse = components[\"schemas\"][\"BrowserDownloadListResponse\"];\n\nexport interface BrowserListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport interface BrowserDownloadsParams {\n limit?: number;\n cursor?: string;\n includeUrls?: boolean;\n}\n\nexport class Browsers {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser session. */\n create(body: CreateBrowserBody = {}): Promise<BrowserSessionItemView> {\n if (body.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<BrowserSessionItemView>(\"/browsers\", body);\n }\n\n /** List browser sessions with optional filtering. */\n list(params?: BrowserListParams): Promise<BrowserSessionListResponse> {\n return this.http.get<BrowserSessionListResponse>(\n \"/browsers\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get detailed browser session information. */\n get(sessionId: string): Promise<BrowserSessionView> {\n return this.http.get<BrowserSessionView>(`/browsers/${sessionId}`);\n }\n\n /** Update a browser session (generic PATCH). */\n update(sessionId: string, body: UpdateBrowserSessionRequest): Promise<BrowserSessionView> {\n return this.http.patch<BrowserSessionView>(`/browsers/${sessionId}`, body);\n }\n\n /** Stop a browser session. */\n stop(sessionId: string): Promise<BrowserSessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** List files the browser downloaded to S3 during the session. */\n downloads(sessionId: string, params?: BrowserDownloadsParams): Promise<BrowserDownloadListResponse> {\n return this.http.get<BrowserDownloadListResponse>(\n `/browsers/${sessionId}/downloads`,\n params as Record<string, unknown>,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype UploadFileRequest = components[\"schemas\"][\"UploadFileRequest\"];\ntype UploadFilePresignedUrlResponse = components[\"schemas\"][\"UploadFilePresignedUrlResponse\"];\ntype TaskOutputFileResponse = components[\"schemas\"][\"TaskOutputFileResponse\"];\n\nexport class Files {\n constructor(private readonly http: HttpClient) {}\n\n /** Generate a presigned URL for uploading files to an agent session. */\n sessionUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/sessions/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Generate a presigned URL for uploading files to a browser session. */\n browserUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/browsers/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Get secure download URL for a task output file. */\n taskOutput(taskId: string, fileId: string): Promise<TaskOutputFileResponse> {\n return this.http.get<TaskOutputFileResponse>(\n `/files/tasks/${taskId}/output-files/${fileId}`,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype MarketplaceSkillListResponse = components[\"schemas\"][\"MarketplaceSkillListResponse\"];\ntype MarketplaceSkillResponse = components[\"schemas\"][\"MarketplaceSkillResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\n\nexport interface MarketplaceListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n category?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport class Marketplace {\n constructor(private readonly http: HttpClient) {}\n\n /** List all public skills in the marketplace. */\n list(params?: MarketplaceListParams): Promise<MarketplaceSkillListResponse> {\n return this.http.get<MarketplaceSkillListResponse>(\n \"/marketplace/skills\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get details of a specific marketplace skill by slug. */\n get(skillSlug: string): Promise<MarketplaceSkillResponse> {\n return this.http.get<MarketplaceSkillResponse>(`/marketplace/skills/${skillSlug}`);\n }\n\n /** Clone a public marketplace skill to your project. */\n clone(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/marketplace/skills/${skillId}/clone`);\n }\n\n /** Execute a marketplace skill. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(\n `/marketplace/skills/${skillId}/execute`,\n body,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ProfileCreateRequest = components[\"schemas\"][\"ProfileCreateRequest\"];\ntype ProfileListResponse = components[\"schemas\"][\"ProfileListResponse\"];\ntype ProfileUpdateRequest = components[\"schemas\"][\"ProfileUpdateRequest\"];\ntype ProfileView = components[\"schemas\"][\"ProfileView\"];\n\nexport interface ProfileListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n}\n\nexport class Profiles {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser profile. */\n create(body?: ProfileCreateRequest): Promise<ProfileView> {\n return this.http.post<ProfileView>(\"/profiles\", body);\n }\n\n /** List profiles with pagination. */\n list(params?: ProfileListParams): Promise<ProfileListResponse> {\n return this.http.get<ProfileListResponse>(\"/profiles\", params as Record<string, unknown>);\n }\n\n /** Get profile details. */\n get(profileId: string): Promise<ProfileView> {\n return this.http.get<ProfileView>(`/profiles/${profileId}`);\n }\n\n /** Update a browser profile. */\n update(profileId: string, body: ProfileUpdateRequest): Promise<ProfileView> {\n return this.http.patch<ProfileView>(`/profiles/${profileId}`, body);\n }\n\n /** Delete a browser profile. */\n delete(profileId: string): Promise<void> {\n return this.http.delete<void>(`/profiles/${profileId}`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** User-facing body: all fields are optional (API has defaults). */\ntype CreateSessionBody = Partial<components[\"schemas\"][\"CreateSessionRequest\"]>;\ntype SessionItemView = components[\"schemas\"][\"SessionItemView\"];\ntype SessionListResponse = components[\"schemas\"][\"SessionListResponse\"];\ntype SessionView = components[\"schemas\"][\"SessionView\"];\ntype ShareView = components[\"schemas\"][\"ShareView\"];\ntype UpdateSessionRequest = components[\"schemas\"][\"UpdateSessionRequest\"];\n\nexport interface SessionListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport class Sessions {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new session. */\n create(body?: CreateSessionBody): Promise<SessionItemView> {\n if (body?.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<SessionItemView>(\"/sessions\", body);\n }\n\n /** List sessions with optional filtering. */\n list(params?: SessionListParams): Promise<SessionListResponse> {\n return this.http.get<SessionListResponse>(\"/sessions\", params as Record<string, unknown>);\n }\n\n /** Get detailed session information. */\n get(sessionId: string): Promise<SessionView> {\n return this.http.get<SessionView>(`/sessions/${sessionId}`);\n }\n\n /** Update a session (generic PATCH). */\n update(sessionId: string, body: UpdateSessionRequest): Promise<SessionView> {\n return this.http.patch<SessionView>(`/sessions/${sessionId}`, body);\n }\n\n /** Stop a session and all its running tasks. */\n stop(sessionId: string): Promise<SessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** Delete a session with all its tasks. */\n delete(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}`);\n }\n\n /** Get public share information for a session. */\n getShare(sessionId: string): Promise<ShareView> {\n return this.http.get<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Create or return existing public share for a session. */\n createShare(sessionId: string): Promise<ShareView> {\n return this.http.post<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Remove public share for a session. */\n deleteShare(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Purge all session data (ZDR projects only). */\n purge(sessionId: string): Promise<void> {\n return this.http.post<void>(`/sessions/${sessionId}/purge`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype CreateSkillRequest = components[\"schemas\"][\"CreateSkillRequest\"];\ntype CreateSkillResponse = components[\"schemas\"][\"CreateSkillResponse\"];\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype RefineSkillRequest = components[\"schemas\"][\"RefineSkillRequest\"];\ntype RefineSkillResponse = components[\"schemas\"][\"RefineSkillResponse\"];\ntype SkillExecutionListResponse = components[\"schemas\"][\"SkillExecutionListResponse\"];\ntype SkillExecutionOutputResponse = components[\"schemas\"][\"SkillExecutionOutputResponse\"];\ntype SkillListResponse = components[\"schemas\"][\"SkillListResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\ntype UpdateSkillRequest = components[\"schemas\"][\"UpdateSkillRequest\"];\n\nexport interface SkillListParams {\n pageSize?: number;\n pageNumber?: number;\n isPublic?: boolean;\n isEnabled?: boolean;\n category?: string;\n query?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport interface SkillExecutionListParams {\n pageSize?: number;\n pageNumber?: number;\n}\n\nexport class Skills {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new skill via automated generation. */\n create(body: CreateSkillRequest): Promise<CreateSkillResponse> {\n return this.http.post<CreateSkillResponse>(\"/skills\", body);\n }\n\n /** List all skills owned by the project. */\n list(params?: SkillListParams): Promise<SkillListResponse> {\n return this.http.get<SkillListResponse>(\"/skills\", params as Record<string, unknown>);\n }\n\n /** Get details of a specific skill. */\n get(skillId: string): Promise<SkillResponse> {\n return this.http.get<SkillResponse>(`/skills/${skillId}`);\n }\n\n /** Delete a skill. */\n delete(skillId: string): Promise<void> {\n return this.http.delete<void>(`/skills/${skillId}`);\n }\n\n /** Update skill metadata. */\n update(skillId: string, body: UpdateSkillRequest): Promise<SkillResponse> {\n return this.http.patch<SkillResponse>(`/skills/${skillId}`, body);\n }\n\n /** Cancel the current in-progress generation for a skill. */\n cancel(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/cancel`);\n }\n\n /** Execute a skill with the provided parameters. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(`/skills/${skillId}/execute`, body);\n }\n\n /** Refine a skill based on feedback. */\n refine(skillId: string, body: RefineSkillRequest): Promise<RefineSkillResponse> {\n return this.http.post<RefineSkillResponse>(`/skills/${skillId}/refine`, body);\n }\n\n /** Rollback to the previous version. */\n rollback(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/rollback`);\n }\n\n /** List executions for a specific skill. */\n executions(skillId: string, params?: SkillExecutionListParams): Promise<SkillExecutionListResponse> {\n return this.http.get<SkillExecutionListResponse>(\n `/skills/${skillId}/executions`,\n params as Record<string, unknown>,\n );\n }\n\n /** Get presigned URL for downloading skill execution output. */\n executionOutput(skillId: string, executionId: string): Promise<SkillExecutionOutputResponse> {\n return this.http.get<SkillExecutionOutputResponse>(\n `/skills/${skillId}/executions/${executionId}/output`,\n );\n }\n}\n","import type { z } from \"zod\";\nimport type { components } from \"../generated/v2/types.js\";\nimport type { Tasks } from \"./resources/tasks.js\";\n\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskStepView = components[\"schemas\"][\"TaskStepView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\n\nexport const TERMINAL_STATUSES = new Set([\"finished\", \"stopped\"]);\n\n/** Task result with typed output. All TaskView fields are directly accessible. */\nexport type TaskResult<T = string | null> = Omit<TaskView, \"output\"> & { output: T };\n\nexport interface RunOptions {\n /** Maximum time to wait in milliseconds. Default: 300_000 (5 min). */\n timeout?: number;\n /** Polling interval in milliseconds. Default: 2_000. */\n interval?: number;\n}\n\n/**\n * Lazy task handle returned by `client.run()`.\n *\n * - `await client.run(...)` polls the lightweight status endpoint, returns a `TaskResult`.\n * - `for await (const step of client.run(...))` polls the full task, yields new steps.\n */\nexport class TaskRun<T = string> implements PromiseLike<TaskResult<T>> {\n private readonly _createPromise: Promise<TaskCreatedResponse>;\n private readonly _tasks: Tasks;\n private readonly _schema?: z.ZodType<T>;\n private readonly _timeout: number;\n private readonly _interval: number;\n\n private _taskId: string | null = null;\n private _result: TaskResult<T> | null = null;\n\n constructor(\n createPromise: Promise<TaskCreatedResponse>,\n tasks: Tasks,\n schema?: z.ZodType<T>,\n options?: RunOptions,\n ) {\n this._createPromise = createPromise;\n this._tasks = tasks;\n this._schema = schema;\n this._timeout = options?.timeout ?? 300_000;\n this._interval = options?.interval ?? 2_000;\n }\n\n /** Task ID (available after creation resolves). */\n get taskId(): string | null {\n return this._taskId;\n }\n\n /** Full task result (available after awaiting or iterating to completion). */\n get result(): TaskResult<T> | null {\n return this._result;\n }\n\n /** Enable `await client.run(...)` — polls status endpoint, returns TaskResult. */\n then<R1 = TaskResult<T>, R2 = never>(\n onFulfilled?: ((value: TaskResult<T>) => R1 | PromiseLike<R1>) | null,\n onRejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this._waitForOutput().then(onFulfilled, onRejected);\n }\n\n /** Enable `for await (const step of client.run(...))` — polls full task, yields new steps. */\n async *[Symbol.asyncIterator](): AsyncGenerator<TaskStepView> {\n const taskId = await this._ensureTaskId();\n let seen = 0;\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const task = await this._tasks.get(taskId);\n\n for (let i = seen; i < task.steps.length; i++) {\n yield task.steps[i];\n }\n seen = task.steps.length;\n\n if (TERMINAL_STATUSES.has(task.status)) {\n this._result = this._buildResult(task);\n return;\n }\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private async _ensureTaskId(): Promise<string> {\n if (this._taskId) return this._taskId;\n const created = await this._createPromise;\n this._taskId = created.id;\n return this._taskId;\n }\n\n /** Poll lightweight status endpoint until terminal, return TaskResult. */\n private async _waitForOutput(): Promise<TaskResult<T>> {\n const taskId = await this._ensureTaskId();\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const status = await this._tasks.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n const task = await this._tasks.get(taskId);\n this._result = this._buildResult(task);\n return this._result;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private _buildResult(task: TaskView): TaskResult<T> {\n const output = this._parseOutput(task.output);\n return { ...task, output };\n }\n\n private _parseOutput(output: string | null | undefined): T {\n if (output == null) return null as T;\n if (!this._schema) return output as unknown as T;\n return this._schema.parse(JSON.parse(output));\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\nimport { TERMINAL_STATUSES } from \"../helpers.js\";\n\n/** User-facing body: only `task` is required; everything else has API defaults. */\nexport type CreateTaskBody = Pick<components[\"schemas\"][\"CreateTaskRequest\"], \"task\"> &\n Partial<Omit<components[\"schemas\"][\"CreateTaskRequest\"], \"task\">>;\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskListResponse = components[\"schemas\"][\"TaskListResponse\"];\ntype TaskLogFileResponse = components[\"schemas\"][\"TaskLogFileResponse\"];\ntype TaskStatusView = components[\"schemas\"][\"TaskStatusView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\ntype UpdateTaskRequest = components[\"schemas\"][\"UpdateTaskRequest\"];\n\nexport interface TaskListParams {\n pageSize?: number;\n pageNumber?: number;\n sessionId?: string;\n filterBy?: string;\n after?: string;\n before?: string;\n}\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** Create and start a new AI agent task. */\n create(body: CreateTaskBody): Promise<TaskCreatedResponse> {\n return this.http.post<TaskCreatedResponse>(\"/tasks\", body);\n }\n\n /** List tasks with optional filtering. */\n list(params?: TaskListParams): Promise<TaskListResponse> {\n return this.http.get<TaskListResponse>(\"/tasks\", params as Record<string, unknown>);\n }\n\n /** Get detailed task information. */\n get(taskId: string): Promise<TaskView> {\n return this.http.get<TaskView>(`/tasks/${taskId}`);\n }\n\n /** Update a task (generic PATCH). */\n update(taskId: string, body: UpdateTaskRequest): Promise<TaskView> {\n return this.http.patch<TaskView>(`/tasks/${taskId}`, body);\n }\n\n /** Stop a running task. */\n stop(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop\" });\n }\n\n /** Stop a running task and its associated browser session. */\n stopTaskAndSession(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop_task_and_session\" });\n }\n\n /** Get lightweight task status (optimized for polling). */\n status(taskId: string): Promise<TaskStatusView> {\n return this.http.get<TaskStatusView>(`/tasks/${taskId}/status`);\n }\n\n /** Get secure download URL for task execution logs. */\n logs(taskId: string): Promise<TaskLogFileResponse> {\n return this.http.get<TaskLogFileResponse>(`/tasks/${taskId}/logs`);\n }\n\n /** Poll until a task reaches a terminal status, then return the full TaskView. */\n async wait(taskId: string, opts?: { timeout?: number; interval?: number }): Promise<TaskView> {\n const timeout = opts?.timeout ?? 300_000;\n const interval = opts?.interval ?? 2_000;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n const status = await this.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n return this.get(taskId);\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${timeout}ms`);\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { H as HttpClient } from './errors-
|
|
3
|
-
export { B as BrowserUseError } from './errors-
|
|
2
|
+
import { H as HttpClient, X as X402Client } from './errors-DaHgFhIQ.cjs';
|
|
3
|
+
export { B as BrowserUseError } from './errors-DaHgFhIQ.cjs';
|
|
4
4
|
|
|
5
5
|
interface components {
|
|
6
6
|
schemas: {
|
|
@@ -2486,6 +2486,10 @@ interface BrowserUseOptions {
|
|
|
2486
2486
|
baseUrl?: string;
|
|
2487
2487
|
maxRetries?: number;
|
|
2488
2488
|
timeout?: number;
|
|
2489
|
+
/** Pre-built x402 client for pay-per-request authentication. */
|
|
2490
|
+
x402?: X402Client;
|
|
2491
|
+
/** EVM wallet private key for x402 mode (also reads `BROWSER_USE_X402_PRIVATE_KEY`). */
|
|
2492
|
+
x402PrivateKey?: string;
|
|
2489
2493
|
}
|
|
2490
2494
|
type RunTaskOptions = Partial<Omit<CreateTaskBody, "task">> & RunOptions & {
|
|
2491
2495
|
schema?: z.ZodType;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { H as HttpClient } from './errors-
|
|
3
|
-
export { B as BrowserUseError } from './errors-
|
|
2
|
+
import { H as HttpClient, X as X402Client } from './errors-DaHgFhIQ.js';
|
|
3
|
+
export { B as BrowserUseError } from './errors-DaHgFhIQ.js';
|
|
4
4
|
|
|
5
5
|
interface components {
|
|
6
6
|
schemas: {
|
|
@@ -2486,6 +2486,10 @@ interface BrowserUseOptions {
|
|
|
2486
2486
|
baseUrl?: string;
|
|
2487
2487
|
maxRetries?: number;
|
|
2488
2488
|
timeout?: number;
|
|
2489
|
+
/** Pre-built x402 client for pay-per-request authentication. */
|
|
2490
|
+
x402?: X402Client;
|
|
2491
|
+
/** EVM wallet private key for x402 mode (also reads `BROWSER_USE_X402_PRIVATE_KEY`). */
|
|
2492
|
+
x402PrivateKey?: string;
|
|
2489
2493
|
}
|
|
2490
2494
|
type RunTaskOptions = Partial<Omit<CreateTaskBody, "task">> & RunOptions & {
|
|
2491
2495
|
schema?: z.ZodType;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BrowserUseError,
|
|
3
|
-
HttpClient
|
|
4
|
-
|
|
3
|
+
HttpClient,
|
|
4
|
+
X402_BASE_URL_DEFAULT_V2,
|
|
5
|
+
wrapFetchWithX402,
|
|
6
|
+
x402ClientFromPrivateKey
|
|
7
|
+
} from "./chunk-ESJIWN3M.js";
|
|
5
8
|
|
|
6
9
|
// src/v2/client.ts
|
|
7
10
|
import { z } from "zod";
|
|
@@ -398,18 +401,36 @@ var BrowserUse = class {
|
|
|
398
401
|
marketplace;
|
|
399
402
|
http;
|
|
400
403
|
constructor(options = {}) {
|
|
401
|
-
const
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
404
|
+
const x402PrivateKey = options.x402PrivateKey ?? process.env.BROWSER_USE_X402_PRIVATE_KEY;
|
|
405
|
+
if (options.x402 || x402PrivateKey) {
|
|
406
|
+
const topupKey = options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? "";
|
|
407
|
+
const fetchPromise = (async () => {
|
|
408
|
+
const x402Client = options.x402 ?? await x402ClientFromPrivateKey(x402PrivateKey);
|
|
409
|
+
return wrapFetchWithX402(globalThis.fetch, x402Client);
|
|
410
|
+
})();
|
|
411
|
+
fetchPromise.catch(() => {
|
|
412
|
+
});
|
|
413
|
+
this.http = new HttpClient({
|
|
414
|
+
apiKey: topupKey,
|
|
415
|
+
baseUrl: options.baseUrl ?? X402_BASE_URL_DEFAULT_V2,
|
|
416
|
+
maxRetries: options.maxRetries,
|
|
417
|
+
timeout: options.timeout,
|
|
418
|
+
fetch: fetchPromise
|
|
419
|
+
});
|
|
420
|
+
} else {
|
|
421
|
+
const apiKey = options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? "";
|
|
422
|
+
if (!apiKey) {
|
|
423
|
+
throw new Error(
|
|
424
|
+
"No credentials provided. Pass apiKey / set BROWSER_USE_API_KEY, or pass x402PrivateKey / set BROWSER_USE_X402_PRIVATE_KEY for pay-per-request access via USDC."
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
this.http = new HttpClient({
|
|
428
|
+
apiKey,
|
|
429
|
+
baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,
|
|
430
|
+
maxRetries: options.maxRetries,
|
|
431
|
+
timeout: options.timeout
|
|
432
|
+
});
|
|
406
433
|
}
|
|
407
|
-
this.http = new HttpClient({
|
|
408
|
-
apiKey,
|
|
409
|
-
baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,
|
|
410
|
-
maxRetries: options.maxRetries,
|
|
411
|
-
timeout: options.timeout
|
|
412
|
-
});
|
|
413
434
|
this.billing = new Billing(this.http);
|
|
414
435
|
this.tasks = new Tasks(this.http);
|
|
415
436
|
this.sessions = new Sessions(this.http);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/client.ts","../src/v2/resources/billing.ts","../src/v2/resources/browsers.ts","../src/v2/resources/files.ts","../src/v2/resources/marketplace.ts","../src/v2/resources/profiles.ts","../src/v2/resources/sessions.ts","../src/v2/resources/skills.ts","../src/v2/helpers.ts","../src/v2/resources/tasks.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { HttpClient } from \"../core/http.js\";\nimport { Billing } from \"./resources/billing.js\";\nimport { Browsers } from \"./resources/browsers.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Marketplace } from \"./resources/marketplace.js\";\nimport { Profiles } from \"./resources/profiles.js\";\nimport { Sessions } from \"./resources/sessions.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { TaskRun } from \"./helpers.js\";\nimport type { CreateTaskBody } from \"./resources/tasks.js\";\nimport type { RunOptions } from \"./helpers.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.browser-use.com/api/v2\";\n\nexport interface BrowserUseOptions {\n apiKey?: string;\n baseUrl?: string;\n maxRetries?: number;\n timeout?: number;\n}\n\nexport type RunTaskOptions = Partial<Omit<CreateTaskBody, \"task\">> &\n RunOptions & { schema?: z.ZodType };\n\nexport class BrowserUse {\n readonly billing: Billing;\n readonly tasks: Tasks;\n readonly sessions: Sessions;\n readonly files: Files;\n readonly profiles: Profiles;\n readonly browsers: Browsers;\n readonly skills: Skills;\n readonly marketplace: Marketplace;\n\n private readonly http: HttpClient;\n\n constructor(options: BrowserUseOptions = {}) {\n const apiKey =\n options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n if (!apiKey) {\n throw new Error(\n \"No API key provided. Pass apiKey or set BROWSER_USE_API_KEY.\",\n );\n }\n this.http = new HttpClient({\n apiKey,\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n });\n\n this.billing = new Billing(this.http);\n this.tasks = new Tasks(this.http);\n this.sessions = new Sessions(this.http);\n this.files = new Files(this.http);\n this.profiles = new Profiles(this.http);\n this.browsers = new Browsers(this.http);\n this.skills = new Skills(this.http);\n this.marketplace = new Marketplace(this.http);\n }\n\n /**\n * Run an AI agent task.\n *\n * ```ts\n * // Simple — just get the output\n * const output = await client.run(\"Find the top HN post\");\n *\n * // Structured output (Zod)\n * const data = await client.run(\"Find product info\", { schema: ProductSchema });\n *\n * // Step-by-step progress\n * for await (const step of client.run(\"Go to google.com\")) {\n * console.log(`[${step.number}] ${step.nextGoal}`);\n * }\n * ```\n */\n run(task: string, options?: Omit<RunTaskOptions, \"schema\">): TaskRun<string>;\n run<T extends z.ZodType>(task: string, options: RunTaskOptions & { schema: T }): TaskRun<z.output<T>>;\n run(task: string, options?: RunTaskOptions): TaskRun<any> {\n const { schema, timeout, interval, ...rest } = options ?? {};\n const body: CreateTaskBody = { task, ...rest };\n if (schema) {\n body.structuredOutput = JSON.stringify(z.toJSONSchema(schema));\n }\n const promise = this.tasks.create(body);\n return new TaskRun(promise, this.tasks, schema, { timeout, interval });\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype AccountView = components[\"schemas\"][\"AccountView\"];\n\nexport class Billing {\n constructor(private readonly http: HttpClient) {}\n\n /** Get authenticated account billing information including credit balance. */\n account(): Promise<AccountView> {\n return this.http.get<AccountView>(\"/billing/account\");\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** All fields are optional (server applies defaults); body itself is required by the spec. */\nexport type CreateBrowserBody = Partial<components[\"schemas\"][\"CreateBrowserSessionRequest\"]>;\ntype BrowserSessionItemView = components[\"schemas\"][\"BrowserSessionItemView\"];\ntype BrowserSessionListResponse = components[\"schemas\"][\"BrowserSessionListResponse\"];\ntype BrowserSessionView = components[\"schemas\"][\"BrowserSessionView\"];\ntype UpdateBrowserSessionRequest = components[\"schemas\"][\"UpdateBrowserSessionRequest\"];\ntype BrowserDownloadListResponse = components[\"schemas\"][\"BrowserDownloadListResponse\"];\n\nexport interface BrowserListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport interface BrowserDownloadsParams {\n limit?: number;\n cursor?: string;\n includeUrls?: boolean;\n}\n\nexport class Browsers {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser session. */\n create(body: CreateBrowserBody = {}): Promise<BrowserSessionItemView> {\n if (body.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<BrowserSessionItemView>(\"/browsers\", body);\n }\n\n /** List browser sessions with optional filtering. */\n list(params?: BrowserListParams): Promise<BrowserSessionListResponse> {\n return this.http.get<BrowserSessionListResponse>(\n \"/browsers\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get detailed browser session information. */\n get(sessionId: string): Promise<BrowserSessionView> {\n return this.http.get<BrowserSessionView>(`/browsers/${sessionId}`);\n }\n\n /** Update a browser session (generic PATCH). */\n update(sessionId: string, body: UpdateBrowserSessionRequest): Promise<BrowserSessionView> {\n return this.http.patch<BrowserSessionView>(`/browsers/${sessionId}`, body);\n }\n\n /** Stop a browser session. */\n stop(sessionId: string): Promise<BrowserSessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** List files the browser downloaded to S3 during the session. */\n downloads(sessionId: string, params?: BrowserDownloadsParams): Promise<BrowserDownloadListResponse> {\n return this.http.get<BrowserDownloadListResponse>(\n `/browsers/${sessionId}/downloads`,\n params as Record<string, unknown>,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype UploadFileRequest = components[\"schemas\"][\"UploadFileRequest\"];\ntype UploadFilePresignedUrlResponse = components[\"schemas\"][\"UploadFilePresignedUrlResponse\"];\ntype TaskOutputFileResponse = components[\"schemas\"][\"TaskOutputFileResponse\"];\n\nexport class Files {\n constructor(private readonly http: HttpClient) {}\n\n /** Generate a presigned URL for uploading files to an agent session. */\n sessionUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/sessions/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Generate a presigned URL for uploading files to a browser session. */\n browserUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/browsers/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Get secure download URL for a task output file. */\n taskOutput(taskId: string, fileId: string): Promise<TaskOutputFileResponse> {\n return this.http.get<TaskOutputFileResponse>(\n `/files/tasks/${taskId}/output-files/${fileId}`,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype MarketplaceSkillListResponse = components[\"schemas\"][\"MarketplaceSkillListResponse\"];\ntype MarketplaceSkillResponse = components[\"schemas\"][\"MarketplaceSkillResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\n\nexport interface MarketplaceListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n category?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport class Marketplace {\n constructor(private readonly http: HttpClient) {}\n\n /** List all public skills in the marketplace. */\n list(params?: MarketplaceListParams): Promise<MarketplaceSkillListResponse> {\n return this.http.get<MarketplaceSkillListResponse>(\n \"/marketplace/skills\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get details of a specific marketplace skill by slug. */\n get(skillSlug: string): Promise<MarketplaceSkillResponse> {\n return this.http.get<MarketplaceSkillResponse>(`/marketplace/skills/${skillSlug}`);\n }\n\n /** Clone a public marketplace skill to your project. */\n clone(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/marketplace/skills/${skillId}/clone`);\n }\n\n /** Execute a marketplace skill. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(\n `/marketplace/skills/${skillId}/execute`,\n body,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ProfileCreateRequest = components[\"schemas\"][\"ProfileCreateRequest\"];\ntype ProfileListResponse = components[\"schemas\"][\"ProfileListResponse\"];\ntype ProfileUpdateRequest = components[\"schemas\"][\"ProfileUpdateRequest\"];\ntype ProfileView = components[\"schemas\"][\"ProfileView\"];\n\nexport interface ProfileListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n}\n\nexport class Profiles {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser profile. */\n create(body?: ProfileCreateRequest): Promise<ProfileView> {\n return this.http.post<ProfileView>(\"/profiles\", body);\n }\n\n /** List profiles with pagination. */\n list(params?: ProfileListParams): Promise<ProfileListResponse> {\n return this.http.get<ProfileListResponse>(\"/profiles\", params as Record<string, unknown>);\n }\n\n /** Get profile details. */\n get(profileId: string): Promise<ProfileView> {\n return this.http.get<ProfileView>(`/profiles/${profileId}`);\n }\n\n /** Update a browser profile. */\n update(profileId: string, body: ProfileUpdateRequest): Promise<ProfileView> {\n return this.http.patch<ProfileView>(`/profiles/${profileId}`, body);\n }\n\n /** Delete a browser profile. */\n delete(profileId: string): Promise<void> {\n return this.http.delete<void>(`/profiles/${profileId}`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** User-facing body: all fields are optional (API has defaults). */\ntype CreateSessionBody = Partial<components[\"schemas\"][\"CreateSessionRequest\"]>;\ntype SessionItemView = components[\"schemas\"][\"SessionItemView\"];\ntype SessionListResponse = components[\"schemas\"][\"SessionListResponse\"];\ntype SessionView = components[\"schemas\"][\"SessionView\"];\ntype ShareView = components[\"schemas\"][\"ShareView\"];\ntype UpdateSessionRequest = components[\"schemas\"][\"UpdateSessionRequest\"];\n\nexport interface SessionListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport class Sessions {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new session. */\n create(body?: CreateSessionBody): Promise<SessionItemView> {\n if (body?.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<SessionItemView>(\"/sessions\", body);\n }\n\n /** List sessions with optional filtering. */\n list(params?: SessionListParams): Promise<SessionListResponse> {\n return this.http.get<SessionListResponse>(\"/sessions\", params as Record<string, unknown>);\n }\n\n /** Get detailed session information. */\n get(sessionId: string): Promise<SessionView> {\n return this.http.get<SessionView>(`/sessions/${sessionId}`);\n }\n\n /** Update a session (generic PATCH). */\n update(sessionId: string, body: UpdateSessionRequest): Promise<SessionView> {\n return this.http.patch<SessionView>(`/sessions/${sessionId}`, body);\n }\n\n /** Stop a session and all its running tasks. */\n stop(sessionId: string): Promise<SessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** Delete a session with all its tasks. */\n delete(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}`);\n }\n\n /** Get public share information for a session. */\n getShare(sessionId: string): Promise<ShareView> {\n return this.http.get<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Create or return existing public share for a session. */\n createShare(sessionId: string): Promise<ShareView> {\n return this.http.post<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Remove public share for a session. */\n deleteShare(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Purge all session data (ZDR projects only). */\n purge(sessionId: string): Promise<void> {\n return this.http.post<void>(`/sessions/${sessionId}/purge`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype CreateSkillRequest = components[\"schemas\"][\"CreateSkillRequest\"];\ntype CreateSkillResponse = components[\"schemas\"][\"CreateSkillResponse\"];\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype RefineSkillRequest = components[\"schemas\"][\"RefineSkillRequest\"];\ntype RefineSkillResponse = components[\"schemas\"][\"RefineSkillResponse\"];\ntype SkillExecutionListResponse = components[\"schemas\"][\"SkillExecutionListResponse\"];\ntype SkillExecutionOutputResponse = components[\"schemas\"][\"SkillExecutionOutputResponse\"];\ntype SkillListResponse = components[\"schemas\"][\"SkillListResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\ntype UpdateSkillRequest = components[\"schemas\"][\"UpdateSkillRequest\"];\n\nexport interface SkillListParams {\n pageSize?: number;\n pageNumber?: number;\n isPublic?: boolean;\n isEnabled?: boolean;\n category?: string;\n query?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport interface SkillExecutionListParams {\n pageSize?: number;\n pageNumber?: number;\n}\n\nexport class Skills {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new skill via automated generation. */\n create(body: CreateSkillRequest): Promise<CreateSkillResponse> {\n return this.http.post<CreateSkillResponse>(\"/skills\", body);\n }\n\n /** List all skills owned by the project. */\n list(params?: SkillListParams): Promise<SkillListResponse> {\n return this.http.get<SkillListResponse>(\"/skills\", params as Record<string, unknown>);\n }\n\n /** Get details of a specific skill. */\n get(skillId: string): Promise<SkillResponse> {\n return this.http.get<SkillResponse>(`/skills/${skillId}`);\n }\n\n /** Delete a skill. */\n delete(skillId: string): Promise<void> {\n return this.http.delete<void>(`/skills/${skillId}`);\n }\n\n /** Update skill metadata. */\n update(skillId: string, body: UpdateSkillRequest): Promise<SkillResponse> {\n return this.http.patch<SkillResponse>(`/skills/${skillId}`, body);\n }\n\n /** Cancel the current in-progress generation for a skill. */\n cancel(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/cancel`);\n }\n\n /** Execute a skill with the provided parameters. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(`/skills/${skillId}/execute`, body);\n }\n\n /** Refine a skill based on feedback. */\n refine(skillId: string, body: RefineSkillRequest): Promise<RefineSkillResponse> {\n return this.http.post<RefineSkillResponse>(`/skills/${skillId}/refine`, body);\n }\n\n /** Rollback to the previous version. */\n rollback(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/rollback`);\n }\n\n /** List executions for a specific skill. */\n executions(skillId: string, params?: SkillExecutionListParams): Promise<SkillExecutionListResponse> {\n return this.http.get<SkillExecutionListResponse>(\n `/skills/${skillId}/executions`,\n params as Record<string, unknown>,\n );\n }\n\n /** Get presigned URL for downloading skill execution output. */\n executionOutput(skillId: string, executionId: string): Promise<SkillExecutionOutputResponse> {\n return this.http.get<SkillExecutionOutputResponse>(\n `/skills/${skillId}/executions/${executionId}/output`,\n );\n }\n}\n","import type { z } from \"zod\";\nimport type { components } from \"../generated/v2/types.js\";\nimport type { Tasks } from \"./resources/tasks.js\";\n\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskStepView = components[\"schemas\"][\"TaskStepView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\n\nexport const TERMINAL_STATUSES = new Set([\"finished\", \"stopped\"]);\n\n/** Task result with typed output. All TaskView fields are directly accessible. */\nexport type TaskResult<T = string | null> = Omit<TaskView, \"output\"> & { output: T };\n\nexport interface RunOptions {\n /** Maximum time to wait in milliseconds. Default: 300_000 (5 min). */\n timeout?: number;\n /** Polling interval in milliseconds. Default: 2_000. */\n interval?: number;\n}\n\n/**\n * Lazy task handle returned by `client.run()`.\n *\n * - `await client.run(...)` polls the lightweight status endpoint, returns a `TaskResult`.\n * - `for await (const step of client.run(...))` polls the full task, yields new steps.\n */\nexport class TaskRun<T = string> implements PromiseLike<TaskResult<T>> {\n private readonly _createPromise: Promise<TaskCreatedResponse>;\n private readonly _tasks: Tasks;\n private readonly _schema?: z.ZodType<T>;\n private readonly _timeout: number;\n private readonly _interval: number;\n\n private _taskId: string | null = null;\n private _result: TaskResult<T> | null = null;\n\n constructor(\n createPromise: Promise<TaskCreatedResponse>,\n tasks: Tasks,\n schema?: z.ZodType<T>,\n options?: RunOptions,\n ) {\n this._createPromise = createPromise;\n this._tasks = tasks;\n this._schema = schema;\n this._timeout = options?.timeout ?? 300_000;\n this._interval = options?.interval ?? 2_000;\n }\n\n /** Task ID (available after creation resolves). */\n get taskId(): string | null {\n return this._taskId;\n }\n\n /** Full task result (available after awaiting or iterating to completion). */\n get result(): TaskResult<T> | null {\n return this._result;\n }\n\n /** Enable `await client.run(...)` — polls status endpoint, returns TaskResult. */\n then<R1 = TaskResult<T>, R2 = never>(\n onFulfilled?: ((value: TaskResult<T>) => R1 | PromiseLike<R1>) | null,\n onRejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this._waitForOutput().then(onFulfilled, onRejected);\n }\n\n /** Enable `for await (const step of client.run(...))` — polls full task, yields new steps. */\n async *[Symbol.asyncIterator](): AsyncGenerator<TaskStepView> {\n const taskId = await this._ensureTaskId();\n let seen = 0;\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const task = await this._tasks.get(taskId);\n\n for (let i = seen; i < task.steps.length; i++) {\n yield task.steps[i];\n }\n seen = task.steps.length;\n\n if (TERMINAL_STATUSES.has(task.status)) {\n this._result = this._buildResult(task);\n return;\n }\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private async _ensureTaskId(): Promise<string> {\n if (this._taskId) return this._taskId;\n const created = await this._createPromise;\n this._taskId = created.id;\n return this._taskId;\n }\n\n /** Poll lightweight status endpoint until terminal, return TaskResult. */\n private async _waitForOutput(): Promise<TaskResult<T>> {\n const taskId = await this._ensureTaskId();\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const status = await this._tasks.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n const task = await this._tasks.get(taskId);\n this._result = this._buildResult(task);\n return this._result;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private _buildResult(task: TaskView): TaskResult<T> {\n const output = this._parseOutput(task.output);\n return { ...task, output };\n }\n\n private _parseOutput(output: string | null | undefined): T {\n if (output == null) return null as T;\n if (!this._schema) return output as unknown as T;\n return this._schema.parse(JSON.parse(output));\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\nimport { TERMINAL_STATUSES } from \"../helpers.js\";\n\n/** User-facing body: only `task` is required; everything else has API defaults. */\nexport type CreateTaskBody = Pick<components[\"schemas\"][\"CreateTaskRequest\"], \"task\"> &\n Partial<Omit<components[\"schemas\"][\"CreateTaskRequest\"], \"task\">>;\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskListResponse = components[\"schemas\"][\"TaskListResponse\"];\ntype TaskLogFileResponse = components[\"schemas\"][\"TaskLogFileResponse\"];\ntype TaskStatusView = components[\"schemas\"][\"TaskStatusView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\ntype UpdateTaskRequest = components[\"schemas\"][\"UpdateTaskRequest\"];\n\nexport interface TaskListParams {\n pageSize?: number;\n pageNumber?: number;\n sessionId?: string;\n filterBy?: string;\n after?: string;\n before?: string;\n}\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** Create and start a new AI agent task. */\n create(body: CreateTaskBody): Promise<TaskCreatedResponse> {\n return this.http.post<TaskCreatedResponse>(\"/tasks\", body);\n }\n\n /** List tasks with optional filtering. */\n list(params?: TaskListParams): Promise<TaskListResponse> {\n return this.http.get<TaskListResponse>(\"/tasks\", params as Record<string, unknown>);\n }\n\n /** Get detailed task information. */\n get(taskId: string): Promise<TaskView> {\n return this.http.get<TaskView>(`/tasks/${taskId}`);\n }\n\n /** Update a task (generic PATCH). */\n update(taskId: string, body: UpdateTaskRequest): Promise<TaskView> {\n return this.http.patch<TaskView>(`/tasks/${taskId}`, body);\n }\n\n /** Stop a running task. */\n stop(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop\" });\n }\n\n /** Stop a running task and its associated browser session. */\n stopTaskAndSession(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop_task_and_session\" });\n }\n\n /** Get lightweight task status (optimized for polling). */\n status(taskId: string): Promise<TaskStatusView> {\n return this.http.get<TaskStatusView>(`/tasks/${taskId}/status`);\n }\n\n /** Get secure download URL for task execution logs. */\n logs(taskId: string): Promise<TaskLogFileResponse> {\n return this.http.get<TaskLogFileResponse>(`/tasks/${taskId}/logs`);\n }\n\n /** Poll until a task reaches a terminal status, then return the full TaskView. */\n async wait(taskId: string, opts?: { timeout?: number; interval?: number }): Promise<TaskView> {\n const timeout = opts?.timeout ?? 300_000;\n const interval = opts?.interval ?? 2_000;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n const status = await this.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n return this.get(taskId);\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${timeout}ms`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/v2/client.ts","../src/v2/resources/billing.ts","../src/v2/resources/browsers.ts","../src/v2/resources/files.ts","../src/v2/resources/marketplace.ts","../src/v2/resources/profiles.ts","../src/v2/resources/sessions.ts","../src/v2/resources/skills.ts","../src/v2/helpers.ts","../src/v2/resources/tasks.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { HttpClient } from \"../core/http.js\";\nimport {\n X402_BASE_URL_DEFAULT_V2,\n type X402Client,\n wrapFetchWithX402,\n x402ClientFromPrivateKey,\n} from \"../core/x402.js\";\nimport { Billing } from \"./resources/billing.js\";\nimport { Browsers } from \"./resources/browsers.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Marketplace } from \"./resources/marketplace.js\";\nimport { Profiles } from \"./resources/profiles.js\";\nimport { Sessions } from \"./resources/sessions.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { TaskRun } from \"./helpers.js\";\nimport type { CreateTaskBody } from \"./resources/tasks.js\";\nimport type { RunOptions } from \"./helpers.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.browser-use.com/api/v2\";\n\nexport interface BrowserUseOptions {\n apiKey?: string;\n baseUrl?: string;\n maxRetries?: number;\n timeout?: number;\n /** Pre-built x402 client for pay-per-request authentication. */\n x402?: X402Client;\n /** EVM wallet private key for x402 mode (also reads `BROWSER_USE_X402_PRIVATE_KEY`). */\n x402PrivateKey?: string;\n}\n\nexport type RunTaskOptions = Partial<Omit<CreateTaskBody, \"task\">> &\n RunOptions & { schema?: z.ZodType };\n\nexport class BrowserUse {\n readonly billing: Billing;\n readonly tasks: Tasks;\n readonly sessions: Sessions;\n readonly files: Files;\n readonly profiles: Profiles;\n readonly browsers: Browsers;\n readonly skills: Skills;\n readonly marketplace: Marketplace;\n\n private readonly http: HttpClient;\n\n constructor(options: BrowserUseOptions = {}) {\n const x402PrivateKey =\n options.x402PrivateKey ?? process.env.BROWSER_USE_X402_PRIVATE_KEY;\n\n if (options.x402 || x402PrivateKey) {\n // Top-up mode: when apiKey is also set, forward it as a header so the\n // backend credits the API key's project instead of one keyed to the wallet.\n const topupKey = options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n const fetchPromise = (async () => {\n const x402Client = options.x402 ?? (await x402ClientFromPrivateKey(x402PrivateKey!));\n return wrapFetchWithX402(globalThis.fetch, x402Client);\n })();\n // Suppress unhandled-rejection warnings if the user constructs the client\n // but never makes a request\n fetchPromise.catch(() => {});\n this.http = new HttpClient({\n apiKey: topupKey,\n baseUrl: options.baseUrl ?? X402_BASE_URL_DEFAULT_V2,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n fetch: fetchPromise,\n });\n } else {\n const apiKey =\n options.apiKey ?? process.env.BROWSER_USE_API_KEY ?? \"\";\n if (!apiKey) {\n throw new Error(\n \"No credentials provided. Pass apiKey / set BROWSER_USE_API_KEY, \" +\n \"or pass x402PrivateKey / set BROWSER_USE_X402_PRIVATE_KEY for \" +\n \"pay-per-request access via USDC.\",\n );\n }\n this.http = new HttpClient({\n apiKey,\n baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n maxRetries: options.maxRetries,\n timeout: options.timeout,\n });\n }\n\n this.billing = new Billing(this.http);\n this.tasks = new Tasks(this.http);\n this.sessions = new Sessions(this.http);\n this.files = new Files(this.http);\n this.profiles = new Profiles(this.http);\n this.browsers = new Browsers(this.http);\n this.skills = new Skills(this.http);\n this.marketplace = new Marketplace(this.http);\n }\n\n /**\n * Run an AI agent task.\n *\n * ```ts\n * // Simple — just get the output\n * const output = await client.run(\"Find the top HN post\");\n *\n * // Structured output (Zod)\n * const data = await client.run(\"Find product info\", { schema: ProductSchema });\n *\n * // Step-by-step progress\n * for await (const step of client.run(\"Go to google.com\")) {\n * console.log(`[${step.number}] ${step.nextGoal}`);\n * }\n * ```\n */\n run(task: string, options?: Omit<RunTaskOptions, \"schema\">): TaskRun<string>;\n run<T extends z.ZodType>(task: string, options: RunTaskOptions & { schema: T }): TaskRun<z.output<T>>;\n run(task: string, options?: RunTaskOptions): TaskRun<any> {\n const { schema, timeout, interval, ...rest } = options ?? {};\n const body: CreateTaskBody = { task, ...rest };\n if (schema) {\n body.structuredOutput = JSON.stringify(z.toJSONSchema(schema));\n }\n const promise = this.tasks.create(body);\n return new TaskRun(promise, this.tasks, schema, { timeout, interval });\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype AccountView = components[\"schemas\"][\"AccountView\"];\n\nexport class Billing {\n constructor(private readonly http: HttpClient) {}\n\n /** Get authenticated account billing information including credit balance. */\n account(): Promise<AccountView> {\n return this.http.get<AccountView>(\"/billing/account\");\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** All fields are optional (server applies defaults); body itself is required by the spec. */\nexport type CreateBrowserBody = Partial<components[\"schemas\"][\"CreateBrowserSessionRequest\"]>;\ntype BrowserSessionItemView = components[\"schemas\"][\"BrowserSessionItemView\"];\ntype BrowserSessionListResponse = components[\"schemas\"][\"BrowserSessionListResponse\"];\ntype BrowserSessionView = components[\"schemas\"][\"BrowserSessionView\"];\ntype UpdateBrowserSessionRequest = components[\"schemas\"][\"UpdateBrowserSessionRequest\"];\ntype BrowserDownloadListResponse = components[\"schemas\"][\"BrowserDownloadListResponse\"];\n\nexport interface BrowserListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport interface BrowserDownloadsParams {\n limit?: number;\n cursor?: string;\n includeUrls?: boolean;\n}\n\nexport class Browsers {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser session. */\n create(body: CreateBrowserBody = {}): Promise<BrowserSessionItemView> {\n if (body.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<BrowserSessionItemView>(\"/browsers\", body);\n }\n\n /** List browser sessions with optional filtering. */\n list(params?: BrowserListParams): Promise<BrowserSessionListResponse> {\n return this.http.get<BrowserSessionListResponse>(\n \"/browsers\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get detailed browser session information. */\n get(sessionId: string): Promise<BrowserSessionView> {\n return this.http.get<BrowserSessionView>(`/browsers/${sessionId}`);\n }\n\n /** Update a browser session (generic PATCH). */\n update(sessionId: string, body: UpdateBrowserSessionRequest): Promise<BrowserSessionView> {\n return this.http.patch<BrowserSessionView>(`/browsers/${sessionId}`, body);\n }\n\n /** Stop a browser session. */\n stop(sessionId: string): Promise<BrowserSessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** List files the browser downloaded to S3 during the session. */\n downloads(sessionId: string, params?: BrowserDownloadsParams): Promise<BrowserDownloadListResponse> {\n return this.http.get<BrowserDownloadListResponse>(\n `/browsers/${sessionId}/downloads`,\n params as Record<string, unknown>,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype UploadFileRequest = components[\"schemas\"][\"UploadFileRequest\"];\ntype UploadFilePresignedUrlResponse = components[\"schemas\"][\"UploadFilePresignedUrlResponse\"];\ntype TaskOutputFileResponse = components[\"schemas\"][\"TaskOutputFileResponse\"];\n\nexport class Files {\n constructor(private readonly http: HttpClient) {}\n\n /** Generate a presigned URL for uploading files to an agent session. */\n sessionUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/sessions/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Generate a presigned URL for uploading files to a browser session. */\n browserUrl(sessionId: string, body: UploadFileRequest): Promise<UploadFilePresignedUrlResponse> {\n return this.http.post<UploadFilePresignedUrlResponse>(\n `/files/browsers/${sessionId}/presigned-url`,\n body,\n );\n }\n\n /** Get secure download URL for a task output file. */\n taskOutput(taskId: string, fileId: string): Promise<TaskOutputFileResponse> {\n return this.http.get<TaskOutputFileResponse>(\n `/files/tasks/${taskId}/output-files/${fileId}`,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype MarketplaceSkillListResponse = components[\"schemas\"][\"MarketplaceSkillListResponse\"];\ntype MarketplaceSkillResponse = components[\"schemas\"][\"MarketplaceSkillResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\n\nexport interface MarketplaceListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n category?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport class Marketplace {\n constructor(private readonly http: HttpClient) {}\n\n /** List all public skills in the marketplace. */\n list(params?: MarketplaceListParams): Promise<MarketplaceSkillListResponse> {\n return this.http.get<MarketplaceSkillListResponse>(\n \"/marketplace/skills\",\n params as Record<string, unknown>,\n );\n }\n\n /** Get details of a specific marketplace skill by slug. */\n get(skillSlug: string): Promise<MarketplaceSkillResponse> {\n return this.http.get<MarketplaceSkillResponse>(`/marketplace/skills/${skillSlug}`);\n }\n\n /** Clone a public marketplace skill to your project. */\n clone(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/marketplace/skills/${skillId}/clone`);\n }\n\n /** Execute a marketplace skill. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(\n `/marketplace/skills/${skillId}/execute`,\n body,\n );\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype ProfileCreateRequest = components[\"schemas\"][\"ProfileCreateRequest\"];\ntype ProfileListResponse = components[\"schemas\"][\"ProfileListResponse\"];\ntype ProfileUpdateRequest = components[\"schemas\"][\"ProfileUpdateRequest\"];\ntype ProfileView = components[\"schemas\"][\"ProfileView\"];\n\nexport interface ProfileListParams {\n pageSize?: number;\n pageNumber?: number;\n query?: string;\n}\n\nexport class Profiles {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new browser profile. */\n create(body?: ProfileCreateRequest): Promise<ProfileView> {\n return this.http.post<ProfileView>(\"/profiles\", body);\n }\n\n /** List profiles with pagination. */\n list(params?: ProfileListParams): Promise<ProfileListResponse> {\n return this.http.get<ProfileListResponse>(\"/profiles\", params as Record<string, unknown>);\n }\n\n /** Get profile details. */\n get(profileId: string): Promise<ProfileView> {\n return this.http.get<ProfileView>(`/profiles/${profileId}`);\n }\n\n /** Update a browser profile. */\n update(profileId: string, body: ProfileUpdateRequest): Promise<ProfileView> {\n return this.http.patch<ProfileView>(`/profiles/${profileId}`, body);\n }\n\n /** Delete a browser profile. */\n delete(profileId: string): Promise<void> {\n return this.http.delete<void>(`/profiles/${profileId}`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\n/** User-facing body: all fields are optional (API has defaults). */\ntype CreateSessionBody = Partial<components[\"schemas\"][\"CreateSessionRequest\"]>;\ntype SessionItemView = components[\"schemas\"][\"SessionItemView\"];\ntype SessionListResponse = components[\"schemas\"][\"SessionListResponse\"];\ntype SessionView = components[\"schemas\"][\"SessionView\"];\ntype ShareView = components[\"schemas\"][\"ShareView\"];\ntype UpdateSessionRequest = components[\"schemas\"][\"UpdateSessionRequest\"];\n\nexport interface SessionListParams {\n pageSize?: number;\n pageNumber?: number;\n filterBy?: string;\n}\n\nexport class Sessions {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new session. */\n create(body?: CreateSessionBody): Promise<SessionItemView> {\n if (body?.proxyCountryCode) {\n body = { ...body, proxyCountryCode: body.proxyCountryCode.toLowerCase() as any };\n }\n return this.http.post<SessionItemView>(\"/sessions\", body);\n }\n\n /** List sessions with optional filtering. */\n list(params?: SessionListParams): Promise<SessionListResponse> {\n return this.http.get<SessionListResponse>(\"/sessions\", params as Record<string, unknown>);\n }\n\n /** Get detailed session information. */\n get(sessionId: string): Promise<SessionView> {\n return this.http.get<SessionView>(`/sessions/${sessionId}`);\n }\n\n /** Update a session (generic PATCH). */\n update(sessionId: string, body: UpdateSessionRequest): Promise<SessionView> {\n return this.http.patch<SessionView>(`/sessions/${sessionId}`, body);\n }\n\n /** Stop a session and all its running tasks. */\n stop(sessionId: string): Promise<SessionView> {\n return this.update(sessionId, { action: \"stop\" });\n }\n\n /** Delete a session with all its tasks. */\n delete(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}`);\n }\n\n /** Get public share information for a session. */\n getShare(sessionId: string): Promise<ShareView> {\n return this.http.get<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Create or return existing public share for a session. */\n createShare(sessionId: string): Promise<ShareView> {\n return this.http.post<ShareView>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Remove public share for a session. */\n deleteShare(sessionId: string): Promise<void> {\n return this.http.delete<void>(`/sessions/${sessionId}/public-share`);\n }\n\n /** Purge all session data (ZDR projects only). */\n purge(sessionId: string): Promise<void> {\n return this.http.post<void>(`/sessions/${sessionId}/purge`);\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\n\ntype CreateSkillRequest = components[\"schemas\"][\"CreateSkillRequest\"];\ntype CreateSkillResponse = components[\"schemas\"][\"CreateSkillResponse\"];\ntype ExecuteSkillRequest = components[\"schemas\"][\"ExecuteSkillRequest\"];\ntype ExecuteSkillResponse = components[\"schemas\"][\"ExecuteSkillResponse\"];\ntype RefineSkillRequest = components[\"schemas\"][\"RefineSkillRequest\"];\ntype RefineSkillResponse = components[\"schemas\"][\"RefineSkillResponse\"];\ntype SkillExecutionListResponse = components[\"schemas\"][\"SkillExecutionListResponse\"];\ntype SkillExecutionOutputResponse = components[\"schemas\"][\"SkillExecutionOutputResponse\"];\ntype SkillListResponse = components[\"schemas\"][\"SkillListResponse\"];\ntype SkillResponse = components[\"schemas\"][\"SkillResponse\"];\ntype UpdateSkillRequest = components[\"schemas\"][\"UpdateSkillRequest\"];\n\nexport interface SkillListParams {\n pageSize?: number;\n pageNumber?: number;\n isPublic?: boolean;\n isEnabled?: boolean;\n category?: string;\n query?: string;\n fromDate?: string;\n toDate?: string;\n}\n\nexport interface SkillExecutionListParams {\n pageSize?: number;\n pageNumber?: number;\n}\n\nexport class Skills {\n constructor(private readonly http: HttpClient) {}\n\n /** Create a new skill via automated generation. */\n create(body: CreateSkillRequest): Promise<CreateSkillResponse> {\n return this.http.post<CreateSkillResponse>(\"/skills\", body);\n }\n\n /** List all skills owned by the project. */\n list(params?: SkillListParams): Promise<SkillListResponse> {\n return this.http.get<SkillListResponse>(\"/skills\", params as Record<string, unknown>);\n }\n\n /** Get details of a specific skill. */\n get(skillId: string): Promise<SkillResponse> {\n return this.http.get<SkillResponse>(`/skills/${skillId}`);\n }\n\n /** Delete a skill. */\n delete(skillId: string): Promise<void> {\n return this.http.delete<void>(`/skills/${skillId}`);\n }\n\n /** Update skill metadata. */\n update(skillId: string, body: UpdateSkillRequest): Promise<SkillResponse> {\n return this.http.patch<SkillResponse>(`/skills/${skillId}`, body);\n }\n\n /** Cancel the current in-progress generation for a skill. */\n cancel(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/cancel`);\n }\n\n /** Execute a skill with the provided parameters. */\n execute(skillId: string, body: ExecuteSkillRequest): Promise<ExecuteSkillResponse> {\n return this.http.post<ExecuteSkillResponse>(`/skills/${skillId}/execute`, body);\n }\n\n /** Refine a skill based on feedback. */\n refine(skillId: string, body: RefineSkillRequest): Promise<RefineSkillResponse> {\n return this.http.post<RefineSkillResponse>(`/skills/${skillId}/refine`, body);\n }\n\n /** Rollback to the previous version. */\n rollback(skillId: string): Promise<SkillResponse> {\n return this.http.post<SkillResponse>(`/skills/${skillId}/rollback`);\n }\n\n /** List executions for a specific skill. */\n executions(skillId: string, params?: SkillExecutionListParams): Promise<SkillExecutionListResponse> {\n return this.http.get<SkillExecutionListResponse>(\n `/skills/${skillId}/executions`,\n params as Record<string, unknown>,\n );\n }\n\n /** Get presigned URL for downloading skill execution output. */\n executionOutput(skillId: string, executionId: string): Promise<SkillExecutionOutputResponse> {\n return this.http.get<SkillExecutionOutputResponse>(\n `/skills/${skillId}/executions/${executionId}/output`,\n );\n }\n}\n","import type { z } from \"zod\";\nimport type { components } from \"../generated/v2/types.js\";\nimport type { Tasks } from \"./resources/tasks.js\";\n\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskStepView = components[\"schemas\"][\"TaskStepView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\n\nexport const TERMINAL_STATUSES = new Set([\"finished\", \"stopped\"]);\n\n/** Task result with typed output. All TaskView fields are directly accessible. */\nexport type TaskResult<T = string | null> = Omit<TaskView, \"output\"> & { output: T };\n\nexport interface RunOptions {\n /** Maximum time to wait in milliseconds. Default: 300_000 (5 min). */\n timeout?: number;\n /** Polling interval in milliseconds. Default: 2_000. */\n interval?: number;\n}\n\n/**\n * Lazy task handle returned by `client.run()`.\n *\n * - `await client.run(...)` polls the lightweight status endpoint, returns a `TaskResult`.\n * - `for await (const step of client.run(...))` polls the full task, yields new steps.\n */\nexport class TaskRun<T = string> implements PromiseLike<TaskResult<T>> {\n private readonly _createPromise: Promise<TaskCreatedResponse>;\n private readonly _tasks: Tasks;\n private readonly _schema?: z.ZodType<T>;\n private readonly _timeout: number;\n private readonly _interval: number;\n\n private _taskId: string | null = null;\n private _result: TaskResult<T> | null = null;\n\n constructor(\n createPromise: Promise<TaskCreatedResponse>,\n tasks: Tasks,\n schema?: z.ZodType<T>,\n options?: RunOptions,\n ) {\n this._createPromise = createPromise;\n this._tasks = tasks;\n this._schema = schema;\n this._timeout = options?.timeout ?? 300_000;\n this._interval = options?.interval ?? 2_000;\n }\n\n /** Task ID (available after creation resolves). */\n get taskId(): string | null {\n return this._taskId;\n }\n\n /** Full task result (available after awaiting or iterating to completion). */\n get result(): TaskResult<T> | null {\n return this._result;\n }\n\n /** Enable `await client.run(...)` — polls status endpoint, returns TaskResult. */\n then<R1 = TaskResult<T>, R2 = never>(\n onFulfilled?: ((value: TaskResult<T>) => R1 | PromiseLike<R1>) | null,\n onRejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this._waitForOutput().then(onFulfilled, onRejected);\n }\n\n /** Enable `for await (const step of client.run(...))` — polls full task, yields new steps. */\n async *[Symbol.asyncIterator](): AsyncGenerator<TaskStepView> {\n const taskId = await this._ensureTaskId();\n let seen = 0;\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const task = await this._tasks.get(taskId);\n\n for (let i = seen; i < task.steps.length; i++) {\n yield task.steps[i];\n }\n seen = task.steps.length;\n\n if (TERMINAL_STATUSES.has(task.status)) {\n this._result = this._buildResult(task);\n return;\n }\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private async _ensureTaskId(): Promise<string> {\n if (this._taskId) return this._taskId;\n const created = await this._createPromise;\n this._taskId = created.id;\n return this._taskId;\n }\n\n /** Poll lightweight status endpoint until terminal, return TaskResult. */\n private async _waitForOutput(): Promise<TaskResult<T>> {\n const taskId = await this._ensureTaskId();\n const deadline = Date.now() + this._timeout;\n\n while (Date.now() < deadline) {\n const status = await this._tasks.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n const task = await this._tasks.get(taskId);\n this._result = this._buildResult(task);\n return this._result;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(this._interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${this._timeout}ms`);\n }\n\n private _buildResult(task: TaskView): TaskResult<T> {\n const output = this._parseOutput(task.output);\n return { ...task, output };\n }\n\n private _parseOutput(output: string | null | undefined): T {\n if (output == null) return null as T;\n if (!this._schema) return output as unknown as T;\n return this._schema.parse(JSON.parse(output));\n }\n}\n","import type { HttpClient } from \"../../core/http.js\";\nimport type { components } from \"../../generated/v2/types.js\";\nimport { TERMINAL_STATUSES } from \"../helpers.js\";\n\n/** User-facing body: only `task` is required; everything else has API defaults. */\nexport type CreateTaskBody = Pick<components[\"schemas\"][\"CreateTaskRequest\"], \"task\"> &\n Partial<Omit<components[\"schemas\"][\"CreateTaskRequest\"], \"task\">>;\ntype TaskCreatedResponse = components[\"schemas\"][\"TaskCreatedResponse\"];\ntype TaskListResponse = components[\"schemas\"][\"TaskListResponse\"];\ntype TaskLogFileResponse = components[\"schemas\"][\"TaskLogFileResponse\"];\ntype TaskStatusView = components[\"schemas\"][\"TaskStatusView\"];\ntype TaskView = components[\"schemas\"][\"TaskView\"];\ntype UpdateTaskRequest = components[\"schemas\"][\"UpdateTaskRequest\"];\n\nexport interface TaskListParams {\n pageSize?: number;\n pageNumber?: number;\n sessionId?: string;\n filterBy?: string;\n after?: string;\n before?: string;\n}\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** Create and start a new AI agent task. */\n create(body: CreateTaskBody): Promise<TaskCreatedResponse> {\n return this.http.post<TaskCreatedResponse>(\"/tasks\", body);\n }\n\n /** List tasks with optional filtering. */\n list(params?: TaskListParams): Promise<TaskListResponse> {\n return this.http.get<TaskListResponse>(\"/tasks\", params as Record<string, unknown>);\n }\n\n /** Get detailed task information. */\n get(taskId: string): Promise<TaskView> {\n return this.http.get<TaskView>(`/tasks/${taskId}`);\n }\n\n /** Update a task (generic PATCH). */\n update(taskId: string, body: UpdateTaskRequest): Promise<TaskView> {\n return this.http.patch<TaskView>(`/tasks/${taskId}`, body);\n }\n\n /** Stop a running task. */\n stop(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop\" });\n }\n\n /** Stop a running task and its associated browser session. */\n stopTaskAndSession(taskId: string): Promise<TaskView> {\n return this.update(taskId, { action: \"stop_task_and_session\" });\n }\n\n /** Get lightweight task status (optimized for polling). */\n status(taskId: string): Promise<TaskStatusView> {\n return this.http.get<TaskStatusView>(`/tasks/${taskId}/status`);\n }\n\n /** Get secure download URL for task execution logs. */\n logs(taskId: string): Promise<TaskLogFileResponse> {\n return this.http.get<TaskLogFileResponse>(`/tasks/${taskId}/logs`);\n }\n\n /** Poll until a task reaches a terminal status, then return the full TaskView. */\n async wait(taskId: string, opts?: { timeout?: number; interval?: number }): Promise<TaskView> {\n const timeout = opts?.timeout ?? 300_000;\n const interval = opts?.interval ?? 2_000;\n const deadline = Date.now() + timeout;\n\n while (Date.now() < deadline) {\n const status = await this.status(taskId);\n if (TERMINAL_STATUSES.has(status.status)) {\n return this.get(taskId);\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await new Promise((r) => setTimeout(r, Math.min(interval, remaining)));\n }\n\n throw new Error(`Task ${taskId} did not complete within ${timeout}ms`);\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/v3.cjs
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkQMK4AUMHcjs = require('./chunk-QMK4AUMH.cjs');
|
|
5
9
|
|
|
6
10
|
// src/v3/client.ts
|
|
7
11
|
var _zod = require('zod');
|
|
@@ -80,12 +84,17 @@ var Profiles = class {
|
|
|
80
84
|
|
|
81
85
|
// src/v3/resources/sessions.ts
|
|
82
86
|
var Sessions = class {
|
|
83
|
-
constructor(http) {
|
|
87
|
+
constructor(http, options = {}) {
|
|
84
88
|
this.http = http;
|
|
89
|
+
this.options = options;
|
|
85
90
|
}
|
|
86
91
|
/** Create a session and optionally dispatch a task. */
|
|
87
92
|
create(body) {
|
|
88
|
-
|
|
93
|
+
const requestBody = { ..._nullishCoalesce(body, () => ( {})) };
|
|
94
|
+
if (this.options.useOwnKey !== void 0 && requestBody.useOwnKey === void 0) {
|
|
95
|
+
requestBody.useOwnKey = this.options.useOwnKey;
|
|
96
|
+
}
|
|
97
|
+
return this.http.post("/sessions", requestBody);
|
|
89
98
|
}
|
|
90
99
|
/** List sessions for the authenticated project. */
|
|
91
100
|
list(params) {
|
|
@@ -419,22 +428,40 @@ var BrowserUse = class {
|
|
|
419
428
|
|
|
420
429
|
|
|
421
430
|
constructor(options = {}) {
|
|
422
|
-
const
|
|
423
|
-
if (
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
431
|
+
const x402PrivateKey = _nullishCoalesce(options.x402PrivateKey, () => ( process.env.BROWSER_USE_X402_PRIVATE_KEY));
|
|
432
|
+
if (options.x402 || x402PrivateKey) {
|
|
433
|
+
const topupKey = _nullishCoalesce(_nullishCoalesce(options.apiKey, () => ( process.env.BROWSER_USE_API_KEY)), () => ( ""));
|
|
434
|
+
const fetchPromise = (async () => {
|
|
435
|
+
const x402Client = await _asyncNullishCoalesce(options.x402, async () => ( await _chunkQMK4AUMHcjs.x402ClientFromPrivateKey.call(void 0, x402PrivateKey)));
|
|
436
|
+
return _chunkQMK4AUMHcjs.wrapFetchWithX402.call(void 0, globalThis.fetch, x402Client);
|
|
437
|
+
})();
|
|
438
|
+
fetchPromise.catch(() => {
|
|
439
|
+
});
|
|
440
|
+
this.http = new (0, _chunkQMK4AUMHcjs.HttpClient)({
|
|
441
|
+
apiKey: topupKey,
|
|
442
|
+
baseUrl: _nullishCoalesce(options.baseUrl, () => ( _chunkQMK4AUMHcjs.X402_BASE_URL_DEFAULT)),
|
|
443
|
+
maxRetries: options.maxRetries,
|
|
444
|
+
timeout: options.timeout,
|
|
445
|
+
fetch: fetchPromise
|
|
446
|
+
});
|
|
447
|
+
} else {
|
|
448
|
+
const apiKey = _nullishCoalesce(_nullishCoalesce(options.apiKey, () => ( process.env.BROWSER_USE_API_KEY)), () => ( ""));
|
|
449
|
+
if (!apiKey) {
|
|
450
|
+
throw new Error(
|
|
451
|
+
"No credentials provided. Pass apiKey / set BROWSER_USE_API_KEY, or pass x402PrivateKey / set BROWSER_USE_X402_PRIVATE_KEY for pay-per-request access via USDC."
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
this.http = new (0, _chunkQMK4AUMHcjs.HttpClient)({
|
|
455
|
+
apiKey,
|
|
456
|
+
baseUrl: _nullishCoalesce(options.baseUrl, () => ( DEFAULT_BASE_URL)),
|
|
457
|
+
maxRetries: options.maxRetries,
|
|
458
|
+
timeout: options.timeout
|
|
459
|
+
});
|
|
427
460
|
}
|
|
428
|
-
this.http = new (0, _chunkJT4IL3IZcjs.HttpClient)({
|
|
429
|
-
apiKey,
|
|
430
|
-
baseUrl: _nullishCoalesce(options.baseUrl, () => ( DEFAULT_BASE_URL)),
|
|
431
|
-
maxRetries: options.maxRetries,
|
|
432
|
-
timeout: options.timeout
|
|
433
|
-
});
|
|
434
461
|
this.billing = new Billing(this.http);
|
|
435
462
|
this.browsers = new Browsers(this.http);
|
|
436
463
|
this.profiles = new Profiles(this.http);
|
|
437
|
-
this.sessions = new Sessions(this.http);
|
|
464
|
+
this.sessions = new Sessions(this.http, { useOwnKey: options.useOwnKey });
|
|
438
465
|
this.workspaces = new Workspaces(this.http);
|
|
439
466
|
}
|
|
440
467
|
run(task, options) {
|
|
@@ -483,5 +510,6 @@ var BrowserUse = class {
|
|
|
483
510
|
|
|
484
511
|
|
|
485
512
|
|
|
486
|
-
|
|
513
|
+
|
|
514
|
+
exports.Billing = Billing; exports.BrowserUse = BrowserUse; exports.BrowserUseError = _chunkQMK4AUMHcjs.BrowserUseError; exports.Browsers = Browsers; exports.Profiles = Profiles; exports.SessionRun = SessionRun; exports.Sessions = Sessions; exports.Workspaces = Workspaces; exports.getWalletBalance = _chunkQMK4AUMHcjs.getWalletBalance;
|
|
487
515
|
//# sourceMappingURL=v3.cjs.map
|