@opentabs-dev/mcp-server 0.0.19

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 (309) hide show
  1. package/dist/audit-disk.d.ts +23 -0
  2. package/dist/audit-disk.d.ts.map +1 -0
  3. package/dist/audit-disk.js +74 -0
  4. package/dist/audit-disk.js.map +1 -0
  5. package/dist/browser-tools/analyze-site/detect-apis.d.ts +36 -0
  6. package/dist/browser-tools/analyze-site/detect-apis.d.ts.map +1 -0
  7. package/dist/browser-tools/analyze-site/detect-apis.js +383 -0
  8. package/dist/browser-tools/analyze-site/detect-apis.js.map +1 -0
  9. package/dist/browser-tools/analyze-site/detect-auth.d.ts +72 -0
  10. package/dist/browser-tools/analyze-site/detect-auth.d.ts.map +1 -0
  11. package/dist/browser-tools/analyze-site/detect-auth.js +384 -0
  12. package/dist/browser-tools/analyze-site/detect-auth.js.map +1 -0
  13. package/dist/browser-tools/analyze-site/detect-dom.d.ts +65 -0
  14. package/dist/browser-tools/analyze-site/detect-dom.d.ts.map +1 -0
  15. package/dist/browser-tools/analyze-site/detect-dom.js +45 -0
  16. package/dist/browser-tools/analyze-site/detect-dom.js.map +1 -0
  17. package/dist/browser-tools/analyze-site/detect-framework.d.ts +48 -0
  18. package/dist/browser-tools/analyze-site/detect-framework.d.ts.map +1 -0
  19. package/dist/browser-tools/analyze-site/detect-framework.js +31 -0
  20. package/dist/browser-tools/analyze-site/detect-framework.js.map +1 -0
  21. package/dist/browser-tools/analyze-site/detect-globals.d.ts +41 -0
  22. package/dist/browser-tools/analyze-site/detect-globals.d.ts.map +1 -0
  23. package/dist/browser-tools/analyze-site/detect-globals.js +42 -0
  24. package/dist/browser-tools/analyze-site/detect-globals.js.map +1 -0
  25. package/dist/browser-tools/analyze-site/detect-storage.d.ts +39 -0
  26. package/dist/browser-tools/analyze-site/detect-storage.d.ts.map +1 -0
  27. package/dist/browser-tools/analyze-site/detect-storage.js +34 -0
  28. package/dist/browser-tools/analyze-site/detect-storage.js.map +1 -0
  29. package/dist/browser-tools/analyze-site/index.d.ts +52 -0
  30. package/dist/browser-tools/analyze-site/index.d.ts.map +1 -0
  31. package/dist/browser-tools/analyze-site/index.js +827 -0
  32. package/dist/browser-tools/analyze-site/index.js.map +1 -0
  33. package/dist/browser-tools/analyze-site.d.ts +17 -0
  34. package/dist/browser-tools/analyze-site.d.ts.map +1 -0
  35. package/dist/browser-tools/analyze-site.js +41 -0
  36. package/dist/browser-tools/analyze-site.js.map +1 -0
  37. package/dist/browser-tools/clear-console-logs.d.ts +9 -0
  38. package/dist/browser-tools/clear-console-logs.d.ts.map +1 -0
  39. package/dist/browser-tools/clear-console-logs.js +16 -0
  40. package/dist/browser-tools/clear-console-logs.js.map +1 -0
  41. package/dist/browser-tools/click-element.d.ts +10 -0
  42. package/dist/browser-tools/click-element.d.ts.map +1 -0
  43. package/dist/browser-tools/click-element.js +22 -0
  44. package/dist/browser-tools/click-element.js.map +1 -0
  45. package/dist/browser-tools/close-tab.d.ts +9 -0
  46. package/dist/browser-tools/close-tab.d.ts.map +1 -0
  47. package/dist/browser-tools/close-tab.js +16 -0
  48. package/dist/browser-tools/close-tab.js.map +1 -0
  49. package/dist/browser-tools/definition.d.ts +26 -0
  50. package/dist/browser-tools/definition.d.ts.map +1 -0
  51. package/dist/browser-tools/definition.js +16 -0
  52. package/dist/browser-tools/definition.js.map +1 -0
  53. package/dist/browser-tools/delete-cookies.d.ts +10 -0
  54. package/dist/browser-tools/delete-cookies.d.ts.map +1 -0
  55. package/dist/browser-tools/delete-cookies.js +19 -0
  56. package/dist/browser-tools/delete-cookies.js.map +1 -0
  57. package/dist/browser-tools/disable-network-capture.d.ts +9 -0
  58. package/dist/browser-tools/disable-network-capture.d.ts.map +1 -0
  59. package/dist/browser-tools/disable-network-capture.js +16 -0
  60. package/dist/browser-tools/disable-network-capture.js.map +1 -0
  61. package/dist/browser-tools/enable-network-capture.d.ts +12 -0
  62. package/dist/browser-tools/enable-network-capture.d.ts.map +1 -0
  63. package/dist/browser-tools/enable-network-capture.js +42 -0
  64. package/dist/browser-tools/enable-network-capture.js.map +1 -0
  65. package/dist/browser-tools/execute-script.d.ts +19 -0
  66. package/dist/browser-tools/execute-script.d.ts.map +1 -0
  67. package/dist/browser-tools/execute-script.js +51 -0
  68. package/dist/browser-tools/execute-script.js.map +1 -0
  69. package/dist/browser-tools/extension-check-adapter.d.ts +11 -0
  70. package/dist/browser-tools/extension-check-adapter.d.ts.map +1 -0
  71. package/dist/browser-tools/extension-check-adapter.js +22 -0
  72. package/dist/browser-tools/extension-check-adapter.js.map +1 -0
  73. package/dist/browser-tools/extension-force-reconnect.d.ts +9 -0
  74. package/dist/browser-tools/extension-force-reconnect.d.ts.map +1 -0
  75. package/dist/browser-tools/extension-force-reconnect.js +19 -0
  76. package/dist/browser-tools/extension-force-reconnect.js.map +1 -0
  77. package/dist/browser-tools/extension-get-logs.d.ts +24 -0
  78. package/dist/browser-tools/extension-get-logs.d.ts.map +1 -0
  79. package/dist/browser-tools/extension-get-logs.js +34 -0
  80. package/dist/browser-tools/extension-get-logs.js.map +1 -0
  81. package/dist/browser-tools/extension-get-side-panel.d.ts +8 -0
  82. package/dist/browser-tools/extension-get-side-panel.d.ts.map +1 -0
  83. package/dist/browser-tools/extension-get-side-panel.js +17 -0
  84. package/dist/browser-tools/extension-get-side-panel.js.map +1 -0
  85. package/dist/browser-tools/extension-get-state.d.ts +9 -0
  86. package/dist/browser-tools/extension-get-state.d.ts.map +1 -0
  87. package/dist/browser-tools/extension-get-state.js +19 -0
  88. package/dist/browser-tools/extension-get-state.js.map +1 -0
  89. package/dist/browser-tools/focus-tab.d.ts +9 -0
  90. package/dist/browser-tools/focus-tab.d.ts.map +1 -0
  91. package/dist/browser-tools/focus-tab.js +17 -0
  92. package/dist/browser-tools/focus-tab.js.map +1 -0
  93. package/dist/browser-tools/get-console-logs.d.ts +18 -0
  94. package/dist/browser-tools/get-console-logs.d.ts.map +1 -0
  95. package/dist/browser-tools/get-console-logs.js +30 -0
  96. package/dist/browser-tools/get-console-logs.js.map +1 -0
  97. package/dist/browser-tools/get-cookies.d.ts +10 -0
  98. package/dist/browser-tools/get-cookies.d.ts.map +1 -0
  99. package/dist/browser-tools/get-cookies.js +23 -0
  100. package/dist/browser-tools/get-cookies.js.map +1 -0
  101. package/dist/browser-tools/get-network-requests.d.ts +10 -0
  102. package/dist/browser-tools/get-network-requests.d.ts.map +1 -0
  103. package/dist/browser-tools/get-network-requests.js +27 -0
  104. package/dist/browser-tools/get-network-requests.js.map +1 -0
  105. package/dist/browser-tools/get-page-html.d.ts +11 -0
  106. package/dist/browser-tools/get-page-html.d.ts.map +1 -0
  107. package/dist/browser-tools/get-page-html.js +32 -0
  108. package/dist/browser-tools/get-page-html.js.map +1 -0
  109. package/dist/browser-tools/get-resource-content.d.ts +11 -0
  110. package/dist/browser-tools/get-resource-content.d.ts.map +1 -0
  111. package/dist/browser-tools/get-resource-content.js +31 -0
  112. package/dist/browser-tools/get-resource-content.js.map +1 -0
  113. package/dist/browser-tools/get-storage.d.ts +14 -0
  114. package/dist/browser-tools/get-storage.d.ts.map +1 -0
  115. package/dist/browser-tools/get-storage.js +28 -0
  116. package/dist/browser-tools/get-storage.js.map +1 -0
  117. package/dist/browser-tools/get-tab-content.d.ts +11 -0
  118. package/dist/browser-tools/get-tab-content.d.ts.map +1 -0
  119. package/dist/browser-tools/get-tab-content.js +29 -0
  120. package/dist/browser-tools/get-tab-content.js.map +1 -0
  121. package/dist/browser-tools/get-tab-info.d.ts +9 -0
  122. package/dist/browser-tools/get-tab-info.d.ts.map +1 -0
  123. package/dist/browser-tools/get-tab-info.js +17 -0
  124. package/dist/browser-tools/get-tab-info.js.map +1 -0
  125. package/dist/browser-tools/handle-dialog.d.ts +14 -0
  126. package/dist/browser-tools/handle-dialog.d.ts.map +1 -0
  127. package/dist/browser-tools/handle-dialog.js +30 -0
  128. package/dist/browser-tools/handle-dialog.js.map +1 -0
  129. package/dist/browser-tools/hover-element.d.ts +11 -0
  130. package/dist/browser-tools/hover-element.d.ts.map +1 -0
  131. package/dist/browser-tools/hover-element.js +24 -0
  132. package/dist/browser-tools/hover-element.js.map +1 -0
  133. package/dist/browser-tools/index.d.ts +7 -0
  134. package/dist/browser-tools/index.d.ts.map +1 -0
  135. package/dist/browser-tools/index.js +81 -0
  136. package/dist/browser-tools/index.js.map +1 -0
  137. package/dist/browser-tools/list-resources.d.ts +10 -0
  138. package/dist/browser-tools/list-resources.d.ts.map +1 -0
  139. package/dist/browser-tools/list-resources.js +29 -0
  140. package/dist/browser-tools/list-resources.js.map +1 -0
  141. package/dist/browser-tools/list-tabs.d.ts +7 -0
  142. package/dist/browser-tools/list-tabs.d.ts.map +1 -0
  143. package/dist/browser-tools/list-tabs.js +16 -0
  144. package/dist/browser-tools/list-tabs.js.map +1 -0
  145. package/dist/browser-tools/navigate-tab.d.ts +10 -0
  146. package/dist/browser-tools/navigate-tab.d.ts.map +1 -0
  147. package/dist/browser-tools/navigate-tab.js +18 -0
  148. package/dist/browser-tools/navigate-tab.js.map +1 -0
  149. package/dist/browser-tools/open-tab.d.ts +9 -0
  150. package/dist/browser-tools/open-tab.d.ts.map +1 -0
  151. package/dist/browser-tools/open-tab.js +18 -0
  152. package/dist/browser-tools/open-tab.js.map +1 -0
  153. package/dist/browser-tools/press-key.d.ts +17 -0
  154. package/dist/browser-tools/press-key.d.ts.map +1 -0
  155. package/dist/browser-tools/press-key.js +43 -0
  156. package/dist/browser-tools/press-key.js.map +1 -0
  157. package/dist/browser-tools/query-elements.d.ts +12 -0
  158. package/dist/browser-tools/query-elements.d.ts.map +1 -0
  159. package/dist/browser-tools/query-elements.js +30 -0
  160. package/dist/browser-tools/query-elements.js.map +1 -0
  161. package/dist/browser-tools/reload-extension.d.ts +13 -0
  162. package/dist/browser-tools/reload-extension.d.ts.map +1 -0
  163. package/dist/browser-tools/reload-extension.js +35 -0
  164. package/dist/browser-tools/reload-extension.js.map +1 -0
  165. package/dist/browser-tools/screenshot-tab.d.ts +9 -0
  166. package/dist/browser-tools/screenshot-tab.d.ts.map +1 -0
  167. package/dist/browser-tools/screenshot-tab.js +22 -0
  168. package/dist/browser-tools/screenshot-tab.js.map +1 -0
  169. package/dist/browser-tools/scroll.d.ts +23 -0
  170. package/dist/browser-tools/scroll.d.ts.map +1 -0
  171. package/dist/browser-tools/scroll.js +56 -0
  172. package/dist/browser-tools/scroll.js.map +1 -0
  173. package/dist/browser-tools/select-option.d.ts +12 -0
  174. package/dist/browser-tools/select-option.d.ts.map +1 -0
  175. package/dist/browser-tools/select-option.js +25 -0
  176. package/dist/browser-tools/select-option.js.map +1 -0
  177. package/dist/browser-tools/set-cookie.d.ts +16 -0
  178. package/dist/browser-tools/set-cookie.d.ts.map +1 -0
  179. package/dist/browser-tools/set-cookie.js +42 -0
  180. package/dist/browser-tools/set-cookie.js.map +1 -0
  181. package/dist/browser-tools/type-text.d.ts +12 -0
  182. package/dist/browser-tools/type-text.d.ts.map +1 -0
  183. package/dist/browser-tools/type-text.js +25 -0
  184. package/dist/browser-tools/type-text.js.map +1 -0
  185. package/dist/browser-tools/url-validation.d.ts +13 -0
  186. package/dist/browser-tools/url-validation.d.ts.map +1 -0
  187. package/dist/browser-tools/url-validation.js +23 -0
  188. package/dist/browser-tools/url-validation.js.map +1 -0
  189. package/dist/browser-tools/wait-for-element.d.ts +12 -0
  190. package/dist/browser-tools/wait-for-element.d.ts.map +1 -0
  191. package/dist/browser-tools/wait-for-element.js +29 -0
  192. package/dist/browser-tools/wait-for-element.js.map +1 -0
  193. package/dist/config.d.ts +99 -0
  194. package/dist/config.d.ts.map +1 -0
  195. package/dist/config.js +344 -0
  196. package/dist/config.js.map +1 -0
  197. package/dist/dev-mode.d.ts +14 -0
  198. package/dist/dev-mode.d.ts.map +1 -0
  199. package/dist/dev-mode.js +15 -0
  200. package/dist/dev-mode.js.map +1 -0
  201. package/dist/discovery-legacy.d.ts +32 -0
  202. package/dist/discovery-legacy.d.ts.map +1 -0
  203. package/dist/discovery-legacy.js +415 -0
  204. package/dist/discovery-legacy.js.map +1 -0
  205. package/dist/discovery.d.ts +28 -0
  206. package/dist/discovery.d.ts.map +1 -0
  207. package/dist/discovery.js +97 -0
  208. package/dist/discovery.js.map +1 -0
  209. package/dist/extension-install.d.ts +27 -0
  210. package/dist/extension-install.d.ts.map +1 -0
  211. package/dist/extension-install.js +75 -0
  212. package/dist/extension-install.js.map +1 -0
  213. package/dist/extension-protocol.d.ts +130 -0
  214. package/dist/extension-protocol.d.ts.map +1 -0
  215. package/dist/extension-protocol.js +869 -0
  216. package/dist/extension-protocol.js.map +1 -0
  217. package/dist/file-watcher.d.ts +75 -0
  218. package/dist/file-watcher.d.ts.map +1 -0
  219. package/dist/file-watcher.js +616 -0
  220. package/dist/file-watcher.js.map +1 -0
  221. package/dist/http-routes.d.ts +88 -0
  222. package/dist/http-routes.d.ts.map +1 -0
  223. package/dist/http-routes.js +545 -0
  224. package/dist/http-routes.js.map +1 -0
  225. package/dist/index.d.ts +45 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +187 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/loader.d.ts +100 -0
  230. package/dist/loader.d.ts.map +1 -0
  231. package/dist/loader.js +402 -0
  232. package/dist/loader.js.map +1 -0
  233. package/dist/log-buffer.d.ts +33 -0
  234. package/dist/log-buffer.d.ts.map +1 -0
  235. package/dist/log-buffer.js +64 -0
  236. package/dist/log-buffer.js.map +1 -0
  237. package/dist/logger.d.ts +34 -0
  238. package/dist/logger.d.ts.map +1 -0
  239. package/dist/logger.js +81 -0
  240. package/dist/logger.js.map +1 -0
  241. package/dist/manifest-schema.d.ts +14 -0
  242. package/dist/manifest-schema.d.ts.map +1 -0
  243. package/dist/manifest-schema.js +51 -0
  244. package/dist/manifest-schema.js.map +1 -0
  245. package/dist/mcp-setup.d.ts +131 -0
  246. package/dist/mcp-setup.d.ts.map +1 -0
  247. package/dist/mcp-setup.js +673 -0
  248. package/dist/mcp-setup.js.map +1 -0
  249. package/dist/permissions.d.ts +59 -0
  250. package/dist/permissions.d.ts.map +1 -0
  251. package/dist/permissions.js +141 -0
  252. package/dist/permissions.js.map +1 -0
  253. package/dist/registry.d.ts +78 -0
  254. package/dist/registry.d.ts.map +1 -0
  255. package/dist/registry.js +187 -0
  256. package/dist/registry.js.map +1 -0
  257. package/dist/reload.d.ts +52 -0
  258. package/dist/reload.d.ts.map +1 -0
  259. package/dist/reload.js +326 -0
  260. package/dist/reload.js.map +1 -0
  261. package/dist/resolver.d.ts +53 -0
  262. package/dist/resolver.d.ts.map +1 -0
  263. package/dist/resolver.js +272 -0
  264. package/dist/resolver.js.map +1 -0
  265. package/dist/sanitize-error.d.ts +8 -0
  266. package/dist/sanitize-error.d.ts.map +1 -0
  267. package/dist/sanitize-error.js +25 -0
  268. package/dist/sanitize-error.js.map +1 -0
  269. package/dist/sanitize-tool-output.d.ts +20 -0
  270. package/dist/sanitize-tool-output.d.ts.map +1 -0
  271. package/dist/sanitize-tool-output.js +52 -0
  272. package/dist/sanitize-tool-output.js.map +1 -0
  273. package/dist/sdk-version.d.ts +11 -0
  274. package/dist/sdk-version.d.ts.map +1 -0
  275. package/dist/sdk-version.js +23 -0
  276. package/dist/sdk-version.js.map +1 -0
  277. package/dist/shutdown.d.ts +28 -0
  278. package/dist/shutdown.d.ts.map +1 -0
  279. package/dist/shutdown.js +68 -0
  280. package/dist/shutdown.js.map +1 -0
  281. package/dist/skip-confirmation.d.ts +15 -0
  282. package/dist/skip-confirmation.d.ts.map +1 -0
  283. package/dist/skip-confirmation.js +16 -0
  284. package/dist/skip-confirmation.js.map +1 -0
  285. package/dist/skip-sanitization.d.ts +17 -0
  286. package/dist/skip-sanitization.d.ts.map +1 -0
  287. package/dist/skip-sanitization.js +18 -0
  288. package/dist/skip-sanitization.js.map +1 -0
  289. package/dist/skip-verification.d.ts +11 -0
  290. package/dist/skip-verification.d.ts.map +1 -0
  291. package/dist/skip-verification.js +12 -0
  292. package/dist/skip-verification.js.map +1 -0
  293. package/dist/state.d.ts +290 -0
  294. package/dist/state.d.ts.map +1 -0
  295. package/dist/state.js +111 -0
  296. package/dist/state.js.map +1 -0
  297. package/dist/verify-plugin.d.ts +53 -0
  298. package/dist/verify-plugin.d.ts.map +1 -0
  299. package/dist/verify-plugin.js +123 -0
  300. package/dist/verify-plugin.js.map +1 -0
  301. package/dist/version-check.d.ts +35 -0
  302. package/dist/version-check.d.ts.map +1 -0
  303. package/dist/version-check.js +111 -0
  304. package/dist/version-check.js.map +1 -0
  305. package/dist/version.d.ts +10 -0
  306. package/dist/version.d.ts.map +1 -0
  307. package/dist/version.js +22 -0
  308. package/dist/version.js.map +1 -0
  309. package/package.json +28 -0
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Authentication detection module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes captured network requests and page execution
5
+ * results, returns structured auth analysis. Does not call browser tools
6
+ * directly — the orchestrator (analyze-site/index.ts) collects data and
7
+ * passes it here.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Known session cookie patterns
11
+ // ---------------------------------------------------------------------------
12
+ const SESSION_COOKIE_PATTERNS = [
13
+ /^d$/,
14
+ /^_session_id$/i,
15
+ /^connect\.sid$/i,
16
+ /^JSESSIONID$/,
17
+ /^__Secure-/,
18
+ /^__Host-/,
19
+ /^sid$/i,
20
+ /^session$/i,
21
+ /^token$/i,
22
+ /^s$/,
23
+ /^sess$/i,
24
+ /^sessionid$/i,
25
+ /^session[_-]?token$/i,
26
+ /^auth[_-]?token$/i,
27
+ /^_csrf$/i,
28
+ ];
29
+ // ---------------------------------------------------------------------------
30
+ // JWT detection
31
+ // ---------------------------------------------------------------------------
32
+ const BASE64URL_SEGMENT = /^[A-Za-z0-9_-]+=*$/;
33
+ /** Returns true if the string looks like a JWT (three dot-separated base64url segments). */
34
+ const looksLikeJwt = (value) => {
35
+ const parts = value.split('.');
36
+ if (parts.length !== 3)
37
+ return false;
38
+ return parts.every(p => p.length > 0 && BASE64URL_SEGMENT.test(p));
39
+ };
40
+ // ---------------------------------------------------------------------------
41
+ // Auth-related key pattern (used for globals and storage)
42
+ // ---------------------------------------------------------------------------
43
+ const AUTH_KEY_PATTERN = /user|session|token|auth|account|profile|login|credential/i;
44
+ // ---------------------------------------------------------------------------
45
+ // API key header names (case-insensitive matching)
46
+ // ---------------------------------------------------------------------------
47
+ const API_KEY_HEADERS = new Set(['x-api-key', 'api-key', 'apikey']);
48
+ // ---------------------------------------------------------------------------
49
+ // Detection functions
50
+ // ---------------------------------------------------------------------------
51
+ const detectCookieSessions = (cookies) => {
52
+ const methods = [];
53
+ for (const cookie of cookies) {
54
+ if (SESSION_COOKIE_PATTERNS.some(p => p.test(cookie.name))) {
55
+ methods.push({
56
+ type: 'cookie-session',
57
+ details: `Session cookie "${cookie.name}" found`,
58
+ extractionHint: `document.cookie.match(/${cookie.name}=([^;]+)/)?.[1]`,
59
+ });
60
+ }
61
+ }
62
+ return methods;
63
+ };
64
+ const detectJwtInStorage = (entries, storageType) => {
65
+ const methods = [];
66
+ const type = storageType === 'local' ? 'jwt-localstorage' : 'jwt-sessionstorage';
67
+ const apiName = storageType === 'local' ? 'localStorage' : 'sessionStorage';
68
+ for (const entry of entries) {
69
+ if (looksLikeJwt(entry.value)) {
70
+ methods.push({
71
+ type,
72
+ details: `JWT found in ${apiName} key "${entry.key}"`,
73
+ extractionHint: `${apiName}.getItem('${entry.key}')`,
74
+ });
75
+ }
76
+ }
77
+ return methods;
78
+ };
79
+ /**
80
+ * Detects Authorization: Bearer headers in captured network requests.
81
+ *
82
+ * The network capture preserves the auth scheme prefix while redacting
83
+ * the credential (e.g., "Bearer [REDACTED]"), enabling reliable scheme
84
+ * detection. Falls back to cross-referencing with JWT in storage if
85
+ * the header is fully redacted (legacy "[REDACTED]" format).
86
+ */
87
+ const detectBearerHeaders = (requests, hasJwtInStorage) => {
88
+ const requestsWithAuth = requests.filter(r => r.requestHeaders && hasHeader(r.requestHeaders, 'authorization'));
89
+ if (requestsWithAuth.length === 0)
90
+ return [];
91
+ // Check if any Authorization header starts with "Bearer"
92
+ const hasBearerPrefix = requestsWithAuth.some(r => {
93
+ if (!r.requestHeaders)
94
+ return false;
95
+ const val = getHeaderValue(r.requestHeaders, 'authorization');
96
+ return val !== undefined && val.startsWith('Bearer ');
97
+ });
98
+ // Check if any Authorization header starts with "Basic"
99
+ const hasBasicPrefix = requestsWithAuth.some(r => {
100
+ if (!r.requestHeaders)
101
+ return false;
102
+ const val = getHeaderValue(r.requestHeaders, 'authorization');
103
+ return val !== undefined && val.startsWith('Basic ');
104
+ });
105
+ // If all auth headers are Basic (no Bearer), skip bearer detection
106
+ if (hasBasicPrefix && !hasBearerPrefix && !hasJwtInStorage)
107
+ return [];
108
+ // Classify as bearer-header if: explicit Bearer prefix, JWT in storage,
109
+ // or fully-redacted header with no Basic prefix (default assumption)
110
+ const firstWithAuth = requestsWithAuth[0];
111
+ const hasFullyRedacted = requestsWithAuth.some(r => {
112
+ const val = r.requestHeaders ? getHeaderValue(r.requestHeaders, 'authorization') : undefined;
113
+ return val === '[REDACTED]';
114
+ });
115
+ if (firstWithAuth && (hasBearerPrefix || hasJwtInStorage || (hasFullyRedacted && !hasBasicPrefix))) {
116
+ const sampleUrl = firstWithAuth.url;
117
+ return [
118
+ {
119
+ type: 'bearer-header',
120
+ details: `Authorization header detected on ${requestsWithAuth.length} request(s), e.g., ${truncateUrl(sampleUrl)}`,
121
+ extractionHint: hasJwtInStorage
122
+ ? '// Token likely from storage — see jwt-localstorage or jwt-sessionstorage entries above'
123
+ : '// Intercept fetch to capture the token:\n// const origFetch = window.fetch;\n// window.fetch = (...args) => { console.log(args); return origFetch(...args); }',
124
+ },
125
+ ];
126
+ }
127
+ return [];
128
+ };
129
+ /** Detects API key headers (X-API-Key, Api-Key, apikey) in network requests. */
130
+ const detectApiKeyHeaders = (requests) => {
131
+ const methods = [];
132
+ const seen = new Set();
133
+ for (const req of requests) {
134
+ if (!req.requestHeaders)
135
+ continue;
136
+ for (const [key] of Object.entries(req.requestHeaders)) {
137
+ const lower = key.toLowerCase();
138
+ if (API_KEY_HEADERS.has(lower) && !seen.has(lower)) {
139
+ seen.add(lower);
140
+ methods.push({
141
+ type: 'api-key-header',
142
+ details: `API key header "${key}" found in requests to ${truncateUrl(req.url)}`,
143
+ extractionHint: `// Intercept fetch to capture the ${key} header value:\n// const origFetch = window.fetch;\n// window.fetch = (...args) => { console.log(args); return origFetch(...args); }`,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ return methods;
149
+ };
150
+ /** Detects CSRF tokens from DOM elements and network headers. */
151
+ const detectCsrfTokens = (csrfDomTokens, requests) => {
152
+ const methods = [];
153
+ // DOM-based CSRF tokens (meta tags and hidden inputs)
154
+ for (const token of csrfDomTokens) {
155
+ const source = token.source === 'meta' ? `meta tag name="${token.name}"` : `hidden input name="${token.name}"`;
156
+ const extractionHint = token.source === 'meta'
157
+ ? `document.querySelector('meta[name="${token.name}"]')?.getAttribute('content')`
158
+ : `document.querySelector('input[name="${token.name}"]')?.value`;
159
+ methods.push({
160
+ type: 'csrf-token',
161
+ details: `CSRF token found in ${source}`,
162
+ extractionHint,
163
+ });
164
+ }
165
+ // CSRF headers in network requests (X-CSRF-Token, X-XSRF-Token)
166
+ const csrfHeaderNames = new Set();
167
+ for (const req of requests) {
168
+ if (!req.requestHeaders)
169
+ continue;
170
+ for (const key of Object.keys(req.requestHeaders)) {
171
+ const lower = key.toLowerCase();
172
+ if ((lower === 'x-csrf-token' || lower === 'x-xsrf-token') && !csrfHeaderNames.has(lower)) {
173
+ csrfHeaderNames.add(lower);
174
+ methods.push({
175
+ type: 'csrf-token',
176
+ details: `CSRF header "${key}" found in network requests`,
177
+ extractionHint: `// The ${key} header value is typically sourced from a meta tag or cookie`,
178
+ });
179
+ }
180
+ }
181
+ }
182
+ return methods;
183
+ };
184
+ /**
185
+ * Detects Basic Auth (Authorization: Basic) headers in network requests.
186
+ * The header value is scrubbed to "Basic [REDACTED]", preserving the scheme prefix.
187
+ */
188
+ const detectBasicAuth = (requests) => {
189
+ const requestsWithAuth = requests.filter(r => r.requestHeaders && hasHeader(r.requestHeaders, 'authorization'));
190
+ const hasBasicPrefix = requestsWithAuth.some(r => {
191
+ if (!r.requestHeaders)
192
+ return false;
193
+ const val = getHeaderValue(r.requestHeaders, 'authorization');
194
+ return val !== undefined && val.startsWith('Basic ');
195
+ });
196
+ if (!hasBasicPrefix)
197
+ return [];
198
+ const firstReq = requestsWithAuth[0];
199
+ if (!firstReq)
200
+ return [];
201
+ const sampleUrl = firstReq.url;
202
+ return [
203
+ {
204
+ type: 'basic-auth',
205
+ details: `Basic Auth header detected on request(s) to ${truncateUrl(sampleUrl)}`,
206
+ extractionHint: "// Basic Auth uses btoa('username:password')\n// Check if credentials are stored in a page global or prompted via browser dialog",
207
+ },
208
+ ];
209
+ };
210
+ /**
211
+ * Detects non-standard headers that appear on most requests and contain
212
+ * token-like values (long alphanumeric strings).
213
+ */
214
+ const detectCustomAuthHeaders = (requests) => {
215
+ if (requests.length < 2)
216
+ return [];
217
+ // Count header occurrences across requests
218
+ const headerCounts = new Map();
219
+ const headerSampleValues = new Map();
220
+ const standardHeaders = new Set([
221
+ 'accept',
222
+ 'accept-encoding',
223
+ 'accept-language',
224
+ 'cache-control',
225
+ 'connection',
226
+ 'content-length',
227
+ 'content-type',
228
+ 'host',
229
+ 'origin',
230
+ 'pragma',
231
+ 'referer',
232
+ 'sec-ch-ua',
233
+ 'sec-ch-ua-mobile',
234
+ 'sec-ch-ua-platform',
235
+ 'sec-fetch-dest',
236
+ 'sec-fetch-mode',
237
+ 'sec-fetch-site',
238
+ 'user-agent',
239
+ 'authorization',
240
+ 'cookie',
241
+ 'x-csrf-token',
242
+ 'x-xsrf-token',
243
+ 'x-api-key',
244
+ 'api-key',
245
+ 'apikey',
246
+ ]);
247
+ for (const req of requests) {
248
+ if (!req.requestHeaders)
249
+ continue;
250
+ for (const [key, value] of Object.entries(req.requestHeaders)) {
251
+ const lower = key.toLowerCase();
252
+ if (standardHeaders.has(lower))
253
+ continue;
254
+ if (value === '[REDACTED]')
255
+ continue;
256
+ headerCounts.set(lower, (headerCounts.get(lower) ?? 0) + 1);
257
+ if (!headerSampleValues.has(lower)) {
258
+ headerSampleValues.set(lower, value);
259
+ }
260
+ }
261
+ }
262
+ const methods = [];
263
+ const threshold = Math.max(2, Math.floor(requests.length * 0.5));
264
+ for (const [headerName, count] of headerCounts) {
265
+ if (count < threshold)
266
+ continue;
267
+ const sampleValue = headerSampleValues.get(headerName) ?? '';
268
+ // Token-like: at least 16 chars, mostly alphanumeric/base64
269
+ if (sampleValue.length >= 16 && /^[A-Za-z0-9+/=_-]+$/.test(sampleValue)) {
270
+ methods.push({
271
+ type: 'custom-auth-header',
272
+ details: `Custom header "${headerName}" appears on ${count}/${requests.length} requests with token-like values`,
273
+ extractionHint: `// Intercept fetch to capture the ${headerName} header:\n// const origFetch = window.fetch;\n// window.fetch = (...args) => { console.log(args); return origFetch(...args); }`,
274
+ });
275
+ }
276
+ }
277
+ return methods;
278
+ };
279
+ /** Detects auth data in well-known window globals (__NEXT_DATA__, __NUXT__, etc.). */
280
+ const detectAuthInGlobals = (globals) => {
281
+ const methods = [];
282
+ const authGlobalPaths = ['__NEXT_DATA__', '__NUXT__', '__INITIAL_STATE__', '__APP_STATE__'];
283
+ for (const global of globals) {
284
+ const basePath = global.path.split('.')[0] ?? '';
285
+ if (!authGlobalPaths.includes(basePath))
286
+ continue;
287
+ if (typeof global.value !== 'object' || global.value === null)
288
+ continue;
289
+ const authKeys = findAuthKeys(global.value, global.path, 0);
290
+ if (authKeys.length > 0) {
291
+ methods.push({
292
+ type: 'auth-global',
293
+ details: `Auth-related data found in window.${global.path}: keys [${authKeys.join(', ')}]`,
294
+ extractionHint: authKeys.map(k => `window.${k}`).join('\n'),
295
+ });
296
+ }
297
+ }
298
+ return methods;
299
+ };
300
+ // ---------------------------------------------------------------------------
301
+ // Helpers
302
+ // ---------------------------------------------------------------------------
303
+ /** Case-insensitive check for header presence. */
304
+ const hasHeader = (headers, name) => {
305
+ const lower = name.toLowerCase();
306
+ return Object.keys(headers).some(k => k.toLowerCase() === lower);
307
+ };
308
+ /** Case-insensitive header value lookup. */
309
+ const getHeaderValue = (headers, name) => {
310
+ const lower = name.toLowerCase();
311
+ for (const [k, v] of Object.entries(headers)) {
312
+ if (k.toLowerCase() === lower)
313
+ return v;
314
+ }
315
+ return undefined;
316
+ };
317
+ /** Truncate a URL for display in details strings. */
318
+ const truncateUrl = (url) => {
319
+ try {
320
+ const parsed = new URL(url);
321
+ const path = parsed.pathname.length > 40 ? parsed.pathname.slice(0, 40) + '...' : parsed.pathname;
322
+ return `${parsed.origin}${path}`;
323
+ }
324
+ catch {
325
+ return url.length > 80 ? url.slice(0, 80) + '...' : url;
326
+ }
327
+ };
328
+ /**
329
+ * Recursively find keys that match auth-related patterns within an object.
330
+ * Limited to 2 levels of depth.
331
+ */
332
+ const findAuthKeys = (obj, prefix, depth) => {
333
+ if (depth > 2)
334
+ return [];
335
+ const keys = [];
336
+ for (const [key, value] of Object.entries(obj)) {
337
+ const fullPath = `${prefix}.${key}`;
338
+ if (AUTH_KEY_PATTERN.test(key)) {
339
+ keys.push(fullPath);
340
+ }
341
+ if (depth < 2 && typeof value === 'object' && value !== null && !Array.isArray(value)) {
342
+ keys.push(...findAuthKeys(value, fullPath, depth + 1));
343
+ }
344
+ }
345
+ return keys;
346
+ };
347
+ // ---------------------------------------------------------------------------
348
+ // Main export
349
+ // ---------------------------------------------------------------------------
350
+ /**
351
+ * Analyze collected page data and detect authentication methods.
352
+ *
353
+ * This is a pure function: takes data in, returns structured results.
354
+ * The orchestrator (US-005) collects the data via browser tools and
355
+ * passes it here.
356
+ */
357
+ const detectAuth = (input) => {
358
+ const methods = [];
359
+ // 1. Cookie-based sessions
360
+ methods.push(...detectCookieSessions(input.cookies));
361
+ // 2. JWT in localStorage
362
+ methods.push(...detectJwtInStorage(input.localStorageEntries, 'local'));
363
+ // 3. JWT in sessionStorage
364
+ methods.push(...detectJwtInStorage(input.sessionStorageEntries, 'session'));
365
+ const hasJwtInStorage = methods.some(m => m.type === 'jwt-localstorage') || methods.some(m => m.type === 'jwt-sessionstorage');
366
+ // 4. Bearer headers (cross-referenced with JWT in storage)
367
+ methods.push(...detectBearerHeaders(input.networkRequests, hasJwtInStorage));
368
+ // 5. API key headers
369
+ methods.push(...detectApiKeyHeaders(input.networkRequests));
370
+ // 6. CSRF tokens (DOM + network headers)
371
+ methods.push(...detectCsrfTokens(input.csrfDomTokens, input.networkRequests));
372
+ // 7. Basic Auth
373
+ methods.push(...detectBasicAuth(input.networkRequests));
374
+ // 8. Custom auth headers
375
+ methods.push(...detectCustomAuthHeaders(input.networkRequests));
376
+ // 9. Auth data in window globals
377
+ methods.push(...detectAuthInGlobals(input.windowGlobals));
378
+ return {
379
+ authenticated: methods.length > 0,
380
+ methods,
381
+ };
382
+ };
383
+ export { detectAuth };
384
+ //# sourceMappingURL=detect-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-auth.js","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * DOM analysis module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes pre-collected DOM data from page scripts
5
+ * and returns structured information about forms, interactive elements,
6
+ * and data attributes. Does not call browser tools directly — the
7
+ * orchestrator collects data and passes it here.
8
+ */
9
+ /** A form field collected from a <form> element. */
10
+ interface FormField {
11
+ name: string;
12
+ type: string;
13
+ }
14
+ /** A form collected from the page via querySelectorAll('form'). */
15
+ interface FormInput {
16
+ action: string;
17
+ method: string;
18
+ fields: FormField[];
19
+ }
20
+ /** An interactive element collected from the page. */
21
+ interface InteractiveElementInput {
22
+ tag: string;
23
+ type: string | undefined;
24
+ name: string | undefined;
25
+ id: string | undefined;
26
+ text: string | undefined;
27
+ }
28
+ /** Data collected by the orchestrator and passed to detectDom. */
29
+ interface DomDetectionInput {
30
+ forms: FormInput[];
31
+ interactiveElements: InteractiveElementInput[];
32
+ dataAttributes: string[];
33
+ }
34
+ /** An analyzed form element with its action URL, HTTP method, and fields. */
35
+ interface FormAnalysis {
36
+ action: string;
37
+ method: string;
38
+ fields: FormField[];
39
+ }
40
+ /** An interactive DOM element (button, input, link, etc.) with identifying attributes. */
41
+ interface InteractiveElement {
42
+ tag: string;
43
+ type: string | undefined;
44
+ name: string | undefined;
45
+ id: string | undefined;
46
+ text: string | undefined;
47
+ }
48
+ /** Result of DOM analysis: forms, interactive elements, and data-attribute patterns found on the page. */
49
+ interface DomAnalysis {
50
+ forms: FormAnalysis[];
51
+ interactiveElements: InteractiveElement[];
52
+ dataAttributes: string[];
53
+ }
54
+ /**
55
+ * Analyze collected DOM data and return structured results.
56
+ *
57
+ * This is a pure function: takes data in, returns structured results.
58
+ * The heavy lifting (querying the DOM for forms, interactive elements,
59
+ * and data attributes) happens in page scripts run by the orchestrator.
60
+ * This module shapes and limits the results.
61
+ */
62
+ declare const detectDom: (input: DomDetectionInput) => DomAnalysis;
63
+ export { detectDom };
64
+ export type { DomDetectionInput, DomAnalysis, FormInput, FormField, FormAnalysis, InteractiveElementInput, InteractiveElement, };
65
+ //# sourceMappingURL=detect-dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-dom.d.ts","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-dom.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,oDAAoD;AACpD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,sDAAsD;AACtD,UAAU,uBAAuB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,kEAAkE;AAClE,UAAU,iBAAiB;IACzB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,mBAAmB,EAAE,uBAAuB,EAAE,CAAC;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD,6EAA6E;AAC7E,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,0FAA0F;AAC1F,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,0GAA0G;AAC1G,UAAU,WAAW;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAaD;;;;;;;GAOG;AACH,QAAA,MAAM,SAAS,GAAI,OAAO,iBAAiB,KAAG,WAqB7C,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * DOM analysis module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes pre-collected DOM data from page scripts
5
+ * and returns structured information about forms, interactive elements,
6
+ * and data attributes. Does not call browser tools directly — the
7
+ * orchestrator collects data and passes it here.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Constants
11
+ // ---------------------------------------------------------------------------
12
+ /** Maximum number of interactive elements to include in the output. */
13
+ const MAX_INTERACTIVE_ELEMENTS = 50;
14
+ // ---------------------------------------------------------------------------
15
+ // Detection logic
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * Analyze collected DOM data and return structured results.
19
+ *
20
+ * This is a pure function: takes data in, returns structured results.
21
+ * The heavy lifting (querying the DOM for forms, interactive elements,
22
+ * and data attributes) happens in page scripts run by the orchestrator.
23
+ * This module shapes and limits the results.
24
+ */
25
+ const detectDom = (input) => {
26
+ const forms = input.forms.map(form => ({
27
+ action: form.action,
28
+ method: form.method,
29
+ fields: form.fields,
30
+ }));
31
+ const interactiveElements = input.interactiveElements
32
+ .slice(0, MAX_INTERACTIVE_ELEMENTS)
33
+ .map(el => ({
34
+ tag: el.tag,
35
+ type: el.type,
36
+ name: el.name,
37
+ id: el.id,
38
+ text: el.text,
39
+ }));
40
+ // Deduplicate and sort data attribute names
41
+ const dataAttributes = [...new Set(input.dataAttributes)].sort();
42
+ return { forms, interactiveElements, dataAttributes };
43
+ };
44
+ export { detectDom };
45
+ //# sourceMappingURL=detect-dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-dom.js","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-dom.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8DH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAe,EAAE;IAC1D,MAAM,KAAK,GAAmB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC,CAAC;IAEJ,MAAM,mBAAmB,GAAyB,KAAK,CAAC,mBAAmB;SACxE,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;SAClC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACV,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC,CAAC,CAAC;IAEN,4CAA4C;IAC5C,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Framework and rendering detection module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes the result of executing detection scripts
5
+ * in the page context and returns structured framework information.
6
+ * Does not call browser tools directly — the orchestrator collects data
7
+ * and passes it here.
8
+ */
9
+ /** A detected framework from page-context probing. */
10
+ interface FrameworkProbe {
11
+ name: string;
12
+ version: string | undefined;
13
+ }
14
+ /** Data collected by the orchestrator and passed to detectFramework. */
15
+ interface FrameworkDetectionInput {
16
+ /** Frameworks found by probing globals and DOM markers. */
17
+ frameworkProbes: FrameworkProbe[];
18
+ /** Whether the page has a single root element (e.g., div#root, div#app, div#__next). */
19
+ hasSingleRootElement: boolean;
20
+ /** Whether the page has evidence of pushState/replaceState routing. */
21
+ usesPushState: boolean;
22
+ /** Whether window.__NEXT_DATA__ exists. */
23
+ hasNextData: boolean;
24
+ /** Whether window.__NUXT__ exists. */
25
+ hasNuxtData: boolean;
26
+ /** Whether the page contains hydration markers (e.g., data-reactroot, data-server-rendered). */
27
+ hasHydrationMarkers: boolean;
28
+ }
29
+ /** A detected frontend framework with its name and optional version. */
30
+ interface FrameworkInfo {
31
+ name: string;
32
+ version: string | undefined;
33
+ }
34
+ /** Result of framework detection: identified frameworks plus SPA and SSR classification. */
35
+ interface FrameworkAnalysis {
36
+ frameworks: FrameworkInfo[];
37
+ isSPA: boolean;
38
+ isSSR: boolean;
39
+ }
40
+ /**
41
+ * Analyze collected framework probe data and determine SPA/SSR status.
42
+ *
43
+ * This is a pure function: takes data in, returns structured results.
44
+ */
45
+ declare const detectFramework: (input: FrameworkDetectionInput) => FrameworkAnalysis;
46
+ export { detectFramework };
47
+ export type { FrameworkDetectionInput, FrameworkProbe, FrameworkAnalysis, FrameworkInfo };
48
+ //# sourceMappingURL=detect-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.d.ts","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,sDAAsD;AACtD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wEAAwE;AACxE,UAAU,uBAAuB;IAC/B,2DAA2D;IAC3D,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,wFAAwF;IACxF,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,aAAa,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,gGAAgG;IAChG,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAMD,wEAAwE;AACxE,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,4FAA4F;AAC5F,UAAU,iBAAiB;IACzB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD;;;;GAIG;AACH,QAAA,MAAM,eAAe,GAAI,OAAO,uBAAuB,KAAG,iBAezD,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Framework and rendering detection module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes the result of executing detection scripts
5
+ * in the page context and returns structured framework information.
6
+ * Does not call browser tools directly — the orchestrator collects data
7
+ * and passes it here.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Detection logic
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Analyze collected framework probe data and determine SPA/SSR status.
14
+ *
15
+ * This is a pure function: takes data in, returns structured results.
16
+ */
17
+ const detectFramework = (input) => {
18
+ const frameworks = input.frameworkProbes.map(probe => ({
19
+ name: probe.name,
20
+ version: probe.version,
21
+ }));
22
+ // SPA detection: single root element + pushState routing, or known SPA frameworks
23
+ const knownSpaFrameworks = new Set(['react', 'vue', 'angular', 'svelte', 'nextjs', 'nuxt', 'ember']);
24
+ const hasKnownSpa = frameworks.some(f => knownSpaFrameworks.has(f.name));
25
+ const isSPA = (input.hasSingleRootElement && input.usesPushState) || hasKnownSpa;
26
+ // SSR detection: __NEXT_DATA__, __NUXT__, or hydration markers
27
+ const isSSR = input.hasNextData || input.hasNuxtData || input.hasHydrationMarkers;
28
+ return { frameworks, isSPA, isSSR };
29
+ };
30
+ export { detectFramework };
31
+ //# sourceMappingURL=detect-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.js","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6CH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,KAA8B,EAAqB,EAAE;IAC5E,MAAM,UAAU,GAAoB,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC,CAAC;IAEJ,kFAAkF;IAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrG,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC;IAEjF,+DAA+D;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,mBAAmB,CAAC;IAElF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Window globals detection module for the site analyzer.
3
+ *
4
+ * Pure analysis function: takes the result of scanning window.* in the
5
+ * page context and returns structured information about non-standard
6
+ * globals. Does not call browser tools directly — the orchestrator
7
+ * collects data and passes it here.
8
+ */
9
+ /** A non-standard window global collected from the page context. */
10
+ interface GlobalProperty {
11
+ path: string;
12
+ type: string;
13
+ topLevelKeys: string[] | undefined;
14
+ }
15
+ /** Data collected by the orchestrator and passed to detectGlobals. */
16
+ interface GlobalsDetectionInput {
17
+ globals: GlobalProperty[];
18
+ }
19
+ /** A classified window global with an auth-data flag indicating whether its keys match auth patterns. */
20
+ interface GlobalInfo {
21
+ path: string;
22
+ type: string;
23
+ hasAuthData: boolean;
24
+ topLevelKeys: string[] | undefined;
25
+ }
26
+ /** Result of window globals detection: classified globals with auth-relevance flags. */
27
+ interface GlobalsAnalysis {
28
+ globals: GlobalInfo[];
29
+ }
30
+ /**
31
+ * Analyze collected window globals and flag auth-related data.
32
+ *
33
+ * This is a pure function: takes data in, returns structured results.
34
+ * The heavy lifting (enumerating window properties, filtering browser
35
+ * builtins, extracting top-level keys) happens in a page script run by
36
+ * the orchestrator. This module classifies the results.
37
+ */
38
+ declare const detectGlobals: (input: GlobalsDetectionInput) => GlobalsAnalysis;
39
+ export { detectGlobals };
40
+ export type { GlobalsDetectionInput, GlobalProperty, GlobalsAnalysis, GlobalInfo };
41
+ //# sourceMappingURL=detect-globals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-globals.d.ts","sourceRoot":"","sources":["../../../src/browser-tools/analyze-site/detect-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,oEAAoE;AACpE,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,sEAAsE;AACtE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAMD,yGAAyG;AACzG,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,wFAAwF;AACxF,UAAU,eAAe;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAoBD;;;;;;;GAOG;AACH,QAAA,MAAM,aAAa,GAAI,OAAO,qBAAqB,KAAG,eASrD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC"}