@olib-ai/owl-browser-sdk 2.0.7 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/openapi.json +284 -46
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -3,11 +3,11 @@
3
3
  "info": {
4
4
  "title": "Owl Browser API",
5
5
  "description": "REST API for browser automation with anti-detection capabilities",
6
- "version": "1.0.9"
6
+ "version": "1.0.11"
7
7
  },
8
8
  "servers": [
9
9
  {
10
- "url": "http://127.0.0.1:8080",
10
+ "url": "http://localhost",
11
11
  "description": "Current server"
12
12
  }
13
13
  ],
@@ -120,6 +120,82 @@
120
120
  }
121
121
  }
122
122
  },
123
+ "/search": {
124
+ "get": {
125
+ "summary": "Browser Search",
126
+ "description": "One-shot web search tool. Creates a new context, navigates to the search engine, waits for results, extracts structured JSON search results (titles, URLs, snippets), and closes the context. Supports Google and DuckDuckGo with pagination.",
127
+ "tags": [
128
+ "Navigation"
129
+ ],
130
+ "parameters": [
131
+ {
132
+ "name": "query",
133
+ "in": "query",
134
+ "required": true,
135
+ "schema": {
136
+ "type": "string"
137
+ },
138
+ "description": "The search query string (e.g., 'best restaurants in NYC', 'python tutorial')"
139
+ },
140
+ {
141
+ "name": "provider",
142
+ "in": "query",
143
+ "required": false,
144
+ "schema": {
145
+ "type": "string",
146
+ "enum": [
147
+ "duckduckgo",
148
+ "google"
149
+ ]
150
+ },
151
+ "description": "Search engine provider. 'duckduckgo' uses DuckDuckGo HTML-lite, 'google' uses Google Search. Default: duckduckgo"
152
+ },
153
+ {
154
+ "name": "page",
155
+ "in": "query",
156
+ "required": false,
157
+ "schema": {
158
+ "type": "integer"
159
+ },
160
+ "description": "Page number for paginated results (1-based). Default: 1. For Google: appends &start=((page-1)*10). For DuckDuckGo: appends &s=((page-1)*10)"
161
+ },
162
+ {
163
+ "name": "os",
164
+ "in": "query",
165
+ "required": false,
166
+ "schema": {
167
+ "type": "string",
168
+ "enum": [
169
+ "windows",
170
+ "macos",
171
+ "linux"
172
+ ]
173
+ },
174
+ "description": "Filter profiles by operating system. Options: 'windows', 'macos', 'linux'"
175
+ },
176
+ {
177
+ "name": "use_tor",
178
+ "in": "query",
179
+ "required": false,
180
+ "schema": {
181
+ "type": "boolean"
182
+ },
183
+ "description": "Use TOR proxy for anonymous browsing. Each request gets a unique exit IP. Default: false"
184
+ }
185
+ ],
186
+ "responses": {
187
+ "200": {
188
+ "description": "Successful response with structured search results JSON"
189
+ },
190
+ "400": {
191
+ "description": "Bad request"
192
+ },
193
+ "401": {
194
+ "description": "Unauthorized"
195
+ }
196
+ }
197
+ }
198
+ },
123
199
  "/api/execute/browser_create_context": {
124
200
  "post": {
125
201
  "summary": "Browser Create Context",
@@ -134,29 +210,47 @@
134
210
  "schema": {
135
211
  "type": "object",
136
212
  "properties": {
137
- "llm_enabled": {
138
- "type": "boolean",
139
- "description": "Enable or disable LLM features for this context. When enabled, allows using AI-powered tools like browser_query_page, browser_summarize_page, and browser_nla. Default: true"
140
- },
141
- "llm_use_builtin": {
142
- "type": "boolean",
143
- "description": "Use the built-in llama-server for LLM inference. When true, uses the bundled local model. Set to false to use an external LLM provider. Default: true"
213
+ "profile_path": {
214
+ "type": "string",
215
+ "description": "Path to a browser profile JSON file (or upload file via multipart/form-data). If the file exists, loads fingerprints, cookies, and settings. If not, creates a new profile and saves it to this path. Encrypted profiles (from browser_download_profile) are automatically detected and decrypted."
144
216
  },
145
- "llm_endpoint": {
217
+ "os": {
146
218
  "type": "string",
147
- "description": "External LLM API endpoint URL (e.g., 'https://api.openai.com/v1' for OpenAI). Only used when llm_use_builtin is false"
219
+ "description": "Filter profiles by operating system. If set, only profiles matching this OS will be used. Options: 'windows', 'macos', 'linux'",
220
+ "enum": [
221
+ "windows",
222
+ "macos",
223
+ "linux"
224
+ ]
148
225
  },
149
- "llm_model": {
226
+ "gpu": {
150
227
  "type": "string",
151
- "description": "External LLM model name (e.g., 'gpt-4-vision-preview' for OpenAI). Only used when llm_use_builtin is false"
228
+ "description": "Filter profiles by GPU vendor/model. If set, only profiles with matching GPU will be used. Examples: 'nvidia', 'amd', 'intel'"
152
229
  },
153
- "llm_api_key": {
230
+ "screen_size": {
154
231
  "type": "string",
155
- "description": "API key for the external LLM provider. Required when using external LLM endpoint"
232
+ "description": "Screen resolution for the browser context. Format: 'WIDTHxHEIGHT'. If not set, a random screen size is selected from the monitor catalog.",
233
+ "enum": [
234
+ "1920x1080",
235
+ "2560x1440",
236
+ "3440x1440",
237
+ "3840x2160",
238
+ "3840x1600",
239
+ "5120x2160",
240
+ "5120x1440"
241
+ ]
156
242
  },
157
- "profile_path": {
243
+ "timezone": {
158
244
  "type": "string",
159
- "description": "Path to a browser profile JSON file (or upload file via multipart/form-data). If the file exists, loads fingerprints, cookies, and settings. If not, creates a new profile and saves it to this path. Encrypted profiles (from browser_download_profile) are automatically detected and decrypted."
245
+ "description": "Override browser timezone. IANA timezone format (e.g., 'America/New_York', 'Europe/London', 'Asia/Tokyo'). If not set, falls back to: 1) proxy-detected timezone (if proxy configured with spoof_timezone), 2) VM profile timezone, 3) system default. This parameter works without proxy configuration."
246
+ },
247
+ "resource_blocking": {
248
+ "type": "boolean",
249
+ "description": "Enable or disable resource blocking (ads, trackers, analytics). When enabled, blocks requests to known ad networks, trackers, and analytics services. Default: true (enabled)"
250
+ },
251
+ "agent_signature": {
252
+ "type": "boolean",
253
+ "description": "Enable Web Bot Auth (RFC 9421) request signing for this context. When enabled, every outgoing HTTP request is signed with Ed25519 Signature, Signature-Input, and Signature-Agent headers. Requires OWL_WBA_ENABLED=true and OWL_WBA_CONTACTS set. Default: false"
160
254
  },
161
255
  "proxy_type": {
162
256
  "type": "string",
@@ -214,39 +308,25 @@
214
308
  "type": "string",
215
309
  "description": "Password for Tor control port authentication. Leave empty to use cookie authentication (default) or no auth"
216
310
  },
217
- "resource_blocking": {
311
+ "llm_enabled": {
218
312
  "type": "boolean",
219
- "description": "Enable or disable resource blocking (ads, trackers, analytics). When enabled, blocks requests to known ad networks, trackers, and analytics services. Default: true (enabled)"
313
+ "description": "Enable or disable LLM features for this context. When enabled, allows using AI-powered tools like browser_query_page, browser_summarize_page, and browser_nla. Default: true"
220
314
  },
221
- "os": {
222
- "type": "string",
223
- "description": "Filter profiles by operating system. If set, only profiles matching this OS will be used. Options: 'windows', 'macos', 'linux'",
224
- "enum": [
225
- "windows",
226
- "macos",
227
- "linux"
228
- ]
315
+ "llm_use_builtin": {
316
+ "type": "boolean",
317
+ "description": "Use the built-in llama-server for LLM inference. When true, uses the bundled local model. Set to false to use an external LLM provider. Default: true"
229
318
  },
230
- "gpu": {
319
+ "llm_endpoint": {
231
320
  "type": "string",
232
- "description": "Filter profiles by GPU vendor/model. If set, only profiles with matching GPU will be used. Examples: 'nvidia', 'amd', 'intel'"
321
+ "description": "External LLM API endpoint URL (e.g., 'https://api.openai.com/v1' for OpenAI). Only used when llm_use_builtin is false"
233
322
  },
234
- "timezone": {
323
+ "llm_model": {
235
324
  "type": "string",
236
- "description": "Override browser timezone. IANA timezone format (e.g., 'America/New_York', 'Europe/London', 'Asia/Tokyo'). If not set, falls back to: 1) proxy-detected timezone (if proxy configured with spoof_timezone), 2) VM profile timezone, 3) system default. This parameter works without proxy configuration."
325
+ "description": "External LLM model name (e.g., 'gpt-4-vision-preview' for OpenAI). Only used when llm_use_builtin is false"
237
326
  },
238
- "screen_size": {
327
+ "llm_api_key": {
239
328
  "type": "string",
240
- "description": "Screen resolution for the browser context. Format: 'WIDTHxHEIGHT'. If not set, a random screen size is selected from the monitor catalog.",
241
- "enum": [
242
- "1920x1080",
243
- "2560x1440",
244
- "3440x1440",
245
- "3840x2160",
246
- "3840x1600",
247
- "5120x2160",
248
- "5120x1440"
249
- ]
329
+ "description": "API key for the external LLM provider. Required when using external LLM endpoint"
250
330
  }
251
331
  }
252
332
  }
@@ -339,7 +419,7 @@
339
419
  "/api/execute/browser_navigate": {
340
420
  "post": {
341
421
  "summary": "Browser Navigate",
342
- "description": "Navigate the browser to a specified URL. This is a non-blocking operation that starts navigation and returns immediately. Use browser_wait_for_network_idle or browser_wait_for_selector to wait for the page to fully load. Supports HTTP, HTTPS, file, and data URLs.",
422
+ "description": "Navigate the browser to a specified URL. This is a non-blocking operation that starts navigation and returns immediately. Use browser_wait_for_network_idle or browser_wait_for_selector to wait for the page to fully load. Supports HTTP, HTTPS, file, and data URLs. When wait_until is set (load, networkidle, fullscroll, domcontentloaded) and the page declares WebMCP tools, the response includes a webmcp_tools array containing the full tool definitions (name, description, inputSchema). Use browser_webmcp_call_tool to execute any of these tools directly.",
343
423
  "tags": [
344
424
  "General"
345
425
  ],
@@ -2747,7 +2827,7 @@
2747
2827
  },
2748
2828
  "template": {
2749
2829
  "type": "string",
2750
- "description": "Extraction template name for known site types. Available: 'google_search', 'wikipedia', 'amazon_product', 'github_repo', 'twitter_feed', 'reddit_thread'. Leave empty for auto-detection based on URL"
2830
+ "description": "Extraction template name for known site types. Available: 'google_search', 'duckduckgo_search', 'wikipedia', 'amazon_product', 'github_repo', 'twitter_feed', 'reddit_thread'. Leave empty for auto-detection based on URL"
2751
2831
  },
2752
2832
  "selector": {
2753
2833
  "type": "string",
@@ -6248,11 +6328,12 @@
6248
6328
  },
6249
6329
  "action": {
6250
6330
  "type": "string",
6251
- "description": "How to automatically handle this dialog type: 'accept' clicks OK/Yes, 'dismiss' clicks Cancel/No, 'accept_with_text' accepts and provides text input (for prompts)",
6331
+ "description": "How to automatically handle this dialog type: 'accept' clicks OK/Yes, 'dismiss' clicks Cancel/No, 'accept_with_text' accepts and provides text input (for prompts), 'wait' holds the dialog for manual handling via browser_handle_dialog",
6252
6332
  "enum": [
6253
6333
  "accept",
6254
6334
  "dismiss",
6255
- "accept_with_text"
6335
+ "accept_with_text",
6336
+ "wait"
6256
6337
  ]
6257
6338
  },
6258
6339
  "prompt_text": {
@@ -8414,6 +8495,163 @@
8414
8495
  }
8415
8496
  }
8416
8497
  }
8498
+ },
8499
+ "/api/execute/browser_webmcp_get_tools": {
8500
+ "post": {
8501
+ "summary": "Browser Webmcp Get Tools",
8502
+ "description": "Get all WebMCP tools declared by the current page via navigator.modelContext.registerTool() or declarative <form toolname> elements. Returns a JSON array of tool definitions with name, description, and inputSchema. Use after navigating to a page to discover available page-level tools.",
8503
+ "tags": [
8504
+ "General"
8505
+ ],
8506
+ "requestBody": {
8507
+ "required": true,
8508
+ "content": {
8509
+ "application/json": {
8510
+ "schema": {
8511
+ "type": "object",
8512
+ "properties": {
8513
+ "context_id": {
8514
+ "type": "string",
8515
+ "description": "The unique identifier of the browser context (e.g., 'ctx_000001')"
8516
+ }
8517
+ },
8518
+ "required": [
8519
+ "context_id"
8520
+ ]
8521
+ }
8522
+ }
8523
+ }
8524
+ },
8525
+ "responses": {
8526
+ "200": {
8527
+ "description": "Successful response"
8528
+ },
8529
+ "400": {
8530
+ "description": "Bad request"
8531
+ },
8532
+ "401": {
8533
+ "description": "Unauthorized"
8534
+ }
8535
+ }
8536
+ }
8537
+ },
8538
+ "/api/execute/browser_webmcp_call_tool": {
8539
+ "post": {
8540
+ "summary": "Browser Webmcp Call Tool",
8541
+ "description": "Execute a WebMCP tool that was declared by the page. The tool's execute callback runs in the page's JavaScript context. For declarative form tools, this fills form fields with the input values and submits. Returns the tool's result as JSON. Timeout: 30 seconds.",
8542
+ "tags": [
8543
+ "General"
8544
+ ],
8545
+ "requestBody": {
8546
+ "required": true,
8547
+ "content": {
8548
+ "application/json": {
8549
+ "schema": {
8550
+ "type": "object",
8551
+ "properties": {
8552
+ "context_id": {
8553
+ "type": "string",
8554
+ "description": "The unique identifier of the browser context (e.g., 'ctx_000001')"
8555
+ },
8556
+ "tool_name": {
8557
+ "type": "string",
8558
+ "description": "The name of the WebMCP tool to execute (as registered by the page via navigator.modelContext.registerTool)"
8559
+ },
8560
+ "input": {
8561
+ "type": "string",
8562
+ "description": "JSON object containing input parameters for the tool, matching the tool's inputSchema"
8563
+ }
8564
+ },
8565
+ "required": [
8566
+ "context_id",
8567
+ "tool_name"
8568
+ ]
8569
+ }
8570
+ }
8571
+ }
8572
+ },
8573
+ "responses": {
8574
+ "200": {
8575
+ "description": "Successful response"
8576
+ },
8577
+ "400": {
8578
+ "description": "Bad request"
8579
+ },
8580
+ "401": {
8581
+ "description": "Unauthorized"
8582
+ }
8583
+ }
8584
+ }
8585
+ },
8586
+ "/api/execute/browser_webmcp_refresh_tools": {
8587
+ "post": {
8588
+ "summary": "Browser Webmcp Refresh Tools",
8589
+ "description": "Trigger a re-scan of the page for declarative <form toolname> elements and return the updated tool list. Useful after SPA navigation or dynamic content changes that may have added new form-based tools.",
8590
+ "tags": [
8591
+ "General"
8592
+ ],
8593
+ "requestBody": {
8594
+ "required": true,
8595
+ "content": {
8596
+ "application/json": {
8597
+ "schema": {
8598
+ "type": "object",
8599
+ "properties": {
8600
+ "context_id": {
8601
+ "type": "string",
8602
+ "description": "The unique identifier of the browser context (e.g., 'ctx_000001')"
8603
+ }
8604
+ },
8605
+ "required": [
8606
+ "context_id"
8607
+ ]
8608
+ }
8609
+ }
8610
+ }
8611
+ },
8612
+ "responses": {
8613
+ "200": {
8614
+ "description": "Successful response"
8615
+ },
8616
+ "400": {
8617
+ "description": "Bad request"
8618
+ },
8619
+ "401": {
8620
+ "description": "Unauthorized"
8621
+ }
8622
+ }
8623
+ }
8624
+ },
8625
+ "/api/execute/browser_webmcp_get_all_tools": {
8626
+ "post": {
8627
+ "summary": "Browser Webmcp Get All Tools",
8628
+ "description": "Get all WebMCP tools across all browser contexts. Returns a JSON object keyed by context_id, with each value being an array of tool definitions. Useful for discovering which pages have registered tools without querying each context individually.",
8629
+ "tags": [
8630
+ "General"
8631
+ ],
8632
+ "requestBody": {
8633
+ "required": true,
8634
+ "content": {
8635
+ "application/json": {
8636
+ "schema": {
8637
+ "type": "object",
8638
+ "properties": {}
8639
+ }
8640
+ }
8641
+ }
8642
+ },
8643
+ "responses": {
8644
+ "200": {
8645
+ "description": "Successful response"
8646
+ },
8647
+ "400": {
8648
+ "description": "Bad request"
8649
+ },
8650
+ "401": {
8651
+ "description": "Unauthorized"
8652
+ }
8653
+ }
8654
+ }
8417
8655
  }
8418
8656
  }
8419
8657
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olib-ai/owl-browser-sdk",
3
- "version": "2.0.7",
3
+ "version": "2.0.9",
4
4
  "description": "Node.js SDK for Owl Browser automation - Async-first with dynamic OpenAPI method generation",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",