@apifuse/provider-sdk 2.2.0-beta.5 → 2.2.0-beta.50
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 +537 -33
- package/CHANGELOG.md +201 -1
- package/README.md +83 -22
- package/SUBMISSION.md +2 -2
- package/bin/apifuse-check.ts +165 -11
- package/bin/apifuse-dev.ts +57 -13
- package/bin/apifuse-migrate-operation-declaration.ts +55 -0
- package/bin/apifuse-migrate-shape.ts +202 -0
- package/bin/apifuse-pack-check.ts +22 -2
- package/bin/apifuse-pack-smoke.ts +57 -2
- package/bin/apifuse-pack-types.ts +357 -38
- package/bin/apifuse-perf.ts +14 -13
- package/bin/apifuse-record.ts +709 -72
- package/bin/apifuse-submit-check.ts +2344 -324
- package/bin/apifuse-sync-assets.ts +117 -0
- 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 +27 -0
- package/dist/cli/create.d.ts +4 -1
- package/dist/cli/create.js +42 -37
- package/dist/cli/migrate-operation-declaration.d.ts +59 -0
- package/dist/cli/migrate-operation-declaration.js +1178 -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 +52 -0
- package/dist/cli/migrate-provider-shape.js +578 -0
- package/dist/cli/prompt-assets.d.ts +80 -0
- package/dist/cli/prompt-assets.js +743 -0
- package/dist/cli/templates/provider/AGENTS.md.tpl +17 -8
- package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
- package/dist/cli/templates/provider/README.md.tpl +5 -5
- 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 +179 -16
- package/dist/config/loader.js +435 -127
- 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 +33 -0
- package/dist/declaration-validation.js +266 -0
- package/dist/define.d.ts +66 -29
- package/dist/define.js +778 -69
- package/dist/dev.d.ts +3 -0
- package/dist/dev.js +1 -1
- package/dist/engine.d.ts +78 -0
- package/dist/engine.js +133 -0
- package/dist/error-observability.d.ts +7 -0
- package/dist/error-observability.js +61 -0
- package/dist/error-resolution.d.ts +4 -0
- package/dist/error-resolution.js +122 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.js +40 -0
- package/dist/fixture-sanitization.d.ts +28 -0
- package/dist/fixture-sanitization.js +227 -0
- package/dist/health-scenario.d.ts +1842 -0
- package/dist/health-scenario.js +624 -0
- package/dist/index.d.ts +21 -10
- package/dist/index.js +12 -7
- package/dist/lint.d.ts +23 -11
- package/dist/lint.js +572 -69
- 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 +10 -2
- package/dist/provider.js +4 -1
- package/dist/runtime/auth-flow.d.ts +5 -1
- package/dist/runtime/auth-flow.js +6 -0
- package/dist/runtime/browser.d.ts +1 -0
- package/dist/runtime/browser.js +492 -49
- package/dist/runtime/cache.d.ts +1 -0
- package/dist/runtime/cache.js +169 -15
- package/dist/runtime/choice-wordlist.d.ts +9 -0
- package/dist/runtime/choice-wordlist.js +138 -0
- package/dist/runtime/choice.d.ts +13 -1
- package/dist/runtime/choice.js +490 -102
- package/dist/runtime/chrome149-header-order.d.ts +58 -0
- package/dist/runtime/chrome149-header-order.js +289 -0
- package/dist/runtime/env.js +12 -0
- package/dist/runtime/executor.d.ts +3 -2
- package/dist/runtime/executor.js +26 -25
- package/dist/runtime/http.d.ts +1 -0
- package/dist/runtime/http.js +515 -53
- package/dist/runtime/insights.js +2 -2
- package/dist/runtime/instrumentation.d.ts +2 -2
- package/dist/runtime/instrumentation.js +366 -8
- 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 +96 -0
- package/dist/runtime/native-network.js +1232 -0
- package/dist/runtime/ocr.d.ts +29 -0
- package/dist/runtime/ocr.js +440 -0
- package/dist/runtime/otlp.d.ts +71 -2
- package/dist/runtime/otlp.js +397 -16
- package/dist/runtime/proxy-errors.js +6 -2
- package/dist/runtime/proxy-nodemaven.d.ts +56 -0
- package/dist/runtime/proxy-nodemaven.js +146 -0
- package/dist/runtime/proxy-telemetry.d.ts +80 -1
- package/dist/runtime/proxy-telemetry.js +154 -47
- package/dist/runtime/redirects.d.ts +29 -0
- package/dist/runtime/redirects.js +36 -0
- package/dist/runtime/redis.d.ts +1 -1
- package/dist/runtime/redis.js +4 -2
- package/dist/runtime/request-options.d.ts +68 -1
- package/dist/runtime/request-options.js +548 -0
- package/dist/runtime/resolver-config.d.ts +6 -0
- package/dist/runtime/resolver-config.js +6 -0
- package/dist/runtime/resolver-public.d.ts +1 -0
- package/dist/runtime/resolver-public.js +1 -0
- package/dist/runtime/resolver-shared.d.ts +14 -0
- package/dist/runtime/resolver-shared.js +12 -0
- package/dist/runtime/resolver-vendors/bindings.d.ts +48 -0
- package/dist/runtime/resolver-vendors/bindings.js +40 -0
- package/dist/runtime/resolver-vendors/browser.d.ts +22 -0
- package/dist/runtime/resolver-vendors/browser.js +377 -0
- package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
- package/dist/runtime/resolver-vendors/capsolver.js +531 -0
- package/dist/runtime/resolver-vendors/hosts.d.ts +2 -0
- package/dist/runtime/resolver-vendors/hosts.js +33 -0
- package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
- package/dist/runtime/resolver-vendors/twocaptcha.js +408 -0
- package/dist/runtime/resolver-vendors/types.d.ts +94 -0
- package/dist/runtime/resolver-vendors/types.js +96 -0
- package/dist/runtime/resolver.d.ts +72 -0
- package/dist/runtime/resolver.js +771 -0
- package/dist/runtime/secrets.d.ts +27 -0
- package/dist/runtime/secrets.js +51 -0
- package/dist/runtime/state.d.ts +3 -0
- package/dist/runtime/state.js +277 -71
- package/dist/runtime/stealth-cookies.d.ts +20 -0
- package/dist/runtime/stealth-cookies.js +111 -0
- package/dist/runtime/stealth.d.ts +41 -5
- package/dist/runtime/stealth.js +997 -291
- package/dist/runtime/stt.js +1 -12
- 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 +5 -0
- package/dist/runtime/trace.js +43 -10
- 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/index.d.ts +5 -2
- package/dist/server/index.js +2 -2
- 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.d.ts +14 -3
- package/dist/server/self-test.js +129 -58
- package/dist/server/serve-implementation.d.ts +230 -0
- package/dist/server/serve-implementation.js +2265 -0
- package/dist/server/serve.d.ts +1 -70
- package/dist/server/serve.js +1 -1131
- package/dist/server/trace-output.d.ts +6 -0
- package/dist/server/trace-output.js +79 -0
- package/dist/server/types.d.ts +30 -5
- package/dist/server/types.js +13 -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 +215 -0
- package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
- package/dist/stateful/stateful-provider-runtime-context.js +60 -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 +9 -4
- package/dist/stealth/profiles.js +160 -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 +489 -21
- package/dist/trace-sanitization.d.ts +5 -0
- package/dist/trace-sanitization.js +45 -0
- package/dist/types.d.ts +673 -131
- package/dist/types.js +1 -0
- package/package.json +45 -5
- package/src/auth-turn/index.ts +1 -1
- package/src/auth.ts +118 -0
- package/src/ceremonies/index.ts +189 -46
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/approval-override.ts.txt +6 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/codemod-syntax.ts.txt +3 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/connection-precedence.ts.txt +10 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/docs-conflict.ts.txt +8 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-map.ts.txt +5 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-operation.ts.txt +16 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-map.ts.txt +3 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoist-all.ts.txt +31 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoisted-const.ts.txt +11 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/imported-spread.ts.txt +11 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-map.ts.txt +11 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-cast-tail.ts.txt +21 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-ekitan.ts.txt +11 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-override.ts.txt +14 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/missing-english-locale.ts.txt +7 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/no-safety.ts.txt +6 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/non-literal.ts.txt +7 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/redundant-approval.ts.txt +6 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/safety-conflict.ts.txt +7 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/stream.ts.txt +7 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/tool-router-spread.ts.txt +15 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/unparseable.ts.txt +4 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/verbatim-template.ts.txt +12 -0
- package/src/cli/commands.ts +33 -0
- package/src/cli/create.ts +50 -37
- package/src/cli/migrate-operation-declaration.ts +1654 -0
- package/src/cli/migrate-operation-shape.ts +184 -0
- package/src/cli/migrate-provider-shape.ts +772 -0
- package/src/cli/prompt-assets.ts +865 -0
- package/src/cli/templates/provider/AGENTS.md.tpl +17 -8
- package/src/cli/templates/provider/Dockerfile.tpl +1 -1
- package/src/cli/templates/provider/README.md.tpl +5 -5
- 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 +690 -163
- 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 +330 -0
- package/src/define.ts +1048 -131
- package/src/dev.ts +4 -1
- package/src/engine.ts +279 -0
- package/src/error-observability.ts +64 -0
- package/src/error-resolution.ts +127 -0
- package/src/errors.ts +68 -0
- package/src/fixture-sanitization.ts +264 -0
- package/src/health-scenario.ts +875 -0
- package/src/index.ts +220 -13
- package/src/lint.ts +698 -90
- 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 +161 -3
- package/src/runtime/auth-flow.ts +12 -0
- package/src/runtime/browser.ts +661 -63
- package/src/runtime/cache.ts +189 -14
- package/src/runtime/choice-wordlist.ts +145 -0
- package/src/runtime/choice.ts +631 -120
- package/src/runtime/chrome149-header-order.ts +330 -0
- package/src/runtime/env.ts +13 -0
- package/src/runtime/executor.ts +43 -31
- package/src/runtime/http.ts +641 -61
- package/src/runtime/insights.ts +2 -2
- package/src/runtime/instrumentation.ts +520 -15
- package/src/runtime/native-network-errors.ts +99 -0
- package/src/runtime/native-network.ts +1605 -0
- package/src/runtime/ocr.ts +523 -0
- package/src/runtime/otlp.ts +467 -21
- package/src/runtime/proxy-errors.ts +12 -4
- package/src/runtime/proxy-nodemaven.ts +221 -0
- package/src/runtime/proxy-telemetry.ts +244 -75
- package/src/runtime/redirects.ts +66 -0
- package/src/runtime/redis.ts +7 -2
- package/src/runtime/request-options.ts +680 -1
- package/src/runtime/resolver-config.ts +6 -0
- package/src/runtime/resolver-public.ts +23 -0
- package/src/runtime/resolver-shared.ts +33 -0
- package/src/runtime/resolver-vendors/bindings.ts +56 -0
- package/src/runtime/resolver-vendors/browser.ts +533 -0
- package/src/runtime/resolver-vendors/capsolver.ts +707 -0
- package/src/runtime/resolver-vendors/hosts.ts +38 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +540 -0
- package/src/runtime/resolver-vendors/types.ts +212 -0
- package/src/runtime/resolver.ts +1157 -0
- package/src/runtime/secrets.ts +64 -0
- package/src/runtime/state.ts +394 -77
- package/src/runtime/stealth-cookies.ts +132 -0
- package/src/runtime/stealth.ts +1280 -336
- package/src/runtime/stt.ts +1 -19
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace-config.ts +78 -0
- package/src/runtime/trace.ts +57 -17
- package/src/serve.ts +6 -1
- package/src/server/error-observability.ts +1 -0
- package/src/server/index.ts +34 -2
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test.ts +191 -68
- package/src/server/serve-implementation.ts +3378 -0
- package/src/server/serve.ts +1 -1632
- package/src/server/trace-output.ts +129 -0
- package/src/server/types.ts +13 -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 +287 -0
- package/src/stateful/stateful-provider-runtime-context.ts +92 -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 +202 -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 +658 -15
- package/src/trace-sanitization.ts +63 -0
- package/src/types.ts +788 -174
- package/dist/cli/templates/provider/CLAUDE.md.tpl +0 -1
- package/src/cli/templates/provider/CLAUDE.md.tpl +0 -1
- /package/dist/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
package/dist/runtime/stt.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProviderError, TransportError, ValidationError } from "../errors.js";
|
|
2
|
+
import { createTimeoutController, isTimeoutLikeError } from "./timeout.js";
|
|
2
3
|
export const APIFUSE__STT__BACKEND_ENV = "APIFUSE__STT__BACKEND";
|
|
3
4
|
export const APIFUSE__STT__MODEL_ENV = "APIFUSE__STT__MODEL";
|
|
4
5
|
export const CLOUDFLARE_ACCOUNT_ID_ENV = "APIFUSE__CLOUDFLARE__ACCOUNT_ID";
|
|
@@ -112,12 +113,6 @@ function warnOrThrowUnsupportedOption(request, message) {
|
|
|
112
113
|
function normalizeCloudflareLanguage(language) {
|
|
113
114
|
return language?.split("-")[0]?.toLowerCase();
|
|
114
115
|
}
|
|
115
|
-
function isTimeoutLikeError(error) {
|
|
116
|
-
return (error instanceof Error &&
|
|
117
|
-
(error.name === "AbortError" ||
|
|
118
|
-
error.name === "TimeoutError" ||
|
|
119
|
-
/\b(timed out|timeout|deadline exceeded)\b/i.test(error.message)));
|
|
120
|
-
}
|
|
121
116
|
function toSttTransportError(error) {
|
|
122
117
|
if (error instanceof TransportError)
|
|
123
118
|
return error;
|
|
@@ -134,12 +129,6 @@ function toSttTransportError(error) {
|
|
|
134
129
|
cause: error instanceof Error ? error : undefined,
|
|
135
130
|
});
|
|
136
131
|
}
|
|
137
|
-
function createTimeoutController(signalTimeoutMs) {
|
|
138
|
-
const controller = new AbortController();
|
|
139
|
-
const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
|
|
140
|
-
timeout.unref?.();
|
|
141
|
-
return { controller, clear: () => clearTimeout(timeout) };
|
|
142
|
-
}
|
|
143
132
|
function toCloudflareInput(request) {
|
|
144
133
|
const prompt = resolveSttPrompt(request);
|
|
145
134
|
const input = {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function isTimeoutLikeError(error) {
|
|
2
|
+
return (error instanceof Error &&
|
|
3
|
+
(error.name === "AbortError" ||
|
|
4
|
+
error.name === "TimeoutError" ||
|
|
5
|
+
/\b(timed out|timeout|deadline exceeded)\b/i.test(error.message)));
|
|
6
|
+
}
|
|
7
|
+
export function createTimeoutController(signalTimeoutMs) {
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
|
|
10
|
+
timeout.unref?.();
|
|
11
|
+
return { controller, clear: () => clearTimeout(timeout) };
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TraceConfig } from "../types.js";
|
|
2
|
+
/** SDK-owned environment variable names for server trace output. */
|
|
3
|
+
export declare const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
|
|
4
|
+
export declare const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
|
|
5
|
+
type EnvLike = Record<string, string | undefined>;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve server trace output configuration from SDK-owned environment
|
|
8
|
+
* variables. Invalid exporter values fail closed so a provider cannot crash at
|
|
9
|
+
* startup because of an observability setting.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveTraceConfigFromEnv(env?: EnvLike): TraceConfig | undefined;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** SDK-owned environment variable names for server trace output. */
|
|
2
|
+
export const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
|
|
3
|
+
export const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
|
|
4
|
+
const TRACE_EXPORTER_LOOKUP = {
|
|
5
|
+
console: true,
|
|
6
|
+
json: true,
|
|
7
|
+
otlp: true,
|
|
8
|
+
none: true,
|
|
9
|
+
};
|
|
10
|
+
const TRACE_EXPORTERS = new Set(Object.keys(TRACE_EXPORTER_LOOKUP));
|
|
11
|
+
const emittedWarnings = new Set();
|
|
12
|
+
function warnOnce(key, message) {
|
|
13
|
+
if (emittedWarnings.has(key))
|
|
14
|
+
return;
|
|
15
|
+
emittedWarnings.add(key);
|
|
16
|
+
console.warn(message);
|
|
17
|
+
}
|
|
18
|
+
function parseEnabled(raw) {
|
|
19
|
+
if (raw === undefined)
|
|
20
|
+
return undefined;
|
|
21
|
+
switch (raw.trim().toLowerCase()) {
|
|
22
|
+
case "1":
|
|
23
|
+
case "true":
|
|
24
|
+
case "yes":
|
|
25
|
+
case "on":
|
|
26
|
+
return true;
|
|
27
|
+
case "0":
|
|
28
|
+
case "false":
|
|
29
|
+
case "no":
|
|
30
|
+
case "off":
|
|
31
|
+
return false;
|
|
32
|
+
default:
|
|
33
|
+
warnOnce(APIFUSE__TRACE__ENABLED, "[apifuse] Invalid APIFUSE__TRACE__ENABLED; falling back to disabled tracing.");
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve server trace output configuration from SDK-owned environment
|
|
39
|
+
* variables. Invalid exporter values fail closed so a provider cannot crash at
|
|
40
|
+
* startup because of an observability setting.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveTraceConfigFromEnv(env = process.env) {
|
|
43
|
+
const enabledRaw = env[APIFUSE__TRACE__ENABLED];
|
|
44
|
+
const exporterRaw = env[APIFUSE__TRACE__EXPORTER];
|
|
45
|
+
if (enabledRaw === undefined && exporterRaw === undefined) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const enabled = parseEnabled(enabledRaw);
|
|
49
|
+
const normalizedExporter = exporterRaw?.trim().toLowerCase();
|
|
50
|
+
const exporter = TRACE_EXPORTERS.has(normalizedExporter)
|
|
51
|
+
? normalizedExporter
|
|
52
|
+
: exporterRaw === undefined
|
|
53
|
+
? undefined
|
|
54
|
+
: "none";
|
|
55
|
+
if (exporterRaw !== undefined && exporter === "none" && normalizedExporter !== "none") {
|
|
56
|
+
warnOnce(APIFUSE__TRACE__EXPORTER, `[apifuse] Invalid APIFUSE__TRACE__EXPORTER value "${normalizedExporter ?? exporterRaw}"; supported exporters are "console", "json", "otlp", and "none"; falling back to exporter "none".`);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
...(enabled !== undefined ? { enabled } : {}),
|
|
60
|
+
...(exporter !== undefined ? { exporter } : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
package/dist/runtime/trace.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export interface CreateTraceContextOptions {
|
|
|
10
10
|
onSpan?: (span: Span) => void;
|
|
11
11
|
exportOptions?: OTLPExportOptions;
|
|
12
12
|
resourceAttributes?: Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Applied to a detached copy of each span immediately before OTLP export; never touches
|
|
15
|
+
* getSpans() or onSpan. Returning nothing (or throwing) drops that export batch.
|
|
16
|
+
*/
|
|
17
|
+
sanitizeSpanForExport?: (span: Span) => Span | undefined;
|
|
13
18
|
}
|
|
14
19
|
type SpanHookOptions<T> = {
|
|
15
20
|
attributes?: Record<string, unknown>;
|
package/dist/runtime/trace.js
CHANGED
|
@@ -52,6 +52,17 @@ function insertCompletedSpan(completed, entry, maxSpans) {
|
|
|
52
52
|
completed.splice(0, completed.length - maxSpans);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
/** Hands the hook a copy whose attributes are detached from the recorded span; a hook that returns nothing fails closed. */
|
|
56
|
+
function prepareSpanForExport(span, sanitize) {
|
|
57
|
+
const copy = { ...span, attributes: { ...span.attributes } };
|
|
58
|
+
if (!sanitize)
|
|
59
|
+
return copy;
|
|
60
|
+
const sanitized = sanitize(copy);
|
|
61
|
+
if (!sanitized || typeof sanitized !== "object") {
|
|
62
|
+
throw new Error("sanitizeSpanForExport returned no span");
|
|
63
|
+
}
|
|
64
|
+
return sanitized;
|
|
65
|
+
}
|
|
55
66
|
export function getTraceRecorder(trace) {
|
|
56
67
|
return trace[TRACE_RECORDER] ?? null;
|
|
57
68
|
}
|
|
@@ -60,14 +71,40 @@ export function createTraceContext(options = {}) {
|
|
|
60
71
|
const completed = [];
|
|
61
72
|
const activeSpanStorage = new AsyncLocalStorage();
|
|
62
73
|
let sequence = 0;
|
|
63
|
-
|
|
74
|
+
// Export configuration (which can carry collector credentials) stays in this closure;
|
|
75
|
+
// the context object handed to provider code never exposes it.
|
|
76
|
+
const exportOptions = options.exportOptions;
|
|
77
|
+
const exportResourceAttributes = options.resourceAttributes
|
|
78
|
+
? { ...options.resourceAttributes }
|
|
79
|
+
: undefined;
|
|
80
|
+
// One trace id per context so every export batch of this request shares it and
|
|
81
|
+
// two processes can never mint the same id.
|
|
82
|
+
const exportTraceId = crypto.randomUUID().replace(/-/g, "");
|
|
83
|
+
let exportScheduled = false;
|
|
84
|
+
// One pending batch per context: roots completing before the flush share it, and a span is
|
|
85
|
+
// handed to the exporter exactly once, so later roots never re-send earlier spans.
|
|
64
86
|
const scheduleExport = () => {
|
|
65
|
-
if (!
|
|
87
|
+
if (!exportOptions || exportScheduled) {
|
|
66
88
|
return;
|
|
67
89
|
}
|
|
68
|
-
|
|
90
|
+
exportScheduled = true;
|
|
69
91
|
setImmediate(() => {
|
|
70
|
-
|
|
92
|
+
exportScheduled = false;
|
|
93
|
+
const pending = completed.filter((entry) => !entry.exported);
|
|
94
|
+
for (const entry of pending)
|
|
95
|
+
entry.exported = true;
|
|
96
|
+
if (pending.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
// Sanitization runs off the request path; a faulty sanitizer drops the batch, never the request.
|
|
99
|
+
let spans;
|
|
100
|
+
try {
|
|
101
|
+
spans = pending.map((entry) => prepareSpanForExport(entry.span, options.sanitizeSpanForExport));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
console.warn("[apifuse] OTLP export skipped; span sanitization failed.");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
void exportSpansOTLP(spans, exportOptions, exportResourceAttributes, exportTraceId);
|
|
71
108
|
});
|
|
72
109
|
};
|
|
73
110
|
const recorder = {
|
|
@@ -101,7 +138,7 @@ export function createTraceContext(options = {}) {
|
|
|
101
138
|
...(error ? { error } : {}),
|
|
102
139
|
...(pendingSpan.parentId ? { parentId: pendingSpan.parentId } : {}),
|
|
103
140
|
};
|
|
104
|
-
insertCompletedSpan(completed, { sequence: pendingSpan.sequence, span }, maxSpans);
|
|
141
|
+
insertCompletedSpan(completed, { sequence: pendingSpan.sequence, span, exported: false }, maxSpans);
|
|
105
142
|
options.onSpan?.(span);
|
|
106
143
|
if (!pendingSpan.parentId) {
|
|
107
144
|
scheduleExport();
|
|
@@ -123,17 +160,13 @@ export function createTraceContext(options = {}) {
|
|
|
123
160
|
});
|
|
124
161
|
},
|
|
125
162
|
};
|
|
126
|
-
traceContext = {
|
|
163
|
+
const traceContext = {
|
|
127
164
|
span(name, fn) {
|
|
128
165
|
return recorder.runSpan(name, fn);
|
|
129
166
|
},
|
|
130
167
|
getSpans() {
|
|
131
168
|
return completed.map((entry) => ({ ...entry.span }));
|
|
132
169
|
},
|
|
133
|
-
...(options.exportOptions ? { _exportOptions: options.exportOptions } : {}),
|
|
134
|
-
...(options.resourceAttributes
|
|
135
|
-
? { _resourceAttributes: { ...options.resourceAttributes } }
|
|
136
|
-
: {}),
|
|
137
170
|
[TRACE_RECORDER]: recorder,
|
|
138
171
|
};
|
|
139
172
|
return traceContext;
|
package/dist/serve.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createServerApp, type ServeOptions, serve } from "./server/serve.js";
|
|
1
|
+
export { createServerApp, createServerAppAsync, type ServeOptions, serve, } from "./server/serve.js";
|
package/dist/serve.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createServerApp, serve } from "./server/serve.js";
|
|
1
|
+
export { createServerApp, createServerAppAsync, serve, } from "./server/serve.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { safeProviderErrorObservability } from "../error-observability.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { safeProviderErrorObservability } from "../error-observability.js";
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export type { ProxyCacheStatus, ProxyProtocol, ProxyUserAgentSource, ProxyVendorName, SmartproxyAllocatorBodyClass, } from "../config/loader.js";
|
|
2
|
+
export type { ProxyTelemetryLogPayload, ProxyTelemetryResolvedPayload, ProxyTelemetryUnresolvedPayload, } from "../runtime/proxy-telemetry.js";
|
|
3
|
+
export { createServerApp, createServerAppAsync, ERROR_OBSERVABILITY_HEADER, type ErrorObservabilityDetails, type ProviderServerCloseOptions, type ProviderServerHandle, type ProviderErrorCauseFrame, type ProviderServerLogEvent, type ProviderServerLogger, type ProviderServerOperationExecutor, type ProviderServerOperationExecutorInput, type ProviderServerOptions, type ProviderServerStatefulForwardEnvelope, type ServeOptions, serve, } from "./serve.js";
|
|
4
|
+
export type { ProviderErrorObservability } from "../errors.js";
|
|
2
5
|
export { computeSelfTestPlanDigest, createSelfTestApp, createSelfTestAuthFlowInvoke, createSelfTestInvoke, DEFAULT_SELF_TEST_REQUEST_BUDGET_MS, isSelfTestReadOnlyOperation, PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV, resolveSelfTestPort, SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON, SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON, SELF_TEST_HEALTHZ_PATH, SELF_TEST_PATH, SELF_TEST_SCHEMA_VERSION, type SelfTestAppOptions, type SelfTestAuthFlowInvoke, type SelfTestAuthFlowRoute, type SelfTestCaseResult, type SelfTestCaseStatus, type SelfTestOperationInvoke, type SelfTestRequest, SelfTestRequestSchema, type SelfTestResponse, } from "./self-test.js";
|
|
3
|
-
export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens.js";
|
|
6
|
+
export { type InputDateTokenCalendar, resolveHealthCheckInputDateTokens, } from "./self-test-input-tokens.js";
|
|
4
7
|
export { collectSelfTestSensitiveValues, redactSelfTestText, SELF_TEST_MAX_TEXT_LENGTH, SELF_TEST_REDACTED_PLACEHOLDER, } from "./self-test-redaction.js";
|
|
5
8
|
export { DEFAULT_SELF_TEST_PORT, deriveSelfTestToken, PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_ENV, PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_PREVIOUS_ENV, PROVIDER_RUNTIME_SELF_TEST_PORT_ENV, resolveSelfTestMasterSecrets, type SelfTestMasterSecrets, verifySelfTestAuthorization, } from "./self-test-token.js";
|
|
6
9
|
export type { AuthFlowRequest, AuthFlowResponse, AuthFlowSuccessResponse, ConnectionMode, OperationConnection, OperationErrorResponse, OperationRequest, OperationResponse, OperationSuccessResponse, } from "./types.js";
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createServerApp, serve } from "./serve.js";
|
|
1
|
+
export { createServerApp, createServerAppAsync, ERROR_OBSERVABILITY_HEADER, serve, } from "./serve.js";
|
|
2
2
|
export { computeSelfTestPlanDigest, createSelfTestApp, createSelfTestAuthFlowInvoke, createSelfTestInvoke, DEFAULT_SELF_TEST_REQUEST_BUDGET_MS, isSelfTestReadOnlyOperation, PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV, resolveSelfTestPort, SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON, SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON, SELF_TEST_HEALTHZ_PATH, SELF_TEST_PATH, SELF_TEST_SCHEMA_VERSION, SelfTestRequestSchema, } from "./self-test.js";
|
|
3
|
-
export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens.js";
|
|
3
|
+
export { resolveHealthCheckInputDateTokens, } from "./self-test-input-tokens.js";
|
|
4
4
|
export { collectSelfTestSensitiveValues, redactSelfTestText, SELF_TEST_MAX_TEXT_LENGTH, SELF_TEST_REDACTED_PLACEHOLDER, } from "./self-test-redaction.js";
|
|
5
5
|
export { DEFAULT_SELF_TEST_PORT, deriveSelfTestToken, PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_ENV, PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_PREVIOUS_ENV, PROVIDER_RUNTIME_SELF_TEST_PORT_ENV, resolveSelfTestMasterSecrets, verifySelfTestAuthorization, } from "./self-test-token.js";
|
|
6
6
|
export { AuthFlowRequestSchema, AuthFlowSuccessResponseSchema, ConnectionModeSchema, ErrorEnvelopeSchema, OperationConnectionSchema, OperationErrorResponseSchema, OperationRequestSchema, OperationSuccessResponseSchema, } from "./types.js";
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type InputDateTokenCalendar = "KST" | "UTC";
|
|
2
|
+
export declare function resolveHealthCheckInputDateTokens(value: unknown, now?: Date, calendar?: InputDateTokenCalendar): unknown;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Relative
|
|
3
|
-
*
|
|
4
|
-
* so
|
|
2
|
+
* Relative date-token resolution for health-check case inputs and fixture
|
|
3
|
+
* requests. The calendar defaults to KST; callers that need UTC must opt in
|
|
4
|
+
* explicitly so UTC and KST do not silently disagree from 15:00–23:59 UTC.
|
|
5
5
|
*
|
|
6
|
-
* Supported token: `+<days>d` or `+<days>d:YYYYMMDD` (1..365 days ahead
|
|
6
|
+
* Supported token: `+<days>d` or `+<days>d:YYYYMMDD` (1..365 days ahead).
|
|
7
7
|
*/
|
|
8
|
-
const
|
|
9
|
-
function
|
|
10
|
-
const
|
|
11
|
-
const date = new Date(Date.UTC(
|
|
8
|
+
const RELATIVE_DATE_TOKEN = /^\+(\d{1,3})d(?::(YYYYMMDD))?$/i;
|
|
9
|
+
function dateFromDaysAhead(daysAhead, now = new Date(), format = "YYYY-MM-DD", calendar = "KST") {
|
|
10
|
+
const calendarNow = new Date(now.getTime() + (calendar === "KST" ? 9 * 60 * 60 * 1000 : 0));
|
|
11
|
+
const date = new Date(Date.UTC(calendarNow.getUTCFullYear(), calendarNow.getUTCMonth(), calendarNow.getUTCDate() + daysAhead));
|
|
12
12
|
const isoDate = date.toISOString().slice(0, 10);
|
|
13
13
|
return format === "YYYYMMDD" ? isoDate.replace(/-/g, "") : isoDate;
|
|
14
14
|
}
|
|
15
|
-
export function resolveHealthCheckInputDateTokens(value, now = new Date()) {
|
|
15
|
+
export function resolveHealthCheckInputDateTokens(value, now = new Date(), calendar = "KST") {
|
|
16
16
|
if (typeof value === "string") {
|
|
17
|
-
const relative = value.match(
|
|
17
|
+
const relative = value.match(RELATIVE_DATE_TOKEN);
|
|
18
18
|
if (!relative)
|
|
19
19
|
return value;
|
|
20
20
|
const daysAhead = Number(relative[1]);
|
|
@@ -22,16 +22,20 @@ export function resolveHealthCheckInputDateTokens(value, now = new Date()) {
|
|
|
22
22
|
return value;
|
|
23
23
|
}
|
|
24
24
|
const format = relative[2]?.toUpperCase() === "YYYYMMDD" ? "YYYYMMDD" : "YYYY-MM-DD";
|
|
25
|
-
return
|
|
25
|
+
return dateFromDaysAhead(daysAhead, now, format, calendar);
|
|
26
26
|
}
|
|
27
27
|
if (Array.isArray(value)) {
|
|
28
|
-
|
|
28
|
+
const resolved = value.map((entry) => resolveHealthCheckInputDateTokens(entry, now, calendar));
|
|
29
|
+
return resolved.some((entry, index) => entry !== value[index]) ? resolved : value;
|
|
29
30
|
}
|
|
30
31
|
if (value && typeof value === "object") {
|
|
31
|
-
|
|
32
|
+
const resolved = Object.fromEntries(Object.entries(value).map(([key, entry]) => [
|
|
32
33
|
key,
|
|
33
|
-
resolveHealthCheckInputDateTokens(entry, now),
|
|
34
|
+
resolveHealthCheckInputDateTokens(entry, now, calendar),
|
|
34
35
|
]));
|
|
36
|
+
return Object.entries(resolved).some(([key, entry]) => entry !== Reflect.get(value, key))
|
|
37
|
+
? resolved
|
|
38
|
+
: value;
|
|
35
39
|
}
|
|
36
40
|
return value;
|
|
37
41
|
}
|
|
@@ -51,11 +51,21 @@ export interface SelfTestResponse {
|
|
|
51
51
|
result?: SelfTestCaseResult;
|
|
52
52
|
results: SelfTestCaseResult[];
|
|
53
53
|
}
|
|
54
|
+
export interface SelfTestCancellationLogEvent {
|
|
55
|
+
level: "info";
|
|
56
|
+
event: "self_test_run_cancelled";
|
|
57
|
+
providerId: string;
|
|
58
|
+
requestId: string;
|
|
59
|
+
operationId: string;
|
|
60
|
+
caseName: string;
|
|
61
|
+
reason: string;
|
|
62
|
+
}
|
|
54
63
|
export type SelfTestOperationInvoke = (args: {
|
|
55
64
|
operationId: string;
|
|
56
65
|
input: unknown;
|
|
57
66
|
connection?: OperationConnection;
|
|
58
67
|
requestId: string;
|
|
68
|
+
signal?: AbortSignal;
|
|
59
69
|
}) => Promise<{
|
|
60
70
|
status: number;
|
|
61
71
|
data: unknown;
|
|
@@ -78,6 +88,7 @@ export type SelfTestAuthFlowInvoke = (args: {
|
|
|
78
88
|
externalRef?: string;
|
|
79
89
|
input?: Record<string, unknown>;
|
|
80
90
|
context?: Record<string, unknown>;
|
|
91
|
+
signal?: AbortSignal;
|
|
81
92
|
}) => Promise<{
|
|
82
93
|
status: number;
|
|
83
94
|
body: unknown;
|
|
@@ -112,6 +123,8 @@ export interface SelfTestAppOptions {
|
|
|
112
123
|
requestBudgetMs?: number;
|
|
113
124
|
/** Env override for secret collection + budget resolution (tests). */
|
|
114
125
|
env?: Readonly<Record<string, string | undefined>>;
|
|
126
|
+
/** Structured server logger; defaults to the same JSON console shape as the provider server. */
|
|
127
|
+
logger?: (event: SelfTestCancellationLogEvent) => void;
|
|
115
128
|
}
|
|
116
129
|
/**
|
|
117
130
|
* Stable sha256 over the provider's declared health plan (operations, case
|
|
@@ -121,9 +134,7 @@ export interface SelfTestAppOptions {
|
|
|
121
134
|
export declare function computeSelfTestPlanDigest(provider: ProviderDefinition): string;
|
|
122
135
|
/**
|
|
123
136
|
* Fail-closed read-only classification: an operation may self-test only when
|
|
124
|
-
* its
|
|
125
|
-
* toolRouter.riskClass "read") and nothing marks it side-effecting. Unclassified
|
|
126
|
-
* operations are refused so the endpoint cannot become a mutation oracle.
|
|
137
|
+
* its authored safety source of truth classifies it as read-only.
|
|
127
138
|
*/
|
|
128
139
|
export declare function isSelfTestReadOnlyOperation(operation: OperationDefinition): boolean;
|
|
129
140
|
/** Binds the self-test executor to a tenant app's /v1 pipeline in-process. */
|