agent-web-interface 4.4.0 → 4.5.0

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 (319) hide show
  1. package/dist/src/browser/browser-session-config.d.ts +33 -0
  2. package/dist/src/browser/browser-session-config.d.ts.map +1 -0
  3. package/dist/src/browser/browser-session-config.js +24 -0
  4. package/dist/src/browser/browser-session-config.js.map +1 -0
  5. package/dist/src/browser/ensure-browser.d.ts +12 -27
  6. package/dist/src/browser/ensure-browser.d.ts.map +1 -1
  7. package/dist/src/browser/ensure-browser.js +104 -37
  8. package/dist/src/browser/ensure-browser.js.map +1 -1
  9. package/dist/src/browser/index.d.ts +2 -1
  10. package/dist/src/browser/index.d.ts.map +1 -1
  11. package/dist/src/browser/index.js +1 -0
  12. package/dist/src/browser/index.js.map +1 -1
  13. package/dist/src/browser/session-manager.d.ts +20 -0
  14. package/dist/src/browser/session-manager.d.ts.map +1 -1
  15. package/dist/src/browser/session-manager.js +122 -17
  16. package/dist/src/browser/session-manager.js.map +1 -1
  17. package/dist/src/browser/session-manager.types.d.ts +14 -2
  18. package/dist/src/browser/session-manager.types.d.ts.map +1 -1
  19. package/dist/src/browser/session-manager.types.js +5 -1
  20. package/dist/src/browser/session-manager.types.js.map +1 -1
  21. package/dist/src/cli/args.d.ts +12 -18
  22. package/dist/src/cli/args.d.ts.map +1 -1
  23. package/dist/src/cli/args.js +35 -40
  24. package/dist/src/cli/args.js.map +1 -1
  25. package/dist/src/form/constraint-extraction.d.ts +5 -0
  26. package/dist/src/form/constraint-extraction.d.ts.map +1 -1
  27. package/dist/src/form/constraint-extraction.js +13 -6
  28. package/dist/src/form/constraint-extraction.js.map +1 -1
  29. package/dist/src/form/field-extractor.d.ts.map +1 -1
  30. package/dist/src/form/field-extractor.js +14 -7
  31. package/dist/src/form/field-extractor.js.map +1 -1
  32. package/dist/src/form/form-state.d.ts.map +1 -1
  33. package/dist/src/form/form-state.js +16 -4
  34. package/dist/src/form/form-state.js.map +1 -1
  35. package/dist/src/gateway/http-gateway.d.ts +56 -0
  36. package/dist/src/gateway/http-gateway.d.ts.map +1 -0
  37. package/dist/src/gateway/http-gateway.js +229 -0
  38. package/dist/src/gateway/http-gateway.js.map +1 -0
  39. package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
  40. package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
  41. package/dist/src/gateway/json-rpc-errors.js +11 -0
  42. package/dist/src/gateway/json-rpc-errors.js.map +1 -0
  43. package/dist/src/gateway/session-router.d.ts +80 -0
  44. package/dist/src/gateway/session-router.d.ts.map +1 -0
  45. package/dist/src/gateway/session-router.js +177 -0
  46. package/dist/src/gateway/session-router.js.map +1 -0
  47. package/dist/src/http-entry.d.ts +20 -0
  48. package/dist/src/http-entry.d.ts.map +1 -0
  49. package/dist/src/http-entry.js +112 -0
  50. package/dist/src/http-entry.js.map +1 -0
  51. package/dist/src/index.d.ts +1 -10
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +25 -232
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/lib/text-utils.d.ts +0 -24
  56. package/dist/src/lib/text-utils.d.ts.map +1 -1
  57. package/dist/src/lib/text-utils.js +2 -38
  58. package/dist/src/lib/text-utils.js.map +1 -1
  59. package/dist/src/observation/eid-linker.d.ts.map +1 -1
  60. package/dist/src/observation/eid-linker.js +1 -21
  61. package/dist/src/observation/eid-linker.js.map +1 -1
  62. package/dist/src/server/index.d.ts +0 -1
  63. package/dist/src/server/index.d.ts.map +1 -1
  64. package/dist/src/server/index.js +0 -1
  65. package/dist/src/server/index.js.map +1 -1
  66. package/dist/src/server/mcp-server.d.ts +6 -2
  67. package/dist/src/server/mcp-server.d.ts.map +1 -1
  68. package/dist/src/server/mcp-server.js +3 -91
  69. package/dist/src/server/mcp-server.js.map +1 -1
  70. package/dist/src/server/server-config.d.ts +4 -20
  71. package/dist/src/server/server-config.d.ts.map +1 -1
  72. package/dist/src/server/server-config.js +6 -50
  73. package/dist/src/server/server-config.js.map +1 -1
  74. package/dist/src/server/tool-registrar.types.d.ts +25 -0
  75. package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
  76. package/dist/src/server/tool-registrar.types.js +10 -0
  77. package/dist/src/server/tool-registrar.types.js.map +1 -0
  78. package/dist/src/server/tool-result-handler.d.ts +61 -0
  79. package/dist/src/server/tool-result-handler.d.ts.map +1 -0
  80. package/dist/src/server/tool-result-handler.js +137 -0
  81. package/dist/src/server/tool-result-handler.js.map +1 -0
  82. package/dist/src/session/session-controller.d.ts +123 -0
  83. package/dist/src/session/session-controller.d.ts.map +1 -0
  84. package/dist/src/session/session-controller.js +273 -0
  85. package/dist/src/session/session-controller.js.map +1 -0
  86. package/dist/src/shared/services/index.d.ts +0 -2
  87. package/dist/src/shared/services/index.d.ts.map +1 -1
  88. package/dist/src/shared/services/index.js +0 -2
  89. package/dist/src/shared/services/index.js.map +1 -1
  90. package/dist/src/shared/version.d.ts +10 -0
  91. package/dist/src/shared/version.d.ts.map +1 -0
  92. package/dist/src/shared/version.js +32 -0
  93. package/dist/src/shared/version.js.map +1 -0
  94. package/dist/src/snapshot/element-resolver.d.ts +3 -2
  95. package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
  96. package/dist/src/snapshot/element-resolver.js +83 -8
  97. package/dist/src/snapshot/element-resolver.js.map +1 -1
  98. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
  99. package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
  100. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
  101. package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
  102. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
  103. package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
  104. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
  105. package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
  106. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
  107. package/dist/src/snapshot/extractors/state-extractor.js +22 -2
  108. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
  109. package/dist/src/snapshot/extractors/types.d.ts +6 -0
  110. package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
  111. package/dist/src/snapshot/extractors/types.js.map +1 -1
  112. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  113. package/dist/src/snapshot/snapshot-compiler.js +15 -2
  114. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  115. package/dist/src/snapshot/snapshot.types.d.ts +10 -1
  116. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
  117. package/dist/src/snapshot/snapshot.types.js.map +1 -1
  118. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  119. package/dist/src/state/actionables-filter.js +7 -3
  120. package/dist/src/state/actionables-filter.js.map +1 -1
  121. package/dist/src/state/atoms-extractor.d.ts.map +1 -1
  122. package/dist/src/state/atoms-extractor.js +3 -23
  123. package/dist/src/state/atoms-extractor.js.map +1 -1
  124. package/dist/src/state/diff-engine.d.ts.map +1 -1
  125. package/dist/src/state/diff-engine.js +6 -33
  126. package/dist/src/state/diff-engine.js.map +1 -1
  127. package/dist/src/state/element-identity.d.ts +3 -6
  128. package/dist/src/state/element-identity.d.ts.map +1 -1
  129. package/dist/src/state/element-identity.js +10 -7
  130. package/dist/src/state/element-identity.js.map +1 -1
  131. package/dist/src/state/element-ref.types.d.ts +5 -27
  132. package/dist/src/state/element-ref.types.d.ts.map +1 -1
  133. package/dist/src/state/state-manager.d.ts.map +1 -1
  134. package/dist/src/state/state-manager.js +3 -1
  135. package/dist/src/state/state-manager.js.map +1 -1
  136. package/dist/src/state/state-renderer.d.ts.map +1 -1
  137. package/dist/src/state/state-renderer.js +3 -1
  138. package/dist/src/state/state-renderer.js.map +1 -1
  139. package/dist/src/state/types.d.ts +2 -1
  140. package/dist/src/state/types.d.ts.map +1 -1
  141. package/dist/src/state/url-sanitization.d.ts +1 -1
  142. package/dist/src/state/url-sanitization.d.ts.map +1 -1
  143. package/dist/src/state/url-sanitization.js +29 -13
  144. package/dist/src/state/url-sanitization.js.map +1 -1
  145. package/dist/src/tools/action-context.d.ts +6 -11
  146. package/dist/src/tools/action-context.d.ts.map +1 -1
  147. package/dist/src/tools/action-context.js +10 -19
  148. package/dist/src/tools/action-context.js.map +1 -1
  149. package/dist/src/tools/action-stabilization.d.ts.map +1 -1
  150. package/dist/src/tools/action-stabilization.js +6 -0
  151. package/dist/src/tools/action-stabilization.js.map +1 -1
  152. package/dist/src/tools/browser-tools.d.ts +3 -2
  153. package/dist/src/tools/browser-tools.d.ts.map +1 -1
  154. package/dist/src/tools/browser-tools.js +5 -3
  155. package/dist/src/tools/browser-tools.js.map +1 -1
  156. package/dist/src/tools/canvas-tools.d.ts +2 -1
  157. package/dist/src/tools/canvas-tools.d.ts.map +1 -1
  158. package/dist/src/tools/canvas-tools.js +5 -7
  159. package/dist/src/tools/canvas-tools.js.map +1 -1
  160. package/dist/src/tools/errors.d.ts +2 -34
  161. package/dist/src/tools/errors.d.ts.map +1 -1
  162. package/dist/src/tools/errors.js +1 -44
  163. package/dist/src/tools/errors.js.map +1 -1
  164. package/dist/src/tools/execute-action.d.ts +4 -3
  165. package/dist/src/tools/execute-action.d.ts.map +1 -1
  166. package/dist/src/tools/execute-action.js +32 -23
  167. package/dist/src/tools/execute-action.js.map +1 -1
  168. package/dist/src/tools/form-tools.d.ts +3 -8
  169. package/dist/src/tools/form-tools.d.ts.map +1 -1
  170. package/dist/src/tools/form-tools.js +38 -18
  171. package/dist/src/tools/form-tools.js.map +1 -1
  172. package/dist/src/tools/index.d.ts +6 -6
  173. package/dist/src/tools/index.d.ts.map +1 -1
  174. package/dist/src/tools/index.js +7 -10
  175. package/dist/src/tools/index.js.map +1 -1
  176. package/dist/src/tools/interaction-tools.d.ts +6 -5
  177. package/dist/src/tools/interaction-tools.d.ts.map +1 -1
  178. package/dist/src/tools/interaction-tools.js +29 -32
  179. package/dist/src/tools/interaction-tools.js.map +1 -1
  180. package/dist/src/tools/navigation-tools.d.ts +7 -13
  181. package/dist/src/tools/navigation-tools.d.ts.map +1 -1
  182. package/dist/src/tools/navigation-tools.js +52 -59
  183. package/dist/src/tools/navigation-tools.js.map +1 -1
  184. package/dist/src/tools/observation-tools.d.ts +6 -5
  185. package/dist/src/tools/observation-tools.d.ts.map +1 -1
  186. package/dist/src/tools/observation-tools.js +30 -34
  187. package/dist/src/tools/observation-tools.js.map +1 -1
  188. package/dist/src/tools/readability-tools.d.ts +16 -0
  189. package/dist/src/tools/readability-tools.d.ts.map +1 -0
  190. package/dist/src/tools/readability-tools.js +45 -0
  191. package/dist/src/tools/readability-tools.js.map +1 -0
  192. package/dist/src/tools/response-builder.d.ts +20 -32
  193. package/dist/src/tools/response-builder.d.ts.map +1 -1
  194. package/dist/src/tools/response-builder.js +31 -47
  195. package/dist/src/tools/response-builder.js.map +1 -1
  196. package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
  197. package/dist/src/tools/stale-element-retry.js +37 -2
  198. package/dist/src/tools/stale-element-retry.js.map +1 -1
  199. package/dist/src/tools/tool-context.d.ts +4 -36
  200. package/dist/src/tools/tool-context.d.ts.map +1 -1
  201. package/dist/src/tools/tool-context.js +6 -75
  202. package/dist/src/tools/tool-context.js.map +1 -1
  203. package/dist/src/tools/tool-context.types.d.ts +141 -0
  204. package/dist/src/tools/tool-context.types.d.ts.map +1 -0
  205. package/dist/src/tools/tool-context.types.js +11 -0
  206. package/dist/src/tools/tool-context.types.js.map +1 -0
  207. package/dist/src/tools/tool-registration.d.ts +25 -0
  208. package/dist/src/tools/tool-registration.d.ts.map +1 -0
  209. package/dist/src/tools/tool-registration.js +180 -0
  210. package/dist/src/tools/tool-registration.js.map +1 -0
  211. package/dist/src/tools/tool-schemas.d.ts +88 -1947
  212. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  213. package/dist/src/tools/tool-schemas.js +21 -302
  214. package/dist/src/tools/tool-schemas.js.map +1 -1
  215. package/dist/src/tools/viewport-tools.d.ts +4 -3
  216. package/dist/src/tools/viewport-tools.d.ts.map +1 -1
  217. package/dist/src/tools/viewport-tools.js +17 -21
  218. package/dist/src/tools/viewport-tools.js.map +1 -1
  219. package/dist/src/worker/chrome-worker-process.d.ts +4 -0
  220. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
  221. package/dist/src/worker/chrome-worker-process.js +1 -1
  222. package/dist/src/worker/chrome-worker-process.js.map +1 -1
  223. package/package.json +7 -3
  224. package/dist/src/factpack/action-selector.d.ts +0 -36
  225. package/dist/src/factpack/action-selector.d.ts.map +0 -1
  226. package/dist/src/factpack/action-selector.js +0 -367
  227. package/dist/src/factpack/action-selector.js.map +0 -1
  228. package/dist/src/factpack/dialog-detector.d.ts +0 -19
  229. package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
  230. package/dist/src/factpack/dialog-detector.js +0 -354
  231. package/dist/src/factpack/dialog-detector.js.map +0 -1
  232. package/dist/src/factpack/form-detector.d.ts +0 -28
  233. package/dist/src/factpack/form-detector.d.ts.map +0 -1
  234. package/dist/src/factpack/form-detector.js +0 -555
  235. package/dist/src/factpack/form-detector.js.map +0 -1
  236. package/dist/src/factpack/index.d.ts +0 -32
  237. package/dist/src/factpack/index.d.ts.map +0 -1
  238. package/dist/src/factpack/index.js +0 -73
  239. package/dist/src/factpack/index.js.map +0 -1
  240. package/dist/src/factpack/page-classifier.d.ts +0 -22
  241. package/dist/src/factpack/page-classifier.d.ts.map +0 -1
  242. package/dist/src/factpack/page-classifier.js +0 -526
  243. package/dist/src/factpack/page-classifier.js.map +0 -1
  244. package/dist/src/factpack/types.d.ts +0 -307
  245. package/dist/src/factpack/types.d.ts.map +0 -1
  246. package/dist/src/factpack/types.js +0 -12
  247. package/dist/src/factpack/types.js.map +0 -1
  248. package/dist/src/lib/constants.d.ts +0 -27
  249. package/dist/src/lib/constants.d.ts.map +0 -1
  250. package/dist/src/lib/constants.js +0 -63
  251. package/dist/src/lib/constants.js.map +0 -1
  252. package/dist/src/lib/index.d.ts +0 -12
  253. package/dist/src/lib/index.d.ts.map +0 -1
  254. package/dist/src/lib/index.js +0 -17
  255. package/dist/src/lib/index.js.map +0 -1
  256. package/dist/src/lib/regions.d.ts +0 -29
  257. package/dist/src/lib/regions.d.ts.map +0 -1
  258. package/dist/src/lib/regions.js +0 -93
  259. package/dist/src/lib/regions.js.map +0 -1
  260. package/dist/src/lib/scoring.d.ts +0 -47
  261. package/dist/src/lib/scoring.d.ts.map +0 -1
  262. package/dist/src/lib/scoring.js +0 -79
  263. package/dist/src/lib/scoring.js.map +0 -1
  264. package/dist/src/lib/selectors.d.ts +0 -42
  265. package/dist/src/lib/selectors.d.ts.map +0 -1
  266. package/dist/src/lib/selectors.js +0 -138
  267. package/dist/src/lib/selectors.js.map +0 -1
  268. package/dist/src/renderer/budget-manager.d.ts +0 -46
  269. package/dist/src/renderer/budget-manager.d.ts.map +0 -1
  270. package/dist/src/renderer/budget-manager.js +0 -133
  271. package/dist/src/renderer/budget-manager.js.map +0 -1
  272. package/dist/src/renderer/constants.d.ts +0 -38
  273. package/dist/src/renderer/constants.d.ts.map +0 -1
  274. package/dist/src/renderer/constants.js +0 -29
  275. package/dist/src/renderer/constants.js.map +0 -1
  276. package/dist/src/renderer/index.d.ts +0 -12
  277. package/dist/src/renderer/index.d.ts.map +0 -1
  278. package/dist/src/renderer/index.js +0 -16
  279. package/dist/src/renderer/index.js.map +0 -1
  280. package/dist/src/renderer/section-renderers.d.ts +0 -42
  281. package/dist/src/renderer/section-renderers.d.ts.map +0 -1
  282. package/dist/src/renderer/section-renderers.js +0 -252
  283. package/dist/src/renderer/section-renderers.js.map +0 -1
  284. package/dist/src/renderer/token-counter.d.ts +0 -45
  285. package/dist/src/renderer/token-counter.d.ts.map +0 -1
  286. package/dist/src/renderer/token-counter.js +0 -65
  287. package/dist/src/renderer/token-counter.js.map +0 -1
  288. package/dist/src/renderer/types.d.ts +0 -71
  289. package/dist/src/renderer/types.d.ts.map +0 -1
  290. package/dist/src/renderer/types.js +0 -7
  291. package/dist/src/renderer/types.js.map +0 -1
  292. package/dist/src/renderer/xml-renderer.d.ts +0 -42
  293. package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
  294. package/dist/src/renderer/xml-renderer.js +0 -103
  295. package/dist/src/renderer/xml-renderer.js.map +0 -1
  296. package/dist/src/server/session-store.d.ts +0 -163
  297. package/dist/src/server/session-store.d.ts.map +0 -1
  298. package/dist/src/server/session-store.js +0 -248
  299. package/dist/src/server/session-store.js.map +0 -1
  300. package/dist/src/session/session-worker-binding.d.ts +0 -57
  301. package/dist/src/session/session-worker-binding.d.ts.map +0 -1
  302. package/dist/src/session/session-worker-binding.js +0 -109
  303. package/dist/src/session/session-worker-binding.js.map +0 -1
  304. package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
  305. package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
  306. package/dist/src/shared/services/dom-transformer.service.js +0 -190
  307. package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
  308. package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
  309. package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
  310. package/dist/src/shared/services/selector-builder.service.js +0 -240
  311. package/dist/src/shared/services/selector-builder.service.js.map +0 -1
  312. package/dist/src/state/constants.d.ts +0 -125
  313. package/dist/src/state/constants.d.ts.map +0 -1
  314. package/dist/src/state/constants.js +0 -131
  315. package/dist/src/state/constants.js.map +0 -1
  316. package/dist/src/tools/state-manager-registry.d.ts +0 -26
  317. package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
  318. package/dist/src/tools/state-manager-registry.js +0 -39
  319. package/dist/src/tools/state-manager-registry.js.map +0 -1
