@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,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a JSON-Schema fragment into a live Zod schema instance built from
|
|
4
|
+
* the project's own `zod/v4` import. Config plugins declare their request,
|
|
5
|
+
* response, and extract shapes as inert JSON Schema in the manifest; the loader
|
|
6
|
+
* needs real Zod instances because `validatePluginShape`
|
|
7
|
+
* (`src/plugins/discover.ts`) duck-types `meta.bodySchema`/`meta.responseSchema`
|
|
8
|
+
* for `safeParse`/`parse`, and `guardedExtract` constrains its schema argument
|
|
9
|
+
* to `z.ZodTypeAny`.
|
|
10
|
+
*
|
|
11
|
+
* Why in-house and not a library: `z.fromJSONSchema` does not exist on the
|
|
12
|
+
* pinned `zod@3.25.76` (only the reverse `z.toJSONSchema`), and any third-party
|
|
13
|
+
* converter would emit an instance from a *different* Zod copy — failing both
|
|
14
|
+
* the loader duck-type and Stagehand's `StagehandZodSchema` union. Building from
|
|
15
|
+
* this module's own `z` is the only instance-safe route.
|
|
16
|
+
*
|
|
17
|
+
* Scope is deliberately the flat form real form-field payloads need
|
|
18
|
+
* (object/string/number/integer/boolean/array/enum + `required`). Anything
|
|
19
|
+
* outside that surface throws at load time rather than silently degrading, so a
|
|
20
|
+
* manifest that leans on unsupported JSON-Schema features fails loudly.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.UnsupportedJsonSchemaError = void 0;
|
|
24
|
+
exports.jsonSchemaToZod = jsonSchemaToZod;
|
|
25
|
+
const v4_1 = require("zod/v4");
|
|
26
|
+
/** Thrown when a manifest schema uses a JSON-Schema construct this converter does not support. */
|
|
27
|
+
class UnsupportedJsonSchemaError extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "UnsupportedJsonSchemaError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.UnsupportedJsonSchemaError = UnsupportedJsonSchemaError;
|
|
34
|
+
const JSON_SCHEMA_NODE = v4_1.z.lazy(() => v4_1.z
|
|
35
|
+
.object({
|
|
36
|
+
type: v4_1.z.enum(["object", "string", "number", "integer", "boolean", "array"]).optional(),
|
|
37
|
+
properties: v4_1.z.record(v4_1.z.string(), JSON_SCHEMA_NODE).optional(),
|
|
38
|
+
required: v4_1.z.array(v4_1.z.string()).optional(),
|
|
39
|
+
items: JSON_SCHEMA_NODE.optional(),
|
|
40
|
+
enum: v4_1.z.array(v4_1.z.string()).min(1).optional(),
|
|
41
|
+
format: v4_1.z.string().optional(),
|
|
42
|
+
description: v4_1.z.string().optional(),
|
|
43
|
+
})
|
|
44
|
+
.strict());
|
|
45
|
+
/** Builds the Zod leaf/branch for one already-validated JSON-Schema node. */
|
|
46
|
+
function nodeToZod(node) {
|
|
47
|
+
if (node.enum) {
|
|
48
|
+
return v4_1.z.enum(node.enum);
|
|
49
|
+
}
|
|
50
|
+
switch (node.type) {
|
|
51
|
+
case "string":
|
|
52
|
+
return v4_1.z.string();
|
|
53
|
+
case "number":
|
|
54
|
+
case "integer":
|
|
55
|
+
return v4_1.z.number();
|
|
56
|
+
case "boolean":
|
|
57
|
+
return v4_1.z.boolean();
|
|
58
|
+
case "array":
|
|
59
|
+
return v4_1.z.array(node.items ? nodeToZod(node.items) : v4_1.z.unknown());
|
|
60
|
+
case "object": {
|
|
61
|
+
const required = new Set(node.required ?? []);
|
|
62
|
+
const shape = {};
|
|
63
|
+
for (const [key, child] of Object.entries(node.properties ?? {})) {
|
|
64
|
+
const childSchema = nodeToZod(child);
|
|
65
|
+
shape[key] = required.has(key) ? childSchema : childSchema.optional();
|
|
66
|
+
}
|
|
67
|
+
return v4_1.z.object(shape);
|
|
68
|
+
}
|
|
69
|
+
default:
|
|
70
|
+
throw new UnsupportedJsonSchemaError(`unsupported JSON-Schema node: ${JSON.stringify(node).slice(0, 120)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Converts a manifest's JSON-Schema fragment into a Zod schema instance.
|
|
75
|
+
* Validates the fragment's structure first so unsupported constructs surface as
|
|
76
|
+
* a descriptive error at plugin-load time instead of a downstream parse crash.
|
|
77
|
+
*/
|
|
78
|
+
function jsonSchemaToZod(schema) {
|
|
79
|
+
const parsed = JSON_SCHEMA_NODE.safeParse(schema);
|
|
80
|
+
if (!parsed.success) {
|
|
81
|
+
throw new UnsupportedJsonSchemaError(`invalid or unsupported JSON schema: ${parsed.error.message}`);
|
|
82
|
+
}
|
|
83
|
+
return nodeToZod(parsed.data);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=json-schema-to-zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-to-zod.js","sourceRoot":"","sources":["../../src/plugins/json-schema-to-zod.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { FastifyInstance, RawServerDefault } from "fastify";
|
|
3
|
+
import type { AppConfig } from "../config";
|
|
4
|
+
import type { SitePlugin, SitePluginContext, SitePluginResult } from "../site-plugin";
|
|
5
|
+
import type { Logger } from "../types/logging";
|
|
6
|
+
/**
|
|
7
|
+
* Alias for `BUILTIN_SITE_PLUGINS` kept for backwards compatibility with
|
|
8
|
+
* tests that import `SITE_PLUGINS` directly from this module. New code
|
|
9
|
+
* should reference `BUILTIN_SITE_PLUGINS` from `discover.ts` directly or
|
|
10
|
+
* call `loadAllPlugins` for the composed set.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SITE_PLUGINS: SitePlugin<unknown, unknown>[];
|
|
13
|
+
/**
|
|
14
|
+
* Runs a single plugin submission end-to-end. Tries the direct-HTTP hot path
|
|
15
|
+
* first when the plugin supplies `executeHttp`; on `HttpSchemaError`,
|
|
16
|
+
* `HttpBotChallengeError`, or `HttpServerError` falls back to the Stagehand
|
|
17
|
+
* browser path. Records metrics on each branch so ops dashboards can alert on
|
|
18
|
+
* rising fallback rates. Emits a `submission-envelope` telemetry record on
|
|
19
|
+
* both success and failure — the durable source-of-truth for "what did we
|
|
20
|
+
* submit for jobId X and did it succeed." Maps scraper errors to the API
|
|
21
|
+
* error hierarchy so callers receive typed, client-readable errors instead
|
|
22
|
+
* of raw scraper internals.
|
|
23
|
+
*/
|
|
24
|
+
export declare function dispatch<TResult>(plugin: SitePlugin<unknown, unknown>, payload: unknown, context: SitePluginContext, options?: {
|
|
25
|
+
forceFallback?: boolean;
|
|
26
|
+
}): Promise<SitePluginResult<TResult>>;
|
|
27
|
+
/**
|
|
28
|
+
* Registers one Fastify POST route per plugin plus any extra routes declared
|
|
29
|
+
* in `plugin.meta.extraRoutes`. Called from `buildServer()` so `server.ts`
|
|
30
|
+
* stays site-agnostic — it delegates all plugin-specific route knowledge
|
|
31
|
+
* (path, schema, dispatch) to this module instead of maintaining an inline loop.
|
|
32
|
+
*/
|
|
33
|
+
export declare function registerRoutes(app: FastifyInstance<RawServerDefault, IncomingMessage, ServerResponse, Logger>, cfg: AppConfig, plugins: SitePlugin<unknown, unknown>[]): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAejE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkC1C,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAW9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,gCAAuB,CAAC;AAiHjD;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EACpC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAuEpC;AA+BD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,CAAC,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC,EAC/E,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -0,0 +1,348 @@
|
|
|
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.SITE_PLUGINS = void 0;
|
|
7
|
+
exports.dispatch = dispatch;
|
|
8
|
+
exports.registerRoutes = registerRoutes;
|
|
9
|
+
const multipart_1 = __importDefault(require("@fastify/multipart"));
|
|
10
|
+
const v4_1 = require("zod/v4");
|
|
11
|
+
const errors_1 = require("../api/errors");
|
|
12
|
+
const envelope_1 = require("../api/helpers/envelope");
|
|
13
|
+
const response_cache_1 = require("../cache/response-cache");
|
|
14
|
+
const dd_metrics_1 = require("../lib/dd-metrics");
|
|
15
|
+
const dispatch_metrics_1 = require("../lib/dispatch-metrics");
|
|
16
|
+
const errors_2 = require("../lib/errors");
|
|
17
|
+
const logging_1 = require("../lib/logging");
|
|
18
|
+
const submission_capture_1 = require("../lib/telemetry/submission-capture");
|
|
19
|
+
const tracking_click_1 = require("../lib/tracking-click");
|
|
20
|
+
const discover_1 = require("../plugins/discover");
|
|
21
|
+
const errors_3 = require("../scraper/errors");
|
|
22
|
+
const metrics_1 = require("../scraper/metrics");
|
|
23
|
+
const pool_1 = require("../scraper/pool");
|
|
24
|
+
const dispatch_metrics_2 = require("../types/dispatch-metrics");
|
|
25
|
+
const logger = (0, logging_1.getLogger)({ name: "plugins/loader" });
|
|
26
|
+
/**
|
|
27
|
+
* Params schema for shared `:siteId`-parameterized extra routes. Core validates
|
|
28
|
+
* only the site discriminator; each plugin's own body contract is enforced in
|
|
29
|
+
* the handler after the owning plugin is resolved.
|
|
30
|
+
*/
|
|
31
|
+
const siteIdRouteParamsSchema = v4_1.z.object({ siteId: v4_1.z.string().min(1) });
|
|
32
|
+
/**
|
|
33
|
+
* Alias for `BUILTIN_SITE_PLUGINS` kept for backwards compatibility with
|
|
34
|
+
* tests that import `SITE_PLUGINS` directly from this module. New code
|
|
35
|
+
* should reference `BUILTIN_SITE_PLUGINS` from `discover.ts` directly or
|
|
36
|
+
* call `loadAllPlugins` for the composed set.
|
|
37
|
+
*/
|
|
38
|
+
exports.SITE_PLUGINS = discover_1.BUILTIN_SITE_PLUGINS;
|
|
39
|
+
/**
|
|
40
|
+
* Pure mapping from scraper-internal errors to the public ApiError hierarchy.
|
|
41
|
+
*
|
|
42
|
+
* Exists so dispatch()'s catch block stays a short tail of guard clauses —
|
|
43
|
+
* the if-instanceof chain captures the entire scraper-to-wire error contract
|
|
44
|
+
* in one place. Returns `undefined` when the caller should re-throw the
|
|
45
|
+
* original error (plain Error or anything outside the ScraperError tree).
|
|
46
|
+
*/
|
|
47
|
+
function toApiError(err) {
|
|
48
|
+
if (err instanceof errors_3.CaptchaError)
|
|
49
|
+
return new errors_1.CaptchaEncounteredError(err.message);
|
|
50
|
+
if (err instanceof errors_3.EmptyResultsError)
|
|
51
|
+
return new errors_1.EmptyResultsApiError(err.message);
|
|
52
|
+
if (err instanceof errors_3.HttpRateLimitError)
|
|
53
|
+
return new errors_1.ThrottledRequestError(err.message);
|
|
54
|
+
if (err instanceof errors_3.HttpUrlLockedError)
|
|
55
|
+
return new errors_1.UrlLockedError(err.message);
|
|
56
|
+
if (err instanceof errors_3.ScraperError)
|
|
57
|
+
return new errors_1.ScrapeFailureError(err.message);
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Runs the hot path (when available) + fallback pipeline for a single
|
|
62
|
+
* submission. Extracted so dispatch() reads as a linear "run pipeline,
|
|
63
|
+
* record audit, return" sequence rather than a `let result` mutated across
|
|
64
|
+
* three branches.
|
|
65
|
+
*/
|
|
66
|
+
async function runPluginPipeline(plugin, payload, context, options) {
|
|
67
|
+
if (!plugin.executeHttp || options.forceFallback) {
|
|
68
|
+
if (options.forceFallback) {
|
|
69
|
+
(0, metrics_1.recordFallbackActivation)(plugin.meta.siteId);
|
|
70
|
+
(0, dd_metrics_1.recordDdFallback)(plugin.meta.siteId);
|
|
71
|
+
}
|
|
72
|
+
return (await (0, pool_1.runWithSession)((session) => plugin.execute(payload, session, context), { onRetry: plugin.onRetry }, plugin.meta.taskTimeoutMs, { advancedStealth: plugin.meta.advancedStealth }));
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const { value: cached, key } = (0, response_cache_1.getCachedResponse)(`${context.baseUrl}:${plugin.meta.siteId}`, payload);
|
|
76
|
+
if (cached) {
|
|
77
|
+
(0, metrics_1.recordHotPathSuccess)(plugin.meta.siteId);
|
|
78
|
+
return cached;
|
|
79
|
+
}
|
|
80
|
+
const t0 = Date.now();
|
|
81
|
+
const fresh = await (0, response_cache_1.getOrCreateInFlight)(key,
|
|
82
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by !plugin.executeHttp above
|
|
83
|
+
() => plugin.executeHttp(payload, context));
|
|
84
|
+
(0, metrics_1.recordHotPathLatency)(plugin.meta.siteId, Date.now() - t0);
|
|
85
|
+
(0, metrics_1.recordHotPathSuccess)(plugin.meta.siteId);
|
|
86
|
+
return fresh;
|
|
87
|
+
}
|
|
88
|
+
catch (httpErr) {
|
|
89
|
+
if (httpErr instanceof errors_3.HttpSchemaError ||
|
|
90
|
+
httpErr instanceof errors_3.HttpBotChallengeError ||
|
|
91
|
+
httpErr instanceof errors_3.HttpServerError) {
|
|
92
|
+
logger.warn(`hot path failed for ${plugin.meta.siteId} (${httpErr.constructor.name}): ${httpErr.message} — engaging browser fallback`);
|
|
93
|
+
(0, metrics_1.recordFallbackActivation)(plugin.meta.siteId);
|
|
94
|
+
(0, dd_metrics_1.recordDdFallback)(plugin.meta.siteId);
|
|
95
|
+
return (await (0, pool_1.runWithSession)((session) => plugin.execute(payload, session, context), { onRetry: plugin.onRetry }, plugin.meta.taskTimeoutMs, { advancedStealth: plugin.meta.advancedStealth }));
|
|
96
|
+
}
|
|
97
|
+
if (httpErr instanceof errors_3.HttpRateLimitError) {
|
|
98
|
+
logger.warn(`hot path rate-limited for ${plugin.meta.siteId}: ${httpErr.message} — not falling back`);
|
|
99
|
+
(0, metrics_1.recordRateLimitRejection)(plugin.meta.siteId);
|
|
100
|
+
(0, dd_metrics_1.recordDdRateLimit)(plugin.meta.siteId);
|
|
101
|
+
}
|
|
102
|
+
if (httpErr instanceof errors_3.HttpUrlLockedError) {
|
|
103
|
+
logger.warn(`hot path url-locked for ${plugin.meta.siteId}: ${httpErr.message} — not falling back`);
|
|
104
|
+
}
|
|
105
|
+
throw httpErr;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Best-effort wrapper around `captureSubmissionEnvelope`. The helper itself
|
|
110
|
+
* already swallows write errors, but defending dispatch against a misbehaving
|
|
111
|
+
* sink (or a test mock that bypasses the helper's internal try/catch) keeps
|
|
112
|
+
* the audit emission contractually non-breaking: a sink failure must never
|
|
113
|
+
* propagate into the request path.
|
|
114
|
+
*/
|
|
115
|
+
async function emitEnvelopeSafely(input) {
|
|
116
|
+
try {
|
|
117
|
+
await (0, submission_capture_1.captureSubmissionEnvelope)(input);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.warn(`submission envelope emit failed: ${(0, errors_2.toErrorMessage)(err)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Runs a single plugin submission end-to-end. Tries the direct-HTTP hot path
|
|
125
|
+
* first when the plugin supplies `executeHttp`; on `HttpSchemaError`,
|
|
126
|
+
* `HttpBotChallengeError`, or `HttpServerError` falls back to the Stagehand
|
|
127
|
+
* browser path. Records metrics on each branch so ops dashboards can alert on
|
|
128
|
+
* rising fallback rates. Emits a `submission-envelope` telemetry record on
|
|
129
|
+
* both success and failure — the durable source-of-truth for "what did we
|
|
130
|
+
* submit for jobId X and did it succeed." Maps scraper errors to the API
|
|
131
|
+
* error hierarchy so callers receive typed, client-readable errors instead
|
|
132
|
+
* of raw scraper internals.
|
|
133
|
+
*/
|
|
134
|
+
async function dispatch(plugin, payload, context, options = {}) {
|
|
135
|
+
const startedAt = Date.now();
|
|
136
|
+
const hasHttpPath = !!plugin.executeHttp && !options.forceFallback;
|
|
137
|
+
const pathTag = hasHttpPath ? "http" : "browser";
|
|
138
|
+
const ddTags = { site: plugin.meta.siteId, path: pathTag };
|
|
139
|
+
(0, dd_metrics_1.recordDdAttempt)(ddTags);
|
|
140
|
+
try {
|
|
141
|
+
const result = await runPluginPipeline(plugin, payload, context, options);
|
|
142
|
+
const durationMs = Date.now() - startedAt;
|
|
143
|
+
// Short-circuit: the hot path signalled that the user must supply additional
|
|
144
|
+
// information (OTP or missing profile fields). This is not a success — skip
|
|
145
|
+
// the submission envelope and tracking click so the challenge state is not
|
|
146
|
+
// recorded as a completed application.
|
|
147
|
+
if (result.data.needsUserInfo === true) {
|
|
148
|
+
result.metrics = context.metricsCollector.finalize(pathTag);
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
(0, dd_metrics_1.recordDdSuccess)(ddTags);
|
|
152
|
+
(0, dd_metrics_1.recordDdDuration)(ddTags, durationMs);
|
|
153
|
+
const metrics = context.metricsCollector.finalize(pathTag);
|
|
154
|
+
result.metrics = metrics;
|
|
155
|
+
await emitEnvelopeSafely({
|
|
156
|
+
siteId: plugin.meta.siteId,
|
|
157
|
+
requestId: context.requestId,
|
|
158
|
+
inboundPayload: payload,
|
|
159
|
+
status: "submitted",
|
|
160
|
+
auditPayload: result.auditPayload ?? result.data,
|
|
161
|
+
errorMessage: null,
|
|
162
|
+
durationMs,
|
|
163
|
+
});
|
|
164
|
+
const trackingUrl = payload?.TrackingUrl;
|
|
165
|
+
if (typeof trackingUrl === "string" && trackingUrl.length > 0) {
|
|
166
|
+
(0, tracking_click_1.fireTrackingClick)(trackingUrl, plugin.meta.siteId);
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const durationMs = Date.now() - startedAt;
|
|
172
|
+
const errorType = classifyDispatchError(err);
|
|
173
|
+
const failureTags = { ...ddTags, error_type: errorType };
|
|
174
|
+
(0, dd_metrics_1.recordDdFailure)(failureTags);
|
|
175
|
+
(0, dd_metrics_1.recordDdDuration)(ddTags, durationMs);
|
|
176
|
+
const metrics = context.metricsCollector.finalize(pathTag);
|
|
177
|
+
await emitEnvelopeSafely({
|
|
178
|
+
siteId: plugin.meta.siteId,
|
|
179
|
+
requestId: context.requestId,
|
|
180
|
+
inboundPayload: payload,
|
|
181
|
+
status: "error",
|
|
182
|
+
auditPayload: null,
|
|
183
|
+
errorMessage: (0, errors_2.toErrorMessage)(err),
|
|
184
|
+
durationMs,
|
|
185
|
+
});
|
|
186
|
+
const apiErr = toApiError(err);
|
|
187
|
+
if (apiErr) {
|
|
188
|
+
apiErr.metrics = metrics;
|
|
189
|
+
throw apiErr;
|
|
190
|
+
}
|
|
191
|
+
err.metrics = metrics;
|
|
192
|
+
throw err;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Maps errors to DogStatsD-friendly classification strings. */
|
|
196
|
+
function classifyDispatchError(err) {
|
|
197
|
+
if (err instanceof errors_3.HttpBotChallengeError)
|
|
198
|
+
return "bot_challenge";
|
|
199
|
+
if (err instanceof errors_3.HttpRateLimitError)
|
|
200
|
+
return "rate_limit";
|
|
201
|
+
if (err instanceof errors_3.HttpUrlLockedError)
|
|
202
|
+
return "url_locked";
|
|
203
|
+
if (err instanceof errors_3.HttpSchemaError)
|
|
204
|
+
return "schema_drift";
|
|
205
|
+
if (err instanceof errors_3.HttpServerError)
|
|
206
|
+
return "server_error";
|
|
207
|
+
if (err instanceof errors_3.CaptchaError)
|
|
208
|
+
return "captcha";
|
|
209
|
+
if (err instanceof errors_3.EmptyResultsError)
|
|
210
|
+
return "empty_results";
|
|
211
|
+
if (err instanceof errors_3.ScraperError)
|
|
212
|
+
return "scraper_generic";
|
|
213
|
+
return "unknown";
|
|
214
|
+
}
|
|
215
|
+
const ResponseEnvelopeSchema = v4_1.z.object({
|
|
216
|
+
status: v4_1.z.object({
|
|
217
|
+
httpStatus: v4_1.z.string(),
|
|
218
|
+
dateTime: v4_1.z.string(),
|
|
219
|
+
details: v4_1.z.array(v4_1.z.unknown()),
|
|
220
|
+
}),
|
|
221
|
+
metrics: dispatch_metrics_2.DispatchMetricsSchema.optional(),
|
|
222
|
+
});
|
|
223
|
+
function buildEnvelopedResponseSchema(pluginSchema) {
|
|
224
|
+
if (pluginSchema instanceof v4_1.z.ZodObject) {
|
|
225
|
+
return ResponseEnvelopeSchema.extend(pluginSchema.shape).passthrough();
|
|
226
|
+
}
|
|
227
|
+
return v4_1.z.unknown();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Registers one Fastify POST route per plugin plus any extra routes declared
|
|
231
|
+
* in `plugin.meta.extraRoutes`. Called from `buildServer()` so `server.ts`
|
|
232
|
+
* stays site-agnostic — it delegates all plugin-specific route knowledge
|
|
233
|
+
* (path, schema, dispatch) to this module instead of maintaining an inline loop.
|
|
234
|
+
*/
|
|
235
|
+
async function registerRoutes(app, cfg, plugins) {
|
|
236
|
+
const needsMultipart = plugins.some((p) => p.meta.multipart === true || p.meta.extraRoutes?.some((r) => r.multipart === true));
|
|
237
|
+
if (needsMultipart) {
|
|
238
|
+
await app.register(multipart_1.default, { attachFieldsToBody: "keyValues" });
|
|
239
|
+
}
|
|
240
|
+
for (const plugin of plugins) {
|
|
241
|
+
const routePath = plugin.meta.routeOverride ?? `/v1/${plugin.meta.siteId}/run`;
|
|
242
|
+
const baseUrl = cfg.scraper.siteBaseUrls[plugin.meta.siteId] ?? plugin.meta.defaultBaseUrl ?? "";
|
|
243
|
+
app.post(routePath, {
|
|
244
|
+
onRequest: [app.authenticate],
|
|
245
|
+
schema: {
|
|
246
|
+
body: plugin.meta.bodySchema,
|
|
247
|
+
response: { 200: buildEnvelopedResponseSchema(plugin.meta.responseSchema) },
|
|
248
|
+
...(plugin.meta.multipart === true ? { consumes: ["multipart/form-data"] } : {}),
|
|
249
|
+
},
|
|
250
|
+
}, async (request) => {
|
|
251
|
+
const forceFallback = request.headers["x-barnacle-force-fallback"] === "true";
|
|
252
|
+
const context = {
|
|
253
|
+
baseUrl,
|
|
254
|
+
logger: (0, logging_1.extendLogger)(request.log),
|
|
255
|
+
config: cfg,
|
|
256
|
+
requestId: request.id,
|
|
257
|
+
metricsCollector: new dispatch_metrics_1.MetricsCollector(),
|
|
258
|
+
};
|
|
259
|
+
const result = await dispatch(plugin, request.body, context, { forceFallback });
|
|
260
|
+
return (0, envelope_1.successEnvelope)({
|
|
261
|
+
...result.data,
|
|
262
|
+
...(result.metrics && { metrics: result.metrics }),
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
logger.info(`${plugin.meta.siteId} → ${routePath} (loaded)`);
|
|
266
|
+
}
|
|
267
|
+
registerExtraRoutes(app, cfg, plugins);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Fastify registers each `method+url` exactly once, but several plugins declare
|
|
271
|
+
* the SAME parameterized extra route (e.g. `POST /v1/:siteId/resume` for both
|
|
272
|
+
* appcast and encompasshealth). Registering per-plugin throws
|
|
273
|
+
* `FST_ERR_DUPLICATED_ROUTE` and crashes boot.
|
|
274
|
+
*
|
|
275
|
+
* We group extra routes by `method+path` and register each unique path once.
|
|
276
|
+
* A path claimed by a single plugin registers with that plugin's own body/params
|
|
277
|
+
* schema and handler (unchanged behavior). A path shared by multiple plugins is
|
|
278
|
+
* necessarily `:siteId`-parameterized: core validates only the `:siteId` param,
|
|
279
|
+
* then resolves the owning plugin from it at request time and validates the body
|
|
280
|
+
* against that plugin's own `bodySchema`, because sibling plugins sharing a path
|
|
281
|
+
* carry different body contracts.
|
|
282
|
+
*/
|
|
283
|
+
function registerExtraRoutes(app, cfg, plugins) {
|
|
284
|
+
const byMethodPath = new Map();
|
|
285
|
+
for (const plugin of plugins) {
|
|
286
|
+
for (const route of plugin.meta.extraRoutes ?? []) {
|
|
287
|
+
const method = route.method.toUpperCase();
|
|
288
|
+
const key = `${method} ${route.path}`;
|
|
289
|
+
const entry = byMethodPath.get(key) ?? {
|
|
290
|
+
method,
|
|
291
|
+
path: route.path,
|
|
292
|
+
multipart: false,
|
|
293
|
+
owners: new Map(),
|
|
294
|
+
};
|
|
295
|
+
entry.multipart = entry.multipart || route.multipart === true;
|
|
296
|
+
entry.owners.set(plugin.meta.siteId, plugin);
|
|
297
|
+
byMethodPath.set(key, entry);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
for (const entry of byMethodPath.values()) {
|
|
301
|
+
const shared = entry.owners.size > 1;
|
|
302
|
+
const findRoute = (plugin) => plugin.meta.extraRoutes?.find((r) => r.method.toUpperCase() === entry.method && r.path === entry.path);
|
|
303
|
+
const soleOwner = shared ? undefined : [...entry.owners.values()][0];
|
|
304
|
+
const soleRoute = soleOwner ? findRoute(soleOwner) : undefined;
|
|
305
|
+
app.route({
|
|
306
|
+
method: entry.method,
|
|
307
|
+
url: entry.path,
|
|
308
|
+
onRequest: [app.authenticate],
|
|
309
|
+
schema: {
|
|
310
|
+
...(shared ? { params: siteIdRouteParamsSchema } : {}),
|
|
311
|
+
...(!shared && soleRoute?.bodySchema ? { body: soleRoute.bodySchema } : {}),
|
|
312
|
+
...(!shared && soleRoute?.paramsSchema ? { params: soleRoute.paramsSchema } : {}),
|
|
313
|
+
...(entry.multipart ? { consumes: ["multipart/form-data"] } : {}),
|
|
314
|
+
},
|
|
315
|
+
handler: async (request) => {
|
|
316
|
+
const siteId = request.params.siteId ?? "";
|
|
317
|
+
const plugin = shared ? entry.owners.get(siteId) : soleOwner;
|
|
318
|
+
if (!plugin) {
|
|
319
|
+
throw new errors_1.FieldViolationError(`no plugin registered for siteId ${JSON.stringify(siteId)} on ${entry.method} ${entry.path}`);
|
|
320
|
+
}
|
|
321
|
+
const route = findRoute(plugin);
|
|
322
|
+
if (!route) {
|
|
323
|
+
throw new errors_1.FieldViolationError(`plugin ${plugin.meta.siteId} has no handler for ${entry.method} ${entry.path}`);
|
|
324
|
+
}
|
|
325
|
+
// Fastify already validated the body for single-owner routes (schema.body
|
|
326
|
+
// above); shared routes defer body validation to here, against the
|
|
327
|
+
// resolved plugin's own contract.
|
|
328
|
+
const body = shared && route.bodySchema ? route.bodySchema.parse(request.body) : request.body;
|
|
329
|
+
const baseUrl = cfg.scraper.siteBaseUrls[plugin.meta.siteId] ?? plugin.meta.defaultBaseUrl ?? "";
|
|
330
|
+
const context = {
|
|
331
|
+
baseUrl,
|
|
332
|
+
logger: (0, logging_1.extendLogger)(request.log),
|
|
333
|
+
config: cfg,
|
|
334
|
+
requestId: request.id,
|
|
335
|
+
metricsCollector: new dispatch_metrics_1.MetricsCollector(),
|
|
336
|
+
};
|
|
337
|
+
const result = await route.handler({
|
|
338
|
+
body,
|
|
339
|
+
params: request.params,
|
|
340
|
+
log: request.log,
|
|
341
|
+
}, context);
|
|
342
|
+
return route.envelope === false ? result : (0, envelope_1.successEnvelope)(result);
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
logger.info(`${entry.path} → [${[...entry.owners.keys()].join(", ")}] via ${entry.method} (loaded)`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime version of the plugin API contract that core enforces at load time.
|
|
3
|
+
* Kept separate from `site-plugin.ts` because that file is strictly type-only
|
|
4
|
+
* and must have zero runtime side effects; a `const` value would break that
|
|
5
|
+
* guarantee.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PLUGIN_API_VERSION: "1.0.0";
|
|
8
|
+
//# sourceMappingURL=plugin-api-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-api-version.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-api-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PLUGIN_API_VERSION = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Runtime version of the plugin API contract that core enforces at load time.
|
|
6
|
+
* Kept separate from `site-plugin.ts` because that file is strictly type-only
|
|
7
|
+
* and must have zero runtime side effects; a `const` value would break that
|
|
8
|
+
* guarantee.
|
|
9
|
+
*/
|
|
10
|
+
exports.PLUGIN_API_VERSION = "1.0.0";
|
|
11
|
+
//# sourceMappingURL=plugin-api-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-api-version.js","sourceRoot":"","sources":["../../src/plugins/plugin-api-version.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACU,QAAA,kBAAkB,GAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes-style envelope constants for config-plugin manifests. Kept in a
|
|
3
|
+
* tiny leaf module (no heavy imports) so both the runtime loader
|
|
4
|
+
* (`config-plugin.ts`, which validates with `z.literal`) and the build-time
|
|
5
|
+
* emitter (`recon-generate.ts`, which writes manifests) share one source of
|
|
6
|
+
* truth — a version bump can't silently desync the emitter from the gate.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Manifest `apiVersion` the config-plugin factory understands (K8s
|
|
10
|
+
* `group/version`). Its major segment tracks `PLUGIN_API_VERSION`, the runtime
|
|
11
|
+
* plugin-API contract in `plugin-api-version.ts`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const CONFIG_PLUGIN_API_VERSION: "barnacle.dev/v1";
|
|
14
|
+
/** Manifest `kind` the config-plugin factory understands. */
|
|
15
|
+
export declare const CONFIG_PLUGIN_KIND: "SitePlugin";
|
|
16
|
+
//# sourceMappingURL=plugin-manifest-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manifest-envelope.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-manifest-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAG,iBAA0B,CAAC;AAEpE,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAG,YAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Kubernetes-style envelope constants for config-plugin manifests. Kept in a
|
|
4
|
+
* tiny leaf module (no heavy imports) so both the runtime loader
|
|
5
|
+
* (`config-plugin.ts`, which validates with `z.literal`) and the build-time
|
|
6
|
+
* emitter (`recon-generate.ts`, which writes manifests) share one source of
|
|
7
|
+
* truth — a version bump can't silently desync the emitter from the gate.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.CONFIG_PLUGIN_KIND = exports.CONFIG_PLUGIN_API_VERSION = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Manifest `apiVersion` the config-plugin factory understands (K8s
|
|
13
|
+
* `group/version`). Its major segment tracks `PLUGIN_API_VERSION`, the runtime
|
|
14
|
+
* plugin-API contract in `plugin-api-version.ts`.
|
|
15
|
+
*/
|
|
16
|
+
exports.CONFIG_PLUGIN_API_VERSION = "barnacle.dev/v1";
|
|
17
|
+
/** Manifest `kind` the config-plugin factory understands. */
|
|
18
|
+
exports.CONFIG_PLUGIN_KIND = "SitePlugin";
|
|
19
|
+
//# sourceMappingURL=plugin-manifest-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manifest-envelope.js","sourceRoot":"","sources":["../../src/plugins/plugin-manifest-envelope.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;;GAIG;AACU,QAAA,yBAAyB,GAAG,iBAA0B,CAAC;AAEpE,6DAA6D;AAChD,QAAA,kBAAkB,GAAG,YAAqB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDP behavioral-signal dispatcher. Sends synthetic mouse-move and scroll
|
|
3
|
+
* events to give bot-detection scripts (e.g. DataDome's tags.js) the UI
|
|
4
|
+
* signals they need to complete fingerprint computation. Without these,
|
|
5
|
+
* passive page loads produce zero events, causing tags.js to delay or refuse
|
|
6
|
+
* fingerprint resolution. Verified 2026-06-20: 0% resolution without signals
|
|
7
|
+
* → 67%+ with CDP mouseMoved + scroll dispatched during the poll loop.
|
|
8
|
+
*/
|
|
9
|
+
import type { Page } from "@browserbasehq/stagehand";
|
|
10
|
+
/**
|
|
11
|
+
* Dispatches two synthetic mouseMoved CDP events and a window.scrollBy(0,50)
|
|
12
|
+
* on `page`. Call once per poll iteration inside any warmup loop that needs
|
|
13
|
+
* DataDome (or similar) fingerprint resolution.
|
|
14
|
+
*/
|
|
15
|
+
export declare function dispatchBehavioralSignals(page: Page): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=behavioral-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavioral-signals.d.ts","sourceRoot":"","sources":["../../src/scraper/behavioral-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CDP behavioral-signal dispatcher. Sends synthetic mouse-move and scroll
|
|
4
|
+
* events to give bot-detection scripts (e.g. DataDome's tags.js) the UI
|
|
5
|
+
* signals they need to complete fingerprint computation. Without these,
|
|
6
|
+
* passive page loads produce zero events, causing tags.js to delay or refuse
|
|
7
|
+
* fingerprint resolution. Verified 2026-06-20: 0% resolution without signals
|
|
8
|
+
* → 67%+ with CDP mouseMoved + scroll dispatched during the poll loop.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.dispatchBehavioralSignals = dispatchBehavioralSignals;
|
|
12
|
+
/**
|
|
13
|
+
* Dispatches two synthetic mouseMoved CDP events and a window.scrollBy(0,50)
|
|
14
|
+
* on `page`. Call once per poll iteration inside any warmup loop that needs
|
|
15
|
+
* DataDome (or similar) fingerprint resolution.
|
|
16
|
+
*/
|
|
17
|
+
async function dispatchBehavioralSignals(page) {
|
|
18
|
+
await page.sendCDP("Input.dispatchMouseEvent", {
|
|
19
|
+
type: "mouseMoved",
|
|
20
|
+
x: 100 + Math.random() * 400,
|
|
21
|
+
y: 200 + Math.random() * 300,
|
|
22
|
+
});
|
|
23
|
+
await page.sendCDP("Input.dispatchMouseEvent", {
|
|
24
|
+
type: "mouseMoved",
|
|
25
|
+
x: 300 + Math.random() * 200,
|
|
26
|
+
y: 100 + Math.random() * 400,
|
|
27
|
+
});
|
|
28
|
+
await page.evaluate("window.scrollBy(0, 50)");
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=behavioral-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavioral-signals.js","sourceRoot":"","sources":["../../src/scraper/behavioral-signals.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AASH,8DAYC;AAjBD;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAAC,IAAU;IACxD,MAAM,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE;QAC7C,IAAI,EAAE,YAAY;QAClB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;QAC5B,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;KAC7B,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE;QAC7C,IAAI,EAAE,YAAY;QAClB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;QAC5B,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;KAC7B,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAChD,CAAC"}
|