@apifuse/provider-sdk 2.2.0-beta.3 → 2.2.0-beta.31
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 +493 -5
- package/CHANGELOG.md +131 -1
- package/README.md +52 -6
- package/SUBMISSION.md +1 -1
- package/bin/apifuse-check.ts +106 -62
- package/bin/apifuse-create.ts +1 -1
- package/bin/apifuse-dev.ts +63 -55
- package/bin/apifuse-pack-check.ts +22 -2
- package/bin/apifuse-pack-smoke.ts +78 -82
- package/bin/apifuse-pack-types.ts +583 -0
- package/bin/apifuse-perf.ts +59 -140
- package/bin/apifuse-record.ts +698 -113
- package/bin/apifuse-submit-check.ts +517 -44
- package/bin/apifuse-sync-assets.ts +117 -0
- package/bin/apifuse.ts +1 -1
- package/bin/submit-check-delimited-text.ts +50 -0
- package/bin/submit-check-xml.ts +1 -1
- package/dist/auth-turn/index.d.ts +4 -4
- package/dist/auth-turn/index.js +1 -1
- package/dist/auth.d.ts +16 -2
- package/dist/auth.js +76 -18
- package/dist/ceremonies/index.d.ts +9 -1
- package/dist/ceremonies/index.js +117 -29
- 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/README.md.tpl +4 -4
- package/dist/config/loader.d.ts +176 -17
- package/dist/config/loader.js +434 -161
- package/dist/contract-serialization.d.ts +2 -2
- package/dist/contract-serialization.js +7 -14
- package/dist/contract-types.d.ts +3 -2
- package/dist/contract.d.ts +3 -3
- package/dist/contract.js +6 -6
- package/dist/declaration-validation.d.ts +23 -0
- package/dist/declaration-validation.js +159 -0
- package/dist/define.d.ts +13 -1
- package/dist/define.js +391 -122
- package/dist/dev.d.ts +1 -1
- package/dist/dev.js +1 -1
- package/dist/error-resolution.d.ts +4 -0
- package/dist/error-resolution.js +123 -0
- package/dist/errors.d.ts +19 -1
- package/dist/errors.js +41 -3
- package/dist/fixture-sanitization.d.ts +26 -0
- package/dist/fixture-sanitization.js +216 -0
- package/dist/i18n/catalog.d.ts +2 -2
- package/dist/i18n/catalog.js +4 -10
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/keys.d.ts +2 -2
- package/dist/index.d.ts +50 -42
- package/dist/index.js +41 -37
- package/dist/lint.d.ts +6 -1
- package/dist/lint.js +370 -18
- 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 +13 -11
- package/dist/provider.js +10 -9
- package/dist/public-schema-field-lint.d.ts +1 -1
- package/dist/recipes/gov-api.js +1 -1
- package/dist/runtime/auth-flow.d.ts +3 -1
- package/dist/runtime/auth-flow.js +8 -3
- package/dist/runtime/browser.d.ts +1 -1
- package/dist/runtime/browser.js +138 -40
- package/dist/runtime/cache.d.ts +2 -1
- package/dist/runtime/cache.js +173 -23
- package/dist/runtime/choice-wordlist.d.ts +9 -0
- package/dist/runtime/choice-wordlist.js +138 -0
- package/dist/runtime/choice.d.ts +14 -1
- package/dist/runtime/choice.js +566 -101
- package/dist/runtime/credential.d.ts +1 -1
- package/dist/runtime/credential.js +1 -1
- package/dist/runtime/env.d.ts +1 -1
- package/dist/runtime/executor.d.ts +1 -1
- package/dist/runtime/executor.js +25 -3
- package/dist/runtime/http.d.ts +3 -2
- package/dist/runtime/http.js +517 -55
- package/dist/runtime/insights.d.ts +1 -1
- package/dist/runtime/insights.js +6 -13
- package/dist/runtime/instrumentation.d.ts +2 -2
- package/dist/runtime/instrumentation.js +371 -23
- package/dist/runtime/keyring.js +1 -1
- package/dist/runtime/namespace.js +1 -1
- 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 +1 -1
- package/dist/runtime/perf.d.ts +1 -1
- package/dist/runtime/provider.d.ts +1 -1
- package/dist/runtime/provider.js +1 -2
- package/dist/runtime/proxy-errors.d.ts +1 -1
- package/dist/runtime/proxy-errors.js +9 -7
- package/dist/runtime/proxy-nodemaven.d.ts +56 -0
- package/dist/runtime/proxy-nodemaven.js +146 -0
- package/dist/runtime/proxy-retry-policy.d.ts +2 -2
- package/dist/runtime/proxy-retry-policy.js +2 -2
- package/dist/runtime/proxy-telemetry.d.ts +2 -1
- package/dist/runtime/proxy-telemetry.js +58 -52
- 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 +5 -5
- 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 +20 -0
- package/dist/runtime/resolver-vendors/browser.js +282 -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 +368 -0
- package/dist/runtime/resolver-vendors/types.d.ts +83 -0
- package/dist/runtime/resolver-vendors/types.js +69 -0
- package/dist/runtime/resolver.d.ts +59 -0
- package/dist/runtime/resolver.js +705 -0
- package/dist/runtime/secrets.d.ts +27 -0
- package/dist/runtime/secrets.js +51 -0
- package/dist/runtime/state.d.ts +5 -2
- package/dist/runtime/state.js +280 -74
- package/dist/runtime/stealth-cookies.d.ts +20 -0
- package/dist/runtime/stealth-cookies.js +111 -0
- package/dist/runtime/stealth.d.ts +30 -5
- package/dist/runtime/stealth.js +523 -259
- package/dist/runtime/stt.d.ts +1 -1
- package/dist/runtime/stt.js +12 -27
- package/dist/runtime/timeout.d.ts +5 -0
- package/dist/runtime/timeout.js +12 -0
- package/dist/runtime/trace.d.ts +2 -2
- package/dist/runtime/trace.js +2 -4
- package/dist/runtime/waterfall.d.ts +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +7 -15
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +1 -1
- package/dist/server/index.d.ts +7 -7
- package/dist/server/index.js +6 -6
- 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.d.ts +1 -1
- package/dist/server/self-test-redaction.js +1 -1
- package/dist/server/self-test.d.ts +117 -3
- package/dist/server/self-test.js +787 -151
- package/dist/server/serve-implementation.d.ts +210 -0
- package/dist/server/serve-implementation.js +2078 -0
- package/dist/server/serve.d.ts +1 -70
- package/dist/server/serve.js +1 -1143
- package/dist/server/types.d.ts +34 -9
- package/dist/server/types.js +8 -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 +1 -1
- package/dist/stealth/profiles.js +21 -21
- package/dist/stream-evidence.d.ts +74 -0
- package/dist/stream-evidence.js +785 -0
- package/dist/stream.d.ts +1 -1
- package/dist/stream.js +7 -1
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +3 -2
- package/dist/testing/run.d.ts +32 -2
- package/dist/testing/run.js +488 -28
- package/dist/types.d.ts +566 -19
- package/dist/types.js +1 -0
- package/dist/user-input.d.ts +30 -0
- package/dist/user-input.js +66 -0
- package/package.json +42 -7
- package/src/auth-turn/index.ts +2 -2
- package/src/auth.ts +146 -86
- package/src/ceremonies/index.ts +167 -92
- 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/README.md.tpl +4 -4
- package/src/config/loader.ts +667 -289
- package/src/contract-serialization.ts +10 -18
- package/src/contract-types.ts +3 -2
- package/src/contract.ts +14 -28
- package/src/declaration-validation.ts +202 -0
- package/src/define.ts +631 -495
- package/src/dev.ts +4 -9
- package/src/error-resolution.ts +128 -0
- package/src/errors.ts +56 -11
- package/src/fixture-sanitization.ts +247 -0
- package/src/i18n/catalog.ts +10 -32
- package/src/i18n/index.ts +2 -2
- package/src/i18n/keys.ts +5 -11
- package/src/index.ts +158 -44
- package/src/lint.ts +488 -154
- 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 +66 -11
- package/src/public-schema-field-lint.ts +7 -33
- package/src/recipes/gov-api.ts +2 -5
- package/src/runtime/auth-flow.ts +13 -7
- package/src/runtime/browser.ts +252 -207
- package/src/runtime/cache.ts +209 -81
- package/src/runtime/choice-wordlist.ts +145 -0
- package/src/runtime/choice.ts +758 -197
- package/src/runtime/credential.ts +2 -2
- package/src/runtime/env.ts +1 -1
- package/src/runtime/executor.ts +37 -19
- package/src/runtime/http.ts +645 -65
- package/src/runtime/insights.ts +15 -53
- package/src/runtime/instrumentation.ts +530 -67
- package/src/runtime/keyring.ts +7 -19
- package/src/runtime/namespace.ts +2 -7
- 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 +12 -23
- package/src/runtime/perf.ts +1 -1
- package/src/runtime/provider.ts +4 -9
- package/src/runtime/proxy-errors.ts +29 -42
- package/src/runtime/proxy-nodemaven.ts +221 -0
- package/src/runtime/proxy-retry-policy.ts +3 -3
- package/src/runtime/proxy-telemetry.ts +84 -77
- package/src/runtime/redirects.ts +66 -0
- package/src/runtime/redis.ts +10 -13
- package/src/runtime/request-options.ts +679 -9
- package/src/runtime/resolver-config.ts +6 -0
- package/src/runtime/resolver-public.ts +18 -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 +408 -0
- package/src/runtime/resolver-vendors/hosts.ts +38 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +500 -0
- package/src/runtime/resolver-vendors/types.ts +173 -0
- package/src/runtime/resolver.ts +1060 -0
- package/src/runtime/secrets.ts +64 -0
- package/src/runtime/state.ts +399 -161
- package/src/runtime/stealth-cookies.ts +132 -0
- package/src/runtime/stealth.ts +681 -295
- package/src/runtime/stt.ts +39 -113
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace.ts +14 -44
- package/src/runtime/waterfall.ts +5 -18
- package/src/schema.ts +23 -84
- package/src/serve.ts +6 -1
- package/src/server/index.ts +30 -7
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test-redaction.ts +2 -2
- package/src/server/self-test.ts +1030 -180
- package/src/server/serve-implementation.ts +3062 -0
- package/src/server/serve.ts +1 -1781
- package/src/server/types.ts +12 -13
- 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 +27 -33
- package/src/stream-evidence.ts +988 -0
- package/src/stream.ts +16 -20
- package/src/testing/index.ts +11 -2
- package/src/testing/run.ts +668 -74
- package/src/types.ts +665 -35
- package/src/user-input.ts +118 -0
- 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/schema.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type ZodString, type ZodType, z } from "zod";
|
|
2
2
|
|
|
3
|
-
import { ValidationError } from "./errors";
|
|
4
|
-
import { providerLocaleKey } from "./i18n/keys";
|
|
3
|
+
import { ValidationError } from "./errors.js";
|
|
4
|
+
import { providerLocaleKey } from "./i18n/keys.js";
|
|
5
5
|
import type {
|
|
6
6
|
InferSchemaOutput,
|
|
7
7
|
ProviderLocaleKey,
|
|
8
8
|
SchemaLike,
|
|
9
9
|
StandardSchemaV1,
|
|
10
|
-
} from "./types";
|
|
10
|
+
} from "./types.js";
|
|
11
11
|
|
|
12
12
|
export { z };
|
|
13
13
|
|
|
@@ -25,15 +25,11 @@ function isFailureResult<Output>(
|
|
|
25
25
|
return "issues" in result;
|
|
26
26
|
}
|
|
27
27
|
function isPromiseResult<Output>(
|
|
28
|
-
result:
|
|
29
|
-
| StandardSchemaV1.Result<Output>
|
|
30
|
-
| Promise<StandardSchemaV1.Result<Output>>,
|
|
28
|
+
result: StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>>,
|
|
31
29
|
): result is Promise<StandardSchemaV1.Result<Output>> {
|
|
32
30
|
return result instanceof Promise;
|
|
33
31
|
}
|
|
34
|
-
function formatStandardSchemaIssues(
|
|
35
|
-
issues: readonly StandardSchemaV1.Issue[],
|
|
36
|
-
): string {
|
|
32
|
+
function formatStandardSchemaIssues(issues: readonly StandardSchemaV1.Issue[]): string {
|
|
37
33
|
return issues.map((issue) => issue.message).join("; ");
|
|
38
34
|
}
|
|
39
35
|
export function parseSchema<TSchema extends SchemaLike>(
|
|
@@ -46,8 +42,7 @@ export async function parseSchema(
|
|
|
46
42
|
value: unknown,
|
|
47
43
|
fieldPath: string,
|
|
48
44
|
): Promise<unknown> {
|
|
49
|
-
if ("parse" in schema && typeof schema.parse === "function")
|
|
50
|
-
return schema.parse(value);
|
|
45
|
+
if ("parse" in schema && typeof schema.parse === "function") return schema.parse(value);
|
|
51
46
|
const result = schema["~standard"].validate(value);
|
|
52
47
|
const resolved = isPromiseResult(result) ? await result : result;
|
|
53
48
|
if (isFailureResult(resolved))
|
|
@@ -78,8 +73,7 @@ export function safeParseSchemaSync(
|
|
|
78
73
|
`Schema validation for ${fieldPath} returned a Promise. defineProvider fixture validation requires synchronous Standard Schema validation.`,
|
|
79
74
|
),
|
|
80
75
|
};
|
|
81
|
-
if (isFailureResult(result))
|
|
82
|
-
return { success: false, error: result.issues };
|
|
76
|
+
if (isFailureResult(result)) return { success: false, error: result.issues };
|
|
83
77
|
return { success: true, data: result.value };
|
|
84
78
|
} catch (error) {
|
|
85
79
|
return { success: false, error };
|
|
@@ -147,9 +141,7 @@ const describeKeyMethod = function <TSchema extends ZodType>(
|
|
|
147
141
|
};
|
|
148
142
|
|
|
149
143
|
function installDescribeKeyOnPrototype(prototype: unknown): void {
|
|
150
|
-
const target = prototype as
|
|
151
|
-
| (Record<string, unknown> & { describeKey?: unknown })
|
|
152
|
-
| null;
|
|
144
|
+
const target = prototype as (Record<string, unknown> & { describeKey?: unknown }) | null;
|
|
153
145
|
if (!target || typeof target.describeKey === "function") {
|
|
154
146
|
return;
|
|
155
147
|
}
|
|
@@ -201,12 +193,8 @@ export function field<TSchema extends ZodType>(
|
|
|
201
193
|
const metadata = described.meta() ?? {};
|
|
202
194
|
return described.meta({
|
|
203
195
|
...metadata,
|
|
204
|
-
...((options.sensitive ?? true)
|
|
205
|
-
|
|
206
|
-
: {}),
|
|
207
|
-
...(options.kind
|
|
208
|
-
? { [APIFUSE_SENSITIVE_KIND_META_KEY]: options.kind }
|
|
209
|
-
: {}),
|
|
196
|
+
...((options.sensitive ?? true) ? { [APIFUSE_SENSITIVE_META_KEY]: true } : {}),
|
|
197
|
+
...(options.kind ? { [APIFUSE_SENSITIVE_KIND_META_KEY]: options.kind } : {}),
|
|
210
198
|
});
|
|
211
199
|
}
|
|
212
200
|
|
|
@@ -222,10 +210,7 @@ function sensitiveString(
|
|
|
222
210
|
description: string,
|
|
223
211
|
options: { description?: string; minLength?: number } = {},
|
|
224
212
|
): ZodString {
|
|
225
|
-
const schema =
|
|
226
|
-
options.minLength === undefined
|
|
227
|
-
? z.string()
|
|
228
|
-
: z.string().min(options.minLength);
|
|
213
|
+
const schema = options.minLength === undefined ? z.string() : z.string().min(options.minLength);
|
|
229
214
|
return field(schema, {
|
|
230
215
|
kind,
|
|
231
216
|
description: options.description ?? description,
|
|
@@ -234,33 +219,17 @@ function sensitiveString(
|
|
|
234
219
|
|
|
235
220
|
export const fields = {
|
|
236
221
|
apiKey: (options?: { description?: string }) =>
|
|
237
|
-
sensitiveString(
|
|
238
|
-
"api_key",
|
|
239
|
-
"Provider API key or credential secret.",
|
|
240
|
-
options,
|
|
241
|
-
),
|
|
222
|
+
sensitiveString("api_key", "Provider API key or credential secret.", options),
|
|
242
223
|
authorization: (options?: { description?: string }) =>
|
|
243
|
-
sensitiveString(
|
|
244
|
-
"authorization",
|
|
245
|
-
"Authorization header value or bearer credential.",
|
|
246
|
-
options,
|
|
247
|
-
),
|
|
224
|
+
sensitiveString("authorization", "Authorization header value or bearer credential.", options),
|
|
248
225
|
cookie: (options?: { description?: string }) =>
|
|
249
|
-
sensitiveString(
|
|
250
|
-
"cookie",
|
|
251
|
-
"Cookie header or browser session secret.",
|
|
252
|
-
options,
|
|
253
|
-
),
|
|
226
|
+
sensitiveString("cookie", "Cookie header or browser session secret.", options),
|
|
254
227
|
otp: (options?: { description?: string }) =>
|
|
255
228
|
sensitiveString("otp", "One-time verification code.", options),
|
|
256
229
|
password: (options?: { description?: string; minLength?: number }) =>
|
|
257
230
|
sensitiveString("password", "Password credential.", options),
|
|
258
231
|
paymentUrl: (options?: { description?: string }) =>
|
|
259
|
-
sensitiveString(
|
|
260
|
-
"payment_url",
|
|
261
|
-
"Sensitive payment or checkout URL.",
|
|
262
|
-
options,
|
|
263
|
-
),
|
|
232
|
+
sensitiveString("payment_url", "Sensitive payment or checkout URL.", options),
|
|
264
233
|
phone: (options?: { description?: string }) =>
|
|
265
234
|
sensitiveString("phone", "Phone number or phone-based identity.", options),
|
|
266
235
|
secret: (options?: { description?: string }) =>
|
|
@@ -271,10 +240,7 @@ export const fields = {
|
|
|
271
240
|
|
|
272
241
|
export function isSensitiveSchema(schema: unknown): boolean {
|
|
273
242
|
const metadata = readZodMetadata(schema);
|
|
274
|
-
return (
|
|
275
|
-
metadata !== undefined &&
|
|
276
|
-
Reflect.get(metadata, APIFUSE_SENSITIVE_META_KEY) === true
|
|
277
|
-
);
|
|
243
|
+
return metadata !== undefined && Reflect.get(metadata, APIFUSE_SENSITIVE_META_KEY) === true;
|
|
278
244
|
}
|
|
279
245
|
|
|
280
246
|
export function collectSensitivePaths(schema: unknown): SensitivePath[] {
|
|
@@ -283,10 +249,7 @@ export function collectSensitivePaths(schema: unknown): SensitivePath[] {
|
|
|
283
249
|
return out;
|
|
284
250
|
}
|
|
285
251
|
|
|
286
|
-
export function redactPayload(
|
|
287
|
-
value: unknown,
|
|
288
|
-
paths: readonly SensitivePath[] = [],
|
|
289
|
-
): unknown {
|
|
252
|
+
export function redactPayload(value: unknown, paths: readonly SensitivePath[] = []): unknown {
|
|
290
253
|
return redactValue(value, [], paths);
|
|
291
254
|
}
|
|
292
255
|
|
|
@@ -297,8 +260,7 @@ function collectSensitivePathsInto(
|
|
|
297
260
|
activeSchemas: Set<unknown>,
|
|
298
261
|
emittedPaths: Set<string>,
|
|
299
262
|
): void {
|
|
300
|
-
if (!schema || typeof schema !== "object" || activeSchemas.has(schema))
|
|
301
|
-
return;
|
|
263
|
+
if (!schema || typeof schema !== "object" || activeSchemas.has(schema)) return;
|
|
302
264
|
activeSchemas.add(schema);
|
|
303
265
|
try {
|
|
304
266
|
if (isSensitiveSchema(schema)) pushSensitivePath(out, emittedPaths, path);
|
|
@@ -308,13 +270,7 @@ function collectSensitivePathsInto(
|
|
|
308
270
|
case "object": {
|
|
309
271
|
const shape = readObjectShape(def);
|
|
310
272
|
for (const [key, child] of Object.entries(shape)) {
|
|
311
|
-
collectSensitivePathsInto(
|
|
312
|
-
child,
|
|
313
|
-
[...path, key],
|
|
314
|
-
out,
|
|
315
|
-
activeSchemas,
|
|
316
|
-
emittedPaths,
|
|
317
|
-
);
|
|
273
|
+
collectSensitivePathsInto(child, [...path, key], out, activeSchemas, emittedPaths);
|
|
318
274
|
}
|
|
319
275
|
break;
|
|
320
276
|
}
|
|
@@ -341,20 +297,8 @@ function collectSensitivePathsInto(
|
|
|
341
297
|
);
|
|
342
298
|
break;
|
|
343
299
|
case "pipe":
|
|
344
|
-
collectSensitivePathsInto(
|
|
345
|
-
|
|
346
|
-
path,
|
|
347
|
-
out,
|
|
348
|
-
activeSchemas,
|
|
349
|
-
emittedPaths,
|
|
350
|
-
);
|
|
351
|
-
collectSensitivePathsInto(
|
|
352
|
-
Reflect.get(def, "out"),
|
|
353
|
-
path,
|
|
354
|
-
out,
|
|
355
|
-
activeSchemas,
|
|
356
|
-
emittedPaths,
|
|
357
|
-
);
|
|
300
|
+
collectSensitivePathsInto(Reflect.get(def, "in"), path, out, activeSchemas, emittedPaths);
|
|
301
|
+
collectSensitivePathsInto(Reflect.get(def, "out"), path, out, activeSchemas, emittedPaths);
|
|
358
302
|
break;
|
|
359
303
|
}
|
|
360
304
|
} finally {
|
|
@@ -402,18 +346,13 @@ function pathMatches(
|
|
|
402
346
|
): boolean {
|
|
403
347
|
return patterns.some((pattern) => {
|
|
404
348
|
if (pattern.length !== path.length) return false;
|
|
405
|
-
return pattern.every(
|
|
406
|
-
(segment, index) => segment === "*" || segment === path[index],
|
|
407
|
-
);
|
|
349
|
+
return pattern.every((segment, index) => segment === "*" || segment === path[index]);
|
|
408
350
|
});
|
|
409
351
|
}
|
|
410
352
|
|
|
411
353
|
function isReservedSensitiveKey(key: string): boolean {
|
|
412
354
|
const normalized = key.toLowerCase().replace(/[-_\s]/g, "");
|
|
413
|
-
return (
|
|
414
|
-
RESERVED_SENSITIVE_KEYS.has(normalized) ||
|
|
415
|
-
RESERVED_SENSITIVE_KEYS.has(key.toLowerCase())
|
|
416
|
-
);
|
|
355
|
+
return RESERVED_SENSITIVE_KEYS.has(normalized) || RESERVED_SENSITIVE_KEYS.has(key.toLowerCase());
|
|
417
356
|
}
|
|
418
357
|
|
|
419
358
|
function readZodMetadata(schema: unknown): object | undefined {
|
package/src/serve.ts
CHANGED
package/src/server/index.ts
CHANGED
|
@@ -1,30 +1,53 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {
|
|
2
|
+
createServerApp,
|
|
3
|
+
createServerAppAsync,
|
|
4
|
+
ERROR_OBSERVABILITY_HEADER,
|
|
5
|
+
type ErrorObservabilityDetails,
|
|
6
|
+
type ProviderServerCloseOptions,
|
|
7
|
+
type ProviderServerHandle,
|
|
8
|
+
type ProviderServerLogEvent,
|
|
9
|
+
type ProviderServerLogger,
|
|
10
|
+
type ProviderServerOperationExecutor,
|
|
11
|
+
type ProviderServerOperationExecutorInput,
|
|
12
|
+
type ProviderServerOptions,
|
|
13
|
+
type ProviderServerStatefulForwardEnvelope,
|
|
14
|
+
type ServeOptions,
|
|
15
|
+
serve,
|
|
16
|
+
} from "./serve.js";
|
|
2
17
|
export {
|
|
3
18
|
computeSelfTestPlanDigest,
|
|
4
19
|
createSelfTestApp,
|
|
20
|
+
createSelfTestAuthFlowInvoke,
|
|
5
21
|
createSelfTestInvoke,
|
|
6
22
|
DEFAULT_SELF_TEST_REQUEST_BUDGET_MS,
|
|
7
23
|
isSelfTestReadOnlyOperation,
|
|
8
24
|
PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV,
|
|
9
25
|
resolveSelfTestPort,
|
|
26
|
+
SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON,
|
|
27
|
+
SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON,
|
|
10
28
|
SELF_TEST_HEALTHZ_PATH,
|
|
11
29
|
SELF_TEST_PATH,
|
|
12
30
|
SELF_TEST_SCHEMA_VERSION,
|
|
13
31
|
type SelfTestAppOptions,
|
|
32
|
+
type SelfTestAuthFlowInvoke,
|
|
33
|
+
type SelfTestAuthFlowRoute,
|
|
14
34
|
type SelfTestCaseResult,
|
|
15
35
|
type SelfTestCaseStatus,
|
|
16
36
|
type SelfTestOperationInvoke,
|
|
17
37
|
type SelfTestRequest,
|
|
18
38
|
SelfTestRequestSchema,
|
|
19
39
|
type SelfTestResponse,
|
|
20
|
-
} from "./self-test";
|
|
21
|
-
export {
|
|
40
|
+
} from "./self-test.js";
|
|
41
|
+
export {
|
|
42
|
+
type InputDateTokenCalendar,
|
|
43
|
+
resolveHealthCheckInputDateTokens,
|
|
44
|
+
} from "./self-test-input-tokens.js";
|
|
22
45
|
export {
|
|
23
46
|
collectSelfTestSensitiveValues,
|
|
24
47
|
redactSelfTestText,
|
|
25
48
|
SELF_TEST_MAX_TEXT_LENGTH,
|
|
26
49
|
SELF_TEST_REDACTED_PLACEHOLDER,
|
|
27
|
-
} from "./self-test-redaction";
|
|
50
|
+
} from "./self-test-redaction.js";
|
|
28
51
|
export {
|
|
29
52
|
DEFAULT_SELF_TEST_PORT,
|
|
30
53
|
deriveSelfTestToken,
|
|
@@ -34,7 +57,7 @@ export {
|
|
|
34
57
|
resolveSelfTestMasterSecrets,
|
|
35
58
|
type SelfTestMasterSecrets,
|
|
36
59
|
verifySelfTestAuthorization,
|
|
37
|
-
} from "./self-test-token";
|
|
60
|
+
} from "./self-test-token.js";
|
|
38
61
|
export type {
|
|
39
62
|
AuthFlowRequest,
|
|
40
63
|
AuthFlowResponse,
|
|
@@ -45,7 +68,7 @@ export type {
|
|
|
45
68
|
OperationRequest,
|
|
46
69
|
OperationResponse,
|
|
47
70
|
OperationSuccessResponse,
|
|
48
|
-
} from "./types";
|
|
71
|
+
} from "./types.js";
|
|
49
72
|
export {
|
|
50
73
|
AuthFlowRequestSchema,
|
|
51
74
|
AuthFlowSuccessResponseSchema,
|
|
@@ -55,4 +78,4 @@ export {
|
|
|
55
78
|
OperationErrorResponseSchema,
|
|
56
79
|
OperationRequestSchema,
|
|
57
80
|
OperationSuccessResponseSchema,
|
|
58
|
-
} from "./types";
|
|
81
|
+
} from "./types.js";
|
|
@@ -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
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { ProviderDefinition } from "../types";
|
|
1
|
+
import type { ProviderDefinition } from "../types.js";
|
|
2
2
|
import {
|
|
3
3
|
PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_ENV,
|
|
4
4
|
PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_PREVIOUS_ENV,
|
|
5
|
-
} from "./self-test-token";
|
|
5
|
+
} from "./self-test-token.js";
|
|
6
6
|
|
|
7
7
|
export const SELF_TEST_REDACTED_PLACEHOLDER = "[REDACTED]";
|
|
8
8
|
|