@amalgm/browser 0.1.2-preview.35541635545 → 0.1.2-preview.37254096068

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 (390) hide show
  1. package/PURPOSE.md +119 -97
  2. package/README.md +51 -56
  3. package/SECURITY.md +10 -8
  4. package/dist/bin/amalgm-browser-mcp.js +2 -3
  5. package/dist/bin/amalgm-browser-mcp.js.map +1 -1
  6. package/dist/bin/amalgm-browser-rest.js +8 -18
  7. package/dist/bin/amalgm-browser-rest.js.map +1 -1
  8. package/dist/src/account.d.ts +8 -0
  9. package/dist/src/account.js +42 -0
  10. package/dist/src/account.js.map +1 -0
  11. package/dist/src/action.d.ts +1 -2
  12. package/dist/src/action.js +3 -7
  13. package/dist/src/action.js.map +1 -1
  14. package/dist/src/adapters/cli/actions.d.ts +0 -1
  15. package/dist/src/adapters/cli/actions.js +0 -7
  16. package/dist/src/adapters/cli/actions.js.map +1 -1
  17. package/dist/src/adapters/cli/help.d.ts +1 -1
  18. package/dist/src/adapters/cli/help.js +1 -4
  19. package/dist/src/adapters/cli/help.js.map +1 -1
  20. package/dist/src/adapters/cli/resources.js +0 -22
  21. package/dist/src/adapters/cli/resources.js.map +1 -1
  22. package/dist/src/adapters/cli/run.js +25 -19
  23. package/dist/src/adapters/cli/run.js.map +1 -1
  24. package/dist/src/adapters/execute.js +2 -2
  25. package/dist/src/adapters/execute.js.map +1 -1
  26. package/dist/src/adapters/http/events.d.ts +5 -2
  27. package/dist/src/adapters/http/events.js +18 -2
  28. package/dist/src/adapters/http/events.js.map +1 -1
  29. package/dist/src/adapters/http/internal-routes.js +9 -4
  30. package/dist/src/adapters/http/internal-routes.js.map +1 -1
  31. package/dist/src/adapters/http/navigation-stream.d.ts +4 -0
  32. package/dist/src/adapters/http/navigation-stream.js +17 -0
  33. package/dist/src/adapters/http/navigation-stream.js.map +1 -0
  34. package/dist/src/adapters/http/openapi.js +2 -8
  35. package/dist/src/adapters/http/openapi.js.map +1 -1
  36. package/dist/src/adapters/http/server.js +54 -14
  37. package/dist/src/adapters/http/server.js.map +1 -1
  38. package/dist/src/adapters/http/session-routes.js +0 -1
  39. package/dist/src/adapters/http/session-routes.js.map +1 -1
  40. package/dist/src/adapters/http/stream.d.ts +6 -0
  41. package/dist/src/adapters/http/stream.js +89 -0
  42. package/dist/src/adapters/http/stream.js.map +1 -0
  43. package/dist/src/adapters/mcp/server.js +2 -2
  44. package/dist/src/adapters/mcp/server.js.map +1 -1
  45. package/dist/src/adapters/mcp/tools.js +2 -4
  46. package/dist/src/adapters/mcp/tools.js.map +1 -1
  47. package/dist/src/adapters/mcp/types.d.ts +3 -2
  48. package/dist/src/adapters/toolbox/manifest.js +1 -1
  49. package/dist/src/adapters/toolbox/manifest.js.map +1 -1
  50. package/dist/src/auth/login.d.ts +3 -1
  51. package/dist/src/auth/login.js +48 -33
  52. package/dist/src/auth/login.js.map +1 -1
  53. package/dist/src/auth/service.js +56 -67
  54. package/dist/src/auth/service.js.map +1 -1
  55. package/dist/src/{drivers/cdp → cdp}/capture.d.ts +1 -1
  56. package/dist/src/{drivers/cdp → cdp}/capture.js +1 -1
  57. package/dist/src/cdp/capture.js.map +1 -0
  58. package/dist/src/{drivers/cdp → cdp}/client.d.ts +3 -1
  59. package/dist/src/{drivers/cdp → cdp}/client.js +51 -14
  60. package/dist/src/cdp/client.js.map +1 -0
  61. package/dist/src/cdp/input.js.map +1 -0
  62. package/dist/src/cdp/navigation.d.ts +5 -0
  63. package/dist/src/cdp/navigation.js +47 -0
  64. package/dist/src/cdp/navigation.js.map +1 -0
  65. package/dist/src/{drivers/cdp → cdp}/screencast.js +1 -1
  66. package/dist/src/cdp/screencast.js.map +1 -0
  67. package/dist/src/chrome/cookie-adapter.d.ts +23 -0
  68. package/dist/src/chrome/cookie-adapter.js +74 -0
  69. package/dist/src/chrome/cookie-adapter.js.map +1 -0
  70. package/dist/src/chrome/cookie-changes.d.ts +12 -0
  71. package/dist/src/chrome/cookie-changes.js +100 -0
  72. package/dist/src/chrome/cookie-changes.js.map +1 -0
  73. package/dist/src/chrome/cookie-observer.d.ts +20 -0
  74. package/dist/src/chrome/cookie-observer.js +44 -0
  75. package/dist/src/chrome/cookie-observer.js.map +1 -0
  76. package/dist/src/chrome/executable.d.ts +1 -0
  77. package/dist/src/chrome/executable.js +55 -0
  78. package/dist/src/chrome/executable.js.map +1 -0
  79. package/dist/src/chrome/flags.d.ts +7 -0
  80. package/dist/src/chrome/flags.js +59 -0
  81. package/dist/src/chrome/flags.js.map +1 -0
  82. package/dist/src/chrome/host.d.ts +25 -0
  83. package/dist/src/chrome/host.js +137 -0
  84. package/dist/src/chrome/host.js.map +1 -0
  85. package/dist/src/chrome/launch.d.ts +11 -0
  86. package/dist/src/chrome/launch.js +105 -0
  87. package/dist/src/chrome/launch.js.map +1 -0
  88. package/dist/src/chrome/relay/editing.d.ts +2 -0
  89. package/dist/src/chrome/relay/editing.js +14 -0
  90. package/dist/src/chrome/relay/editing.js.map +1 -0
  91. package/dist/src/chrome/relay/server.d.ts +18 -0
  92. package/dist/src/chrome/relay/server.js +120 -0
  93. package/dist/src/chrome/relay/server.js.map +1 -0
  94. package/dist/src/chrome/relay/targets.d.ts +11 -0
  95. package/dist/src/chrome/relay/targets.js +59 -0
  96. package/dist/src/chrome/relay/targets.js.map +1 -0
  97. package/dist/src/chrome/relay/view.d.ts +34 -0
  98. package/dist/src/chrome/relay/view.js +185 -0
  99. package/dist/src/chrome/relay/view.js.map +1 -0
  100. package/dist/src/cookies/adapter-credential.d.ts +6 -0
  101. package/dist/src/cookies/adapter-credential.js +33 -0
  102. package/dist/src/cookies/adapter-credential.js.map +1 -0
  103. package/dist/src/cookies/coordinator.d.ts +14 -13
  104. package/dist/src/cookies/coordinator.js +157 -75
  105. package/dist/src/cookies/coordinator.js.map +1 -1
  106. package/dist/src/cookies/database.d.ts +29 -0
  107. package/dist/src/cookies/database.js +113 -0
  108. package/dist/src/cookies/database.js.map +1 -0
  109. package/dist/src/cookies/diff.d.ts +6 -0
  110. package/dist/src/cookies/diff.js +19 -0
  111. package/dist/src/cookies/diff.js.map +1 -0
  112. package/dist/src/cookies/http-store.d.ts +7 -0
  113. package/dist/src/cookies/http-store.js +105 -0
  114. package/dist/src/cookies/http-store.js.map +1 -0
  115. package/dist/src/cookies/jar.d.ts +12 -11
  116. package/dist/src/cookies/jar.js +128 -120
  117. package/dist/src/cookies/jar.js.map +1 -1
  118. package/dist/src/cookies/policy.js +10 -4
  119. package/dist/src/cookies/policy.js.map +1 -1
  120. package/dist/src/cookies/secret-file.d.ts +4 -0
  121. package/dist/src/cookies/secret-file.js +47 -9
  122. package/dist/src/cookies/secret-file.js.map +1 -1
  123. package/dist/src/cookies/types.d.ts +34 -2
  124. package/dist/src/cookies.d.ts +2 -0
  125. package/dist/src/cookies.js +2 -0
  126. package/dist/src/cookies.js.map +1 -1
  127. package/dist/src/defaults.d.ts +1 -5
  128. package/dist/src/defaults.js +49 -58
  129. package/dist/src/defaults.js.map +1 -1
  130. package/dist/src/driver/cli-policy.d.ts +1 -0
  131. package/dist/src/driver/cli-policy.js +17 -0
  132. package/dist/src/driver/cli-policy.js.map +1 -0
  133. package/dist/src/{drivers/headless → driver}/command.d.ts +3 -7
  134. package/dist/src/{drivers/headless → driver}/command.js +29 -29
  135. package/dist/src/driver/command.js.map +1 -0
  136. package/dist/src/{drivers/headless → driver}/driver.d.ts +13 -10
  137. package/dist/src/{drivers/headless → driver}/driver.js +67 -82
  138. package/dist/src/driver/driver.js.map +1 -0
  139. package/dist/src/{interaction/delta.d.ts → driver/evidence.d.ts} +3 -2
  140. package/dist/src/{interaction/delta.js → driver/evidence.js} +6 -3
  141. package/dist/src/driver/evidence.js.map +1 -0
  142. package/dist/src/driver/executable.js.map +1 -0
  143. package/dist/src/driver/stream.d.ts +1 -0
  144. package/dist/src/driver/stream.js +22 -0
  145. package/dist/src/driver/stream.js.map +1 -0
  146. package/dist/src/driver/wait.d.ts +6 -0
  147. package/dist/src/driver/wait.js +28 -0
  148. package/dist/src/driver/wait.js.map +1 -0
  149. package/dist/src/electron/adblock/cache.js.map +1 -0
  150. package/dist/src/electron/adblock/cosmetics.js.map +1 -0
  151. package/dist/src/{drivers/electron/native → electron}/adblock/index.d.ts +0 -1
  152. package/dist/src/{drivers/electron/native → electron}/adblock/index.js +0 -1
  153. package/dist/src/{drivers/electron/native → electron}/adblock/index.js.map +1 -1
  154. package/dist/src/electron/adblock/policy.js.map +1 -0
  155. package/dist/src/electron/adblock/preload.js.map +1 -0
  156. package/dist/src/electron/adblock/settings.js.map +1 -0
  157. package/dist/src/{drivers/electron/native → electron}/contracts.d.ts +0 -14
  158. package/dist/src/{drivers/electron/native → electron}/contracts.js +0 -1
  159. package/dist/src/electron/contracts.js.map +1 -0
  160. package/dist/src/{drivers/electron → electron}/cookie-adapter.d.ts +4 -4
  161. package/dist/src/{drivers/electron → electron}/cookie-adapter.js +9 -6
  162. package/dist/src/electron/cookie-adapter.js.map +1 -0
  163. package/dist/src/electron/cookie-sync.d.ts +6 -0
  164. package/dist/src/electron/cookie-sync.js +18 -0
  165. package/dist/src/electron/cookie-sync.js.map +1 -0
  166. package/dist/src/electron/policy.js.map +1 -0
  167. package/dist/src/electron/session.d.ts +2 -0
  168. package/dist/src/electron/session.js +9 -0
  169. package/dist/src/electron/session.js.map +1 -0
  170. package/dist/src/electron/shell/adblock-ipc.js.map +1 -0
  171. package/dist/src/electron/shell/context-menu.js.map +1 -0
  172. package/dist/src/electron/shell/downloads.js.map +1 -0
  173. package/dist/src/electron/shell/helpers.js.map +1 -0
  174. package/dist/src/electron/shell/permissions.js.map +1 -0
  175. package/dist/src/{drivers/electron/native → electron}/shell/sites.d.ts +1 -3
  176. package/dist/src/{drivers/electron/native → electron}/shell/sites.js +2 -34
  177. package/dist/src/electron/shell/sites.js.map +1 -0
  178. package/dist/src/{drivers/electron/native → electron}/shell/types.d.ts +0 -1
  179. package/dist/src/electron/shell/types.js.map +1 -0
  180. package/dist/src/electron/shell.d.ts +13 -0
  181. package/dist/src/electron/shell.js +73 -0
  182. package/dist/src/electron/shell.js.map +1 -0
  183. package/dist/src/electron/surface/commands.js.map +1 -0
  184. package/dist/src/{drivers/electron/native → electron}/surface/create.js +0 -6
  185. package/dist/src/electron/surface/create.js.map +1 -0
  186. package/dist/src/{drivers/electron/native → electron}/surface/events.js +1 -13
  187. package/dist/src/electron/surface/events.js.map +1 -0
  188. package/dist/src/{drivers/electron/native → electron}/surface/presentation.d.ts +2 -9
  189. package/dist/src/electron/surface/presentation.js +29 -0
  190. package/dist/src/electron/surface/presentation.js.map +1 -0
  191. package/dist/src/{drivers/electron/native → electron}/surface/state.d.ts +5 -0
  192. package/dist/src/{drivers/electron/native → electron}/surface/state.js +10 -4
  193. package/dist/src/electron/surface/state.js.map +1 -0
  194. package/dist/src/{drivers/electron/native → electron}/surface/types.d.ts +2 -8
  195. package/dist/src/electron/surface/types.js.map +1 -0
  196. package/dist/src/{drivers/electron/native → electron}/surface-controller.js +9 -12
  197. package/dist/src/electron/surface-controller.js.map +1 -0
  198. package/dist/src/electron-preload.cjs +1 -1
  199. package/dist/src/electron.cjs +587 -820
  200. package/dist/src/electron.d.cts +4 -14
  201. package/dist/src/electron.d.ts +4 -14
  202. package/dist/src/electron.js +4 -14
  203. package/dist/src/electron.js.map +1 -1
  204. package/dist/src/errors.d.ts +1 -1
  205. package/dist/src/errors.js.map +1 -1
  206. package/dist/src/index.d.ts +2 -3
  207. package/dist/src/index.js +0 -2
  208. package/dist/src/index.js.map +1 -1
  209. package/dist/src/migration/legacy-migration.d.ts +0 -1
  210. package/dist/src/migration/legacy-migration.js +3 -9
  211. package/dist/src/migration/legacy-migration.js.map +1 -1
  212. package/dist/src/migration/legacy-rows.d.ts +1 -2
  213. package/dist/src/migration/legacy-rows.js +0 -14
  214. package/dist/src/migration/legacy-rows.js.map +1 -1
  215. package/dist/src/ports.d.ts +12 -15
  216. package/dist/src/ports.js.map +1 -1
  217. package/dist/src/process.d.ts +1 -0
  218. package/dist/src/process.js +11 -0
  219. package/dist/src/process.js.map +1 -1
  220. package/dist/src/product-service.d.ts +4 -6
  221. package/dist/src/product-service.js +21 -15
  222. package/dist/src/product-service.js.map +1 -1
  223. package/dist/src/recording/encoder.js +1 -1
  224. package/dist/src/recording/encoder.js.map +1 -1
  225. package/dist/src/recording/service.d.ts +4 -0
  226. package/dist/src/recording/service.js +72 -62
  227. package/dist/src/recording/service.js.map +1 -1
  228. package/dist/src/recording/source.js +1 -1
  229. package/dist/src/recording/source.js.map +1 -1
  230. package/dist/src/registry.d.ts +4 -0
  231. package/dist/src/registry.js +17 -0
  232. package/dist/src/registry.js.map +1 -1
  233. package/dist/src/service-options.d.ts +5 -7
  234. package/dist/src/service.d.ts +16 -18
  235. package/dist/src/service.js +108 -108
  236. package/dist/src/service.js.map +1 -1
  237. package/dist/src/sessions/operations.d.ts +12 -0
  238. package/dist/src/sessions/operations.js +56 -0
  239. package/dist/src/sessions/operations.js.map +1 -0
  240. package/dist/src/testing.d.ts +8 -4
  241. package/dist/src/testing.js +7 -5
  242. package/dist/src/testing.js.map +1 -1
  243. package/dist/src/types.d.ts +0 -39
  244. package/docs/ACTIONS.md +0 -4
  245. package/docs/ARCHITECTURE.md +51 -55
  246. package/docs/AUTHENTICATION.md +41 -36
  247. package/docs/AXIOMS.md +13 -11
  248. package/docs/CHROME.md +143 -0
  249. package/docs/CLI.md +63 -31
  250. package/docs/COMPATIBILITY.md +14 -23
  251. package/docs/COOKIES.md +95 -52
  252. package/docs/ELECTRON_INTEGRATION.md +84 -77
  253. package/docs/EVENTS.md +5 -9
  254. package/docs/MCP.md +10 -6
  255. package/docs/MIGRATION.md +43 -36
  256. package/docs/OPERATIONS.md +48 -40
  257. package/docs/README.md +5 -5
  258. package/docs/REALTIME_BOUNDARY.md +3 -3
  259. package/docs/RECORDING.md +16 -15
  260. package/docs/REST.md +57 -26
  261. package/docs/SDK.md +65 -55
  262. package/docs/SHELL_INTEGRATION.md +78 -36
  263. package/docs/TESTING.md +58 -42
  264. package/docs/TOOLBOX_INTEGRATION.md +9 -4
  265. package/docs/TROUBLESHOOTING.md +68 -40
  266. package/examples/basic.ts +1 -0
  267. package/package.json +8 -15
  268. package/skills/use-amalgm-browser/SKILL.md +16 -29
  269. package/skills/use-amalgm-browser/references/actions.md +2 -2
  270. package/dist/src/adapters/http/profile-routes.d.ts +0 -2
  271. package/dist/src/adapters/http/profile-routes.js +0 -42
  272. package/dist/src/adapters/http/profile-routes.js.map +0 -1
  273. package/dist/src/auth/transport.d.ts +0 -8
  274. package/dist/src/auth/transport.js +0 -45
  275. package/dist/src/auth/transport.js.map +0 -1
  276. package/dist/src/drivers/cdp/capture.js.map +0 -1
  277. package/dist/src/drivers/cdp/client.js.map +0 -1
  278. package/dist/src/drivers/cdp/input.js.map +0 -1
  279. package/dist/src/drivers/cdp/screencast.js.map +0 -1
  280. package/dist/src/drivers/cdp/target.d.ts +0 -4
  281. package/dist/src/drivers/cdp/target.js +0 -34
  282. package/dist/src/drivers/cdp/target.js.map +0 -1
  283. package/dist/src/drivers/electron/advertisement.d.ts +0 -12
  284. package/dist/src/drivers/electron/advertisement.js +0 -57
  285. package/dist/src/drivers/electron/advertisement.js.map +0 -1
  286. package/dist/src/drivers/electron/contracts.d.ts +0 -45
  287. package/dist/src/drivers/electron/contracts.js +0 -10
  288. package/dist/src/drivers/electron/contracts.js.map +0 -1
  289. package/dist/src/drivers/electron/cookie-adapter.js.map +0 -1
  290. package/dist/src/drivers/electron/driver.d.ts +0 -19
  291. package/dist/src/drivers/electron/driver.js +0 -115
  292. package/dist/src/drivers/electron/driver.js.map +0 -1
  293. package/dist/src/drivers/electron/native/adblock/cache.js.map +0 -1
  294. package/dist/src/drivers/electron/native/adblock/cosmetics.js.map +0 -1
  295. package/dist/src/drivers/electron/native/adblock/policy.js.map +0 -1
  296. package/dist/src/drivers/electron/native/adblock/preload.js.map +0 -1
  297. package/dist/src/drivers/electron/native/adblock/settings.js.map +0 -1
  298. package/dist/src/drivers/electron/native/config.d.ts +0 -4
  299. package/dist/src/drivers/electron/native/config.js +0 -9
  300. package/dist/src/drivers/electron/native/config.js.map +0 -1
  301. package/dist/src/drivers/electron/native/contracts.js.map +0 -1
  302. package/dist/src/drivers/electron/native/policy.js.map +0 -1
  303. package/dist/src/drivers/electron/native/session.d.ts +0 -4
  304. package/dist/src/drivers/electron/native/session.js +0 -11
  305. package/dist/src/drivers/electron/native/session.js.map +0 -1
  306. package/dist/src/drivers/electron/native/shell/adblock-ipc.js.map +0 -1
  307. package/dist/src/drivers/electron/native/shell/context-menu.js.map +0 -1
  308. package/dist/src/drivers/electron/native/shell/downloads.js.map +0 -1
  309. package/dist/src/drivers/electron/native/shell/helpers.js.map +0 -1
  310. package/dist/src/drivers/electron/native/shell/permissions.js.map +0 -1
  311. package/dist/src/drivers/electron/native/shell/sites.js.map +0 -1
  312. package/dist/src/drivers/electron/native/shell/types.js.map +0 -1
  313. package/dist/src/drivers/electron/native/shell.d.ts +0 -14
  314. package/dist/src/drivers/electron/native/shell.js +0 -115
  315. package/dist/src/drivers/electron/native/shell.js.map +0 -1
  316. package/dist/src/drivers/electron/native/surface/commands.js.map +0 -1
  317. package/dist/src/drivers/electron/native/surface/create.js.map +0 -1
  318. package/dist/src/drivers/electron/native/surface/events.js.map +0 -1
  319. package/dist/src/drivers/electron/native/surface/presentation.js +0 -87
  320. package/dist/src/drivers/electron/native/surface/presentation.js.map +0 -1
  321. package/dist/src/drivers/electron/native/surface/state.js.map +0 -1
  322. package/dist/src/drivers/electron/native/surface/types.js.map +0 -1
  323. package/dist/src/drivers/electron/native/surface-controller.js.map +0 -1
  324. package/dist/src/drivers/electron/policy.d.ts +0 -4
  325. package/dist/src/drivers/electron/policy.js +0 -39
  326. package/dist/src/drivers/electron/policy.js.map +0 -1
  327. package/dist/src/drivers/electron/session.d.ts +0 -4
  328. package/dist/src/drivers/electron/session.js +0 -5
  329. package/dist/src/drivers/electron/session.js.map +0 -1
  330. package/dist/src/drivers/headless/command.js.map +0 -1
  331. package/dist/src/drivers/headless/cookie-adapter.d.ts +0 -16
  332. package/dist/src/drivers/headless/cookie-adapter.js +0 -59
  333. package/dist/src/drivers/headless/cookie-adapter.js.map +0 -1
  334. package/dist/src/drivers/headless/driver.js.map +0 -1
  335. package/dist/src/drivers/headless/executable.js.map +0 -1
  336. package/dist/src/drivers/headless/screencast.d.ts +0 -3
  337. package/dist/src/drivers/headless/screencast.js +0 -21
  338. package/dist/src/drivers/headless/screencast.js.map +0 -1
  339. package/dist/src/headless.d.ts +0 -3
  340. package/dist/src/headless.js +0 -4
  341. package/dist/src/headless.js.map +0 -1
  342. package/dist/src/interaction/delta.js.map +0 -1
  343. package/dist/src/interaction/typing.d.ts +0 -39
  344. package/dist/src/interaction/typing.js +0 -189
  345. package/dist/src/interaction/typing.js.map +0 -1
  346. package/dist/src/profiles/directories.d.ts +0 -9
  347. package/dist/src/profiles/directories.js +0 -57
  348. package/dist/src/profiles/directories.js.map +0 -1
  349. package/dist/src/profiles/service.d.ts +0 -30
  350. package/dist/src/profiles/service.js +0 -89
  351. package/dist/src/profiles/service.js.map +0 -1
  352. package/dist/src/runtime-selector.d.ts +0 -12
  353. package/dist/src/runtime-selector.js +0 -72
  354. package/dist/src/runtime-selector.js.map +0 -1
  355. package/docs/HEADLESS_RUNTIME.md +0 -58
  356. package/examples/custom-driver.ts +0 -45
  357. /package/dist/src/{drivers/cdp → cdp}/input.d.ts +0 -0
  358. /package/dist/src/{drivers/cdp → cdp}/input.js +0 -0
  359. /package/dist/src/{drivers/cdp → cdp}/screencast.d.ts +0 -0
  360. /package/dist/src/{drivers/headless → driver}/executable.d.ts +0 -0
  361. /package/dist/src/{drivers/headless → driver}/executable.js +0 -0
  362. /package/dist/src/{drivers/electron/native → electron}/adblock/cache.d.ts +0 -0
  363. /package/dist/src/{drivers/electron/native → electron}/adblock/cache.js +0 -0
  364. /package/dist/src/{drivers/electron/native → electron}/adblock/cosmetics.d.ts +0 -0
  365. /package/dist/src/{drivers/electron/native → electron}/adblock/cosmetics.js +0 -0
  366. /package/dist/src/{drivers/electron/native → electron}/adblock/policy.d.ts +0 -0
  367. /package/dist/src/{drivers/electron/native → electron}/adblock/policy.js +0 -0
  368. /package/dist/src/{drivers/electron/native → electron}/adblock/preload.d.ts +0 -0
  369. /package/dist/src/{drivers/electron/native → electron}/adblock/preload.js +0 -0
  370. /package/dist/src/{drivers/electron/native → electron}/adblock/settings.d.ts +0 -0
  371. /package/dist/src/{drivers/electron/native → electron}/adblock/settings.js +0 -0
  372. /package/dist/src/{drivers/electron/native → electron}/policy.d.ts +0 -0
  373. /package/dist/src/{drivers/electron/native → electron}/policy.js +0 -0
  374. /package/dist/src/{drivers/electron/native → electron}/shell/adblock-ipc.d.ts +0 -0
  375. /package/dist/src/{drivers/electron/native → electron}/shell/adblock-ipc.js +0 -0
  376. /package/dist/src/{drivers/electron/native → electron}/shell/context-menu.d.ts +0 -0
  377. /package/dist/src/{drivers/electron/native → electron}/shell/context-menu.js +0 -0
  378. /package/dist/src/{drivers/electron/native → electron}/shell/downloads.d.ts +0 -0
  379. /package/dist/src/{drivers/electron/native → electron}/shell/downloads.js +0 -0
  380. /package/dist/src/{drivers/electron/native → electron}/shell/helpers.d.ts +0 -0
  381. /package/dist/src/{drivers/electron/native → electron}/shell/helpers.js +0 -0
  382. /package/dist/src/{drivers/electron/native → electron}/shell/permissions.d.ts +0 -0
  383. /package/dist/src/{drivers/electron/native → electron}/shell/permissions.js +0 -0
  384. /package/dist/src/{drivers/electron/native → electron}/shell/types.js +0 -0
  385. /package/dist/src/{drivers/electron/native → electron}/surface/commands.d.ts +0 -0
  386. /package/dist/src/{drivers/electron/native → electron}/surface/commands.js +0 -0
  387. /package/dist/src/{drivers/electron/native → electron}/surface/create.d.ts +0 -0
  388. /package/dist/src/{drivers/electron/native → electron}/surface/events.d.ts +0 -0
  389. /package/dist/src/{drivers/electron/native → electron}/surface/types.js +0 -0
  390. /package/dist/src/{drivers/electron/native → electron}/surface-controller.d.ts +0 -0
