@apifuse/provider-sdk 2.2.0-beta.4 → 2.2.0-beta.40
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 +501 -13
- package/CHANGELOG.md +165 -1
- package/README.md +72 -14
- package/SUBMISSION.md +1 -1
- package/bin/apifuse-check.ts +88 -4
- package/bin/apifuse-dev.ts +38 -5
- package/bin/apifuse-pack-check.ts +22 -2
- package/bin/apifuse-pack-smoke.ts +57 -2
- package/bin/apifuse-pack-types.ts +356 -38
- package/bin/apifuse-perf.ts +14 -13
- package/bin/apifuse-record.ts +691 -68
- package/bin/apifuse-submit-check.ts +518 -37
- 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 +8 -0
- package/dist/cli/create.d.ts +3 -0
- package/dist/cli/create.js +34 -35
- 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 +4 -4
- package/dist/cli/templates/provider/index.ts.tpl +6 -3
- package/dist/cli/templates/provider/operations/ping.ts.tpl +2 -1
- package/dist/config/loader.d.ts +177 -16
- package/dist/config/loader.js +424 -127
- package/dist/contract-serialization.js +4 -8
- package/dist/contract-types.d.ts +1 -0
- package/dist/contract.js +2 -0
- package/dist/declaration-validation.d.ts +32 -0
- package/dist/declaration-validation.js +207 -0
- package/dist/define.d.ts +51 -25
- package/dist/define.js +752 -38
- package/dist/error-resolution.d.ts +4 -0
- package/dist/error-resolution.js +122 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.js +40 -0
- package/dist/fixture-sanitization.d.ts +28 -0
- package/dist/fixture-sanitization.js +217 -0
- package/dist/health-scenario.d.ts +1842 -0
- package/dist/health-scenario.js +624 -0
- package/dist/index.d.ts +19 -9
- package/dist/index.js +10 -6
- package/dist/lint.d.ts +6 -1
- package/dist/lint.js +362 -3
- 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 +8 -2
- package/dist/provider.js +3 -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/executor.d.ts +2 -2
- package/dist/runtime/executor.js +26 -2
- package/dist/runtime/http.d.ts +1 -0
- package/dist/runtime/http.js +515 -53
- 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/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 +3 -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 +526 -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 +407 -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 +60 -0
- package/dist/runtime/resolver.js +737 -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 +28 -3
- package/dist/runtime/stealth.js +519 -255
- 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 +61 -0
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +1 -1
- package/dist/server/index.d.ts +5 -3
- package/dist/server/index.js +3 -3
- 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 +114 -0
- package/dist/server/self-test.js +784 -148
- package/dist/server/serve-implementation.d.ts +213 -0
- package/dist/server/serve-implementation.js +2173 -0
- package/dist/server/serve.d.ts +1 -70
- package/dist/server/serve.js +1 -1130
- package/dist/server/trace-output.d.ts +4 -0
- package/dist/server/trace-output.js +20 -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.js +16 -7
- 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 +545 -23
- package/dist/types.js +1 -0
- package/package.json +44 -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/commands.ts +10 -0
- package/src/cli/create.ts +42 -35
- 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 +4 -4
- package/src/cli/templates/provider/index.ts.tpl +6 -3
- package/src/cli/templates/provider/operations/ping.ts.tpl +2 -1
- package/src/config/loader.ts +665 -163
- package/src/contract-serialization.ts +5 -7
- package/src/contract-types.ts +1 -0
- package/src/contract.ts +2 -0
- package/src/declaration-validation.ts +266 -0
- package/src/define.ts +970 -87
- package/src/error-resolution.ts +127 -0
- package/src/errors.ts +52 -0
- package/src/fixture-sanitization.ts +248 -0
- package/src/health-scenario.ts +875 -0
- package/src/index.ts +204 -8
- package/src/lint.ts +408 -4
- 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 +133 -0
- 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/executor.ts +40 -7
- package/src/runtime/http.ts +641 -61
- 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/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 +20 -0
- package/src/runtime/resolver-shared.ts +17 -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 +700 -0
- package/src/runtime/resolver-vendors/hosts.ts +38 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +539 -0
- package/src/runtime/resolver-vendors/types.ts +212 -0
- package/src/runtime/resolver.ts +1103 -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 +675 -289
- package/src/runtime/stt.ts +1 -19
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace-config.ts +77 -0
- package/src/serve.ts +6 -1
- package/src/server/index.ts +37 -2
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test.ts +1025 -175
- package/src/server/serve-implementation.ts +3250 -0
- package/src/server/serve.ts +1 -1626
- package/src/server/trace-output.ts +32 -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 +17 -7
- 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 +660 -38
- 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/src/runtime/stt.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
VerificationCodeCandidateSource,
|
|
15
15
|
VerificationCodeExtractionResult,
|
|
16
16
|
} from "../types.js";
|
|
17
|
+
import { createTimeoutController, isTimeoutLikeError } from "./timeout.js";
|
|
17
18
|
|
|
18
19
|
export const APIFUSE__STT__BACKEND_ENV = "APIFUSE__STT__BACKEND";
|
|
19
20
|
export const APIFUSE__STT__MODEL_ENV = "APIFUSE__STT__MODEL";
|
|
@@ -169,15 +170,6 @@ function normalizeCloudflareLanguage(language: Bcp47Locale | undefined): string
|
|
|
169
170
|
return language?.split("-")[0]?.toLowerCase();
|
|
170
171
|
}
|
|
171
172
|
|
|
172
|
-
function isTimeoutLikeError(error: unknown): error is Error {
|
|
173
|
-
return (
|
|
174
|
-
error instanceof Error &&
|
|
175
|
-
(error.name === "AbortError" ||
|
|
176
|
-
error.name === "TimeoutError" ||
|
|
177
|
-
/\b(timed out|timeout|deadline exceeded)\b/i.test(error.message))
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
173
|
function toSttTransportError(error: unknown): TransportError {
|
|
182
174
|
if (error instanceof TransportError) return error;
|
|
183
175
|
if (isTimeoutLikeError(error)) {
|
|
@@ -194,16 +186,6 @@ function toSttTransportError(error: unknown): TransportError {
|
|
|
194
186
|
});
|
|
195
187
|
}
|
|
196
188
|
|
|
197
|
-
function createTimeoutController(signalTimeoutMs: number): {
|
|
198
|
-
controller: AbortController;
|
|
199
|
-
clear: () => void;
|
|
200
|
-
} {
|
|
201
|
-
const controller = new AbortController();
|
|
202
|
-
const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
|
|
203
|
-
timeout.unref?.();
|
|
204
|
-
return { controller, clear: () => clearTimeout(timeout) };
|
|
205
|
-
}
|
|
206
|
-
|
|
207
189
|
function toCloudflareInput(request: SttTranscribeRequest): Record<string, unknown> {
|
|
208
190
|
const prompt = resolveSttPrompt(request);
|
|
209
191
|
const input: Record<string, unknown> = {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function isTimeoutLikeError(error: unknown): error is Error {
|
|
2
|
+
return (
|
|
3
|
+
error instanceof Error &&
|
|
4
|
+
(error.name === "AbortError" ||
|
|
5
|
+
error.name === "TimeoutError" ||
|
|
6
|
+
/\b(timed out|timeout|deadline exceeded)\b/i.test(error.message))
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function createTimeoutController(signalTimeoutMs: number): {
|
|
11
|
+
controller: AbortController;
|
|
12
|
+
clear: () => void;
|
|
13
|
+
} {
|
|
14
|
+
const controller = new AbortController();
|
|
15
|
+
const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
|
|
16
|
+
timeout.unref?.();
|
|
17
|
+
return { controller, clear: () => clearTimeout(timeout) };
|
|
18
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { TraceConfig } from "../types.js";
|
|
2
|
+
|
|
3
|
+
/** SDK-owned environment variable names for server trace output. */
|
|
4
|
+
export const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
|
|
5
|
+
export const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
|
|
6
|
+
|
|
7
|
+
type EnvLike = Record<string, string | undefined>;
|
|
8
|
+
|
|
9
|
+
const TRACE_EXPORTER_LOOKUP: Record<Exclude<NonNullable<TraceConfig["exporter"]>, "otlp">, true> = {
|
|
10
|
+
console: true,
|
|
11
|
+
json: true,
|
|
12
|
+
none: true,
|
|
13
|
+
};
|
|
14
|
+
const TRACE_EXPORTERS = new Set(Object.keys(TRACE_EXPORTER_LOOKUP));
|
|
15
|
+
|
|
16
|
+
const emittedWarnings = new Set<string>();
|
|
17
|
+
|
|
18
|
+
function warnOnce(key: string, message: string): void {
|
|
19
|
+
if (emittedWarnings.has(key)) return;
|
|
20
|
+
emittedWarnings.add(key);
|
|
21
|
+
console.warn(message);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function parseEnabled(raw: string | undefined): boolean | undefined {
|
|
25
|
+
if (raw === undefined) return undefined;
|
|
26
|
+
switch (raw.trim().toLowerCase()) {
|
|
27
|
+
case "1":
|
|
28
|
+
case "true":
|
|
29
|
+
case "yes":
|
|
30
|
+
case "on":
|
|
31
|
+
return true;
|
|
32
|
+
case "0":
|
|
33
|
+
case "false":
|
|
34
|
+
case "no":
|
|
35
|
+
case "off":
|
|
36
|
+
return false;
|
|
37
|
+
default:
|
|
38
|
+
warnOnce(
|
|
39
|
+
APIFUSE__TRACE__ENABLED,
|
|
40
|
+
"[apifuse] Invalid APIFUSE__TRACE__ENABLED; falling back to disabled tracing.",
|
|
41
|
+
);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Resolve server trace output configuration from SDK-owned environment
|
|
48
|
+
* variables. Invalid exporter values fail closed so a provider cannot crash at
|
|
49
|
+
* startup because of an observability setting.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveTraceConfigFromEnv(env: EnvLike = process.env): TraceConfig | undefined {
|
|
52
|
+
const enabledRaw = env[APIFUSE__TRACE__ENABLED];
|
|
53
|
+
const exporterRaw = env[APIFUSE__TRACE__EXPORTER];
|
|
54
|
+
|
|
55
|
+
if (enabledRaw === undefined && exporterRaw === undefined) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const enabled = parseEnabled(enabledRaw);
|
|
60
|
+
const normalizedExporter = exporterRaw?.trim().toLowerCase();
|
|
61
|
+
const exporter = TRACE_EXPORTERS.has(normalizedExporter as NonNullable<TraceConfig["exporter"]>)
|
|
62
|
+
? (normalizedExporter as NonNullable<TraceConfig["exporter"]>)
|
|
63
|
+
: exporterRaw === undefined
|
|
64
|
+
? undefined
|
|
65
|
+
: "none";
|
|
66
|
+
if (exporterRaw !== undefined && exporter === "none" && normalizedExporter !== "none") {
|
|
67
|
+
warnOnce(
|
|
68
|
+
APIFUSE__TRACE__EXPORTER,
|
|
69
|
+
`[apifuse] Invalid APIFUSE__TRACE__EXPORTER value "${normalizedExporter ?? exporterRaw}" (OTLP is unsupported for server output); supported exporters are "console", "json", and "none"; falling back to exporter "none".`,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
...(enabled !== undefined ? { enabled } : {}),
|
|
75
|
+
...(exporter !== undefined ? { exporter } : {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
package/src/serve.ts
CHANGED
package/src/server/index.ts
CHANGED
|
@@ -1,16 +1,48 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type {
|
|
2
|
+
ProxyCacheStatus,
|
|
3
|
+
ProxyProtocol,
|
|
4
|
+
ProxyUserAgentSource,
|
|
5
|
+
ProxyVendorName,
|
|
6
|
+
SmartproxyAllocatorBodyClass,
|
|
7
|
+
} from "../config/loader.js";
|
|
8
|
+
export type {
|
|
9
|
+
ProxyTelemetryLogPayload,
|
|
10
|
+
ProxyTelemetryResolvedPayload,
|
|
11
|
+
ProxyTelemetryUnresolvedPayload,
|
|
12
|
+
} from "../runtime/proxy-telemetry.js";
|
|
13
|
+
export {
|
|
14
|
+
createServerApp,
|
|
15
|
+
createServerAppAsync,
|
|
16
|
+
ERROR_OBSERVABILITY_HEADER,
|
|
17
|
+
type ErrorObservabilityDetails,
|
|
18
|
+
type ProviderServerCloseOptions,
|
|
19
|
+
type ProviderServerHandle,
|
|
20
|
+
type ProviderServerLogEvent,
|
|
21
|
+
type ProviderServerLogger,
|
|
22
|
+
type ProviderServerOperationExecutor,
|
|
23
|
+
type ProviderServerOperationExecutorInput,
|
|
24
|
+
type ProviderServerOptions,
|
|
25
|
+
type ProviderServerStatefulForwardEnvelope,
|
|
26
|
+
type ServeOptions,
|
|
27
|
+
serve,
|
|
28
|
+
} from "./serve.js";
|
|
2
29
|
export {
|
|
3
30
|
computeSelfTestPlanDigest,
|
|
4
31
|
createSelfTestApp,
|
|
32
|
+
createSelfTestAuthFlowInvoke,
|
|
5
33
|
createSelfTestInvoke,
|
|
6
34
|
DEFAULT_SELF_TEST_REQUEST_BUDGET_MS,
|
|
7
35
|
isSelfTestReadOnlyOperation,
|
|
8
36
|
PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV,
|
|
9
37
|
resolveSelfTestPort,
|
|
38
|
+
SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON,
|
|
39
|
+
SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON,
|
|
10
40
|
SELF_TEST_HEALTHZ_PATH,
|
|
11
41
|
SELF_TEST_PATH,
|
|
12
42
|
SELF_TEST_SCHEMA_VERSION,
|
|
13
43
|
type SelfTestAppOptions,
|
|
44
|
+
type SelfTestAuthFlowInvoke,
|
|
45
|
+
type SelfTestAuthFlowRoute,
|
|
14
46
|
type SelfTestCaseResult,
|
|
15
47
|
type SelfTestCaseStatus,
|
|
16
48
|
type SelfTestOperationInvoke,
|
|
@@ -18,7 +50,10 @@ export {
|
|
|
18
50
|
SelfTestRequestSchema,
|
|
19
51
|
type SelfTestResponse,
|
|
20
52
|
} from "./self-test.js";
|
|
21
|
-
export {
|
|
53
|
+
export {
|
|
54
|
+
type InputDateTokenCalendar,
|
|
55
|
+
resolveHealthCheckInputDateTokens,
|
|
56
|
+
} from "./self-test-input-tokens.js";
|
|
22
57
|
export {
|
|
23
58
|
collectSelfTestSensitiveValues,
|
|
24
59
|
redactSelfTestText,
|
|
@@ -1,46 +1,61 @@
|
|
|
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
|
|
8
|
+
const RELATIVE_DATE_TOKEN = /^\+(\d{1,3})d(?::(YYYYMMDD))?$/i;
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
export type InputDateTokenCalendar = "KST" | "UTC";
|
|
11
|
+
|
|
12
|
+
function dateFromDaysAhead(
|
|
11
13
|
daysAhead: number,
|
|
12
14
|
now = new Date(),
|
|
13
15
|
format: "YYYY-MM-DD" | "YYYYMMDD" = "YYYY-MM-DD",
|
|
16
|
+
calendar: InputDateTokenCalendar = "KST",
|
|
14
17
|
): string {
|
|
15
|
-
const
|
|
18
|
+
const calendarNow = new Date(now.getTime() + (calendar === "KST" ? 9 * 60 * 60 * 1000 : 0));
|
|
16
19
|
const date = new Date(
|
|
17
|
-
Date.UTC(
|
|
20
|
+
Date.UTC(
|
|
21
|
+
calendarNow.getUTCFullYear(),
|
|
22
|
+
calendarNow.getUTCMonth(),
|
|
23
|
+
calendarNow.getUTCDate() + daysAhead,
|
|
24
|
+
),
|
|
18
25
|
);
|
|
19
26
|
const isoDate = date.toISOString().slice(0, 10);
|
|
20
27
|
return format === "YYYYMMDD" ? isoDate.replace(/-/g, "") : isoDate;
|
|
21
28
|
}
|
|
22
29
|
|
|
23
|
-
export function resolveHealthCheckInputDateTokens(
|
|
30
|
+
export function resolveHealthCheckInputDateTokens(
|
|
31
|
+
value: unknown,
|
|
32
|
+
now = new Date(),
|
|
33
|
+
calendar: InputDateTokenCalendar = "KST",
|
|
34
|
+
): unknown {
|
|
24
35
|
if (typeof value === "string") {
|
|
25
|
-
const relative = value.match(
|
|
36
|
+
const relative = value.match(RELATIVE_DATE_TOKEN);
|
|
26
37
|
if (!relative) return value;
|
|
27
38
|
const daysAhead = Number(relative[1]);
|
|
28
39
|
if (!Number.isInteger(daysAhead) || daysAhead < 1 || daysAhead > 365) {
|
|
29
40
|
return value;
|
|
30
41
|
}
|
|
31
42
|
const format = relative[2]?.toUpperCase() === "YYYYMMDD" ? "YYYYMMDD" : "YYYY-MM-DD";
|
|
32
|
-
return
|
|
43
|
+
return dateFromDaysAhead(daysAhead, now, format, calendar);
|
|
33
44
|
}
|
|
34
45
|
if (Array.isArray(value)) {
|
|
35
|
-
|
|
46
|
+
const resolved = value.map((entry) => resolveHealthCheckInputDateTokens(entry, now, calendar));
|
|
47
|
+
return resolved.some((entry, index) => entry !== value[index]) ? resolved : value;
|
|
36
48
|
}
|
|
37
49
|
if (value && typeof value === "object") {
|
|
38
|
-
|
|
50
|
+
const resolved = Object.fromEntries(
|
|
39
51
|
Object.entries(value).map(([key, entry]) => [
|
|
40
52
|
key,
|
|
41
|
-
resolveHealthCheckInputDateTokens(entry, now),
|
|
53
|
+
resolveHealthCheckInputDateTokens(entry, now, calendar),
|
|
42
54
|
]),
|
|
43
55
|
);
|
|
56
|
+
return Object.entries(resolved).some(([key, entry]) => entry !== Reflect.get(value, key))
|
|
57
|
+
? resolved
|
|
58
|
+
: value;
|
|
44
59
|
}
|
|
45
60
|
return value;
|
|
46
61
|
}
|