@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,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a provider store resolved to at boot.
|
|
3
|
+
*
|
|
4
|
+
* `endpoint` is deliberately host and port only: the URL can carry a password
|
|
5
|
+
* (`redis://:secret@host:6379`), and the diagnostic inventory already treats
|
|
6
|
+
* those credential components — and only those — as sensitive
|
|
7
|
+
* (`collectDiagnosticSensitiveValues`, `urlCredentialComponents(url, {
|
|
8
|
+
* includePathAndQuery: false })`). A URL that does not parse contributes no
|
|
9
|
+
* endpoint at all rather than a redacted-looking fragment of itself.
|
|
10
|
+
*/
|
|
11
|
+
export type ProviderStoreBackendReport = {
|
|
12
|
+
/**
|
|
13
|
+
* `redis` when a URL resolved, `memory` for the in-process fallback,
|
|
14
|
+
* `unsupported` when state has no backend and every call fails closed,
|
|
15
|
+
* `injected` when the host handed the server a store object.
|
|
16
|
+
*/
|
|
17
|
+
readonly backend: "redis" | "memory" | "unsupported" | "injected";
|
|
18
|
+
/** Env name that supplied the Redis URL. Present only for `redis`. */
|
|
19
|
+
readonly envName?: string;
|
|
20
|
+
/**
|
|
21
|
+
* `host:port` of the resolved Redis. Never includes credentials, path or
|
|
22
|
+
* query. Absent when the URL does not parse, or when its query carries an
|
|
23
|
+
* ioredis option that moves the endpoint (`path`, `port`, `host`, `family`)
|
|
24
|
+
* so the authority is not where the client connects — see
|
|
25
|
+
* `state_redis_url_ambiguous_endpoint`.
|
|
26
|
+
*/
|
|
27
|
+
readonly endpoint?: string;
|
|
28
|
+
/** URL scheme, e.g. `redis` or `rediss`. Present only for `redis`. */
|
|
29
|
+
readonly scheme?: string;
|
|
30
|
+
/** True when the URL came from a shared fallback env rather than the store's own. */
|
|
31
|
+
readonly fallback?: boolean;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* One line per process boot naming the stores the provider resolved. Without
|
|
35
|
+
* it, a provider silently riding the cache Redis for its state is
|
|
36
|
+
* indistinguishable from one on a durable instance, from outside the pod and
|
|
37
|
+
* from the pod's own logs (apifuse#2302, the reason apifuse#2144 could only be
|
|
38
|
+
* verified by inference from the Deployment spec).
|
|
39
|
+
*/
|
|
40
|
+
export type ProviderStateBackendLogEvent = {
|
|
41
|
+
/** `warn` when a warning was raised, otherwise `info`. */
|
|
42
|
+
readonly level: "info" | "warn";
|
|
43
|
+
readonly event: "provider_state_backend";
|
|
44
|
+
readonly providerId: string;
|
|
45
|
+
readonly state: ProviderStoreBackendReport;
|
|
46
|
+
readonly cache: ProviderStoreBackendReport;
|
|
47
|
+
readonly sdkVersion: string;
|
|
48
|
+
/**
|
|
49
|
+
* Non-fatal findings, e.g. `state_redis_url_fallback` (the state store is
|
|
50
|
+
* sharing an instance provisioned for something else),
|
|
51
|
+
* `state_redis_url_unparsed`, or `state_redis_url_ambiguous_endpoint` (the
|
|
52
|
+
* URL's query carries an ioredis option that moves the endpoint, so the
|
|
53
|
+
* authority is not reported as the endpoint). Absent when the resolution
|
|
54
|
+
* was unambiguous.
|
|
55
|
+
*/
|
|
56
|
+
readonly warnings?: readonly string[];
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Build the boot event from the same env precedence the stores themselves use
|
|
60
|
+
* (`providerStateRedisResolutionFromEnv` / `providerCacheRedisResolutionFromEnv`),
|
|
61
|
+
* so the line can never describe a backend other than the one in use.
|
|
62
|
+
*/
|
|
63
|
+
export declare function providerStateBackendLogEvent(input: {
|
|
64
|
+
readonly providerId: string;
|
|
65
|
+
readonly sdkVersion: string;
|
|
66
|
+
/** The host passed an explicit state store, so no env resolution happened. */
|
|
67
|
+
readonly injectedState: boolean;
|
|
68
|
+
/** Mirrors `createProviderRuntimeStateFromEnv({ allowMemoryFallback })`. */
|
|
69
|
+
readonly allowMemoryFallback: boolean;
|
|
70
|
+
}): ProviderStateBackendLogEvent;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { providerCacheRedisResolutionFromEnv, providerStateRedisResolutionFromEnv, } from "../config/loader.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether ioredis' own URL parsing would move the endpoint away from the
|
|
4
|
+
* authority this function can see. `createProviderRedisClient` hands the raw
|
|
5
|
+
* URL to `new Redis(url, …)`, and `parseURL` ends with
|
|
6
|
+
* `defaults(result, queryOptions)` — lodash `defaults`, so a query key only
|
|
7
|
+
* applies where the authority supplied nothing:
|
|
8
|
+
*
|
|
9
|
+
* - `path` is never derived from the authority of a `redis://` URL (that
|
|
10
|
+
* pathname is the db index), so `?path=` always applies — and
|
|
11
|
+
* `StandaloneConnector` connects to `options.path` INSTEAD of host/port.
|
|
12
|
+
* The client is then on a Unix socket the authority says nothing about.
|
|
13
|
+
* - `port` applies only when the URL carries no explicit port.
|
|
14
|
+
* - `host` never applies here: we return early unless `parsed.hostname` is
|
|
15
|
+
* set, so `result.host` is always already populated.
|
|
16
|
+
* - `family` selects an address family; it does not move `host:port`.
|
|
17
|
+
*
|
|
18
|
+
* Verified against the pinned ioredis 5.11.1. In those cases the endpoint is
|
|
19
|
+
* WITHHELD and the ambiguity named, rather than reported as the authority — a
|
|
20
|
+
* diagnostic whose whole job is to answer "which Redis is this provider on"
|
|
21
|
+
* must not answer it wrongly. The query is never echoed: it can carry a
|
|
22
|
+
* password, which is why `endpoint` is host-and-port only to begin with.
|
|
23
|
+
*/
|
|
24
|
+
function queryMovesEndpoint(parsed) {
|
|
25
|
+
if (parsed.searchParams.has("path"))
|
|
26
|
+
return true;
|
|
27
|
+
return parsed.searchParams.has("port") && parsed.port === "";
|
|
28
|
+
}
|
|
29
|
+
function redisEndpoint(url) {
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = new URL(url);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
// No authority means this is not the `redis://host:port` shape at all (e.g.
|
|
38
|
+
// a bare `host:port`, which parses as a scheme). Report nothing rather than
|
|
39
|
+
// a fragment of a string whose parts we have not identified.
|
|
40
|
+
if (!parsed.hostname)
|
|
41
|
+
return {};
|
|
42
|
+
const scheme = parsed.protocol.replace(/:$/, "");
|
|
43
|
+
if (queryMovesEndpoint(parsed))
|
|
44
|
+
return { scheme, ambiguous: true };
|
|
45
|
+
return {
|
|
46
|
+
scheme,
|
|
47
|
+
endpoint: parsed.port ? `${parsed.hostname}:${parsed.port}` : parsed.hostname,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function redisReport(resolution) {
|
|
51
|
+
const { endpoint, scheme, ambiguous } = redisEndpoint(resolution.url);
|
|
52
|
+
return {
|
|
53
|
+
parsed: endpoint !== undefined || ambiguous === true,
|
|
54
|
+
ambiguous: ambiguous === true,
|
|
55
|
+
report: {
|
|
56
|
+
backend: "redis",
|
|
57
|
+
envName: resolution.envName,
|
|
58
|
+
...(endpoint === undefined ? {} : { endpoint }),
|
|
59
|
+
...(scheme === undefined ? {} : { scheme }),
|
|
60
|
+
...(resolution.fallback ? { fallback: true } : {}),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Build the boot event from the same env precedence the stores themselves use
|
|
66
|
+
* (`providerStateRedisResolutionFromEnv` / `providerCacheRedisResolutionFromEnv`),
|
|
67
|
+
* so the line can never describe a backend other than the one in use.
|
|
68
|
+
*/
|
|
69
|
+
export function providerStateBackendLogEvent(input) {
|
|
70
|
+
const warnings = [];
|
|
71
|
+
let state;
|
|
72
|
+
if (input.injectedState) {
|
|
73
|
+
state = { backend: "injected" };
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const resolution = providerStateRedisResolutionFromEnv();
|
|
77
|
+
if (resolution) {
|
|
78
|
+
const { report, parsed, ambiguous } = redisReport(resolution);
|
|
79
|
+
state = report;
|
|
80
|
+
if (!parsed)
|
|
81
|
+
warnings.push("state_redis_url_unparsed");
|
|
82
|
+
if (ambiguous)
|
|
83
|
+
warnings.push("state_redis_url_ambiguous_endpoint");
|
|
84
|
+
if (resolution.fallback)
|
|
85
|
+
warnings.push("state_redis_url_fallback");
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
state = { backend: input.allowMemoryFallback ? "memory" : "unsupported" };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const cacheResolution = providerCacheRedisResolutionFromEnv();
|
|
92
|
+
let cache;
|
|
93
|
+
if (cacheResolution) {
|
|
94
|
+
const { report, parsed, ambiguous } = redisReport(cacheResolution);
|
|
95
|
+
cache = report;
|
|
96
|
+
if (!parsed)
|
|
97
|
+
warnings.push("cache_redis_url_unparsed");
|
|
98
|
+
if (ambiguous)
|
|
99
|
+
warnings.push("cache_redis_url_ambiguous_endpoint");
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
cache = { backend: "memory" };
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
level: warnings.length > 0 ? "warn" : "info",
|
|
106
|
+
event: "provider_state_backend",
|
|
107
|
+
providerId: input.providerId,
|
|
108
|
+
state,
|
|
109
|
+
cache,
|
|
110
|
+
sdkVersion: input.sdkVersion,
|
|
111
|
+
...(warnings.length === 0 ? {} : { warnings }),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type DiagnosticRedactor } from "../runtime/diagnostic-redactor.js";
|
|
2
|
+
import { type CreateTraceContextOptions } from "../runtime/trace.js";
|
|
3
|
+
import type { TraceConfig } from "../types.js";
|
|
4
|
+
type EnvLike = Record<string, string | undefined>;
|
|
5
|
+
/** Server-only trace output policy. Shared programmatic trace callers stay in-memory. */
|
|
6
|
+
export declare function resolveServerTraceContextOptions(config: TraceConfig, resourceAttributes: Record<string, string>, env?: EnvLike, redact?: DiagnosticRedactor): CreateTraceContextOptions;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { isSensitiveFixtureKey, REDACTED_FIXTURE_VALUE } from "../fixture-sanitization.js";
|
|
2
|
+
import { redactedKeyAllocator, isRedactedKey, REDACTION_FAILED, redactDiagnosticText, } from "../runtime/diagnostic-redactor.js";
|
|
3
|
+
import { OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, resolveOTLPExportOptions, resolveOTLPResourceAttributes, } from "../runtime/otlp.js";
|
|
4
|
+
import { resolveTraceContextOptions, } from "../runtime/trace.js";
|
|
5
|
+
import { sanitizeSpanForOutput, sanitizeSpanNameForOutput, sanitizeTraceAttributes, } from "../trace-sanitization.js";
|
|
6
|
+
const TRACE_RESOURCE_ATTRIBUTE_SANITIZER = Symbol.for("@apifuse/provider-sdk/runtime/trace-resource-attribute-sanitizer");
|
|
7
|
+
// Warn once per environment object: process.env in production, each injected env in tests.
|
|
8
|
+
const warnedEnvironments = new WeakSet();
|
|
9
|
+
const warnedResourceEnvironments = new WeakSet();
|
|
10
|
+
function warnDiscardedResourceAttributes(env, resolution) {
|
|
11
|
+
if (resolution.discarded.length === 0 || warnedResourceEnvironments.has(env))
|
|
12
|
+
return;
|
|
13
|
+
warnedResourceEnvironments.add(env);
|
|
14
|
+
console.warn(`[apifuse] ${resolution.discarded.join(", ")} could not be parsed as an OTel key=value list and was ignored.`);
|
|
15
|
+
}
|
|
16
|
+
function warnExportDisabled(env, resolution) {
|
|
17
|
+
if (warnedEnvironments.has(env))
|
|
18
|
+
return;
|
|
19
|
+
warnedEnvironments.add(env);
|
|
20
|
+
console.warn(resolution.status === "unconfigured"
|
|
21
|
+
? `[apifuse] OTLP trace export is enabled but no endpoint is configured; set ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT} or ${OTEL_EXPORTER_OTLP_ENDPOINT}. Trace export is disabled.`
|
|
22
|
+
: `[apifuse] OTLP trace export is enabled but ${resolution.source} ${resolution.reason}. Trace export is disabled.`);
|
|
23
|
+
}
|
|
24
|
+
function resolveServerOTLPExportOptions(config, env) {
|
|
25
|
+
const resolution = resolveOTLPExportOptions({
|
|
26
|
+
endpoint: config.otlp?.endpoint ?? config.endpoint,
|
|
27
|
+
headers: config.otlp?.headers,
|
|
28
|
+
timeout: config.otlp?.timeout,
|
|
29
|
+
}, env);
|
|
30
|
+
if (resolution.status === "resolved")
|
|
31
|
+
return resolution.options;
|
|
32
|
+
warnExportDisabled(env, resolution);
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Per-request attributes carry client-supplied values (request_id) and get the full attribute
|
|
37
|
+
* sanitizer, exactly as on the console path. Operator-configured attributes from the process
|
|
38
|
+
* environment are identifiers rather than request data: their values are kept, with control
|
|
39
|
+
* characters neutralized, length bounded, and secret-named keys redacted.
|
|
40
|
+
*/
|
|
41
|
+
function resolveExportResourceAttributes(requestAttributes, env, redact) {
|
|
42
|
+
const resolution = resolveOTLPResourceAttributes({}, env);
|
|
43
|
+
warnDiscardedResourceAttributes(env, resolution);
|
|
44
|
+
const operatorAttributes = resolution.attributes;
|
|
45
|
+
const requestKeys = new Set(Object.keys(requestAttributes));
|
|
46
|
+
return {
|
|
47
|
+
// Keep the raw snapshot private until export. A credential registered after
|
|
48
|
+
// trace creation must be matched before any key or value is bounded.
|
|
49
|
+
attributes: { ...operatorAttributes, ...requestAttributes },
|
|
50
|
+
sanitize(attributes) {
|
|
51
|
+
const nextKey = redactedKeyAllocator(Object.keys(attributes));
|
|
52
|
+
const sanitizedOperatorAttributes = {};
|
|
53
|
+
const rawRequestAttributes = {};
|
|
54
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
55
|
+
const unchangedOperatorValue = !requestKeys.has(key) && operatorAttributes[key] === value;
|
|
56
|
+
if (unchangedOperatorValue) {
|
|
57
|
+
const redactedKey = isRedactedKey(key) ? key : redactDiagnosticText(key, redact);
|
|
58
|
+
const keyChanged = redactedKey !== key;
|
|
59
|
+
const sanitizedKey = keyChanged ? nextKey() : sanitizeSpanNameForOutput(key);
|
|
60
|
+
sanitizedOperatorAttributes[sanitizedKey] = keyChanged
|
|
61
|
+
? redactedKey === REDACTION_FAILED
|
|
62
|
+
? REDACTION_FAILED
|
|
63
|
+
: REDACTED_FIXTURE_VALUE
|
|
64
|
+
: isSensitiveFixtureKey(key)
|
|
65
|
+
? REDACTED_FIXTURE_VALUE
|
|
66
|
+
: sanitizeSpanNameForOutput(value, redact);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
rawRequestAttributes[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const sanitizedRequestAttributes = Object.fromEntries(Object.entries(sanitizeTraceAttributes(rawRequestAttributes, redact, Object.keys(sanitizedOperatorAttributes))).map(([key, value]) => [key, String(value)]));
|
|
73
|
+
return { ...sanitizedOperatorAttributes, ...sanitizedRequestAttributes };
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Server-only trace output policy. Shared programmatic trace callers stay in-memory. */
|
|
78
|
+
export function resolveServerTraceContextOptions(config, resourceAttributes, env = process.env, redact) {
|
|
79
|
+
const resolved = resolveTraceContextOptions(config);
|
|
80
|
+
const outputEnabled = config.enabled !== false && config.exporter !== "none";
|
|
81
|
+
const consoleHook = outputEnabled && (config.exporter === "console" || config.exporter === "json")
|
|
82
|
+
? (span) => console.log(JSON.stringify(sanitizeSpanForOutput(span, resourceAttributes, redact)))
|
|
83
|
+
: undefined;
|
|
84
|
+
const onSpan = consoleHook && resolved.onSpan
|
|
85
|
+
? (span) => {
|
|
86
|
+
consoleHook(span);
|
|
87
|
+
resolved.onSpan?.(span);
|
|
88
|
+
}
|
|
89
|
+
: (consoleHook ?? resolved.onSpan);
|
|
90
|
+
const exportOptions = outputEnabled && config.exporter === "otlp"
|
|
91
|
+
? resolveServerOTLPExportOptions(config, env)
|
|
92
|
+
: undefined;
|
|
93
|
+
const exportResources = exportOptions
|
|
94
|
+
? resolveExportResourceAttributes(resourceAttributes, env, redact)
|
|
95
|
+
: undefined;
|
|
96
|
+
if (exportResources) {
|
|
97
|
+
Object.defineProperty(exportResources.attributes, TRACE_RESOURCE_ATTRIBUTE_SANITIZER, { value: exportResources.sanitize });
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
maxSpans: resolved.maxSpans,
|
|
101
|
+
onSpan,
|
|
102
|
+
...(redact ? { redact } : {}),
|
|
103
|
+
...(exportOptions
|
|
104
|
+
? {
|
|
105
|
+
exportOptions,
|
|
106
|
+
resourceAttributes: exportResources?.attributes,
|
|
107
|
+
sanitizeSpanForExport: (span) => sanitizeSpanForOutput(span, undefined, redact),
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare const ConnectionModeSchema: z.ZodEnum<{
|
|
|
4
4
|
none: "none";
|
|
5
5
|
oauth2: "oauth2";
|
|
6
6
|
"platform-managed": "platform-managed";
|
|
7
|
+
oauth2_proxied: "oauth2_proxied";
|
|
7
8
|
}>;
|
|
8
9
|
export declare const OperationConnectionSchema: z.ZodObject<{
|
|
9
10
|
id: z.ZodString;
|
|
@@ -12,6 +13,7 @@ export declare const OperationConnectionSchema: z.ZodObject<{
|
|
|
12
13
|
none: "none";
|
|
13
14
|
oauth2: "oauth2";
|
|
14
15
|
"platform-managed": "platform-managed";
|
|
16
|
+
oauth2_proxied: "oauth2_proxied";
|
|
15
17
|
}>;
|
|
16
18
|
secrets: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
17
19
|
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -29,12 +31,14 @@ export declare const OperationRequestSchema: z.ZodObject<{
|
|
|
29
31
|
none: "none";
|
|
30
32
|
oauth2: "oauth2";
|
|
31
33
|
"platform-managed": "platform-managed";
|
|
34
|
+
oauth2_proxied: "oauth2_proxied";
|
|
32
35
|
}>;
|
|
33
36
|
secrets: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
34
37
|
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
35
38
|
metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
36
39
|
externalRef: z.ZodString;
|
|
37
40
|
}, z.core.$strip>>;
|
|
41
|
+
tenantId: z.ZodOptional<z.ZodString>;
|
|
38
42
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
39
43
|
trace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
40
44
|
}, z.core.$strip>;
|
|
@@ -42,6 +46,13 @@ export declare const ErrorEnvelopeSchema: z.ZodObject<{
|
|
|
42
46
|
code: z.ZodString;
|
|
43
47
|
message: z.ZodString;
|
|
44
48
|
requestId: z.ZodOptional<z.ZodString>;
|
|
49
|
+
retryable: z.ZodBoolean;
|
|
50
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
51
|
+
client: "client";
|
|
52
|
+
upstream_rule: "upstream_rule";
|
|
53
|
+
upstream_failure: "upstream_failure";
|
|
54
|
+
apifuse: "apifuse";
|
|
55
|
+
}>>;
|
|
45
56
|
fix: z.ZodOptional<z.ZodString>;
|
|
46
57
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
47
58
|
}, z.core.$strip>;
|
|
@@ -55,21 +66,21 @@ export declare const OperationSuccessResponseSchema: z.ZodObject<{
|
|
|
55
66
|
stale: z.ZodBoolean;
|
|
56
67
|
keys: z.ZodArray<z.ZodString>;
|
|
57
68
|
source: z.ZodOptional<z.ZodEnum<{
|
|
58
|
-
loader: "loader";
|
|
59
|
-
memory: "memory";
|
|
60
69
|
mixed: "mixed";
|
|
61
70
|
redis: "redis";
|
|
71
|
+
memory: "memory";
|
|
72
|
+
loader: "loader";
|
|
62
73
|
}>>;
|
|
63
74
|
}, z.core.$strip>>;
|
|
64
75
|
retry: z.ZodOptional<z.ZodObject<{
|
|
65
76
|
attempts: z.ZodNumber;
|
|
66
77
|
retries: z.ZodNumber;
|
|
67
78
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
68
|
-
aggressive_read: "aggressive_read";
|
|
69
79
|
off: "off";
|
|
70
|
-
rate_limit_aware: "rate_limit_aware";
|
|
71
|
-
safe_read: "safe_read";
|
|
72
80
|
transport_transient: "transport_transient";
|
|
81
|
+
safe_read: "safe_read";
|
|
82
|
+
aggressive_read: "aggressive_read";
|
|
83
|
+
rate_limit_aware: "rate_limit_aware";
|
|
73
84
|
}>>;
|
|
74
85
|
transport: z.ZodEnum<{
|
|
75
86
|
native: "native";
|
|
@@ -84,6 +95,13 @@ export declare const OperationErrorResponseSchema: z.ZodObject<{
|
|
|
84
95
|
code: z.ZodString;
|
|
85
96
|
message: z.ZodString;
|
|
86
97
|
requestId: z.ZodOptional<z.ZodString>;
|
|
98
|
+
retryable: z.ZodBoolean;
|
|
99
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
100
|
+
client: "client";
|
|
101
|
+
upstream_rule: "upstream_rule";
|
|
102
|
+
upstream_failure: "upstream_failure";
|
|
103
|
+
apifuse: "apifuse";
|
|
104
|
+
}>>;
|
|
87
105
|
fix: z.ZodOptional<z.ZodString>;
|
|
88
106
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
89
107
|
}, z.core.$strip>;
|
|
@@ -98,6 +116,9 @@ export declare const AuthFlowRequestSchema: z.ZodObject<{
|
|
|
98
116
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
99
117
|
input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
100
118
|
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
119
|
+
engine: z.ZodOptional<z.ZodObject<{
|
|
120
|
+
egressLease: z.ZodOptional<z.ZodString>;
|
|
121
|
+
}, z.core.$strict>>;
|
|
101
122
|
connection: z.ZodOptional<z.ZodObject<{
|
|
102
123
|
id: z.ZodString;
|
|
103
124
|
mode: z.ZodEnum<{
|
|
@@ -105,6 +126,7 @@ export declare const AuthFlowRequestSchema: z.ZodObject<{
|
|
|
105
126
|
none: "none";
|
|
106
127
|
oauth2: "oauth2";
|
|
107
128
|
"platform-managed": "platform-managed";
|
|
129
|
+
oauth2_proxied: "oauth2_proxied";
|
|
108
130
|
}>;
|
|
109
131
|
secrets: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
110
132
|
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -115,12 +137,22 @@ export declare const AuthFlowRequestSchema: z.ZodObject<{
|
|
|
115
137
|
export declare const AuthFlowSuccessResponseSchema: z.ZodObject<{
|
|
116
138
|
data: z.ZodUnknown;
|
|
117
139
|
contextPatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodUnknown>>>;
|
|
140
|
+
engine: z.ZodOptional<z.ZodObject<{
|
|
141
|
+
egressLease: z.ZodOptional<z.ZodString>;
|
|
142
|
+
}, z.core.$strict>>;
|
|
118
143
|
}, z.core.$strip>;
|
|
119
144
|
export declare const AuthFlowErrorResponseSchema: z.ZodObject<{
|
|
120
145
|
error: z.ZodObject<{
|
|
121
146
|
code: z.ZodString;
|
|
122
147
|
message: z.ZodString;
|
|
123
148
|
requestId: z.ZodOptional<z.ZodString>;
|
|
149
|
+
retryable: z.ZodBoolean;
|
|
150
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
151
|
+
client: "client";
|
|
152
|
+
upstream_rule: "upstream_rule";
|
|
153
|
+
upstream_failure: "upstream_failure";
|
|
154
|
+
apifuse: "apifuse";
|
|
155
|
+
}>>;
|
|
124
156
|
fix: z.ZodOptional<z.ZodString>;
|
|
125
157
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
126
158
|
}, z.core.$strip>;
|
package/dist/server/types.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { PROVIDER_ERROR_SOURCES } from "../observability.js";
|
|
2
3
|
import { HttpRetryPreset } from "../types.js";
|
|
3
|
-
export const ConnectionModeSchema = z.enum([
|
|
4
|
+
export const ConnectionModeSchema = z.enum([
|
|
5
|
+
"oauth2",
|
|
6
|
+
"oauth2_proxied",
|
|
7
|
+
"credentials",
|
|
8
|
+
"platform-managed",
|
|
9
|
+
"none",
|
|
10
|
+
]);
|
|
4
11
|
export const OperationConnectionSchema = z.object({
|
|
5
12
|
id: z.string(),
|
|
6
13
|
mode: ConnectionModeSchema,
|
|
@@ -14,6 +21,13 @@ export const OperationRequestSchema = z.object({
|
|
|
14
21
|
input: z.record(z.string(), z.unknown()),
|
|
15
22
|
connectionId: z.string().optional(),
|
|
16
23
|
connection: OperationConnectionSchema.optional(),
|
|
24
|
+
/**
|
|
25
|
+
* Gateway-asserted principal scope: the organization id for customer
|
|
26
|
+
* subjects, the service-account id for platform service accounts. Absent
|
|
27
|
+
* on direct calls and self-test. Trusted exactly like `connectionId`; it is
|
|
28
|
+
* never derived from caller headers or `input`.
|
|
29
|
+
*/
|
|
30
|
+
tenantId: z.string().optional(),
|
|
17
31
|
headers: z.record(z.string(), z.string()).optional(),
|
|
18
32
|
trace: z.record(z.string(), z.string()).optional(),
|
|
19
33
|
});
|
|
@@ -21,6 +35,11 @@ export const ErrorEnvelopeSchema = z.object({
|
|
|
21
35
|
code: z.string(),
|
|
22
36
|
message: z.string(),
|
|
23
37
|
requestId: z.string().optional(),
|
|
38
|
+
retryable: z.boolean(),
|
|
39
|
+
// Who stopped the request (honest-provider-error-contract); optional so
|
|
40
|
+
// older peers (stateful forwarding owners) remain parseable. Derived from
|
|
41
|
+
// the PROVIDER_ERROR_SOURCES registry so the enum cannot drift.
|
|
42
|
+
source: z.enum(PROVIDER_ERROR_SOURCES).optional(),
|
|
24
43
|
fix: z.string().optional(),
|
|
25
44
|
details: z.unknown().optional(),
|
|
26
45
|
});
|
|
@@ -73,10 +92,24 @@ export const AuthFlowRequestSchema = z.object({
|
|
|
73
92
|
headers: z.record(z.string(), z.string()).optional(),
|
|
74
93
|
input: z.record(z.string(), z.unknown()).optional(),
|
|
75
94
|
context: z.record(z.string(), z.unknown()).optional(),
|
|
95
|
+
/** Opaque engine state. This is never projected into FlowContext or provider contextPatch. */
|
|
96
|
+
engine: z
|
|
97
|
+
.object({
|
|
98
|
+
egressLease: z.string().min(1).max(16_384).optional(),
|
|
99
|
+
})
|
|
100
|
+
.strict()
|
|
101
|
+
.optional(),
|
|
76
102
|
connection: OperationConnectionSchema.optional(),
|
|
77
103
|
});
|
|
78
104
|
export const AuthFlowSuccessResponseSchema = z.object({
|
|
79
105
|
data: z.unknown(),
|
|
80
106
|
contextPatch: z.record(z.string(), z.unknown().nullable()).optional(),
|
|
107
|
+
/** Opaque engine state to carry verbatim to the next auth turn. */
|
|
108
|
+
engine: z
|
|
109
|
+
.object({
|
|
110
|
+
egressLease: z.string().min(1).max(16_384).optional(),
|
|
111
|
+
})
|
|
112
|
+
.strict()
|
|
113
|
+
.optional(),
|
|
81
114
|
});
|
|
82
115
|
export const AuthFlowErrorResponseSchema = OperationErrorResponseSchema;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type StatefulControlPlaneOperation = "resolve" | "acquire" | "renew" | "release";
|
|
2
|
+
export declare class StatefulRoutingDeadlineError extends Error {
|
|
3
|
+
readonly requestId: string;
|
|
4
|
+
readonly deadlineAt: string;
|
|
5
|
+
constructor(requestId: string, deadlineAt: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class StatefulControlPlaneError extends Error {
|
|
8
|
+
readonly code: string;
|
|
9
|
+
readonly operation: StatefulControlPlaneOperation;
|
|
10
|
+
readonly status?: number;
|
|
11
|
+
readonly cause?: unknown;
|
|
12
|
+
constructor(input: {
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly message: string;
|
|
15
|
+
readonly operation: StatefulControlPlaneOperation;
|
|
16
|
+
readonly status?: number;
|
|
17
|
+
readonly cause?: unknown;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class StatefulRoutingDeadlineError extends Error {
|
|
2
|
+
requestId;
|
|
3
|
+
deadlineAt;
|
|
4
|
+
constructor(requestId, deadlineAt) {
|
|
5
|
+
super(`Stateful operation request ${requestId} deadline has expired.`);
|
|
6
|
+
this.name = "StatefulRoutingDeadlineError";
|
|
7
|
+
this.requestId = requestId;
|
|
8
|
+
this.deadlineAt = deadlineAt;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class StatefulControlPlaneError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
operation;
|
|
14
|
+
status;
|
|
15
|
+
cause;
|
|
16
|
+
constructor(input) {
|
|
17
|
+
super(input.message);
|
|
18
|
+
this.name = "StatefulControlPlaneError";
|
|
19
|
+
this.code = input.code;
|
|
20
|
+
this.operation = input.operation;
|
|
21
|
+
this.status = input.status;
|
|
22
|
+
this.cause = input.cause;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ProviderEventDeliveryFailureRecorder } from "./provider-event-delivery-failures.js";
|
|
2
|
+
import type { ProviderEventPublisher, ProviderEventPublishOptions, PublishAck } from "./provider-event-pipeline.js";
|
|
3
|
+
import { type ProviderEventMetricEmitter } from "./provider-event-pipeline-metrics.js";
|
|
4
|
+
import type { ProviderEvent } from "./provider-events.js";
|
|
5
|
+
type FetchTransport = (url: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
6
|
+
export type HttpProviderEventEmitterOptions = {
|
|
7
|
+
readonly baseUrl: string;
|
|
8
|
+
readonly secret: string;
|
|
9
|
+
readonly fetch?: FetchTransport;
|
|
10
|
+
readonly clock?: () => Date;
|
|
11
|
+
readonly random?: () => number;
|
|
12
|
+
readonly metricEmitter?: ProviderEventMetricEmitter;
|
|
13
|
+
readonly failureRecorder?: ProviderEventDeliveryFailureRecorder;
|
|
14
|
+
readonly maxBufferedEvents?: number;
|
|
15
|
+
readonly retryBaseMs?: number;
|
|
16
|
+
readonly retryMaxMs?: number;
|
|
17
|
+
readonly maxAttempts?: number;
|
|
18
|
+
readonly jitterRatio?: number;
|
|
19
|
+
};
|
|
20
|
+
export type ProviderEventFlushReport = {
|
|
21
|
+
/** Events delivered during this emitter's lifetime. */
|
|
22
|
+
readonly delivered: number;
|
|
23
|
+
/** Events permanently dropped during this emitter's lifetime. */
|
|
24
|
+
readonly failed: number;
|
|
25
|
+
/** Events still buffered when flush returned. */
|
|
26
|
+
readonly pending: number;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Provider-pod HTTP publication with a bounded best-effort delivery guarantee and at-least-once
|
|
30
|
+
* transport retries. This is not durable at-least-once delivery: buffered events can be lost if
|
|
31
|
+
* the process is killed. Graceful shutdown should drain the in-memory buffer with flush().
|
|
32
|
+
*/
|
|
33
|
+
export declare class HttpProviderEventEmitter implements ProviderEventPublisher {
|
|
34
|
+
#private;
|
|
35
|
+
constructor(options: HttpProviderEventEmitterOptions);
|
|
36
|
+
publish(event: ProviderEvent, options: ProviderEventPublishOptions): PublishAck;
|
|
37
|
+
pendingCount(): number;
|
|
38
|
+
flush(timeoutMs?: number): Promise<ProviderEventFlushReport>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|