@opentabs-dev/browser-extension 0.0.34

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 (305) hide show
  1. package/dist/background-log-state.d.ts +10 -0
  2. package/dist/background-log-state.d.ts.map +1 -0
  3. package/dist/background-log-state.js +11 -0
  4. package/dist/background-log-state.js.map +1 -0
  5. package/dist/background-message-handlers.d.ts +41 -0
  6. package/dist/background-message-handlers.d.ts.map +1 -0
  7. package/dist/background-message-handlers.js +214 -0
  8. package/dist/background-message-handlers.js.map +1 -0
  9. package/dist/background.d.ts +2 -0
  10. package/dist/background.d.ts.map +1 -0
  11. package/dist/background.js +3780 -0
  12. package/dist/background.js.map +1 -0
  13. package/dist/bg-log-state.d.ts +10 -0
  14. package/dist/bg-log-state.d.ts.map +1 -0
  15. package/dist/bg-log-state.js +11 -0
  16. package/dist/bg-log-state.js.map +1 -0
  17. package/dist/browser-commands/content-commands.d.ts +25 -0
  18. package/dist/browser-commands/content-commands.d.ts.map +1 -0
  19. package/dist/browser-commands/content-commands.js +166 -0
  20. package/dist/browser-commands/content-commands.js.map +1 -0
  21. package/dist/browser-commands/cookie-commands.d.ts +14 -0
  22. package/dist/browser-commands/cookie-commands.d.ts.map +1 -0
  23. package/dist/browser-commands/cookie-commands.js +99 -0
  24. package/dist/browser-commands/cookie-commands.js.map +1 -0
  25. package/dist/browser-commands/extension-commands.d.ts +12 -0
  26. package/dist/browser-commands/extension-commands.d.ts.map +1 -0
  27. package/dist/browser-commands/extension-commands.js +386 -0
  28. package/dist/browser-commands/extension-commands.js.map +1 -0
  29. package/dist/browser-commands/helpers.d.ts +35 -0
  30. package/dist/browser-commands/helpers.d.ts.map +1 -0
  31. package/dist/browser-commands/helpers.js +121 -0
  32. package/dist/browser-commands/helpers.js.map +1 -0
  33. package/dist/browser-commands/index.d.ts +11 -0
  34. package/dist/browser-commands/index.d.ts.map +1 -0
  35. package/dist/browser-commands/index.js +10 -0
  36. package/dist/browser-commands/index.js.map +1 -0
  37. package/dist/browser-commands/interaction-commands.d.ts +23 -0
  38. package/dist/browser-commands/interaction-commands.d.ts.map +1 -0
  39. package/dist/browser-commands/interaction-commands.js +353 -0
  40. package/dist/browser-commands/interaction-commands.js.map +1 -0
  41. package/dist/browser-commands/key-press-command.d.ts +2 -0
  42. package/dist/browser-commands/key-press-command.d.ts.map +1 -0
  43. package/dist/browser-commands/key-press-command.js +144 -0
  44. package/dist/browser-commands/key-press-command.js.map +1 -0
  45. package/dist/browser-commands/network-commands.d.ts +6 -0
  46. package/dist/browser-commands/network-commands.d.ts.map +1 -0
  47. package/dist/browser-commands/network-commands.js +69 -0
  48. package/dist/browser-commands/network-commands.js.map +1 -0
  49. package/dist/browser-commands/resource-commands.d.ts +37 -0
  50. package/dist/browser-commands/resource-commands.d.ts.map +1 -0
  51. package/dist/browser-commands/resource-commands.js +153 -0
  52. package/dist/browser-commands/resource-commands.js.map +1 -0
  53. package/dist/browser-commands/scroll-command.d.ts +2 -0
  54. package/dist/browser-commands/scroll-command.d.ts.map +1 -0
  55. package/dist/browser-commands/scroll-command.js +133 -0
  56. package/dist/browser-commands/scroll-command.js.map +1 -0
  57. package/dist/browser-commands/tab-commands.d.ts +33 -0
  58. package/dist/browser-commands/tab-commands.d.ts.map +1 -0
  59. package/dist/browser-commands/tab-commands.js +121 -0
  60. package/dist/browser-commands/tab-commands.js.map +1 -0
  61. package/dist/browser-commands.d.ts +36 -0
  62. package/dist/browser-commands.d.ts.map +1 -0
  63. package/dist/browser-commands.js +1931 -0
  64. package/dist/browser-commands.js.map +1 -0
  65. package/dist/confirmation-badge.d.ts +17 -0
  66. package/dist/confirmation-badge.d.ts.map +1 -0
  67. package/dist/confirmation-badge.js +64 -0
  68. package/dist/confirmation-badge.js.map +1 -0
  69. package/dist/constants.d.ts +79 -0
  70. package/dist/constants.d.ts.map +1 -0
  71. package/dist/constants.js +79 -0
  72. package/dist/constants.js.map +1 -0
  73. package/dist/dispatch-helpers.d.ts +61 -0
  74. package/dist/dispatch-helpers.d.ts.map +1 -0
  75. package/dist/dispatch-helpers.js +149 -0
  76. package/dist/dispatch-helpers.js.map +1 -0
  77. package/dist/extension-messages.d.ts +146 -0
  78. package/dist/extension-messages.d.ts.map +1 -0
  79. package/dist/extension-messages.js +2 -0
  80. package/dist/extension-messages.js.map +1 -0
  81. package/dist/iife-injection.d.ts +55 -0
  82. package/dist/iife-injection.d.ts.map +1 -0
  83. package/dist/iife-injection.js +474 -0
  84. package/dist/iife-injection.js.map +1 -0
  85. package/dist/json-rpc-errors.d.ts +8 -0
  86. package/dist/json-rpc-errors.d.ts.map +1 -0
  87. package/dist/json-rpc-errors.js +8 -0
  88. package/dist/json-rpc-errors.js.map +1 -0
  89. package/dist/known-methods.d.ts +19 -0
  90. package/dist/known-methods.d.ts.map +1 -0
  91. package/dist/known-methods.js +68 -0
  92. package/dist/known-methods.js.map +1 -0
  93. package/dist/log-collector.d.ts +45 -0
  94. package/dist/log-collector.d.ts.map +1 -0
  95. package/dist/log-collector.js +99 -0
  96. package/dist/log-collector.js.map +1 -0
  97. package/dist/message-router.d.ts +28 -0
  98. package/dist/message-router.d.ts.map +1 -0
  99. package/dist/message-router.js +367 -0
  100. package/dist/message-router.js.map +1 -0
  101. package/dist/messaging.d.ts +15 -0
  102. package/dist/messaging.d.ts.map +1 -0
  103. package/dist/messaging.js +41 -0
  104. package/dist/messaging.js.map +1 -0
  105. package/dist/network-capture.d.ts +56 -0
  106. package/dist/network-capture.d.ts.map +1 -0
  107. package/dist/network-capture.js +374 -0
  108. package/dist/network-capture.js.map +1 -0
  109. package/dist/offscreen/index.d.ts +16 -0
  110. package/dist/offscreen/index.d.ts.map +1 -0
  111. package/dist/offscreen/index.js +549 -0
  112. package/dist/offscreen/index.js.map +1 -0
  113. package/dist/plugin-storage.d.ts +19 -0
  114. package/dist/plugin-storage.d.ts.map +1 -0
  115. package/dist/plugin-storage.js +100 -0
  116. package/dist/plugin-storage.js.map +1 -0
  117. package/dist/rate-limiter.d.ts +18 -0
  118. package/dist/rate-limiter.d.ts.map +1 -0
  119. package/dist/rate-limiter.js +53 -0
  120. package/dist/rate-limiter.js.map +1 -0
  121. package/dist/resource-prompt-dispatch.d.ts +14 -0
  122. package/dist/resource-prompt-dispatch.d.ts.map +1 -0
  123. package/dist/resource-prompt-dispatch.js +195 -0
  124. package/dist/resource-prompt-dispatch.js.map +1 -0
  125. package/dist/sanitize-error.d.ts +8 -0
  126. package/dist/sanitize-error.d.ts.map +1 -0
  127. package/dist/sanitize-error.js +25 -0
  128. package/dist/sanitize-error.js.map +1 -0
  129. package/dist/sanitize-svg.d.ts +20 -0
  130. package/dist/sanitize-svg.d.ts.map +1 -0
  131. package/dist/sanitize-svg.js +296 -0
  132. package/dist/sanitize-svg.js.map +1 -0
  133. package/dist/side-panel/App.d.ts +3 -0
  134. package/dist/side-panel/App.d.ts.map +1 -0
  135. package/dist/side-panel/App.js +147 -0
  136. package/dist/side-panel/App.js.map +1 -0
  137. package/dist/side-panel/bridge.d.ts +50 -0
  138. package/dist/side-panel/bridge.d.ts.map +1 -0
  139. package/dist/side-panel/bridge.js +113 -0
  140. package/dist/side-panel/bridge.js.map +1 -0
  141. package/dist/side-panel/components/ConfirmationDialog.d.ts +16 -0
  142. package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -0
  143. package/dist/side-panel/components/ConfirmationDialog.js +39 -0
  144. package/dist/side-panel/components/ConfirmationDialog.js.map +1 -0
  145. package/dist/side-panel/components/EmptyStates.d.ts +8 -0
  146. package/dist/side-panel/components/EmptyStates.d.ts.map +1 -0
  147. package/dist/side-panel/components/EmptyStates.js +40 -0
  148. package/dist/side-panel/components/EmptyStates.js.map +1 -0
  149. package/dist/side-panel/components/ErrorBoundary.d.ts +23 -0
  150. package/dist/side-panel/components/ErrorBoundary.d.ts.map +1 -0
  151. package/dist/side-panel/components/ErrorBoundary.js +28 -0
  152. package/dist/side-panel/components/ErrorBoundary.js.map +1 -0
  153. package/dist/side-panel/components/FailedPluginCard.d.ts +6 -0
  154. package/dist/side-panel/components/FailedPluginCard.d.ts.map +1 -0
  155. package/dist/side-panel/components/FailedPluginCard.js +9 -0
  156. package/dist/side-panel/components/FailedPluginCard.js.map +1 -0
  157. package/dist/side-panel/components/Footer.d.ts +3 -0
  158. package/dist/side-panel/components/Footer.d.ts.map +1 -0
  159. package/dist/side-panel/components/Footer.js +32 -0
  160. package/dist/side-panel/components/Footer.js.map +1 -0
  161. package/dist/side-panel/components/Header.d.ts +5 -0
  162. package/dist/side-panel/components/Header.d.ts.map +1 -0
  163. package/dist/side-panel/components/Header.js +6 -0
  164. package/dist/side-panel/components/Header.js.map +1 -0
  165. package/dist/side-panel/components/PluginCard.d.ts +10 -0
  166. package/dist/side-panel/components/PluginCard.d.ts.map +1 -0
  167. package/dist/side-panel/components/PluginCard.js +50 -0
  168. package/dist/side-panel/components/PluginCard.js.map +1 -0
  169. package/dist/side-panel/components/PluginIcon.d.ts +21 -0
  170. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -0
  171. package/dist/side-panel/components/PluginIcon.js +48 -0
  172. package/dist/side-panel/components/PluginIcon.js.map +1 -0
  173. package/dist/side-panel/components/PluginList.d.ts +11 -0
  174. package/dist/side-panel/components/PluginList.d.ts.map +1 -0
  175. package/dist/side-panel/components/PluginList.js +17 -0
  176. package/dist/side-panel/components/PluginList.js.map +1 -0
  177. package/dist/side-panel/components/ToolIcon.d.ts +7 -0
  178. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -0
  179. package/dist/side-panel/components/ToolIcon.js +8 -0
  180. package/dist/side-panel/components/ToolIcon.js.map +1 -0
  181. package/dist/side-panel/components/ToolRow.d.ts +11 -0
  182. package/dist/side-panel/components/ToolRow.d.ts.map +1 -0
  183. package/dist/side-panel/components/ToolRow.js +8 -0
  184. package/dist/side-panel/components/ToolRow.js.map +1 -0
  185. package/dist/side-panel/components/VersionMismatchBanner.d.ts +3 -0
  186. package/dist/side-panel/components/VersionMismatchBanner.d.ts.map +1 -0
  187. package/dist/side-panel/components/VersionMismatchBanner.js +5 -0
  188. package/dist/side-panel/components/VersionMismatchBanner.js.map +1 -0
  189. package/dist/side-panel/components/retro/Accordion.d.ts +8 -0
  190. package/dist/side-panel/components/retro/Accordion.d.ts.map +1 -0
  191. package/dist/side-panel/components/retro/Accordion.js +15 -0
  192. package/dist/side-panel/components/retro/Accordion.js.map +1 -0
  193. package/dist/side-panel/components/retro/Alert.d.ts +25 -0
  194. package/dist/side-panel/components/retro/Alert.d.ts.map +1 -0
  195. package/dist/side-panel/components/retro/Alert.js +33 -0
  196. package/dist/side-panel/components/retro/Alert.js.map +1 -0
  197. package/dist/side-panel/components/retro/Badge.d.ts +15 -0
  198. package/dist/side-panel/components/retro/Badge.d.ts.map +1 -0
  199. package/dist/side-panel/components/retro/Badge.js +23 -0
  200. package/dist/side-panel/components/retro/Badge.js.map +1 -0
  201. package/dist/side-panel/components/retro/Button.d.ts +13 -0
  202. package/dist/side-panel/components/retro/Button.d.ts.map +1 -0
  203. package/dist/side-panel/components/retro/Button.js +33 -0
  204. package/dist/side-panel/components/retro/Button.js.map +1 -0
  205. package/dist/side-panel/components/retro/Empty.d.ts +31 -0
  206. package/dist/side-panel/components/retro/Empty.d.ts.map +1 -0
  207. package/dist/side-panel/components/retro/Empty.js +25 -0
  208. package/dist/side-panel/components/retro/Empty.js.map +1 -0
  209. package/dist/side-panel/components/retro/Input.d.ts +8 -0
  210. package/dist/side-panel/components/retro/Input.d.ts.map +1 -0
  211. package/dist/side-panel/components/retro/Input.js +7 -0
  212. package/dist/side-panel/components/retro/Input.js.map +1 -0
  213. package/dist/side-panel/components/retro/Loader.d.ts +14 -0
  214. package/dist/side-panel/components/retro/Loader.d.ts.map +1 -0
  215. package/dist/side-panel/components/retro/Loader.js +30 -0
  216. package/dist/side-panel/components/retro/Loader.js.map +1 -0
  217. package/dist/side-panel/components/retro/Menu.d.ts +9 -0
  218. package/dist/side-panel/components/retro/Menu.d.ts.map +1 -0
  219. package/dist/side-panel/components/retro/Menu.js +17 -0
  220. package/dist/side-panel/components/retro/Menu.js.map +1 -0
  221. package/dist/side-panel/components/retro/NumberStepper.d.ts +18 -0
  222. package/dist/side-panel/components/retro/NumberStepper.d.ts.map +1 -0
  223. package/dist/side-panel/components/retro/NumberStepper.js +38 -0
  224. package/dist/side-panel/components/retro/NumberStepper.js.map +1 -0
  225. package/dist/side-panel/components/retro/Progress.d.ts +9 -0
  226. package/dist/side-panel/components/retro/Progress.d.ts.map +1 -0
  227. package/dist/side-panel/components/retro/Progress.js +6 -0
  228. package/dist/side-panel/components/retro/Progress.js.map +1 -0
  229. package/dist/side-panel/components/retro/Switch.d.ts +4 -0
  230. package/dist/side-panel/components/retro/Switch.d.ts.map +1 -0
  231. package/dist/side-panel/components/retro/Switch.js +6 -0
  232. package/dist/side-panel/components/retro/Switch.js.map +1 -0
  233. package/dist/side-panel/components/retro/Text.d.ts +11 -0
  234. package/dist/side-panel/components/retro/Text.d.ts.map +1 -0
  235. package/dist/side-panel/components/retro/Text.js +28 -0
  236. package/dist/side-panel/components/retro/Text.js.map +1 -0
  237. package/dist/side-panel/components/retro/Tooltip.d.ts +12 -0
  238. package/dist/side-panel/components/retro/Tooltip.d.ts.map +1 -0
  239. package/dist/side-panel/components/retro/Tooltip.js +32 -0
  240. package/dist/side-panel/components/retro/Tooltip.js.map +1 -0
  241. package/dist/side-panel/constants.d.ts +5 -0
  242. package/dist/side-panel/constants.d.ts.map +1 -0
  243. package/dist/side-panel/constants.js +5 -0
  244. package/dist/side-panel/constants.js.map +1 -0
  245. package/dist/side-panel/hooks/useServerNotifications.d.ts +21 -0
  246. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -0
  247. package/dist/side-panel/hooks/useServerNotifications.js +93 -0
  248. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -0
  249. package/dist/side-panel/hooks/useTheme.d.ts +8 -0
  250. package/dist/side-panel/hooks/useTheme.d.ts.map +1 -0
  251. package/dist/side-panel/hooks/useTheme.js +30 -0
  252. package/dist/side-panel/hooks/useTheme.js.map +1 -0
  253. package/dist/side-panel/index.d.ts +2 -0
  254. package/dist/side-panel/index.d.ts.map +1 -0
  255. package/dist/side-panel/index.js +12 -0
  256. package/dist/side-panel/index.js.map +1 -0
  257. package/dist/side-panel/lib/cn.d.ts +3 -0
  258. package/dist/side-panel/lib/cn.d.ts.map +1 -0
  259. package/dist/side-panel/lib/cn.js +4 -0
  260. package/dist/side-panel/lib/cn.js.map +1 -0
  261. package/dist/side-panel/lib/utils.d.ts +3 -0
  262. package/dist/side-panel/lib/utils.d.ts.map +1 -0
  263. package/dist/side-panel/lib/utils.js +4 -0
  264. package/dist/side-panel/lib/utils.js.map +1 -0
  265. package/dist/side-panel/side-panel.js +78034 -0
  266. package/dist/side-panel/styles.css +2 -0
  267. package/dist/side-panel-state.d.ts +11 -0
  268. package/dist/side-panel-state.d.ts.map +1 -0
  269. package/dist/side-panel-state.js +38 -0
  270. package/dist/side-panel-state.js.map +1 -0
  271. package/dist/side-panel-toggle.d.ts +3 -0
  272. package/dist/side-panel-toggle.d.ts.map +1 -0
  273. package/dist/side-panel-toggle.js +31 -0
  274. package/dist/side-panel-toggle.js.map +1 -0
  275. package/dist/tab-matching.d.ts +51 -0
  276. package/dist/tab-matching.d.ts.map +1 -0
  277. package/dist/tab-matching.js +160 -0
  278. package/dist/tab-matching.js.map +1 -0
  279. package/dist/tab-state.d.ts +56 -0
  280. package/dist/tab-state.d.ts.map +1 -0
  281. package/dist/tab-state.js +282 -0
  282. package/dist/tab-state.js.map +1 -0
  283. package/dist/tool-dispatch.d.ts +19 -0
  284. package/dist/tool-dispatch.d.ts.map +1 -0
  285. package/dist/tool-dispatch.js +336 -0
  286. package/dist/tool-dispatch.js.map +1 -0
  287. package/dist/types.d.ts +82 -0
  288. package/dist/types.d.ts.map +1 -0
  289. package/dist/types.js +2 -0
  290. package/dist/types.js.map +1 -0
  291. package/icons/icon-128.png +0 -0
  292. package/icons/icon-16.png +0 -0
  293. package/icons/icon-32.png +0 -0
  294. package/icons/icon-48.png +0 -0
  295. package/icons/icon.svg +6 -0
  296. package/manifest.json +38 -0
  297. package/offscreen/offscreen.html +10 -0
  298. package/package.json +49 -0
  299. package/side-panel/dark-mode.js +29 -0
  300. package/side-panel/fonts/archivo-black-latin.woff2 +0 -0
  301. package/side-panel/fonts/space-grotesk-latin.woff2 +0 -0
  302. package/side-panel/fonts/space-mono-400-latin.woff2 +0 -0
  303. package/side-panel/fonts/space-mono-700-latin.woff2 +0 -0
  304. package/side-panel/fonts.css +34 -0
  305. package/side-panel/side-panel.html +16 -0