@@ -1,67 +1,54 @@
1
1
  import { BrowserError, asBrowserError } from './errors.js';
2
- import { assertActionCapability, boundResult, safeOrigin, validateAction } from './action.js';
2
+ import { enrollAccount, LOCAL_ACCOUNT } from './account.js';
3
+ import { boundResult, safeOrigin, validateAction } from './action.js';
3
4
  import { newId, safeId } from './ids.js';
4
- import { BrowserProfileStore } from './profiles/service.js';
5
+ import { BrowserOperations } from './sessions/operations.js';
5
6
  import { BrowserSessionLeases } from './sessions/leases.js';
6
7
  import { staleSessionIds } from './sessions/prune.js';
7
8
  import { sanitizeEventText } from './events.js';
8
9
  export class BrowserService {
9
10
  options;
10
- active = new Map();
11
+ // The signed-in account's profile, which every session browses as.
12
+ account;
13
+ operations = new BrowserOperations();
14
+ opening = new Map();
11
15
  opened = new Set();
12
- profiles;
13
16
  leases;
14
17
  constructor(options) {
15
18
  this.options = options;
16
- this.profiles = new BrowserProfileStore({
17
- registry: options.registry,
18
- ...(options.profileDirectories ? { directories: options.profileDirectories } : {}),
19
- now: () => this.now(),
20
- generate: () => this.generate('profile'),
21
- publish: (profileId) => { void this.publish({ type: 'profile.updated', profileId }); },
22
- });
19
+ this.account = enrollAccount(options.registry, options.account || LOCAL_ACCOUNT, this.now());
23
20
  this.leases = new BrowserSessionLeases(options.registry, options.clock);
24
21
  }
25
22
  async createSession(input = {}) {
26
- const context = input.context || {};
27
- await this.authorize('sessions.create', undefined, context);
28
23
  const id = safeId(input.id || this.generate('session'));
29
- const release = this.leases.acquire(id);
30
- try {
24
+ return this.run(id, 'sessions.create', input.context || {}, async (context) => {
31
25
  const existing = this.findSession(id);
32
26
  if (existing?.status === 'ready') {
33
- if (!this.opened.has(id)) {
34
- await this.options.drivers[existing.backend].open({ session: existing, context });
35
- this.opened.add(id);
36
- }
27
+ await this.reopen(existing, context);
37
28
  return this.getSession(id);
38
29
  }
39
30
  if (existing && ['creating', 'closing'].includes(existing.status)) {
40
31
  throw new BrowserError('CONFLICT', `Session ${id} is ${existing.status}.`);
41
32
  }
42
- const profile = this.profiles.ensure(input.profileId || id, input.profileKind || 'ephemeral');
43
- const backend = this.options.runtimeSelector.select(context);
44
- const driver = this.options.drivers[backend];
33
+ const profileId = this.account.id;
45
34
  const now = this.now();
46
35
  let session = {
47
36
  id,
48
37
  ...(context.ownerId ? { ownerId: context.ownerId } : {}),
49
- profileId: profile.id,
50
- backend,
38
+ profileId,
51
39
  status: 'creating',
52
- capabilities: [...driver.capabilities],
53
40
  createdAt: now,
54
41
  updatedAt: now,
55
42
  lastActiveAt: now,
56
43
  };
57
44
  this.options.registry.putSession(session);
58
- await this.publish({ type: 'session.created', sessionId: id, profileId: profile.id, backend });
45
+ await this.publish({ type: 'session.created', sessionId: id, profileId });
59
46
  try {
60
- await driver.open({ session, context });
47
+ await this.options.driver.open({ session, context });
61
48
  this.opened.add(id);
62
49
  session = { ...session, status: 'ready', updatedAt: this.now(), lastActiveAt: this.now() };
63
50
  this.options.registry.putSession(session);
64
- await this.publish({ type: 'session.ready', sessionId: id, profileId: profile.id, backend });
51
+ await this.publish({ type: 'session.ready', sessionId: id, profileId });
65
52
  return session;
66
53
  }
67
54
  catch (error) {
@@ -69,16 +56,10 @@ export class BrowserService {
69
56
  this.opened.delete(id);
70
57
  session = { ...session, status: 'failed', error: failure.message, updatedAt: this.now() };
71
58
  this.options.registry.putSession(session);
72
- await this.publish({
73
- type: 'session.failed', sessionId: id, profileId: profile.id,
74
- error: sanitizeEventText(failure.message),
75
- });
59
+ await this.publish({ type: 'session.failed', sessionId: id, profileId, error: sanitizeEventText(failure.message) });
76
60
  throw failure;
77
61
  }
78
- }
79
- finally {
80
- release();
81
- }
62
+ });
82
63
  }
83
64
  getSession(id) {
84
65
  const session = this.findSession(id);
@@ -90,73 +71,81 @@ export class BrowserService {
90
71
  return this.options.registry.snapshot().sessions;
91
72
  }
92
73
  async execute(sessionId, action, context = {}) {
93
- const session = this.getSession(sessionId);
94
- if (session.status !== 'ready')
95
- throw new BrowserError('CONFLICT', `Session ${sessionId} is ${session.status}.`);
96
- if (this.active.has(sessionId))
97
- throw new BrowserError('CONFLICT', `Session ${sessionId} already has an active action.`);
98
- await this.authorize(`actions.${action.type}`, sessionId, context);
99
74
  if (action.type === 'close') {
100
- await this.closeSession(sessionId, context);
75
+ await this.run(undefined, 'actions.close', context, current => this.closeSession(sessionId, current), false, sessionId);
101
76
  return { type: 'ok' };
102
77
  }
103
78
  validateAction(action);
104
- assertActionCapability(action, session.capabilities);
105
- const releaseLease = this.leases.acquire(sessionId);
106
- const controller = new AbortController();
107
- const abort = () => controller.abort(context.signal?.reason);
108
- context.signal?.addEventListener('abort', abort, { once: true });
109
- this.active.set(sessionId, controller);
110
- const operationContext = { ...context, signal: controller.signal };
111
- try {
112
- const result = await this.options.drivers[session.backend].execute({ session, context: operationContext }, action);
113
- this.touchSession(session, result);
79
+ return this.runSession(sessionId, `actions.${action.type}`, context, async (input) => {
80
+ const result = await this.options.driver.execute(input, action);
81
+ this.touchSession(input.session, result);
114
82
  if (result.type === 'page' && result.url) {
115
- await this.publish({ type: 'page.navigated', sessionId, profileId: session.profileId, origin: safeOrigin(result.url) });
83
+ await this.publish({ type: 'page.navigated', sessionId, profileId: input.session.profileId, origin: safeOrigin(result.url) });
116
84
  }
117
85
  return boundResult(result);
118
- }
119
- catch (error) {
120
- throw asBrowserError(error);
121
- }
122
- finally {
123
- context.signal?.removeEventListener('abort', abort);
124
- this.active.delete(sessionId);
125
- releaseLease();
126
- }
86
+ });
87
+ }
88
+ async streamUrl(sessionId, context = {}) {
89
+ return this.runSession(sessionId, 'sessions.stream', context, input => this.options.driver.streamUrl(input), false);
90
+ }
91
+ observeNavigation(sessionId, changed, context = {}) {
92
+ return this.runSession(sessionId, 'sessions.stream', context, async (input) => {
93
+ if (this.options.driver.observeNavigation)
94
+ return this.options.driver.observeNavigation(input, changed);
95
+ changed({ canGoBack: false, canGoForward: false });
96
+ return () => { };
97
+ }, false);
98
+ }
99
+ cancel(sessionId) { return this.operations.cancel(safeId(sessionId)); }
100
+ run(sessionId, operation, context, work, exclusive = false, resourceId = sessionId) {
101
+ return this.operations.run(sessionId, context, exclusive, async (current) => {
102
+ const release = sessionId ? this.leases.acquire(sessionId) : () => { };
103
+ try {
104
+ await this.authorize(operation, resourceId, current);
105
+ current.signal?.throwIfAborted();
106
+ return await work(current);
107
+ }
108
+ catch (error) {
109
+ throw asBrowserError(error);
110
+ }
111
+ finally {
112
+ release();
113
+ }
114
+ });
127
115
  }
128
- cancel(sessionId) {
129
- const controller = this.active.get(sessionId);
130
- if (!controller)
131
- return false;
132
- controller.abort(new BrowserError('ABORTED', 'Browser operation was cancelled.'));
133
- return true;
116
+ runSession(sessionId, operation, context, work, exclusive = true) {
117
+ const id = safeId(sessionId);
118
+ return this.run(id, operation, context, async (current) => {
119
+ const session = this.getSession(id);
120
+ if (session.status !== 'ready')
121
+ throw new BrowserError('CONFLICT', `Session ${id} is ${session.status}.`);
122
+ await this.reopen(session, current);
123
+ return work({ session, context: current });
124
+ }, exclusive);
134
125
  }
135
126
  publish(event) {
136
127
  return Promise.resolve(this.options.eventSink.publish({ ...event, version: 1, id: this.generate('event'), at: this.now() }));
137
128
  }
138
129
  async closeSession(sessionId, context = {}) {
139
- const session = this.getSession(sessionId);
140
- await this.authorize('sessions.close', sessionId, context);
141
- const releaseLease = this.leases.acquire(sessionId);
142
- this.cancel(sessionId);
143
- this.opened.delete(sessionId);
144
- const closing = { ...session, status: 'closing', updatedAt: this.now() };
145
- this.options.registry.putSession(closing);
146
- try {
147
- await this.options.drivers[session.backend].close({ session: closing, context }).catch((error) => {
148
- this.options.logger.warn('Browser driver close failed.', { sessionId, error: asBrowserError(error).message });
149
- });
150
- const closed = { ...closing, status: 'closed', updatedAt: this.now() };
151
- this.options.registry.putSession(closed);
152
- await this.publish({ type: 'session.closed', sessionId, profileId: session.profileId, backend: session.backend });
153
- }
154
- finally {
155
- releaseLease();
156
- }
157
- }
158
- createProfile(input) {
159
- return this.profiles.create(input);
130
+ const id = safeId(sessionId);
131
+ return this.run(undefined, 'sessions.close', context, async () => this.operations.retire(id, async () => {
132
+ const release = this.leases.acquire(id);
133
+ try {
134
+ const session = this.getSession(id);
135
+ await this.beforeSessionClose(id);
136
+ this.opened.delete(id);
137
+ const closing = { ...session, status: 'closing', updatedAt: this.now() };
138
+ this.options.registry.putSession(closing);
139
+ await this.options.driver.close({ session: closing, context: {} }).catch((error) => {
140
+ this.options.logger.warn('Browser driver close failed.', { sessionId: id, error: asBrowserError(error).message });
141
+ });
142
+ this.options.registry.putSession({ ...closing, status: 'closed', updatedAt: this.now() });
143
+ await this.publish({ type: 'session.closed', sessionId: id, profileId: session.profileId });
144
+ }
145
+ finally {
146
+ release();
147
+ }
148
+ }), false, id);
160
149
  }
161
150
  pruneSessions(maxAgeMs = 24 * 60 * 60_000) {
162
151
  const removed = staleSessionIds(this.listSessions(), this.options.clock.now(), maxAgeMs);
@@ -164,25 +153,37 @@ export class BrowserService {
164
153
  this.options.registry.deleteSession(id);
165
154
  return removed;
166
155
  }
167
- listProfiles() { return this.profiles.list(); }
168
- getProfile(id) { return this.profiles.get(id); }
169
- updateProfile(id, patch) {
170
- return this.profiles.update(id, patch);
171
- }
172
- inspectProfile(id) {
173
- return this.profiles.inspect(id, this.listSessions(), this.referencedProfileIds());
156
+ // Stops the browser behind every session and releases the registry. Ready
157
+ // sessions reopen on first use in the next service.
158
+ close() {
159
+ return this.operations.close(async () => {
160
+ try {
161
+ await this.beforeClose();
162
+ }
163
+ finally {
164
+ this.opened.clear();
165
+ try {
166
+ await this.options.driver.dispose();
167
+ }
168
+ finally {
169
+ this.options.registry.close?.();
170
+ }
171
+ }
172
+ });
174
173
  }
175
- deleteProfile(id) {
176
- if (this.referencedProfileIds().has(id)) {
177
- throw new BrowserError('CONFLICT', `Browser profile ${id} is still referenced.`);
174
+ async beforeClose() { }
175
+ async beforeSessionClose(_sessionId) { }
176
+ // A ready session from an earlier run is attached once, even with simultaneous viewers.
177
+ async reopen(session, context) {
178
+ if (this.opened.has(session.id))
179
+ return;
180
+ let opening = this.opening.get(session.id);
181
+ if (!opening) {
182
+ opening = this.options.driver.open({ session, context }).then(() => { this.opened.add(session.id); })
183
+ .finally(() => this.opening.delete(session.id));
184
+ this.opening.set(session.id, opening);
178
185
  }
179
- this.profiles.delete(id, this.listSessions());
180
- }
181
- pruneProfiles(maxAgeMs = 7 * 24 * 60 * 60_000) {
182
- return this.profiles.prune(maxAgeMs, this.referencedProfileIds(), this.listSessions());
183
- }
184
- referencedProfileIds() {
185
- return new Set(this.listSessions().filter((value) => !['closed', 'failed'].includes(value.status)).map((value) => value.profileId));
186
+ await opening;
186
187
  }
187
188
  touchSession(session, result) {
188
189
  const now = this.now();
@@ -190,7 +191,6 @@ export class BrowserService {
190
191
  ? { ...session, url: result.url, title: result.title, updatedAt: now, lastActiveAt: now }
191
192
  : { ...session, updatedAt: now, lastActiveAt: now };
192
193
  this.options.registry.putSession(updated);
193
- this.profiles.touch(session.profileId);
194
194
  }
195
195
  findSession(id) {
196
196
  return this.options.registry.snapshot().sessions.find((session) => session.id === safeId(id));
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BrowserRuntimeContext } from '../types.js';
2
+ /** Admission precedes async work; retirement cancels and drains admitted work. */
3
+ export declare class BrowserOperations {
4
+ private readonly pending;
5
+ private readonly retiring;
6
+ private stopped;
7
+ private closing;
8
+ run<T>(sessionId: string | undefined, context: BrowserRuntimeContext, exclusive: boolean, work: (context: BrowserRuntimeContext) => Promise<T>): Promise<T>;
9
+ cancel(sessionId: string): boolean;
10
+ retire(sessionId: string, dispose: () => Promise<void>): Promise<void>;
11
+ close(dispose: () => Promise<void>): Promise<void>;
12
+ }
@@ -0,0 +1,56 @@
1
+ import { BrowserError } from '../errors.js';
2
+ /** Admission precedes async work; retirement cancels and drains admitted work. */
3
+ export class BrowserOperations {
4
+ pending = new Set();
5
+ retiring = new Map();
6
+ stopped = false;
7
+ closing;
8
+ run(sessionId, context, exclusive, work) {
9
+ if (this.stopped || (sessionId && this.retiring.has(sessionId))) {
10
+ return Promise.reject(new BrowserError('CONFLICT', 'The browser or session is closing.'));
11
+ }
12
+ if (exclusive && [...this.pending].some(value => value.exclusive && value.sessionId === sessionId)) {
13
+ return Promise.reject(new BrowserError('CONFLICT', `Session ${sessionId} already has an active action.`));
14
+ }
15
+ const abort = new AbortController();
16
+ const signal = context.signal ? AbortSignal.any([abort.signal, context.signal]) : abort.signal;
17
+ const operation = { sessionId, exclusive, abort, done: Promise.resolve() };
18
+ this.pending.add(operation);
19
+ const check = () => { if (signal.aborted)
20
+ throw new BrowserError('ABORTED', 'Browser operation was cancelled.'); };
21
+ operation.done = Promise.resolve().then(async () => {
22
+ check();
23
+ const result = await work({ ...context, signal });
24
+ check();
25
+ return result;
26
+ }).finally(() => this.pending.delete(operation));
27
+ return operation.done;
28
+ }
29
+ cancel(sessionId) {
30
+ const operations = [...this.pending].filter(value => value.sessionId === sessionId);
31
+ for (const operation of operations)
32
+ operation.abort.abort();
33
+ return operations.length > 0;
34
+ }
35
+ retire(sessionId, dispose) {
36
+ const existing = this.retiring.get(sessionId);
37
+ if (existing)
38
+ return existing;
39
+ this.cancel(sessionId);
40
+ const pending = [...this.pending].filter(value => value.sessionId === sessionId);
41
+ const closing = Promise.allSettled(pending.map(value => value.done)).then(dispose)
42
+ .finally(() => this.retiring.delete(sessionId));
43
+ this.retiring.set(sessionId, closing);
44
+ return closing;
45
+ }
46
+ close(dispose) {
47
+ if (this.closing)
48
+ return this.closing;
49
+ this.stopped = true;
50
+ for (const operation of this.pending)
51
+ operation.abort.abort();
52
+ this.closing = Promise.allSettled([...this.pending].map(value => value.done)).then(dispose);
53
+ return this.closing;
54
+ }
55
+ }
56
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../../src/sessions/operations.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import type { BrowserDriver, BrowserDriverSession } from './ports.js';
2
- import type { BrowserAction, BrowserActionResult, BrowserBackendKind, BrowserCapability } from './types.js';
2
+ import type { BrowserAction, BrowserActionResult } from './types.js';
3
3
  export { MemoryBrowserRegistry } from './registry.js';
4
4
  export declare class TestBrowserDriver implements BrowserDriver {
5
- readonly kind: BrowserBackendKind;
6
- readonly capabilities: readonly BrowserCapability[];
7
5
  readonly handler: (action: BrowserAction) => BrowserActionResult | Promise<BrowserActionResult>;
8
6
  readonly calls: Array<{
9
7
  sessionId: string;
@@ -11,8 +9,14 @@ export declare class TestBrowserDriver implements BrowserDriver {
11
9
  }>;
12
10
  readonly opened: string[];
13
11
  readonly closed: string[];
14
- constructor(kind?: BrowserBackendKind, capabilities?: readonly BrowserCapability[], handler?: (action: BrowserAction) => BrowserActionResult | Promise<BrowserActionResult>);
12
+ disposed: boolean;
13
+ constructor(handler?: (action: BrowserAction) => BrowserActionResult | Promise<BrowserActionResult>);
15
14
  open(input: BrowserDriverSession): Promise<void>;
16
15
  execute(input: BrowserDriverSession, action: BrowserAction): Promise<BrowserActionResult>;
17
16
  close(input: BrowserDriverSession): Promise<void>;
17
+ saveState(_input: BrowserDriverSession): Promise<unknown>;
18
+ loadState(_input: BrowserDriverSession, _state: unknown): Promise<void>;
19
+ startScreencast(): Promise<() => Promise<void>>;
20
+ streamUrl(input: BrowserDriverSession): Promise<string>;
21
+ dispose(): Promise<void>;
18
22
  }
@@ -1,14 +1,11 @@
1
1
  export { MemoryBrowserRegistry } from './registry.js';
2
2
  export class TestBrowserDriver {
3
- kind;
4
- capabilities;
5
3
  handler;
6
4
  calls = [];
7
5
  opened = [];
8
6
  closed = [];
9
- constructor(kind = 'headless', capabilities = ['core', 'computer-use'], handler = () => ({ type: 'ok' })) {
10
- this.kind = kind;
11
- this.capabilities = capabilities;
7
+ disposed = false;
8
+ constructor(handler = () => ({ type: 'ok' })) {
12
9
  this.handler = handler;
13
10
  }
14
11
  async open(input) { this.opened.push(input.session.id); }
@@ -17,5 +14,10 @@ export class TestBrowserDriver {
17
14
  return this.handler(action);
18
15
  }
19
16
  async close(input) { this.closed.push(input.session.id); }
17
+ async saveState(_input) { return { cookies: [], origins: [] }; }
18
+ async loadState(_input, _state) { }
19
+ async startScreencast() { return async () => { }; }
20
+ async streamUrl(input) { return `ws://127.0.0.1:0/${input.session.id}`; }
21
+ async dispose() { this.disposed = true; }
20
22
  }
21
23
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,OAAO,iBAAiB;IAMjB;IACA;IACA;IAPF,KAAK,GAAwD,EAAE,CAAC;IAChE,MAAM,GAAa,EAAE,CAAC;IACtB,MAAM,GAAa,EAAE,CAAC;IAE/B,YACW,OAA2B,UAAU,EACrC,eAA6C,CAAC,MAAM,EAAE,cAAc,CAAC,EACrE,UACP,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAHf,SAAI,GAAJ,IAAI,CAAiC;QACrC,iBAAY,GAAZ,YAAY,CAAyD;QACrE,YAAO,GAAP,OAAO,CACQ;IACvB,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,KAA2B,IAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,CAAC,OAAO,CAAC,KAA2B,EAAE,MAAqB;QAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,KAA2B,IAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAChG"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,OAAO,iBAAiB;IAOjB;IANF,KAAK,GAAwD,EAAE,CAAC;IAChE,MAAM,GAAa,EAAE,CAAC;IACtB,MAAM,GAAa,EAAE,CAAC;IAC/B,QAAQ,GAAG,KAAK,CAAC;IAEjB,YACW,UACP,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QADf,YAAO,GAAP,OAAO,CACQ;IACvB,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,KAA2B,IAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,CAAC,OAAO,CAAC,KAA2B,EAAE,MAAqB;QAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,KAA2B,IAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/F,KAAK,CAAC,SAAS,CAAC,MAA4B,IAAsB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACxG,KAAK,CAAC,SAAS,CAAC,MAA4B,EAAE,MAAe,IAAkB,CAAC;IAChF,KAAK,CAAC,eAAe,KAAmC,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;IAChF,KAAK,CAAC,SAAS,CAAC,KAA2B,IAAqB,OAAO,oBAAoB,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChH,KAAK,CAAC,OAAO,KAAoB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;CACzD"}
@@ -1,5 +1,3 @@
1
- export type BrowserBackendKind = 'electron' | 'headless';
2
- export type BrowserCapability = 'core' | 'computer-use' | 'recording' | 'auth' | 'full-page-capture' | 'ad-blocking' | 'visible-surface' | 'live-login';
3
1
  export type BrowserSessionStatus = 'creating' | 'ready' | 'closing' | 'closed' | 'failed';
4
2
  export type BrowserProfileKind = 'durable' | 'ephemeral';
5
3
  export interface BrowserRuntimeContext {
@@ -20,19 +18,11 @@ export interface BrowserProfile {
20
18
  updatedAt: string;
21
19
  lastUsedAt: string;
22
20
  }
23
- export interface BrowserProfileStatus {
24
- profile: BrowserProfile;
25
- live: boolean;
26
- referenced: boolean;
27
- locked: boolean;
28
- }
29
21
  export interface BrowserSession {
30
22
  id: string;
31
23
  ownerId?: string;
32
24
  profileId: string;
33
- backend: BrowserBackendKind;
34
25
  status: BrowserSessionStatus;
35
- capabilities: BrowserCapability[];
36
26
  createdAt: string;
37
27
  updatedAt: string;
38
28
  lastActiveAt: string;
@@ -201,19 +191,12 @@ export type BrowserEvent = {
201
191
  profileId?: string;
202
192
  } & ({
203
193
  type: 'session.created' | 'session.ready' | 'session.closed';
204
- backend: BrowserBackendKind;
205
194
  } | {
206
195
  type: 'session.failed';
207
196
  error: string;
208
197
  } | {
209
198
  type: 'page.navigated';
210
199
  origin: string;
211
- } | {
212
- type: 'page.failed';
213
- origin: string;
214
- errorCode: number;
215
- } | {
216
- type: 'profile.updated';
217
200
  } | {
218
201
  type: 'recording.started' | 'recording.stopped';
219
202
  recordingId: string;
@@ -224,19 +207,6 @@ export type BrowserEvent = {
224
207
  } | {
225
208
  type: 'cookie-jar.changed';
226
209
  versionToken: string;
227
- } | {
228
- type: 'surface.requested' | 'surface.bound' | 'surface.updated' | 'surface.lost';
229
- surfaceId?: string;
230
- } | {
231
- type: 'download.updated';
232
- downloadId: string;
233
- state: string;
234
- receivedBytes: number;
235
- totalBytes: number;
236
- } | {
237
- type: 'permission.requested';
238
- permission: string;
239
- origin: string;
240
210
  });
241
211
  export type BrowserEventInput = BrowserEvent extends infer Event ? Event extends BrowserEvent ? Omit<Event, 'version' | 'id' | 'at'> : never : never;
242
212
  export interface BrowserAuthBundle {
@@ -262,12 +232,3 @@ export interface BrowserLoginSession {
262
232
  updatedAt: string;
263
233
  authBundleId?: string;
264
234
  }
265
- export interface BrowserHostAdvertisement {
266
- protocol: number;
267
- backend: 'electron';
268
- pid: number;
269
- cdpUrl: string;
270
- targetTypes: Array<'page' | 'webview'>;
271
- createdAt?: string;
272
- file?: string;
273
- }
package/docs/ACTIONS.md CHANGED
@@ -21,7 +21,3 @@ use browser-scoped CUA for canvas, WebGL, image-only, or hostile custom UI.
21
21
  `cua.operation.kind` is one of `screenshot`, `click`, `double_click`, `move`,
22
22
  `scroll`, `type`, `keypress`, or `drag`. Coordinates are CSS pixels and map
23
23
  1:1 to returned viewport screenshots.
24
-
25
- Backends advertise capability groups. Core semantics are never approximated
26
- when a backend lacks `computer-use`, `recording`, `auth`, full-page capture,
27
- visible surfaces, live login, or native ad blocking.