@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.
Files changed (260) hide show
  1. package/README.md +75 -0
  2. package/dist/agents/browser-use/index.d.ts +1 -0
  3. package/dist/agents/browser-use/index.js +9 -0
  4. package/dist/agents/browser-use/namespace.d.ts +39 -0
  5. package/dist/agents/browser-use/namespace.js +93 -0
  6. package/dist/agents/index.d.ts +2 -0
  7. package/dist/agents/index.js +17 -0
  8. package/dist/agents/stagehand/core.d.ts +93 -0
  9. package/dist/agents/stagehand/core.js +144 -0
  10. package/dist/agents/stagehand/index.d.ts +3 -0
  11. package/dist/agents/stagehand/index.js +24 -0
  12. package/dist/agents/stagehand/namespace.d.ts +51 -0
  13. package/dist/agents/stagehand/namespace.js +65 -0
  14. package/dist/ai-credentials/client.d.ts +12 -0
  15. package/dist/ai-credentials/client.js +70 -0
  16. package/dist/ai-credentials/index.d.ts +1 -0
  17. package/dist/ai-credentials/index.js +1 -0
  18. package/dist/base/event-binding.d.ts +7 -0
  19. package/dist/base/event-binding.js +23 -0
  20. package/dist/base/types.d.ts +109 -0
  21. package/dist/base/types.js +4 -0
  22. package/dist/bctrl.d.ts +37 -0
  23. package/dist/bctrl.js +77 -0
  24. package/dist/browser-extensions/client.d.ts +15 -0
  25. package/dist/browser-extensions/client.js +72 -0
  26. package/dist/browser-extensions/index.d.ts +2 -0
  27. package/dist/browser-extensions/index.js +1 -0
  28. package/dist/browser-profiles/client.d.ts +11 -0
  29. package/dist/browser-profiles/client.js +63 -0
  30. package/dist/browser-profiles/index.d.ts +1 -0
  31. package/dist/browser-profiles/index.js +1 -0
  32. package/dist/captcha/index.d.ts +1 -0
  33. package/dist/captcha/index.js +1 -0
  34. package/dist/captcha/namespace.d.ts +34 -0
  35. package/dist/captcha/namespace.js +41 -0
  36. package/dist/client/index.d.ts +1 -0
  37. package/dist/client/index.js +1 -0
  38. package/dist/client/rpc.d.ts +83 -0
  39. package/dist/client/rpc.js +354 -0
  40. package/dist/config.d.ts +5 -0
  41. package/dist/config.js +28 -0
  42. package/dist/constants/browser.d.ts +2 -0
  43. package/dist/constants/browser.js +1 -0
  44. package/dist/contracts/agent-tools.d.ts +45 -0
  45. package/dist/contracts/agent-tools.js +31 -0
  46. package/dist/contracts/automation.d.ts +265 -0
  47. package/dist/contracts/automation.js +109 -0
  48. package/dist/contracts/browser-management.d.ts +179 -0
  49. package/dist/contracts/browser-management.js +95 -0
  50. package/dist/contracts/browser-use.d.ts +136 -0
  51. package/dist/contracts/browser-use.js +93 -0
  52. package/dist/contracts/captcha.d.ts +114 -0
  53. package/dist/contracts/captcha.js +40 -0
  54. package/dist/contracts/desktop.d.ts +223 -0
  55. package/dist/contracts/desktop.js +121 -0
  56. package/dist/contracts/drivers/playwright.d.ts +2008 -0
  57. package/dist/contracts/drivers/playwright.js +2033 -0
  58. package/dist/contracts/drivers/puppeteer.d.ts +1221 -0
  59. package/dist/contracts/drivers/puppeteer.js +941 -0
  60. package/dist/contracts/drivers/selenium.d.ts +156 -0
  61. package/dist/contracts/drivers/selenium.js +61 -0
  62. package/dist/contracts/drivers/stagehand.d.ts +155 -0
  63. package/dist/contracts/drivers/stagehand.js +7 -0
  64. package/dist/contracts/extensions.d.ts +13 -0
  65. package/dist/contracts/extensions.js +9 -0
  66. package/dist/contracts/index.d.ts +13 -0
  67. package/dist/contracts/index.js +13 -0
  68. package/dist/contracts/public-api.d.ts +360 -0
  69. package/dist/contracts/public-api.js +17 -0
  70. package/dist/contracts/runtime.d.ts +81 -0
  71. package/dist/contracts/runtime.js +16 -0
  72. package/dist/contracts/stagehand.d.ts +253 -0
  73. package/dist/contracts/stagehand.js +145 -0
  74. package/dist/contracts/storage.d.ts +51 -0
  75. package/dist/contracts/storage.js +56 -0
  76. package/dist/contracts/vault.d.ts +119 -0
  77. package/dist/contracts/vault.js +112 -0
  78. package/dist/contracts/version.d.ts +3 -0
  79. package/dist/contracts/version.js +16 -0
  80. package/dist/desktop.d.ts +2 -0
  81. package/dist/desktop.js +3 -0
  82. package/dist/drivers/desktop/index.d.ts +65 -0
  83. package/dist/drivers/desktop/index.js +68 -0
  84. package/dist/drivers/desktop/session.d.ts +313 -0
  85. package/dist/drivers/desktop/session.js +432 -0
  86. package/dist/drivers/playwright/event-emitter.d.ts +160 -0
  87. package/dist/drivers/playwright/event-emitter.js +297 -0
  88. package/dist/drivers/playwright/generated/api-request-context.d.ts +137 -0
  89. package/dist/drivers/playwright/generated/api-request-context.js +154 -0
  90. package/dist/drivers/playwright/generated/api-response.d.ts +119 -0
  91. package/dist/drivers/playwright/generated/api-response.js +123 -0
  92. package/dist/drivers/playwright/generated/browser-context.d.ts +284 -0
  93. package/dist/drivers/playwright/generated/browser-context.js +458 -0
  94. package/dist/drivers/playwright/generated/browser.d.ts +120 -0
  95. package/dist/drivers/playwright/generated/browser.js +151 -0
  96. package/dist/drivers/playwright/generated/clock.d.ts +80 -0
  97. package/dist/drivers/playwright/generated/clock.js +94 -0
  98. package/dist/drivers/playwright/generated/console-message.d.ts +94 -0
  99. package/dist/drivers/playwright/generated/console-message.js +89 -0
  100. package/dist/drivers/playwright/generated/coverage.d.ts +57 -0
  101. package/dist/drivers/playwright/generated/coverage.js +66 -0
  102. package/dist/drivers/playwright/generated/dialog.d.ts +79 -0
  103. package/dist/drivers/playwright/generated/dialog.js +80 -0
  104. package/dist/drivers/playwright/generated/element-handle.d.ts +399 -0
  105. package/dist/drivers/playwright/generated/element-handle.js +501 -0
  106. package/dist/drivers/playwright/generated/frame-locator.d.ts +34 -0
  107. package/dist/drivers/playwright/generated/frame-locator.js +63 -0
  108. package/dist/drivers/playwright/generated/frame.d.ts +557 -0
  109. package/dist/drivers/playwright/generated/frame.js +634 -0
  110. package/dist/drivers/playwright/generated/js-handle.d.ts +72 -0
  111. package/dist/drivers/playwright/generated/js-handle.js +92 -0
  112. package/dist/drivers/playwright/generated/keyboard.d.ts +103 -0
  113. package/dist/drivers/playwright/generated/keyboard.js +113 -0
  114. package/dist/drivers/playwright/generated/locator.d.ts +795 -0
  115. package/dist/drivers/playwright/generated/locator.js +974 -0
  116. package/dist/drivers/playwright/generated/mouse.d.ts +97 -0
  117. package/dist/drivers/playwright/generated/mouse.js +109 -0
  118. package/dist/drivers/playwright/generated/page.d.ts +762 -0
  119. package/dist/drivers/playwright/generated/page.js +988 -0
  120. package/dist/drivers/playwright/generated/touchscreen.d.ts +34 -0
  121. package/dist/drivers/playwright/generated/touchscreen.js +37 -0
  122. package/dist/drivers/playwright/generated/tracing.d.ts +78 -0
  123. package/dist/drivers/playwright/generated/tracing.js +80 -0
  124. package/dist/drivers/playwright/generated/worker.d.ts +53 -0
  125. package/dist/drivers/playwright/generated/worker.js +59 -0
  126. package/dist/drivers/playwright/index.d.ts +19 -0
  127. package/dist/drivers/playwright/index.js +20 -0
  128. package/dist/drivers/playwright/remote-base.d.ts +62 -0
  129. package/dist/drivers/playwright/remote-base.js +86 -0
  130. package/dist/drivers/playwright/types.d.ts +148 -0
  131. package/dist/drivers/playwright/types.js +8 -0
  132. package/dist/drivers/puppeteer/errors.d.ts +50 -0
  133. package/dist/drivers/puppeteer/errors.js +71 -0
  134. package/dist/drivers/puppeteer/event-emitter.d.ts +145 -0
  135. package/dist/drivers/puppeteer/event-emitter.js +259 -0
  136. package/dist/drivers/puppeteer/generated/accessibility.d.ts +77 -0
  137. package/dist/drivers/puppeteer/generated/accessibility.js +74 -0
  138. package/dist/drivers/puppeteer/generated/browser-context.d.ts +116 -0
  139. package/dist/drivers/puppeteer/generated/browser-context.js +168 -0
  140. package/dist/drivers/puppeteer/generated/browser.d.ts +169 -0
  141. package/dist/drivers/puppeteer/generated/browser.js +246 -0
  142. package/dist/drivers/puppeteer/generated/console-message.d.ts +54 -0
  143. package/dist/drivers/puppeteer/generated/console-message.js +69 -0
  144. package/dist/drivers/puppeteer/generated/coverage.d.ts +49 -0
  145. package/dist/drivers/puppeteer/generated/coverage.js +57 -0
  146. package/dist/drivers/puppeteer/generated/dialog.d.ts +46 -0
  147. package/dist/drivers/puppeteer/generated/dialog.js +60 -0
  148. package/dist/drivers/puppeteer/generated/element-handle.d.ts +261 -0
  149. package/dist/drivers/puppeteer/generated/element-handle.js +341 -0
  150. package/dist/drivers/puppeteer/generated/file-chooser.d.ts +34 -0
  151. package/dist/drivers/puppeteer/generated/file-chooser.js +43 -0
  152. package/dist/drivers/puppeteer/generated/frame.d.ts +221 -0
  153. package/dist/drivers/puppeteer/generated/frame.js +302 -0
  154. package/dist/drivers/puppeteer/generated/http-request.d.ts +195 -0
  155. package/dist/drivers/puppeteer/generated/http-request.js +243 -0
  156. package/dist/drivers/puppeteer/generated/http-response.d.ts +142 -0
  157. package/dist/drivers/puppeteer/generated/http-response.js +169 -0
  158. package/dist/drivers/puppeteer/generated/js-handle.d.ts +104 -0
  159. package/dist/drivers/puppeteer/generated/js-handle.js +125 -0
  160. package/dist/drivers/puppeteer/generated/keyboard.d.ts +79 -0
  161. package/dist/drivers/puppeteer/generated/keyboard.js +89 -0
  162. package/dist/drivers/puppeteer/generated/locator.d.ts +141 -0
  163. package/dist/drivers/puppeteer/generated/locator.js +164 -0
  164. package/dist/drivers/puppeteer/generated/mouse.d.ts +74 -0
  165. package/dist/drivers/puppeteer/generated/mouse.js +94 -0
  166. package/dist/drivers/puppeteer/generated/page.d.ts +604 -0
  167. package/dist/drivers/puppeteer/generated/page.js +776 -0
  168. package/dist/drivers/puppeteer/generated/target.d.ts +105 -0
  169. package/dist/drivers/puppeteer/generated/target.js +123 -0
  170. package/dist/drivers/puppeteer/generated/touchscreen.d.ts +87 -0
  171. package/dist/drivers/puppeteer/generated/touchscreen.js +103 -0
  172. package/dist/drivers/puppeteer/generated/tracing.d.ts +38 -0
  173. package/dist/drivers/puppeteer/generated/tracing.js +43 -0
  174. package/dist/drivers/puppeteer/generated/web-worker.d.ts +63 -0
  175. package/dist/drivers/puppeteer/generated/web-worker.js +73 -0
  176. package/dist/drivers/puppeteer/index.d.ts +21 -0
  177. package/dist/drivers/puppeteer/index.js +23 -0
  178. package/dist/drivers/puppeteer/remote-base.d.ts +57 -0
  179. package/dist/drivers/puppeteer/remote-base.js +79 -0
  180. package/dist/drivers/puppeteer/types.d.ts +178 -0
  181. package/dist/drivers/puppeteer/types.js +8 -0
  182. package/dist/drivers/selenium/driver.d.ts +28 -0
  183. package/dist/drivers/selenium/driver.js +169 -0
  184. package/dist/drivers/selenium/element.d.ts +34 -0
  185. package/dist/drivers/selenium/element.js +73 -0
  186. package/dist/drivers/selenium/index.d.ts +3 -0
  187. package/dist/drivers/selenium/index.js +5 -0
  188. package/dist/drivers/selenium/types.d.ts +2 -0
  189. package/dist/drivers/selenium/types.js +12 -0
  190. package/dist/drivers/stagehand/generated/context.d.ts +127 -0
  191. package/dist/drivers/stagehand/generated/context.js +153 -0
  192. package/dist/drivers/stagehand/generated/locator.d.ts +324 -0
  193. package/dist/drivers/stagehand/generated/locator.js +368 -0
  194. package/dist/drivers/stagehand/generated/page.d.ts +377 -0
  195. package/dist/drivers/stagehand/generated/page.js +439 -0
  196. package/dist/drivers/stagehand/generated/response.d.ts +197 -0
  197. package/dist/drivers/stagehand/generated/response.js +232 -0
  198. package/dist/drivers/stagehand/index.d.ts +5 -0
  199. package/dist/drivers/stagehand/index.js +8 -0
  200. package/dist/drivers/stagehand/types.d.ts +1 -0
  201. package/dist/drivers/stagehand/types.js +7 -0
  202. package/dist/errors.d.ts +47 -0
  203. package/dist/errors.js +157 -0
  204. package/dist/extensions/client.d.ts +47 -0
  205. package/dist/extensions/client.js +154 -0
  206. package/dist/extensions/index.d.ts +1 -0
  207. package/dist/extensions/index.js +1 -0
  208. package/dist/index.d.ts +12 -0
  209. package/dist/index.js +23 -0
  210. package/dist/internal/dev-client.d.ts +5 -0
  211. package/dist/internal/dev-client.js +9 -0
  212. package/dist/internal/rpc-targets.d.ts +17 -0
  213. package/dist/internal/rpc-targets.js +58 -0
  214. package/dist/internal/serialization.d.ts +32 -0
  215. package/dist/internal/serialization.js +42 -0
  216. package/dist/internal/transport.d.ts +24 -0
  217. package/dist/internal/transport.js +29 -0
  218. package/dist/playwright.d.ts +1 -0
  219. package/dist/playwright.js +2 -0
  220. package/dist/puppeteer.d.ts +1 -0
  221. package/dist/puppeteer.js +2 -0
  222. package/dist/selenium.d.ts +1 -0
  223. package/dist/selenium.js +2 -0
  224. package/dist/stagehand.d.ts +1 -0
  225. package/dist/stagehand.js +2 -0
  226. package/dist/storage/client.d.ts +151 -0
  227. package/dist/storage/client.js +329 -0
  228. package/dist/storage/index.d.ts +2 -0
  229. package/dist/storage/index.js +4 -0
  230. package/dist/telemetry.d.ts +18 -0
  231. package/dist/telemetry.js +93 -0
  232. package/dist/updates/client.d.ts +8 -0
  233. package/dist/updates/client.js +128 -0
  234. package/dist/updates/index.d.ts +1 -0
  235. package/dist/updates/index.js +1 -0
  236. package/dist/utils/http.d.ts +39 -0
  237. package/dist/utils/http.js +88 -0
  238. package/dist/utils/index.d.ts +4 -0
  239. package/dist/utils/index.js +4 -0
  240. package/dist/utils/logger.d.ts +27 -0
  241. package/dist/utils/logger.js +74 -0
  242. package/dist/utils/schema.d.ts +17 -0
  243. package/dist/utils/schema.js +31 -0
  244. package/dist/utils/url.d.ts +5 -0
  245. package/dist/utils/url.js +7 -0
  246. package/dist/vault/client.d.ts +43 -0
  247. package/dist/vault/client.js +123 -0
  248. package/dist/vault/index.d.ts +1 -0
  249. package/dist/vault/index.js +1 -0
  250. package/dist/version.d.ts +1 -0
  251. package/dist/version.js +4 -0
  252. package/dist/workspaces/browser-runtime.d.ts +251 -0
  253. package/dist/workspaces/browser-runtime.js +1025 -0
  254. package/dist/workspaces/client.d.ts +48 -0
  255. package/dist/workspaces/client.js +222 -0
  256. package/dist/workspaces/index.d.ts +2 -0
  257. package/dist/workspaces/index.js +2 -0
  258. package/dist/workspaces/runtime-event-pump.d.ts +65 -0
  259. package/dist/workspaces/runtime-event-pump.js +716 -0
  260. 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 {};
@@ -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';
@@ -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';