@apifuse/provider-sdk 2.2.0-beta.7 → 2.2.0-beta.70
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/AUTHORING.md +943 -51
- package/CHANGELOG.md +273 -1
- package/LICENSE +21 -0
- package/README.md +117 -29
- package/SUBMISSION.md +3 -2
- package/bin/apifuse-check.ts +293 -13
- package/bin/apifuse-dev.ts +42 -19
- package/bin/apifuse-migrate-deployment.ts +200 -0
- package/bin/apifuse-migrate-operation-declaration.ts +55 -0
- package/bin/apifuse-migrate-shape.ts +202 -0
- package/bin/apifuse-pack-check.ts +19 -6
- package/bin/apifuse-pack-smoke.ts +57 -2
- package/bin/apifuse-pack-types.ts +736 -38
- package/bin/apifuse-perf.ts +59 -23
- package/bin/apifuse-record.ts +923 -94
- package/bin/apifuse-submit-check.ts +2313 -281
- package/bin/apifuse-test.ts +3 -1
- package/bin/submit-check-delimited-text.ts +50 -0
- package/dist/auth-turn/index.d.ts +3 -3
- package/dist/auth-turn/index.js +1 -1
- package/dist/auth.d.ts +14 -0
- package/dist/auth.js +67 -0
- package/dist/ceremonies/index.d.ts +16 -0
- package/dist/ceremonies/index.js +141 -36
- package/dist/cli/commands.d.ts +1 -1
- package/dist/cli/commands.js +30 -0
- package/dist/cli/create.d.ts +1 -1
- package/dist/cli/create.js +8 -2
- package/dist/cli/deployment-intent.d.ts +178 -0
- package/dist/cli/deployment-intent.js +277 -0
- package/dist/cli/local-connection.d.ts +111 -0
- package/dist/cli/local-connection.js +151 -0
- package/dist/cli/migrate-deployment-intent.d.ts +132 -0
- package/dist/cli/migrate-deployment-intent.js +1552 -0
- package/dist/cli/migrate-operation-declaration.d.ts +70 -0
- package/dist/cli/migrate-operation-declaration.js +2206 -0
- package/dist/cli/migrate-operation-shape.d.ts +44 -0
- package/dist/cli/migrate-operation-shape.js +113 -0
- package/dist/cli/migrate-provider-shape.d.ts +56 -0
- package/dist/cli/migrate-provider-shape.js +580 -0
- package/dist/cli/resolver-runtime.d.ts +21 -0
- package/dist/cli/resolver-runtime.js +31 -0
- package/dist/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
- package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
- package/dist/cli/templates/provider/README.md.tpl +41 -19
- package/dist/cli/templates/provider/index.ts.tpl +6 -3
- package/dist/cli/templates/provider/operations/ping.ts.tpl +4 -1
- package/dist/cli/templates/provider/provider.json.tpl +6 -0
- package/dist/config/loader.d.ts +202 -16
- package/dist/config/loader.js +491 -141
- package/dist/contract-serialization.js +4 -8
- package/dist/contract-types.d.ts +12 -5
- package/dist/contract.js +24 -10
- package/dist/declaration-validation.d.ts +34 -0
- package/dist/declaration-validation.js +305 -0
- package/dist/define.d.ts +71 -29
- package/dist/define.js +807 -69
- package/dist/dev.d.ts +5 -0
- package/dist/dev.js +8 -1
- package/dist/engine.d.ts +129 -0
- package/dist/engine.js +209 -0
- package/dist/error-observability.d.ts +7 -0
- package/dist/error-observability.js +61 -0
- package/dist/error-resolution.d.ts +18 -0
- package/dist/error-resolution.js +243 -0
- package/dist/errors.d.ts +74 -0
- package/dist/errors.js +99 -0
- package/dist/fixture-sanitization.d.ts +28 -0
- package/dist/fixture-sanitization.js +371 -0
- package/dist/handle-meta.d.ts +90 -0
- package/dist/handle-meta.js +73 -0
- package/dist/handle.d.ts +226 -0
- package/dist/handle.js +345 -0
- package/dist/health-scenario.d.ts +1901 -0
- package/dist/health-scenario.js +653 -0
- package/dist/i18n/catalog.js +21 -1
- package/dist/i18n/error-messages.d.ts +86 -0
- package/dist/i18n/error-messages.js +192 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/keys.d.ts +12 -0
- package/dist/i18n/keys.js +76 -5
- package/dist/i18n/operation-locale-namespace.d.ts +2 -0
- package/dist/i18n/operation-locale-namespace.js +7 -0
- package/dist/index.d.ts +40 -15
- package/dist/index.js +29 -11
- package/dist/lint.d.ts +43 -11
- package/dist/lint.js +2512 -177
- package/dist/native-address.d.ts +43 -0
- package/dist/native-address.js +281 -0
- package/dist/native-egress-policy.d.ts +31 -0
- package/dist/native-egress-policy.js +288 -0
- package/dist/observability.d.ts +5 -2
- package/dist/observability.js +48 -1
- package/dist/provider.d.ts +18 -8
- package/dist/provider.js +11 -6
- package/dist/runtime/auth-flow.d.ts +6 -1
- package/dist/runtime/auth-flow.js +8 -0
- package/dist/runtime/bounded-expiring-map.d.ts +21 -0
- package/dist/runtime/bounded-expiring-map.js +64 -0
- package/dist/runtime/browser-telemetry-binding.d.ts +5 -0
- package/dist/runtime/browser-telemetry-binding.js +83 -0
- package/dist/runtime/browser-telemetry.d.ts +76 -0
- package/dist/runtime/browser-telemetry.js +165 -0
- package/dist/runtime/browser.d.ts +4 -0
- package/dist/runtime/browser.js +688 -83
- package/dist/runtime/cache-telemetry.d.ts +71 -0
- package/dist/runtime/cache-telemetry.js +177 -0
- package/dist/runtime/cache.d.ts +3 -0
- package/dist/runtime/cache.js +245 -23
- package/dist/runtime/capability-response.d.ts +3 -0
- package/dist/runtime/capability-response.js +56 -0
- package/dist/runtime/capability-telemetry.d.ts +46 -0
- package/dist/runtime/capability-telemetry.js +68 -0
- package/dist/runtime/chrome149-header-order.d.ts +58 -0
- package/dist/runtime/chrome149-header-order.js +289 -0
- package/dist/runtime/diagnostic-env-values.d.ts +5 -0
- package/dist/runtime/diagnostic-env-values.js +57 -0
- package/dist/runtime/diagnostic-env.d.ts +14 -0
- package/dist/runtime/diagnostic-env.js +44 -0
- package/dist/runtime/diagnostic-redactor.d.ts +54 -0
- package/dist/runtime/diagnostic-redactor.js +571 -0
- package/dist/runtime/egress-lease.d.ts +65 -0
- package/dist/runtime/egress-lease.js +236 -0
- package/dist/runtime/engine-mode.d.ts +74 -0
- package/dist/runtime/engine-mode.js +152 -0
- package/dist/runtime/env.js +14 -1
- package/dist/runtime/executor.d.ts +3 -2
- package/dist/runtime/executor.js +23 -26
- package/dist/runtime/handle-wordlist.d.ts +43 -0
- package/dist/runtime/handle-wordlist.js +256 -0
- package/dist/runtime/handle.d.ts +71 -0
- package/dist/runtime/handle.js +908 -0
- package/dist/runtime/http-telemetry-binding.d.ts +10 -0
- package/dist/runtime/http-telemetry-binding.js +152 -0
- package/dist/runtime/http-telemetry-guard.d.ts +16 -0
- package/dist/runtime/http-telemetry-guard.js +202 -0
- package/dist/runtime/http-telemetry.d.ts +104 -0
- package/dist/runtime/http-telemetry.js +190 -0
- package/dist/runtime/http.d.ts +34 -0
- package/dist/runtime/http.js +680 -121
- package/dist/runtime/insights.js +2 -2
- package/dist/runtime/instrumentation.d.ts +2 -2
- package/dist/runtime/instrumentation.js +462 -19
- package/dist/runtime/native-network-errors.d.ts +33 -0
- package/dist/runtime/native-network-errors.js +69 -0
- package/dist/runtime/native-network.d.ts +105 -0
- package/dist/runtime/native-network.js +1433 -0
- package/dist/runtime/native-telemetry.d.ts +142 -0
- package/dist/runtime/native-telemetry.js +231 -0
- package/dist/runtime/ocr-telemetry.d.ts +82 -0
- package/dist/runtime/ocr-telemetry.js +192 -0
- package/dist/runtime/ocr.d.ts +29 -0
- package/dist/runtime/ocr.js +468 -0
- package/dist/runtime/otlp.d.ts +71 -2
- package/dist/runtime/otlp.js +398 -16
- package/dist/runtime/provider.d.ts +7 -0
- package/dist/runtime/provider.js +14 -0
- package/dist/runtime/proxy-errors.js +6 -2
- package/dist/runtime/proxy-nodemaven.d.ts +56 -0
- package/dist/runtime/proxy-nodemaven.js +147 -0
- package/dist/runtime/proxy-retry-policy.d.ts +4 -1
- package/dist/runtime/proxy-retry-policy.js +11 -2
- package/dist/runtime/proxy-telemetry.d.ts +133 -3
- package/dist/runtime/proxy-telemetry.js +218 -70
- package/dist/runtime/redirect-hop-headers.d.ts +19 -0
- package/dist/runtime/redirect-hop-headers.js +58 -0
- package/dist/runtime/redirects.d.ts +61 -0
- package/dist/runtime/redirects.js +149 -0
- package/dist/runtime/redis.d.ts +1 -1
- package/dist/runtime/redis.js +4 -2
- package/dist/runtime/request-options.d.ts +75 -1
- package/dist/runtime/request-options.js +588 -0
- package/dist/runtime/request-telemetry.d.ts +70 -0
- package/dist/runtime/request-telemetry.js +229 -0
- package/dist/runtime/resolver-config.d.ts +13 -0
- package/dist/runtime/resolver-config.js +14 -0
- package/dist/runtime/resolver-public.d.ts +3 -0
- package/dist/runtime/resolver-public.js +1 -0
- package/dist/runtime/resolver-runtime-options.d.ts +14 -0
- package/dist/runtime/resolver-runtime-options.js +33 -0
- package/dist/runtime/resolver-shared.d.ts +24 -0
- package/dist/runtime/resolver-shared.js +69 -0
- package/dist/runtime/resolver-span-attributes.d.ts +34 -0
- package/dist/runtime/resolver-span-attributes.js +93 -0
- package/dist/runtime/resolver-telemetry.d.ts +135 -0
- package/dist/runtime/resolver-telemetry.js +204 -0
- package/dist/runtime/resolver-usage.d.ts +32 -0
- package/dist/runtime/resolver-usage.js +54 -0
- package/dist/runtime/resolver-vendors/bindings.d.ts +53 -0
- package/dist/runtime/resolver-vendors/bindings.js +45 -0
- package/dist/runtime/resolver-vendors/browser.d.ts +24 -0
- package/dist/runtime/resolver-vendors/browser.js +423 -0
- package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
- package/dist/runtime/resolver-vendors/capsolver.js +544 -0
- package/dist/runtime/resolver-vendors/hosts.d.ts +23 -0
- package/dist/runtime/resolver-vendors/hosts.js +68 -0
- package/dist/runtime/resolver-vendors/hypersolutions.d.ts +27 -0
- package/dist/runtime/resolver-vendors/hypersolutions.js +369 -0
- package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
- package/dist/runtime/resolver-vendors/twocaptcha.js +425 -0
- package/dist/runtime/resolver-vendors/types.d.ts +125 -0
- package/dist/runtime/resolver-vendors/types.js +106 -0
- package/dist/runtime/resolver.d.ts +79 -0
- package/dist/runtime/resolver.js +1094 -0
- package/dist/runtime/state-telemetry.d.ts +79 -0
- package/dist/runtime/state-telemetry.js +194 -0
- package/dist/runtime/state.d.ts +10 -1
- package/dist/runtime/state.js +322 -82
- package/dist/runtime/stealth-akamai-sbsd.d.ts +54 -0
- package/dist/runtime/stealth-akamai-sbsd.js +142 -0
- package/dist/runtime/stealth-cookies.d.ts +24 -0
- package/dist/runtime/stealth-cookies.js +131 -0
- package/dist/runtime/stealth-owned-headers.d.ts +39 -0
- package/dist/runtime/stealth-owned-headers.js +57 -0
- package/dist/runtime/stealth-telemetry.d.ts +92 -0
- package/dist/runtime/stealth-telemetry.js +179 -0
- package/dist/runtime/stealth.d.ts +45 -6
- package/dist/runtime/stealth.js +1775 -320
- package/dist/runtime/stt-telemetry.d.ts +77 -0
- package/dist/runtime/stt-telemetry.js +176 -0
- package/dist/runtime/stt.js +18 -19
- package/dist/runtime/timeout.d.ts +5 -0
- package/dist/runtime/timeout.js +12 -0
- package/dist/runtime/trace-config.d.ts +12 -0
- package/dist/runtime/trace-config.js +62 -0
- package/dist/runtime/trace.d.ts +17 -0
- package/dist/runtime/trace.js +176 -25
- package/dist/runtime-boundary-lint.d.ts +137 -0
- package/dist/runtime-boundary-lint.js +590 -0
- package/dist/schema.d.ts +20 -0
- package/dist/schema.js +72 -2
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +1 -1
- package/dist/server/error-observability.d.ts +1 -0
- package/dist/server/error-observability.js +1 -0
- package/dist/server/error-stack-frames.d.ts +35 -0
- package/dist/server/error-stack-frames.js +219 -0
- package/dist/server/index.d.ts +21 -2
- package/dist/server/index.js +11 -2
- package/dist/server/runtime-diagnostics.d.ts +165 -0
- package/dist/server/runtime-diagnostics.js +360 -0
- package/dist/server/sdk-version.d.ts +3 -0
- package/dist/server/sdk-version.js +19 -0
- package/dist/server/self-test-input-tokens.d.ts +2 -1
- package/dist/server/self-test-input-tokens.js +18 -14
- package/dist/server/self-test-redaction.js +8 -33
- package/dist/server/self-test.d.ts +18 -3
- package/dist/server/self-test.js +139 -76
- package/dist/server/sensitive-values.d.ts +26 -0
- package/dist/server/sensitive-values.js +137 -0
- package/dist/server/serve-implementation.d.ts +285 -0
- package/dist/server/serve-implementation.js +3172 -0
- package/dist/server/serve.d.ts +1 -75
- package/dist/server/serve.js +1 -1170
- package/dist/server/state-backend-report.d.ts +70 -0
- package/dist/server/state-backend-report.js +113 -0
- package/dist/server/trace-output.d.ts +7 -0
- package/dist/server/trace-output.js +111 -0
- package/dist/server/types.d.ts +37 -5
- package/dist/server/types.js +34 -1
- package/dist/stateful/errors.d.ts +19 -0
- package/dist/stateful/errors.js +24 -0
- package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
- package/dist/stateful/http-provider-event-emitter.js +237 -0
- package/dist/stateful/http-session-owner-registry.d.ts +44 -0
- package/dist/stateful/http-session-owner-registry.js +210 -0
- package/dist/stateful/index.d.ts +18 -0
- package/dist/stateful/index.js +18 -0
- package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
- package/dist/stateful/provider-event-delivery-failures.js +43 -0
- package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
- package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
- package/dist/stateful/provider-event-pipeline.d.ts +50 -0
- package/dist/stateful/provider-event-pipeline.js +1 -0
- package/dist/stateful/provider-events.d.ts +101 -0
- package/dist/stateful/provider-events.js +289 -0
- package/dist/stateful/session-key.d.ts +15 -0
- package/dist/stateful/session-key.js +86 -0
- package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
- package/dist/stateful/stateful-provider-adapter-context.js +42 -0
- package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
- package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
- package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
- package/dist/stateful/stateful-provider-adapter.js +287 -0
- package/dist/stateful/stateful-provider-observability.d.ts +62 -0
- package/dist/stateful/stateful-provider-observability.js +161 -0
- package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
- package/dist/stateful/stateful-provider-owner-forwarder.js +237 -0
- package/dist/stateful/stateful-provider-runtime-context.d.ts +35 -0
- package/dist/stateful/stateful-provider-runtime-context.js +61 -0
- package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
- package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
- package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
- package/dist/stateful/stateful-provider-session-routing.js +345 -0
- package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
- package/dist/stateful/stateful-provider-session-runtime.js +245 -0
- package/dist/stateful-signing.d.ts +18 -0
- package/dist/stateful-signing.js +27 -0
- package/dist/stealth/profiles.d.ts +15 -4
- package/dist/stealth/profiles.js +169 -211
- package/dist/stream-evidence.d.ts +74 -0
- package/dist/stream-evidence.js +785 -0
- package/dist/stream.js +7 -1
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/run.d.ts +32 -2
- package/dist/testing/run.js +509 -25
- package/dist/trace-sanitization.d.ts +6 -0
- package/dist/trace-sanitization.js +68 -0
- package/dist/types.d.ts +899 -210
- package/dist/types.js +1 -0
- package/dist/typescript-module.d.ts +39 -0
- package/dist/typescript-module.js +72 -0
- package/package.json +52 -6
- package/src/auth-turn/index.ts +1 -1
- package/src/auth.ts +118 -0
- package/src/ceremonies/index.ts +189 -46
- package/src/cli/commands.ts +37 -0
- package/src/cli/create.ts +8 -2
- package/src/cli/deployment-intent.ts +364 -0
- package/src/cli/local-connection.ts +221 -0
- package/src/cli/migrate-deployment-intent.ts +1908 -0
- package/src/cli/migrate-operation-declaration.ts +3026 -0
- package/src/cli/migrate-operation-shape.ts +184 -0
- package/src/cli/migrate-provider-shape.ts +778 -0
- package/src/cli/resolver-runtime.ts +72 -0
- package/src/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
- package/src/cli/templates/provider/Dockerfile.tpl +1 -1
- package/src/cli/templates/provider/README.md.tpl +41 -19
- package/src/cli/templates/provider/index.ts.tpl +6 -3
- package/src/cli/templates/provider/operations/ping.ts.tpl +4 -1
- package/src/cli/templates/provider/provider.json.tpl +6 -0
- package/src/config/loader.ts +774 -181
- package/src/contract-serialization.ts +5 -7
- package/src/contract-types.ts +12 -5
- package/src/contract.ts +24 -10
- package/src/declaration-validation.ts +376 -0
- package/src/define.ts +1105 -131
- package/src/dev.ts +13 -1
- package/src/engine.ts +390 -0
- package/src/error-observability.ts +64 -0
- package/src/error-resolution.ts +269 -0
- package/src/errors.ts +157 -0
- package/src/fixture-sanitization.ts +422 -0
- package/src/handle-meta.ts +143 -0
- package/src/handle.ts +694 -0
- package/src/health-scenario.ts +960 -0
- package/src/i18n/catalog.ts +23 -1
- package/src/i18n/error-messages.ts +255 -0
- package/src/i18n/index.ts +1 -0
- package/src/i18n/keys.ts +80 -6
- package/src/i18n/operation-locale-namespace.ts +10 -0
- package/src/index.ts +390 -23
- package/src/lint.ts +2975 -234
- package/src/native-address.ts +340 -0
- package/src/native-egress-policy.ts +358 -0
- package/src/observability.ts +51 -1
- package/src/provider.ts +207 -27
- package/src/runtime/auth-flow.ts +15 -0
- package/src/runtime/bounded-expiring-map.ts +67 -0
- package/src/runtime/browser-telemetry-binding.ts +92 -0
- package/src/runtime/browser-telemetry.ts +289 -0
- package/src/runtime/browser.ts +882 -99
- package/src/runtime/cache-telemetry.ts +247 -0
- package/src/runtime/cache.ts +258 -22
- package/src/runtime/capability-response.ts +53 -0
- package/src/runtime/capability-telemetry.ts +101 -0
- package/src/runtime/chrome149-header-order.ts +330 -0
- package/src/runtime/diagnostic-env-values.ts +56 -0
- package/src/runtime/diagnostic-env.ts +65 -0
- package/src/runtime/diagnostic-redactor.ts +668 -0
- package/src/runtime/egress-lease.ts +341 -0
- package/src/runtime/engine-mode.ts +233 -0
- package/src/runtime/env.ts +15 -1
- package/src/runtime/executor.ts +39 -32
- package/src/runtime/handle-wordlist.ts +266 -0
- package/src/runtime/handle.ts +1180 -0
- package/src/runtime/http-telemetry-binding.ts +162 -0
- package/src/runtime/http-telemetry-guard.ts +208 -0
- package/src/runtime/http-telemetry.ts +292 -0
- package/src/runtime/http.ts +896 -150
- package/src/runtime/insights.ts +2 -2
- package/src/runtime/instrumentation.ts +628 -28
- package/src/runtime/native-network-errors.ts +99 -0
- package/src/runtime/native-network.ts +1853 -0
- package/src/runtime/native-telemetry.ts +366 -0
- package/src/runtime/ocr-telemetry.ts +308 -0
- package/src/runtime/ocr.ts +564 -0
- package/src/runtime/otlp.ts +468 -21
- package/src/runtime/provider.ts +15 -0
- package/src/runtime/proxy-errors.ts +12 -4
- package/src/runtime/proxy-nodemaven.ts +222 -0
- package/src/runtime/proxy-retry-policy.ts +12 -1
- package/src/runtime/proxy-telemetry.ts +358 -103
- package/src/runtime/redirect-hop-headers.ts +71 -0
- package/src/runtime/redirects.ts +215 -0
- package/src/runtime/redis.ts +7 -2
- package/src/runtime/request-options.ts +728 -1
- package/src/runtime/request-telemetry.ts +375 -0
- package/src/runtime/resolver-config.ts +18 -0
- package/src/runtime/resolver-public.ts +44 -0
- package/src/runtime/resolver-runtime-options.ts +50 -0
- package/src/runtime/resolver-shared.ts +113 -0
- package/src/runtime/resolver-span-attributes.ts +139 -0
- package/src/runtime/resolver-telemetry.ts +362 -0
- package/src/runtime/resolver-usage.ts +99 -0
- package/src/runtime/resolver-vendors/bindings.ts +61 -0
- package/src/runtime/resolver-vendors/browser.ts +591 -0
- package/src/runtime/resolver-vendors/capsolver.ts +727 -0
- package/src/runtime/resolver-vendors/hosts.ts +81 -0
- package/src/runtime/resolver-vendors/hypersolutions.ts +480 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +555 -0
- package/src/runtime/resolver-vendors/types.ts +261 -0
- package/src/runtime/resolver.ts +1543 -0
- package/src/runtime/state-telemetry.ts +298 -0
- package/src/runtime/state.ts +435 -89
- package/src/runtime/stealth-akamai-sbsd.ts +207 -0
- package/src/runtime/stealth-cookies.ts +155 -0
- package/src/runtime/stealth-owned-headers.ts +67 -0
- package/src/runtime/stealth-telemetry.ts +309 -0
- package/src/runtime/stealth.ts +2275 -372
- package/src/runtime/stt-telemetry.ts +282 -0
- package/src/runtime/stt.ts +96 -91
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace-config.ts +78 -0
- package/src/runtime/trace.ts +257 -35
- package/src/runtime-boundary-lint.ts +707 -0
- package/src/schema.ts +80 -2
- package/src/serve.ts +6 -1
- package/src/server/error-observability.ts +1 -0
- package/src/server/error-stack-frames.ts +214 -0
- package/src/server/index.ts +184 -2
- package/src/server/runtime-diagnostics.ts +522 -0
- package/src/server/sdk-version.ts +22 -0
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test-redaction.ts +10 -40
- package/src/server/self-test.ts +205 -89
- package/src/server/sensitive-values.ts +211 -0
- package/src/server/serve-implementation.ts +4596 -0
- package/src/server/serve.ts +1 -1685
- package/src/server/state-backend-report.ts +185 -0
- package/src/server/trace-output.ts +189 -0
- package/src/server/types.ts +34 -1
- package/src/stateful/README.md +146 -0
- package/src/stateful/errors.ts +35 -0
- package/src/stateful/http-provider-event-emitter.ts +314 -0
- package/src/stateful/http-session-owner-registry.ts +306 -0
- package/src/stateful/index.ts +18 -0
- package/src/stateful/provider-event-delivery-failures.ts +80 -0
- package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
- package/src/stateful/provider-event-pipeline.ts +61 -0
- package/src/stateful/provider-events.ts +462 -0
- package/src/stateful/session-key.ts +111 -0
- package/src/stateful/stateful-provider-adapter-context.ts +59 -0
- package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
- package/src/stateful/stateful-provider-adapter.ts +562 -0
- package/src/stateful/stateful-provider-observability.ts +261 -0
- package/src/stateful/stateful-provider-owner-forwarder.ts +310 -0
- package/src/stateful/stateful-provider-runtime-context.ts +96 -0
- package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
- package/src/stateful/stateful-provider-session-routing.ts +546 -0
- package/src/stateful/stateful-provider-session-runtime.ts +403 -0
- package/src/stateful-signing.ts +46 -0
- package/src/stealth/profiles.ts +212 -231
- package/src/stream-evidence.ts +988 -0
- package/src/stream.ts +8 -1
- package/src/testing/index.ts +10 -1
- package/src/testing/run.ts +685 -19
- package/src/trace-sanitization.ts +110 -0
- package/src/types.ts +1014 -273
- package/src/typescript-module.ts +100 -0
- package/dist/choice-token.d.ts +0 -24
- package/dist/choice-token.js +0 -74
- package/dist/runtime/choice.d.ts +0 -15
- package/dist/runtime/choice.js +0 -413
- package/src/choice-token.ts +0 -165
- package/src/runtime/choice.ts +0 -686
package/dist/types.js
CHANGED
|
@@ -32,6 +32,7 @@ export const HEALTH_CHECK_TIMEOUT_MS_MIN = 1;
|
|
|
32
32
|
export const HEALTH_CHECK_TIMEOUT_MS_MAX = 60_000;
|
|
33
33
|
export const HEALTH_CHECK_DEGRADED_THRESHOLD_MS_MIN = 1;
|
|
34
34
|
export const HEALTH_CHECK_DEGRADED_THRESHOLD_MS_MAX = 60_000;
|
|
35
|
+
export const VALID_OPERATION_ERROR_STATUSES = [400, 401, 404, 409, 410, 422, 429, 500, 502, 503, 504];
|
|
35
36
|
export const HttpRetryPreset = {
|
|
36
37
|
Off: "off",
|
|
37
38
|
TransportTransient: "transport_transient",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** The TypeScript compiler API surface the source-level lint rules parse with. */
|
|
2
|
+
export type TypeScriptModule = typeof import("typescript");
|
|
3
|
+
/**
|
|
4
|
+
* What a caller hands over as a compiler module. Typed structurally so the
|
|
5
|
+
* option does not depend on which `typescript` package the caller's own type
|
|
6
|
+
* resolution lands on: under a `typescript@7` pin `typeof import("typescript")`
|
|
7
|
+
* is the native shell's version module, not the compiler API. The members are
|
|
8
|
+
* optional for the same reason — the shell has none of them — and
|
|
9
|
+
* `isTypeScriptCompilerModule` decides at runtime whether the module can parse.
|
|
10
|
+
*/
|
|
11
|
+
export type TypeScriptCompilerModuleLike = {
|
|
12
|
+
readonly createSourceFile?: (...parameters: never[]) => unknown;
|
|
13
|
+
readonly ScriptTarget?: object;
|
|
14
|
+
readonly version?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Package specifiers that may carry the compiler API, in resolution order.
|
|
18
|
+
*
|
|
19
|
+
* `typescript@7` (the Go-native toolchain) resolves but its JavaScript entry
|
|
20
|
+
* exports only `version`/`getExePath` — no `createSourceFile`, so the lint
|
|
21
|
+
* rules cannot parse with it. The compiler API of that generation is published
|
|
22
|
+
* as `@typescript/typescript6`, which is what a `typescript@7` dependency tree
|
|
23
|
+
* (for example the APIFuse monorepo root) installs alongside the shell.
|
|
24
|
+
*/
|
|
25
|
+
export declare const TYPESCRIPT_COMPILER_MODULE_SPECIFIERS: readonly ["typescript", "@typescript/typescript6"];
|
|
26
|
+
/**
|
|
27
|
+
* True when `candidate` is a loaded module that exposes the parser the lint
|
|
28
|
+
* rules need. Internal (narrows to the `typescript` module type, which is not
|
|
29
|
+
* part of the package surface); `lintRuntimeBoundarySources` applies it to the
|
|
30
|
+
* caller-supplied option.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isTypeScriptCompilerModule(candidate: unknown): candidate is TypeScriptModule;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the compiler API through `load`, trying each specifier in order and
|
|
35
|
+
* accepting the first module that exposes `createSourceFile`. Exposed for the
|
|
36
|
+
* tests; production code uses `getTypeScript()`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadTypeScriptModule(load: (specifier: string) => unknown, specifiers?: readonly string[]): TypeScriptModule;
|
|
39
|
+
export declare function getTypeScript(): TypeScriptModule;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
const requireModule = createRequire(import.meta.url);
|
|
3
|
+
/**
|
|
4
|
+
* Package specifiers that may carry the compiler API, in resolution order.
|
|
5
|
+
*
|
|
6
|
+
* `typescript@7` (the Go-native toolchain) resolves but its JavaScript entry
|
|
7
|
+
* exports only `version`/`getExePath` — no `createSourceFile`, so the lint
|
|
8
|
+
* rules cannot parse with it. The compiler API of that generation is published
|
|
9
|
+
* as `@typescript/typescript6`, which is what a `typescript@7` dependency tree
|
|
10
|
+
* (for example the APIFuse monorepo root) installs alongside the shell.
|
|
11
|
+
*/
|
|
12
|
+
export const TYPESCRIPT_COMPILER_MODULE_SPECIFIERS = [
|
|
13
|
+
"typescript",
|
|
14
|
+
"@typescript/typescript6",
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* True when `candidate` is a loaded module that exposes the parser the lint
|
|
18
|
+
* rules need. Internal (narrows to the `typescript` module type, which is not
|
|
19
|
+
* part of the package surface); `lintRuntimeBoundarySources` applies it to the
|
|
20
|
+
* caller-supplied option.
|
|
21
|
+
*/
|
|
22
|
+
export function isTypeScriptCompilerModule(candidate) {
|
|
23
|
+
return (typeof candidate === "object" &&
|
|
24
|
+
candidate !== null &&
|
|
25
|
+
typeof candidate.createSourceFile === "function" &&
|
|
26
|
+
typeof candidate.ScriptTarget === "object");
|
|
27
|
+
}
|
|
28
|
+
function describeCandidate(candidate) {
|
|
29
|
+
if (typeof candidate === "object" && candidate !== null) {
|
|
30
|
+
const version = candidate.version;
|
|
31
|
+
if (typeof version === "string")
|
|
32
|
+
return `resolved ${version} without a compiler API`;
|
|
33
|
+
}
|
|
34
|
+
return "resolved without a compiler API";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the compiler API through `load`, trying each specifier in order and
|
|
38
|
+
* accepting the first module that exposes `createSourceFile`. Exposed for the
|
|
39
|
+
* tests; production code uses `getTypeScript()`.
|
|
40
|
+
*/
|
|
41
|
+
export function loadTypeScriptModule(load, specifiers = TYPESCRIPT_COMPILER_MODULE_SPECIFIERS) {
|
|
42
|
+
const attempts = [];
|
|
43
|
+
for (const specifier of specifiers) {
|
|
44
|
+
let candidate;
|
|
45
|
+
try {
|
|
46
|
+
candidate = load(specifier);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
attempts.push(`${specifier}: not resolvable`);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (isTypeScriptCompilerModule(candidate))
|
|
53
|
+
return candidate;
|
|
54
|
+
attempts.push(`${specifier}: ${describeCandidate(candidate)}`);
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`The provider source lint needs the TypeScript compiler API (createSourceFile) and none of the resolvable packages provide it — ${attempts.join("; ")}. Install typescript 6.x as a devDependency, or @typescript/typescript6 next to a typescript 7 toolchain, in the dependency tree that installs @apifuse/provider-sdk.`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Lazily loaded TypeScript compiler API shared by the source-level lint rules.
|
|
60
|
+
*
|
|
61
|
+
* `typeof import(...)` keeps the type without emitting a static import: the
|
|
62
|
+
* typescript package is a devDependency of the SDK and only the CLI and the
|
|
63
|
+
* lint rules need it at runtime, which the typescript-import-boundary test
|
|
64
|
+
* enforces for production sources. Resolution starts at the installed SDK, so
|
|
65
|
+
* the caller's dependency tree must provide one of
|
|
66
|
+
* `TYPESCRIPT_COMPILER_MODULE_SPECIFIERS`.
|
|
67
|
+
*/
|
|
68
|
+
let typeScriptModule;
|
|
69
|
+
export function getTypeScript() {
|
|
70
|
+
typeScriptModule ??= loadTypeScriptModule(requireModule);
|
|
71
|
+
return typeScriptModule;
|
|
72
|
+
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.2.0-beta.
|
|
2
|
+
"version": "2.2.0-beta.70",
|
|
3
3
|
"name": "@apifuse/provider-sdk",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
@@ -15,9 +15,14 @@
|
|
|
15
15
|
"src",
|
|
16
16
|
"!src/__tests__",
|
|
17
17
|
"!src/__tests__/**",
|
|
18
|
+
"!src/**/__tests__",
|
|
19
|
+
"!src/**/__tests__/**",
|
|
18
20
|
"!src/**/*.test.ts",
|
|
21
|
+
"!src/**/*.spec.ts",
|
|
19
22
|
"!src/index.test.ts",
|
|
20
23
|
"bin",
|
|
24
|
+
"!bin/__tests__",
|
|
25
|
+
"!bin/__tests__/**",
|
|
21
26
|
"README.md",
|
|
22
27
|
"AUTHORING.md",
|
|
23
28
|
"CHANGELOG.md",
|
|
@@ -61,6 +66,36 @@
|
|
|
61
66
|
"import": "./dist/server/index.js",
|
|
62
67
|
"default": "./dist/server/index.js"
|
|
63
68
|
},
|
|
69
|
+
"./runtime/browser": {
|
|
70
|
+
"types": "./dist/runtime/browser.d.ts",
|
|
71
|
+
"import": "./dist/runtime/browser.js",
|
|
72
|
+
"default": "./dist/runtime/browser.js"
|
|
73
|
+
},
|
|
74
|
+
"./runtime/native-network": {
|
|
75
|
+
"types": "./dist/runtime/native-network.d.ts",
|
|
76
|
+
"import": "./dist/runtime/native-network.js",
|
|
77
|
+
"default": "./dist/runtime/native-network.js"
|
|
78
|
+
},
|
|
79
|
+
"./runtime/prevalidate": {
|
|
80
|
+
"types": "./dist/runtime/prevalidate.d.ts",
|
|
81
|
+
"import": "./dist/runtime/prevalidate.js",
|
|
82
|
+
"default": "./dist/runtime/prevalidate.js"
|
|
83
|
+
},
|
|
84
|
+
"./runtime/resolver": {
|
|
85
|
+
"types": "./dist/runtime/resolver-public.d.ts",
|
|
86
|
+
"import": "./dist/runtime/resolver-public.js",
|
|
87
|
+
"default": "./dist/runtime/resolver-public.js"
|
|
88
|
+
},
|
|
89
|
+
"./runtime/stealth": {
|
|
90
|
+
"types": "./dist/runtime/stealth.d.ts",
|
|
91
|
+
"import": "./dist/runtime/stealth.js",
|
|
92
|
+
"default": "./dist/runtime/stealth.js"
|
|
93
|
+
},
|
|
94
|
+
"./stateful": {
|
|
95
|
+
"types": "./dist/stateful/index.d.ts",
|
|
96
|
+
"import": "./dist/stateful/index.js",
|
|
97
|
+
"default": "./dist/stateful/index.js"
|
|
98
|
+
},
|
|
64
99
|
"./testing": {
|
|
65
100
|
"types": "./dist/testing/index.d.ts",
|
|
66
101
|
"import": "./dist/testing/index.js",
|
|
@@ -75,10 +110,17 @@
|
|
|
75
110
|
"scripts": {
|
|
76
111
|
"lint": "biome lint .",
|
|
77
112
|
"lint:fix": "biome lint --write",
|
|
113
|
+
"lint:deprecated": "bun run scripts/lint-deprecated-usage.ts",
|
|
114
|
+
"lint:test-typesafety": "bun scripts/check-test-typesafety.ts",
|
|
78
115
|
"format": "biome format --write",
|
|
79
116
|
"type-check": "tsc --noEmit",
|
|
80
117
|
"test": "bun test",
|
|
81
|
-
"
|
|
118
|
+
"bench:redaction": "bun scripts/benchmark-request-redaction.ts",
|
|
119
|
+
"check": "bun run lint && bun run type-check && bun run lint:deprecated && bun run lint:test-typesafety && bun run build",
|
|
120
|
+
"api:update": "bun run build && bun scripts/api-reports.ts update",
|
|
121
|
+
"api:check": "bun run build && bun scripts/api-reports.ts check",
|
|
122
|
+
"verify:chrome-headers": "bun scripts/verify-chrome-header-parity.ts",
|
|
123
|
+
"changeset:check": "bun scripts/check-changeset.ts",
|
|
82
124
|
"pack:check": "bun run build && bun bin/apifuse-pack-check.ts",
|
|
83
125
|
"pack:smoke": "bun run build && bun bin/apifuse-pack-smoke.ts",
|
|
84
126
|
"pack:types": "bun run build && bun bin/apifuse-pack-types.ts",
|
|
@@ -89,18 +131,19 @@
|
|
|
89
131
|
"devDependencies": {
|
|
90
132
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
91
133
|
"@biomejs/biome": "^2.5.0",
|
|
134
|
+
"@changesets/cli": "^3.0.1",
|
|
135
|
+
"@microsoft/api-extractor": "^7.58.13",
|
|
92
136
|
"@types/bun": "latest",
|
|
93
137
|
"@types/node": "^25.9.3",
|
|
94
|
-
"
|
|
138
|
+
"ajv": "^8.17",
|
|
139
|
+
"typescript": "6.0.3"
|
|
95
140
|
},
|
|
96
141
|
"dependencies": {
|
|
97
142
|
"@clack/prompts": "^1.5.1",
|
|
98
|
-
"@rgrove/parse-xml": "4.2.
|
|
143
|
+
"@rgrove/parse-xml": "4.2.3",
|
|
99
144
|
"@types/ms": "^2.1.0",
|
|
100
145
|
"acorn": "^8.17.0",
|
|
101
|
-
"ajv": "^8.17",
|
|
102
146
|
"hono": "^4.12.25",
|
|
103
|
-
"impit": "0.14.1",
|
|
104
147
|
"ioredis": "^5.11.1",
|
|
105
148
|
"ms": "^2.1.3",
|
|
106
149
|
"playwright": "^1.55.1",
|
|
@@ -108,6 +151,9 @@
|
|
|
108
151
|
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
|
109
152
|
"re2-wasm": "^1.0",
|
|
110
153
|
"safe-regex": "^2.1",
|
|
154
|
+
"socks": "^2.8.9",
|
|
155
|
+
"tough-cookie": "^6.0.2",
|
|
156
|
+
"wreq-js": "3.0.0",
|
|
111
157
|
"zod": "^4.4.3"
|
|
112
158
|
},
|
|
113
159
|
"repository": {
|
package/src/auth-turn/index.ts
CHANGED
|
@@ -24,7 +24,7 @@ export const AUTH_TURN_SCHEMA_ARTIFACT_PATH = "dist/auth-turn/auth-turn.v1.schem
|
|
|
24
24
|
*
|
|
25
25
|
* This is the exact codification of the runtime validation the SDK applies to
|
|
26
26
|
* ceremony outputs (see `validateCeremonyOutput` in `src/ceremonies`), which
|
|
27
|
-
*
|
|
27
|
+
* evaluates this same document. `kind` is an OPEN string on the wire: the known
|
|
28
28
|
* kinds in {@link TURN_KINDS} are tooling metadata, never a wire constraint.
|
|
29
29
|
*
|
|
30
30
|
* The committed artifact at `src/auth-turn/auth-turn.v1.schema.json` (shipped
|
package/src/auth.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { AuthError, ProviderError } from "./errors.js";
|
|
2
|
+
import {
|
|
3
|
+
declarationInvalidError,
|
|
4
|
+
DECLARATION_RULE_IDS,
|
|
5
|
+
type DeclarationViolation,
|
|
6
|
+
} from "./declaration-validation.js";
|
|
2
7
|
import type {
|
|
3
8
|
AuthAbortData,
|
|
4
9
|
AuthConfig,
|
|
@@ -291,6 +296,25 @@ export interface DefineCredentialsAuthOptions<
|
|
|
291
296
|
):
|
|
292
297
|
| CredentialsAuthLoginResult<TCredentialKeys, keyof TChallenges & string>
|
|
293
298
|
| Promise<CredentialsAuthLoginResult<TCredentialKeys, keyof TChallenges & string>>;
|
|
299
|
+
/**
|
|
300
|
+
* Optional re-mint of an expired session from the stored credential, wired
|
|
301
|
+
* to `auth.flow.refresh`.
|
|
302
|
+
*
|
|
303
|
+
* Credential-auth upstreams routinely invalidate a session well before the
|
|
304
|
+
* `expiresAt` the provider advertised, which leaves every operation failing
|
|
305
|
+
* with a reauth error until a human repeats the whole interactive login.
|
|
306
|
+
* Implement this to re-establish the session from what is already stored on
|
|
307
|
+
* the connection; the result is resolved exactly like `login`, so it may
|
|
308
|
+
* also raise a challenge when the upstream demands one. Omit it when the
|
|
309
|
+
* upstream has no non-interactive path and re-authentication genuinely
|
|
310
|
+
* requires the user.
|
|
311
|
+
*/
|
|
312
|
+
refresh?(
|
|
313
|
+
ctx: FlowContext,
|
|
314
|
+
input: Partial<CredentialsAuthInput<TFields>>,
|
|
315
|
+
):
|
|
316
|
+
| CredentialsAuthLoginResult<TCredentialKeys, keyof TChallenges & string>
|
|
317
|
+
| Promise<CredentialsAuthLoginResult<TCredentialKeys, keyof TChallenges & string>>;
|
|
294
318
|
}
|
|
295
319
|
|
|
296
320
|
export interface DefinedCredentialsAuth {
|
|
@@ -371,6 +395,27 @@ function normalizeInput<TFields extends CredentialsAuthFields>(
|
|
|
371
395
|
return result as CredentialsAuthInput<TFields>;
|
|
372
396
|
}
|
|
373
397
|
|
|
398
|
+
/**
|
|
399
|
+
* Refresh variant of {@link normalizeInput}. `login` coerces every declared
|
|
400
|
+
* field to a string because the interactive turn has already enforced that they
|
|
401
|
+
* are present; refresh runs with no user present, so an absent field is omitted
|
|
402
|
+
* rather than turned into an empty string. That keeps "the user did not supply
|
|
403
|
+
* this" distinguishable from "the user supplied an empty value".
|
|
404
|
+
*/
|
|
405
|
+
function normalizePartialInput<TFields extends CredentialsAuthFields>(
|
|
406
|
+
fields: TFields,
|
|
407
|
+
input: Record<string, unknown> | undefined,
|
|
408
|
+
): Partial<CredentialsAuthInput<TFields>> {
|
|
409
|
+
const result: Record<string, string> = {};
|
|
410
|
+
for (const name of Object.keys(fields)) {
|
|
411
|
+
const value = input?.[name];
|
|
412
|
+
if (typeof value === "string") {
|
|
413
|
+
result[name] = value;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return result as Partial<CredentialsAuthInput<TFields>>;
|
|
417
|
+
}
|
|
418
|
+
|
|
374
419
|
function assertCredentialKeys<TCredentialKeys extends readonly string[]>(
|
|
375
420
|
credentialKeys: TCredentialKeys,
|
|
376
421
|
credential: Record<string, unknown>,
|
|
@@ -656,6 +701,7 @@ export function defineCredentialsAuth<
|
|
|
656
701
|
string,
|
|
657
702
|
CredentialsAuthChallengeDefinition<CredentialsAuthFields, TCredentialKeys, string>
|
|
658
703
|
>;
|
|
704
|
+
validateCredentialsAuthChallenges(challenges);
|
|
659
705
|
|
|
660
706
|
return {
|
|
661
707
|
auth: {
|
|
@@ -710,6 +756,44 @@ export function defineCredentialsAuth<
|
|
|
710
756
|
completeTurnId,
|
|
711
757
|
);
|
|
712
758
|
},
|
|
759
|
+
// Only advertise refresh when the provider implements it: the
|
|
760
|
+
// protocol treats the hook's presence as "this connection can be
|
|
761
|
+
// re-established without the user", and exposing a stub that
|
|
762
|
+
// cannot actually re-mint would turn a recoverable expiry into a
|
|
763
|
+
// silent failure.
|
|
764
|
+
...(options.refresh
|
|
765
|
+
? {
|
|
766
|
+
refresh: async (ctx: FlowContext, rawInput?: Record<string, unknown>) => {
|
|
767
|
+
// A pending challenge belongs to the interactive flow that
|
|
768
|
+
// raised it; finish it there rather than restarting.
|
|
769
|
+
const pending = getPendingChallenge(ctx);
|
|
770
|
+
if (pending) {
|
|
771
|
+
return await continuePendingChallenge(
|
|
772
|
+
ctx,
|
|
773
|
+
options.credentialKeys,
|
|
774
|
+
challenges,
|
|
775
|
+
pending,
|
|
776
|
+
rawInput,
|
|
777
|
+
completeTurnId,
|
|
778
|
+
);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
// Refresh runs without user input, so fields are optional
|
|
782
|
+
// here — unlike `continue`, missing ones are not a retry.
|
|
783
|
+
const result = await options.refresh!(
|
|
784
|
+
ctx,
|
|
785
|
+
normalizePartialInput(options.fields, rawInput),
|
|
786
|
+
);
|
|
787
|
+
return await resolveAuthResult(
|
|
788
|
+
ctx,
|
|
789
|
+
options.credentialKeys,
|
|
790
|
+
challenges,
|
|
791
|
+
result,
|
|
792
|
+
completeTurnId,
|
|
793
|
+
);
|
|
794
|
+
},
|
|
795
|
+
}
|
|
796
|
+
: {}),
|
|
713
797
|
},
|
|
714
798
|
},
|
|
715
799
|
credential: {
|
|
@@ -726,3 +810,37 @@ export function defineCredentialsAuth<
|
|
|
726
810
|
},
|
|
727
811
|
};
|
|
728
812
|
}
|
|
813
|
+
|
|
814
|
+
function validateCredentialsAuthChallenges(
|
|
815
|
+
challenges: Record<
|
|
816
|
+
string,
|
|
817
|
+
CredentialsAuthChallengeDefinition<CredentialsAuthFields, readonly string[], string>
|
|
818
|
+
>,
|
|
819
|
+
): void {
|
|
820
|
+
const violations: DeclarationViolation[] = [];
|
|
821
|
+
for (const [challengeId, challenge] of Object.entries(challenges)) {
|
|
822
|
+
const fieldCount =
|
|
823
|
+
challenge.fields && typeof challenge.fields === "object"
|
|
824
|
+
? Object.keys(challenge.fields).length
|
|
825
|
+
: 0;
|
|
826
|
+
const fieldsDeclared =
|
|
827
|
+
challenge.fields !== undefined && challenge.fields !== null;
|
|
828
|
+
const hasFields = fieldCount > 0;
|
|
829
|
+
const hasVerify = typeof challenge.verify === "function";
|
|
830
|
+
const hasPoll = typeof challenge.poll === "function";
|
|
831
|
+
const isInteractive = hasFields && hasVerify && !hasPoll;
|
|
832
|
+
const isPolling = !fieldsDeclared && !hasVerify && hasPoll;
|
|
833
|
+
const isHybrid = hasFields && hasVerify && hasPoll;
|
|
834
|
+
const emptyFieldsDeclared = fieldsDeclared && !hasFields;
|
|
835
|
+
if (!emptyFieldsDeclared && (isInteractive || isPolling || isHybrid)) continue;
|
|
836
|
+
|
|
837
|
+
const path = `challenges.${challengeId}`;
|
|
838
|
+
violations.push({
|
|
839
|
+
ruleId: DECLARATION_RULE_IDS.challengeShape,
|
|
840
|
+
path,
|
|
841
|
+
message: "challenge must be interactive, polling, or an explicit hybrid.",
|
|
842
|
+
fix: `Give ${path} non-empty fields plus verify, poll alone, or all three for a hybrid.`,
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
if (violations.length > 0) throw declarationInvalidError(violations);
|
|
846
|
+
}
|