@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
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// This set suppresses the unregistered-provider-error-code signal for codes
|
|
2
|
+
// intentionally emitted by SDK paths. It is not the complete authority for
|
|
3
|
+
// runtime error resolution: branded errors and additional canonical SDK codes
|
|
4
|
+
// must also remain immune to provider-declared status/retryability overrides.
|
|
5
|
+
export const SDK_OWNED_PROVIDER_ERROR_CODES = new Set([
|
|
6
|
+
"MISSING_SECRET",
|
|
7
|
+
"AUTH_PROMPT_UNAVAILABLE",
|
|
8
|
+
"BROWSER_CDP_POOL_REQUIRED",
|
|
9
|
+
"BROWSER_RUNTIME_UNSUPPORTED",
|
|
10
|
+
"STEALTH_RUNTIME_UNSUPPORTED",
|
|
11
|
+
"STEALTH_HEADER_OVERRIDE_UNSUPPORTED",
|
|
12
|
+
"SSE_EVENT_UNDECLARED",
|
|
13
|
+
"STREAM_EVENT_TOO_LARGE",
|
|
14
|
+
"STREAM_CHUNK_TOO_LARGE",
|
|
15
|
+
"SSE_RESULT_UNSUPPORTED",
|
|
16
|
+
"STREAM_RESULT_UNSUPPORTED",
|
|
17
|
+
"AUTH_FLOW_NOT_CONFIGURED",
|
|
18
|
+
"refresh_not_supported",
|
|
19
|
+
"RUNTIME_UNSUPPORTED",
|
|
20
|
+
"PROVIDER_STATE_UNSUPPORTED",
|
|
21
|
+
// Engine attachment (ADR-0011). Registered here so an engine failure is served
|
|
22
|
+
// as a known SDK code instead of raising a false
|
|
23
|
+
// `unregistered_provider_error_code` signal on a 500.
|
|
24
|
+
"PROVIDER_ENGINE_AUTHENTICATION_FAILED",
|
|
25
|
+
"PROVIDER_ENGINE_PROTOCOL_VERSION_MISMATCH",
|
|
26
|
+
"PROVIDER_ENGINE_UNAVAILABLE",
|
|
27
|
+
"PROVIDER_ENGINE_MODE_UNSUPPORTED",
|
|
28
|
+
"PROVIDER_EGRESS_DENIED",
|
|
29
|
+
"HANDLE_INVALID",
|
|
30
|
+
"HANDLE_NOT_FOUND",
|
|
31
|
+
"HANDLE_EXPIRED",
|
|
32
|
+
"HANDLE_KIND_MISMATCH",
|
|
33
|
+
"HANDLE_BUSY",
|
|
34
|
+
"HANDLE_COMMITTED",
|
|
35
|
+
"HANDLE_CONNECTION_REQUIRED",
|
|
36
|
+
"HANDLE_STORAGE_UNAVAILABLE",
|
|
37
|
+
"HANDLE_TOO_LARGE",
|
|
38
|
+
"HANDLE_INVALID_DATA",
|
|
39
|
+
"PICK_NOT_OFFERED",
|
|
40
|
+
"unsupported_stealth_cookie_store_version",
|
|
41
|
+
"provider_secret_error",
|
|
42
|
+
"credential_key_error",
|
|
43
|
+
"credential_mode_error",
|
|
44
|
+
"flow_expired",
|
|
45
|
+
"turn_validation_error",
|
|
46
|
+
"context_access_error",
|
|
47
|
+
"OCR_UPSTREAM_FAILED",
|
|
48
|
+
"UNSUPPORTED_STT_OPTION",
|
|
49
|
+
"INVALID_STT_AUDIO",
|
|
50
|
+
"STT_AUDIO_TOO_LARGE",
|
|
51
|
+
"STT_UPSTREAM_FAILED",
|
|
52
|
+
"INVALID_STT_VERIFICATION_CODE_OPTIONS",
|
|
53
|
+
"NO_CODE_FOUND",
|
|
54
|
+
"AMBIGUOUS_CODE",
|
|
55
|
+
"retry_invalid_policy",
|
|
56
|
+
"retry_unsafe_method",
|
|
57
|
+
"stealth_cookie_store_serialize_failed",
|
|
58
|
+
"response_too_large",
|
|
59
|
+
"transport_stream_unavailable",
|
|
60
|
+
"transport_invalid_method",
|
|
61
|
+
"http_transport_override_unsupported",
|
|
62
|
+
"http_redirect_policy_invalid",
|
|
63
|
+
"http_redirect_stopped",
|
|
64
|
+
"http_redirect_max_hops",
|
|
65
|
+
"http_redirect_missing_location",
|
|
66
|
+
"http_redirect_loop",
|
|
67
|
+
"transport_invalid_url",
|
|
68
|
+
"http_header_factory_failed",
|
|
69
|
+
"EGRESS_LEASE_INVALID",
|
|
70
|
+
"EGRESS_LEASE_BINDING_INVALID",
|
|
71
|
+
"EGRESS_LEASE_KEY_MISSING",
|
|
72
|
+
"EGRESS_LEASE_KEY_WEAK",
|
|
73
|
+
"STEALTH_BODY_UNSUPPORTED",
|
|
74
|
+
"REPLAY_SESSION_MISMATCH",
|
|
75
|
+
"REPLAY_ALREADY_ATTEMPTED",
|
|
76
|
+
"retry_exhausted",
|
|
77
|
+
"auth_abort_unsafe_data",
|
|
78
|
+
"credentials_auth_missing_credential_keys",
|
|
79
|
+
"credentials_auth_missing_credential",
|
|
80
|
+
"credentials_auth_invalid_login_result",
|
|
81
|
+
"credentials_auth_unknown_challenge",
|
|
82
|
+
"credentials_auth_unknown_pending_challenge",
|
|
83
|
+
"STATEFUL_FORWARDING_NOT_CONFIGURED",
|
|
84
|
+
"STATEFUL_FORWARDING_SIGNATURE_MISSING",
|
|
85
|
+
"STATEFUL_FORWARDING_NONCE_INVALID",
|
|
86
|
+
"STATEFUL_FORWARDING_TIMESTAMP_INVALID",
|
|
87
|
+
"STATEFUL_FORWARDING_SIGNATURE_INVALID",
|
|
88
|
+
"STATEFUL_FORWARDING_REPLAY_DETECTED",
|
|
89
|
+
"STATEFUL_FORWARDING_REPLAY_CACHE_FULL",
|
|
90
|
+
"STATEFUL_FORWARDING_ENVELOPE_INVALID",
|
|
91
|
+
"STATEFUL_FORWARDING_PROVIDER_MISMATCH",
|
|
92
|
+
"STATEFUL_FORWARDING_SOURCE_POD_MISMATCH",
|
|
93
|
+
"STATEFUL_FORWARDING_OWNER_FENCE_INVALID",
|
|
94
|
+
"STATEFUL_FORWARDING_REQUEST_FAILED",
|
|
95
|
+
"STATEFUL_FORWARDING_CONTEXT_MISSING",
|
|
96
|
+
"STATEFUL_FORWARDING_CONTEXT_INVALID",
|
|
97
|
+
"STATEFUL_FORWARDING_BAD_RESPONSE",
|
|
98
|
+
"STATEFUL_INTERNAL_EXECUTOR_NOT_CONFIGURED",
|
|
99
|
+
"STATEFUL_FILE_FORWARDING_UNSUPPORTED",
|
|
100
|
+
"STATEFUL_CONTROL_PLANE_OPERATION_AMBIGUOUS",
|
|
101
|
+
"STATEFUL_CONTROL_PLANE_REQUEST_FAILED",
|
|
102
|
+
"STATEFUL_CONTROL_PLANE_HTTP_ERROR",
|
|
103
|
+
"STATEFUL_CONTROL_PLANE_INVALID_RESPONSE",
|
|
104
|
+
]);
|
|
105
|
+
// Complete code authority for provider-declared runtime resolution. Keep this
|
|
106
|
+
// separate from signal suppression: declarations may document these codes, but
|
|
107
|
+
// their status and retryability can never override the SDK's canonical result.
|
|
108
|
+
export const SDK_RUNTIME_OWNED_ERROR_CODES = new Set([
|
|
109
|
+
...SDK_OWNED_PROVIDER_ERROR_CODES,
|
|
110
|
+
"reauth_required",
|
|
111
|
+
"OCR_UNAVAILABLE",
|
|
112
|
+
"UNSUPPORTED_OCR_BACKEND",
|
|
113
|
+
"STT_UNAVAILABLE",
|
|
114
|
+
"UNSUPPORTED_STT_BACKEND",
|
|
115
|
+
"OUTPUT_VALIDATION_FAILED",
|
|
116
|
+
"NOT_FOUND",
|
|
117
|
+
"not_found",
|
|
118
|
+
]);
|
|
119
|
+
// Registered codes that name an upstream outcome. A row states the status the
|
|
120
|
+
// SDK serves and the observability category together, so an upstream code
|
|
121
|
+
// cannot be registered without saying who failed. Serve reads the category
|
|
122
|
+
// for a `ProviderError` that carries one of these codes and no explicit
|
|
123
|
+
// `category`, and the public `source` follows from it (`sourceForCategory`).
|
|
124
|
+
// Without a row the category defaults to `provider_error` → `source:
|
|
125
|
+
// "apifuse"`, and the health monitor cannot tie a real upstream failure to the
|
|
126
|
+
// upstream: it publishes `monitoring_unavailable` instead of `down`.
|
|
127
|
+
//
|
|
128
|
+
// The category is `categoryForStatus(status)` unless the code names a
|
|
129
|
+
// narrower class than its status can: a schema change, a bot wall, an
|
|
130
|
+
// upstream refusal of the platform-managed key (served 400, see below).
|
|
131
|
+
// Every row is a code the fleet throws for something the upstream did or
|
|
132
|
+
// said; caller-side and SDK-internal codes stay in the table below.
|
|
133
|
+
export const SDK_UPSTREAM_ERROR_CODE_REGISTRY = new Map([
|
|
134
|
+
// The SDK's own unknown-operation and unknown-route throws reuse the
|
|
135
|
+
// not-found spellings; they set an explicit category and stay APIFuse's.
|
|
136
|
+
["NOT_FOUND", { status: 404, category: "upstream_http" }],
|
|
137
|
+
["not_found", { status: 404, category: "upstream_http" }],
|
|
138
|
+
["NO_DATA", { status: 404, category: "upstream_http" }],
|
|
139
|
+
["RATE_LIMITED", { status: 429, category: "upstream_rate_limited" }],
|
|
140
|
+
["UPSTREAM_RATE_LIMIT", { status: 429, category: "upstream_rate_limited" }],
|
|
141
|
+
[
|
|
142
|
+
"LIMITED_NUMBER_OF_SERVICE_REQUESTS_EXCEEDS_ERROR",
|
|
143
|
+
{ status: 429, category: "upstream_rate_limited" },
|
|
144
|
+
],
|
|
145
|
+
// Deterministic upstream business refusal (honest-provider-error-
|
|
146
|
+
// contract): the upstream evaluated the request and said no under its
|
|
147
|
+
// own rules — a conflict with upstream state, never a 5xx.
|
|
148
|
+
["UPSTREAM_REJECTED", { status: 409, category: "upstream_rejected" }],
|
|
149
|
+
["UPSTREAM_ERROR", { status: 502, category: "upstream_http" }],
|
|
150
|
+
// The upstream's bot wall or request protection refused the request. The
|
|
151
|
+
// status says only "upstream"; the code says which kind.
|
|
152
|
+
["BLOCKED", { status: 502, category: "anti_bot_blocked" }],
|
|
153
|
+
// Fleet-consensus provider codes. These are thrown by provider code, not
|
|
154
|
+
// by the SDK, so they are registered here (status mapping) and not in
|
|
155
|
+
// SDK_RUNTIME_OWNED_ERROR_CODES: an operation-declared status still wins,
|
|
156
|
+
// exactly as it does for UPSTREAM_ERROR and BLOCKED above. Registering
|
|
157
|
+
// them stops the fleet from re-declaring the same rows on every
|
|
158
|
+
// operation, and stops an undeclared throw from being served as 500.
|
|
159
|
+
//
|
|
160
|
+
// A platform-managed upstream service key the upstream refuses. With
|
|
161
|
+
// `auth.mode: "platform-managed"` the caller holds no credential, so 401
|
|
162
|
+
// ("re-authenticate") tells the caller to do something it cannot do, and
|
|
163
|
+
// 502 ("upstream is sick") promises a recovery that will never come. It is
|
|
164
|
+
// a deployment/config defect — the same class as MISSING_SECRET below,
|
|
165
|
+
// which is already an explicit 400 for that reason. The upstream is still
|
|
166
|
+
// the one refusing, so the category is `upstream_auth`; the gateway
|
|
167
|
+
// records it as `provider_error` for every non-`required` connection mode
|
|
168
|
+
// so the refusal stays provider-alertable.
|
|
169
|
+
["UPSTREAM_AUTH_ERROR", { status: 400, category: "upstream_auth" }],
|
|
170
|
+
// The upstream changed its response shape and the provider cannot
|
|
171
|
+
// normalize it. 502 because the fault is upstream of us, non-retryable
|
|
172
|
+
// because a retry returns the same broken payload.
|
|
173
|
+
["UPSTREAM_SCHEMA_ERROR", { status: 502, category: "upstream_schema_drift" }],
|
|
174
|
+
]);
|
|
175
|
+
/**
|
|
176
|
+
* The category a registered upstream code carries when its `ProviderError`
|
|
177
|
+
* sets none. `undefined` for every other code, which keeps its existing
|
|
178
|
+
* default.
|
|
179
|
+
*/
|
|
180
|
+
export function registeredUpstreamErrorCategory(code) {
|
|
181
|
+
return code === undefined ? undefined : SDK_UPSTREAM_ERROR_CODE_REGISTRY.get(code)?.category;
|
|
182
|
+
}
|
|
183
|
+
// Canonical SDK status mapping for recognized provider-thrown error codes.
|
|
184
|
+
// serve.ts toStatusCode consults this map (after operation-declared overrides
|
|
185
|
+
// for non-SDK-owned codes), and the authoring lint treats these codes as
|
|
186
|
+
// SDK-registered. Add new codes here instead of duplicating literals in
|
|
187
|
+
// either consumer — an upstream-attributed code goes in
|
|
188
|
+
// SDK_UPSTREAM_ERROR_CODE_REGISTRY above, which feeds this map.
|
|
189
|
+
export const SDK_STATUS_MAPPED_PROVIDER_ERROR_CODES = new Map([
|
|
190
|
+
["AUTH_REQUIRED", 401],
|
|
191
|
+
["reauth_required", 401],
|
|
192
|
+
// Unprovisioned declared secret: a deployment/config defect, never an
|
|
193
|
+
// upstream failure — explicit 400.
|
|
194
|
+
["MISSING_SECRET", 400],
|
|
195
|
+
// Only an unverifiable or foreign handle is the caller's: key and binding
|
|
196
|
+
// faults stay unmapped (500) because the engine host, not the caller, owns them.
|
|
197
|
+
["EGRESS_LEASE_INVALID", 409],
|
|
198
|
+
["REPLAY_SESSION_MISMATCH", 409],
|
|
199
|
+
["REPLAY_ALREADY_ATTEMPTED", 409],
|
|
200
|
+
// Handles (ADR-0012): only caller-side faults are mapped. Storage,
|
|
201
|
+
// connection-scope, size, and schema faults stay 500 because the provider
|
|
202
|
+
// or host owns them.
|
|
203
|
+
["HANDLE_INVALID", 400],
|
|
204
|
+
["HANDLE_KIND_MISMATCH", 400],
|
|
205
|
+
["PICK_NOT_OFFERED", 400],
|
|
206
|
+
["HANDLE_NOT_FOUND", 404],
|
|
207
|
+
["HANDLE_EXPIRED", 410],
|
|
208
|
+
["HANDLE_COMMITTED", 409],
|
|
209
|
+
["HANDLE_BUSY", 409],
|
|
210
|
+
// Caller-side bad input rejected by the provider (fleet consensus, like
|
|
211
|
+
// UPSTREAM_AUTH_ERROR and UPSTREAM_SCHEMA_ERROR above). The minority
|
|
212
|
+
// spellings (INVALID_INPUT / VALIDATION_ERROR / BAD_REQUEST) are
|
|
213
|
+
// deliberately not registered: they migrate to this spelling on the
|
|
214
|
+
// contract track, and registering them here would freeze the divergence.
|
|
215
|
+
["INVALID_REQUEST", 400],
|
|
216
|
+
["OCR_UNAVAILABLE", 503],
|
|
217
|
+
["UNSUPPORTED_OCR_BACKEND", 503],
|
|
218
|
+
["STT_UNAVAILABLE", 503],
|
|
219
|
+
["UNSUPPORTED_STT_BACKEND", 503],
|
|
220
|
+
["STATEFUL_FORWARDING_REPLAY_CACHE_FULL", 503],
|
|
221
|
+
// The engine is reachable-in-principle but not now: retryable, so the
|
|
222
|
+
// caller may retry once the engine recovers. Authentication, protocol
|
|
223
|
+
// mismatch, an unsupported mode and denied egress stay unmapped (500) and
|
|
224
|
+
// non-retryable: they are deployment or provider faults that no caller
|
|
225
|
+
// retry can clear, and a retryable 5xx there would turn one bad rollout
|
|
226
|
+
// into gateway-driven load.
|
|
227
|
+
["PROVIDER_ENGINE_UNAVAILABLE", 503],
|
|
228
|
+
...Array.from(SDK_UPSTREAM_ERROR_CODE_REGISTRY, ([code, registration]) => [code, registration.status]),
|
|
229
|
+
]);
|
|
230
|
+
// Canonical retryability for the fleet-consensus codes registered above.
|
|
231
|
+
//
|
|
232
|
+
// Runtime retryability still resolves as `instance option ?? declared ??
|
|
233
|
+
// false`, so this map changes no served response: an undeclared throw already
|
|
234
|
+
// defaults to false, which is what every entry here says. It exists so the
|
|
235
|
+
// authoring lint can tell a provider that its declared `retryable` contradicts
|
|
236
|
+
// the registered meaning of the code, instead of the fleet quietly shipping two
|
|
237
|
+
// answers for the same code. Only codes whose retryability was fixed as part of
|
|
238
|
+
// registration belong here — do not backfill opinions the SDK never made.
|
|
239
|
+
export const SDK_CANONICAL_ERROR_CODE_RETRYABILITY = new Map([
|
|
240
|
+
["UPSTREAM_AUTH_ERROR", false],
|
|
241
|
+
["UPSTREAM_SCHEMA_ERROR", false],
|
|
242
|
+
["INVALID_REQUEST", false],
|
|
243
|
+
]);
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { ProviderErrorMessageParams } from "./i18n/error-messages.js";
|
|
1
2
|
import type { ProviderErrorCategory } from "./observability.js";
|
|
3
|
+
import type { HttpRedirectFailureReason, ProviderLocaleKeyInput } from "./types.js";
|
|
2
4
|
export type ProviderErrorOptions = {
|
|
3
5
|
fix?: string;
|
|
4
6
|
code?: string;
|
|
@@ -6,6 +8,40 @@ export type ProviderErrorOptions = {
|
|
|
6
8
|
cause?: Error;
|
|
7
9
|
category?: ProviderErrorCategory;
|
|
8
10
|
retryable?: boolean;
|
|
11
|
+
/** Provider-authored, bounded metadata safe for operational logs and error headers. */
|
|
12
|
+
observability?: ProviderErrorObservability;
|
|
13
|
+
/**
|
|
14
|
+
* Locale catalog key for the client-facing `message`, e.g.
|
|
15
|
+
* `"errors.upstreamSchema.message"`. Resolved at serve time against the
|
|
16
|
+
* provider's `locales/{en,ko,ja}.json` with the caller's `Accept-Language`,
|
|
17
|
+
* falling back to `en` and then to the positional `message`.
|
|
18
|
+
*
|
|
19
|
+
* The positional `message` stays English: it is what `error.message`, cause
|
|
20
|
+
* frames, logs and OTLP attributes carry. Only the response envelope is
|
|
21
|
+
* localized.
|
|
22
|
+
*/
|
|
23
|
+
messageKey?: ProviderLocaleKeyInput;
|
|
24
|
+
/** Locale catalog key for the client-facing `fix`. Same resolution as {@link ProviderErrorOptions.messageKey}. */
|
|
25
|
+
fixKey?: ProviderLocaleKeyInput;
|
|
26
|
+
/**
|
|
27
|
+
* Values substituted into `{name}` placeholders of the resolved text.
|
|
28
|
+
* Strings and finite numbers only; string values are scrubbed and length
|
|
29
|
+
* capped before substitution because upstream text routinely lands here.
|
|
30
|
+
*/
|
|
31
|
+
params?: ProviderErrorMessageParams;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Provider-authored error diagnostics whose runtime values are validated before emission.
|
|
35
|
+
* Classification tokens such as `reason` are source literals, not runtime user input or
|
|
36
|
+
* credentials. The gateway removes the observability header from tenant responses.
|
|
37
|
+
*/
|
|
38
|
+
export type ProviderErrorObservability = {
|
|
39
|
+
/** A 1-64 character `[A-Za-z0-9_.-]` classification token, for example `LOGIN_COMPLETE_FAILED`. */
|
|
40
|
+
reason?: string;
|
|
41
|
+
/** A provider-computed 12-hex-character fingerprint of private diagnostic input. */
|
|
42
|
+
fingerprint?: string;
|
|
43
|
+
/** The non-negative length of the private diagnostic input, capped at 10,000,000. */
|
|
44
|
+
messageLength?: number;
|
|
9
45
|
};
|
|
10
46
|
export declare class ProviderError extends Error {
|
|
11
47
|
readonly options?: ProviderErrorOptions | undefined;
|
|
@@ -17,6 +53,29 @@ export declare class ProviderError extends Error {
|
|
|
17
53
|
export declare class SDKError extends ProviderError {
|
|
18
54
|
constructor(message: string, options?: ProviderErrorOptions);
|
|
19
55
|
}
|
|
56
|
+
/** Raised when the remote provider engine speaks an incompatible protocol version. */
|
|
57
|
+
export declare class ProviderEngineProtocolVersionError extends SDKError {
|
|
58
|
+
readonly receivedVersion: unknown;
|
|
59
|
+
readonly expectedVersion: string;
|
|
60
|
+
constructor(receivedVersion: unknown, expectedVersion: string);
|
|
61
|
+
}
|
|
62
|
+
/** Raised when the remote provider engine rejects a workspace API key. */
|
|
63
|
+
export declare class ProviderEngineAuthenticationError extends SDKError {
|
|
64
|
+
constructor(message?: string, options?: ProviderErrorOptions);
|
|
65
|
+
}
|
|
66
|
+
/** Raised when the remote engine cannot be reached. There is no local fallback. */
|
|
67
|
+
export declare class ProviderEngineUnavailableError extends SDKError {
|
|
68
|
+
constructor(message?: string, cause?: Error);
|
|
69
|
+
}
|
|
70
|
+
/** Raised when the engine refuses egress outside the workspace's pinned allowlist. */
|
|
71
|
+
export declare class ProviderEgressDeniedError extends ProviderError {
|
|
72
|
+
constructor(message: string, details?: unknown);
|
|
73
|
+
}
|
|
74
|
+
/** Raised when persisted stealth cookies use a store version this SDK cannot read. */
|
|
75
|
+
export declare class StealthCookieStoreVersionError extends SDKError {
|
|
76
|
+
readonly version: unknown;
|
|
77
|
+
constructor(version: unknown);
|
|
78
|
+
}
|
|
20
79
|
export declare class AuthError extends ProviderError {
|
|
21
80
|
constructor(message: string, options?: ProviderErrorOptions);
|
|
22
81
|
}
|
|
@@ -39,9 +98,24 @@ export declare class TransportError extends ProviderError {
|
|
|
39
98
|
readonly upstreamStatus?: number;
|
|
40
99
|
constructor(message: string, options?: TransportErrorOptions);
|
|
41
100
|
}
|
|
101
|
+
export type HttpRedirectErrorOptions = TransportErrorOptions & {
|
|
102
|
+
reason: HttpRedirectFailureReason;
|
|
103
|
+
/** Redacted redirect target suitable for provider diagnostics. */
|
|
104
|
+
target?: string;
|
|
105
|
+
};
|
|
106
|
+
/** Raised when an opt-in ctx.http redirect policy refuses or cannot resolve a hop. */
|
|
107
|
+
export declare class HttpRedirectError extends TransportError {
|
|
108
|
+
readonly reason: HttpRedirectFailureReason;
|
|
109
|
+
readonly target?: string;
|
|
110
|
+
constructor(message: string, options: HttpRedirectErrorOptions);
|
|
111
|
+
}
|
|
42
112
|
export declare function isProviderError(value: unknown): value is ProviderError;
|
|
43
113
|
export declare function isSessionExpiredError(value: unknown): value is SessionExpiredError;
|
|
44
114
|
export declare function isTransportError(value: unknown): value is TransportError;
|
|
115
|
+
/** Brands a handle error (ADR-0012) so `isHandleError` works across duplicate SDK module copies. */
|
|
116
|
+
export declare function brandHandleError(target: object): void;
|
|
117
|
+
export declare function hasHandleErrorBrand(value: unknown): boolean;
|
|
118
|
+
export declare function isValidationError(value: unknown): value is ValidationError;
|
|
45
119
|
export declare class ProviderSecretError extends ProviderError {
|
|
46
120
|
constructor(message: string, options?: ProviderErrorOptions);
|
|
47
121
|
}
|
package/dist/errors.js
CHANGED
|
@@ -8,6 +8,8 @@ const PROVIDER_ERROR_BRAND = Symbol.for("@apifuse/provider-sdk/error-brand@1");
|
|
|
8
8
|
const PROVIDER_ERROR_BRAND_VALUE = 1;
|
|
9
9
|
const SESSION_EXPIRED_BRAND = Symbol.for("@apifuse/provider-sdk/error-kind/session-expired@1");
|
|
10
10
|
const TRANSPORT_BRAND = Symbol.for("@apifuse/provider-sdk/error-kind/transport@1");
|
|
11
|
+
const VALIDATION_BRAND = Symbol.for("@apifuse/provider-sdk/error-kind/validation@1");
|
|
12
|
+
const HANDLE_BRAND = Symbol.for("@apifuse/provider-sdk/error-kind/handle@1");
|
|
11
13
|
// Defines a non-enumerable, non-writable, non-configurable own data property.
|
|
12
14
|
// Immutable + own means a guard can trust it via a single descriptor read
|
|
13
15
|
// without invoking attacker-controlled getters or accepting inherited brands.
|
|
@@ -57,6 +59,71 @@ export class SDKError extends ProviderError {
|
|
|
57
59
|
this.name = "SDKError";
|
|
58
60
|
}
|
|
59
61
|
}
|
|
62
|
+
/** Raised when the remote provider engine speaks an incompatible protocol version. */
|
|
63
|
+
export class ProviderEngineProtocolVersionError extends SDKError {
|
|
64
|
+
receivedVersion;
|
|
65
|
+
expectedVersion;
|
|
66
|
+
constructor(receivedVersion, expectedVersion) {
|
|
67
|
+
super(`Provider engine protocol version mismatch: expected ${expectedVersion}, received ${String(receivedVersion)}`, {
|
|
68
|
+
code: "PROVIDER_ENGINE_PROTOCOL_VERSION_MISMATCH",
|
|
69
|
+
details: { receivedVersion, expectedVersion },
|
|
70
|
+
fix: "Update @apifuse/provider-sdk or use a compatible APIFuse provider engine.",
|
|
71
|
+
});
|
|
72
|
+
this.receivedVersion = receivedVersion;
|
|
73
|
+
this.expectedVersion = expectedVersion;
|
|
74
|
+
this.name = "ProviderEngineProtocolVersionError";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Raised when the remote provider engine rejects a workspace API key. */
|
|
78
|
+
export class ProviderEngineAuthenticationError extends SDKError {
|
|
79
|
+
constructor(message = "Provider engine authentication failed", options) {
|
|
80
|
+
super(message, {
|
|
81
|
+
code: "PROVIDER_ENGINE_AUTHENTICATION_FAILED",
|
|
82
|
+
fix: "Set APIFUSE__ENGINE__API_KEY to the workspace API key from your APIFuse bounty dashboard.",
|
|
83
|
+
...options,
|
|
84
|
+
});
|
|
85
|
+
this.name = "ProviderEngineAuthenticationError";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Raised when the remote engine cannot be reached. There is no local fallback. */
|
|
89
|
+
export class ProviderEngineUnavailableError extends SDKError {
|
|
90
|
+
constructor(message = "The remote APIFuse provider engine is unavailable", cause) {
|
|
91
|
+
super(message, {
|
|
92
|
+
code: "PROVIDER_ENGINE_UNAVAILABLE",
|
|
93
|
+
retryable: true,
|
|
94
|
+
fix: "Check network access and the provider engine endpoint, then retry.",
|
|
95
|
+
...(cause ? { cause } : {}),
|
|
96
|
+
});
|
|
97
|
+
this.name = "ProviderEngineUnavailableError";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Raised when the engine refuses egress outside the workspace's pinned allowlist. */
|
|
101
|
+
export class ProviderEgressDeniedError extends ProviderError {
|
|
102
|
+
constructor(message, details) {
|
|
103
|
+
super(message, {
|
|
104
|
+
code: "PROVIDER_EGRESS_DENIED",
|
|
105
|
+
retryable: false,
|
|
106
|
+
details,
|
|
107
|
+
fix: "Use a host in the provider's pinned allowedHosts declaration, or request a trusted pin update.",
|
|
108
|
+
});
|
|
109
|
+
this.name = "ProviderEgressDeniedError";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Raised when persisted stealth cookies use a store version this SDK cannot read. */
|
|
113
|
+
export class StealthCookieStoreVersionError extends SDKError {
|
|
114
|
+
version;
|
|
115
|
+
constructor(version) {
|
|
116
|
+
const displayedVersion = typeof version === "string" || typeof version === "number"
|
|
117
|
+
? String(version)
|
|
118
|
+
: "missing or invalid";
|
|
119
|
+
super(`Unsupported stealth cookie store version: ${displayedVersion}`, {
|
|
120
|
+
code: "unsupported_stealth_cookie_store_version",
|
|
121
|
+
details: { receivedVersion: version, supportedVersions: [1] },
|
|
122
|
+
});
|
|
123
|
+
this.version = version;
|
|
124
|
+
this.name = "StealthCookieStoreVersionError";
|
|
125
|
+
}
|
|
126
|
+
}
|
|
60
127
|
export class AuthError extends ProviderError {
|
|
61
128
|
constructor(message, options) {
|
|
62
129
|
super(message, options);
|
|
@@ -81,6 +148,7 @@ export class ValidationError extends ProviderError {
|
|
|
81
148
|
super(message, options);
|
|
82
149
|
this.name = "ValidationError";
|
|
83
150
|
this.zodError = options?.zodError;
|
|
151
|
+
defineErrorBrand(this, VALIDATION_BRAND, true);
|
|
84
152
|
}
|
|
85
153
|
}
|
|
86
154
|
export class TransportError extends ProviderError {
|
|
@@ -94,6 +162,25 @@ export class TransportError extends ProviderError {
|
|
|
94
162
|
defineErrorBrand(this, TRANSPORT_BRAND, true);
|
|
95
163
|
}
|
|
96
164
|
}
|
|
165
|
+
/** Raised when an opt-in ctx.http redirect policy refuses or cannot resolve a hop. */
|
|
166
|
+
export class HttpRedirectError extends TransportError {
|
|
167
|
+
reason;
|
|
168
|
+
target;
|
|
169
|
+
constructor(message, options) {
|
|
170
|
+
const { reason, target, ...transportOptions } = options;
|
|
171
|
+
super(message, {
|
|
172
|
+
...transportOptions,
|
|
173
|
+
code: `http_redirect_${reason}`,
|
|
174
|
+
details: {
|
|
175
|
+
reason,
|
|
176
|
+
...(target ? { target } : {}),
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
this.name = "HttpRedirectError";
|
|
180
|
+
this.reason = reason;
|
|
181
|
+
this.target = target;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
97
184
|
// Cross-module type guards. Prefer these over `instanceof` at any boundary that
|
|
98
185
|
// may receive an error from a different copy/entrypoint of the SDK (see the HTTP
|
|
99
186
|
// server error boundary). They recognize branded errors regardless of which
|
|
@@ -107,6 +194,18 @@ export function isSessionExpiredError(value) {
|
|
|
107
194
|
export function isTransportError(value) {
|
|
108
195
|
return isProviderError(value) && hasOwnBrand(value, TRANSPORT_BRAND, true);
|
|
109
196
|
}
|
|
197
|
+
/** Brands a handle error (ADR-0012) so `isHandleError` works across duplicate SDK module copies. */
|
|
198
|
+
export function brandHandleError(target) {
|
|
199
|
+
defineErrorBrand(target, HANDLE_BRAND, true);
|
|
200
|
+
}
|
|
201
|
+
export function hasHandleErrorBrand(value) {
|
|
202
|
+
return (hasOwnBrand(value, PROVIDER_ERROR_BRAND, PROVIDER_ERROR_BRAND_VALUE) &&
|
|
203
|
+
hasOwnBrand(value, HANDLE_BRAND, true));
|
|
204
|
+
}
|
|
205
|
+
export function isValidationError(value) {
|
|
206
|
+
return (isProviderError(value) &&
|
|
207
|
+
(hasOwnBrand(value, VALIDATION_BRAND, true) || value.name === "ValidationError"));
|
|
208
|
+
}
|
|
110
209
|
export class ProviderSecretError extends ProviderError {
|
|
111
210
|
constructor(message, options) {
|
|
112
211
|
super(message, { code: "provider_secret_error", ...options });
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { JsonValue } from "./contract-json.js";
|
|
2
|
+
export declare const REDACTED_FIXTURE_VALUE = "[REDACTED]";
|
|
3
|
+
/** Matches credential field names without treating benign prefixes such as `author` as `auth`. */
|
|
4
|
+
export declare function isSensitiveFixtureKey(key: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Returns JSON fixture data with credential-bearing keys and heuristic-confirmed string secrets
|
|
7
|
+
* replaced. Ordinary short prose and identifiers are retained.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sanitizeFixture(value: JsonValue): JsonValue;
|
|
10
|
+
/** Applies the shared credential-key policy to ordinary JSON fixtures. */
|
|
11
|
+
export declare function sanitizeOrdinaryFixture(value: JsonValue): JsonValue;
|
|
12
|
+
/** Sanitizes a primitive fixture string only when textual-secret heuristics match. */
|
|
13
|
+
export declare function sanitizeFixtureString(value: string): string;
|
|
14
|
+
/** True for opaque values that are unsafe to retain in paths or unstructured text. */
|
|
15
|
+
export declare function isSensitiveFixtureValue(value: string): boolean;
|
|
16
|
+
/** Sanitizes every path segment and values following a credential-like segment name. */
|
|
17
|
+
export declare function sanitizePathname(pathname: string): string;
|
|
18
|
+
/** Removes userinfo, query values, fragments, and credential-like path segments from log URLs. */
|
|
19
|
+
export declare function sanitizeUrlForLogs(value: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Returns query-free request provenance with each path segment scrubbed for credential-like values.
|
|
22
|
+
* Origins, URL userinfo, query values, and fragments are never persisted in request provenance.
|
|
23
|
+
*/
|
|
24
|
+
export declare function requestPathForFixture(value: string): string;
|
|
25
|
+
/** Scrubs secrets and terminal/log control characters before diagnostic text is emitted. */
|
|
26
|
+
export declare function sanitizeDiagnosticText(value: string): string;
|
|
27
|
+
/** Encodes terminal/log control characters without applying value-level secret heuristics. */
|
|
28
|
+
export declare function encodeDiagnosticControls(value: string): string;
|