@enricai/barnacle 1.0.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 (448) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +958 -0
  3. package/dist/api/errors.d.ts +88 -0
  4. package/dist/api/errors.d.ts.map +1 -0
  5. package/dist/api/errors.js +164 -0
  6. package/dist/api/errors.js.map +1 -0
  7. package/dist/api/helpers/envelope.d.ts +13 -0
  8. package/dist/api/helpers/envelope.d.ts.map +1 -0
  9. package/dist/api/helpers/envelope.js +20 -0
  10. package/dist/api/helpers/envelope.js.map +1 -0
  11. package/dist/api/helpers/reply.d.ts +9 -0
  12. package/dist/api/helpers/reply.d.ts.map +1 -0
  13. package/dist/api/helpers/reply.js +14 -0
  14. package/dist/api/helpers/reply.js.map +1 -0
  15. package/dist/api/plugins/auth.d.ts +27 -0
  16. package/dist/api/plugins/auth.d.ts.map +1 -0
  17. package/dist/api/plugins/auth.js +111 -0
  18. package/dist/api/plugins/auth.js.map +1 -0
  19. package/dist/api/plugins/error-handler.d.ts +12 -0
  20. package/dist/api/plugins/error-handler.d.ts.map +1 -0
  21. package/dist/api/plugins/error-handler.js +72 -0
  22. package/dist/api/plugins/error-handler.js.map +1 -0
  23. package/dist/api/plugins/request-context.d.ts +17 -0
  24. package/dist/api/plugins/request-context.d.ts.map +1 -0
  25. package/dist/api/plugins/request-context.js +61 -0
  26. package/dist/api/plugins/request-context.js.map +1 -0
  27. package/dist/api/routes/health.d.ts +55 -0
  28. package/dist/api/routes/health.d.ts.map +1 -0
  29. package/dist/api/routes/health.js +137 -0
  30. package/dist/api/routes/health.js.map +1 -0
  31. package/dist/api/routes/plugins-introspection.d.ts +17 -0
  32. package/dist/api/routes/plugins-introspection.d.ts.map +1 -0
  33. package/dist/api/routes/plugins-introspection.js +13 -0
  34. package/dist/api/routes/plugins-introspection.js.map +1 -0
  35. package/dist/api/schemas/common.d.ts +114 -0
  36. package/dist/api/schemas/common.d.ts.map +1 -0
  37. package/dist/api/schemas/common.js +109 -0
  38. package/dist/api/schemas/common.js.map +1 -0
  39. package/dist/api/schemas/telemetry.d.ts +66 -0
  40. package/dist/api/schemas/telemetry.d.ts.map +1 -0
  41. package/dist/api/schemas/telemetry.js +52 -0
  42. package/dist/api/schemas/telemetry.js.map +1 -0
  43. package/dist/cache/keyed-ttl-cache.d.ts +45 -0
  44. package/dist/cache/keyed-ttl-cache.d.ts.map +1 -0
  45. package/dist/cache/keyed-ttl-cache.js +69 -0
  46. package/dist/cache/keyed-ttl-cache.js.map +1 -0
  47. package/dist/cache/response-cache.d.ts +37 -0
  48. package/dist/cache/response-cache.d.ts.map +1 -0
  49. package/dist/cache/response-cache.js +114 -0
  50. package/dist/cache/response-cache.js.map +1 -0
  51. package/dist/config.d.ts +258 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +138 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/lib/applicant-payload.d.ts +28 -0
  56. package/dist/lib/applicant-payload.d.ts.map +1 -0
  57. package/dist/lib/applicant-payload.js +20 -0
  58. package/dist/lib/applicant-payload.js.map +1 -0
  59. package/dist/lib/application-address.d.ts +16 -0
  60. package/dist/lib/application-address.d.ts.map +1 -0
  61. package/dist/lib/application-address.js +20 -0
  62. package/dist/lib/application-address.js.map +1 -0
  63. package/dist/lib/application-answers.d.ts +151 -0
  64. package/dist/lib/application-answers.d.ts.map +1 -0
  65. package/dist/lib/application-answers.js +95 -0
  66. package/dist/lib/application-answers.js.map +1 -0
  67. package/dist/lib/application-identity.d.ts +18 -0
  68. package/dist/lib/application-identity.d.ts.map +1 -0
  69. package/dist/lib/application-identity.js +20 -0
  70. package/dist/lib/application-identity.js.map +1 -0
  71. package/dist/lib/application-resume.d.ts +21 -0
  72. package/dist/lib/application-resume.d.ts.map +1 -0
  73. package/dist/lib/application-resume.js +23 -0
  74. package/dist/lib/application-resume.js.map +1 -0
  75. package/dist/lib/bedrock.d.ts +22 -0
  76. package/dist/lib/bedrock.d.ts.map +1 -0
  77. package/dist/lib/bedrock.js +35 -0
  78. package/dist/lib/bedrock.js.map +1 -0
  79. package/dist/lib/case-insensitive-headers.d.ts +15 -0
  80. package/dist/lib/case-insensitive-headers.d.ts.map +1 -0
  81. package/dist/lib/case-insensitive-headers.js +29 -0
  82. package/dist/lib/case-insensitive-headers.js.map +1 -0
  83. package/dist/lib/chromium-client-hints.d.ts +11 -0
  84. package/dist/lib/chromium-client-hints.d.ts.map +1 -0
  85. package/dist/lib/chromium-client-hints.js +17 -0
  86. package/dist/lib/chromium-client-hints.js.map +1 -0
  87. package/dist/lib/cookie-value.d.ts +8 -0
  88. package/dist/lib/cookie-value.d.ts.map +1 -0
  89. package/dist/lib/cookie-value.js +14 -0
  90. package/dist/lib/cookie-value.js.map +1 -0
  91. package/dist/lib/datadog.d.ts +8 -0
  92. package/dist/lib/datadog.d.ts.map +1 -0
  93. package/dist/lib/datadog.js +27 -0
  94. package/dist/lib/datadog.js.map +1 -0
  95. package/dist/lib/dd-metrics.d.ts +28 -0
  96. package/dist/lib/dd-metrics.d.ts.map +1 -0
  97. package/dist/lib/dd-metrics.js +62 -0
  98. package/dist/lib/dd-metrics.js.map +1 -0
  99. package/dist/lib/dispatch-metrics.d.ts +19 -0
  100. package/dist/lib/dispatch-metrics.d.ts.map +1 -0
  101. package/dist/lib/dispatch-metrics.js +65 -0
  102. package/dist/lib/dispatch-metrics.js.map +1 -0
  103. package/dist/lib/env.d.ts +37 -0
  104. package/dist/lib/env.d.ts.map +1 -0
  105. package/dist/lib/env.js +70 -0
  106. package/dist/lib/env.js.map +1 -0
  107. package/dist/lib/errors.d.ts +15 -0
  108. package/dist/lib/errors.d.ts.map +1 -0
  109. package/dist/lib/errors.js +20 -0
  110. package/dist/lib/errors.js.map +1 -0
  111. package/dist/lib/http.d.ts +7 -0
  112. package/dist/lib/http.d.ts.map +1 -0
  113. package/dist/lib/http.js +14 -0
  114. package/dist/lib/http.js.map +1 -0
  115. package/dist/lib/job-tracking.d.ts +17 -0
  116. package/dist/lib/job-tracking.d.ts.map +1 -0
  117. package/dist/lib/job-tracking.js +19 -0
  118. package/dist/lib/job-tracking.js.map +1 -0
  119. package/dist/lib/llm/anthropic-client.d.ts +12 -0
  120. package/dist/lib/llm/anthropic-client.d.ts.map +1 -0
  121. package/dist/lib/llm/anthropic-client.js +23 -0
  122. package/dist/lib/llm/anthropic-client.js.map +1 -0
  123. package/dist/lib/llm/judge.d.ts +57 -0
  124. package/dist/lib/llm/judge.d.ts.map +1 -0
  125. package/dist/lib/llm/judge.js +123 -0
  126. package/dist/lib/llm/judge.js.map +1 -0
  127. package/dist/lib/llm/judges/error-messages.d.ts +38 -0
  128. package/dist/lib/llm/judges/error-messages.d.ts.map +1 -0
  129. package/dist/lib/llm/judges/error-messages.js +72 -0
  130. package/dist/lib/llm/judges/error-messages.js.map +1 -0
  131. package/dist/lib/llm/judges/invalid-fields.d.ts +43 -0
  132. package/dist/lib/llm/judges/invalid-fields.d.ts.map +1 -0
  133. package/dist/lib/llm/judges/invalid-fields.js +80 -0
  134. package/dist/lib/llm/judges/invalid-fields.js.map +1 -0
  135. package/dist/lib/llm/judges/modal-priority.d.ts +41 -0
  136. package/dist/lib/llm/judges/modal-priority.d.ts.map +1 -0
  137. package/dist/lib/llm/judges/modal-priority.js +74 -0
  138. package/dist/lib/llm/judges/modal-priority.js.map +1 -0
  139. package/dist/lib/llm/judges/select-option.d.ts +49 -0
  140. package/dist/lib/llm/judges/select-option.d.ts.map +1 -0
  141. package/dist/lib/llm/judges/select-option.js +90 -0
  142. package/dist/lib/llm/judges/select-option.js.map +1 -0
  143. package/dist/lib/llm/judges/verify-submit.d.ts +68 -0
  144. package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -0
  145. package/dist/lib/llm/judges/verify-submit.js +89 -0
  146. package/dist/lib/llm/judges/verify-submit.js.map +1 -0
  147. package/dist/lib/llm/schemas.d.ts +220 -0
  148. package/dist/lib/llm/schemas.d.ts.map +1 -0
  149. package/dist/lib/llm/schemas.js +239 -0
  150. package/dist/lib/llm/schemas.js.map +1 -0
  151. package/dist/lib/logging.d.ts +39 -0
  152. package/dist/lib/logging.d.ts.map +1 -0
  153. package/dist/lib/logging.js +219 -0
  154. package/dist/lib/logging.js.map +1 -0
  155. package/dist/lib/multipart.d.ts +34 -0
  156. package/dist/lib/multipart.d.ts.map +1 -0
  157. package/dist/lib/multipart.js +55 -0
  158. package/dist/lib/multipart.js.map +1 -0
  159. package/dist/lib/option-matcher.d.ts +15 -0
  160. package/dist/lib/option-matcher.d.ts.map +1 -0
  161. package/dist/lib/option-matcher.js +69 -0
  162. package/dist/lib/option-matcher.js.map +1 -0
  163. package/dist/lib/phone.d.ts +11 -0
  164. package/dist/lib/phone.d.ts.map +1 -0
  165. package/dist/lib/phone.js +17 -0
  166. package/dist/lib/phone.js.map +1 -0
  167. package/dist/lib/random.d.ts +22 -0
  168. package/dist/lib/random.d.ts.map +1 -0
  169. package/dist/lib/random.js +33 -0
  170. package/dist/lib/random.js.map +1 -0
  171. package/dist/lib/statsd.d.ts +11 -0
  172. package/dist/lib/statsd.d.ts.map +1 -0
  173. package/dist/lib/statsd.js +68 -0
  174. package/dist/lib/statsd.js.map +1 -0
  175. package/dist/lib/telemetry/call-capture.d.ts +89 -0
  176. package/dist/lib/telemetry/call-capture.d.ts.map +1 -0
  177. package/dist/lib/telemetry/call-capture.js +190 -0
  178. package/dist/lib/telemetry/call-capture.js.map +1 -0
  179. package/dist/lib/telemetry/call-types.d.ts +65 -0
  180. package/dist/lib/telemetry/call-types.d.ts.map +1 -0
  181. package/dist/lib/telemetry/call-types.js +68 -0
  182. package/dist/lib/telemetry/call-types.js.map +1 -0
  183. package/dist/lib/telemetry/run-state.d.ts +15 -0
  184. package/dist/lib/telemetry/run-state.d.ts.map +1 -0
  185. package/dist/lib/telemetry/run-state.js +23 -0
  186. package/dist/lib/telemetry/run-state.js.map +1 -0
  187. package/dist/lib/telemetry/s3-sink.d.ts +48 -0
  188. package/dist/lib/telemetry/s3-sink.d.ts.map +1 -0
  189. package/dist/lib/telemetry/s3-sink.js +229 -0
  190. package/dist/lib/telemetry/s3-sink.js.map +1 -0
  191. package/dist/lib/telemetry/submission-capture.d.ts +45 -0
  192. package/dist/lib/telemetry/submission-capture.d.ts.map +1 -0
  193. package/dist/lib/telemetry/submission-capture.js +57 -0
  194. package/dist/lib/telemetry/submission-capture.js.map +1 -0
  195. package/dist/lib/telemetry/telemetry-paths.d.ts +59 -0
  196. package/dist/lib/telemetry/telemetry-paths.d.ts.map +1 -0
  197. package/dist/lib/telemetry/telemetry-paths.js +103 -0
  198. package/dist/lib/telemetry/telemetry-paths.js.map +1 -0
  199. package/dist/lib/tracking-click.d.ts +20 -0
  200. package/dist/lib/tracking-click.d.ts.map +1 -0
  201. package/dist/lib/tracking-click.js +75 -0
  202. package/dist/lib/tracking-click.js.map +1 -0
  203. package/dist/lib/url-capture.d.ts +8 -0
  204. package/dist/lib/url-capture.d.ts.map +1 -0
  205. package/dist/lib/url-capture.js +17 -0
  206. package/dist/lib/url-capture.js.map +1 -0
  207. package/dist/lib/us-states.d.ts +20 -0
  208. package/dist/lib/us-states.d.ts.map +1 -0
  209. package/dist/lib/us-states.js +86 -0
  210. package/dist/lib/us-states.js.map +1 -0
  211. package/dist/lib/zod-multipart.d.ts +18 -0
  212. package/dist/lib/zod-multipart.d.ts.map +1 -0
  213. package/dist/lib/zod-multipart.js +35 -0
  214. package/dist/lib/zod-multipart.js.map +1 -0
  215. package/dist/plugins/config-plugin.d.ts +77 -0
  216. package/dist/plugins/config-plugin.d.ts.map +1 -0
  217. package/dist/plugins/config-plugin.js +216 -0
  218. package/dist/plugins/config-plugin.js.map +1 -0
  219. package/dist/plugins/discover.d.ts +72 -0
  220. package/dist/plugins/discover.d.ts.map +1 -0
  221. package/dist/plugins/discover.js +265 -0
  222. package/dist/plugins/discover.js.map +1 -0
  223. package/dist/plugins/json-schema-to-zod.d.ts +47 -0
  224. package/dist/plugins/json-schema-to-zod.d.ts.map +1 -0
  225. package/dist/plugins/json-schema-to-zod.js +85 -0
  226. package/dist/plugins/json-schema-to-zod.js.map +1 -0
  227. package/dist/plugins/loader.d.ts +34 -0
  228. package/dist/plugins/loader.d.ts.map +1 -0
  229. package/dist/plugins/loader.js +348 -0
  230. package/dist/plugins/loader.js.map +1 -0
  231. package/dist/plugins/plugin-api-version.d.ts +8 -0
  232. package/dist/plugins/plugin-api-version.d.ts.map +1 -0
  233. package/dist/plugins/plugin-api-version.js +11 -0
  234. package/dist/plugins/plugin-api-version.js.map +1 -0
  235. package/dist/plugins/plugin-manifest-envelope.d.ts +16 -0
  236. package/dist/plugins/plugin-manifest-envelope.d.ts.map +1 -0
  237. package/dist/plugins/plugin-manifest-envelope.js +19 -0
  238. package/dist/plugins/plugin-manifest-envelope.js.map +1 -0
  239. package/dist/scraper/behavioral-signals.d.ts +16 -0
  240. package/dist/scraper/behavioral-signals.d.ts.map +1 -0
  241. package/dist/scraper/behavioral-signals.js +30 -0
  242. package/dist/scraper/behavioral-signals.js.map +1 -0
  243. package/dist/scraper/errors.d.ts +193 -0
  244. package/dist/scraper/errors.d.ts.map +1 -0
  245. package/dist/scraper/errors.js +226 -0
  246. package/dist/scraper/errors.js.map +1 -0
  247. package/dist/scraper/fixtures.d.ts +23 -0
  248. package/dist/scraper/fixtures.d.ts.map +1 -0
  249. package/dist/scraper/fixtures.js +48 -0
  250. package/dist/scraper/fixtures.js.map +1 -0
  251. package/dist/scraper/flow-runner.d.ts +1319 -0
  252. package/dist/scraper/flow-runner.d.ts.map +1 -0
  253. package/dist/scraper/flow-runner.js +5637 -0
  254. package/dist/scraper/flow-runner.js.map +1 -0
  255. package/dist/scraper/graphql-client.d.ts +30 -0
  256. package/dist/scraper/graphql-client.d.ts.map +1 -0
  257. package/dist/scraper/graphql-client.js +14 -0
  258. package/dist/scraper/graphql-client.js.map +1 -0
  259. package/dist/scraper/http-client.d.ts +75 -0
  260. package/dist/scraper/http-client.d.ts.map +1 -0
  261. package/dist/scraper/http-client.js +189 -0
  262. package/dist/scraper/http-client.js.map +1 -0
  263. package/dist/scraper/http-status-classifier.d.ts +12 -0
  264. package/dist/scraper/http-status-classifier.d.ts.map +1 -0
  265. package/dist/scraper/http-status-classifier.js +29 -0
  266. package/dist/scraper/http-status-classifier.js.map +1 -0
  267. package/dist/scraper/metrics.d.ts +50 -0
  268. package/dist/scraper/metrics.d.ts.map +1 -0
  269. package/dist/scraper/metrics.js +85 -0
  270. package/dist/scraper/metrics.js.map +1 -0
  271. package/dist/scraper/navigate.d.ts +20 -0
  272. package/dist/scraper/navigate.d.ts.map +1 -0
  273. package/dist/scraper/navigate.js +30 -0
  274. package/dist/scraper/navigate.js.map +1 -0
  275. package/dist/scraper/oracle-sentinels.d.ts +22 -0
  276. package/dist/scraper/oracle-sentinels.d.ts.map +1 -0
  277. package/dist/scraper/oracle-sentinels.js +40 -0
  278. package/dist/scraper/oracle-sentinels.js.map +1 -0
  279. package/dist/scraper/parse-json-response.d.ts +16 -0
  280. package/dist/scraper/parse-json-response.d.ts.map +1 -0
  281. package/dist/scraper/parse-json-response.js +37 -0
  282. package/dist/scraper/parse-json-response.js.map +1 -0
  283. package/dist/scraper/pool.d.ts +37 -0
  284. package/dist/scraper/pool.d.ts.map +1 -0
  285. package/dist/scraper/pool.js +105 -0
  286. package/dist/scraper/pool.js.map +1 -0
  287. package/dist/scraper/rate-limited-json-client.d.ts +35 -0
  288. package/dist/scraper/rate-limited-json-client.d.ts.map +1 -0
  289. package/dist/scraper/rate-limited-json-client.js +29 -0
  290. package/dist/scraper/rate-limited-json-client.js.map +1 -0
  291. package/dist/scraper/raw-fetch.d.ts +49 -0
  292. package/dist/scraper/raw-fetch.d.ts.map +1 -0
  293. package/dist/scraper/raw-fetch.js +40 -0
  294. package/dist/scraper/raw-fetch.js.map +1 -0
  295. package/dist/scraper/require-response-field.d.ts +23 -0
  296. package/dist/scraper/require-response-field.d.ts.map +1 -0
  297. package/dist/scraper/require-response-field.js +42 -0
  298. package/dist/scraper/require-response-field.js.map +1 -0
  299. package/dist/scraper/retry.d.ts +33 -0
  300. package/dist/scraper/retry.d.ts.map +1 -0
  301. package/dist/scraper/retry.js +122 -0
  302. package/dist/scraper/retry.js.map +1 -0
  303. package/dist/scraper/session-browserbase.d.ts +35 -0
  304. package/dist/scraper/session-browserbase.d.ts.map +1 -0
  305. package/dist/scraper/session-browserbase.js +198 -0
  306. package/dist/scraper/session-browserbase.js.map +1 -0
  307. package/dist/scraper/session-shared.d.ts +29 -0
  308. package/dist/scraper/session-shared.d.ts.map +1 -0
  309. package/dist/scraper/session-shared.js +35 -0
  310. package/dist/scraper/session-shared.js.map +1 -0
  311. package/dist/scraper/session-steel.d.ts +31 -0
  312. package/dist/scraper/session-steel.d.ts.map +1 -0
  313. package/dist/scraper/session-steel.js +140 -0
  314. package/dist/scraper/session-steel.js.map +1 -0
  315. package/dist/scraper/session-warmup.d.ts +31 -0
  316. package/dist/scraper/session-warmup.d.ts.map +1 -0
  317. package/dist/scraper/session-warmup.js +46 -0
  318. package/dist/scraper/session-warmup.js.map +1 -0
  319. package/dist/scraper/session.d.ts +21 -0
  320. package/dist/scraper/session.d.ts.map +1 -0
  321. package/dist/scraper/session.js +28 -0
  322. package/dist/scraper/session.js.map +1 -0
  323. package/dist/scraper/stagehand-guard.d.ts +128 -0
  324. package/dist/scraper/stagehand-guard.d.ts.map +1 -0
  325. package/dist/scraper/stagehand-guard.js +337 -0
  326. package/dist/scraper/stagehand-guard.js.map +1 -0
  327. package/dist/scraper/throttle.d.ts +21 -0
  328. package/dist/scraper/throttle.d.ts.map +1 -0
  329. package/dist/scraper/throttle.js +45 -0
  330. package/dist/scraper/throttle.js.map +1 -0
  331. package/dist/scripts/hca-inbox-poll.d.ts +19 -0
  332. package/dist/scripts/hca-inbox-poll.d.ts.map +1 -0
  333. package/dist/scripts/hca-inbox-poll.js +151 -0
  334. package/dist/scripts/hca-inbox-poll.js.map +1 -0
  335. package/dist/scripts/judge-llm-batch.d.ts +98 -0
  336. package/dist/scripts/judge-llm-batch.d.ts.map +1 -0
  337. package/dist/scripts/judge-llm-batch.js +350 -0
  338. package/dist/scripts/judge-llm-batch.js.map +1 -0
  339. package/dist/scripts/llm-heal.d.ts +165 -0
  340. package/dist/scripts/llm-heal.d.ts.map +1 -0
  341. package/dist/scripts/llm-heal.js +595 -0
  342. package/dist/scripts/llm-heal.js.map +1 -0
  343. package/dist/scripts/migrate-telemetry-dir-names.d.ts +57 -0
  344. package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +1 -0
  345. package/dist/scripts/migrate-telemetry-dir-names.js +156 -0
  346. package/dist/scripts/migrate-telemetry-dir-names.js.map +1 -0
  347. package/dist/scripts/probe-setinputfiles.d.ts +28 -0
  348. package/dist/scripts/probe-setinputfiles.d.ts.map +1 -0
  349. package/dist/scripts/probe-setinputfiles.js +95 -0
  350. package/dist/scripts/probe-setinputfiles.js.map +1 -0
  351. package/dist/scripts/recon-browser.d.ts +304 -0
  352. package/dist/scripts/recon-browser.d.ts.map +1 -0
  353. package/dist/scripts/recon-browser.js +1833 -0
  354. package/dist/scripts/recon-browser.js.map +1 -0
  355. package/dist/scripts/recon-generate.d.ts +182 -0
  356. package/dist/scripts/recon-generate.d.ts.map +1 -0
  357. package/dist/scripts/recon-generate.js +2572 -0
  358. package/dist/scripts/recon-generate.js.map +1 -0
  359. package/dist/scripts/recon-heal.d.ts +176 -0
  360. package/dist/scripts/recon-heal.d.ts.map +1 -0
  361. package/dist/scripts/recon-heal.js +584 -0
  362. package/dist/scripts/recon-heal.js.map +1 -0
  363. package/dist/scripts/recon-http.d.ts +19 -0
  364. package/dist/scripts/recon-http.d.ts.map +1 -0
  365. package/dist/scripts/recon-http.js +377 -0
  366. package/dist/scripts/recon-http.js.map +1 -0
  367. package/dist/scripts/recon-replay-jobs.d.ts +21 -0
  368. package/dist/scripts/recon-replay-jobs.d.ts.map +1 -0
  369. package/dist/scripts/recon-replay-jobs.js +221 -0
  370. package/dist/scripts/recon-replay-jobs.js.map +1 -0
  371. package/dist/scripts/recon-shared.d.ts +52 -0
  372. package/dist/scripts/recon-shared.d.ts.map +1 -0
  373. package/dist/scripts/recon-shared.js +68 -0
  374. package/dist/scripts/recon-shared.js.map +1 -0
  375. package/dist/scripts/recon-summarize.d.ts +15 -0
  376. package/dist/scripts/recon-summarize.d.ts.map +1 -0
  377. package/dist/scripts/recon-summarize.js +233 -0
  378. package/dist/scripts/recon-summarize.js.map +1 -0
  379. package/dist/scripts/smoke-test.d.ts +22 -0
  380. package/dist/scripts/smoke-test.d.ts.map +1 -0
  381. package/dist/scripts/smoke-test.js +236 -0
  382. package/dist/scripts/smoke-test.js.map +1 -0
  383. package/dist/server.d.ts +10 -0
  384. package/dist/server.d.ts.map +1 -0
  385. package/dist/server.js +189 -0
  386. package/dist/server.js.map +1 -0
  387. package/dist/site-plugin.d.ts +226 -0
  388. package/dist/site-plugin.d.ts.map +1 -0
  389. package/dist/site-plugin.js +13 -0
  390. package/dist/site-plugin.js.map +1 -0
  391. package/dist/testing/answers-fixture.d.ts +13 -0
  392. package/dist/testing/answers-fixture.d.ts.map +1 -0
  393. package/dist/testing/answers-fixture.js +37 -0
  394. package/dist/testing/answers-fixture.js.map +1 -0
  395. package/dist/testing/batch-email-confirmation.d.ts +58 -0
  396. package/dist/testing/batch-email-confirmation.d.ts.map +1 -0
  397. package/dist/testing/batch-email-confirmation.js +62 -0
  398. package/dist/testing/batch-email-confirmation.js.map +1 -0
  399. package/dist/testing/batch-report.d.ts +33 -0
  400. package/dist/testing/batch-report.d.ts.map +1 -0
  401. package/dist/testing/batch-report.js +30 -0
  402. package/dist/testing/batch-report.js.map +1 -0
  403. package/dist/testing/contract-parity-suite.d.ts +55 -0
  404. package/dist/testing/contract-parity-suite.d.ts.map +1 -0
  405. package/dist/testing/contract-parity-suite.js +39 -0
  406. package/dist/testing/contract-parity-suite.js.map +1 -0
  407. package/dist/testing/coverage-guard-suite.d.ts +46 -0
  408. package/dist/testing/coverage-guard-suite.d.ts.map +1 -0
  409. package/dist/testing/coverage-guard-suite.js +39 -0
  410. package/dist/testing/coverage-guard-suite.js.map +1 -0
  411. package/dist/testing/fixtures/resume.pdf +54 -0
  412. package/dist/testing/integration-runner.d.ts +62 -0
  413. package/dist/testing/integration-runner.d.ts.map +1 -0
  414. package/dist/testing/integration-runner.js +46 -0
  415. package/dist/testing/integration-runner.js.map +1 -0
  416. package/dist/testing/mock-fetch-response.d.ts +7 -0
  417. package/dist/testing/mock-fetch-response.d.ts.map +1 -0
  418. package/dist/testing/mock-fetch-response.js +16 -0
  419. package/dist/testing/mock-fetch-response.js.map +1 -0
  420. package/dist/testing/persona-fixture.d.ts +77 -0
  421. package/dist/testing/persona-fixture.d.ts.map +1 -0
  422. package/dist/testing/persona-fixture.js +83 -0
  423. package/dist/testing/persona-fixture.js.map +1 -0
  424. package/dist/testing/replay-integration-suite.d.ts +50 -0
  425. package/dist/testing/replay-integration-suite.d.ts.map +1 -0
  426. package/dist/testing/replay-integration-suite.js +45 -0
  427. package/dist/testing/replay-integration-suite.js.map +1 -0
  428. package/dist/testing/resume-fixture.d.ts +39 -0
  429. package/dist/testing/resume-fixture.d.ts.map +1 -0
  430. package/dist/testing/resume-fixture.js +38 -0
  431. package/dist/testing/resume-fixture.js.map +1 -0
  432. package/dist/testmail/client.d.ts +61 -0
  433. package/dist/testmail/client.d.ts.map +1 -0
  434. package/dist/testmail/client.js +190 -0
  435. package/dist/testmail/client.js.map +1 -0
  436. package/dist/testmail/errors.d.ts +18 -0
  437. package/dist/testmail/errors.d.ts.map +1 -0
  438. package/dist/testmail/errors.js +29 -0
  439. package/dist/testmail/errors.js.map +1 -0
  440. package/dist/types/dispatch-metrics.d.ts +46 -0
  441. package/dist/types/dispatch-metrics.d.ts.map +1 -0
  442. package/dist/types/dispatch-metrics.js +25 -0
  443. package/dist/types/dispatch-metrics.js.map +1 -0
  444. package/dist/types/logging.d.ts +11 -0
  445. package/dist/types/logging.d.ts.map +1 -0
  446. package/dist/types/logging.js +3 -0
  447. package/dist/types/logging.js.map +1 -0
  448. package/package.json +283 -0
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * Path helpers for per-site, per-URL telemetry partitioning. Lets each site's
4
+ * recon flow accumulate its LLM call corpus next to the flow file itself
5
+ * (durable as part of the site definition) rather than into a single global
6
+ * sink. The per-URL directory name keeps one URL's history isolated from
7
+ * another's, so cross-run pattern analysis on a specific target stays clean.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.canonicalizeUrl = canonicalizeUrl;
14
+ exports.urlDirName = urlDirName;
15
+ exports.resolveSiteTelemetryDir = resolveSiteTelemetryDir;
16
+ exports.resolveRunCallsPath = resolveRunCallsPath;
17
+ exports.resolveRunUrlPath = resolveRunUrlPath;
18
+ exports.readSiteCallsNdjson = readSiteCallsNdjson;
19
+ const node_crypto_1 = require("node:crypto");
20
+ const node_fs_1 = require("node:fs");
21
+ const node_path_1 = require("node:path");
22
+ const normalize_url_1 = __importDefault(require("normalize-url"));
23
+ /**
24
+ * Canonicalize a URL so trivially-different forms of the same target
25
+ * (query-param reorderings, trailing slashes, scheme case) collapse to the
26
+ * same identity. Query parameters are dropped entirely because the sites in
27
+ * the current corpus identify targets by path, not by query state.
28
+ */
29
+ function canonicalizeUrl(rawUrl) {
30
+ return (0, normalize_url_1.default)(rawUrl, {
31
+ removeQueryParameters: true,
32
+ stripHash: true,
33
+ stripWWW: false,
34
+ });
35
+ }
36
+ /**
37
+ * Filesystem-safe directory name for a URL using the form
38
+ * `<unix-ms-timestamp>-<short-hash>`. The timestamp makes `ls runs/` sort
39
+ * chronologically by default. The hash (first 8 hex chars of SHA-1 over
40
+ * the canonical URL) gives URL-deterministic identity, so multiple runs of
41
+ * the same target can be grouped with `awk -F- '{print $NF}' | sort | uniq -c`
42
+ * without consulting any sidecar.
43
+ *
44
+ * Why a caller-supplied timestamp instead of `Date.now()` inline: two
45
+ * helpers below (`resolveRunCallsPath`, `resolveRunUrlPath`) need to agree
46
+ * on the same directory within a single run, so the caller captures
47
+ * `Date.now()` once at run-start and threads it through both calls. Same
48
+ * `(timestampMs, rawUrl)` always yields the same dirName — deterministic.
49
+ *
50
+ * The `url.txt` sidecar continues to carry the authoritative URL; the hash
51
+ * is not reversed in any current consumer.
52
+ */
53
+ function urlDirName(timestampMs, rawUrl) {
54
+ const canonical = canonicalizeUrl(rawUrl);
55
+ const hash = (0, node_crypto_1.createHash)("sha1").update(canonical, "utf8").digest("hex").slice(0, 8);
56
+ return `${timestampMs}-${hash}`;
57
+ }
58
+ /**
59
+ * Resolve the per-site telemetry directory from the flow file path. Returns
60
+ * null when no flow file was supplied (inline --flow mode, where there's no
61
+ * durable home for the data) so the caller can short-circuit to a no-op sink.
62
+ */
63
+ function resolveSiteTelemetryDir(flowFile) {
64
+ if (flowFile === null)
65
+ return null;
66
+ return (0, node_path_1.join)((0, node_path_1.dirname)(flowFile), "telemetry");
67
+ }
68
+ /**
69
+ * Per-URL `calls.ndjson` sink path within a site telemetry directory.
70
+ * `timestampMs` is the run-start timestamp captured once by the caller so
71
+ * sibling calls (`resolveRunUrlPath`) land in the same directory.
72
+ */
73
+ function resolveRunCallsPath(siteTelemetryDir, timestampMs, rawUrl) {
74
+ return (0, node_path_1.join)(siteTelemetryDir, "runs", urlDirName(timestampMs, rawUrl), "calls.ndjson");
75
+ }
76
+ /**
77
+ * Per-URL `url.txt` companion path. The directory name is `<ts>-<hash>`;
78
+ * the sidecar carries the original URL so any engineer browsing the
79
+ * telemetry tree sees the URL without needing to recover it from the hash.
80
+ */
81
+ function resolveRunUrlPath(siteTelemetryDir, timestampMs, rawUrl) {
82
+ return (0, node_path_1.join)(siteTelemetryDir, "runs", urlDirName(timestampMs, rawUrl), "url.txt");
83
+ }
84
+ /**
85
+ * Concatenate every `runs/<urlDirName>/calls.ndjson` under the site telemetry
86
+ * directory into a single NDJSON string. Used when a consumer needs the
87
+ * site's full call history (cross-URL pattern analysis) rather than a single
88
+ * URL's slice. Returns empty string when the directory doesn't exist yet —
89
+ * the caller treats that the same as "no telemetry recorded."
90
+ */
91
+ function readSiteCallsNdjson(siteTelemetryDir) {
92
+ const runsDir = (0, node_path_1.join)(siteTelemetryDir, "runs");
93
+ if (!(0, node_fs_1.existsSync)(runsDir))
94
+ return "";
95
+ const partitions = (0, node_fs_1.readdirSync)(runsDir, { withFileTypes: true })
96
+ .filter((d) => d.isDirectory())
97
+ .map((d) => (0, node_path_1.join)(runsDir, d.name, "calls.ndjson"))
98
+ .filter((p) => (0, node_fs_1.existsSync)(p));
99
+ if (partitions.length === 0)
100
+ return "";
101
+ return partitions.map((p) => (0, node_fs_1.readFileSync)(p, "utf8")).join("");
102
+ }
103
+ //# sourceMappingURL=telemetry-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-paths.js","sourceRoot":"","sources":["../../../src/lib/telemetry/telemetry-paths.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAcH,0CAMC;AAmBD,gCAIC;AAOD,0DAGC;AAOD,kDAMC;AAOD,8CAMC;AASD,kDASC;AA/FD,6CAAyC;AACzC,qCAAgE;AAChE,yCAA0C;AAE1C,kEAAyC;AAEzC;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAA,uBAAY,EAAC,MAAM,EAAE;QAC1B,qBAAqB,EAAE,IAAI;QAC3B,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,UAAU,CAAC,WAAmB,EAAE,MAAc;IAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,OAAO,GAAG,WAAW,IAAI,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,QAAuB;IAC7D,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAA,gBAAI,EAAC,IAAA,mBAAO,EAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CACjC,gBAAwB,EACxB,WAAmB,EACnB,MAAc;IAEd,OAAO,IAAA,gBAAI,EAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,gBAAwB,EACxB,WAAmB,EACnB,MAAc;IAEd,OAAO,IAAA,gBAAI,EAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,gBAAwB;IAC1D,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;SACjD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Fire-and-forget background click for Appcast vivclid tracking URLs.
3
+ * After a successful submission, Barnacle navigates to the tracking URL
4
+ * in a short-lived Browserbase session so Appcast records the Click event.
5
+ *
6
+ * Navigation pattern is proven against click.appcast.io with advancedStealth.
7
+ * No CDP behavioral signals are needed; those are only required when extracting
8
+ * DataDome tokens for subsequent Node HTTP requests.
9
+ */
10
+ /**
11
+ * Launches a background tracking click. Returns immediately — the caller
12
+ * does not await the result. Errors never propagate.
13
+ */
14
+ export declare function fireTrackingClick(trackingUrl: string, siteId: string): void;
15
+ /**
16
+ * Awaits all in-flight tracking clicks, used during graceful shutdown to
17
+ * prevent Browserbase session leaks on SIGTERM.
18
+ */
19
+ export declare function drainTrackingClicks(timeoutMs?: number): Promise<void>;
20
+ //# sourceMappingURL=tracking-click.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-click.d.ts","sourceRoot":"","sources":["../../src/lib/tracking-click.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsDH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK3E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Fire-and-forget background click for Appcast vivclid tracking URLs.
4
+ * After a successful submission, Barnacle navigates to the tracking URL
5
+ * in a short-lived Browserbase session so Appcast records the Click event.
6
+ *
7
+ * Navigation pattern is proven against click.appcast.io with advancedStealth.
8
+ * No CDP behavioral signals are needed; those are only required when extracting
9
+ * DataDome tokens for subsequent Node HTTP requests.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fireTrackingClick = fireTrackingClick;
13
+ exports.drainTrackingClicks = drainTrackingClicks;
14
+ const dd_metrics_1 = require("../lib/dd-metrics");
15
+ const errors_1 = require("../lib/errors");
16
+ const logging_1 = require("../lib/logging");
17
+ const session_browserbase_1 = require("../scraper/session-browserbase");
18
+ const logger = (0, logging_1.getLogger)({ name: "tracking-click" });
19
+ const NAVIGATE_TIMEOUT_MS = 30_000;
20
+ const SETTLE_WAIT_MS = 5_000;
21
+ const inFlightClicks = new Set();
22
+ /**
23
+ * Navigates a Browserbase session to the tracking URL. Errors are logged
24
+ * and swallowed — the apply already succeeded, so a failed tracking click
25
+ * is a monitoring concern, not a runtime failure.
26
+ */
27
+ async function executeTrackingClick(trackingUrl, siteId) {
28
+ const startedAt = Date.now();
29
+ (0, dd_metrics_1.recordTrackingClickAttempt)(siteId);
30
+ let session;
31
+ try {
32
+ session = await (0, session_browserbase_1.createBrowserbaseBrowserSession)({ advancedStealth: true });
33
+ const page = await session.stagehand.context.awaitActivePage();
34
+ await page.goto(trackingUrl, { waitUntil: "domcontentloaded", timeoutMs: NAVIGATE_TIMEOUT_MS });
35
+ await page.waitForTimeout(SETTLE_WAIT_MS);
36
+ (0, dd_metrics_1.recordTrackingClickSuccess)(siteId);
37
+ logger.info(`tracking click success site=${siteId} url=${trackingUrl.slice(0, 120)} durationMs=${Date.now() - startedAt}`);
38
+ }
39
+ catch (err) {
40
+ (0, dd_metrics_1.recordTrackingClickFailure)(siteId, err instanceof Error ? err.constructor.name : "unknown");
41
+ logger.warn(`tracking click failed site=${siteId} url=${trackingUrl.slice(0, 120)}: ${(0, errors_1.toErrorMessage)(err)}`);
42
+ }
43
+ finally {
44
+ (0, dd_metrics_1.recordTrackingClickDuration)(siteId, Date.now() - startedAt);
45
+ if (session) {
46
+ await session.close().catch((closeErr) => {
47
+ logger.warn(`tracking click session close failed: ${(0, errors_1.toErrorMessage)(closeErr)}`);
48
+ });
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * Launches a background tracking click. Returns immediately — the caller
54
+ * does not await the result. Errors never propagate.
55
+ */
56
+ function fireTrackingClick(trackingUrl, siteId) {
57
+ const promise = executeTrackingClick(trackingUrl, siteId).finally(() => {
58
+ inFlightClicks.delete(promise);
59
+ });
60
+ inFlightClicks.add(promise);
61
+ }
62
+ /**
63
+ * Awaits all in-flight tracking clicks, used during graceful shutdown to
64
+ * prevent Browserbase session leaks on SIGTERM.
65
+ */
66
+ async function drainTrackingClicks(timeoutMs = 20_000) {
67
+ if (inFlightClicks.size === 0)
68
+ return;
69
+ logger.info(`draining ${inFlightClicks.size} in-flight tracking click(s)`);
70
+ await Promise.race([
71
+ Promise.allSettled([...inFlightClicks]),
72
+ new Promise((resolve) => setTimeout(resolve, timeoutMs)),
73
+ ]);
74
+ }
75
+ //# sourceMappingURL=tracking-click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-click.js","sourceRoot":"","sources":["../../src/lib/tracking-click.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA0DH,8CAKC;AAMD,kDAOC;AA1ED,iDAK0B;AAC1B,yCAA8C;AAC9C,2CAA0C;AAC1C,uEAAgF;AAEhF,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAErD,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEhD;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,MAAc;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAA,uCAA0B,EAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,OAAgF,CAAC;IACrF,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,qDAA+B,EAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAE1C,IAAA,uCAA0B,EAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CACT,+BAA+B,MAAM,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAC9G,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAA,uCAA0B,EAAC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5F,MAAM,CAAC,IAAI,CACT,8BAA8B,MAAM,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAA,uBAAc,EAAC,GAAG,CAAC,EAAE,CAChG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAA,wCAA2B,EAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAA,uBAAc,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,WAAmB,EAAE,MAAc;IACnE,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACrE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CAAC,SAAS,GAAG,MAAM;IAC1D,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IACtC,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,IAAI,8BAA8B,CAAC,CAAC;IAC3E,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;QACvC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Match `pattern` against `url` and return the first capture group.
3
+ * Invokes `onMiss` (which must throw) when the pattern does not match
4
+ * or has no capture group. Callers supply their own regex and throw
5
+ * so plugin-specific error classes and messages are preserved exactly.
6
+ */
7
+ export declare function matchUrlCaptureGroup(url: string, pattern: RegExp, onMiss: () => never): string;
8
+ //# sourceMappingURL=url-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-capture.d.ts","sourceRoot":"","sources":["../../src/lib/url-capture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,MAAM,CAM9F"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchUrlCaptureGroup = matchUrlCaptureGroup;
4
+ /**
5
+ * Match `pattern` against `url` and return the first capture group.
6
+ * Invokes `onMiss` (which must throw) when the pattern does not match
7
+ * or has no capture group. Callers supply their own regex and throw
8
+ * so plugin-specific error classes and messages are preserved exactly.
9
+ */
10
+ function matchUrlCaptureGroup(url, pattern, onMiss) {
11
+ const match = url.match(pattern);
12
+ if (!match || match[1] === undefined) {
13
+ onMiss();
14
+ }
15
+ return match[1];
16
+ }
17
+ //# sourceMappingURL=url-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-capture.js","sourceRoot":"","sources":["../../src/lib/url-capture.ts"],"names":[],"mappings":";;AAMA,oDAMC;AAZD;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,GAAW,EAAE,OAAe,EAAE,MAAmB;IACpF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAW,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared US state and territory name→abbreviation map. Extracted from
3
+ * site-specific copies in appcast and encompasshealth so any plugin can
4
+ * resolve a full state name (or a 2-letter code) to an uppercase abbreviation
5
+ * without duplicating this data.
6
+ *
7
+ * Covers all 50 states, the District of Columbia, and the 5 US territories:
8
+ * American Samoa (AS), Guam (GU), Northern Mariana Islands (MP),
9
+ * Puerto Rico (PR), and U.S. Virgin Islands (VI).
10
+ */
11
+ export declare const US_STATE_NAMES: Record<string, string>;
12
+ /**
13
+ * Converts a US state/territory name or existing 2-letter code to its
14
+ * uppercase abbreviation. Input is trimmed before matching so surrounding
15
+ * whitespace never causes a spurious identity fallback. Already-abbreviated
16
+ * 2-letter inputs pass through uppercased; unrecognised inputs are returned
17
+ * trimmed but otherwise unchanged (identity fallback).
18
+ */
19
+ export declare function stateToCode(state: string): string;
20
+ //# sourceMappingURL=us-states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-states.d.ts","sourceRoot":"","sources":["../../src/lib/us-states.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyDjD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Shared US state and territory name→abbreviation map. Extracted from
4
+ * site-specific copies in appcast and encompasshealth so any plugin can
5
+ * resolve a full state name (or a 2-letter code) to an uppercase abbreviation
6
+ * without duplicating this data.
7
+ *
8
+ * Covers all 50 states, the District of Columbia, and the 5 US territories:
9
+ * American Samoa (AS), Guam (GU), Northern Mariana Islands (MP),
10
+ * Puerto Rico (PR), and U.S. Virgin Islands (VI).
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.US_STATE_NAMES = void 0;
14
+ exports.stateToCode = stateToCode;
15
+ exports.US_STATE_NAMES = {
16
+ alabama: "AL",
17
+ alaska: "AK",
18
+ arizona: "AZ",
19
+ arkansas: "AR",
20
+ california: "CA",
21
+ colorado: "CO",
22
+ connecticut: "CT",
23
+ delaware: "DE",
24
+ florida: "FL",
25
+ georgia: "GA",
26
+ hawaii: "HI",
27
+ idaho: "ID",
28
+ illinois: "IL",
29
+ indiana: "IN",
30
+ iowa: "IA",
31
+ kansas: "KS",
32
+ kentucky: "KY",
33
+ louisiana: "LA",
34
+ maine: "ME",
35
+ maryland: "MD",
36
+ massachusetts: "MA",
37
+ michigan: "MI",
38
+ minnesota: "MN",
39
+ mississippi: "MS",
40
+ missouri: "MO",
41
+ montana: "MT",
42
+ nebraska: "NE",
43
+ nevada: "NV",
44
+ "new hampshire": "NH",
45
+ "new jersey": "NJ",
46
+ "new mexico": "NM",
47
+ "new york": "NY",
48
+ "north carolina": "NC",
49
+ "north dakota": "ND",
50
+ ohio: "OH",
51
+ oklahoma: "OK",
52
+ oregon: "OR",
53
+ pennsylvania: "PA",
54
+ "rhode island": "RI",
55
+ "south carolina": "SC",
56
+ "south dakota": "SD",
57
+ tennessee: "TN",
58
+ texas: "TX",
59
+ utah: "UT",
60
+ vermont: "VT",
61
+ virginia: "VA",
62
+ washington: "WA",
63
+ "west virginia": "WV",
64
+ wisconsin: "WI",
65
+ wyoming: "WY",
66
+ "district of columbia": "DC",
67
+ "american samoa": "AS",
68
+ guam: "GU",
69
+ "northern mariana islands": "MP",
70
+ "puerto rico": "PR",
71
+ "u.s. virgin islands": "VI",
72
+ };
73
+ /**
74
+ * Converts a US state/territory name or existing 2-letter code to its
75
+ * uppercase abbreviation. Input is trimmed before matching so surrounding
76
+ * whitespace never causes a spurious identity fallback. Already-abbreviated
77
+ * 2-letter inputs pass through uppercased; unrecognised inputs are returned
78
+ * trimmed but otherwise unchanged (identity fallback).
79
+ */
80
+ function stateToCode(state) {
81
+ const trimmed = state.trim();
82
+ if (/^[A-Za-z]{2}$/.test(trimmed))
83
+ return trimmed.toUpperCase();
84
+ return exports.US_STATE_NAMES[trimmed.toLowerCase()] ?? trimmed;
85
+ }
86
+ //# sourceMappingURL=us-states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-states.js","sourceRoot":"","sources":["../../src/lib/us-states.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAoEH,kCAIC;AAtEY,QAAA,cAAc,GAA2B;IACpD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,sBAAsB,EAAE,IAAI;IAC5B,gBAAgB,EAAE,IAAI;IACtB,IAAI,EAAE,IAAI;IACV,0BAA0B,EAAE,IAAI;IAChC,aAAa,EAAE,IAAI;IACnB,qBAAqB,EAAE,IAAI;CAC5B,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAChE,OAAO,sBAAc,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod/v4";
2
+ /**
3
+ * Multipart bodies can't nest objects, so an object-shaped field on a
4
+ * payload schema needs to accept either the real object (from `dispatch()`
5
+ * callers that bypass the multipart parser) or a JSON-encoded string (from
6
+ * curl `-F 'Field={...}'` callers). This preprocessor unifies both into
7
+ * the object shape the inner schema validates. Unparseable strings are
8
+ * passed through as-is so the inner schema produces the right validation error.
9
+ */
10
+ export declare function multipartJsonObject<T extends z.ZodTypeAny>(innerSchema: T): z.ZodType<z.infer<T>>;
11
+ /**
12
+ * Multipart form fields serialize booleans as the strings 'true'/'false'.
13
+ * Accepts real booleans as-is (from dispatch() callers that bypass the
14
+ * multipart parser). Unrecognized values are passed through so z.boolean()
15
+ * produces the right validation error.
16
+ */
17
+ export declare function multipartBoolean(): z.ZodType<boolean>;
18
+ //# sourceMappingURL=zod-multipart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-multipart.d.ts","sourceRoot":"","sources":["../../src/lib/zod-multipart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CASjG;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAKrD"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.multipartJsonObject = multipartJsonObject;
4
+ exports.multipartBoolean = multipartBoolean;
5
+ const v4_1 = require("zod/v4");
6
+ /**
7
+ * Multipart bodies can't nest objects, so an object-shaped field on a
8
+ * payload schema needs to accept either the real object (from `dispatch()`
9
+ * callers that bypass the multipart parser) or a JSON-encoded string (from
10
+ * curl `-F 'Field={...}'` callers). This preprocessor unifies both into
11
+ * the object shape the inner schema validates. Unparseable strings are
12
+ * passed through as-is so the inner schema produces the right validation error.
13
+ */
14
+ function multipartJsonObject(innerSchema) {
15
+ return v4_1.z.preprocess((v) => {
16
+ if (typeof v !== "string")
17
+ return v;
18
+ try {
19
+ return JSON.parse(v);
20
+ }
21
+ catch {
22
+ return v;
23
+ }
24
+ }, innerSchema);
25
+ }
26
+ /**
27
+ * Multipart form fields serialize booleans as the strings 'true'/'false'.
28
+ * Accepts real booleans as-is (from dispatch() callers that bypass the
29
+ * multipart parser). Unrecognized values are passed through so z.boolean()
30
+ * produces the right validation error.
31
+ */
32
+ function multipartBoolean() {
33
+ return v4_1.z.preprocess((v) => (v === "true" ? true : v === "false" ? false : v), v4_1.z.boolean());
34
+ }
35
+ //# sourceMappingURL=zod-multipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-multipart.js","sourceRoot":"","sources":["../../src/lib/zod-multipart.ts"],"names":[],"mappings":";;AAUA,kDASC;AAQD,4CAKC;AAhCD,+BAA2B;AAE3B;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAyB,WAAc;IACxE,OAAO,MAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC,EAAE,WAAW,CAA0B,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,MAAC,CAAC,UAAU,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,MAAC,CAAC,OAAO,EAAE,CACU,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Turns a declarative plugin manifest (JSON on disk, no per-site TypeScript)
3
+ * into a live {@link SitePlugin} at load time. This is what makes a Barnacle
4
+ * site loadable from configuration alone: the manifest carries the request /
5
+ * response / extract schemas as JSON Schema and the browser flow as data, and
6
+ * `buildConfigPlugin` synthesizes the Zod instances + `execute` function the
7
+ * loader's `validatePluginShape` requires.
8
+ *
9
+ * The manifest wears the Kubernetes-style `apiVersion` / `kind` / `metadata` /
10
+ * `spec` envelope so it reads like every other declarative object operators
11
+ * already know, and the browser flow reuses the same `RECON_FLOW_STEP_SCHEMA` +
12
+ * `runHealingFlow` interpreter the recon toolchain and generated plugins use —
13
+ * this factory is the recon-generate `emitBrowserFlowTs` template made
14
+ * data-driven instead of frozen into source.
15
+ */
16
+ import { z } from "zod/v4";
17
+ import type { SitePlugin } from "../site-plugin";
18
+ /**
19
+ * Structural schema for a config-plugin manifest. Validated before conversion
20
+ * so a malformed manifest fails at load with a descriptive Zod error rather
21
+ * than a runtime crash while the plugin is servicing a request.
22
+ */
23
+ export declare const CONFIG_PLUGIN_MANIFEST: z.ZodObject<{
24
+ apiVersion: z.ZodLiteral<"barnacle.dev/v1">;
25
+ kind: z.ZodLiteral<"SitePlugin">;
26
+ metadata: z.ZodObject<{
27
+ siteId: z.ZodString;
28
+ displayName: z.ZodString;
29
+ }, z.core.$strip>;
30
+ spec: z.ZodObject<{
31
+ defaultBaseUrl: z.ZodOptional<z.ZodString>;
32
+ routeOverride: z.ZodOptional<z.ZodString>;
33
+ multipart: z.ZodOptional<z.ZodBoolean>;
34
+ advancedStealth: z.ZodOptional<z.ZodBoolean>;
35
+ taskTimeoutMs: z.ZodOptional<z.ZodNumber>;
36
+ request: z.ZodRecord<z.ZodString, z.ZodUnknown>;
37
+ response: z.ZodRecord<z.ZodString, z.ZodUnknown>;
38
+ flow: z.ZodObject<{
39
+ steps: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
40
+ step: z.ZodString;
41
+ optional: z.ZodDefault<z.ZodBoolean>;
42
+ upload: z.ZodDefault<z.ZodBoolean>;
43
+ submitStep: z.ZodDefault<z.ZodBoolean>;
44
+ payloadField: z.ZodOptional<z.ZodString>;
45
+ payloadFieldNone: z.ZodOptional<z.ZodBoolean>;
46
+ }, z.core.$strip>]>>;
47
+ submitEndpointPattern: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ submittedStateSelectors: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ requireSubmitEndpointMatch: z.ZodOptional<z.ZodBoolean>;
50
+ advanceTransitionBodyPattern: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ successUrlFragments: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
+ successPageTitleHints: z.ZodOptional<z.ZodArray<z.ZodString>>;
53
+ ownBackendHostnames: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ knownErrorClassPrefixes: z.ZodOptional<z.ZodArray<z.ZodString>>;
55
+ wizardExitButtonLabels: z.ZodOptional<z.ZodArray<z.ZodString>>;
56
+ }, z.core.$strip>;
57
+ extract: z.ZodObject<{
58
+ instruction: z.ZodString;
59
+ schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
60
+ }, z.core.$strip>;
61
+ httpModule: z.ZodOptional<z.ZodString>;
62
+ }, z.core.$strip>;
63
+ }, z.core.$strip>;
64
+ export type ConfigPluginManifest = z.infer<typeof CONFIG_PLUGIN_MANIFEST>;
65
+ /**
66
+ * Synthesizes a {@link SitePlugin} from a validated manifest. The returned
67
+ * object satisfies the loader's `validatePluginShape` by construction: real Zod
68
+ * schemas for `bodySchema`/`responseSchema` and a data-driven `execute` that
69
+ * drives the manifest's flow through the shared self-healing interpreter.
70
+ *
71
+ * `baseDir` resolves a relative `spec.httpModule` escape-hatch path against the
72
+ * operator's plugin directory, matching the loader's specifier resolution; it
73
+ * defaults to `process.cwd()` for callers (e.g. tests) that build a manifest
74
+ * without a manifest-file location.
75
+ */
76
+ export declare function buildConfigPlugin(raw: unknown, baseDir?: string): Promise<SitePlugin<unknown, unknown>>;
77
+ //# sourceMappingURL=config-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/config-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAU3B,OAAO,KAAK,EAAE,UAAU,EAAuC,MAAM,eAAe,CAAC;AAkBrF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBjC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA8F1E;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAkEvC"}