@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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-off migration: rename existing base64-encoded telemetry run directories
|
|
3
|
+
* to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
|
|
4
|
+
*
|
|
5
|
+
* Background: until ce63526, per-URL telemetry partitions were named
|
|
6
|
+
* `runs/<base64url-canonical-url>/` (e.g.
|
|
7
|
+
* `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
|
|
8
|
+
* `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
|
|
9
|
+
* (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
|
|
10
|
+
* functionally harmless — but visually inconsistent and prevents the new
|
|
11
|
+
* `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
|
|
12
|
+
* working on historical data.
|
|
13
|
+
*
|
|
14
|
+
* This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
|
|
15
|
+
* each partition's `url.txt` sidecar to recover the original URL, and
|
|
16
|
+
* renames the dir to the new scheme. The timestamp is sourced from the
|
|
17
|
+
* mtime of the partition's `calls.ndjson` (when this run actually wrote
|
|
18
|
+
* data) or falls back to the dir's mtime when there's no NDJSON yet.
|
|
19
|
+
*
|
|
20
|
+
* Idempotent: dirs already in the new shape are skipped.
|
|
21
|
+
* Safe: dry-run is the default; `--apply` is required to actually rename.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
|
|
25
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
|
|
26
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site appcast --apply
|
|
27
|
+
*/
|
|
28
|
+
interface MigrateOptions {
|
|
29
|
+
/** Path to the project root containing `src/sites/`. */
|
|
30
|
+
sitesRoot: string;
|
|
31
|
+
/** Optional: restrict to one site directory by name (e.g. "appcast"). */
|
|
32
|
+
siteFilter: string | null;
|
|
33
|
+
/** If false, log planned renames but do not execute them. */
|
|
34
|
+
apply: boolean;
|
|
35
|
+
}
|
|
36
|
+
interface MigrationOutcome {
|
|
37
|
+
migrated: number;
|
|
38
|
+
alreadyMigrated: number;
|
|
39
|
+
warnings: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Drive the migration end-to-end across every site under `sitesRoot`.
|
|
43
|
+
* Returns a tally so callers (CLI + tests) can assert outcomes without
|
|
44
|
+
* scraping log output.
|
|
45
|
+
*/
|
|
46
|
+
export declare function migrateTelemetryDirs(opts: MigrateOptions): MigrationOutcome;
|
|
47
|
+
interface ParsedArgs {
|
|
48
|
+
apply: boolean;
|
|
49
|
+
siteFilter: string | null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Tiny argv parser matching the rest of the scripts in this dir. Exposed
|
|
53
|
+
* for unit tests; defaults to dry-run (apply=false).
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=migrate-telemetry-dir-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-telemetry-dir-names.d.ts","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,UAAU,cAAc;IACtB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAiB3E;AAqED,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAapD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* One-off migration: rename existing base64-encoded telemetry run directories
|
|
4
|
+
* to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
|
|
5
|
+
*
|
|
6
|
+
* Background: until ce63526, per-URL telemetry partitions were named
|
|
7
|
+
* `runs/<base64url-canonical-url>/` (e.g.
|
|
8
|
+
* `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
|
|
9
|
+
* `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
|
|
10
|
+
* (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
|
|
11
|
+
* functionally harmless — but visually inconsistent and prevents the new
|
|
12
|
+
* `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
|
|
13
|
+
* working on historical data.
|
|
14
|
+
*
|
|
15
|
+
* This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
|
|
16
|
+
* each partition's `url.txt` sidecar to recover the original URL, and
|
|
17
|
+
* renames the dir to the new scheme. The timestamp is sourced from the
|
|
18
|
+
* mtime of the partition's `calls.ndjson` (when this run actually wrote
|
|
19
|
+
* data) or falls back to the dir's mtime when there's no NDJSON yet.
|
|
20
|
+
*
|
|
21
|
+
* Idempotent: dirs already in the new shape are skipped.
|
|
22
|
+
* Safe: dry-run is the default; `--apply` is required to actually rename.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
|
|
26
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
|
|
27
|
+
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site appcast --apply
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.migrateTelemetryDirs = migrateTelemetryDirs;
|
|
31
|
+
exports.parseArgs = parseArgs;
|
|
32
|
+
const node_fs_1 = require("node:fs");
|
|
33
|
+
const node_path_1 = require("node:path");
|
|
34
|
+
const logging_1 = require("../lib/logging");
|
|
35
|
+
const telemetry_paths_1 = require("../lib/telemetry/telemetry-paths");
|
|
36
|
+
const logger = (0, logging_1.getScriptLogger)("migrate-telemetry-dir-names");
|
|
37
|
+
const ALREADY_MIGRATED_RX = /^\d+-[0-9a-f]{8}$/;
|
|
38
|
+
/**
|
|
39
|
+
* Drive the migration end-to-end across every site under `sitesRoot`.
|
|
40
|
+
* Returns a tally so callers (CLI + tests) can assert outcomes without
|
|
41
|
+
* scraping log output.
|
|
42
|
+
*/
|
|
43
|
+
function migrateTelemetryDirs(opts) {
|
|
44
|
+
const outcome = { migrated: 0, alreadyMigrated: 0, warnings: 0 };
|
|
45
|
+
if (!(0, node_fs_1.existsSync)(opts.sitesRoot)) {
|
|
46
|
+
logger.warn(`sites root not found: ${opts.sitesRoot}`);
|
|
47
|
+
outcome.warnings++;
|
|
48
|
+
return outcome;
|
|
49
|
+
}
|
|
50
|
+
const siteDirs = (0, node_fs_1.readdirSync)(opts.sitesRoot, { withFileTypes: true })
|
|
51
|
+
.filter((d) => d.isDirectory())
|
|
52
|
+
.filter((d) => opts.siteFilter === null || d.name === opts.siteFilter)
|
|
53
|
+
.map((d) => (0, node_path_1.join)(opts.sitesRoot, d.name));
|
|
54
|
+
for (const siteDir of siteDirs) {
|
|
55
|
+
const runsDir = (0, node_path_1.join)(siteDir, "telemetry", "runs");
|
|
56
|
+
if (!(0, node_fs_1.existsSync)(runsDir))
|
|
57
|
+
continue;
|
|
58
|
+
migrateRunsDir(runsDir, opts.apply, outcome);
|
|
59
|
+
}
|
|
60
|
+
return outcome;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Per-`runs/` walker. Inspects every child entry; rename-eligible ones get
|
|
64
|
+
* routed to renamePartition, which is also where dry-run vs apply is gated.
|
|
65
|
+
*/
|
|
66
|
+
function migrateRunsDir(runsDir, apply, outcome) {
|
|
67
|
+
const partitions = (0, node_fs_1.readdirSync)(runsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
|
|
68
|
+
for (const partition of partitions) {
|
|
69
|
+
const partitionPath = (0, node_path_1.join)(runsDir, partition.name);
|
|
70
|
+
if (ALREADY_MIGRATED_RX.test(partition.name)) {
|
|
71
|
+
logger.info(`skip (already migrated): ${partitionPath}`);
|
|
72
|
+
outcome.alreadyMigrated++;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
renamePartition(runsDir, partition.name, apply, outcome);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Compute the target name from `url.txt` + mtime, then dry-run-or-rename.
|
|
80
|
+
* Skips with a warning when the partition is missing the sidecar (can't
|
|
81
|
+
* recover URL), when the target already exists (collision; needs manual
|
|
82
|
+
* triage), or when mtime can't be read.
|
|
83
|
+
*/
|
|
84
|
+
function renamePartition(runsDir, oldName, apply, outcome) {
|
|
85
|
+
const partitionPath = (0, node_path_1.join)(runsDir, oldName);
|
|
86
|
+
const urlTxtPath = (0, node_path_1.join)(partitionPath, "url.txt");
|
|
87
|
+
if (!(0, node_fs_1.existsSync)(urlTxtPath)) {
|
|
88
|
+
logger.warn(`skip (no url.txt): ${partitionPath}`);
|
|
89
|
+
outcome.warnings++;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const url = (0, node_fs_1.readFileSync)(urlTxtPath, "utf8").trim();
|
|
93
|
+
if (url.length === 0) {
|
|
94
|
+
logger.warn(`skip (empty url.txt): ${partitionPath}`);
|
|
95
|
+
outcome.warnings++;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const callsPath = (0, node_path_1.join)(partitionPath, "calls.ndjson");
|
|
99
|
+
const mtimeMs = (0, node_fs_1.existsSync)(callsPath)
|
|
100
|
+
? Math.round((0, node_fs_1.statSync)(callsPath).mtimeMs)
|
|
101
|
+
: Math.round((0, node_fs_1.statSync)(partitionPath).mtimeMs);
|
|
102
|
+
const newName = (0, telemetry_paths_1.urlDirName)(mtimeMs, url);
|
|
103
|
+
if (newName === oldName) {
|
|
104
|
+
logger.info(`skip (same name): ${partitionPath}`);
|
|
105
|
+
outcome.alreadyMigrated++;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const newPath = (0, node_path_1.join)(runsDir, newName);
|
|
109
|
+
if ((0, node_fs_1.existsSync)(newPath)) {
|
|
110
|
+
logger.warn(`skip (target collision): ${partitionPath} → ${newPath}`);
|
|
111
|
+
outcome.warnings++;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (apply) {
|
|
115
|
+
(0, node_fs_1.renameSync)(partitionPath, newPath);
|
|
116
|
+
logger.info(`renamed: ${oldName} → ${newName} (in ${runsDir})`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
logger.info(`dry-run: ${oldName} → ${newName} (in ${runsDir})`);
|
|
120
|
+
}
|
|
121
|
+
outcome.migrated++;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Tiny argv parser matching the rest of the scripts in this dir. Exposed
|
|
125
|
+
* for unit tests; defaults to dry-run (apply=false).
|
|
126
|
+
*/
|
|
127
|
+
function parseArgs(argv) {
|
|
128
|
+
const args = argv.slice(2);
|
|
129
|
+
let apply = false;
|
|
130
|
+
let siteFilter = null;
|
|
131
|
+
for (let i = 0; i < args.length; i++) {
|
|
132
|
+
const arg = args[i];
|
|
133
|
+
if (arg === "--apply") {
|
|
134
|
+
apply = true;
|
|
135
|
+
}
|
|
136
|
+
else if (arg === "--site" && args[i + 1]) {
|
|
137
|
+
siteFilter = args[++i] ?? null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return { apply, siteFilter };
|
|
141
|
+
}
|
|
142
|
+
async function main() {
|
|
143
|
+
const { apply, siteFilter } = parseArgs(process.argv);
|
|
144
|
+
const sitesRoot = (0, node_path_1.join)(process.cwd(), "src", "sites");
|
|
145
|
+
logger.info(`migrate-telemetry-dir-names: sitesRoot=${sitesRoot} siteFilter=${siteFilter ?? "(all)"} apply=${apply}`);
|
|
146
|
+
const outcome = migrateTelemetryDirs({ sitesRoot, siteFilter, apply });
|
|
147
|
+
logger.info(`summary: ${outcome.migrated} ${apply ? "renamed" : "planned"}, ${outcome.alreadyMigrated} skipped (already migrated), ${outcome.warnings} warning(s)`);
|
|
148
|
+
if (!apply && outcome.migrated > 0) {
|
|
149
|
+
logger.info(`re-run with --apply to execute the renames`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
main().catch((err) => {
|
|
153
|
+
logger.error(`migrate-telemetry-dir-names failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=migrate-telemetry-dir-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-telemetry-dir-names.js","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression probe for `Locator.setInputFiles({ buffer })` semantics across
|
|
3
|
+
* browser providers (Browserbase, Steel). Originally written as a one-off to
|
|
4
|
+
* discover whether the buffer-payload-injection path actually works on a
|
|
5
|
+
* remote Steel session — it doesn't, because Stagehand v3's payload-injection
|
|
6
|
+
* code path is gated on `env === "BROWSERBASE"` and Steel runs as `env: "LOCAL"`,
|
|
7
|
+
* falling through to a path-based CDP call that Steel's sandbox rejects with
|
|
8
|
+
* `-32602 'DOM.setFileInputFiles' was blocked: file path is outside the
|
|
9
|
+
* permitted directory`.
|
|
10
|
+
*
|
|
11
|
+
* Kept committed (and worth re-running) when:
|
|
12
|
+
* - Upgrading Stagehand to confirm the buffer path still works on Browserbase.
|
|
13
|
+
* - Switching browser providers to verify upload semantics on the new one.
|
|
14
|
+
* - Debugging an upload regression in production scraping.
|
|
15
|
+
*
|
|
16
|
+
* Target: https://the-internet.herokuapp.com/upload — a public, well-known
|
|
17
|
+
* test page with a single `<input type="file" id="file-upload">` and a
|
|
18
|
+
* "File Uploaded!" success page that says the filename back.
|
|
19
|
+
*
|
|
20
|
+
* Pass criteria: setInputFiles attaches the buffer (input.files.length === 1)
|
|
21
|
+
* AND clicking submit produces a success page body containing the filename.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* pnpm tsx --env-file=.env src/scripts/probe-setinputfiles.ts
|
|
25
|
+
* SCRAPER_PROVIDER=steel pnpm tsx --env-file=.env src/scripts/probe-setinputfiles.ts
|
|
26
|
+
*/
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=probe-setinputfiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-setinputfiles.d.ts","sourceRoot":"","sources":["../../src/scripts/probe-setinputfiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Regression probe for `Locator.setInputFiles({ buffer })` semantics across
|
|
4
|
+
* browser providers (Browserbase, Steel). Originally written as a one-off to
|
|
5
|
+
* discover whether the buffer-payload-injection path actually works on a
|
|
6
|
+
* remote Steel session — it doesn't, because Stagehand v3's payload-injection
|
|
7
|
+
* code path is gated on `env === "BROWSERBASE"` and Steel runs as `env: "LOCAL"`,
|
|
8
|
+
* falling through to a path-based CDP call that Steel's sandbox rejects with
|
|
9
|
+
* `-32602 'DOM.setFileInputFiles' was blocked: file path is outside the
|
|
10
|
+
* permitted directory`.
|
|
11
|
+
*
|
|
12
|
+
* Kept committed (and worth re-running) when:
|
|
13
|
+
* - Upgrading Stagehand to confirm the buffer path still works on Browserbase.
|
|
14
|
+
* - Switching browser providers to verify upload semantics on the new one.
|
|
15
|
+
* - Debugging an upload regression in production scraping.
|
|
16
|
+
*
|
|
17
|
+
* Target: https://the-internet.herokuapp.com/upload — a public, well-known
|
|
18
|
+
* test page with a single `<input type="file" id="file-upload">` and a
|
|
19
|
+
* "File Uploaded!" success page that says the filename back.
|
|
20
|
+
*
|
|
21
|
+
* Pass criteria: setInputFiles attaches the buffer (input.files.length === 1)
|
|
22
|
+
* AND clicking submit produces a success page body containing the filename.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* pnpm tsx --env-file=.env src/scripts/probe-setinputfiles.ts
|
|
26
|
+
* SCRAPER_PROVIDER=steel pnpm tsx --env-file=.env src/scripts/probe-setinputfiles.ts
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const logging_1 = require("../lib/logging");
|
|
30
|
+
const session_1 = require("../scraper/session");
|
|
31
|
+
const logger = (0, logging_1.getScriptLogger)("probe-setinputfiles");
|
|
32
|
+
const TARGET_URL = "https://the-internet.herokuapp.com/upload";
|
|
33
|
+
const FILE_INPUT_SELECTOR = "css=#file-upload";
|
|
34
|
+
const SUBMIT_SELECTOR = "css=#file-submit";
|
|
35
|
+
async function main() {
|
|
36
|
+
logger.info(`probe-setinputfiles: target=${TARGET_URL}`);
|
|
37
|
+
// Make a tiny PDF-shaped buffer. Doesn't have to be a real PDF — the test
|
|
38
|
+
// page just echoes the name. A minimal valid PDF would be ~200 bytes;
|
|
39
|
+
// the test page accepts anything.
|
|
40
|
+
const fileBuffer = Buffer.from("%PDF-1.4\n%probe\n1 0 obj<<>>endobj\ntrailer<<>>\n%%EOF\n", "utf8");
|
|
41
|
+
const fileName = "probe-resume.pdf";
|
|
42
|
+
const session = await (0, session_1.createBrowserSession)();
|
|
43
|
+
logger.info(`probe using provider=${session.provider} sessionId=${session.sessionId}`);
|
|
44
|
+
try {
|
|
45
|
+
const stagehand = session.stagehand;
|
|
46
|
+
const page = await stagehand.context.awaitActivePage();
|
|
47
|
+
logger.info(`navigating to ${TARGET_URL}`);
|
|
48
|
+
await page.goto(TARGET_URL, { waitUntil: "domcontentloaded", timeoutMs: 60_000 });
|
|
49
|
+
const preUrl = page.url();
|
|
50
|
+
const preTitle = await page.title().catch(() => "");
|
|
51
|
+
logger.info(`pre-upload state: url=${preUrl} title=${JSON.stringify(preTitle)}`);
|
|
52
|
+
const fileInput = page.locator(FILE_INPUT_SELECTOR).first();
|
|
53
|
+
const inputCount = await page
|
|
54
|
+
.locator(FILE_INPUT_SELECTOR)
|
|
55
|
+
.count()
|
|
56
|
+
.catch(() => -1);
|
|
57
|
+
logger.info(`file input locator count=${inputCount}`);
|
|
58
|
+
if (inputCount === 0) {
|
|
59
|
+
throw new Error(`file input ${FILE_INPUT_SELECTOR} not found on ${TARGET_URL}`);
|
|
60
|
+
}
|
|
61
|
+
logger.info(`calling setInputFiles with buffer payload (name=${fileName}, size=${fileBuffer.length}b)`);
|
|
62
|
+
await fileInput.setInputFiles({
|
|
63
|
+
name: fileName,
|
|
64
|
+
mimeType: "application/pdf",
|
|
65
|
+
buffer: fileBuffer,
|
|
66
|
+
});
|
|
67
|
+
logger.info("setInputFiles resolved without throwing");
|
|
68
|
+
// Read the input's files[].length from the page itself to prove the file
|
|
69
|
+
// was actually attached, not just that the API returned cleanly.
|
|
70
|
+
const filesLength = await page.evaluate(`(() => { const el = document.querySelector('#file-upload'); return el && el.files ? el.files.length : -1; })()`);
|
|
71
|
+
logger.info(`post-setInputFiles: input.files.length=${JSON.stringify(filesLength)}`);
|
|
72
|
+
if (filesLength !== 1) {
|
|
73
|
+
throw new Error(`file did not attach: input.files.length=${JSON.stringify(filesLength)}`);
|
|
74
|
+
}
|
|
75
|
+
logger.info("clicking submit");
|
|
76
|
+
await page.locator(SUBMIT_SELECTOR).first().click();
|
|
77
|
+
await page.waitForTimeout(2_000);
|
|
78
|
+
const postUrl = page.url();
|
|
79
|
+
const postTitle = await page.title().catch(() => "");
|
|
80
|
+
const bodyText = await page.evaluate(`(() => document.body ? document.body.innerText : '')()`);
|
|
81
|
+
const bodyExcerpt = typeof bodyText === "string" ? bodyText.slice(0, 500) : "(non-string)";
|
|
82
|
+
logger.info(`post-submit state: url=${postUrl} title=${JSON.stringify(postTitle)}`);
|
|
83
|
+
logger.info(`body excerpt: ${JSON.stringify(bodyExcerpt)}`);
|
|
84
|
+
const success = typeof bodyText === "string" && bodyText.includes(fileName);
|
|
85
|
+
logger.info(`PROBE VERDICT: ${success ? "PASS" : "FAIL"} (filename in body=${success})`);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await session.close();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
main().catch((err) => {
|
|
92
|
+
logger.error(`probe-setinputfiles failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=probe-setinputfiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-setinputfiles.js","sourceRoot":"","sources":["../../src/scripts/probe-setinputfiles.ts"],"names":[],"mappings":"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"}
|