@apifuse/provider-sdk 2.2.0-beta.7 → 2.2.0-beta.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORING.md +943 -51
- package/CHANGELOG.md +273 -1
- package/LICENSE +21 -0
- package/README.md +117 -29
- package/SUBMISSION.md +3 -2
- package/bin/apifuse-check.ts +293 -13
- package/bin/apifuse-dev.ts +42 -19
- package/bin/apifuse-migrate-deployment.ts +200 -0
- package/bin/apifuse-migrate-operation-declaration.ts +55 -0
- package/bin/apifuse-migrate-shape.ts +202 -0
- package/bin/apifuse-pack-check.ts +19 -6
- package/bin/apifuse-pack-smoke.ts +57 -2
- package/bin/apifuse-pack-types.ts +736 -38
- package/bin/apifuse-perf.ts +59 -23
- package/bin/apifuse-record.ts +923 -94
- package/bin/apifuse-submit-check.ts +2313 -281
- package/bin/apifuse-test.ts +3 -1
- package/bin/submit-check-delimited-text.ts +50 -0
- package/dist/auth-turn/index.d.ts +3 -3
- package/dist/auth-turn/index.js +1 -1
- package/dist/auth.d.ts +14 -0
- package/dist/auth.js +67 -0
- package/dist/ceremonies/index.d.ts +16 -0
- package/dist/ceremonies/index.js +141 -36
- package/dist/cli/commands.d.ts +1 -1
- package/dist/cli/commands.js +30 -0
- package/dist/cli/create.d.ts +1 -1
- package/dist/cli/create.js +8 -2
- package/dist/cli/deployment-intent.d.ts +178 -0
- package/dist/cli/deployment-intent.js +277 -0
- package/dist/cli/local-connection.d.ts +111 -0
- package/dist/cli/local-connection.js +151 -0
- package/dist/cli/migrate-deployment-intent.d.ts +132 -0
- package/dist/cli/migrate-deployment-intent.js +1552 -0
- package/dist/cli/migrate-operation-declaration.d.ts +70 -0
- package/dist/cli/migrate-operation-declaration.js +2206 -0
- package/dist/cli/migrate-operation-shape.d.ts +44 -0
- package/dist/cli/migrate-operation-shape.js +113 -0
- package/dist/cli/migrate-provider-shape.d.ts +56 -0
- package/dist/cli/migrate-provider-shape.js +580 -0
- package/dist/cli/resolver-runtime.d.ts +21 -0
- package/dist/cli/resolver-runtime.js +31 -0
- package/dist/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
- package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
- package/dist/cli/templates/provider/README.md.tpl +41 -19
- package/dist/cli/templates/provider/index.ts.tpl +6 -3
- package/dist/cli/templates/provider/operations/ping.ts.tpl +4 -1
- package/dist/cli/templates/provider/provider.json.tpl +6 -0
- package/dist/config/loader.d.ts +202 -16
- package/dist/config/loader.js +491 -141
- package/dist/contract-serialization.js +4 -8
- package/dist/contract-types.d.ts +12 -5
- package/dist/contract.js +24 -10
- package/dist/declaration-validation.d.ts +34 -0
- package/dist/declaration-validation.js +305 -0
- package/dist/define.d.ts +71 -29
- package/dist/define.js +807 -69
- package/dist/dev.d.ts +5 -0
- package/dist/dev.js +8 -1
- package/dist/engine.d.ts +129 -0
- package/dist/engine.js +209 -0
- package/dist/error-observability.d.ts +7 -0
- package/dist/error-observability.js +61 -0
- package/dist/error-resolution.d.ts +18 -0
- package/dist/error-resolution.js +243 -0
- package/dist/errors.d.ts +74 -0
- package/dist/errors.js +99 -0
- package/dist/fixture-sanitization.d.ts +28 -0
- package/dist/fixture-sanitization.js +371 -0
- package/dist/handle-meta.d.ts +90 -0
- package/dist/handle-meta.js +73 -0
- package/dist/handle.d.ts +226 -0
- package/dist/handle.js +345 -0
- package/dist/health-scenario.d.ts +1901 -0
- package/dist/health-scenario.js +653 -0
- package/dist/i18n/catalog.js +21 -1
- package/dist/i18n/error-messages.d.ts +86 -0
- package/dist/i18n/error-messages.js +192 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/keys.d.ts +12 -0
- package/dist/i18n/keys.js +76 -5
- package/dist/i18n/operation-locale-namespace.d.ts +2 -0
- package/dist/i18n/operation-locale-namespace.js +7 -0
- package/dist/index.d.ts +40 -15
- package/dist/index.js +29 -11
- package/dist/lint.d.ts +43 -11
- package/dist/lint.js +2512 -177
- package/dist/native-address.d.ts +43 -0
- package/dist/native-address.js +281 -0
- package/dist/native-egress-policy.d.ts +31 -0
- package/dist/native-egress-policy.js +288 -0
- package/dist/observability.d.ts +5 -2
- package/dist/observability.js +48 -1
- package/dist/provider.d.ts +18 -8
- package/dist/provider.js +11 -6
- package/dist/runtime/auth-flow.d.ts +6 -1
- package/dist/runtime/auth-flow.js +8 -0
- package/dist/runtime/bounded-expiring-map.d.ts +21 -0
- package/dist/runtime/bounded-expiring-map.js +64 -0
- package/dist/runtime/browser-telemetry-binding.d.ts +5 -0
- package/dist/runtime/browser-telemetry-binding.js +83 -0
- package/dist/runtime/browser-telemetry.d.ts +76 -0
- package/dist/runtime/browser-telemetry.js +165 -0
- package/dist/runtime/browser.d.ts +4 -0
- package/dist/runtime/browser.js +688 -83
- package/dist/runtime/cache-telemetry.d.ts +71 -0
- package/dist/runtime/cache-telemetry.js +177 -0
- package/dist/runtime/cache.d.ts +3 -0
- package/dist/runtime/cache.js +245 -23
- package/dist/runtime/capability-response.d.ts +3 -0
- package/dist/runtime/capability-response.js +56 -0
- package/dist/runtime/capability-telemetry.d.ts +46 -0
- package/dist/runtime/capability-telemetry.js +68 -0
- package/dist/runtime/chrome149-header-order.d.ts +58 -0
- package/dist/runtime/chrome149-header-order.js +289 -0
- package/dist/runtime/diagnostic-env-values.d.ts +5 -0
- package/dist/runtime/diagnostic-env-values.js +57 -0
- package/dist/runtime/diagnostic-env.d.ts +14 -0
- package/dist/runtime/diagnostic-env.js +44 -0
- package/dist/runtime/diagnostic-redactor.d.ts +54 -0
- package/dist/runtime/diagnostic-redactor.js +571 -0
- package/dist/runtime/egress-lease.d.ts +65 -0
- package/dist/runtime/egress-lease.js +236 -0
- package/dist/runtime/engine-mode.d.ts +74 -0
- package/dist/runtime/engine-mode.js +152 -0
- package/dist/runtime/env.js +14 -1
- package/dist/runtime/executor.d.ts +3 -2
- package/dist/runtime/executor.js +23 -26
- package/dist/runtime/handle-wordlist.d.ts +43 -0
- package/dist/runtime/handle-wordlist.js +256 -0
- package/dist/runtime/handle.d.ts +71 -0
- package/dist/runtime/handle.js +908 -0
- package/dist/runtime/http-telemetry-binding.d.ts +10 -0
- package/dist/runtime/http-telemetry-binding.js +152 -0
- package/dist/runtime/http-telemetry-guard.d.ts +16 -0
- package/dist/runtime/http-telemetry-guard.js +202 -0
- package/dist/runtime/http-telemetry.d.ts +104 -0
- package/dist/runtime/http-telemetry.js +190 -0
- package/dist/runtime/http.d.ts +34 -0
- package/dist/runtime/http.js +680 -121
- package/dist/runtime/insights.js +2 -2
- package/dist/runtime/instrumentation.d.ts +2 -2
- package/dist/runtime/instrumentation.js +462 -19
- package/dist/runtime/native-network-errors.d.ts +33 -0
- package/dist/runtime/native-network-errors.js +69 -0
- package/dist/runtime/native-network.d.ts +105 -0
- package/dist/runtime/native-network.js +1433 -0
- package/dist/runtime/native-telemetry.d.ts +142 -0
- package/dist/runtime/native-telemetry.js +231 -0
- package/dist/runtime/ocr-telemetry.d.ts +82 -0
- package/dist/runtime/ocr-telemetry.js +192 -0
- package/dist/runtime/ocr.d.ts +29 -0
- package/dist/runtime/ocr.js +468 -0
- package/dist/runtime/otlp.d.ts +71 -2
- package/dist/runtime/otlp.js +398 -16
- package/dist/runtime/provider.d.ts +7 -0
- package/dist/runtime/provider.js +14 -0
- package/dist/runtime/proxy-errors.js +6 -2
- package/dist/runtime/proxy-nodemaven.d.ts +56 -0
- package/dist/runtime/proxy-nodemaven.js +147 -0
- package/dist/runtime/proxy-retry-policy.d.ts +4 -1
- package/dist/runtime/proxy-retry-policy.js +11 -2
- package/dist/runtime/proxy-telemetry.d.ts +133 -3
- package/dist/runtime/proxy-telemetry.js +218 -70
- package/dist/runtime/redirect-hop-headers.d.ts +19 -0
- package/dist/runtime/redirect-hop-headers.js +58 -0
- package/dist/runtime/redirects.d.ts +61 -0
- package/dist/runtime/redirects.js +149 -0
- package/dist/runtime/redis.d.ts +1 -1
- package/dist/runtime/redis.js +4 -2
- package/dist/runtime/request-options.d.ts +75 -1
- package/dist/runtime/request-options.js +588 -0
- package/dist/runtime/request-telemetry.d.ts +70 -0
- package/dist/runtime/request-telemetry.js +229 -0
- package/dist/runtime/resolver-config.d.ts +13 -0
- package/dist/runtime/resolver-config.js +14 -0
- package/dist/runtime/resolver-public.d.ts +3 -0
- package/dist/runtime/resolver-public.js +1 -0
- package/dist/runtime/resolver-runtime-options.d.ts +14 -0
- package/dist/runtime/resolver-runtime-options.js +33 -0
- package/dist/runtime/resolver-shared.d.ts +24 -0
- package/dist/runtime/resolver-shared.js +69 -0
- package/dist/runtime/resolver-span-attributes.d.ts +34 -0
- package/dist/runtime/resolver-span-attributes.js +93 -0
- package/dist/runtime/resolver-telemetry.d.ts +135 -0
- package/dist/runtime/resolver-telemetry.js +204 -0
- package/dist/runtime/resolver-usage.d.ts +32 -0
- package/dist/runtime/resolver-usage.js +54 -0
- package/dist/runtime/resolver-vendors/bindings.d.ts +53 -0
- package/dist/runtime/resolver-vendors/bindings.js +45 -0
- package/dist/runtime/resolver-vendors/browser.d.ts +24 -0
- package/dist/runtime/resolver-vendors/browser.js +423 -0
- package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
- package/dist/runtime/resolver-vendors/capsolver.js +544 -0
- package/dist/runtime/resolver-vendors/hosts.d.ts +23 -0
- package/dist/runtime/resolver-vendors/hosts.js +68 -0
- package/dist/runtime/resolver-vendors/hypersolutions.d.ts +27 -0
- package/dist/runtime/resolver-vendors/hypersolutions.js +369 -0
- package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
- package/dist/runtime/resolver-vendors/twocaptcha.js +425 -0
- package/dist/runtime/resolver-vendors/types.d.ts +125 -0
- package/dist/runtime/resolver-vendors/types.js +106 -0
- package/dist/runtime/resolver.d.ts +79 -0
- package/dist/runtime/resolver.js +1094 -0
- package/dist/runtime/state-telemetry.d.ts +79 -0
- package/dist/runtime/state-telemetry.js +194 -0
- package/dist/runtime/state.d.ts +10 -1
- package/dist/runtime/state.js +322 -82
- package/dist/runtime/stealth-akamai-sbsd.d.ts +54 -0
- package/dist/runtime/stealth-akamai-sbsd.js +142 -0
- package/dist/runtime/stealth-cookies.d.ts +24 -0
- package/dist/runtime/stealth-cookies.js +131 -0
- package/dist/runtime/stealth-owned-headers.d.ts +39 -0
- package/dist/runtime/stealth-owned-headers.js +57 -0
- package/dist/runtime/stealth-telemetry.d.ts +92 -0
- package/dist/runtime/stealth-telemetry.js +179 -0
- package/dist/runtime/stealth.d.ts +45 -6
- package/dist/runtime/stealth.js +1775 -320
- package/dist/runtime/stt-telemetry.d.ts +77 -0
- package/dist/runtime/stt-telemetry.js +176 -0
- package/dist/runtime/stt.js +18 -19
- package/dist/runtime/timeout.d.ts +5 -0
- package/dist/runtime/timeout.js +12 -0
- package/dist/runtime/trace-config.d.ts +12 -0
- package/dist/runtime/trace-config.js +62 -0
- package/dist/runtime/trace.d.ts +17 -0
- package/dist/runtime/trace.js +176 -25
- package/dist/runtime-boundary-lint.d.ts +137 -0
- package/dist/runtime-boundary-lint.js +590 -0
- package/dist/schema.d.ts +20 -0
- package/dist/schema.js +72 -2
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +1 -1
- package/dist/server/error-observability.d.ts +1 -0
- package/dist/server/error-observability.js +1 -0
- package/dist/server/error-stack-frames.d.ts +35 -0
- package/dist/server/error-stack-frames.js +219 -0
- package/dist/server/index.d.ts +21 -2
- package/dist/server/index.js +11 -2
- package/dist/server/runtime-diagnostics.d.ts +165 -0
- package/dist/server/runtime-diagnostics.js +360 -0
- package/dist/server/sdk-version.d.ts +3 -0
- package/dist/server/sdk-version.js +19 -0
- package/dist/server/self-test-input-tokens.d.ts +2 -1
- package/dist/server/self-test-input-tokens.js +18 -14
- package/dist/server/self-test-redaction.js +8 -33
- package/dist/server/self-test.d.ts +18 -3
- package/dist/server/self-test.js +139 -76
- package/dist/server/sensitive-values.d.ts +26 -0
- package/dist/server/sensitive-values.js +137 -0
- package/dist/server/serve-implementation.d.ts +285 -0
- package/dist/server/serve-implementation.js +3172 -0
- package/dist/server/serve.d.ts +1 -75
- package/dist/server/serve.js +1 -1170
- package/dist/server/state-backend-report.d.ts +70 -0
- package/dist/server/state-backend-report.js +113 -0
- package/dist/server/trace-output.d.ts +7 -0
- package/dist/server/trace-output.js +111 -0
- package/dist/server/types.d.ts +37 -5
- package/dist/server/types.js +34 -1
- package/dist/stateful/errors.d.ts +19 -0
- package/dist/stateful/errors.js +24 -0
- package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
- package/dist/stateful/http-provider-event-emitter.js +237 -0
- package/dist/stateful/http-session-owner-registry.d.ts +44 -0
- package/dist/stateful/http-session-owner-registry.js +210 -0
- package/dist/stateful/index.d.ts +18 -0
- package/dist/stateful/index.js +18 -0
- package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
- package/dist/stateful/provider-event-delivery-failures.js +43 -0
- package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
- package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
- package/dist/stateful/provider-event-pipeline.d.ts +50 -0
- package/dist/stateful/provider-event-pipeline.js +1 -0
- package/dist/stateful/provider-events.d.ts +101 -0
- package/dist/stateful/provider-events.js +289 -0
- package/dist/stateful/session-key.d.ts +15 -0
- package/dist/stateful/session-key.js +86 -0
- package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
- package/dist/stateful/stateful-provider-adapter-context.js +42 -0
- package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
- package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
- package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
- package/dist/stateful/stateful-provider-adapter.js +287 -0
- package/dist/stateful/stateful-provider-observability.d.ts +62 -0
- package/dist/stateful/stateful-provider-observability.js +161 -0
- package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
- package/dist/stateful/stateful-provider-owner-forwarder.js +237 -0
- package/dist/stateful/stateful-provider-runtime-context.d.ts +35 -0
- package/dist/stateful/stateful-provider-runtime-context.js +61 -0
- package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
- package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
- package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
- package/dist/stateful/stateful-provider-session-routing.js +345 -0
- package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
- package/dist/stateful/stateful-provider-session-runtime.js +245 -0
- package/dist/stateful-signing.d.ts +18 -0
- package/dist/stateful-signing.js +27 -0
- package/dist/stealth/profiles.d.ts +15 -4
- package/dist/stealth/profiles.js +169 -211
- package/dist/stream-evidence.d.ts +74 -0
- package/dist/stream-evidence.js +785 -0
- package/dist/stream.js +7 -1
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/run.d.ts +32 -2
- package/dist/testing/run.js +509 -25
- package/dist/trace-sanitization.d.ts +6 -0
- package/dist/trace-sanitization.js +68 -0
- package/dist/types.d.ts +899 -210
- package/dist/types.js +1 -0
- package/dist/typescript-module.d.ts +39 -0
- package/dist/typescript-module.js +72 -0
- package/package.json +52 -6
- package/src/auth-turn/index.ts +1 -1
- package/src/auth.ts +118 -0
- package/src/ceremonies/index.ts +189 -46
- package/src/cli/commands.ts +37 -0
- package/src/cli/create.ts +8 -2
- package/src/cli/deployment-intent.ts +364 -0
- package/src/cli/local-connection.ts +221 -0
- package/src/cli/migrate-deployment-intent.ts +1908 -0
- package/src/cli/migrate-operation-declaration.ts +3026 -0
- package/src/cli/migrate-operation-shape.ts +184 -0
- package/src/cli/migrate-provider-shape.ts +778 -0
- package/src/cli/resolver-runtime.ts +72 -0
- package/src/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
- package/src/cli/templates/provider/Dockerfile.tpl +1 -1
- package/src/cli/templates/provider/README.md.tpl +41 -19
- package/src/cli/templates/provider/index.ts.tpl +6 -3
- package/src/cli/templates/provider/operations/ping.ts.tpl +4 -1
- package/src/cli/templates/provider/provider.json.tpl +6 -0
- package/src/config/loader.ts +774 -181
- package/src/contract-serialization.ts +5 -7
- package/src/contract-types.ts +12 -5
- package/src/contract.ts +24 -10
- package/src/declaration-validation.ts +376 -0
- package/src/define.ts +1105 -131
- package/src/dev.ts +13 -1
- package/src/engine.ts +390 -0
- package/src/error-observability.ts +64 -0
- package/src/error-resolution.ts +269 -0
- package/src/errors.ts +157 -0
- package/src/fixture-sanitization.ts +422 -0
- package/src/handle-meta.ts +143 -0
- package/src/handle.ts +694 -0
- package/src/health-scenario.ts +960 -0
- package/src/i18n/catalog.ts +23 -1
- package/src/i18n/error-messages.ts +255 -0
- package/src/i18n/index.ts +1 -0
- package/src/i18n/keys.ts +80 -6
- package/src/i18n/operation-locale-namespace.ts +10 -0
- package/src/index.ts +390 -23
- package/src/lint.ts +2975 -234
- package/src/native-address.ts +340 -0
- package/src/native-egress-policy.ts +358 -0
- package/src/observability.ts +51 -1
- package/src/provider.ts +207 -27
- package/src/runtime/auth-flow.ts +15 -0
- package/src/runtime/bounded-expiring-map.ts +67 -0
- package/src/runtime/browser-telemetry-binding.ts +92 -0
- package/src/runtime/browser-telemetry.ts +289 -0
- package/src/runtime/browser.ts +882 -99
- package/src/runtime/cache-telemetry.ts +247 -0
- package/src/runtime/cache.ts +258 -22
- package/src/runtime/capability-response.ts +53 -0
- package/src/runtime/capability-telemetry.ts +101 -0
- package/src/runtime/chrome149-header-order.ts +330 -0
- package/src/runtime/diagnostic-env-values.ts +56 -0
- package/src/runtime/diagnostic-env.ts +65 -0
- package/src/runtime/diagnostic-redactor.ts +668 -0
- package/src/runtime/egress-lease.ts +341 -0
- package/src/runtime/engine-mode.ts +233 -0
- package/src/runtime/env.ts +15 -1
- package/src/runtime/executor.ts +39 -32
- package/src/runtime/handle-wordlist.ts +266 -0
- package/src/runtime/handle.ts +1180 -0
- package/src/runtime/http-telemetry-binding.ts +162 -0
- package/src/runtime/http-telemetry-guard.ts +208 -0
- package/src/runtime/http-telemetry.ts +292 -0
- package/src/runtime/http.ts +896 -150
- package/src/runtime/insights.ts +2 -2
- package/src/runtime/instrumentation.ts +628 -28
- package/src/runtime/native-network-errors.ts +99 -0
- package/src/runtime/native-network.ts +1853 -0
- package/src/runtime/native-telemetry.ts +366 -0
- package/src/runtime/ocr-telemetry.ts +308 -0
- package/src/runtime/ocr.ts +564 -0
- package/src/runtime/otlp.ts +468 -21
- package/src/runtime/provider.ts +15 -0
- package/src/runtime/proxy-errors.ts +12 -4
- package/src/runtime/proxy-nodemaven.ts +222 -0
- package/src/runtime/proxy-retry-policy.ts +12 -1
- package/src/runtime/proxy-telemetry.ts +358 -103
- package/src/runtime/redirect-hop-headers.ts +71 -0
- package/src/runtime/redirects.ts +215 -0
- package/src/runtime/redis.ts +7 -2
- package/src/runtime/request-options.ts +728 -1
- package/src/runtime/request-telemetry.ts +375 -0
- package/src/runtime/resolver-config.ts +18 -0
- package/src/runtime/resolver-public.ts +44 -0
- package/src/runtime/resolver-runtime-options.ts +50 -0
- package/src/runtime/resolver-shared.ts +113 -0
- package/src/runtime/resolver-span-attributes.ts +139 -0
- package/src/runtime/resolver-telemetry.ts +362 -0
- package/src/runtime/resolver-usage.ts +99 -0
- package/src/runtime/resolver-vendors/bindings.ts +61 -0
- package/src/runtime/resolver-vendors/browser.ts +591 -0
- package/src/runtime/resolver-vendors/capsolver.ts +727 -0
- package/src/runtime/resolver-vendors/hosts.ts +81 -0
- package/src/runtime/resolver-vendors/hypersolutions.ts +480 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +555 -0
- package/src/runtime/resolver-vendors/types.ts +261 -0
- package/src/runtime/resolver.ts +1543 -0
- package/src/runtime/state-telemetry.ts +298 -0
- package/src/runtime/state.ts +435 -89
- package/src/runtime/stealth-akamai-sbsd.ts +207 -0
- package/src/runtime/stealth-cookies.ts +155 -0
- package/src/runtime/stealth-owned-headers.ts +67 -0
- package/src/runtime/stealth-telemetry.ts +309 -0
- package/src/runtime/stealth.ts +2275 -372
- package/src/runtime/stt-telemetry.ts +282 -0
- package/src/runtime/stt.ts +96 -91
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace-config.ts +78 -0
- package/src/runtime/trace.ts +257 -35
- package/src/runtime-boundary-lint.ts +707 -0
- package/src/schema.ts +80 -2
- package/src/serve.ts +6 -1
- package/src/server/error-observability.ts +1 -0
- package/src/server/error-stack-frames.ts +214 -0
- package/src/server/index.ts +184 -2
- package/src/server/runtime-diagnostics.ts +522 -0
- package/src/server/sdk-version.ts +22 -0
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test-redaction.ts +10 -40
- package/src/server/self-test.ts +205 -89
- package/src/server/sensitive-values.ts +211 -0
- package/src/server/serve-implementation.ts +4596 -0
- package/src/server/serve.ts +1 -1685
- package/src/server/state-backend-report.ts +185 -0
- package/src/server/trace-output.ts +189 -0
- package/src/server/types.ts +34 -1
- package/src/stateful/README.md +146 -0
- package/src/stateful/errors.ts +35 -0
- package/src/stateful/http-provider-event-emitter.ts +314 -0
- package/src/stateful/http-session-owner-registry.ts +306 -0
- package/src/stateful/index.ts +18 -0
- package/src/stateful/provider-event-delivery-failures.ts +80 -0
- package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
- package/src/stateful/provider-event-pipeline.ts +61 -0
- package/src/stateful/provider-events.ts +462 -0
- package/src/stateful/session-key.ts +111 -0
- package/src/stateful/stateful-provider-adapter-context.ts +59 -0
- package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
- package/src/stateful/stateful-provider-adapter.ts +562 -0
- package/src/stateful/stateful-provider-observability.ts +261 -0
- package/src/stateful/stateful-provider-owner-forwarder.ts +310 -0
- package/src/stateful/stateful-provider-runtime-context.ts +96 -0
- package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
- package/src/stateful/stateful-provider-session-routing.ts +546 -0
- package/src/stateful/stateful-provider-session-runtime.ts +403 -0
- package/src/stateful-signing.ts +46 -0
- package/src/stealth/profiles.ts +212 -231
- package/src/stream-evidence.ts +988 -0
- package/src/stream.ts +8 -1
- package/src/testing/index.ts +10 -1
- package/src/testing/run.ts +685 -19
- package/src/trace-sanitization.ts +110 -0
- package/src/types.ts +1014 -273
- package/src/typescript-module.ts +100 -0
- package/dist/choice-token.d.ts +0 -24
- package/dist/choice-token.js +0 -74
- package/dist/runtime/choice.d.ts +0 -15
- package/dist/runtime/choice.js +0 -413
- package/src/choice-token.ts +0 -165
- package/src/runtime/choice.ts +0 -686
package/src/runtime/trace.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
|
|
2
|
+
import { sanitizeSpanNameForOutput } from "../trace-sanitization.js";
|
|
3
3
|
import type {
|
|
4
4
|
TraceContext as BaseTraceContext,
|
|
5
5
|
TraceAttributeValue,
|
|
6
6
|
TraceConfig,
|
|
7
7
|
TraceSpan,
|
|
8
8
|
} from "../types.js";
|
|
9
|
+
import {
|
|
10
|
+
type DiagnosticRedactor,
|
|
11
|
+
diagnosticStructuredRedactor,
|
|
12
|
+
redactDiagnosticAttributeKey,
|
|
13
|
+
copyDiagnosticAttributeTypes,
|
|
14
|
+
redactedKeyAllocator,
|
|
15
|
+
isRedactedKey,
|
|
16
|
+
redactCriticalDiagnosticText,
|
|
17
|
+
diagnosticAttributeRedactor,
|
|
18
|
+
REDACTION_FAILED,
|
|
19
|
+
redactDiagnosticText,
|
|
20
|
+
} from "./diagnostic-redactor.js";
|
|
9
21
|
import { exportSpansOTLP, type OTLPExportOptions } from "./otlp.js";
|
|
22
|
+
import { REDACTED_QUERY_VALUE } from "./request-options.js";
|
|
10
23
|
|
|
11
24
|
export type SpanAttributeValue = TraceAttributeValue;
|
|
12
25
|
|
|
@@ -19,8 +32,17 @@ export interface TraceContext extends BaseTraceContext {
|
|
|
19
32
|
export interface CreateTraceContextOptions {
|
|
20
33
|
maxSpans?: number;
|
|
21
34
|
onSpan?: (span: Span) => void;
|
|
35
|
+
/** Redacts diagnostic attribute values and errors before recording or calling onSpan. */
|
|
36
|
+
redact?: DiagnosticRedactor;
|
|
22
37
|
exportOptions?: OTLPExportOptions;
|
|
23
38
|
resourceAttributes?: Record<string, string>;
|
|
39
|
+
/** W3C-compatible 32-character lowercase hexadecimal trace id used for export. */
|
|
40
|
+
traceId?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Applied to a detached copy of each span immediately before OTLP export; never touches
|
|
43
|
+
* getSpans() or onSpan. Returning nothing (or throwing) drops that export batch.
|
|
44
|
+
*/
|
|
45
|
+
sanitizeSpanForExport?: (span: Span) => Span | undefined;
|
|
24
46
|
}
|
|
25
47
|
|
|
26
48
|
type SpanHookOptions<T> = {
|
|
@@ -35,12 +57,24 @@ type PendingSpan = {
|
|
|
35
57
|
startedAt: number;
|
|
36
58
|
parentId?: string;
|
|
37
59
|
sequence: number;
|
|
38
|
-
attributes: Record<string, SpanAttributeValue>;
|
|
60
|
+
attributes: Record<string, SpanAttributeValue | bigint>;
|
|
39
61
|
};
|
|
40
62
|
|
|
41
63
|
type CompletedSpanEntry = {
|
|
42
64
|
sequence: number;
|
|
43
65
|
span: Span;
|
|
66
|
+
/** Set once the span has been handed to the exporter so no batch re-sends it. */
|
|
67
|
+
exported: boolean;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const TRACE_RESOURCE_ATTRIBUTE_SANITIZER = Symbol.for(
|
|
71
|
+
"@apifuse/provider-sdk/runtime/trace-resource-attribute-sanitizer",
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
type ResourceAttributesWithSanitizer = Record<string, string> & {
|
|
75
|
+
[TRACE_RESOURCE_ATTRIBUTE_SANITIZER]?: (
|
|
76
|
+
attributes: Record<string, string>,
|
|
77
|
+
) => Record<string, string>;
|
|
44
78
|
};
|
|
45
79
|
|
|
46
80
|
export interface TraceRecorder {
|
|
@@ -48,13 +82,31 @@ export interface TraceRecorder {
|
|
|
48
82
|
}
|
|
49
83
|
|
|
50
84
|
export const TRACE_RECORDER = Symbol.for("@apifuse/provider-sdk/runtime/trace-recorder");
|
|
85
|
+
const TRACE_EXPORT_METADATA = Symbol.for("@apifuse/provider-sdk/runtime/trace-export-metadata");
|
|
86
|
+
|
|
87
|
+
type TraceExportMetadata = {
|
|
88
|
+
update(input: { traceId?: string; resourceAttributes?: Record<string, string> }): void;
|
|
89
|
+
};
|
|
51
90
|
|
|
52
91
|
type InternalTraceContext = TraceContext & {
|
|
53
92
|
[TRACE_RECORDER]: TraceRecorder;
|
|
54
|
-
|
|
55
|
-
_resourceAttributes?: Record<string, string>;
|
|
93
|
+
[TRACE_EXPORT_METADATA]: TraceExportMetadata;
|
|
56
94
|
};
|
|
57
95
|
|
|
96
|
+
function assertValidTraceId(traceId: string): void {
|
|
97
|
+
if (!/^[0-9a-f]{32}$/.test(traceId) || /^0{32}$/.test(traceId)) {
|
|
98
|
+
throw new TypeError("traceId must be 32 lowercase hexadecimal characters and non-zero");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Updates request metadata before its pending root span completes and exports. */
|
|
103
|
+
export function updateTraceContextExportMetadata(
|
|
104
|
+
trace: BaseTraceContext,
|
|
105
|
+
input: { traceId?: string; resourceAttributes?: Record<string, string> },
|
|
106
|
+
): void {
|
|
107
|
+
(trace as Partial<InternalTraceContext>)[TRACE_EXPORT_METADATA]?.update(input);
|
|
108
|
+
}
|
|
109
|
+
|
|
58
110
|
function buildOTLPExportOptions(config?: TraceConfig): OTLPExportOptions | undefined {
|
|
59
111
|
if (config?.exporter !== "otlp") {
|
|
60
112
|
return undefined;
|
|
@@ -80,30 +132,108 @@ export function resolveTraceContextOptions(config?: TraceConfig): CreateTraceCon
|
|
|
80
132
|
};
|
|
81
133
|
}
|
|
82
134
|
|
|
83
|
-
function normalizeAttributeValue(
|
|
84
|
-
|
|
85
|
-
|
|
135
|
+
function normalizeAttributeValue(
|
|
136
|
+
value: unknown,
|
|
137
|
+
redact?: DiagnosticRedactor,
|
|
138
|
+
retainBigints = false,
|
|
139
|
+
): SpanAttributeValue | bigint | undefined {
|
|
140
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
141
|
+
// Typed columns are contracts: unlike string tokens, number/boolean/bigint
|
|
142
|
+
// values only consult the registry at >=8 characters in string form.
|
|
143
|
+
const text = String(value);
|
|
144
|
+
if (text.length < 8) return value;
|
|
145
|
+
const redacted = redactDiagnosticText(text, diagnosticStructuredRedactor(redact));
|
|
146
|
+
return redacted === text ? value : redacted;
|
|
147
|
+
}
|
|
148
|
+
if (typeof value === "bigint") {
|
|
149
|
+
// Bigints are not valid OTLP attribute primitives, so retain their prior
|
|
150
|
+
// string normalization while still checking their diagnostic form.
|
|
151
|
+
const text = String(value);
|
|
152
|
+
if (text.length < 8) return retainBigints ? value : text;
|
|
153
|
+
const redacted = redactDiagnosticText(text, diagnosticStructuredRedactor(redact));
|
|
154
|
+
return retainBigints && redacted === text ? value : redacted;
|
|
86
155
|
}
|
|
87
156
|
|
|
88
157
|
if (value === null || value === undefined) {
|
|
89
158
|
return undefined;
|
|
90
159
|
}
|
|
91
160
|
|
|
92
|
-
return String(value);
|
|
161
|
+
return redactDiagnosticText(String(value), redact);
|
|
93
162
|
}
|
|
94
163
|
|
|
164
|
+
function normalizeAttributes(
|
|
165
|
+
attributes: Record<string, unknown> | undefined,
|
|
166
|
+
redact: DiagnosticRedactor | undefined,
|
|
167
|
+
retainBigints: true,
|
|
168
|
+
): Record<string, SpanAttributeValue | bigint>;
|
|
95
169
|
function normalizeAttributes(
|
|
96
170
|
attributes?: Record<string, unknown>,
|
|
97
|
-
|
|
171
|
+
redact?: DiagnosticRedactor,
|
|
172
|
+
): Record<string, SpanAttributeValue>;
|
|
173
|
+
function normalizeAttributes(
|
|
174
|
+
attributes?: Record<string, unknown>,
|
|
175
|
+
redact?: DiagnosticRedactor,
|
|
176
|
+
retainBigints = false,
|
|
177
|
+
): Record<string, SpanAttributeValue | bigint> {
|
|
98
178
|
if (!attributes) {
|
|
99
179
|
return {};
|
|
100
180
|
}
|
|
101
181
|
|
|
182
|
+
const nextKey = redactedKeyAllocator(Object.keys(attributes));
|
|
102
183
|
const normalizedEntries = Object.entries(attributes)
|
|
103
|
-
.map(([key, value]) =>
|
|
104
|
-
|
|
184
|
+
.map(([key, value]) => {
|
|
185
|
+
const redactedKey = isRedactedKey(key) ? key : redactDiagnosticAttributeKey(key, redact);
|
|
186
|
+
const keyChanged = redactedKey !== key;
|
|
187
|
+
const normalizedKey = keyChanged ? nextKey() : key;
|
|
188
|
+
// Once a key changes, its original sensitivity classification is no
|
|
189
|
+
// longer available to later output sanitizers. Suppress the value here.
|
|
190
|
+
const normalizedValue = keyChanged
|
|
191
|
+
? redactedKey === REDACTION_FAILED
|
|
192
|
+
? REDACTION_FAILED
|
|
193
|
+
: REDACTED_QUERY_VALUE
|
|
194
|
+
: normalizeAttributeValue(
|
|
195
|
+
value,
|
|
196
|
+
diagnosticAttributeRedactor(key, redact, value),
|
|
197
|
+
retainBigints,
|
|
198
|
+
);
|
|
199
|
+
return [normalizedKey, normalizedValue] as const;
|
|
200
|
+
})
|
|
201
|
+
.filter(
|
|
202
|
+
(entry): entry is readonly [string, SpanAttributeValue | bigint] => entry[1] !== undefined,
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
return copyDiagnosticAttributeTypes(attributes, Object.fromEntries(normalizedEntries));
|
|
206
|
+
}
|
|
105
207
|
|
|
106
|
-
|
|
208
|
+
function prepareResourceAttributesForExport(
|
|
209
|
+
attributes: Record<string, string> | undefined,
|
|
210
|
+
redact?: DiagnosticRedactor,
|
|
211
|
+
sanitize?: (attributes: Record<string, string>) => Record<string, string>,
|
|
212
|
+
): Record<string, string> | undefined {
|
|
213
|
+
if (!attributes) return undefined;
|
|
214
|
+
if (sanitize) {
|
|
215
|
+
const sanitized = sanitize({ ...attributes });
|
|
216
|
+
if (!sanitized || typeof sanitized !== "object") {
|
|
217
|
+
throw new Error("resource attribute sanitizer returned no attributes");
|
|
218
|
+
}
|
|
219
|
+
return sanitized;
|
|
220
|
+
}
|
|
221
|
+
const nextKey = redactedKeyAllocator(Object.keys(attributes));
|
|
222
|
+
return Object.fromEntries(
|
|
223
|
+
Object.entries(attributes).map(([key, value]) => {
|
|
224
|
+
const redactedKey = isRedactedKey(key) ? key : redactDiagnosticAttributeKey(key, redact);
|
|
225
|
+
const keyChanged = redactedKey !== key;
|
|
226
|
+
const sanitizedKey = keyChanged ? nextKey() : sanitizeSpanNameForOutput(key);
|
|
227
|
+
return [
|
|
228
|
+
sanitizedKey,
|
|
229
|
+
keyChanged
|
|
230
|
+
? redactedKey === REDACTION_FAILED
|
|
231
|
+
? REDACTION_FAILED
|
|
232
|
+
: REDACTED_QUERY_VALUE
|
|
233
|
+
: sanitizeSpanNameForOutput(value, diagnosticAttributeRedactor(key, redact, value)),
|
|
234
|
+
];
|
|
235
|
+
}),
|
|
236
|
+
);
|
|
107
237
|
}
|
|
108
238
|
|
|
109
239
|
function insertCompletedSpan(
|
|
@@ -124,29 +254,107 @@ function insertCompletedSpan(
|
|
|
124
254
|
}
|
|
125
255
|
}
|
|
126
256
|
|
|
257
|
+
/** Hands the hook a copy whose attributes are detached from the recorded span; a hook that returns nothing fails closed. */
|
|
258
|
+
function prepareSpanForExport(
|
|
259
|
+
span: Span,
|
|
260
|
+
sanitize: CreateTraceContextOptions["sanitizeSpanForExport"],
|
|
261
|
+
): Span {
|
|
262
|
+
const copy: Span = {
|
|
263
|
+
...span,
|
|
264
|
+
attributes: copyDiagnosticAttributeTypes(span.attributes, { ...span.attributes }),
|
|
265
|
+
};
|
|
266
|
+
if (!sanitize) return copy;
|
|
267
|
+
const sanitized = sanitize(copy);
|
|
268
|
+
if (!sanitized || typeof sanitized !== "object") {
|
|
269
|
+
throw new Error("sanitizeSpanForExport returned no span");
|
|
270
|
+
}
|
|
271
|
+
return sanitized;
|
|
272
|
+
}
|
|
273
|
+
|
|
127
274
|
export function getTraceRecorder(trace: BaseTraceContext): TraceRecorder | null {
|
|
128
275
|
return (trace as Partial<InternalTraceContext>)[TRACE_RECORDER] ?? null;
|
|
129
276
|
}
|
|
130
277
|
|
|
278
|
+
const droppedOTLPSpans = new Map<string, number>();
|
|
279
|
+
|
|
280
|
+
/** Internal, read-only process counters; no reset can re-arm a warning. */
|
|
281
|
+
export function getDroppedOTLPSpanCount(reason: string): number {
|
|
282
|
+
return droppedOTLPSpans.get(reason) ?? 0;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function warnDroppedOTLPSpans(reason: string, count: number): void {
|
|
286
|
+
const previous = getDroppedOTLPSpanCount(reason);
|
|
287
|
+
const total = previous + count;
|
|
288
|
+
droppedOTLPSpans.set(reason, total);
|
|
289
|
+
if (previous !== 0) return;
|
|
290
|
+
try {
|
|
291
|
+
console.warn(`[apifuse] OTLP export skipped; reason=${reason}; dropped_spans=${total}`);
|
|
292
|
+
} catch {
|
|
293
|
+
// Warning sinks are best-effort. The counter/latch survives a failed sink.
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
131
297
|
export function createTraceContext(options: CreateTraceContextOptions = {}): TraceContext {
|
|
298
|
+
if (options.traceId !== undefined) assertValidTraceId(options.traceId);
|
|
132
299
|
const maxSpans = options.maxSpans ?? 1000;
|
|
133
300
|
const completed: CompletedSpanEntry[] = [];
|
|
134
301
|
const activeSpanStorage = new AsyncLocalStorage<PendingSpan | undefined>();
|
|
135
302
|
let sequence = 0;
|
|
136
|
-
|
|
137
|
-
|
|
303
|
+
// Export configuration (which can carry collector credentials) stays in this closure;
|
|
304
|
+
// the context object handed to provider code never exposes it.
|
|
305
|
+
const exportOptions = options.exportOptions;
|
|
306
|
+
const resourceAttributeOptions = options.resourceAttributes as
|
|
307
|
+
| ResourceAttributesWithSanitizer
|
|
308
|
+
| undefined;
|
|
309
|
+
const exportResourceAttributes = resourceAttributeOptions
|
|
310
|
+
? { ...resourceAttributeOptions }
|
|
311
|
+
: undefined;
|
|
312
|
+
const exportResourceAttributeSanitizer =
|
|
313
|
+
resourceAttributeOptions?.[TRACE_RESOURCE_ATTRIBUTE_SANITIZER];
|
|
314
|
+
// One trace id per context so every export batch of this request shares it and
|
|
315
|
+
// two processes can never mint the same id.
|
|
316
|
+
let exportTraceId = options.traceId ?? crypto.randomUUID().replace(/-/g, "");
|
|
317
|
+
let exportScheduled = false;
|
|
318
|
+
|
|
319
|
+
// One pending batch per context: roots completing before the flush share it, and a span is
|
|
320
|
+
// handed to the exporter exactly once, so later roots never re-send earlier spans.
|
|
138
321
|
const scheduleExport = () => {
|
|
139
|
-
if (!
|
|
322
|
+
if (!exportOptions || exportScheduled) {
|
|
140
323
|
return;
|
|
141
324
|
}
|
|
325
|
+
exportScheduled = true;
|
|
142
326
|
|
|
143
|
-
const spans = completed.map((entry) => ({ ...entry.span }));
|
|
144
327
|
setImmediate(() => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
328
|
+
exportScheduled = false;
|
|
329
|
+
const pending = completed.filter((entry) => !entry.exported);
|
|
330
|
+
for (const entry of pending) entry.exported = true;
|
|
331
|
+
if (pending.length === 0) return;
|
|
332
|
+
// Sanitization runs off the request path; a faulty sanitizer drops the batch, never the request.
|
|
333
|
+
let spans: Span[];
|
|
334
|
+
let resourceAttributes: Record<string, string> | undefined;
|
|
335
|
+
try {
|
|
336
|
+
spans = pending.map((entry) =>
|
|
337
|
+
prepareSpanForExport(entry.span, options.sanitizeSpanForExport),
|
|
338
|
+
);
|
|
339
|
+
resourceAttributes = prepareResourceAttributesForExport(
|
|
340
|
+
exportResourceAttributes,
|
|
341
|
+
options.redact,
|
|
342
|
+
exportResourceAttributeSanitizer,
|
|
343
|
+
);
|
|
344
|
+
} catch {
|
|
345
|
+
try {
|
|
346
|
+
console.warn("[apifuse] OTLP export skipped; span sanitization failed.");
|
|
347
|
+
} catch {
|
|
348
|
+
// A broken diagnostic sink must not escape this detached callback.
|
|
349
|
+
}
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
// A matching trace ID cannot be replaced with non-hex text on the wire. Emit less.
|
|
353
|
+
if (redactCriticalDiagnosticText(exportTraceId, options.redact) !== exportTraceId) {
|
|
354
|
+
warnDroppedOTLPSpans("unverifiable_trace_id", pending.length);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
void exportSpansOTLP(spans, exportOptions, resourceAttributes, exportTraceId);
|
|
150
358
|
});
|
|
151
359
|
};
|
|
152
360
|
|
|
@@ -154,11 +362,11 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
|
|
|
154
362
|
async runSpan(name, fn, spanOptions = {}) {
|
|
155
363
|
const pendingSpan: PendingSpan = {
|
|
156
364
|
id: crypto.randomUUID(),
|
|
157
|
-
name,
|
|
365
|
+
name: redactCriticalDiagnosticText(name, options.redact),
|
|
158
366
|
startedAt: Date.now(),
|
|
159
367
|
parentId: activeSpanStorage.getStore()?.id,
|
|
160
368
|
sequence: sequence++,
|
|
161
|
-
attributes: normalizeAttributes(spanOptions.attributes),
|
|
369
|
+
attributes: normalizeAttributes(spanOptions.attributes, options.redact, true),
|
|
162
370
|
};
|
|
163
371
|
|
|
164
372
|
const finalize = (
|
|
@@ -170,7 +378,7 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
|
|
|
170
378
|
const duration = endedAt - pendingSpan.startedAt;
|
|
171
379
|
const attributes = {
|
|
172
380
|
...pendingSpan.attributes,
|
|
173
|
-
...
|
|
381
|
+
...extraAttributes,
|
|
174
382
|
};
|
|
175
383
|
|
|
176
384
|
if (attributes.duration_ms === undefined) {
|
|
@@ -178,18 +386,25 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
|
|
|
178
386
|
}
|
|
179
387
|
|
|
180
388
|
const span: Span = {
|
|
181
|
-
id: pendingSpan.id,
|
|
182
|
-
|
|
389
|
+
id: redactCriticalDiagnosticText(pendingSpan.id, options.redact),
|
|
390
|
+
// Recheck at recording: harvest and live env reads may follow span start.
|
|
391
|
+
name: redactCriticalDiagnosticText(pendingSpan.name, options.redact),
|
|
183
392
|
startedAt: pendingSpan.startedAt,
|
|
184
393
|
endedAt,
|
|
185
394
|
duration_ms: duration,
|
|
186
395
|
status,
|
|
187
|
-
attributes,
|
|
188
|
-
...(error ? { error } : {}),
|
|
189
|
-
...(pendingSpan.parentId
|
|
396
|
+
attributes: normalizeAttributes(attributes, options.redact),
|
|
397
|
+
...(error ? { error: redactDiagnosticText(error, options.redact) } : {}),
|
|
398
|
+
...(pendingSpan.parentId
|
|
399
|
+
? { parentId: redactCriticalDiagnosticText(pendingSpan.parentId, options.redact) }
|
|
400
|
+
: {}),
|
|
190
401
|
};
|
|
191
402
|
|
|
192
|
-
insertCompletedSpan(
|
|
403
|
+
insertCompletedSpan(
|
|
404
|
+
completed,
|
|
405
|
+
{ sequence: pendingSpan.sequence, span, exported: false },
|
|
406
|
+
maxSpans,
|
|
407
|
+
);
|
|
193
408
|
options.onSpan?.(span);
|
|
194
409
|
|
|
195
410
|
if (!pendingSpan.parentId) {
|
|
@@ -213,18 +428,25 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
|
|
|
213
428
|
},
|
|
214
429
|
};
|
|
215
430
|
|
|
216
|
-
traceContext = {
|
|
431
|
+
const traceContext: InternalTraceContext = {
|
|
217
432
|
span(name, fn) {
|
|
218
433
|
return recorder.runSpan(name, fn);
|
|
219
434
|
},
|
|
220
435
|
getSpans() {
|
|
221
436
|
return completed.map((entry) => ({ ...entry.span }));
|
|
222
437
|
},
|
|
223
|
-
...(options.exportOptions ? { _exportOptions: options.exportOptions } : {}),
|
|
224
|
-
...(options.resourceAttributes
|
|
225
|
-
? { _resourceAttributes: { ...options.resourceAttributes } }
|
|
226
|
-
: {}),
|
|
227
438
|
[TRACE_RECORDER]: recorder,
|
|
439
|
+
[TRACE_EXPORT_METADATA]: {
|
|
440
|
+
update(input) {
|
|
441
|
+
if (input.traceId !== undefined) {
|
|
442
|
+
assertValidTraceId(input.traceId);
|
|
443
|
+
exportTraceId = input.traceId;
|
|
444
|
+
}
|
|
445
|
+
if (input.resourceAttributes !== undefined && exportResourceAttributes) {
|
|
446
|
+
Object.assign(exportResourceAttributes, input.resourceAttributes);
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
},
|
|
228
450
|
};
|
|
229
451
|
|
|
230
452
|
return traceContext;
|