@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
package/dist/config.js ADDED
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.loadConfig = loadConfig;
5
+ const env_1 = require("./lib/env");
6
+ /**
7
+ * Parses a comma-separated env var into a non-empty string array with the
8
+ * empty entries filtered out. Returns an empty array if the var is unset.
9
+ */
10
+ function parseList(value) {
11
+ return value
12
+ .split(",")
13
+ .map((item) => item.trim())
14
+ .filter((item) => item.length > 0);
15
+ }
16
+ /**
17
+ * Loads and validates the application config. Call this once at process
18
+ * startup; subsequent calls return the same frozen object.
19
+ */
20
+ function loadConfig() {
21
+ return {
22
+ appName: (0, env_1.getEnv)("APP_NAME", "barnacle"),
23
+ nodeEnv: (0, env_1.getNodeEnv)(),
24
+ host: (0, env_1.getEnv)("HOST", "0.0.0.0"),
25
+ port: (0, env_1.getNumericEnv)("PORT", 3000),
26
+ logLevel: (0, env_1.getEnv)("LOG_LEVEL", "info"),
27
+ auth: {
28
+ hashedKeys: parseList((0, env_1.getEnv)("API_KEYS_HASHED", "")),
29
+ devBypass: (0, env_1.getBoolEnv)("DEV_BYPASS_AUTH", false),
30
+ },
31
+ trustProxy: (0, env_1.getBoolEnv)("TRUST_PROXY", true),
32
+ scraper: {
33
+ provider: (() => {
34
+ const raw = ((0, env_1.getEnv)("SCRAPER_PROVIDER", "browserbase") || "").toLowerCase();
35
+ if (raw !== "browserbase" && raw !== "steel") {
36
+ throw new Error(`SCRAPER_PROVIDER must be "browserbase" or "steel" (got ${JSON.stringify(raw)})`);
37
+ }
38
+ return raw;
39
+ })(),
40
+ browserbaseApiKey: process.env.BROWSERBASE_API_KEY,
41
+ browserbaseProjectId: process.env.BROWSERBASE_PROJECT_ID,
42
+ steelApiKey: process.env.STEEL_API_KEY,
43
+ anthropicApiKey: process.env.ANTHROPIC_API_KEY,
44
+ // Stagehand 2.x's modelToProviderMap is stale (knows only up to
45
+ // claude-3-7-sonnet). Using the provider-prefixed form
46
+ // `anthropic/<model-id>` routes through the AI-SDK fallback
47
+ // path which forwards the name verbatim to the Anthropic SDK,
48
+ // letting us use live model ids like claude-sonnet-4-6.
49
+ model: (0, env_1.getEnv)("STAGEHAND_MODEL", "anthropic/claude-sonnet-4-6"),
50
+ proxyType: (0, env_1.getEnv)("SCRAPER_PROXY_TYPE", "residential"),
51
+ solveCaptcha: (0, env_1.getBoolEnv)("SCRAPER_SOLVE_CAPTCHA", true),
52
+ poolSize: (0, env_1.getNumericEnv)("SESSION_POOL_SIZE", 3),
53
+ minActionDelayMs: (0, env_1.getNumericEnv)("SCRAPER_MIN_ACTION_DELAY_MS", 500),
54
+ maxActionDelayMs: (0, env_1.getNumericEnv)("SCRAPER_MAX_ACTION_DELAY_MS", 1500),
55
+ readinessQueueThreshold: (0, env_1.getNumericEnv)("READINESS_QUEUE_THRESHOLD", 20),
56
+ siteBaseUrls: (() => {
57
+ const map = {};
58
+ for (const [key, val] of Object.entries(process.env)) {
59
+ const match = /^BARNACLE_SITE_([A-Z0-9_]+)_BASE_URL$/.exec(key);
60
+ if (match && val) {
61
+ map[match[1]?.toLowerCase().replace(/_/g, "-") ?? ""] = val;
62
+ }
63
+ }
64
+ return map;
65
+ })(),
66
+ useBedrock: (0, env_1.getBoolEnv)("USE_BEDROCK", false),
67
+ anthropicTimeoutMs: (0, env_1.getNumericEnv)("STAGEHAND_API_TIMEOUT_MS", 120_000),
68
+ connectTimeoutMs: (0, env_1.getNumericEnv)("STAGEHAND_CONNECT_TIMEOUT_MS", 120_000),
69
+ steelSessionTimeoutMs: (0, env_1.getNumericEnv)("STEEL_SESSION_TIMEOUT_MS", 3_600_000),
70
+ },
71
+ bedrock: {
72
+ region: (0, env_1.getEnv)("AWS_REGION", "us-east-1"),
73
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID || undefined,
74
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || undefined,
75
+ sessionToken: process.env.AWS_SESSION_TOKEN || undefined,
76
+ model: (0, env_1.getEnv)("BEDROCK_MODEL", "us.anthropic.claude-sonnet-4-6[1m]"),
77
+ },
78
+ cache: {
79
+ ttlMs: (0, env_1.getNumericEnv)("CACHE_TTL_MS", 15 * 60 * 1000),
80
+ maxEntries: (0, env_1.getNumericEnv)("CACHE_MAX_ENTRIES", 1000),
81
+ },
82
+ rateLimit: {
83
+ max: (0, env_1.getNumericEnv)("RATE_LIMIT_MAX", 120),
84
+ windowMs: (0, env_1.getNumericEnv)("RATE_LIMIT_WINDOW_MS", 60_000),
85
+ },
86
+ docs: {
87
+ enabled: (0, env_1.getBoolEnv)("ENABLE_DOCS", false),
88
+ },
89
+ telemetry: {
90
+ enabled: (0, env_1.getBoolEnv)("TELEMETRY_ENABLED", true),
91
+ eventsDir: (0, env_1.getEnv)("TELEMETRY_EVENTS_DIR", ".barnacle/events"),
92
+ callsNdjsonPath: (0, env_1.getEnv)("CALLS_NDJSON_PATH", ".barnacle/calls.ndjson"),
93
+ submissionsNdjsonPath: (0, env_1.getEnv)("SUBMISSIONS_NDJSON_PATH", ".barnacle/submissions.ndjson"),
94
+ maxFileSizeBytes: (0, env_1.getNumericEnv)("TELEMETRY_MAX_FILE_SIZE_BYTES", 100 * 1024 * 1024),
95
+ maxRetentionMs: (0, env_1.getNumericEnv)("TELEMETRY_MAX_RETENTION_MS", 30 * 24 * 60 * 60 * 1000),
96
+ s3: {
97
+ bucket: process.env.TELEMETRY_S3_BUCKET || undefined,
98
+ prefix: (0, env_1.getEnv)("TELEMETRY_S3_PREFIX", "telemetry"),
99
+ flushIntervalMs: (0, env_1.getNumericEnv)("TELEMETRY_S3_FLUSH_INTERVAL_MS", 60_000),
100
+ maxBufferLines: (0, env_1.getNumericEnv)("TELEMETRY_S3_MAX_BUFFER_LINES", 500),
101
+ },
102
+ },
103
+ judging: {
104
+ model: (0, env_1.getEnv)("JUDGE_MODEL", "us.anthropic.claude-sonnet-4-6[1m]"),
105
+ temperature: (0, env_1.getFloatEnv)("JUDGE_TEMPERATURE", 0.2),
106
+ batchSize: (0, env_1.getNumericEnv)("JUDGE_BATCH_SIZE", 10),
107
+ timeoutMs: (0, env_1.getNumericEnv)("JUDGE_TIMEOUT_MS", 120_000),
108
+ },
109
+ testmail: {
110
+ apiKey: process.env.TESTMAIL_API_KEY,
111
+ namespace: process.env.TESTMAIL_NAMESPACE,
112
+ },
113
+ selfheal: {
114
+ maxIterations: (0, env_1.getNumericEnv)("SELFHEAL_MAX_ITERATIONS", 5),
115
+ nReplays: (0, env_1.getNumericEnv)("SELFHEAL_N_REPLAYS", 5),
116
+ successThreshold: (0, env_1.getFloatEnv)("SELFHEAL_SUCCESS_THRESHOLD", 0.9),
117
+ plateauWindow: (0, env_1.getNumericEnv)("SELFHEAL_PLATEAU_WINDOW", 3),
118
+ plateauDelta: (0, env_1.getFloatEnv)("SELFHEAL_PLATEAU_DELTA", 0.03),
119
+ timeoutMs: (0, env_1.getNumericEnv)("SELFHEAL_TIMEOUT_MS", 60_000),
120
+ },
121
+ datadog: {
122
+ traceEnabled: (0, env_1.getBoolEnv)("DD_TRACE_ENABLED", false),
123
+ agentHost: (0, env_1.getEnv)("DD_AGENT_HOST", "localhost"),
124
+ statsdPort: (0, env_1.getNumericEnv)("DD_DOGSTATSD_PORT", 8125),
125
+ service: (0, env_1.getEnv)("DD_SERVICE", "barnacle"),
126
+ env: (0, env_1.getEnv)("DD_ENV", (0, env_1.getNodeEnv)()),
127
+ version: (0, env_1.getEnv)("DD_VERSION", "0.1.0"),
128
+ },
129
+ plugins: {
130
+ specifiers: parseList((0, env_1.getEnv)("BARNACLE_PLUGINS", "")),
131
+ strict: (0, env_1.getBoolEnv)("BARNACLE_PLUGINS_STRICT", false),
132
+ baseDir: (0, env_1.getEnv)("BARNACLE_PLUGINS_DIR", process.cwd()),
133
+ configDir: process.env.BARNACLE_PLUGINS_CONFIG_DIR || undefined,
134
+ },
135
+ };
136
+ }
137
+ exports.config = loadConfig();
138
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared Zod schema for the applicant identity, address, and resume fields
3
+ * that AppCast-powered ATS plugins require on every submission. Both AppCast
4
+ * and Encompass Health declare the same 13 fields; this module is the single
5
+ * source of truth so a field-type change propagates to every AppCast-shaped
6
+ * plugin from one place.
7
+ *
8
+ * Diverging fields (Email, BaseUrl, ClickUrl, JobId, Answers) stay in each
9
+ * plugin's own contract because their types or presence differ across plugins.
10
+ */
11
+ import type { z } from "zod/v4";
12
+ export declare const ApplicantContactSchema: z.ZodObject<{
13
+ FirstName: z.ZodString;
14
+ LastName: z.ZodString;
15
+ Phone: z.ZodString;
16
+ AddressLine: z.ZodString;
17
+ City: z.ZodString;
18
+ State: z.ZodString;
19
+ PostalCode: z.ZodString;
20
+ Country: z.ZodString;
21
+ County: z.ZodString;
22
+ Resume: z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>;
23
+ ResumeContentType: z.ZodString;
24
+ ResumeFilename: z.ZodString;
25
+ ResumeBase64: z.ZodString;
26
+ }, z.core.$strip>;
27
+ export type ApplicantContact = z.infer<typeof ApplicantContactSchema>;
28
+ //# sourceMappingURL=applicant-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicant-payload.d.ts","sourceRoot":"","sources":["../../src/lib/applicant-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAMhC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;iBAEJ,CAAC;AAEhC,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Zod schema for the applicant identity, address, and resume fields
4
+ * that AppCast-powered ATS plugins require on every submission. Both AppCast
5
+ * and Encompass Health declare the same 13 fields; this module is the single
6
+ * source of truth so a field-type change propagates to every AppCast-shaped
7
+ * plugin from one place.
8
+ *
9
+ * Diverging fields (Email, BaseUrl, ClickUrl, JobId, Answers) stay in each
10
+ * plugin's own contract because their types or presence differ across plugins.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ApplicantContactSchema = void 0;
14
+ const application_address_1 = require("../lib/application-address");
15
+ const application_identity_1 = require("../lib/application-identity");
16
+ const application_resume_1 = require("../lib/application-resume");
17
+ exports.ApplicantContactSchema = application_identity_1.ApplicantIdentitySchema.omit({ Email: true })
18
+ .merge(application_address_1.ApplicantAddressSchema)
19
+ .merge(application_resume_1.ApplicantResumeSchema);
20
+ //# sourceMappingURL=applicant-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicant-payload.js","sourceRoot":"","sources":["../../src/lib/applicant-payload.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAIH,mEAAmE;AACnE,qEAAqE;AACrE,iEAAiE;AAEpD,QAAA,sBAAsB,GAAG,8CAAuB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAChF,KAAK,CAAC,4CAAsB,CAAC;KAC7B,KAAK,CAAC,0CAAqB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared Zod fragment for the six address fields that AppCast-powered plugins
3
+ * (AppCast, Encompass Health) require on every submission. Extracted so a
4
+ * field-type change propagates from one place to every consumer.
5
+ */
6
+ import { z } from "zod/v4";
7
+ export declare const ApplicantAddressSchema: z.ZodObject<{
8
+ AddressLine: z.ZodString;
9
+ City: z.ZodString;
10
+ State: z.ZodString;
11
+ PostalCode: z.ZodString;
12
+ Country: z.ZodString;
13
+ County: z.ZodString;
14
+ }, z.core.$strip>;
15
+ export type ApplicantAddress = z.infer<typeof ApplicantAddressSchema>;
16
+ //# sourceMappingURL=application-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-address.d.ts","sourceRoot":"","sources":["../../src/lib/application-address.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,sBAAsB;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Zod fragment for the six address fields that AppCast-powered plugins
4
+ * (AppCast, Encompass Health) require on every submission. Extracted so a
5
+ * field-type change propagates from one place to every consumer.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ApplicantAddressSchema = void 0;
9
+ const v4_1 = require("zod/v4");
10
+ exports.ApplicantAddressSchema = v4_1.z.object({
11
+ AddressLine: v4_1.z.string().min(1),
12
+ City: v4_1.z.string().min(1),
13
+ State: v4_1.z.string().min(1),
14
+ PostalCode: v4_1.z.string().min(1),
15
+ Country: v4_1.z.string().min(1),
16
+ /** Applicant's home county. Required by some tenants (Encompass Health and
17
+ * similar) before submit unlocks. */
18
+ County: v4_1.z.string().min(1),
19
+ });
20
+ //# sourceMappingURL=application-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-address.js","sourceRoot":"","sources":["../../src/lib/application-address.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+BAA2B;AAEd,QAAA,sBAAsB,GAAG,MAAC,CAAC,MAAM,CAAC;IAC7C,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B;yCACqC;IACrC,MAAM,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Shared Zod schema for the integrated-questions yes/no + free-text answer
3
+ * block that AppCast-powered ATS plugins require on every submission. Both
4
+ * Appcast and Encompass Health declare the same 21 fields; this module is the
5
+ * single source of truth so a field-type change propagates everywhere.
6
+ *
7
+ * Callers wrap this with `multipartJsonObject()` when the parent payload is
8
+ * multipart — this module exports the raw object so each plugin chooses its
9
+ * own wrapper.
10
+ */
11
+ import { z } from "zod/v4";
12
+ export declare const ApplicationAnswersSchema: z.ZodObject<{
13
+ WorkAuthorization: z.ZodEnum<{
14
+ Yes: "Yes";
15
+ No: "No";
16
+ }>;
17
+ VisaSponsorship: z.ZodString;
18
+ NonCompete: z.ZodEnum<{
19
+ Yes: "Yes";
20
+ No: "No";
21
+ }>;
22
+ OIGGSAOFACExcluded: z.ZodEnum<{
23
+ Yes: "Yes";
24
+ No: "No";
25
+ }>;
26
+ FormerEmployee: z.ZodString;
27
+ CurrentNonEmployeeId: z.ZodString;
28
+ OtherOpportunities: z.ZodEnum<{
29
+ Yes: "Yes";
30
+ No: "No";
31
+ }>;
32
+ RelatedToEmployee: z.ZodEnum<{
33
+ Yes: "Yes";
34
+ No: "No";
35
+ }>;
36
+ PreviouslyEmployedAtEncompass: z.ZodEnum<{
37
+ Yes: "Yes";
38
+ No: "No";
39
+ }>;
40
+ EverSanctionedOrOnProbation: z.ZodEnum<{
41
+ Yes: "Yes";
42
+ No: "No";
43
+ }>;
44
+ EverTerminated: z.ZodEnum<{
45
+ Yes: "Yes";
46
+ No: "No";
47
+ }>;
48
+ EverExcludedFromFederalProgram: z.ZodEnum<{
49
+ Yes: "Yes";
50
+ No: "No";
51
+ }>;
52
+ LegallyEligibleToWorkUS: z.ZodEnum<{
53
+ Yes: "Yes";
54
+ No: "No";
55
+ }>;
56
+ CanPerformJobFunctions: z.ZodEnum<{
57
+ Yes: "Yes";
58
+ No: "No";
59
+ }>;
60
+ Gender: z.ZodString;
61
+ Degree: z.ZodString;
62
+ EducationLevel: z.ZodString;
63
+ SignatureFullName: z.ZodString;
64
+ MeetsMinimumAge: z.ZodDefault<z.ZodEnum<{
65
+ Yes: "Yes";
66
+ No: "No";
67
+ }>>;
68
+ AppliedToSanfordOrGoodSamaritanLast6Months: z.ZodDefault<z.ZodEnum<{
69
+ Yes: "Yes";
70
+ No: "No";
71
+ }>>;
72
+ HasOrWillObtainLicense: z.ZodDefault<z.ZodEnum<{
73
+ Yes: "Yes";
74
+ No: "No";
75
+ }>>;
76
+ }, z.core.$strip>;
77
+ export type ApplicationAnswers = z.infer<typeof ApplicationAnswersSchema>;
78
+ /**
79
+ * Lax variant of ApplicationAnswersSchema used exclusively by the `/run` route
80
+ * body validation. The four detector-checked free-text fields are optional so
81
+ * that detectMissingRequiredFields can actually run instead of being
82
+ * pre-empted by a 400 from Fastify body validation. All other fields keep
83
+ * their strict constraints.
84
+ */
85
+ export declare const RunIntakeAnswersSchema: z.ZodObject<{
86
+ WorkAuthorization: z.ZodEnum<{
87
+ Yes: "Yes";
88
+ No: "No";
89
+ }>;
90
+ VisaSponsorship: z.ZodString;
91
+ NonCompete: z.ZodEnum<{
92
+ Yes: "Yes";
93
+ No: "No";
94
+ }>;
95
+ OIGGSAOFACExcluded: z.ZodEnum<{
96
+ Yes: "Yes";
97
+ No: "No";
98
+ }>;
99
+ FormerEmployee: z.ZodString;
100
+ CurrentNonEmployeeId: z.ZodString;
101
+ OtherOpportunities: z.ZodEnum<{
102
+ Yes: "Yes";
103
+ No: "No";
104
+ }>;
105
+ RelatedToEmployee: z.ZodEnum<{
106
+ Yes: "Yes";
107
+ No: "No";
108
+ }>;
109
+ PreviouslyEmployedAtEncompass: z.ZodEnum<{
110
+ Yes: "Yes";
111
+ No: "No";
112
+ }>;
113
+ EverSanctionedOrOnProbation: z.ZodEnum<{
114
+ Yes: "Yes";
115
+ No: "No";
116
+ }>;
117
+ EverTerminated: z.ZodEnum<{
118
+ Yes: "Yes";
119
+ No: "No";
120
+ }>;
121
+ EverExcludedFromFederalProgram: z.ZodEnum<{
122
+ Yes: "Yes";
123
+ No: "No";
124
+ }>;
125
+ LegallyEligibleToWorkUS: z.ZodEnum<{
126
+ Yes: "Yes";
127
+ No: "No";
128
+ }>;
129
+ CanPerformJobFunctions: z.ZodEnum<{
130
+ Yes: "Yes";
131
+ No: "No";
132
+ }>;
133
+ MeetsMinimumAge: z.ZodDefault<z.ZodEnum<{
134
+ Yes: "Yes";
135
+ No: "No";
136
+ }>>;
137
+ AppliedToSanfordOrGoodSamaritanLast6Months: z.ZodDefault<z.ZodEnum<{
138
+ Yes: "Yes";
139
+ No: "No";
140
+ }>>;
141
+ HasOrWillObtainLicense: z.ZodDefault<z.ZodEnum<{
142
+ Yes: "Yes";
143
+ No: "No";
144
+ }>>;
145
+ Gender: z.ZodDefault<z.ZodOptional<z.ZodString>>;
146
+ Degree: z.ZodDefault<z.ZodOptional<z.ZodString>>;
147
+ EducationLevel: z.ZodDefault<z.ZodOptional<z.ZodString>>;
148
+ SignatureFullName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
149
+ }, z.core.$strip>;
150
+ export type RunIntakeAnswers = z.infer<typeof RunIntakeAnswersSchema>;
151
+ //# sourceMappingURL=application-answers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-answers.d.ts","sourceRoot":"","sources":["../../src/lib/application-answers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkEnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Zod schema for the integrated-questions yes/no + free-text answer
4
+ * block that AppCast-powered ATS plugins require on every submission. Both
5
+ * Appcast and Encompass Health declare the same 21 fields; this module is the
6
+ * single source of truth so a field-type change propagates everywhere.
7
+ *
8
+ * Callers wrap this with `multipartJsonObject()` when the parent payload is
9
+ * multipart — this module exports the raw object so each plugin chooses its
10
+ * own wrapper.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RunIntakeAnswersSchema = exports.ApplicationAnswersSchema = void 0;
14
+ const v4_1 = require("zod/v4");
15
+ exports.ApplicationAnswersSchema = v4_1.z.object({
16
+ WorkAuthorization: v4_1.z.enum(["Yes", "No"]),
17
+ /** Free text; "NA" means no sponsorship required. */
18
+ VisaSponsorship: v4_1.z.string().min(1),
19
+ NonCompete: v4_1.z.enum(["Yes", "No"]),
20
+ OIGGSAOFACExcluded: v4_1.z.enum(["Yes", "No"]),
21
+ /** Free text; "Not Applicable" / "No" / a former-employee ID. */
22
+ FormerEmployee: v4_1.z.string().min(1),
23
+ /** Free text; "NA" means none. */
24
+ CurrentNonEmployeeId: v4_1.z.string().min(1),
25
+ OtherOpportunities: v4_1.z.enum(["Yes", "No"]),
26
+ /** Some tenants (Encompass Health and similar) require a "related to a current
27
+ * employee?" Yes/No radio before submit unlocks. Default "No" is candidate-
28
+ * favorable; pass "Yes" when the applicant has a referral relationship. */
29
+ RelatedToEmployee: v4_1.z.enum(["Yes", "No"]),
30
+ /** "Previously worked for Encompass Health" (or analogous tenant question).
31
+ * Independent from FormerEmployee which targets the generic AppCast-level
32
+ * former-employee question; this is the tenant-level duplicate that
33
+ * Encompass and similar healthcare ATSes ask separately. Default "No". */
34
+ PreviouslyEmployedAtEncompass: v4_1.z.enum(["Yes", "No"]),
35
+ /** "Have you ever received sanctions, been on probation, or had limitations
36
+ * placed on your license?" Encompass-style behavioral question.
37
+ * Default "No" is candidate-favorable. */
38
+ EverSanctionedOrOnProbation: v4_1.z.enum(["Yes", "No"]),
39
+ /** "Have you ever been terminated from or asked to resign from a position?"
40
+ * Encompass-style behavioral question. Default "No". */
41
+ EverTerminated: v4_1.z.enum(["Yes", "No"]),
42
+ /** "Have you ever been excluded or made ineligible to participate in any
43
+ * federal program?" (OIG/GSA/OFAC-adjacent). Independent from the
44
+ * generic OIGGSAOFACExcluded field above because some tenants ask both
45
+ * the catch-all and the federal-program-specific variant. Default "No". */
46
+ EverExcludedFromFederalProgram: v4_1.z.enum(["Yes", "No"]),
47
+ /** "Can you present proof of your legal eligibility to work in the United
48
+ * States?" Maps to the documented WorkAuthorization but some tenants ask
49
+ * the proof-of-eligibility framing separately. Default "Yes". */
50
+ LegallyEligibleToWorkUS: v4_1.z.enum(["Yes", "No"]),
51
+ /** "Can you perform all the required job functions and/or duties of the
52
+ * job for which you are applying?" Default "Yes" is candidate-favorable. */
53
+ CanPerformJobFunctions: v4_1.z.enum(["Yes", "No"]),
54
+ /** Demographic gender selection. Free text so callers can pass
55
+ * "Male"/"Female"/"Non-binary"/"Prefer not to say"/etc. The fixture
56
+ * defaults to "Prefer not to say" — least-disclosing. */
57
+ Gender: v4_1.z.string().min(1),
58
+ /** Highest degree obtained. Free text: "High School Diploma", "Associate",
59
+ * "Bachelor", "Master", "Doctoral", etc. */
60
+ Degree: v4_1.z.string().min(1),
61
+ /** Education level (often duplicates Degree with different wording).
62
+ * Free text. */
63
+ EducationLevel: v4_1.z.string().min(1),
64
+ /** Full name for E-Signature field. Production callers should pass the
65
+ * applicant's legal full name. */
66
+ SignatureFullName: v4_1.z.string().min(1),
67
+ /** Age-verification gate ("Are you at least 16/18 years old?"). Defaults
68
+ * to "Yes" so existing callers (Encompass Health, which never asks this)
69
+ * don't break. Threshold varies by tenant — Lifespace asks 16, ClearCompany
70
+ * asks 18 — so the field is threshold-agnostic. */
71
+ MeetsMinimumAge: v4_1.z.enum(["Yes", "No"]).default("Yes"),
72
+ /** "Have you applied to a Sanford Health or Good Samaritan Society
73
+ * position in the last 6 months?" Tenant-specific question for Sanford /
74
+ * Good Samaritan jobs routed through AppCast. Default "No". */
75
+ AppliedToSanfordOrGoodSamaritanLast6Months: v4_1.z.enum(["Yes", "No"]).default("No"),
76
+ /** "Do you have or do you plan to obtain the state license or credential?"
77
+ * Appcast job 57238731502 (question id 15271). Default "Yes" is
78
+ * candidate-favorable — assumes the applicant holds or will obtain the
79
+ * required credential. */
80
+ HasOrWillObtainLicense: v4_1.z.enum(["Yes", "No"]).default("Yes"),
81
+ });
82
+ /**
83
+ * Lax variant of ApplicationAnswersSchema used exclusively by the `/run` route
84
+ * body validation. The four detector-checked free-text fields are optional so
85
+ * that detectMissingRequiredFields can actually run instead of being
86
+ * pre-empted by a 400 from Fastify body validation. All other fields keep
87
+ * their strict constraints.
88
+ */
89
+ exports.RunIntakeAnswersSchema = exports.ApplicationAnswersSchema.extend({
90
+ Gender: v4_1.z.string().optional().default(""),
91
+ Degree: v4_1.z.string().optional().default(""),
92
+ EducationLevel: v4_1.z.string().optional().default(""),
93
+ SignatureFullName: v4_1.z.string().optional().default(""),
94
+ });
95
+ //# sourceMappingURL=application-answers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-answers.js","sourceRoot":"","sources":["../../src/lib/application-answers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared Zod schema for the four core applicant identity fields (FirstName,
3
+ * LastName, Email, Phone) that are common across all ATS plugins.
4
+ *
5
+ * Email uses `z.email()` (zod/v4 top-level, identical to `z.string().email()`)
6
+ * so either plugin spelling validates correctly. This fragment intentionally
7
+ * excludes address, resume, and job-target fields — those either vary per
8
+ * plugin or are covered by {@link ApplicantContactSchema}.
9
+ */
10
+ import { z } from "zod/v4";
11
+ export declare const ApplicantIdentitySchema: z.ZodObject<{
12
+ FirstName: z.ZodString;
13
+ LastName: z.ZodString;
14
+ Email: z.ZodEmail;
15
+ Phone: z.ZodString;
16
+ }, z.core.$strip>;
17
+ export type ApplicantIdentity = z.infer<typeof ApplicantIdentitySchema>;
18
+ //# sourceMappingURL=application-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-identity.d.ts","sourceRoot":"","sources":["../../src/lib/application-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,uBAAuB;;;;;iBAKlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Zod schema for the four core applicant identity fields (FirstName,
4
+ * LastName, Email, Phone) that are common across all ATS plugins.
5
+ *
6
+ * Email uses `z.email()` (zod/v4 top-level, identical to `z.string().email()`)
7
+ * so either plugin spelling validates correctly. This fragment intentionally
8
+ * excludes address, resume, and job-target fields — those either vary per
9
+ * plugin or are covered by {@link ApplicantContactSchema}.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ApplicantIdentitySchema = void 0;
13
+ const v4_1 = require("zod/v4");
14
+ exports.ApplicantIdentitySchema = v4_1.z.object({
15
+ FirstName: v4_1.z.string().min(1),
16
+ LastName: v4_1.z.string().min(1),
17
+ Email: v4_1.z.email(),
18
+ Phone: v4_1.z.string().min(1),
19
+ });
20
+ //# sourceMappingURL=application-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-identity.js","sourceRoot":"","sources":["../../src/lib/application-identity.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+BAA2B;AAEd,QAAA,uBAAuB,GAAG,MAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAC,CAAC,KAAK,EAAE;IAChB,KAAK,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared Zod schema for the resume attachment block that AppCast-powered ATS
3
+ * plugins require on every submission. AppCast and Encompass Health both declare
4
+ * the same four fields; this fragment is extracted so the Buffer/instanceof
5
+ * constraint and the base64 twin are defined once and propagate to every
6
+ * AppCast-shaped plugin from one source of truth.
7
+ *
8
+ * `Resume` must be a real Node.js Buffer — multipart form builders call
9
+ * `fd.append("Resume", payload.Resume, ...)` which requires an actual Buffer
10
+ * instance, not a base64 string. `ResumeBase64` carries the same bytes
11
+ * pre-encoded for JSON payloads (e.g. the AppCast `interruption_check` body).
12
+ */
13
+ import { z } from "zod/v4";
14
+ export declare const ApplicantResumeSchema: z.ZodObject<{
15
+ Resume: z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>;
16
+ ResumeContentType: z.ZodString;
17
+ ResumeFilename: z.ZodString;
18
+ ResumeBase64: z.ZodString;
19
+ }, z.core.$strip>;
20
+ export type ApplicantResume = z.infer<typeof ApplicantResumeSchema>;
21
+ //# sourceMappingURL=application-resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-resume.d.ts","sourceRoot":"","sources":["../../src/lib/application-resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Zod schema for the resume attachment block that AppCast-powered ATS
4
+ * plugins require on every submission. AppCast and Encompass Health both declare
5
+ * the same four fields; this fragment is extracted so the Buffer/instanceof
6
+ * constraint and the base64 twin are defined once and propagate to every
7
+ * AppCast-shaped plugin from one source of truth.
8
+ *
9
+ * `Resume` must be a real Node.js Buffer — multipart form builders call
10
+ * `fd.append("Resume", payload.Resume, ...)` which requires an actual Buffer
11
+ * instance, not a base64 string. `ResumeBase64` carries the same bytes
12
+ * pre-encoded for JSON payloads (e.g. the AppCast `interruption_check` body).
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ApplicantResumeSchema = void 0;
16
+ const v4_1 = require("zod/v4");
17
+ exports.ApplicantResumeSchema = v4_1.z.object({
18
+ Resume: v4_1.z.instanceof(Buffer),
19
+ ResumeContentType: v4_1.z.string(),
20
+ ResumeFilename: v4_1.z.string(),
21
+ ResumeBase64: v4_1.z.string(),
22
+ });
23
+ //# sourceMappingURL=application-resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-resume.js","sourceRoot":"","sources":["../../src/lib/application-resume.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,+BAA2B;AAEd,QAAA,qBAAqB,GAAG,MAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,MAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAC,CAAC,MAAM,EAAE;IAC7B,cAAc,EAAE,MAAC,CAAC,MAAM,EAAE;IAC1B,YAAY,EAAE,MAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { AISdkClient } from "@browserbasehq/stagehand";
2
+ import type { AppConfig } from "../config";
3
+ type StagehandModel = ConstructorParameters<typeof AISdkClient>[0]["model"];
4
+ /**
5
+ * Builds an AI SDK language model backed by AWS Bedrock for injection into
6
+ * Stagehand's `llmClient`. Centralises all @ai-sdk/amazon-bedrock imports here
7
+ * so no other module touches the AWS SDK.
8
+ *
9
+ * Bedrock v4 emits a `LanguageModelV3` (provider spec v3) but Stagehand's
10
+ * `AISdkClient` still types its `model` as `LanguageModelV2`. The two specs
11
+ * are runtime-compatible for Stagehand's use, so we cast at this single
12
+ * boundary rather than letting the version mismatch leak into call sites.
13
+ * Remove the cast once Stagehand accepts `LanguageModelV3`.
14
+ *
15
+ * When accessKeyId/secretAccessKey are set, uses explicit static credentials.
16
+ * When omitted, region-only config lets the SDK fall through to its default
17
+ * credential chain (env vars → ~/.aws/credentials → ECS task role → EC2
18
+ * instance profile) — correct for IAM-role deployments.
19
+ */
20
+ export declare function createBedrockModel(bedrockConfig: AppConfig["bedrock"]): StagehandModel;
21
+ export {};
22
+ //# sourceMappingURL=bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/lib/bedrock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,KAAK,cAAc,GAAG,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,cAAc,CAgBtF"}