@bctrl/sdk 1.0.1
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 +75 -0
- package/dist/agents/browser-use/index.d.ts +1 -0
- package/dist/agents/browser-use/index.js +9 -0
- package/dist/agents/browser-use/namespace.d.ts +39 -0
- package/dist/agents/browser-use/namespace.js +93 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/stagehand/core.d.ts +93 -0
- package/dist/agents/stagehand/core.js +144 -0
- package/dist/agents/stagehand/index.d.ts +3 -0
- package/dist/agents/stagehand/index.js +24 -0
- package/dist/agents/stagehand/namespace.d.ts +51 -0
- package/dist/agents/stagehand/namespace.js +65 -0
- package/dist/ai-credentials/client.d.ts +12 -0
- package/dist/ai-credentials/client.js +70 -0
- package/dist/ai-credentials/index.d.ts +1 -0
- package/dist/ai-credentials/index.js +1 -0
- package/dist/base/event-binding.d.ts +7 -0
- package/dist/base/event-binding.js +23 -0
- package/dist/base/types.d.ts +109 -0
- package/dist/base/types.js +4 -0
- package/dist/bctrl.d.ts +37 -0
- package/dist/bctrl.js +77 -0
- package/dist/browser-extensions/client.d.ts +15 -0
- package/dist/browser-extensions/client.js +72 -0
- package/dist/browser-extensions/index.d.ts +2 -0
- package/dist/browser-extensions/index.js +1 -0
- package/dist/browser-profiles/client.d.ts +11 -0
- package/dist/browser-profiles/client.js +63 -0
- package/dist/browser-profiles/index.d.ts +1 -0
- package/dist/browser-profiles/index.js +1 -0
- package/dist/captcha/index.d.ts +1 -0
- package/dist/captcha/index.js +1 -0
- package/dist/captcha/namespace.d.ts +34 -0
- package/dist/captcha/namespace.js +41 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +1 -0
- package/dist/client/rpc.d.ts +83 -0
- package/dist/client/rpc.js +354 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +28 -0
- package/dist/constants/browser.d.ts +2 -0
- package/dist/constants/browser.js +1 -0
- package/dist/contracts/agent-tools.d.ts +45 -0
- package/dist/contracts/agent-tools.js +31 -0
- package/dist/contracts/automation.d.ts +265 -0
- package/dist/contracts/automation.js +109 -0
- package/dist/contracts/browser-management.d.ts +179 -0
- package/dist/contracts/browser-management.js +95 -0
- package/dist/contracts/browser-use.d.ts +136 -0
- package/dist/contracts/browser-use.js +93 -0
- package/dist/contracts/captcha.d.ts +114 -0
- package/dist/contracts/captcha.js +40 -0
- package/dist/contracts/desktop.d.ts +223 -0
- package/dist/contracts/desktop.js +121 -0
- package/dist/contracts/drivers/playwright.d.ts +2008 -0
- package/dist/contracts/drivers/playwright.js +2033 -0
- package/dist/contracts/drivers/puppeteer.d.ts +1221 -0
- package/dist/contracts/drivers/puppeteer.js +941 -0
- package/dist/contracts/drivers/selenium.d.ts +156 -0
- package/dist/contracts/drivers/selenium.js +61 -0
- package/dist/contracts/drivers/stagehand.d.ts +155 -0
- package/dist/contracts/drivers/stagehand.js +7 -0
- package/dist/contracts/extensions.d.ts +13 -0
- package/dist/contracts/extensions.js +9 -0
- package/dist/contracts/index.d.ts +13 -0
- package/dist/contracts/index.js +13 -0
- package/dist/contracts/public-api.d.ts +360 -0
- package/dist/contracts/public-api.js +17 -0
- package/dist/contracts/runtime.d.ts +81 -0
- package/dist/contracts/runtime.js +16 -0
- package/dist/contracts/stagehand.d.ts +253 -0
- package/dist/contracts/stagehand.js +145 -0
- package/dist/contracts/storage.d.ts +51 -0
- package/dist/contracts/storage.js +56 -0
- package/dist/contracts/vault.d.ts +119 -0
- package/dist/contracts/vault.js +112 -0
- package/dist/contracts/version.d.ts +3 -0
- package/dist/contracts/version.js +16 -0
- package/dist/desktop.d.ts +2 -0
- package/dist/desktop.js +3 -0
- package/dist/drivers/desktop/index.d.ts +65 -0
- package/dist/drivers/desktop/index.js +68 -0
- package/dist/drivers/desktop/session.d.ts +313 -0
- package/dist/drivers/desktop/session.js +432 -0
- package/dist/drivers/playwright/event-emitter.d.ts +160 -0
- package/dist/drivers/playwright/event-emitter.js +297 -0
- package/dist/drivers/playwright/generated/api-request-context.d.ts +137 -0
- package/dist/drivers/playwright/generated/api-request-context.js +154 -0
- package/dist/drivers/playwright/generated/api-response.d.ts +119 -0
- package/dist/drivers/playwright/generated/api-response.js +123 -0
- package/dist/drivers/playwright/generated/browser-context.d.ts +284 -0
- package/dist/drivers/playwright/generated/browser-context.js +458 -0
- package/dist/drivers/playwright/generated/browser.d.ts +120 -0
- package/dist/drivers/playwright/generated/browser.js +151 -0
- package/dist/drivers/playwright/generated/clock.d.ts +80 -0
- package/dist/drivers/playwright/generated/clock.js +94 -0
- package/dist/drivers/playwright/generated/console-message.d.ts +94 -0
- package/dist/drivers/playwright/generated/console-message.js +89 -0
- package/dist/drivers/playwright/generated/coverage.d.ts +57 -0
- package/dist/drivers/playwright/generated/coverage.js +66 -0
- package/dist/drivers/playwright/generated/dialog.d.ts +79 -0
- package/dist/drivers/playwright/generated/dialog.js +80 -0
- package/dist/drivers/playwright/generated/element-handle.d.ts +399 -0
- package/dist/drivers/playwright/generated/element-handle.js +501 -0
- package/dist/drivers/playwright/generated/frame-locator.d.ts +34 -0
- package/dist/drivers/playwright/generated/frame-locator.js +63 -0
- package/dist/drivers/playwright/generated/frame.d.ts +557 -0
- package/dist/drivers/playwright/generated/frame.js +634 -0
- package/dist/drivers/playwright/generated/js-handle.d.ts +72 -0
- package/dist/drivers/playwright/generated/js-handle.js +92 -0
- package/dist/drivers/playwright/generated/keyboard.d.ts +103 -0
- package/dist/drivers/playwright/generated/keyboard.js +113 -0
- package/dist/drivers/playwright/generated/locator.d.ts +795 -0
- package/dist/drivers/playwright/generated/locator.js +974 -0
- package/dist/drivers/playwright/generated/mouse.d.ts +97 -0
- package/dist/drivers/playwright/generated/mouse.js +109 -0
- package/dist/drivers/playwright/generated/page.d.ts +762 -0
- package/dist/drivers/playwright/generated/page.js +988 -0
- package/dist/drivers/playwright/generated/touchscreen.d.ts +34 -0
- package/dist/drivers/playwright/generated/touchscreen.js +37 -0
- package/dist/drivers/playwright/generated/tracing.d.ts +78 -0
- package/dist/drivers/playwright/generated/tracing.js +80 -0
- package/dist/drivers/playwright/generated/worker.d.ts +53 -0
- package/dist/drivers/playwright/generated/worker.js +59 -0
- package/dist/drivers/playwright/index.d.ts +19 -0
- package/dist/drivers/playwright/index.js +20 -0
- package/dist/drivers/playwright/remote-base.d.ts +62 -0
- package/dist/drivers/playwright/remote-base.js +86 -0
- package/dist/drivers/playwright/types.d.ts +148 -0
- package/dist/drivers/playwright/types.js +8 -0
- package/dist/drivers/puppeteer/errors.d.ts +50 -0
- package/dist/drivers/puppeteer/errors.js +71 -0
- package/dist/drivers/puppeteer/event-emitter.d.ts +145 -0
- package/dist/drivers/puppeteer/event-emitter.js +259 -0
- package/dist/drivers/puppeteer/generated/accessibility.d.ts +77 -0
- package/dist/drivers/puppeteer/generated/accessibility.js +74 -0
- package/dist/drivers/puppeteer/generated/browser-context.d.ts +116 -0
- package/dist/drivers/puppeteer/generated/browser-context.js +168 -0
- package/dist/drivers/puppeteer/generated/browser.d.ts +169 -0
- package/dist/drivers/puppeteer/generated/browser.js +246 -0
- package/dist/drivers/puppeteer/generated/console-message.d.ts +54 -0
- package/dist/drivers/puppeteer/generated/console-message.js +69 -0
- package/dist/drivers/puppeteer/generated/coverage.d.ts +49 -0
- package/dist/drivers/puppeteer/generated/coverage.js +57 -0
- package/dist/drivers/puppeteer/generated/dialog.d.ts +46 -0
- package/dist/drivers/puppeteer/generated/dialog.js +60 -0
- package/dist/drivers/puppeteer/generated/element-handle.d.ts +261 -0
- package/dist/drivers/puppeteer/generated/element-handle.js +341 -0
- package/dist/drivers/puppeteer/generated/file-chooser.d.ts +34 -0
- package/dist/drivers/puppeteer/generated/file-chooser.js +43 -0
- package/dist/drivers/puppeteer/generated/frame.d.ts +221 -0
- package/dist/drivers/puppeteer/generated/frame.js +302 -0
- package/dist/drivers/puppeteer/generated/http-request.d.ts +195 -0
- package/dist/drivers/puppeteer/generated/http-request.js +243 -0
- package/dist/drivers/puppeteer/generated/http-response.d.ts +142 -0
- package/dist/drivers/puppeteer/generated/http-response.js +169 -0
- package/dist/drivers/puppeteer/generated/js-handle.d.ts +104 -0
- package/dist/drivers/puppeteer/generated/js-handle.js +125 -0
- package/dist/drivers/puppeteer/generated/keyboard.d.ts +79 -0
- package/dist/drivers/puppeteer/generated/keyboard.js +89 -0
- package/dist/drivers/puppeteer/generated/locator.d.ts +141 -0
- package/dist/drivers/puppeteer/generated/locator.js +164 -0
- package/dist/drivers/puppeteer/generated/mouse.d.ts +74 -0
- package/dist/drivers/puppeteer/generated/mouse.js +94 -0
- package/dist/drivers/puppeteer/generated/page.d.ts +604 -0
- package/dist/drivers/puppeteer/generated/page.js +776 -0
- package/dist/drivers/puppeteer/generated/target.d.ts +105 -0
- package/dist/drivers/puppeteer/generated/target.js +123 -0
- package/dist/drivers/puppeteer/generated/touchscreen.d.ts +87 -0
- package/dist/drivers/puppeteer/generated/touchscreen.js +103 -0
- package/dist/drivers/puppeteer/generated/tracing.d.ts +38 -0
- package/dist/drivers/puppeteer/generated/tracing.js +43 -0
- package/dist/drivers/puppeteer/generated/web-worker.d.ts +63 -0
- package/dist/drivers/puppeteer/generated/web-worker.js +73 -0
- package/dist/drivers/puppeteer/index.d.ts +21 -0
- package/dist/drivers/puppeteer/index.js +23 -0
- package/dist/drivers/puppeteer/remote-base.d.ts +57 -0
- package/dist/drivers/puppeteer/remote-base.js +79 -0
- package/dist/drivers/puppeteer/types.d.ts +178 -0
- package/dist/drivers/puppeteer/types.js +8 -0
- package/dist/drivers/selenium/driver.d.ts +28 -0
- package/dist/drivers/selenium/driver.js +169 -0
- package/dist/drivers/selenium/element.d.ts +34 -0
- package/dist/drivers/selenium/element.js +73 -0
- package/dist/drivers/selenium/index.d.ts +3 -0
- package/dist/drivers/selenium/index.js +5 -0
- package/dist/drivers/selenium/types.d.ts +2 -0
- package/dist/drivers/selenium/types.js +12 -0
- package/dist/drivers/stagehand/generated/context.d.ts +127 -0
- package/dist/drivers/stagehand/generated/context.js +153 -0
- package/dist/drivers/stagehand/generated/locator.d.ts +324 -0
- package/dist/drivers/stagehand/generated/locator.js +368 -0
- package/dist/drivers/stagehand/generated/page.d.ts +377 -0
- package/dist/drivers/stagehand/generated/page.js +439 -0
- package/dist/drivers/stagehand/generated/response.d.ts +197 -0
- package/dist/drivers/stagehand/generated/response.js +232 -0
- package/dist/drivers/stagehand/index.d.ts +5 -0
- package/dist/drivers/stagehand/index.js +8 -0
- package/dist/drivers/stagehand/types.d.ts +1 -0
- package/dist/drivers/stagehand/types.js +7 -0
- package/dist/errors.d.ts +47 -0
- package/dist/errors.js +157 -0
- package/dist/extensions/client.d.ts +47 -0
- package/dist/extensions/client.js +154 -0
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +23 -0
- package/dist/internal/dev-client.d.ts +5 -0
- package/dist/internal/dev-client.js +9 -0
- package/dist/internal/rpc-targets.d.ts +17 -0
- package/dist/internal/rpc-targets.js +58 -0
- package/dist/internal/serialization.d.ts +32 -0
- package/dist/internal/serialization.js +42 -0
- package/dist/internal/transport.d.ts +24 -0
- package/dist/internal/transport.js +29 -0
- package/dist/playwright.d.ts +1 -0
- package/dist/playwright.js +2 -0
- package/dist/puppeteer.d.ts +1 -0
- package/dist/puppeteer.js +2 -0
- package/dist/selenium.d.ts +1 -0
- package/dist/selenium.js +2 -0
- package/dist/stagehand.d.ts +1 -0
- package/dist/stagehand.js +2 -0
- package/dist/storage/client.d.ts +151 -0
- package/dist/storage/client.js +329 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.js +4 -0
- package/dist/telemetry.d.ts +18 -0
- package/dist/telemetry.js +93 -0
- package/dist/updates/client.d.ts +8 -0
- package/dist/updates/client.js +128 -0
- package/dist/updates/index.d.ts +1 -0
- package/dist/updates/index.js +1 -0
- package/dist/utils/http.d.ts +39 -0
- package/dist/utils/http.js +88 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.js +74 -0
- package/dist/utils/schema.d.ts +17 -0
- package/dist/utils/schema.js +31 -0
- package/dist/utils/url.d.ts +5 -0
- package/dist/utils/url.js +7 -0
- package/dist/vault/client.d.ts +43 -0
- package/dist/vault/client.js +123 -0
- package/dist/vault/index.d.ts +1 -0
- package/dist/vault/index.js +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +4 -0
- package/dist/workspaces/browser-runtime.d.ts +251 -0
- package/dist/workspaces/browser-runtime.js +1025 -0
- package/dist/workspaces/client.d.ts +48 -0
- package/dist/workspaces/client.js +222 -0
- package/dist/workspaces/index.d.ts +2 -0
- package/dist/workspaces/index.js +2 -0
- package/dist/workspaces/runtime-event-pump.d.ts +65 -0
- package/dist/workspaces/runtime-event-pump.js +716 -0
- package/package.json +56 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTO-GENERATED FILE - DO NOT EDIT
|
|
3
|
+
*
|
|
4
|
+
* Generated from: packages/automation-spec/src/drivers/stagehand/methods/
|
|
5
|
+
* Run `pnpm generate:stagehand` to regenerate.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* RemoteStagehandResponse - Remote Puppeteer Response API over RPC.
|
|
9
|
+
*
|
|
10
|
+
* @see https://pptr.dev/api/puppeteer.response
|
|
11
|
+
*/
|
|
12
|
+
export class RemoteStagehandResponse {
|
|
13
|
+
sendRpc;
|
|
14
|
+
_id;
|
|
15
|
+
_url;
|
|
16
|
+
_status;
|
|
17
|
+
_statusText;
|
|
18
|
+
_ok;
|
|
19
|
+
_headers;
|
|
20
|
+
_fromServiceWorker;
|
|
21
|
+
constructor(sendRpc, data) {
|
|
22
|
+
this.sendRpc = sendRpc;
|
|
23
|
+
this._id = data.id;
|
|
24
|
+
this._url = data.url;
|
|
25
|
+
this._status = data.status;
|
|
26
|
+
this._statusText = data.statusText;
|
|
27
|
+
this._ok = data.ok;
|
|
28
|
+
this._headers = data.headers;
|
|
29
|
+
this._fromServiceWorker = data.fromServiceWorker;
|
|
30
|
+
}
|
|
31
|
+
rpc(method, args) {
|
|
32
|
+
return this.sendRpc(method, args);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the frame that initiated this response (synchronous version).
|
|
36
|
+
* Note: Not fully supported in remote SDK.
|
|
37
|
+
*/
|
|
38
|
+
frame() {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the URL of the response.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const url = response.url();
|
|
46
|
+
*
|
|
47
|
+
* @see https://docs.stagehand.dev/references/response#url
|
|
48
|
+
*/
|
|
49
|
+
url() {
|
|
50
|
+
return this._url;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the HTTP status code of the response.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* const statusCode = response.status();
|
|
57
|
+
*
|
|
58
|
+
* @see https://docs.stagehand.dev/references/response#status
|
|
59
|
+
*/
|
|
60
|
+
status() {
|
|
61
|
+
return this._status;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the HTTP status text of the response.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* const text = response.statusText();
|
|
68
|
+
*
|
|
69
|
+
* @see https://docs.stagehand.dev/references/response#statustext
|
|
70
|
+
*/
|
|
71
|
+
statusText() {
|
|
72
|
+
return this._statusText;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if the response status is in the 200-299 range.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* if (response.ok()) { console.log("success"); }
|
|
79
|
+
*
|
|
80
|
+
* @see https://docs.stagehand.dev/references/response#ok
|
|
81
|
+
*/
|
|
82
|
+
ok() {
|
|
83
|
+
return this._ok;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if the response was served from a service worker.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* const fromSW = response.fromServiceWorker();
|
|
90
|
+
*
|
|
91
|
+
* @see https://docs.stagehand.dev/references/response#fromserviceworker
|
|
92
|
+
*/
|
|
93
|
+
fromServiceWorker() {
|
|
94
|
+
return this._fromServiceWorker;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get the security details of the response (for HTTPS).
|
|
98
|
+
*
|
|
99
|
+
* @remarks
|
|
100
|
+
* Returns null for non-HTTPS responses.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* const security = await response.securityDetails();
|
|
104
|
+
*
|
|
105
|
+
* @see https://docs.stagehand.dev/references/response#securitydetails
|
|
106
|
+
*/
|
|
107
|
+
async securityDetails() {
|
|
108
|
+
return this.rpc('securityDetails', []);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the server address (IP and port) that served the response.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* const addr = await response.serverAddr();
|
|
115
|
+
*
|
|
116
|
+
* @see https://docs.stagehand.dev/references/response#serveraddr
|
|
117
|
+
*/
|
|
118
|
+
async serverAddr() {
|
|
119
|
+
return this.rpc('serverAddr', []);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all response headers as an object.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* Header names are lower-cased. Multiple values for the same header are joined with ", ".
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* const headers = response.headers();
|
|
129
|
+
*
|
|
130
|
+
* @see https://docs.stagehand.dev/references/response#headers
|
|
131
|
+
*/
|
|
132
|
+
headers() {
|
|
133
|
+
return this._headers;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get all response headers including those not exposed by the standard API.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* const allHeaders = await response.allHeaders();
|
|
140
|
+
*
|
|
141
|
+
* @see https://docs.stagehand.dev/references/response#allheaders
|
|
142
|
+
*/
|
|
143
|
+
async allHeaders() {
|
|
144
|
+
return this.rpc('allHeaders', []);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get the value of a specific header.
|
|
148
|
+
* @param name - Header name (case-insensitive).
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* const contentType = await response.headerValue("content-type");
|
|
152
|
+
*
|
|
153
|
+
* @see https://docs.stagehand.dev/references/response#headervalue
|
|
154
|
+
*/
|
|
155
|
+
async headerValue(name) {
|
|
156
|
+
return this.rpc('headerValue', [name]);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get all values of a specific header (for headers with multiple values).
|
|
160
|
+
* @param name - Header name (case-insensitive).
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* const cookies = await response.headerValues("set-cookie");
|
|
164
|
+
*
|
|
165
|
+
* @see https://docs.stagehand.dev/references/response#headervalues
|
|
166
|
+
*/
|
|
167
|
+
async headerValues(name) {
|
|
168
|
+
return this.rpc('headerValues', [name]);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get all response headers as an array of { name, value } objects.
|
|
172
|
+
*
|
|
173
|
+
* @remarks
|
|
174
|
+
* Preserves multiple values for the same header as separate entries.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* const headersArray = await response.headersArray();
|
|
178
|
+
*
|
|
179
|
+
* @see https://docs.stagehand.dev/references/response#headersarray
|
|
180
|
+
*/
|
|
181
|
+
async headersArray() {
|
|
182
|
+
return this.rpc('headersArray', []);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get the response body as a Buffer.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* const buffer = await response.body();
|
|
189
|
+
*
|
|
190
|
+
* @see https://docs.stagehand.dev/references/response#body
|
|
191
|
+
*/
|
|
192
|
+
async body() {
|
|
193
|
+
const result = await this.rpc('body', []);
|
|
194
|
+
return Buffer.from(result, 'base64');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get the response body as text.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* const text = await response.text();
|
|
201
|
+
*
|
|
202
|
+
* @see https://docs.stagehand.dev/references/response#text
|
|
203
|
+
*/
|
|
204
|
+
async text() {
|
|
205
|
+
return this.rpc('text', []);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get the response body parsed as JSON.
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* const data = await response.json();
|
|
212
|
+
*
|
|
213
|
+
* @see https://docs.stagehand.dev/references/response#json
|
|
214
|
+
*/
|
|
215
|
+
async json() {
|
|
216
|
+
return this.rpc('json', []);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Wait for the response to finish and get any error message.
|
|
220
|
+
*
|
|
221
|
+
* @remarks
|
|
222
|
+
* Returns null if the response was successful, or an error message if it failed.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* const error = await response.finished();
|
|
226
|
+
*
|
|
227
|
+
* @see https://docs.stagehand.dev/references/response#finished
|
|
228
|
+
*/
|
|
229
|
+
async finished() {
|
|
230
|
+
return this.rpc('finished', []);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { RemoteStagehandPage } from './generated/page.js';
|
|
3
|
+
export { RemoteStagehandLocator } from './generated/locator.js';
|
|
4
|
+
export { RemoteStagehandContext } from './generated/context.js';
|
|
5
|
+
export { RemoteStagehandResponse } from './generated/response.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Stagehand driver exports.
|
|
2
|
+
// Re-export types
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
// Generated classes
|
|
5
|
+
export { RemoteStagehandPage } from './generated/page.js';
|
|
6
|
+
export { RemoteStagehandLocator } from './generated/locator.js';
|
|
7
|
+
export { RemoteStagehandContext } from './generated/context.js';
|
|
8
|
+
export { RemoteStagehandResponse } from './generated/response.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { StagehandLoadState, StagehandGotoOptions, StagehandReloadOptions, StagehandClickOptions, StagehandHoverOptions, StagehandDragAndDropOptions, StagehandTypeOptions, StagehandLocatorClickOptions, StagehandLocatorTypeOptions, StagehandHighlightOptions, StagehandSendClickEventOptions, StagehandFilePayload, StagehandFileInput, StagehandWaitForSelectorOptions, StagehandScreenshotClip, StagehandScreenshotOptions, StagehandSnapshotOptions, StagehandSnapshotResult, StagehandViewportSize, StagehandViewportOptions, StagehandSecurityDetails, StagehandServerAddr, StagehandHeaderEntry, StagehandInitScriptSource, } from '../../contracts/drivers/stagehand.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Stagehand Driver Types
|
|
3
|
+
// ============================================================================
|
|
4
|
+
//
|
|
5
|
+
// Re-export type definitions from the SDK-local Stagehand contract module.
|
|
6
|
+
// ============================================================================
|
|
7
|
+
export {};
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type AutomationDiagnostic } from './contracts/automation.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base error class for all bctrl SDK errors.
|
|
4
|
+
* Carries a fine-grained `.code` and optional `.context` metadata.
|
|
5
|
+
*/
|
|
6
|
+
export declare class BctrlError extends Error {
|
|
7
|
+
readonly code: string;
|
|
8
|
+
readonly context?: Record<string, unknown> | undefined;
|
|
9
|
+
constructor(message: string, code: string, context?: Record<string, unknown> | undefined);
|
|
10
|
+
/** Serialize for structured loggers (pino, winston) and JSON.stringify() */
|
|
11
|
+
toJSON(): Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/** Automation/driver/script errors — your code or selectors need fixing */
|
|
14
|
+
export declare class AutomationError extends BctrlError {
|
|
15
|
+
constructor(message: string, code?: string, context?: Record<string, unknown>);
|
|
16
|
+
/** Human-readable suggestion from control-plane validation. */
|
|
17
|
+
get hint(): string | undefined;
|
|
18
|
+
/** Structured diagnostic payload with machine-readable fix metadata. */
|
|
19
|
+
get diagnostic(): AutomationDiagnostic | undefined;
|
|
20
|
+
}
|
|
21
|
+
/** Session/browser lifecycle errors — reconnect or recreate */
|
|
22
|
+
export declare class SessionError extends BctrlError {
|
|
23
|
+
constructor(message: string, code?: string, context?: Record<string, unknown>);
|
|
24
|
+
}
|
|
25
|
+
/** Timeout errors — increase timeout or retry */
|
|
26
|
+
export declare class TimeoutError extends BctrlError {
|
|
27
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
28
|
+
}
|
|
29
|
+
/** Authentication/authorization errors — check API key */
|
|
30
|
+
export declare class AuthenticationError extends BctrlError {
|
|
31
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
32
|
+
}
|
|
33
|
+
/** Reconstruct a typed error from the wire format (errorCode + errorContext) */
|
|
34
|
+
export declare function fromErrorResponse(message: string, code?: string, context?: Record<string, unknown>): BctrlError;
|
|
35
|
+
export declare function isBctrlError(error: unknown): error is BctrlError;
|
|
36
|
+
export declare function isAutomationError(error: unknown): error is AutomationError;
|
|
37
|
+
export declare function isSessionError(error: unknown): error is SessionError;
|
|
38
|
+
export declare function isTimeoutError(error: unknown): error is TimeoutError;
|
|
39
|
+
export declare function isAuthenticationError(error: unknown): error is AuthenticationError;
|
|
40
|
+
/**
|
|
41
|
+
* Get a typed automation hint from an SDK error when available.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getAutomationHint(error: unknown): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Get a typed automation diagnostic payload from an SDK error when available.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getAutomationDiagnostic(error: unknown): AutomationDiagnostic | undefined;
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// SDK Error Hierarchy
|
|
3
|
+
// ============================================================================
|
|
4
|
+
//
|
|
5
|
+
// User-facing error classes oriented around what action to take:
|
|
6
|
+
// - AutomationError → fix selectors, script code, or arguments
|
|
7
|
+
// - SessionError → recreate session, check if browser/host is up
|
|
8
|
+
// - TimeoutError → increase timeout or retry
|
|
9
|
+
// - AuthenticationError → check/refresh API key
|
|
10
|
+
// ============================================================================
|
|
11
|
+
import { AutomationDiagnosticSchema } from './contracts/automation.js';
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
14
|
+
}
|
|
15
|
+
function isAutomationDiagnostic(value) {
|
|
16
|
+
return AutomationDiagnosticSchema.safeParse(value).success;
|
|
17
|
+
}
|
|
18
|
+
function getContextHint(context) {
|
|
19
|
+
if (!context)
|
|
20
|
+
return undefined;
|
|
21
|
+
const hint = context.hint;
|
|
22
|
+
return typeof hint === 'string' && hint.length > 0 ? hint : undefined;
|
|
23
|
+
}
|
|
24
|
+
function getContextDiagnostic(context) {
|
|
25
|
+
if (!context)
|
|
26
|
+
return undefined;
|
|
27
|
+
const diagnostic = context.diagnostic;
|
|
28
|
+
return isAutomationDiagnostic(diagnostic) ? diagnostic : undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Base error class for all bctrl SDK errors.
|
|
32
|
+
* Carries a fine-grained `.code` and optional `.context` metadata.
|
|
33
|
+
*/
|
|
34
|
+
export class BctrlError extends Error {
|
|
35
|
+
code;
|
|
36
|
+
context;
|
|
37
|
+
constructor(message, code, context) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.code = code;
|
|
40
|
+
this.context = context;
|
|
41
|
+
this.name = 'BctrlError';
|
|
42
|
+
if (Error.captureStackTrace)
|
|
43
|
+
Error.captureStackTrace(this, this.constructor);
|
|
44
|
+
}
|
|
45
|
+
/** Serialize for structured loggers (pino, winston) and JSON.stringify() */
|
|
46
|
+
toJSON() {
|
|
47
|
+
return {
|
|
48
|
+
name: this.name,
|
|
49
|
+
message: this.message,
|
|
50
|
+
code: this.code,
|
|
51
|
+
context: this.context,
|
|
52
|
+
stack: this.stack,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Automation/driver/script errors — your code or selectors need fixing */
|
|
57
|
+
export class AutomationError extends BctrlError {
|
|
58
|
+
constructor(message, code = 'DRIVER_ERROR', context) {
|
|
59
|
+
super(message, code, context);
|
|
60
|
+
this.name = 'AutomationError';
|
|
61
|
+
}
|
|
62
|
+
/** Human-readable suggestion from control-plane validation. */
|
|
63
|
+
get hint() {
|
|
64
|
+
return getContextHint(this.context);
|
|
65
|
+
}
|
|
66
|
+
/** Structured diagnostic payload with machine-readable fix metadata. */
|
|
67
|
+
get diagnostic() {
|
|
68
|
+
return getContextDiagnostic(this.context);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Session/browser lifecycle errors — reconnect or recreate */
|
|
72
|
+
export class SessionError extends BctrlError {
|
|
73
|
+
constructor(message, code = 'SESSION_ERROR', context) {
|
|
74
|
+
super(message, code, context);
|
|
75
|
+
this.name = 'SessionError';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Timeout errors — increase timeout or retry */
|
|
79
|
+
export class TimeoutError extends BctrlError {
|
|
80
|
+
constructor(message, context) {
|
|
81
|
+
super(message, 'TIMEOUT_ERROR', context);
|
|
82
|
+
this.name = 'TimeoutError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Authentication/authorization errors — check API key */
|
|
86
|
+
export class AuthenticationError extends BctrlError {
|
|
87
|
+
constructor(message, context) {
|
|
88
|
+
super(message, 'AUTH_ERROR', context);
|
|
89
|
+
this.name = 'AuthenticationError';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// Wire Format Reconstruction
|
|
94
|
+
// ============================================================================
|
|
95
|
+
/** Reconstruct a typed error from the wire format (errorCode + errorContext) */
|
|
96
|
+
export function fromErrorResponse(message, code, context) {
|
|
97
|
+
switch (code) {
|
|
98
|
+
case 'DRIVER_ERROR':
|
|
99
|
+
case 'EXECUTION_ERROR':
|
|
100
|
+
case 'VALIDATION_ERROR':
|
|
101
|
+
return new AutomationError(message, code, context);
|
|
102
|
+
case 'SESSION_ERROR':
|
|
103
|
+
case 'NOT_FOUND':
|
|
104
|
+
case 'SESSION_NOT_FOUND':
|
|
105
|
+
case 'DRIVER_NOT_CONNECTED':
|
|
106
|
+
case 'CONNECTION_ERROR':
|
|
107
|
+
case 'RPC_ERROR':
|
|
108
|
+
return new SessionError(message, code, context);
|
|
109
|
+
case 'TIMEOUT_ERROR':
|
|
110
|
+
case 'TIMEOUT':
|
|
111
|
+
return new TimeoutError(message, context);
|
|
112
|
+
case 'AUTH_ERROR':
|
|
113
|
+
return new AuthenticationError(message, context);
|
|
114
|
+
default:
|
|
115
|
+
return new BctrlError(message, code || 'UNKNOWN_ERROR', context);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Type Guards
|
|
120
|
+
// ============================================================================
|
|
121
|
+
//
|
|
122
|
+
// These use structural checks as a fallback for environments where
|
|
123
|
+
// instanceof fails (bundler duplication, multiple package copies in monorepos).
|
|
124
|
+
export function isBctrlError(error) {
|
|
125
|
+
return error instanceof BctrlError || (error instanceof Error && 'code' in error && typeof error.code === 'string'
|
|
126
|
+
&& (error.name === 'BctrlError' || error.name === 'AutomationError'
|
|
127
|
+
|| error.name === 'SessionError' || error.name === 'TimeoutError'
|
|
128
|
+
|| error.name === 'AuthenticationError'));
|
|
129
|
+
}
|
|
130
|
+
export function isAutomationError(error) {
|
|
131
|
+
return error instanceof AutomationError || (isBctrlError(error) && error.name === 'AutomationError');
|
|
132
|
+
}
|
|
133
|
+
export function isSessionError(error) {
|
|
134
|
+
return error instanceof SessionError || (isBctrlError(error) && error.name === 'SessionError');
|
|
135
|
+
}
|
|
136
|
+
export function isTimeoutError(error) {
|
|
137
|
+
return error instanceof TimeoutError || (isBctrlError(error) && error.name === 'TimeoutError');
|
|
138
|
+
}
|
|
139
|
+
export function isAuthenticationError(error) {
|
|
140
|
+
return error instanceof AuthenticationError || (isBctrlError(error) && error.name === 'AuthenticationError');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get a typed automation hint from an SDK error when available.
|
|
144
|
+
*/
|
|
145
|
+
export function getAutomationHint(error) {
|
|
146
|
+
if (!isBctrlError(error))
|
|
147
|
+
return undefined;
|
|
148
|
+
return getContextHint(error.context);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get a typed automation diagnostic payload from an SDK error when available.
|
|
152
|
+
*/
|
|
153
|
+
export function getAutomationDiagnostic(error) {
|
|
154
|
+
if (!isBctrlError(error))
|
|
155
|
+
return undefined;
|
|
156
|
+
return getContextDiagnostic(error.context);
|
|
157
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ExtensionMetadata } from '../contracts/extensions.js';
|
|
2
|
+
export declare class ExtensionsClient {
|
|
3
|
+
private readonly baseUrl;
|
|
4
|
+
private readonly apiKey?;
|
|
5
|
+
constructor(baseUrl: string, apiKey?: string | undefined);
|
|
6
|
+
private headers;
|
|
7
|
+
private jsonHeaders;
|
|
8
|
+
/**
|
|
9
|
+
* Upload an extension from a file buffer or Chrome Web Store URL.
|
|
10
|
+
*/
|
|
11
|
+
upload(opts: {
|
|
12
|
+
file?: Buffer;
|
|
13
|
+
filename?: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
}): Promise<ExtensionMetadata>;
|
|
16
|
+
/**
|
|
17
|
+
* List all uploaded extensions.
|
|
18
|
+
*/
|
|
19
|
+
list(): Promise<ExtensionMetadata[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Get extension metadata by ID.
|
|
22
|
+
*/
|
|
23
|
+
get(id: string): Promise<ExtensionMetadata | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Update an existing extension with a new file.
|
|
26
|
+
*/
|
|
27
|
+
update(id: string, opts: {
|
|
28
|
+
file: Buffer;
|
|
29
|
+
filename: string;
|
|
30
|
+
}): Promise<ExtensionMetadata>;
|
|
31
|
+
/**
|
|
32
|
+
* Delete an extension.
|
|
33
|
+
*/
|
|
34
|
+
delete(id: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Install extension(s) on a browser profile.
|
|
37
|
+
*/
|
|
38
|
+
install(browserName: string, extensionIds: string | string[]): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Uninstall an extension from a browser profile.
|
|
41
|
+
*/
|
|
42
|
+
uninstall(browserName: string, extensionId: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* List extensions installed on a browser profile.
|
|
45
|
+
*/
|
|
46
|
+
installed(browserName: string): Promise<ExtensionMetadata[]>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExtensionsClient — SDK client for browser extension management.
|
|
3
|
+
*
|
|
4
|
+
* Handles account-level extension CRUD and profile-level install/uninstall.
|
|
5
|
+
*/
|
|
6
|
+
import { fetchWithTimeout, parseJsonResponse } from '../utils/http.js';
|
|
7
|
+
import { SDK_VERSION } from '../version.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// ExtensionsClient
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export class ExtensionsClient {
|
|
12
|
+
baseUrl;
|
|
13
|
+
apiKey;
|
|
14
|
+
constructor(baseUrl, apiKey) {
|
|
15
|
+
this.baseUrl = baseUrl;
|
|
16
|
+
this.apiKey = apiKey;
|
|
17
|
+
}
|
|
18
|
+
headers() {
|
|
19
|
+
const h = {
|
|
20
|
+
'x-sdk-version': SDK_VERSION,
|
|
21
|
+
};
|
|
22
|
+
if (this.apiKey)
|
|
23
|
+
h['Authorization'] = `Bearer ${this.apiKey}`;
|
|
24
|
+
return h;
|
|
25
|
+
}
|
|
26
|
+
jsonHeaders() {
|
|
27
|
+
return { 'Content-Type': 'application/json', ...this.headers() };
|
|
28
|
+
}
|
|
29
|
+
// --------------------------------------------------------------------------
|
|
30
|
+
// Account-level extension management
|
|
31
|
+
// --------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Upload an extension from a file buffer or Chrome Web Store URL.
|
|
34
|
+
*/
|
|
35
|
+
async upload(opts) {
|
|
36
|
+
if (opts.url) {
|
|
37
|
+
// JSON body with URL
|
|
38
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions/upload`, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: this.jsonHeaders(),
|
|
41
|
+
body: JSON.stringify({ url: opts.url }),
|
|
42
|
+
});
|
|
43
|
+
if (!res.ok)
|
|
44
|
+
throw new Error(`Extension upload failed: ${await res.text()}`);
|
|
45
|
+
return parseJsonResponse(res, 'Extension upload');
|
|
46
|
+
}
|
|
47
|
+
if (!opts.file) {
|
|
48
|
+
throw new Error('Either file or url must be provided');
|
|
49
|
+
}
|
|
50
|
+
// Multipart file upload
|
|
51
|
+
const formData = new FormData();
|
|
52
|
+
const blob = new Blob([new Uint8Array(opts.file)], { type: 'application/octet-stream' });
|
|
53
|
+
formData.append('file', blob, opts.filename || 'extension.crx');
|
|
54
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions/upload`, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: this.headers(), // No Content-Type — FormData sets it with boundary
|
|
57
|
+
body: formData,
|
|
58
|
+
});
|
|
59
|
+
if (!res.ok)
|
|
60
|
+
throw new Error(`Extension upload failed: ${await res.text()}`);
|
|
61
|
+
return parseJsonResponse(res, 'Extension upload');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* List all uploaded extensions.
|
|
65
|
+
*/
|
|
66
|
+
async list() {
|
|
67
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions`, {
|
|
68
|
+
headers: this.headers(),
|
|
69
|
+
});
|
|
70
|
+
if (!res.ok)
|
|
71
|
+
throw new Error(`Extension list failed: ${await res.text()}`);
|
|
72
|
+
const data = await parseJsonResponse(res, 'Extension list');
|
|
73
|
+
return data.extensions;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get extension metadata by ID.
|
|
77
|
+
*/
|
|
78
|
+
async get(id) {
|
|
79
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions/${encodeURIComponent(id)}`, {
|
|
80
|
+
headers: this.headers(),
|
|
81
|
+
});
|
|
82
|
+
if (res.status === 404)
|
|
83
|
+
return null;
|
|
84
|
+
if (!res.ok)
|
|
85
|
+
throw new Error(`Extension get failed: ${await res.text()}`);
|
|
86
|
+
return parseJsonResponse(res, 'Extension get');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update an existing extension with a new file.
|
|
90
|
+
*/
|
|
91
|
+
async update(id, opts) {
|
|
92
|
+
const formData = new FormData();
|
|
93
|
+
const blob = new Blob([new Uint8Array(opts.file)], { type: 'application/octet-stream' });
|
|
94
|
+
formData.append('file', blob, opts.filename);
|
|
95
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions/${encodeURIComponent(id)}`, {
|
|
96
|
+
method: 'PUT',
|
|
97
|
+
headers: this.headers(),
|
|
98
|
+
body: formData,
|
|
99
|
+
});
|
|
100
|
+
if (!res.ok)
|
|
101
|
+
throw new Error(`Extension update failed: ${await res.text()}`);
|
|
102
|
+
return parseJsonResponse(res, 'Extension update');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Delete an extension.
|
|
106
|
+
*/
|
|
107
|
+
async delete(id) {
|
|
108
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/extensions/${encodeURIComponent(id)}`, {
|
|
109
|
+
method: 'DELETE',
|
|
110
|
+
headers: this.headers(),
|
|
111
|
+
});
|
|
112
|
+
if (!res.ok)
|
|
113
|
+
throw new Error(`Extension delete failed: ${await res.text()}`);
|
|
114
|
+
}
|
|
115
|
+
// --------------------------------------------------------------------------
|
|
116
|
+
// Profile-level install/uninstall
|
|
117
|
+
// --------------------------------------------------------------------------
|
|
118
|
+
/**
|
|
119
|
+
* Install extension(s) on a browser profile.
|
|
120
|
+
*/
|
|
121
|
+
async install(browserName, extensionIds) {
|
|
122
|
+
const ids = Array.isArray(extensionIds) ? extensionIds : [extensionIds];
|
|
123
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/profiles/by-name/${encodeURIComponent(browserName)}/extensions`, {
|
|
124
|
+
method: 'POST',
|
|
125
|
+
headers: this.jsonHeaders(),
|
|
126
|
+
body: JSON.stringify({ extensionIds: ids }),
|
|
127
|
+
});
|
|
128
|
+
if (!res.ok)
|
|
129
|
+
throw new Error(`Extension install failed: ${await res.text()}`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Uninstall an extension from a browser profile.
|
|
133
|
+
*/
|
|
134
|
+
async uninstall(browserName, extensionId) {
|
|
135
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/profiles/by-name/${encodeURIComponent(browserName)}/extensions/${encodeURIComponent(extensionId)}`, {
|
|
136
|
+
method: 'DELETE',
|
|
137
|
+
headers: this.headers(),
|
|
138
|
+
});
|
|
139
|
+
if (!res.ok)
|
|
140
|
+
throw new Error(`Extension uninstall failed: ${await res.text()}`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* List extensions installed on a browser profile.
|
|
144
|
+
*/
|
|
145
|
+
async installed(browserName) {
|
|
146
|
+
const res = await fetchWithTimeout(`${this.baseUrl}/profiles/by-name/${encodeURIComponent(browserName)}/extensions`, {
|
|
147
|
+
headers: this.headers(),
|
|
148
|
+
});
|
|
149
|
+
if (!res.ok)
|
|
150
|
+
throw new Error(`Extension installed list failed: ${await res.text()}`);
|
|
151
|
+
const data = await parseJsonResponse(res, 'Extension installed list');
|
|
152
|
+
return data.extensions;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ExtensionsClient } from './client.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ExtensionsClient } from './client.js';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { z } from 'zod';
|
|
2
|
+
export type { ZodType } from 'zod';
|
|
3
|
+
export { BctrlError, AutomationError, AutomationError as SdkAutomationError, SessionError, TimeoutError, AuthenticationError, fromErrorResponse, isBctrlError, isAutomationError, isSessionError, isTimeoutError, isAuthenticationError, getAutomationHint, } from './errors.js';
|
|
4
|
+
export * from './storage/index.js';
|
|
5
|
+
export * from './ai-credentials/index.js';
|
|
6
|
+
export * from './browser-extensions/index.js';
|
|
7
|
+
export * from './browser-profiles/index.js';
|
|
8
|
+
export * from './vault/index.js';
|
|
9
|
+
export * from './updates/index.js';
|
|
10
|
+
export * from './workspaces/index.js';
|
|
11
|
+
export type { BctrlOptions } from './bctrl.js';
|
|
12
|
+
export { Bctrl } from './bctrl.js';
|