@@ -0,0 +1,353 @@
1
+ import { extractScriptResult, requireSelector, requireStringParam, requireTabId, sendErrorResult, sendSuccessResult, sendValidationError, } from './helpers.js';
2
+ import { withDebugger } from './resource-commands.js';
3
+ import { DEFAULT_QUERY_LIMIT, DEFAULT_WAIT_TIMEOUT_MS, POLL_INTERVAL_MS, TEXT_PREVIEW_MAX_LENGTH, } from '../constants.js';
4
+ import { toErrorMessage } from '@opentabs-dev/shared';
5
+ /**
6
+ * Clicks a DOM element matched by a CSS selector in a tab's page context.
7
+ * @param params - Expects `{ tabId: number, selector: string }`.
8
+ * @returns `{ clicked, tagName, text }` describing the clicked element.
9
+ */
10
+ export const handleBrowserClickElement = async (params, id) => {
11
+ try {
12
+ const tabId = requireTabId(params, id);
13
+ if (tabId === null)
14
+ return;
15
+ const selector = requireSelector(params, id);
16
+ if (selector === null)
17
+ return;
18
+ const results = await chrome.scripting.executeScript({
19
+ target: { tabId },
20
+ world: 'MAIN',
21
+ func: (sel, maxPreview) => {
22
+ const el = document.querySelector(sel);
23
+ if (!el)
24
+ return { error: `Element not found: ${sel}` };
25
+ el.click();
26
+ return {
27
+ clicked: true,
28
+ tagName: el.tagName.toLowerCase(),
29
+ text: (el.textContent || '').trim().slice(0, maxPreview),
30
+ };
31
+ },
32
+ args: [selector, TEXT_PREVIEW_MAX_LENGTH],
33
+ });
34
+ const result = extractScriptResult(results, id);
35
+ if (!result)
36
+ return;
37
+ sendSuccessResult(id, { clicked: result.clicked, tagName: result.tagName, text: result.text });
38
+ }
39
+ catch (err) {
40
+ sendErrorResult(id, err);
41
+ }
42
+ };
43
+ /**
44
+ * Types text into an input, textarea, or contentEditable element, dispatching input and change events.
45
+ * @param params - Expects `{ tabId: number, selector: string, text: string, clear?: boolean }`. Defaults to clearing existing value before typing.
46
+ * @returns `{ typed, tagName, value }` with the element's resulting value.
47
+ */
48
+ export const handleBrowserTypeText = async (params, id) => {
49
+ try {
50
+ const tabId = requireTabId(params, id);
51
+ if (tabId === null)
52
+ return;
53
+ const selector = requireSelector(params, id);
54
+ if (selector === null)
55
+ return;
56
+ const text = requireStringParam(params, 'text', id);
57
+ if (text === null)
58
+ return;
59
+ const clear = typeof params.clear === 'boolean' ? params.clear : true;
60
+ const results = await chrome.scripting.executeScript({
61
+ target: { tabId },
62
+ world: 'MAIN',
63
+ func: (sel, txt, clr) => {
64
+ const el = document.querySelector(sel);
65
+ if (!el)
66
+ return { error: `Element not found: ${sel}` };
67
+ const tag = el.tagName.toLowerCase();
68
+ const isEditable = tag === 'input' || tag === 'textarea' || el.isContentEditable;
69
+ if (!isEditable)
70
+ return { error: `Element is not a text input (found <${tag}>)` };
71
+ if (tag === 'input' || tag === 'textarea') {
72
+ const input = el;
73
+ input.focus();
74
+ input.value = clr ? txt : input.value + txt;
75
+ input.dispatchEvent(new Event('input', { bubbles: true }));
76
+ input.dispatchEvent(new Event('change', { bubbles: true }));
77
+ return { typed: true, tagName: tag, value: input.value };
78
+ }
79
+ // contentEditable element — insert via Selection/Range API
80
+ const htmlEl = el;
81
+ htmlEl.focus();
82
+ if (clr)
83
+ htmlEl.textContent = '';
84
+ const selection = window.getSelection();
85
+ if (selection) {
86
+ if (selection.rangeCount === 0) {
87
+ const range = document.createRange();
88
+ range.selectNodeContents(htmlEl);
89
+ range.collapse(false);
90
+ selection.removeAllRanges();
91
+ selection.addRange(range);
92
+ }
93
+ const range = selection.getRangeAt(0);
94
+ range.deleteContents();
95
+ range.insertNode(document.createTextNode(txt));
96
+ range.collapse(false);
97
+ selection.removeAllRanges();
98
+ selection.addRange(range);
99
+ }
100
+ htmlEl.dispatchEvent(new InputEvent('input', { bubbles: true, inputType: 'insertText', data: txt }));
101
+ return { typed: true, tagName: tag, value: htmlEl.textContent || '' };
102
+ },
103
+ args: [selector, text, clear],
104
+ });
105
+ const result = extractScriptResult(results, id);
106
+ if (!result)
107
+ return;
108
+ sendSuccessResult(id, { typed: result.typed, tagName: result.tagName, value: result.value });
109
+ }
110
+ catch (err) {
111
+ sendErrorResult(id, err);
112
+ }
113
+ };
114
+ export const handleBrowserSelectOption = async (params, id) => {
115
+ try {
116
+ const tabId = requireTabId(params, id);
117
+ if (tabId === null)
118
+ return;
119
+ const selector = requireSelector(params, id);
120
+ if (selector === null)
121
+ return;
122
+ const value = typeof params.value === 'string' ? params.value : undefined;
123
+ const label = typeof params.label === 'string' ? params.label : undefined;
124
+ if (value === undefined && label === undefined) {
125
+ sendValidationError(id, 'At least one of value or label must be provided');
126
+ return;
127
+ }
128
+ const results = await chrome.scripting.executeScript({
129
+ target: { tabId },
130
+ world: 'MAIN',
131
+ func: (sel, val, lbl) => {
132
+ const el = document.querySelector(sel);
133
+ if (!el)
134
+ return { error: `Element not found: ${sel}` };
135
+ if (el.tagName.toLowerCase() !== 'select')
136
+ return { error: `Element is not a <select>: ${sel}` };
137
+ const select = el;
138
+ const options = Array.from(select.options);
139
+ let matchedIndex = -1;
140
+ for (let i = 0; i < options.length; i++) {
141
+ const opt = options[i];
142
+ if (!opt)
143
+ continue;
144
+ const isMatch = val !== null ? opt.value === val : (opt.textContent || '').trim() === lbl;
145
+ if (isMatch) {
146
+ matchedIndex = i;
147
+ break;
148
+ }
149
+ }
150
+ if (matchedIndex === -1) {
151
+ const criterion = val !== null ? `value="${val}"` : `label="${String(lbl)}"`;
152
+ return { error: `Option not found: ${criterion}` };
153
+ }
154
+ select.selectedIndex = matchedIndex;
155
+ select.dispatchEvent(new Event('change', { bubbles: true }));
156
+ const selectedOpt = options[matchedIndex];
157
+ return {
158
+ selected: true,
159
+ value: selectedOpt ? selectedOpt.value : '',
160
+ label: selectedOpt ? (selectedOpt.textContent || '').trim() : '',
161
+ };
162
+ },
163
+ args: [selector, value ?? null, label ?? null],
164
+ });
165
+ const result = extractScriptResult(results, id);
166
+ if (!result)
167
+ return;
168
+ sendSuccessResult(id, { selected: result.selected, value: result.value, label: result.label });
169
+ }
170
+ catch (err) {
171
+ sendErrorResult(id, err);
172
+ }
173
+ };
174
+ export const handleBrowserWaitForElement = async (params, id) => {
175
+ try {
176
+ const tabId = requireTabId(params, id);
177
+ if (tabId === null)
178
+ return;
179
+ const selector = requireSelector(params, id);
180
+ if (selector === null)
181
+ return;
182
+ const timeout = typeof params.timeout === 'number' ? params.timeout : DEFAULT_WAIT_TIMEOUT_MS;
183
+ const visible = typeof params.visible === 'boolean' ? params.visible : false;
184
+ const results = await chrome.scripting.executeScript({
185
+ target: { tabId },
186
+ world: 'MAIN',
187
+ func: (sel, tmo, vis, maxPreview, pollMs) => new Promise(resolve => {
188
+ let elapsed = 0;
189
+ const poll = setInterval(() => {
190
+ const el = document.querySelector(sel);
191
+ if (el) {
192
+ const htmlEl = el;
193
+ const isVisible = !vis || (htmlEl.offsetParent !== null && getComputedStyle(htmlEl).display !== 'none');
194
+ if (isVisible) {
195
+ clearInterval(poll);
196
+ resolve({
197
+ found: true,
198
+ tagName: el.tagName.toLowerCase(),
199
+ text: (el.textContent || '').trim().slice(0, maxPreview),
200
+ });
201
+ return;
202
+ }
203
+ }
204
+ elapsed += pollMs;
205
+ if (elapsed >= tmo) {
206
+ clearInterval(poll);
207
+ resolve({ error: `Timeout waiting for element: ${sel} (${tmo}ms)` });
208
+ }
209
+ }, pollMs);
210
+ }),
211
+ args: [selector, timeout, visible, TEXT_PREVIEW_MAX_LENGTH, POLL_INTERVAL_MS],
212
+ });
213
+ const result = extractScriptResult(results, id);
214
+ if (!result)
215
+ return;
216
+ sendSuccessResult(id, { found: result.found, tagName: result.tagName, text: result.text });
217
+ }
218
+ catch (err) {
219
+ sendErrorResult(id, err);
220
+ }
221
+ };
222
+ /**
223
+ * Queries DOM elements matching a CSS selector and returns their tag names, text content, and specified attributes.
224
+ * @param params - Expects `{ tabId: number, selector: string, limit?: number, attributes?: string[] }`. Defaults to 100 element limit and standard attribute set.
225
+ * @returns `{ count, elements }` where count is the total matches and elements is the (possibly limited) result array.
226
+ */
227
+ export const handleBrowserQueryElements = async (params, id) => {
228
+ try {
229
+ const tabId = requireTabId(params, id);
230
+ if (tabId === null)
231
+ return;
232
+ const selector = requireSelector(params, id);
233
+ if (selector === null)
234
+ return;
235
+ const limit = typeof params.limit === 'number' ? params.limit : DEFAULT_QUERY_LIMIT;
236
+ const attributes = Array.isArray(params.attributes)
237
+ ? params.attributes.filter((a) => typeof a === 'string')
238
+ : ['id', 'class', 'href', 'src', 'type', 'name', 'value', 'placeholder'];
239
+ const results = await chrome.scripting.executeScript({
240
+ target: { tabId },
241
+ world: 'MAIN',
242
+ func: (sel, lim, attrs, maxPreview) => {
243
+ const all = document.querySelectorAll(sel);
244
+ const elements = Array.from(all)
245
+ .slice(0, lim)
246
+ .map(el => ({
247
+ tagName: el.tagName.toLowerCase(),
248
+ text: (el.textContent || '').trim().slice(0, maxPreview),
249
+ attributes: Object.fromEntries(attrs.filter(a => el.hasAttribute(a)).map(a => [a, el.getAttribute(a)])),
250
+ }));
251
+ return { count: all.length, elements };
252
+ },
253
+ args: [selector, limit, attributes, TEXT_PREVIEW_MAX_LENGTH],
254
+ });
255
+ const result = extractScriptResult(results, id, 'No result from query');
256
+ if (!result)
257
+ return;
258
+ sendSuccessResult(id, { count: result.count, elements: result.elements });
259
+ }
260
+ catch (err) {
261
+ sendErrorResult(id, err);
262
+ }
263
+ };
264
+ export const handleBrowserHoverElement = async (params, id) => {
265
+ try {
266
+ const tabId = requireTabId(params, id);
267
+ if (tabId === null)
268
+ return;
269
+ const selector = requireSelector(params, id);
270
+ if (selector === null)
271
+ return;
272
+ const results = await chrome.scripting.executeScript({
273
+ target: { tabId },
274
+ world: 'MAIN',
275
+ func: (sel, maxPreview) => {
276
+ const el = document.querySelector(sel);
277
+ if (!el)
278
+ return { error: `Element not found: ${sel}` };
279
+ const rect = el.getBoundingClientRect();
280
+ const clientX = rect.left + rect.width / 2;
281
+ const clientY = rect.top + rect.height / 2;
282
+ const pointerOpts = {
283
+ clientX,
284
+ clientY,
285
+ pointerId: 1,
286
+ pointerType: 'mouse',
287
+ };
288
+ const mouseOpts = { clientX, clientY };
289
+ // Full hover event sequence matching real browser behavior
290
+ el.dispatchEvent(new PointerEvent('pointerenter', { bubbles: false, ...pointerOpts }));
291
+ el.dispatchEvent(new PointerEvent('pointerover', { bubbles: true, ...pointerOpts }));
292
+ el.dispatchEvent(new MouseEvent('mouseenter', { bubbles: false, ...mouseOpts }));
293
+ el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true, ...mouseOpts }));
294
+ el.dispatchEvent(new PointerEvent('pointermove', { bubbles: true, ...pointerOpts }));
295
+ el.dispatchEvent(new MouseEvent('mousemove', { bubbles: true, ...mouseOpts }));
296
+ return {
297
+ hovered: true,
298
+ tagName: el.tagName.toLowerCase(),
299
+ text: (el.textContent || '').trim().slice(0, maxPreview),
300
+ bounds: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
301
+ };
302
+ },
303
+ args: [selector, TEXT_PREVIEW_MAX_LENGTH],
304
+ });
305
+ const result = extractScriptResult(results, id);
306
+ if (!result)
307
+ return;
308
+ sendSuccessResult(id, {
309
+ hovered: result.hovered,
310
+ tagName: result.tagName,
311
+ text: result.text,
312
+ bounds: result.bounds,
313
+ });
314
+ }
315
+ catch (err) {
316
+ sendErrorResult(id, err);
317
+ }
318
+ };
319
+ export const handleBrowserHandleDialog = async (params, id) => {
320
+ try {
321
+ const tabId = requireTabId(params, id);
322
+ if (tabId === null)
323
+ return;
324
+ const action = requireStringParam(params, 'action', id);
325
+ if (action === null)
326
+ return;
327
+ if (action !== 'accept' && action !== 'dismiss') {
328
+ sendValidationError(id, "action must be 'accept' or 'dismiss'");
329
+ return;
330
+ }
331
+ const accept = action === 'accept';
332
+ const promptText = typeof params.promptText === 'string' ? params.promptText : undefined;
333
+ await withDebugger(tabId, async () => {
334
+ await chrome.debugger.sendCommand({ tabId }, 'Page.enable');
335
+ try {
336
+ await chrome.debugger.sendCommand({ tabId }, 'Page.handleJavaScriptDialog', {
337
+ accept,
338
+ ...(promptText !== undefined ? { promptText } : {}),
339
+ });
340
+ sendSuccessResult(id, { handled: true, action });
341
+ }
342
+ catch (err) {
343
+ const msg = toErrorMessage(err);
344
+ const isNoDialog = msg.includes('No dialog is showing') || msg.includes('no dialog');
345
+ sendErrorResult(id, isNoDialog ? new Error('No JavaScript dialog is currently open on this tab') : err);
346
+ }
347
+ });
348
+ }
349
+ catch (err) {
350
+ sendErrorResult(id, err);
351
+ }
352
+ };
353
+ //# sourceMappingURL=interaction-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-commands.js","sourceRoot":"","sources":["../../src/browser-commands/interaction-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const handleBrowserPressKey: (params: Record<string, unknown>, id: string | number) => Promise<void>;
2
+ //# sourceMappingURL=key-press-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-press-command.d.ts","sourceRoot":"","sources":["../../src/browser-commands/key-press-command.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB,GAAU,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,IAAI,CAgJ9G,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { extractScriptResult, requireStringParam, requireTabId, sendErrorResult, sendSuccessResult, } from './helpers.js';
2
+ export const handleBrowserPressKey = async (params, id) => {
3
+ try {
4
+ const tabId = requireTabId(params, id);
5
+ if (tabId === null)
6
+ return;
7
+ const key = requireStringParam(params, 'key', id);
8
+ if (key === null)
9
+ return;
10
+ const selector = typeof params.selector === 'string' && params.selector.length > 0 ? params.selector : null;
11
+ const modifiers = typeof params.modifiers === 'object' && params.modifiers !== null
12
+ ? params.modifiers
13
+ : {};
14
+ const shiftKey = modifiers.shift === true;
15
+ const ctrlKey = modifiers.ctrl === true;
16
+ const altKey = modifiers.alt === true;
17
+ const metaKey = modifiers.meta === true;
18
+ const results = await chrome.scripting.executeScript({
19
+ target: { tabId },
20
+ world: 'MAIN',
21
+ func: (k, sel, shift, ctrl, alt, meta) => {
22
+ // Resolve target element
23
+ let target = null;
24
+ if (sel) {
25
+ target = document.querySelector(sel);
26
+ if (!target)
27
+ return { error: `Element not found: ${sel}` };
28
+ target.focus();
29
+ }
30
+ else {
31
+ target = document.activeElement ?? document.body;
32
+ }
33
+ // Derive code from key
34
+ const deriveCode = (k) => {
35
+ if (k.length === 1) {
36
+ const upper = k.toUpperCase();
37
+ if (upper >= 'A' && upper <= 'Z')
38
+ return `Key${upper}`;
39
+ if (k >= '0' && k <= '9')
40
+ return `Digit${k}`;
41
+ if (k === ' ')
42
+ return 'Space';
43
+ return k;
44
+ }
45
+ return k;
46
+ };
47
+ // Map key to legacy keyCode
48
+ const KEY_CODES = {
49
+ Enter: 13,
50
+ Escape: 27,
51
+ Tab: 9,
52
+ Backspace: 8,
53
+ Delete: 46,
54
+ ArrowUp: 38,
55
+ ArrowDown: 40,
56
+ ArrowLeft: 37,
57
+ ArrowRight: 39,
58
+ Home: 36,
59
+ End: 35,
60
+ PageUp: 33,
61
+ PageDown: 34,
62
+ ' ': 32,
63
+ };
64
+ const getKeyCode = (k) => {
65
+ if (KEY_CODES[k] !== undefined)
66
+ return KEY_CODES[k];
67
+ if (k.length === 1)
68
+ return k.toUpperCase().charCodeAt(0);
69
+ return 0;
70
+ };
71
+ const code = deriveCode(k);
72
+ const keyCode = getKeyCode(k);
73
+ const isPrintable = k.length === 1;
74
+ const eventInit = {
75
+ key: k,
76
+ code,
77
+ keyCode,
78
+ which: keyCode,
79
+ bubbles: true,
80
+ cancelable: true,
81
+ shiftKey: shift,
82
+ ctrlKey: ctrl,
83
+ metaKey: meta,
84
+ altKey: alt,
85
+ };
86
+ // Dispatch keyboard event sequence
87
+ target.dispatchEvent(new KeyboardEvent('keydown', eventInit));
88
+ if (isPrintable) {
89
+ target.dispatchEvent(new KeyboardEvent('keypress', eventInit));
90
+ }
91
+ target.dispatchEvent(new KeyboardEvent('keyup', eventInit));
92
+ // For printable characters, insert the character and dispatch InputEvent on editable elements
93
+ if (isPrintable) {
94
+ const tag = target.tagName.toLowerCase();
95
+ const isEditable = tag === 'input' || tag === 'textarea' || target.isContentEditable;
96
+ if (isEditable) {
97
+ if (tag === 'input' || tag === 'textarea') {
98
+ const input = target;
99
+ const start = input.selectionStart ?? input.value.length;
100
+ const end = input.selectionEnd ?? start;
101
+ input.value = input.value.slice(0, start) + k + input.value.slice(end);
102
+ input.selectionStart = input.selectionEnd = start + 1;
103
+ }
104
+ else {
105
+ // contentEditable — insert via Selection/Range API
106
+ const selection = window.getSelection();
107
+ if (selection && selection.rangeCount > 0) {
108
+ const range = selection.getRangeAt(0);
109
+ range.deleteContents();
110
+ range.insertNode(document.createTextNode(k));
111
+ range.collapse(false);
112
+ selection.removeAllRanges();
113
+ selection.addRange(range);
114
+ }
115
+ }
116
+ target.dispatchEvent(new InputEvent('input', {
117
+ bubbles: true,
118
+ cancelable: true,
119
+ inputType: 'insertText',
120
+ data: k,
121
+ }));
122
+ }
123
+ }
124
+ return {
125
+ pressed: true,
126
+ key: k,
127
+ target: {
128
+ tagName: target.tagName.toLowerCase(),
129
+ id: target.id || undefined,
130
+ },
131
+ };
132
+ },
133
+ args: [key, selector, shiftKey, ctrlKey, altKey, metaKey],
134
+ });
135
+ const result = extractScriptResult(results, id);
136
+ if (!result)
137
+ return;
138
+ sendSuccessResult(id, { pressed: result.pressed, key: result.key, target: result.target });
139
+ }
140
+ catch (err) {
141
+ sendErrorResult(id, err);
142
+ }
143
+ };
144
+ //# sourceMappingURL=key-press-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-press-command.js","sourceRoot":"","sources":["../../src/browser-commands/key-press-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const handleBrowserEnableNetworkCapture: (params: Record<string, unknown>, id: string | number) => Promise<void>;
2
+ export declare const handleBrowserGetNetworkRequests: (params: Record<string, unknown>, id: string | number) => void;
3
+ export declare const handleBrowserDisableNetworkCapture: (params: Record<string, unknown>, id: string | number) => void;
4
+ export declare const handleBrowserGetConsoleLogs: (params: Record<string, unknown>, id: string | number) => void;
5
+ export declare const handleBrowserClearConsoleLogs: (params: Record<string, unknown>, id: string | number) => void;
6
+ //# sourceMappingURL=network-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-commands.d.ts","sourceRoot":"","sources":["../../src/browser-commands/network-commands.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iCAAiC,GAC5C,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,MAAM,GAAG,MAAM,KAClB,OAAO,CAAC,IAAI,CAad,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,KAAG,IAUtG,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,KAAG,IASzG,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,KAAG,IAWlG,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,KAAG,IASpG,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { requireTabId, sendErrorResult, sendSuccessResult } from './helpers.js';
2
+ import { clearConsoleLogs, getConsoleLogs, getRequests, startCapture, stopCapture } from '../network-capture.js';
3
+ export const handleBrowserEnableNetworkCapture = async (params, id) => {
4
+ try {
5
+ const tabId = requireTabId(params, id);
6
+ if (tabId === null)
7
+ return;
8
+ const maxRequests = typeof params.maxRequests === 'number' ? params.maxRequests : 100;
9
+ const urlFilter = typeof params.urlFilter === 'string' ? params.urlFilter : undefined;
10
+ const maxConsoleLogs = typeof params.maxConsoleLogs === 'number' ? params.maxConsoleLogs : 500;
11
+ await startCapture(tabId, maxRequests, urlFilter, maxConsoleLogs);
12
+ sendSuccessResult(id, { enabled: true, tabId });
13
+ }
14
+ catch (err) {
15
+ sendErrorResult(id, err);
16
+ }
17
+ };
18
+ export const handleBrowserGetNetworkRequests = (params, id) => {
19
+ try {
20
+ const tabId = requireTabId(params, id);
21
+ if (tabId === null)
22
+ return;
23
+ const clear = typeof params.clear === 'boolean' ? params.clear : false;
24
+ const requests = getRequests(tabId, clear);
25
+ sendSuccessResult(id, { requests });
26
+ }
27
+ catch (err) {
28
+ sendErrorResult(id, err);
29
+ }
30
+ };
31
+ export const handleBrowserDisableNetworkCapture = (params, id) => {
32
+ try {
33
+ const tabId = requireTabId(params, id);
34
+ if (tabId === null)
35
+ return;
36
+ stopCapture(tabId);
37
+ sendSuccessResult(id, { disabled: true, tabId });
38
+ }
39
+ catch (err) {
40
+ sendErrorResult(id, err);
41
+ }
42
+ };
43
+ export const handleBrowserGetConsoleLogs = (params, id) => {
44
+ try {
45
+ const tabId = requireTabId(params, id);
46
+ if (tabId === null)
47
+ return;
48
+ const clear = typeof params.clear === 'boolean' ? params.clear : false;
49
+ const level = typeof params.level === 'string' ? params.level : undefined;
50
+ const logs = getConsoleLogs(tabId, clear, level);
51
+ sendSuccessResult(id, { logs });
52
+ }
53
+ catch (err) {
54
+ sendErrorResult(id, err);
55
+ }
56
+ };
57
+ export const handleBrowserClearConsoleLogs = (params, id) => {
58
+ try {
59
+ const tabId = requireTabId(params, id);
60
+ if (tabId === null)
61
+ return;
62
+ clearConsoleLogs(tabId);
63
+ sendSuccessResult(id, { cleared: true });
64
+ }
65
+ catch (err) {
66
+ sendErrorResult(id, err);
67
+ }
68
+ };
69
+ //# sourceMappingURL=network-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-commands.js","sourceRoot":"","sources":["../../src/browser-commands/network-commands.ts"],"names":[],"mappings":"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"}