@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.
- package/LICENSE +21 -0
- package/README.md +958 -0
- package/dist/api/errors.d.ts +88 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +164 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/helpers/envelope.d.ts +13 -0
- package/dist/api/helpers/envelope.d.ts.map +1 -0
- package/dist/api/helpers/envelope.js +20 -0
- package/dist/api/helpers/envelope.js.map +1 -0
- package/dist/api/helpers/reply.d.ts +9 -0
- package/dist/api/helpers/reply.d.ts.map +1 -0
- package/dist/api/helpers/reply.js +14 -0
- package/dist/api/helpers/reply.js.map +1 -0
- package/dist/api/plugins/auth.d.ts +27 -0
- package/dist/api/plugins/auth.d.ts.map +1 -0
- package/dist/api/plugins/auth.js +111 -0
- package/dist/api/plugins/auth.js.map +1 -0
- package/dist/api/plugins/error-handler.d.ts +12 -0
- package/dist/api/plugins/error-handler.d.ts.map +1 -0
- package/dist/api/plugins/error-handler.js +72 -0
- package/dist/api/plugins/error-handler.js.map +1 -0
- package/dist/api/plugins/request-context.d.ts +17 -0
- package/dist/api/plugins/request-context.d.ts.map +1 -0
- package/dist/api/plugins/request-context.js +61 -0
- package/dist/api/plugins/request-context.js.map +1 -0
- package/dist/api/routes/health.d.ts +55 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +137 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/plugins-introspection.d.ts +17 -0
- package/dist/api/routes/plugins-introspection.d.ts.map +1 -0
- package/dist/api/routes/plugins-introspection.js +13 -0
- package/dist/api/routes/plugins-introspection.js.map +1 -0
- package/dist/api/schemas/common.d.ts +114 -0
- package/dist/api/schemas/common.d.ts.map +1 -0
- package/dist/api/schemas/common.js +109 -0
- package/dist/api/schemas/common.js.map +1 -0
- package/dist/api/schemas/telemetry.d.ts +66 -0
- package/dist/api/schemas/telemetry.d.ts.map +1 -0
- package/dist/api/schemas/telemetry.js +52 -0
- package/dist/api/schemas/telemetry.js.map +1 -0
- package/dist/cache/keyed-ttl-cache.d.ts +45 -0
- package/dist/cache/keyed-ttl-cache.d.ts.map +1 -0
- package/dist/cache/keyed-ttl-cache.js +69 -0
- package/dist/cache/keyed-ttl-cache.js.map +1 -0
- package/dist/cache/response-cache.d.ts +37 -0
- package/dist/cache/response-cache.d.ts.map +1 -0
- package/dist/cache/response-cache.js +114 -0
- package/dist/cache/response-cache.js.map +1 -0
- package/dist/config.d.ts +258 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/lib/applicant-payload.d.ts +28 -0
- package/dist/lib/applicant-payload.d.ts.map +1 -0
- package/dist/lib/applicant-payload.js +20 -0
- package/dist/lib/applicant-payload.js.map +1 -0
- package/dist/lib/application-address.d.ts +16 -0
- package/dist/lib/application-address.d.ts.map +1 -0
- package/dist/lib/application-address.js +20 -0
- package/dist/lib/application-address.js.map +1 -0
- package/dist/lib/application-answers.d.ts +151 -0
- package/dist/lib/application-answers.d.ts.map +1 -0
- package/dist/lib/application-answers.js +95 -0
- package/dist/lib/application-answers.js.map +1 -0
- package/dist/lib/application-identity.d.ts +18 -0
- package/dist/lib/application-identity.d.ts.map +1 -0
- package/dist/lib/application-identity.js +20 -0
- package/dist/lib/application-identity.js.map +1 -0
- package/dist/lib/application-resume.d.ts +21 -0
- package/dist/lib/application-resume.d.ts.map +1 -0
- package/dist/lib/application-resume.js +23 -0
- package/dist/lib/application-resume.js.map +1 -0
- package/dist/lib/bedrock.d.ts +22 -0
- package/dist/lib/bedrock.d.ts.map +1 -0
- package/dist/lib/bedrock.js +35 -0
- package/dist/lib/bedrock.js.map +1 -0
- package/dist/lib/case-insensitive-headers.d.ts +15 -0
- package/dist/lib/case-insensitive-headers.d.ts.map +1 -0
- package/dist/lib/case-insensitive-headers.js +29 -0
- package/dist/lib/case-insensitive-headers.js.map +1 -0
- package/dist/lib/chromium-client-hints.d.ts +11 -0
- package/dist/lib/chromium-client-hints.d.ts.map +1 -0
- package/dist/lib/chromium-client-hints.js +17 -0
- package/dist/lib/chromium-client-hints.js.map +1 -0
- package/dist/lib/cookie-value.d.ts +8 -0
- package/dist/lib/cookie-value.d.ts.map +1 -0
- package/dist/lib/cookie-value.js +14 -0
- package/dist/lib/cookie-value.js.map +1 -0
- package/dist/lib/datadog.d.ts +8 -0
- package/dist/lib/datadog.d.ts.map +1 -0
- package/dist/lib/datadog.js +27 -0
- package/dist/lib/datadog.js.map +1 -0
- package/dist/lib/dd-metrics.d.ts +28 -0
- package/dist/lib/dd-metrics.d.ts.map +1 -0
- package/dist/lib/dd-metrics.js +62 -0
- package/dist/lib/dd-metrics.js.map +1 -0
- package/dist/lib/dispatch-metrics.d.ts +19 -0
- package/dist/lib/dispatch-metrics.d.ts.map +1 -0
- package/dist/lib/dispatch-metrics.js +65 -0
- package/dist/lib/dispatch-metrics.js.map +1 -0
- package/dist/lib/env.d.ts +37 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +70 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +20 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http.d.ts +7 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +14 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/job-tracking.d.ts +17 -0
- package/dist/lib/job-tracking.d.ts.map +1 -0
- package/dist/lib/job-tracking.js +19 -0
- package/dist/lib/job-tracking.js.map +1 -0
- package/dist/lib/llm/anthropic-client.d.ts +12 -0
- package/dist/lib/llm/anthropic-client.d.ts.map +1 -0
- package/dist/lib/llm/anthropic-client.js +23 -0
- package/dist/lib/llm/anthropic-client.js.map +1 -0
- package/dist/lib/llm/judge.d.ts +57 -0
- package/dist/lib/llm/judge.d.ts.map +1 -0
- package/dist/lib/llm/judge.js +123 -0
- package/dist/lib/llm/judge.js.map +1 -0
- package/dist/lib/llm/judges/error-messages.d.ts +38 -0
- package/dist/lib/llm/judges/error-messages.d.ts.map +1 -0
- package/dist/lib/llm/judges/error-messages.js +72 -0
- package/dist/lib/llm/judges/error-messages.js.map +1 -0
- package/dist/lib/llm/judges/invalid-fields.d.ts +43 -0
- package/dist/lib/llm/judges/invalid-fields.d.ts.map +1 -0
- package/dist/lib/llm/judges/invalid-fields.js +80 -0
- package/dist/lib/llm/judges/invalid-fields.js.map +1 -0
- package/dist/lib/llm/judges/modal-priority.d.ts +41 -0
- package/dist/lib/llm/judges/modal-priority.d.ts.map +1 -0
- package/dist/lib/llm/judges/modal-priority.js +74 -0
- package/dist/lib/llm/judges/modal-priority.js.map +1 -0
- package/dist/lib/llm/judges/select-option.d.ts +49 -0
- package/dist/lib/llm/judges/select-option.d.ts.map +1 -0
- package/dist/lib/llm/judges/select-option.js +90 -0
- package/dist/lib/llm/judges/select-option.js.map +1 -0
- package/dist/lib/llm/judges/verify-submit.d.ts +68 -0
- package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -0
- package/dist/lib/llm/judges/verify-submit.js +89 -0
- package/dist/lib/llm/judges/verify-submit.js.map +1 -0
- package/dist/lib/llm/schemas.d.ts +220 -0
- package/dist/lib/llm/schemas.d.ts.map +1 -0
- package/dist/lib/llm/schemas.js +239 -0
- package/dist/lib/llm/schemas.js.map +1 -0
- package/dist/lib/logging.d.ts +39 -0
- package/dist/lib/logging.d.ts.map +1 -0
- package/dist/lib/logging.js +219 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/multipart.d.ts +34 -0
- package/dist/lib/multipart.d.ts.map +1 -0
- package/dist/lib/multipart.js +55 -0
- package/dist/lib/multipart.js.map +1 -0
- package/dist/lib/option-matcher.d.ts +15 -0
- package/dist/lib/option-matcher.d.ts.map +1 -0
- package/dist/lib/option-matcher.js +69 -0
- package/dist/lib/option-matcher.js.map +1 -0
- package/dist/lib/phone.d.ts +11 -0
- package/dist/lib/phone.d.ts.map +1 -0
- package/dist/lib/phone.js +17 -0
- package/dist/lib/phone.js.map +1 -0
- package/dist/lib/random.d.ts +22 -0
- package/dist/lib/random.d.ts.map +1 -0
- package/dist/lib/random.js +33 -0
- package/dist/lib/random.js.map +1 -0
- package/dist/lib/statsd.d.ts +11 -0
- package/dist/lib/statsd.d.ts.map +1 -0
- package/dist/lib/statsd.js +68 -0
- package/dist/lib/statsd.js.map +1 -0
- package/dist/lib/telemetry/call-capture.d.ts +89 -0
- package/dist/lib/telemetry/call-capture.d.ts.map +1 -0
- package/dist/lib/telemetry/call-capture.js +190 -0
- package/dist/lib/telemetry/call-capture.js.map +1 -0
- package/dist/lib/telemetry/call-types.d.ts +65 -0
- package/dist/lib/telemetry/call-types.d.ts.map +1 -0
- package/dist/lib/telemetry/call-types.js +68 -0
- package/dist/lib/telemetry/call-types.js.map +1 -0
- package/dist/lib/telemetry/run-state.d.ts +15 -0
- package/dist/lib/telemetry/run-state.d.ts.map +1 -0
- package/dist/lib/telemetry/run-state.js +23 -0
- package/dist/lib/telemetry/run-state.js.map +1 -0
- package/dist/lib/telemetry/s3-sink.d.ts +48 -0
- package/dist/lib/telemetry/s3-sink.d.ts.map +1 -0
- package/dist/lib/telemetry/s3-sink.js +229 -0
- package/dist/lib/telemetry/s3-sink.js.map +1 -0
- package/dist/lib/telemetry/submission-capture.d.ts +45 -0
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -0
- package/dist/lib/telemetry/submission-capture.js +57 -0
- package/dist/lib/telemetry/submission-capture.js.map +1 -0
- package/dist/lib/telemetry/telemetry-paths.d.ts +59 -0
- package/dist/lib/telemetry/telemetry-paths.d.ts.map +1 -0
- package/dist/lib/telemetry/telemetry-paths.js +103 -0
- package/dist/lib/telemetry/telemetry-paths.js.map +1 -0
- package/dist/lib/tracking-click.d.ts +20 -0
- package/dist/lib/tracking-click.d.ts.map +1 -0
- package/dist/lib/tracking-click.js +75 -0
- package/dist/lib/tracking-click.js.map +1 -0
- package/dist/lib/url-capture.d.ts +8 -0
- package/dist/lib/url-capture.d.ts.map +1 -0
- package/dist/lib/url-capture.js +17 -0
- package/dist/lib/url-capture.js.map +1 -0
- package/dist/lib/us-states.d.ts +20 -0
- package/dist/lib/us-states.d.ts.map +1 -0
- package/dist/lib/us-states.js +86 -0
- package/dist/lib/us-states.js.map +1 -0
- package/dist/lib/zod-multipart.d.ts +18 -0
- package/dist/lib/zod-multipart.d.ts.map +1 -0
- package/dist/lib/zod-multipart.js +35 -0
- package/dist/lib/zod-multipart.js.map +1 -0
- package/dist/plugins/config-plugin.d.ts +77 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -0
- package/dist/plugins/config-plugin.js +216 -0
- package/dist/plugins/config-plugin.js.map +1 -0
- package/dist/plugins/discover.d.ts +72 -0
- package/dist/plugins/discover.d.ts.map +1 -0
- package/dist/plugins/discover.js +265 -0
- package/dist/plugins/discover.js.map +1 -0
- package/dist/plugins/json-schema-to-zod.d.ts +47 -0
- package/dist/plugins/json-schema-to-zod.d.ts.map +1 -0
- package/dist/plugins/json-schema-to-zod.js +85 -0
- package/dist/plugins/json-schema-to-zod.js.map +1 -0
- package/dist/plugins/loader.d.ts +34 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +348 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/plugin-api-version.d.ts +8 -0
- package/dist/plugins/plugin-api-version.d.ts.map +1 -0
- package/dist/plugins/plugin-api-version.js +11 -0
- package/dist/plugins/plugin-api-version.js.map +1 -0
- package/dist/plugins/plugin-manifest-envelope.d.ts +16 -0
- package/dist/plugins/plugin-manifest-envelope.d.ts.map +1 -0
- package/dist/plugins/plugin-manifest-envelope.js +19 -0
- package/dist/plugins/plugin-manifest-envelope.js.map +1 -0
- package/dist/scraper/behavioral-signals.d.ts +16 -0
- package/dist/scraper/behavioral-signals.d.ts.map +1 -0
- package/dist/scraper/behavioral-signals.js +30 -0
- package/dist/scraper/behavioral-signals.js.map +1 -0
- package/dist/scraper/errors.d.ts +193 -0
- package/dist/scraper/errors.d.ts.map +1 -0
- package/dist/scraper/errors.js +226 -0
- package/dist/scraper/errors.js.map +1 -0
- package/dist/scraper/fixtures.d.ts +23 -0
- package/dist/scraper/fixtures.d.ts.map +1 -0
- package/dist/scraper/fixtures.js +48 -0
- package/dist/scraper/fixtures.js.map +1 -0
- package/dist/scraper/flow-runner.d.ts +1319 -0
- package/dist/scraper/flow-runner.d.ts.map +1 -0
- package/dist/scraper/flow-runner.js +5637 -0
- package/dist/scraper/flow-runner.js.map +1 -0
- package/dist/scraper/graphql-client.d.ts +30 -0
- package/dist/scraper/graphql-client.d.ts.map +1 -0
- package/dist/scraper/graphql-client.js +14 -0
- package/dist/scraper/graphql-client.js.map +1 -0
- package/dist/scraper/http-client.d.ts +75 -0
- package/dist/scraper/http-client.d.ts.map +1 -0
- package/dist/scraper/http-client.js +189 -0
- package/dist/scraper/http-client.js.map +1 -0
- package/dist/scraper/http-status-classifier.d.ts +12 -0
- package/dist/scraper/http-status-classifier.d.ts.map +1 -0
- package/dist/scraper/http-status-classifier.js +29 -0
- package/dist/scraper/http-status-classifier.js.map +1 -0
- package/dist/scraper/metrics.d.ts +50 -0
- package/dist/scraper/metrics.d.ts.map +1 -0
- package/dist/scraper/metrics.js +85 -0
- package/dist/scraper/metrics.js.map +1 -0
- package/dist/scraper/navigate.d.ts +20 -0
- package/dist/scraper/navigate.d.ts.map +1 -0
- package/dist/scraper/navigate.js +30 -0
- package/dist/scraper/navigate.js.map +1 -0
- package/dist/scraper/oracle-sentinels.d.ts +22 -0
- package/dist/scraper/oracle-sentinels.d.ts.map +1 -0
- package/dist/scraper/oracle-sentinels.js +40 -0
- package/dist/scraper/oracle-sentinels.js.map +1 -0
- package/dist/scraper/parse-json-response.d.ts +16 -0
- package/dist/scraper/parse-json-response.d.ts.map +1 -0
- package/dist/scraper/parse-json-response.js +37 -0
- package/dist/scraper/parse-json-response.js.map +1 -0
- package/dist/scraper/pool.d.ts +37 -0
- package/dist/scraper/pool.d.ts.map +1 -0
- package/dist/scraper/pool.js +105 -0
- package/dist/scraper/pool.js.map +1 -0
- package/dist/scraper/rate-limited-json-client.d.ts +35 -0
- package/dist/scraper/rate-limited-json-client.d.ts.map +1 -0
- package/dist/scraper/rate-limited-json-client.js +29 -0
- package/dist/scraper/rate-limited-json-client.js.map +1 -0
- package/dist/scraper/raw-fetch.d.ts +49 -0
- package/dist/scraper/raw-fetch.d.ts.map +1 -0
- package/dist/scraper/raw-fetch.js +40 -0
- package/dist/scraper/raw-fetch.js.map +1 -0
- package/dist/scraper/require-response-field.d.ts +23 -0
- package/dist/scraper/require-response-field.d.ts.map +1 -0
- package/dist/scraper/require-response-field.js +42 -0
- package/dist/scraper/require-response-field.js.map +1 -0
- package/dist/scraper/retry.d.ts +33 -0
- package/dist/scraper/retry.d.ts.map +1 -0
- package/dist/scraper/retry.js +122 -0
- package/dist/scraper/retry.js.map +1 -0
- package/dist/scraper/session-browserbase.d.ts +35 -0
- package/dist/scraper/session-browserbase.d.ts.map +1 -0
- package/dist/scraper/session-browserbase.js +198 -0
- package/dist/scraper/session-browserbase.js.map +1 -0
- package/dist/scraper/session-shared.d.ts +29 -0
- package/dist/scraper/session-shared.d.ts.map +1 -0
- package/dist/scraper/session-shared.js +35 -0
- package/dist/scraper/session-shared.js.map +1 -0
- package/dist/scraper/session-steel.d.ts +31 -0
- package/dist/scraper/session-steel.d.ts.map +1 -0
- package/dist/scraper/session-steel.js +140 -0
- package/dist/scraper/session-steel.js.map +1 -0
- package/dist/scraper/session-warmup.d.ts +31 -0
- package/dist/scraper/session-warmup.d.ts.map +1 -0
- package/dist/scraper/session-warmup.js +46 -0
- package/dist/scraper/session-warmup.js.map +1 -0
- package/dist/scraper/session.d.ts +21 -0
- package/dist/scraper/session.d.ts.map +1 -0
- package/dist/scraper/session.js +28 -0
- package/dist/scraper/session.js.map +1 -0
- package/dist/scraper/stagehand-guard.d.ts +128 -0
- package/dist/scraper/stagehand-guard.d.ts.map +1 -0
- package/dist/scraper/stagehand-guard.js +337 -0
- package/dist/scraper/stagehand-guard.js.map +1 -0
- package/dist/scraper/throttle.d.ts +21 -0
- package/dist/scraper/throttle.d.ts.map +1 -0
- package/dist/scraper/throttle.js +45 -0
- package/dist/scraper/throttle.js.map +1 -0
- package/dist/scripts/hca-inbox-poll.d.ts +19 -0
- package/dist/scripts/hca-inbox-poll.d.ts.map +1 -0
- package/dist/scripts/hca-inbox-poll.js +151 -0
- package/dist/scripts/hca-inbox-poll.js.map +1 -0
- package/dist/scripts/judge-llm-batch.d.ts +98 -0
- package/dist/scripts/judge-llm-batch.d.ts.map +1 -0
- package/dist/scripts/judge-llm-batch.js +350 -0
- package/dist/scripts/judge-llm-batch.js.map +1 -0
- package/dist/scripts/llm-heal.d.ts +165 -0
- package/dist/scripts/llm-heal.d.ts.map +1 -0
- package/dist/scripts/llm-heal.js +595 -0
- package/dist/scripts/llm-heal.js.map +1 -0
- package/dist/scripts/migrate-telemetry-dir-names.d.ts +57 -0
- package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +1 -0
- package/dist/scripts/migrate-telemetry-dir-names.js +156 -0
- package/dist/scripts/migrate-telemetry-dir-names.js.map +1 -0
- package/dist/scripts/probe-setinputfiles.d.ts +28 -0
- package/dist/scripts/probe-setinputfiles.d.ts.map +1 -0
- package/dist/scripts/probe-setinputfiles.js +95 -0
- package/dist/scripts/probe-setinputfiles.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts +304 -0
- package/dist/scripts/recon-browser.d.ts.map +1 -0
- package/dist/scripts/recon-browser.js +1833 -0
- package/dist/scripts/recon-browser.js.map +1 -0
- package/dist/scripts/recon-generate.d.ts +182 -0
- package/dist/scripts/recon-generate.d.ts.map +1 -0
- package/dist/scripts/recon-generate.js +2572 -0
- package/dist/scripts/recon-generate.js.map +1 -0
- package/dist/scripts/recon-heal.d.ts +176 -0
- package/dist/scripts/recon-heal.d.ts.map +1 -0
- package/dist/scripts/recon-heal.js +584 -0
- package/dist/scripts/recon-heal.js.map +1 -0
- package/dist/scripts/recon-http.d.ts +19 -0
- package/dist/scripts/recon-http.d.ts.map +1 -0
- package/dist/scripts/recon-http.js +377 -0
- package/dist/scripts/recon-http.js.map +1 -0
- package/dist/scripts/recon-replay-jobs.d.ts +21 -0
- package/dist/scripts/recon-replay-jobs.d.ts.map +1 -0
- package/dist/scripts/recon-replay-jobs.js +221 -0
- package/dist/scripts/recon-replay-jobs.js.map +1 -0
- package/dist/scripts/recon-shared.d.ts +52 -0
- package/dist/scripts/recon-shared.d.ts.map +1 -0
- package/dist/scripts/recon-shared.js +68 -0
- package/dist/scripts/recon-shared.js.map +1 -0
- package/dist/scripts/recon-summarize.d.ts +15 -0
- package/dist/scripts/recon-summarize.d.ts.map +1 -0
- package/dist/scripts/recon-summarize.js +233 -0
- package/dist/scripts/recon-summarize.js.map +1 -0
- package/dist/scripts/smoke-test.d.ts +22 -0
- package/dist/scripts/smoke-test.d.ts.map +1 -0
- package/dist/scripts/smoke-test.js +236 -0
- package/dist/scripts/smoke-test.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +189 -0
- package/dist/server.js.map +1 -0
- package/dist/site-plugin.d.ts +226 -0
- package/dist/site-plugin.d.ts.map +1 -0
- package/dist/site-plugin.js +13 -0
- package/dist/site-plugin.js.map +1 -0
- package/dist/testing/answers-fixture.d.ts +13 -0
- package/dist/testing/answers-fixture.d.ts.map +1 -0
- package/dist/testing/answers-fixture.js +37 -0
- package/dist/testing/answers-fixture.js.map +1 -0
- package/dist/testing/batch-email-confirmation.d.ts +58 -0
- package/dist/testing/batch-email-confirmation.d.ts.map +1 -0
- package/dist/testing/batch-email-confirmation.js +62 -0
- package/dist/testing/batch-email-confirmation.js.map +1 -0
- package/dist/testing/batch-report.d.ts +33 -0
- package/dist/testing/batch-report.d.ts.map +1 -0
- package/dist/testing/batch-report.js +30 -0
- package/dist/testing/batch-report.js.map +1 -0
- package/dist/testing/contract-parity-suite.d.ts +55 -0
- package/dist/testing/contract-parity-suite.d.ts.map +1 -0
- package/dist/testing/contract-parity-suite.js +39 -0
- package/dist/testing/contract-parity-suite.js.map +1 -0
- package/dist/testing/coverage-guard-suite.d.ts +46 -0
- package/dist/testing/coverage-guard-suite.d.ts.map +1 -0
- package/dist/testing/coverage-guard-suite.js +39 -0
- package/dist/testing/coverage-guard-suite.js.map +1 -0
- package/dist/testing/fixtures/resume.pdf +54 -0
- package/dist/testing/integration-runner.d.ts +62 -0
- package/dist/testing/integration-runner.d.ts.map +1 -0
- package/dist/testing/integration-runner.js +46 -0
- package/dist/testing/integration-runner.js.map +1 -0
- package/dist/testing/mock-fetch-response.d.ts +7 -0
- package/dist/testing/mock-fetch-response.d.ts.map +1 -0
- package/dist/testing/mock-fetch-response.js +16 -0
- package/dist/testing/mock-fetch-response.js.map +1 -0
- package/dist/testing/persona-fixture.d.ts +77 -0
- package/dist/testing/persona-fixture.d.ts.map +1 -0
- package/dist/testing/persona-fixture.js +83 -0
- package/dist/testing/persona-fixture.js.map +1 -0
- package/dist/testing/replay-integration-suite.d.ts +50 -0
- package/dist/testing/replay-integration-suite.d.ts.map +1 -0
- package/dist/testing/replay-integration-suite.js +45 -0
- package/dist/testing/replay-integration-suite.js.map +1 -0
- package/dist/testing/resume-fixture.d.ts +39 -0
- package/dist/testing/resume-fixture.d.ts.map +1 -0
- package/dist/testing/resume-fixture.js +38 -0
- package/dist/testing/resume-fixture.js.map +1 -0
- package/dist/testmail/client.d.ts +61 -0
- package/dist/testmail/client.d.ts.map +1 -0
- package/dist/testmail/client.js +190 -0
- package/dist/testmail/client.js.map +1 -0
- package/dist/testmail/errors.d.ts +18 -0
- package/dist/testmail/errors.d.ts.map +1 -0
- package/dist/testmail/errors.js +29 -0
- package/dist/testmail/errors.js.map +1 -0
- package/dist/types/dispatch-metrics.d.ts +46 -0
- package/dist/types/dispatch-metrics.d.ts.map +1 -0
- package/dist/types/dispatch-metrics.js +25 -0
- package/dist/types/dispatch-metrics.js.map +1 -0
- package/dist/types/logging.d.ts +11 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +3 -0
- package/dist/types/logging.js.map +1 -0
- package/package.json +283 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../../src/scripts/smoke-test.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import { type FastifyInstance, type RawServerDefault } from "fastify";
|
|
3
|
+
import type { Logger } from "./types/logging";
|
|
4
|
+
/**
|
|
5
|
+
* Builds a configured (but not-yet-listening) Fastify instance. Split out
|
|
6
|
+
* from `main()` so tests can call `buildServer()` and use `inject()`
|
|
7
|
+
* instead of binding to a port.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildServer(): Promise<FastifyInstance<RawServerDefault, IncomingMessage, ServerResponse, Logger>>;
|
|
10
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMjE,OAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAqB/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAM9C;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAC1C,eAAe,CAAC,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC,CAC3E,CA6GA"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildServer = buildServer;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const compress_1 = __importDefault(require("@fastify/compress"));
|
|
9
|
+
const helmet_1 = __importDefault(require("@fastify/helmet"));
|
|
10
|
+
const rate_limit_1 = __importDefault(require("@fastify/rate-limit"));
|
|
11
|
+
const swagger_1 = __importDefault(require("@fastify/swagger"));
|
|
12
|
+
const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
|
|
13
|
+
const fastify_1 = __importDefault(require("fastify"));
|
|
14
|
+
const fastify_type_provider_zod_1 = require("fastify-type-provider-zod");
|
|
15
|
+
const auth_1 = __importDefault(require("./api/plugins/auth"));
|
|
16
|
+
const error_handler_1 = __importDefault(require("./api/plugins/error-handler"));
|
|
17
|
+
const request_context_1 = __importDefault(require("./api/plugins/request-context"));
|
|
18
|
+
const health_1 = require("./api/routes/health");
|
|
19
|
+
const plugins_introspection_1 = require("./api/routes/plugins-introspection");
|
|
20
|
+
const config_1 = require("./config");
|
|
21
|
+
const errors_1 = require("./lib/errors");
|
|
22
|
+
const http_1 = require("./lib/http");
|
|
23
|
+
const logging_1 = require("./lib/logging");
|
|
24
|
+
const statsd_1 = require("./lib/statsd");
|
|
25
|
+
const s3_sink_1 = require("./lib/telemetry/s3-sink");
|
|
26
|
+
const tracking_click_1 = require("./lib/tracking-click");
|
|
27
|
+
const discover_1 = require("./plugins/discover");
|
|
28
|
+
const loader_1 = require("./plugins/loader");
|
|
29
|
+
const pool_1 = require("./scraper/pool");
|
|
30
|
+
const logger = (0, logging_1.getLogger)({ name: "server" });
|
|
31
|
+
(0, http_1.configureHttpDispatcher)();
|
|
32
|
+
/**
|
|
33
|
+
* Builds a configured (but not-yet-listening) Fastify instance. Split out
|
|
34
|
+
* from `main()` so tests can call `buildServer()` and use `inject()`
|
|
35
|
+
* instead of binding to a port.
|
|
36
|
+
*/
|
|
37
|
+
async function buildServer() {
|
|
38
|
+
// Load a fresh config per build so tests can toggle env vars between
|
|
39
|
+
// buildServer() invocations. The exported `defaultConfig` is still
|
|
40
|
+
// used for module-level pieces (logger) that are process-wide.
|
|
41
|
+
const cfg = (0, config_1.loadConfig)();
|
|
42
|
+
const app = (0, fastify_1.default)({
|
|
43
|
+
loggerInstance: logger,
|
|
44
|
+
disableRequestLogging: false,
|
|
45
|
+
// TRUST_PROXY=true is correct when behind a reverse proxy (ALB,
|
|
46
|
+
// nginx, Cloudflare) — Fastify reads the real client IP from
|
|
47
|
+
// X-Forwarded-For. Set TRUST_PROXY=false for bare-metal deployments
|
|
48
|
+
// so attackers can't spoof the header to bypass IP-based rate
|
|
49
|
+
// limiting on unauthenticated traffic.
|
|
50
|
+
trustProxy: cfg.trustProxy,
|
|
51
|
+
ajv: { customOptions: { strict: false } },
|
|
52
|
+
});
|
|
53
|
+
app.setValidatorCompiler(fastify_type_provider_zod_1.validatorCompiler);
|
|
54
|
+
app.setSerializerCompiler(fastify_type_provider_zod_1.serializerCompiler);
|
|
55
|
+
await app.register(helmet_1.default, {
|
|
56
|
+
contentSecurityPolicy: false,
|
|
57
|
+
});
|
|
58
|
+
await app.register(compress_1.default, { encodings: ["gzip", "br"] });
|
|
59
|
+
await app.register(rate_limit_1.default, {
|
|
60
|
+
global: true,
|
|
61
|
+
max: cfg.rateLimit.max,
|
|
62
|
+
timeWindow: cfg.rateLimit.windowMs,
|
|
63
|
+
keyGenerator: (request) => {
|
|
64
|
+
// Rate-limit runs in onRequest, before auth populates the
|
|
65
|
+
// fingerprint — so we key off the raw Authorization header here.
|
|
66
|
+
// Hashing it first keeps plaintext tokens out of the rate-limit
|
|
67
|
+
// plugin's in-memory key→count map.
|
|
68
|
+
const auth = request.headers.authorization;
|
|
69
|
+
if (typeof auth === "string" && auth.length > 0) {
|
|
70
|
+
return (0, node_crypto_1.createHash)("sha256").update(auth).digest("hex");
|
|
71
|
+
}
|
|
72
|
+
return request.ip;
|
|
73
|
+
},
|
|
74
|
+
// We don't pass a custom errorResponseBuilder — fastify-rate-limit
|
|
75
|
+
// throws a FastifyError with statusCode=429 which our setErrorHandler
|
|
76
|
+
// catches and emits as the error envelope (code 1010). Keeping a single
|
|
77
|
+
// error-rendering path avoids schema-serializer mismatches.
|
|
78
|
+
});
|
|
79
|
+
await app.register(request_context_1.default);
|
|
80
|
+
await app.register(error_handler_1.default);
|
|
81
|
+
await app.register(auth_1.default);
|
|
82
|
+
if (cfg.docs.enabled) {
|
|
83
|
+
await app.register(swagger_1.default, {
|
|
84
|
+
openapi: {
|
|
85
|
+
openapi: "3.1.0",
|
|
86
|
+
info: {
|
|
87
|
+
title: "Barnacle Automation API",
|
|
88
|
+
description: "Site-agnostic browser automation engine. POST a structured payload to a typed endpoint; Barnacle drives a Steel + Stagehand session through the target site and returns a structured result via a plugin adapter.",
|
|
89
|
+
version: "0.1.0",
|
|
90
|
+
},
|
|
91
|
+
servers: [{ url: `http://${cfg.host}:${cfg.port}` }],
|
|
92
|
+
components: {
|
|
93
|
+
securitySchemes: {
|
|
94
|
+
bearerAuth: { type: "http", scheme: "bearer" },
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
transform: fastify_type_provider_zod_1.jsonSchemaTransform,
|
|
99
|
+
});
|
|
100
|
+
await app.register(swagger_ui_1.default, { routePrefix: "/docs" });
|
|
101
|
+
}
|
|
102
|
+
const { plugins, report } = await (0, discover_1.loadAllPlugins)(cfg);
|
|
103
|
+
await app.register(health_1.healthRoutes);
|
|
104
|
+
await (0, loader_1.registerRoutes)(app, cfg, plugins);
|
|
105
|
+
await app.register(plugins_introspection_1.pluginsIntrospectionRoutes, { report });
|
|
106
|
+
(0, s3_sink_1.startS3SinkTimer)();
|
|
107
|
+
// Drain in-flight scrape sessions when the app shuts down. Without
|
|
108
|
+
// this, SIGTERM leaves Steel sessions alive until their own idle
|
|
109
|
+
// timeout kicks in (billable minutes wasted).
|
|
110
|
+
app.addHook("onClose", async () => {
|
|
111
|
+
try {
|
|
112
|
+
await (0, pool_1.drainPool)();
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
logger.warn(`drainPool failed during shutdown: ${(0, errors_1.toErrorMessage)(err).slice(0, 200)}`);
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
await (0, tracking_click_1.drainTrackingClicks)();
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
logger.warn(`drainTrackingClicks failed during shutdown: ${(0, errors_1.toErrorMessage)(err).slice(0, 200)}`);
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
await (0, statsd_1.shutdownStatsD)();
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
logger.warn(`shutdownStatsD failed during shutdown: ${(0, errors_1.toErrorMessage)(err).slice(0, 200)}`);
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
await (0, s3_sink_1.shutdownS3Sink)();
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
logger.warn(`shutdownS3Sink failed during shutdown: ${(0, errors_1.toErrorMessage)(err).slice(0, 200)}`);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return app;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Boots the HTTP server. Entry point for `pnpm run dev` and `pnpm start`.
|
|
140
|
+
*/
|
|
141
|
+
async function main() {
|
|
142
|
+
const app = await buildServer();
|
|
143
|
+
try {
|
|
144
|
+
await app.listen({ host: config_1.config.host, port: config_1.config.port });
|
|
145
|
+
logger.info(`server listening on http://${config_1.config.host}:${config_1.config.port}`);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
logger.errorWithStack(err, "server failed to start");
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
// Guard against double signals — an impatient orchestrator sending
|
|
152
|
+
// SIGTERM twice while the first shutdown is mid-flight would spawn a
|
|
153
|
+
// second concurrent shutdown, racing `app.close()` and `process.exit()`.
|
|
154
|
+
// The flag makes subsequent signals idempotent: log-and-ignore.
|
|
155
|
+
let shuttingDown = false;
|
|
156
|
+
const shutdown = async (signal) => {
|
|
157
|
+
if (shuttingDown) {
|
|
158
|
+
logger.info(`received ${signal} during shutdown — ignoring`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
shuttingDown = true;
|
|
162
|
+
logger.info(`received ${signal}, shutting down`);
|
|
163
|
+
try {
|
|
164
|
+
await app.close();
|
|
165
|
+
process.exit(0);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
logger.errorWithStack(err, "graceful shutdown failed");
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
173
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
174
|
+
// Last-line-of-defense for errors escaping every `try` boundary.
|
|
175
|
+
process.on("uncaughtException", (err) => {
|
|
176
|
+
logger.errorWithStack(err, "uncaughtException — process will exit");
|
|
177
|
+
process.exit(1);
|
|
178
|
+
});
|
|
179
|
+
process.on("unhandledRejection", (reason) => {
|
|
180
|
+
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
181
|
+
logger.errorWithStack(err, "unhandledRejection — process will exit");
|
|
182
|
+
process.exit(1);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const entry = process.argv[1];
|
|
186
|
+
if (entry && (entry.endsWith("server.ts") || entry.endsWith("server.js"))) {
|
|
187
|
+
void main();
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract every site plugin implements and that core's dispatch layer consumes.
|
|
3
|
+
* Lives at the top of `src/` alongside `config.ts` and `server.ts` because it
|
|
4
|
+
* is engine-level infrastructure, not site-specific logic — any new site drops
|
|
5
|
+
* a plugin into `src/sites/<id>/` and satisfies this interface without touching
|
|
6
|
+
* core.
|
|
7
|
+
*
|
|
8
|
+
* All imports are type-only: this file has zero runtime side effects and is safe
|
|
9
|
+
* to import from any layer without pulling in browser or config initialization.
|
|
10
|
+
*/
|
|
11
|
+
import type { ZodType } from "zod/v4";
|
|
12
|
+
import type { AppConfig } from "./config";
|
|
13
|
+
import type { MetricsCollector } from "./lib/dispatch-metrics";
|
|
14
|
+
import type { ScraperError } from "./scraper/errors";
|
|
15
|
+
import type { BrowserSession } from "./scraper/session";
|
|
16
|
+
import type { DispatchMetrics } from "./types/dispatch-metrics";
|
|
17
|
+
import type { Logger } from "./types/logging";
|
|
18
|
+
/**
|
|
19
|
+
* Minimal request surface exposed to extra-route handlers. Core passes a
|
|
20
|
+
* Fastify `FastifyRequest` here; the interface is narrowed so handlers stay
|
|
21
|
+
* decoupled from Fastify internals and testable with plain objects.
|
|
22
|
+
*/
|
|
23
|
+
export interface SitePluginExtraRouteRequest<TBody = unknown, TParams = Record<string, string>> {
|
|
24
|
+
/** Parsed and Zod-validated request body. Present when `bodySchema` is set on the route. */
|
|
25
|
+
body: TBody;
|
|
26
|
+
/** Parsed and Zod-validated route params. Present when `paramsSchema` is set on the route. */
|
|
27
|
+
params: TParams;
|
|
28
|
+
/** Request-scoped Fastify/Pino logger. */
|
|
29
|
+
log: Logger;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Declares one extra non-run route a plugin owns. Core iterates
|
|
33
|
+
* `meta.extraRoutes` at startup and registers each as an authenticated Fastify
|
|
34
|
+
* route, building the same `SitePluginContext` it uses for `/run`.
|
|
35
|
+
*
|
|
36
|
+
* Error rendering is always delegated to the app-level `errorHandlerPlugin` —
|
|
37
|
+
* handlers throw typed `ApiError`s; never return error shapes directly.
|
|
38
|
+
* `envelope` governs only the success reply shape.
|
|
39
|
+
*/
|
|
40
|
+
export interface SitePluginExtraRoute {
|
|
41
|
+
/** HTTP method for the route (lowercase). */
|
|
42
|
+
method: "get" | "post" | "put" | "patch" | "delete";
|
|
43
|
+
/**
|
|
44
|
+
* Absolute route path (e.g. `/v1/my-site/trigger-otp`). Core registers it
|
|
45
|
+
* verbatim — no prefix is added.
|
|
46
|
+
*/
|
|
47
|
+
path: string;
|
|
48
|
+
/** Zod schema for the request body. When absent, the body is not validated. */
|
|
49
|
+
bodySchema?: ZodType;
|
|
50
|
+
/** Zod schema for route path params. When absent, params are not validated. */
|
|
51
|
+
paramsSchema?: ZodType;
|
|
52
|
+
/**
|
|
53
|
+
* When true, the route accepts `multipart/form-data`. Core ensures
|
|
54
|
+
* `@fastify/multipart` is registered when any plugin declares a multipart
|
|
55
|
+
* extra route.
|
|
56
|
+
*/
|
|
57
|
+
multipart?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* When false, the handler's return value is sent as-is (raw reply). When
|
|
60
|
+
* true or absent, core wraps the return value in the standard success
|
|
61
|
+
* envelope. Defaults to true.
|
|
62
|
+
*/
|
|
63
|
+
envelope?: boolean;
|
|
64
|
+
/** Handles the request and returns the (pre-envelope) response body. */
|
|
65
|
+
handler(request: SitePluginExtraRouteRequest, context: SitePluginContext): Promise<unknown>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Static metadata that core reads at startup to register the plugin's Fastify
|
|
69
|
+
* route. Separating metadata from `execute()` lets the loader validate config
|
|
70
|
+
* and build routes before any session is acquired.
|
|
71
|
+
*/
|
|
72
|
+
export interface SitePluginMeta {
|
|
73
|
+
/** Stable identifier used as the `config.scraper.siteBaseUrls` lookup key. */
|
|
74
|
+
siteId: string;
|
|
75
|
+
/** Human-readable label used in logs and Swagger docs. */
|
|
76
|
+
displayName: string;
|
|
77
|
+
/** Zod schema for the route request body — validated by core before execute(). */
|
|
78
|
+
bodySchema: ZodType;
|
|
79
|
+
/** Zod schema for the successful response body — drives the Swagger response shape. */
|
|
80
|
+
responseSchema: ZodType;
|
|
81
|
+
/**
|
|
82
|
+
* Full route path override. When set, the loader uses this verbatim instead
|
|
83
|
+
* of `/v1/{siteId}/run`. Intended for legacy compatibility where an existing
|
|
84
|
+
* client contract cannot change.
|
|
85
|
+
*/
|
|
86
|
+
routeOverride?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Fallback base URL used by the loader when `config.scraper.siteBaseUrls[siteId]`
|
|
89
|
+
* is absent. Plugins read their own env vars here so core config stays generic.
|
|
90
|
+
*/
|
|
91
|
+
defaultBaseUrl?: string;
|
|
92
|
+
/**
|
|
93
|
+
* Per-task hard timeout in ms passed to the pool's runWithSession.
|
|
94
|
+
* Overrides the pool's 60-minute default. Only set when a plugin needs
|
|
95
|
+
* a shorter ceiling than the default.
|
|
96
|
+
*/
|
|
97
|
+
taskTimeoutMs?: number;
|
|
98
|
+
/**
|
|
99
|
+
* When true, the loader registers the route to accept `multipart/form-data`
|
|
100
|
+
* via `@fastify/multipart` in `attachFieldsToBody: 'keyValues'` mode. Text
|
|
101
|
+
* parts arrive as strings on `request.body`; file parts arrive as `Buffer`s.
|
|
102
|
+
* Generator emits this for flows whose recon includes a binary upload step.
|
|
103
|
+
*/
|
|
104
|
+
multipart?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* When true, sessions allocated for this plugin's browser fallback opt
|
|
107
|
+
* into Browserbase's Scale Plan stealth profile (Windows desktop fingerprint
|
|
108
|
+
* + solveCaptchas). DataDome-protected flows (notably apply.appcast.io
|
|
109
|
+
* postings) need this to clear the silent fingerprint wall. Defaults to
|
|
110
|
+
* false to avoid the cost penalty on plugins that don't need it.
|
|
111
|
+
*/
|
|
112
|
+
advancedStealth?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Optional semver range string declaring which plugin API version this plugin
|
|
115
|
+
* targets (e.g. `"^1.0.0"`). Core compares this against `PLUGIN_API_VERSION`
|
|
116
|
+
* at load time and disables the plugin on a major-version mismatch. Absent
|
|
117
|
+
* means "accept any version."
|
|
118
|
+
*/
|
|
119
|
+
apiVersion?: string;
|
|
120
|
+
/**
|
|
121
|
+
* Extra non-run routes this plugin owns (e.g. OTP trigger, resume). Core
|
|
122
|
+
* registers each at startup as an authenticated Fastify route, building the
|
|
123
|
+
* same `SitePluginContext` as for `/run`. Error rendering is always delegated
|
|
124
|
+
* to the app-level error handler; `envelope` on each route governs only the
|
|
125
|
+
* success reply.
|
|
126
|
+
*/
|
|
127
|
+
extraRoutes?: readonly SitePluginExtraRoute[];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Runtime dependencies injected by core immediately before `execute()` is called.
|
|
131
|
+
* Plugins receive this instead of importing config or loggers directly, which
|
|
132
|
+
* keeps each plugin self-contained and testable without the full app wired up.
|
|
133
|
+
*/
|
|
134
|
+
export interface SitePluginContext {
|
|
135
|
+
/**
|
|
136
|
+
* Resolved from `config.scraper.siteBaseUrls[meta.siteId]` by core. Plugins
|
|
137
|
+
* should use this rather than reading config directly to stay decoupled from
|
|
138
|
+
* the config shape.
|
|
139
|
+
*/
|
|
140
|
+
baseUrl: string;
|
|
141
|
+
/**
|
|
142
|
+
* Request-scoped logger with `siteId` and `requestId` already bound by core.
|
|
143
|
+
* Plugins log here without needing to create or configure their own logger.
|
|
144
|
+
*/
|
|
145
|
+
logger: Logger;
|
|
146
|
+
/**
|
|
147
|
+
* Full application config. Prefer `baseUrl` for site URL resolution; reach
|
|
148
|
+
* into `config` only for cross-cutting settings (timeouts, feature flags, etc.)
|
|
149
|
+
* that core does not already surface through the context.
|
|
150
|
+
*/
|
|
151
|
+
config: AppConfig;
|
|
152
|
+
/**
|
|
153
|
+
* Fastify-issued correlation ID for this inbound request. Core threads it
|
|
154
|
+
* into the submission-envelope telemetry record so downstream tooling can
|
|
155
|
+
* tie a captured outcome back to the originating API call.
|
|
156
|
+
*/
|
|
157
|
+
requestId: string;
|
|
158
|
+
/**
|
|
159
|
+
* Step-timing accumulator for the current dispatch. Plugins call
|
|
160
|
+
* `metricsCollector.startStep()` / `endStep()` at phase boundaries;
|
|
161
|
+
* core finalizes and attaches the result to the response envelope.
|
|
162
|
+
*/
|
|
163
|
+
metricsCollector: MetricsCollector;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Value returned by `execute()` and consumed by core's dispatch layer. Core
|
|
167
|
+
* merges `data` into the response envelope and emits a `submission-envelope`
|
|
168
|
+
* telemetry record carrying `auditPayload` so audit and replay work without
|
|
169
|
+
* re-running the browser flow.
|
|
170
|
+
*/
|
|
171
|
+
export interface SitePluginResult<TData = Record<string, unknown>> {
|
|
172
|
+
/** Merged verbatim into the response envelope by core. */
|
|
173
|
+
data: TData;
|
|
174
|
+
/**
|
|
175
|
+
* Written to the `submission-envelope` telemetry record by core. If absent, core
|
|
176
|
+
* writes `data` instead. Intentionally not generic so plugins can redact PII
|
|
177
|
+
* freely — only `Record<string, unknown>` is required, not a shape that
|
|
178
|
+
* matches `TData`.
|
|
179
|
+
*/
|
|
180
|
+
auditPayload?: Record<string, unknown>;
|
|
181
|
+
/**
|
|
182
|
+
* Step-level dispatch metrics attached by core after finalize(). Included in
|
|
183
|
+
* the response envelope so Vivian can forward into Segment events for A/B
|
|
184
|
+
* warehouse analysis.
|
|
185
|
+
*/
|
|
186
|
+
metrics?: DispatchMetrics;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Contract every site plugin must satisfy. Core's dispatch layer types its
|
|
190
|
+
* `SITE_PLUGINS` registry and `dispatch()` function against this interface so
|
|
191
|
+
* adding a new site never requires changes to core — only a new file in
|
|
192
|
+
* `src/sites/<id>/`.
|
|
193
|
+
*/
|
|
194
|
+
export interface SitePlugin<TPayload = unknown, TResult = Record<string, unknown>> {
|
|
195
|
+
/** Static metadata used by the loader to register this plugin's Fastify route. */
|
|
196
|
+
meta: SitePluginMeta;
|
|
197
|
+
/**
|
|
198
|
+
* Optional direct-HTTP hot path. When present, dispatch() tries this first.
|
|
199
|
+
* On `HttpSchemaError`, `HttpBotChallengeError`, or `HttpServerError` it falls
|
|
200
|
+
* through to `execute()` automatically — the plugin never has to wire the
|
|
201
|
+
* fallback itself.
|
|
202
|
+
*
|
|
203
|
+
* Use `createHttpClient()` from `src/scraper/http-client.ts` to get a typed
|
|
204
|
+
* fetch wrapper pre-wired with Bottleneck rate-limiting and Zod boundary
|
|
205
|
+
* parsing. No browser, no LLM tokens — millisecond latency when it works.
|
|
206
|
+
*/
|
|
207
|
+
executeHttp?: (payload: TPayload, context: SitePluginContext) => Promise<SitePluginResult<TResult>>;
|
|
208
|
+
/**
|
|
209
|
+
* Performs the full browser-automation flow for one submission. Core acquires
|
|
210
|
+
* `session` from the pool and injects `context` before calling this; the plugin
|
|
211
|
+
* must not create or close sessions itself.
|
|
212
|
+
*
|
|
213
|
+
* Invoked automatically when `executeHttp` is absent or when it throws
|
|
214
|
+
* `HttpSchemaError`, `HttpBotChallengeError`, or `HttpServerError`.
|
|
215
|
+
*/
|
|
216
|
+
execute(payload: TPayload, session: BrowserSession, context: SitePluginContext): Promise<SitePluginResult<TResult>>;
|
|
217
|
+
/**
|
|
218
|
+
* Optional hook called by core's retry layer before each retry attempt. Plugins
|
|
219
|
+
* use this for telemetry or local cleanup (e.g. resetting in-memory state).
|
|
220
|
+
* Async work is supported. Note: this hook is NOT called on `CaptchaError` or
|
|
221
|
+
* `EmptyResultsError` — p-retry skips `onFailedAttempt` for AbortError, so
|
|
222
|
+
* those abort paths bypass this hook entirely.
|
|
223
|
+
*/
|
|
224
|
+
onRetry?: (error: ScraperError, attempt: number) => void | Promise<void>;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=site-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-plugin.d.ts","sourceRoot":"","sources":["../src/site-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contract every site plugin implements and that core's dispatch layer consumes.
|
|
4
|
+
* Lives at the top of `src/` alongside `config.ts` and `server.ts` because it
|
|
5
|
+
* is engine-level infrastructure, not site-specific logic — any new site drops
|
|
6
|
+
* a plugin into `src/sites/<id>/` and satisfies this interface without touching
|
|
7
|
+
* core.
|
|
8
|
+
*
|
|
9
|
+
* All imports are type-only: this file has zero runtime side effects and is safe
|
|
10
|
+
* to import from any layer without pulling in browser or config initialization.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
//# sourceMappingURL=site-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-plugin.js","sourceRoot":"","sources":["../src/site-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical ApplicationAnswers fixture for all plugin tests. Centralised so
|
|
3
|
+
* a 21-field answer block is defined once and downstream consumers spread +
|
|
4
|
+
* override the handful of fields they assert differently — a field-type change
|
|
5
|
+
* or new tenant default is a one-edit propagation.
|
|
6
|
+
*
|
|
7
|
+
* Values are seeded from the AppCast/Encompass Health recon run so they satisfy
|
|
8
|
+
* every tenant-level question the question-mapper knows about. Demographic
|
|
9
|
+
* fields default to the least-disclosing option ("Prefer not to say").
|
|
10
|
+
*/
|
|
11
|
+
import type { ApplicationAnswers } from "../lib/application-answers";
|
|
12
|
+
export declare const TEST_ANSWERS: ApplicationAnswers;
|
|
13
|
+
//# sourceMappingURL=answers-fixture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers-fixture.d.ts","sourceRoot":"","sources":["../../src/testing/answers-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAO,MAAM,YAAY,EAAE,kBAsB1B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical ApplicationAnswers fixture for all plugin tests. Centralised so
|
|
4
|
+
* a 21-field answer block is defined once and downstream consumers spread +
|
|
5
|
+
* override the handful of fields they assert differently — a field-type change
|
|
6
|
+
* or new tenant default is a one-edit propagation.
|
|
7
|
+
*
|
|
8
|
+
* Values are seeded from the AppCast/Encompass Health recon run so they satisfy
|
|
9
|
+
* every tenant-level question the question-mapper knows about. Demographic
|
|
10
|
+
* fields default to the least-disclosing option ("Prefer not to say").
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TEST_ANSWERS = void 0;
|
|
14
|
+
exports.TEST_ANSWERS = {
|
|
15
|
+
WorkAuthorization: "Yes",
|
|
16
|
+
VisaSponsorship: "NA",
|
|
17
|
+
NonCompete: "No",
|
|
18
|
+
OIGGSAOFACExcluded: "No",
|
|
19
|
+
FormerEmployee: "Not Applicable",
|
|
20
|
+
CurrentNonEmployeeId: "NA",
|
|
21
|
+
OtherOpportunities: "Yes",
|
|
22
|
+
RelatedToEmployee: "No",
|
|
23
|
+
PreviouslyEmployedAtEncompass: "No",
|
|
24
|
+
EverSanctionedOrOnProbation: "No",
|
|
25
|
+
EverTerminated: "No",
|
|
26
|
+
EverExcludedFromFederalProgram: "No",
|
|
27
|
+
LegallyEligibleToWorkUS: "Yes",
|
|
28
|
+
CanPerformJobFunctions: "Yes",
|
|
29
|
+
Gender: "Prefer not to say",
|
|
30
|
+
Degree: "Nursing",
|
|
31
|
+
EducationLevel: "Bachelor's Degree",
|
|
32
|
+
SignatureFullName: "Reginald Reconaldo",
|
|
33
|
+
MeetsMinimumAge: "Yes",
|
|
34
|
+
AppliedToSanfordOrGoodSamaritanLast6Months: "No",
|
|
35
|
+
HasOrWillObtainLicense: "Yes",
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=answers-fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answers-fixture.js","sourceRoot":"","sources":["../../src/testing/answers-fixture.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAIU,QAAA,YAAY,GAAuB;IAC9C,iBAAiB,EAAE,KAAK;IACxB,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,kBAAkB,EAAE,IAAI;IACxB,cAAc,EAAE,gBAAgB;IAChC,oBAAoB,EAAE,IAAI;IAC1B,kBAAkB,EAAE,KAAK;IACzB,iBAAiB,EAAE,IAAI;IACvB,6BAA6B,EAAE,IAAI;IACnC,2BAA2B,EAAE,IAAI;IACjC,cAAc,EAAE,IAAI;IACpB,8BAA8B,EAAE,IAAI;IACpC,uBAAuB,EAAE,KAAK;IAC9B,sBAAsB,EAAE,KAAK;IAC7B,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,mBAAmB;IACnC,iBAAiB,EAAE,oBAAoB;IACvC,eAAe,EAAE,KAAK;IACtB,0CAA0C,EAAE,IAAI;IAChD,sBAAsB,EAAE,KAAK;CAC9B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { TestmailInbox, TestmailMessage } from "../testmail/client";
|
|
2
|
+
/**
|
|
3
|
+
* Outcome of a single job's submit phase: either a successful submit (with
|
|
4
|
+
* the allocated inbox) or a failed one (with an error message).
|
|
5
|
+
*/
|
|
6
|
+
export type SubmitOutcome = {
|
|
7
|
+
ok: true;
|
|
8
|
+
inbox: TestmailInbox;
|
|
9
|
+
durationMs: number;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: string;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Outcome of a single job's email-poll phase. Only run for jobs that passed
|
|
17
|
+
* phase 1.
|
|
18
|
+
*/
|
|
19
|
+
export type PollOutcome = {
|
|
20
|
+
received: true;
|
|
21
|
+
message: TestmailMessage;
|
|
22
|
+
waitMs: number;
|
|
23
|
+
} | {
|
|
24
|
+
received: false;
|
|
25
|
+
waitMs: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Dependency-injected callbacks that make the harness site-agnostic. Callers
|
|
29
|
+
* provide the site-specific logic; the harness owns the phase-1/phase-2 loop,
|
|
30
|
+
* inbox allocation, and summary rendering.
|
|
31
|
+
*/
|
|
32
|
+
export interface BatchEmailConfirmationOptions<TJob, TVerdict> {
|
|
33
|
+
/** Allocate a fresh testmail inbox for the job. Defaults to testmail client's `allocateTestmailInbox`. */
|
|
34
|
+
allocateInbox: (job: TJob) => TestmailInbox;
|
|
35
|
+
/** Submit the job with the given inbox address. Should throw on hard failure, or return a value. */
|
|
36
|
+
submit: (job: TJob, inbox: TestmailInbox) => Promise<SubmitOutcome>;
|
|
37
|
+
/**
|
|
38
|
+
* Poll for a confirmation email in the inbox after a successful submit.
|
|
39
|
+
* Defaults to 90 s. Should return PollOutcome whether email arrived or not.
|
|
40
|
+
*/
|
|
41
|
+
pollEmail: (inbox: TestmailInbox) => Promise<PollOutcome>;
|
|
42
|
+
/** Map the raw phase outcomes into the caller's verdict shape. */
|
|
43
|
+
mapVerdict: (job: TJob, submitOutcome: SubmitOutcome, pollOutcome: PollOutcome | null) => TVerdict;
|
|
44
|
+
/** Max parallel phase-1 submits. Default 1 (serial). */
|
|
45
|
+
concurrency?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Site-agnostic two-phase batch runner: submit each job with a fresh testmail
|
|
49
|
+
* inbox (phase 1), then poll each successful inbox for a confirmation email
|
|
50
|
+
* (phase 2). Returns one verdict per input job.
|
|
51
|
+
*
|
|
52
|
+
* Phase separation is intentional — all submits complete before any polling
|
|
53
|
+
* begins, matching the expected cadence for ATS email confirmations that
|
|
54
|
+
* arrive seconds after submission. The caller supplies all site-specific
|
|
55
|
+
* behaviour via injected callbacks.
|
|
56
|
+
*/
|
|
57
|
+
export declare function runBatchEmailConfirmation<TJob, TVerdict>(jobs: TJob[], opts: BatchEmailConfirmationOptions<TJob, TVerdict>): Promise<TVerdict[]>;
|
|
58
|
+
//# sourceMappingURL=batch-email-confirmation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-email-confirmation.d.ts","sourceRoot":"","sources":["../../src/testing/batch-email-confirmation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIxE;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,WAAW,6BAA6B,CAAC,IAAI,EAAE,QAAQ;IAC3D,0GAA0G;IAC1G,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,aAAa,CAAC;IAC5C,oGAAoG;IACpG,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE;;;OAGG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,kEAAkE;IAClE,UAAU,EAAE,CACV,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,KAC5B,QAAQ,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAC5D,IAAI,EAAE,IAAI,EAAE,EACZ,IAAI,EAAE,6BAA6B,CAAC,IAAI,EAAE,QAAQ,CAAC,GAClD,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuDrB"}
|