@@ -1,163 +0,0 @@
1
- /**
2
- * Session Store
3
- *
4
- * Tracks active sessions per MCP client (tenant isolation).
5
- * Supports optional TTL-based auto-cleanup of expired sessions.
6
- */
7
- /**
8
- * Options for session store configuration
9
- */
10
- export interface SessionStoreOptions {
11
- /** Session TTL in milliseconds (default: 30 minutes, 0 = no expiry) */
12
- ttlMs?: number;
13
- /** Maximum sessions allowed (default: unlimited) */
14
- maxSessions?: number;
15
- /** Enable automatic cleanup of expired sessions (default: false) */
16
- autoCleanup?: boolean;
17
- }
18
- /**
19
- * Represents a tenant session
20
- */
21
- export interface ClientInfo {
22
- name: string;
23
- version: string;
24
- }
25
- export interface TenantSession {
26
- /** Unique session identifier */
27
- session_id: string;
28
- /** Tenant/client identifier */
29
- tenant_id: string;
30
- /** Page IDs associated with this session */
31
- page_ids: Set<string>;
32
- /** When the session was created */
33
- created_at: Date;
34
- /** When the session was last accessed */
35
- last_accessed_at: Date;
36
- /** When the session expires (null = never) */
37
- expires_at: Date | null;
38
- /** MCP client info from initialization handshake */
39
- client_info?: ClientInfo;
40
- /** Isolated browser context for this session */
41
- browser_context?: import('puppeteer-core').BrowserContext;
42
- }
43
- /**
44
- * In-memory session store for tenant isolation
45
- */
46
- export declare class SessionStore {
47
- private readonly sessions;
48
- private readonly ttlMs;
49
- private readonly maxSessions;
50
- private cleanupInterval;
51
- constructor(options?: SessionStoreOptions);
52
- /**
53
- * Create a new session for a tenant
54
- *
55
- * @param tenant_id - The tenant/client identifier
56
- * @returns The new session_id
57
- * @throws Error if max sessions limit reached
58
- */
59
- createSession(tenant_id: string, clientInfo?: ClientInfo): string;
60
- /**
61
- * Get a session by its ID.
62
- * Automatically refreshes TTL and checks for expiration.
63
- *
64
- * @param session_id - The session identifier
65
- * @returns TenantSession if found and not expired, undefined otherwise
66
- */
67
- getSession(session_id: string): TenantSession | undefined;
68
- /**
69
- * Get the default session when only one exists.
70
- * Returns undefined when no sessions exist.
71
- * Throws when multiple sessions exist (caller must provide explicit session_id).
72
- */
73
- getDefaultSession(): TenantSession | undefined;
74
- /**
75
- * Add a page to a session
76
- *
77
- * @param session_id - The session identifier
78
- * @param page_id - The page identifier to add
79
- */
80
- addPage(session_id: string, page_id: string): void;
81
- /**
82
- * Remove a page from a session
83
- *
84
- * @param session_id - The session identifier
85
- * @param page_id - The page identifier to remove
86
- */
87
- removePage(session_id: string, page_id: string): void;
88
- /**
89
- * Get all pages for a session
90
- *
91
- * @param session_id - The session identifier
92
- * @returns Array of page_ids (empty if session not found)
93
- */
94
- getPages(session_id: string): string[];
95
- /**
96
- * Destroy a session completely.
97
- * If the session has an isolated browser context, it will be closed (best-effort).
98
- *
99
- * @param session_id - The session identifier
100
- */
101
- destroySession(session_id: string): Promise<void>;
102
- /**
103
- * List all active sessions
104
- *
105
- * @returns Array of all TenantSession objects
106
- */
107
- listSessions(): TenantSession[];
108
- /**
109
- * Get sessions for a specific tenant
110
- *
111
- * @param tenant_id - The tenant identifier
112
- * @returns Array of sessions for this tenant
113
- */
114
- getSessionsByTenant(tenant_id: string): TenantSession[];
115
- /**
116
- * Get the total number of sessions
117
- *
118
- * @returns Session count
119
- */
120
- sessionCount(): number;
121
- /**
122
- * Check if a session exists
123
- *
124
- * @param session_id - The session identifier
125
- * @returns true if session exists
126
- */
127
- hasSession(session_id: string): boolean;
128
- /**
129
- * Clear all sessions (for testing or shutdown)
130
- */
131
- clear(): void;
132
- /**
133
- * Stop automatic cleanup timer
134
- */
135
- stopAutoCleanup(): void;
136
- /**
137
- * Start automatic cleanup of expired sessions
138
- */
139
- startAutoCleanup(): void;
140
- /**
141
- * Manually clean up all expired sessions
142
- *
143
- * @returns Number of sessions removed
144
- */
145
- cleanupExpired(): number;
146
- /**
147
- * Check if a session is expired
148
- */
149
- private isExpired;
150
- /**
151
- * Touch a session to refresh its TTL
152
- */
153
- private touchSession;
154
- /**
155
- * Get the configured TTL in milliseconds
156
- */
157
- getTtlMs(): number;
158
- /**
159
- * Get the configured max sessions limit
160
- */
161
- getMaxSessions(): number;
162
- }
163
- //# sourceMappingURL=session-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../src/server/session-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtB,mCAAmC;IACnC,UAAU,EAAE,IAAI,CAAC;IAEjB,yCAAyC;IACzC,gBAAgB,EAAE,IAAI,CAAC;IAEvB,8CAA8C;IAC9C,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAExB,oDAAoD;IACpD,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB,gDAAgD;IAChD,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,cAAc,CAAC;CAC3D;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,eAAe,CAA+B;gBAE1C,OAAO,GAAE,mBAAwB;IAS7C;;;;;;OAMG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM;IAwBjE;;;;;;OAMG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAezD;;;;OAIG;IACH,iBAAiB,IAAI,aAAa,GAAG,SAAS;IAU9C;;;;;OAKG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlD;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAQtC;;;;;OAKG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;;;OAIG;IACH,YAAY,IAAI,aAAa,EAAE;IAI/B;;;;;OAKG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAIvD;;;;OAIG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,eAAe,IAAI,IAAI;IAOvB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAUxB;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAcxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
@@ -1,248 +0,0 @@
1
- /**
2
- * Session Store
3
- *
4
- * Tracks active sessions per MCP client (tenant isolation).
5
- * Supports optional TTL-based auto-cleanup of expired sessions.
6
- */
7
- import { randomUUID } from 'crypto';
8
- /** Default TTL in milliseconds (30 minutes) */
9
- const DEFAULT_TTL_MS = 30 * 60 * 1000;
10
- /** Cleanup interval in milliseconds (5 minutes) */
11
- const CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
12
- /**
13
- * In-memory session store for tenant isolation
14
- */
15
- export class SessionStore {
16
- sessions = new Map();
17
- ttlMs;
18
- maxSessions;
19
- cleanupInterval = null;
20
- constructor(options = {}) {
21
- this.ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
22
- this.maxSessions = options.maxSessions ?? Infinity;
23
- if (options.autoCleanup && this.ttlMs > 0) {
24
- this.startAutoCleanup();
25
- }
26
- }
27
- /**
28
- * Create a new session for a tenant
29
- *
30
- * @param tenant_id - The tenant/client identifier
31
- * @returns The new session_id
32
- * @throws Error if max sessions limit reached
33
- */
34
- createSession(tenant_id, clientInfo) {
35
- // Check max sessions limit
36
- if (this.sessions.size >= this.maxSessions) {
37
- throw new Error(`Maximum sessions limit reached: ${this.maxSessions}`);
38
- }
39
- const session_id = `session-${randomUUID()}`;
40
- const now = new Date();
41
- const session = {
42
- session_id,
43
- tenant_id,
44
- page_ids: new Set(),
45
- created_at: now,
46
- last_accessed_at: now,
47
- expires_at: this.ttlMs > 0 ? new Date(now.getTime() + this.ttlMs) : null,
48
- client_info: clientInfo,
49
- };
50
- this.sessions.set(session_id, session);
51
- return session_id;
52
- }
53
- /**
54
- * Get a session by its ID.
55
- * Automatically refreshes TTL and checks for expiration.
56
- *
57
- * @param session_id - The session identifier
58
- * @returns TenantSession if found and not expired, undefined otherwise
59
- */
60
- getSession(session_id) {
61
- const session = this.sessions.get(session_id);
62
- if (!session)
63
- return undefined;
64
- // Check if expired
65
- if (this.isExpired(session)) {
66
- this.sessions.delete(session_id);
67
- return undefined;
68
- }
69
- // Touch session to refresh TTL
70
- this.touchSession(session);
71
- return session;
72
- }
73
- /**
74
- * Get the default session when only one exists.
75
- * Returns undefined when no sessions exist.
76
- * Throws when multiple sessions exist (caller must provide explicit session_id).
77
- */
78
- getDefaultSession() {
79
- if (this.sessions.size === 0)
80
- return undefined;
81
- if (this.sessions.size > 1) {
82
- throw new Error(`Multiple sessions active (${this.sessions.size}). Provide an explicit session_id.`);
83
- }
84
- return this.sessions.values().next().value;
85
- }
86
- /**
87
- * Add a page to a session
88
- *
89
- * @param session_id - The session identifier
90
- * @param page_id - The page identifier to add
91
- */
92
- addPage(session_id, page_id) {
93
- const session = this.sessions.get(session_id);
94
- if (session) {
95
- session.page_ids.add(page_id);
96
- }
97
- }
98
- /**
99
- * Remove a page from a session
100
- *
101
- * @param session_id - The session identifier
102
- * @param page_id - The page identifier to remove
103
- */
104
- removePage(session_id, page_id) {
105
- const session = this.sessions.get(session_id);
106
- if (session) {
107
- session.page_ids.delete(page_id);
108
- }
109
- }
110
- /**
111
- * Get all pages for a session
112
- *
113
- * @param session_id - The session identifier
114
- * @returns Array of page_ids (empty if session not found)
115
- */
116
- getPages(session_id) {
117
- const session = this.sessions.get(session_id);
118
- if (!session) {
119
- return [];
120
- }
121
- return Array.from(session.page_ids);
122
- }
123
- /**
124
- * Destroy a session completely.
125
- * If the session has an isolated browser context, it will be closed (best-effort).
126
- *
127
- * @param session_id - The session identifier
128
- */
129
- async destroySession(session_id) {
130
- const session = this.sessions.get(session_id);
131
- if (session?.browser_context) {
132
- try {
133
- await session.browser_context.close();
134
- }
135
- catch {
136
- /* best effort */
137
- }
138
- }
139
- this.sessions.delete(session_id);
140
- }
141
- /**
142
- * List all active sessions
143
- *
144
- * @returns Array of all TenantSession objects
145
- */
146
- listSessions() {
147
- return Array.from(this.sessions.values());
148
- }
149
- /**
150
- * Get sessions for a specific tenant
151
- *
152
- * @param tenant_id - The tenant identifier
153
- * @returns Array of sessions for this tenant
154
- */
155
- getSessionsByTenant(tenant_id) {
156
- return this.listSessions().filter((s) => s.tenant_id === tenant_id);
157
- }
158
- /**
159
- * Get the total number of sessions
160
- *
161
- * @returns Session count
162
- */
163
- sessionCount() {
164
- return this.sessions.size;
165
- }
166
- /**
167
- * Check if a session exists
168
- *
169
- * @param session_id - The session identifier
170
- * @returns true if session exists
171
- */
172
- hasSession(session_id) {
173
- return this.sessions.has(session_id);
174
- }
175
- /**
176
- * Clear all sessions (for testing or shutdown)
177
- */
178
- clear() {
179
- this.sessions.clear();
180
- }
181
- /**
182
- * Stop automatic cleanup timer
183
- */
184
- stopAutoCleanup() {
185
- if (this.cleanupInterval) {
186
- clearInterval(this.cleanupInterval);
187
- this.cleanupInterval = null;
188
- }
189
- }
190
- /**
191
- * Start automatic cleanup of expired sessions
192
- */
193
- startAutoCleanup() {
194
- this.stopAutoCleanup();
195
- this.cleanupInterval = setInterval(() => {
196
- this.cleanupExpired();
197
- }, CLEANUP_INTERVAL_MS);
198
- // Don't keep the process alive just for cleanup
199
- this.cleanupInterval.unref();
200
- }
201
- /**
202
- * Manually clean up all expired sessions
203
- *
204
- * @returns Number of sessions removed
205
- */
206
- cleanupExpired() {
207
- let removed = 0;
208
- const now = new Date();
209
- for (const [session_id, session] of this.sessions) {
210
- if (session.expires_at && session.expires_at <= now) {
211
- this.sessions.delete(session_id);
212
- removed++;
213
- }
214
- }
215
- return removed;
216
- }
217
- /**
218
- * Check if a session is expired
219
- */
220
- isExpired(session) {
221
- if (!session.expires_at)
222
- return false;
223
- return session.expires_at <= new Date();
224
- }
225
- /**
226
- * Touch a session to refresh its TTL
227
- */
228
- touchSession(session) {
229
- const now = new Date();
230
- session.last_accessed_at = now;
231
- if (this.ttlMs > 0) {
232
- session.expires_at = new Date(now.getTime() + this.ttlMs);
233
- }
234
- }
235
- /**
236
- * Get the configured TTL in milliseconds
237
- */
238
- getTtlMs() {
239
- return this.ttlMs;
240
- }
241
- /**
242
- * Get the configured max sessions limit
243
- */
244
- getMaxSessions() {
245
- return this.maxSessions;
246
- }
247
- }
248
- //# sourceMappingURL=session-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/server/session-store.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Session Worker Binding
3
- *
4
- * Thin adapter that routes session lifecycle to either WorkerManager (process isolation)
5
- * or BrowserContext (context isolation) based on the configured ISOLATION_MODE.
6
- */
7
- import type { SessionManager } from '../browser/session-manager.js';
8
- import type { WorkerManager } from '../worker/worker-manager.js';
9
- /** Isolation mode determines how sessions get browser access */
10
- export type IsolationMode = 'process' | 'context';
11
- /**
12
- * Tracks worker assignments for process-mode sessions.
13
- * Maps sessionId to the workerId that was acquired.
14
- */
15
- interface WorkerAssignment {
16
- workerId: string;
17
- cdpEndpoint: string;
18
- }
19
- /**
20
- * Routes session lifecycle events to the appropriate isolation backend.
21
- *
22
- * - **process** mode: Each session gets a dedicated Chrome worker process via WorkerManager.
23
- * - **context** mode: Each session gets an isolated BrowserContext within the shared browser.
24
- */
25
- export declare class SessionWorkerBinding {
26
- readonly isolationMode: IsolationMode;
27
- private readonly workerAssignments;
28
- constructor(isolationMode?: IsolationMode);
29
- /**
30
- * Handle session start: acquire isolation resources.
31
- *
32
- * @param sessionId - The session identifier (used as tenantId for worker leases)
33
- * @param sessionManager - The SessionManager for browser access
34
- * @param workerManager - Required in process mode; ignored in context mode
35
- * @returns The CDP endpoint (process mode) or the BrowserContext (context mode)
36
- */
37
- onSessionStart(sessionId: string, sessionManager: SessionManager, workerManager?: WorkerManager): Promise<{
38
- cdpEndpoint?: string;
39
- browserContext?: import('puppeteer-core').BrowserContext;
40
- }>;
41
- /**
42
- * Handle session end: release isolation resources.
43
- *
44
- * @param sessionId - The session identifier
45
- * @param workerManager - Required in process mode; ignored in context mode
46
- */
47
- onSessionEnd(sessionId: string, workerManager?: WorkerManager): void;
48
- /**
49
- * Get the worker assignment for a session (process mode only).
50
- */
51
- getWorkerAssignment(sessionId: string): WorkerAssignment | undefined;
52
- private startProcessIsolation;
53
- private startContextIsolation;
54
- private endProcessIsolation;
55
- }
56
- export {};
57
- //# sourceMappingURL=session-worker-binding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-worker-binding.d.ts","sourceRoot":"","sources":["../../../src/session/session-worker-binding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAElD;;;GAGG;AACH,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;gBAE7D,aAAa,GAAE,aAAyB;IAKpD;;;;;;;OAOG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,cAAc,CAAA;KAAE,CAAC;IAO9F;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI;IASpE;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;YAQtD,qBAAqB;YA0CrB,qBAAqB;IASnC,OAAO,CAAC,mBAAmB;CAgB5B"}
@@ -1,109 +0,0 @@
1
- /**
2
- * Session Worker Binding
3
- *
4
- * Thin adapter that routes session lifecycle to either WorkerManager (process isolation)
5
- * or BrowserContext (context isolation) based on the configured ISOLATION_MODE.
6
- */
7
- import { createLogger } from '../shared/services/logging.service.js';
8
- const logger = createLogger('SessionWorkerBinding');
9
- /**
10
- * Routes session lifecycle events to the appropriate isolation backend.
11
- *
12
- * - **process** mode: Each session gets a dedicated Chrome worker process via WorkerManager.
13
- * - **context** mode: Each session gets an isolated BrowserContext within the shared browser.
14
- */
15
- export class SessionWorkerBinding {
16
- isolationMode;
17
- workerAssignments = new Map();
18
- constructor(isolationMode = 'context') {
19
- this.isolationMode = isolationMode;
20
- logger.info(`SessionWorkerBinding created`, { isolationMode });
21
- }
22
- /**
23
- * Handle session start: acquire isolation resources.
24
- *
25
- * @param sessionId - The session identifier (used as tenantId for worker leases)
26
- * @param sessionManager - The SessionManager for browser access
27
- * @param workerManager - Required in process mode; ignored in context mode
28
- * @returns The CDP endpoint (process mode) or the BrowserContext (context mode)
29
- */
30
- async onSessionStart(sessionId, sessionManager, workerManager) {
31
- if (this.isolationMode === 'process') {
32
- return this.startProcessIsolation(sessionId, sessionManager, workerManager);
33
- }
34
- return this.startContextIsolation(sessionId, sessionManager);
35
- }
36
- /**
37
- * Handle session end: release isolation resources.
38
- *
39
- * @param sessionId - The session identifier
40
- * @param workerManager - Required in process mode; ignored in context mode
41
- */
42
- onSessionEnd(sessionId, workerManager) {
43
- if (this.isolationMode === 'process') {
44
- this.endProcessIsolation(sessionId, workerManager);
45
- return;
46
- }
47
- // Context mode: BrowserContext cleanup is handled by SessionStore.destroySession()
48
- logger.debug(`Context-mode session ended; cleanup delegated to SessionStore`, { sessionId });
49
- }
50
- /**
51
- * Get the worker assignment for a session (process mode only).
52
- */
53
- getWorkerAssignment(sessionId) {
54
- return this.workerAssignments.get(sessionId);
55
- }
56
- // ---------------------------------------------------------------------------
57
- // Private helpers
58
- // ---------------------------------------------------------------------------
59
- async startProcessIsolation(sessionId, sessionManager, workerManager) {
60
- if (!workerManager) {
61
- throw new Error('WorkerManager is required for process isolation mode');
62
- }
63
- logger.info(`Acquiring worker for session`, { sessionId });
64
- const result = await workerManager.acquireForTenant(sessionId, sessionId);
65
- if (!result.success || !result.cdpEndpoint || !result.workerId) {
66
- throw new Error(`Failed to acquire worker for session ${sessionId}: ${result.error ?? 'unknown error'}`);
67
- }
68
- const assignment = {
69
- workerId: result.workerId,
70
- cdpEndpoint: result.cdpEndpoint,
71
- };
72
- this.workerAssignments.set(sessionId, assignment);
73
- // Connect SessionManager to the worker's CDP endpoint
74
- try {
75
- await sessionManager.connect({ browserWSEndpoint: result.cdpEndpoint });
76
- }
77
- catch (err) {
78
- // Rollback: release assignment so we don't leak a dangling entry
79
- this.workerAssignments.delete(sessionId);
80
- throw err;
81
- }
82
- logger.info(`Session connected to worker`, {
83
- sessionId,
84
- workerId: result.workerId,
85
- cdpEndpoint: result.cdpEndpoint,
86
- });
87
- return { cdpEndpoint: result.cdpEndpoint };
88
- }
89
- async startContextIsolation(_sessionId, sessionManager) {
90
- const browserContext = await sessionManager.createIsolatedContext();
91
- logger.info(`Created isolated BrowserContext for session`, { sessionId: _sessionId });
92
- return { browserContext };
93
- }
94
- endProcessIsolation(sessionId, workerManager) {
95
- if (!workerManager) {
96
- logger.warning(`No WorkerManager provided for process-mode session end`, { sessionId });
97
- return;
98
- }
99
- const assignment = this.workerAssignments.get(sessionId);
100
- if (!assignment) {
101
- logger.warning(`No worker assignment found for session`, { sessionId });
102
- return;
103
- }
104
- workerManager.releaseLease(sessionId);
105
- this.workerAssignments.delete(sessionId);
106
- logger.info(`Released worker lease for session`, { sessionId, workerId: assignment.workerId });
107
- }
108
- }
109
- //# sourceMappingURL=session-worker-binding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-worker-binding.js","sourceRoot":"","sources":["../../../src/session/session-worker-binding.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- /**
2
- * DOM Transformer Service
3
- *
4
- * Transforms CDP DOM.getDocument responses into our DomTreeNode format
5
- *
6
- * FIXES: The stub implementation in browser-automation-mcp-server.ts:731-736
7
- * that returned { nodes: [] } without transforming the CDP response
8
- */
9
- import type { DomTreeNode } from '../types/index.js';
10
- /**
11
- * CDP DOM Node structure
12
- */
13
- interface CdpDomNode {
14
- nodeId: number;
15
- nodeType: number;
16
- nodeName: string;
17
- localName: string;
18
- nodeValue: string;
19
- childNodeCount?: number;
20
- children?: CdpDomNode[];
21
- attributes?: string[];
22
- documentURL?: string;
23
- baseURL?: string;
24
- }
25
- interface CdpDomTreeResponse {
26
- root: CdpDomNode;
27
- }
28
- export interface DomGetTreeParams {
29
- frameId?: string;
30
- depth?: number;
31
- visibleOnly?: boolean;
32
- }
33
- export interface DomGetTreeResponse {
34
- nodes: DomTreeNode[];
35
- }
36
- export declare class DomTransformerService {
37
- /**
38
- * Transform CDP DOM.getDocument response into our DomTreeNode format
39
- */
40
- transform(cdpResponse: CdpDomTreeResponse, params: DomGetTreeParams): DomGetTreeResponse;
41
- /**
42
- * Recursively transform a CDP node and its children
43
- */
44
- private transformNode;
45
- /**
46
- * Parse CDP attributes array [key1, value1, key2, value2, ...] to object
47
- */
48
- private parseAttributes;
49
- /**
50
- * Check if element is hidden by inline style
51
- */
52
- private isHiddenByStyle;
53
- /**
54
- * Extract text content from immediate text children
55
- */
56
- private extractTextContent;
57
- /**
58
- * Flatten tree structure into array (breadth-first traversal)
59
- */
60
- flattenTree(nodes: DomTreeNode[]): DomTreeNode[];
61
- /**
62
- * Filter nodes by tag name
63
- */
64
- filterByTag(nodes: DomTreeNode[], tag: string): DomTreeNode[];
65
- /**
66
- * Find nodes by attribute
67
- */
68
- findByAttribute(nodes: DomTreeNode[], attrName: string, attrValue?: string): DomTreeNode[];
69
- }
70
- export {};
71
- //# sourceMappingURL=dom-transformer.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-transformer.service.d.ts","sourceRoot":"","sources":["../../../../src/shared/services/dom-transformer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,qBAAa,qBAAqB;IAChC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,GAAG,kBAAkB;IASxF;;OAEG;IACH,OAAO,CAAC,aAAa;IAoFrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAgBhD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE;IAe7D;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;CA2B3F"}