@apifuse/provider-sdk 2.2.0-beta.1 → 2.2.0-beta.10
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 +106 -0
- package/CHANGELOG.md +37 -0
- package/README.md +5 -1
- package/SUBMISSION.md +1 -1
- package/bin/apifuse-check.ts +44 -59
- package/bin/apifuse-create.ts +1 -1
- package/bin/apifuse-dev.ts +27 -52
- package/bin/apifuse-pack-check.ts +14 -0
- package/bin/apifuse-pack-smoke.ts +22 -81
- package/bin/apifuse-pack-types.ts +266 -0
- package/bin/apifuse-perf.ts +45 -127
- package/bin/apifuse-record.ts +53 -70
- package/bin/apifuse-submit-check.ts +510 -45
- 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-semantics.ts +204 -0
- package/bin/submit-check-xml.ts +134 -0
- package/dist/auth-turn/index.d.ts +3 -3
- package/dist/auth.d.ts +2 -2
- package/dist/auth.js +9 -18
- package/dist/ceremonies/index.d.ts +1 -1
- package/dist/ceremonies/index.js +8 -18
- 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/config/loader.d.ts +149 -8
- package/dist/config/loader.js +378 -89
- package/dist/contract-serialization.d.ts +2 -2
- package/dist/contract-serialization.js +3 -6
- package/dist/contract-types.d.ts +2 -2
- package/dist/contract.d.ts +3 -3
- package/dist/contract.js +4 -6
- package/dist/define.d.ts +8 -1
- package/dist/define.js +119 -122
- package/dist/dev.d.ts +1 -1
- package/dist/dev.js +1 -1
- package/dist/errors.d.ts +4 -1
- package/dist/errors.js +48 -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 +44 -42
- package/dist/index.js +39 -37
- package/dist/lint.js +8 -15
- package/dist/provider.d.ts +11 -11
- package/dist/provider.js +9 -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 +1 -1
- package/dist/runtime/auth-flow.js +3 -3
- package/dist/runtime/browser.d.ts +1 -1
- package/dist/runtime/browser.js +15 -29
- package/dist/runtime/cache.d.ts +1 -1
- package/dist/runtime/cache.js +4 -8
- package/dist/runtime/choice.d.ts +1 -1
- package/dist/runtime/choice.js +31 -35
- 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 +15 -3
- package/dist/runtime/http.d.ts +2 -2
- package/dist/runtime/http.js +144 -348
- 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 +56 -19
- package/dist/runtime/keyring.js +1 -1
- package/dist/runtime/namespace.js +1 -1
- 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 +35 -0
- package/dist/runtime/proxy-nodemaven.js +128 -0
- package/dist/runtime/proxy-retry-policy.d.ts +40 -0
- package/dist/runtime/proxy-retry-policy.js +326 -0
- package/dist/runtime/proxy-telemetry.d.ts +2 -1
- package/dist/runtime/proxy-telemetry.js +55 -52
- package/dist/runtime/redis.d.ts +1 -1
- package/dist/runtime/redis.js +2 -4
- package/dist/runtime/request-options.d.ts +1 -1
- package/dist/runtime/secrets.d.ts +27 -0
- package/dist/runtime/secrets.js +51 -0
- package/dist/runtime/state.d.ts +2 -2
- package/dist/runtime/state.js +15 -4
- package/dist/runtime/stealth.d.ts +2 -2
- package/dist/runtime/stealth.js +108 -212
- package/dist/runtime/stt.d.ts +1 -1
- package/dist/runtime/stt.js +11 -15
- 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-redaction.d.ts +1 -1
- package/dist/server/self-test-redaction.js +1 -1
- package/dist/server/self-test.d.ts +104 -3
- package/dist/server/self-test.js +673 -115
- package/dist/server/serve.d.ts +8 -3
- package/dist/server/serve.js +105 -59
- package/dist/server/types.d.ts +10 -9
- package/dist/server/types.js +3 -7
- package/dist/stealth/profiles.d.ts +1 -1
- package/dist/stealth/profiles.js +5 -14
- package/dist/stream.d.ts +1 -1
- package/dist/testing/index.d.ts +2 -2
- package/dist/testing/index.js +2 -2
- package/dist/testing/run.d.ts +1 -1
- package/dist/testing/run.js +7 -14
- package/dist/types.d.ts +87 -1
- package/dist/user-input.d.ts +30 -0
- package/dist/user-input.js +66 -0
- package/package.json +9 -5
- package/src/auth-turn/index.ts +1 -1
- package/src/auth.ts +28 -86
- package/src/ceremonies/index.ts +24 -78
- 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/config/loader.ts +543 -208
- package/src/contract-serialization.ts +5 -11
- package/src/contract-types.ts +2 -2
- package/src/contract.ts +12 -28
- package/src/define.ts +247 -505
- package/src/dev.ts +4 -9
- package/src/errors.ts +58 -5
- 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 +49 -42
- package/src/lint.ts +89 -159
- package/src/provider.ts +15 -11
- package/src/public-schema-field-lint.ts +7 -33
- package/src/recipes/gov-api.ts +2 -5
- package/src/runtime/auth-flow.ts +5 -7
- package/src/runtime/browser.ts +64 -187
- package/src/runtime/cache.ts +20 -67
- package/src/runtime/choice.ts +79 -132
- package/src/runtime/credential.ts +2 -2
- package/src/runtime/env.ts +1 -1
- package/src/runtime/executor.ts +23 -20
- package/src/runtime/http.ts +195 -559
- package/src/runtime/insights.ts +15 -53
- package/src/runtime/instrumentation.ts +78 -65
- package/src/runtime/keyring.ts +7 -19
- package/src/runtime/namespace.ts +2 -7
- 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 +178 -0
- package/src/runtime/proxy-retry-policy.ts +469 -0
- package/src/runtime/proxy-telemetry.ts +79 -77
- package/src/runtime/redis.ts +4 -12
- package/src/runtime/request-options.ts +4 -13
- package/src/runtime/secrets.ts +64 -0
- package/src/runtime/state.ts +41 -110
- package/src/runtime/stealth.ts +162 -377
- package/src/runtime/stt.ts +38 -94
- package/src/runtime/trace.ts +14 -44
- package/src/runtime/waterfall.ts +5 -18
- package/src/schema.ts +23 -84
- package/src/serve.ts +1 -1
- package/src/server/index.ts +12 -7
- package/src/server/self-test-redaction.ts +2 -2
- package/src/server/self-test.ts +857 -132
- package/src/server/serve.ts +172 -245
- package/src/server/types.ts +7 -19
- package/src/stealth/profiles.ts +10 -26
- package/src/stream.ts +8 -19
- package/src/testing/index.ts +2 -2
- package/src/testing/run.ts +19 -67
- package/src/types.ts +88 -1
- 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
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
isRecord,
|
|
7
7
|
type JsonValue,
|
|
8
8
|
toJsonValue,
|
|
9
|
-
} from "./contract-json";
|
|
10
|
-
import type { SchemaLike } from "./types";
|
|
9
|
+
} from "./contract-json.js";
|
|
10
|
+
import type { SchemaLike } from "./types.js";
|
|
11
11
|
|
|
12
12
|
export function describeSchema(schema: SchemaLike): JsonValue {
|
|
13
13
|
if (isZodSchema(schema)) {
|
|
@@ -17,10 +17,7 @@ export function describeSchema(schema: SchemaLike): JsonValue {
|
|
|
17
17
|
vendor: "zod",
|
|
18
18
|
typeName: getSchemaTypeName(schema),
|
|
19
19
|
jsonSchema,
|
|
20
|
-
jsonSchemaHash:
|
|
21
|
-
jsonSchema === undefined
|
|
22
|
-
? undefined
|
|
23
|
-
: digest(canonicalJson(jsonSchema)),
|
|
20
|
+
jsonSchemaHash: jsonSchema === undefined ? undefined : digest(canonicalJson(jsonSchema)),
|
|
24
21
|
});
|
|
25
22
|
}
|
|
26
23
|
const standard = isRecord(schema) ? schema["~standard"] : undefined;
|
|
@@ -30,8 +27,7 @@ export function describeSchema(schema: SchemaLike): JsonValue {
|
|
|
30
27
|
standard: "standard-schema-v1",
|
|
31
28
|
vendor: typeof standard.vendor === "string" ? standard.vendor : "unknown",
|
|
32
29
|
version:
|
|
33
|
-
typeof standard.version === "number" ||
|
|
34
|
-
typeof standard.version === "string"
|
|
30
|
+
typeof standard.version === "number" || typeof standard.version === "string"
|
|
35
31
|
? standard.version
|
|
36
32
|
: undefined,
|
|
37
33
|
});
|
|
@@ -43,9 +39,7 @@ export function describeSchema(schema: SchemaLike): JsonValue {
|
|
|
43
39
|
});
|
|
44
40
|
}
|
|
45
41
|
|
|
46
|
-
export function serializeSmsMatcher(
|
|
47
|
-
value: Record<string, unknown>,
|
|
48
|
-
): Record<string, unknown> {
|
|
42
|
+
export function serializeSmsMatcher(value: Record<string, unknown>): Record<string, unknown> {
|
|
49
43
|
const code = value.code;
|
|
50
44
|
if (!isRecord(code)) return value;
|
|
51
45
|
const pattern = code.pattern;
|
package/src/contract-types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { JsonValue } from "./contract-json";
|
|
2
|
-
import type { ProviderDefinition } from "./types";
|
|
1
|
+
import type { JsonValue } from "./contract-json.js";
|
|
2
|
+
import type { ProviderDefinition } from "./types.js";
|
|
3
3
|
|
|
4
4
|
export const PROVIDER_CONTRACT_SCHEMA_VERSION = "2026-06-23";
|
|
5
5
|
|
package/src/contract.ts
CHANGED
|
@@ -6,13 +6,13 @@ import {
|
|
|
6
6
|
type JsonPrimitive,
|
|
7
7
|
type JsonValue,
|
|
8
8
|
toJsonValue,
|
|
9
|
-
} from "./contract-json";
|
|
10
|
-
import { describeSchema, serializeSmsMatcher } from "./contract-serialization";
|
|
9
|
+
} from "./contract-json.js";
|
|
10
|
+
import { describeSchema, serializeSmsMatcher } from "./contract-serialization.js";
|
|
11
11
|
import {
|
|
12
12
|
PROVIDER_CONTRACT_SCHEMA_VERSION,
|
|
13
13
|
type ProviderContractOperation,
|
|
14
14
|
type ProviderContractSnapshot,
|
|
15
|
-
} from "./contract-types";
|
|
15
|
+
} from "./contract-types.js";
|
|
16
16
|
import type {
|
|
17
17
|
HealthCheckSuite,
|
|
18
18
|
HealthCheckUnsupported,
|
|
@@ -20,7 +20,7 @@ import type {
|
|
|
20
20
|
OperationDefinition,
|
|
21
21
|
OperationTransport,
|
|
22
22
|
ProviderDefinition,
|
|
23
|
-
} from "./types";
|
|
23
|
+
} from "./types.js";
|
|
24
24
|
|
|
25
25
|
export {
|
|
26
26
|
canonicalJson,
|
|
@@ -31,9 +31,7 @@ export {
|
|
|
31
31
|
type ProviderContractSnapshot,
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
export function extractProviderContract(
|
|
35
|
-
provider: ProviderDefinition,
|
|
36
|
-
): ProviderContractSnapshot {
|
|
34
|
+
export function extractProviderContract(provider: ProviderDefinition): ProviderContractSnapshot {
|
|
37
35
|
const auth = extractAuth(provider.auth);
|
|
38
36
|
const stealth = toJsonValue(provider.stealth);
|
|
39
37
|
const proxy = toJsonValue(provider.proxy);
|
|
@@ -57,12 +55,8 @@ export function extractProviderContract(
|
|
|
57
55
|
meta: toJsonValue(provider.meta) ?? null,
|
|
58
56
|
operations: Object.entries(provider.operations)
|
|
59
57
|
.sort(([leftId], [rightId]) => leftId.localeCompare(rightId))
|
|
60
|
-
.map(([operationId, operation]) =>
|
|
61
|
-
|
|
62
|
-
),
|
|
63
|
-
...(provider.allowedHosts
|
|
64
|
-
? { allowedHosts: [...provider.allowedHosts].sort() }
|
|
65
|
-
: {}),
|
|
58
|
+
.map(([operationId, operation]) => extractOperation(operationId, operation)),
|
|
59
|
+
...(provider.allowedHosts ? { allowedHosts: [...provider.allowedHosts].sort() } : {}),
|
|
66
60
|
...(stealth === undefined ? {} : { stealth }),
|
|
67
61
|
...(proxy === undefined ? {} : { proxy }),
|
|
68
62
|
...(stt === undefined ? {} : { stt }),
|
|
@@ -78,9 +72,7 @@ export function extractProviderContract(
|
|
|
78
72
|
};
|
|
79
73
|
}
|
|
80
74
|
|
|
81
|
-
export function digestProviderContract(
|
|
82
|
-
snapshot: ProviderContractSnapshot,
|
|
83
|
-
): string {
|
|
75
|
+
export function digestProviderContract(snapshot: ProviderContractSnapshot): string {
|
|
84
76
|
return createHash("sha256").update(canonicalJson(snapshot)).digest("hex");
|
|
85
77
|
}
|
|
86
78
|
|
|
@@ -105,9 +97,7 @@ function extractOperation(
|
|
|
105
97
|
const upstream = toJsonValue(operation.upstream);
|
|
106
98
|
const hints = toJsonValue(operation.hints);
|
|
107
99
|
const healthCheck = extractHealthCheck(operation.healthCheck);
|
|
108
|
-
const healthCheckUnsupported = extractHealthCheckUnsupported(
|
|
109
|
-
operation.healthCheckUnsupported,
|
|
110
|
-
);
|
|
100
|
+
const healthCheckUnsupported = extractHealthCheckUnsupported(operation.healthCheckUnsupported);
|
|
111
101
|
|
|
112
102
|
return {
|
|
113
103
|
id: operationId,
|
|
@@ -149,9 +139,7 @@ function extractAuth(value: ProviderDefinition["auth"]): JsonValue | undefined {
|
|
|
149
139
|
});
|
|
150
140
|
}
|
|
151
141
|
|
|
152
|
-
function extractTransport(
|
|
153
|
-
value: OperationTransport | undefined,
|
|
154
|
-
): JsonValue | undefined {
|
|
142
|
+
function extractTransport(value: OperationTransport | undefined): JsonValue | undefined {
|
|
155
143
|
if (!value) return undefined;
|
|
156
144
|
if (value.kind !== "sse") return toJsonValue(value);
|
|
157
145
|
return compactObject({
|
|
@@ -164,9 +152,7 @@ function extractTransport(
|
|
|
164
152
|
});
|
|
165
153
|
}
|
|
166
154
|
|
|
167
|
-
function extractHealthCheck(
|
|
168
|
-
value: HealthCheckSuite | undefined,
|
|
169
|
-
): JsonValue | undefined {
|
|
155
|
+
function extractHealthCheck(value: HealthCheckSuite | undefined): JsonValue | undefined {
|
|
170
156
|
if (!value) return undefined;
|
|
171
157
|
return compactObject({
|
|
172
158
|
interval: value.interval,
|
|
@@ -204,9 +190,7 @@ function extractHealthJourney(value: HealthJourneyDefinition): JsonValue {
|
|
|
204
190
|
cooldown: value.cooldown,
|
|
205
191
|
smsMatchers: toJsonValue(
|
|
206
192
|
value.smsMatchers?.map((matcher) =>
|
|
207
|
-
serializeSmsMatcher(
|
|
208
|
-
copyRecordWithout(matcher, new Set(["extractOtp"])),
|
|
209
|
-
),
|
|
193
|
+
serializeSmsMatcher(copyRecordWithout(matcher, new Set(["extractOtp"]))),
|
|
210
194
|
),
|
|
211
195
|
),
|
|
212
196
|
requiredSecrets: toJsonValue(value.requiredSecrets),
|