@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/cli/create.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const PROVIDER_NAME_REGEX: RegExp;
|
|
2
2
|
export declare const CATEGORY_OPTIONS: readonly ["developer-tools", "finance", "commerce", "productivity", "marketing", "data", "communication", "other"];
|
|
3
3
|
export declare const AUTH_MODE_OPTIONS: readonly ["none", "platform-managed", "credentials", "oauth2"];
|
|
4
|
-
export declare const RUNTIME_OPTIONS: readonly ["standard", "browser"];
|
|
4
|
+
export declare const RUNTIME_OPTIONS: readonly ["standard", "shared", "browser"];
|
|
5
5
|
export declare const PRESET_OPTIONS: readonly ["standalone", "monorepo"];
|
|
6
6
|
export type CreateCategory = (typeof CATEGORY_OPTIONS)[number];
|
|
7
7
|
export type CreateAuthMode = (typeof AUTH_MODE_OPTIONS)[number];
|
|
@@ -26,7 +26,10 @@ export type CreateResolvedOptions = {
|
|
|
26
26
|
};
|
|
27
27
|
export type ProviderPlanFile = {
|
|
28
28
|
path: string;
|
|
29
|
+
/** File content, or the symlink target (relative path) for kind "symlink". */
|
|
29
30
|
content: string;
|
|
31
|
+
/** Absent kind means "file" (backward compatible with older consumers). */
|
|
32
|
+
kind?: "file" | "symlink";
|
|
30
33
|
};
|
|
31
34
|
export type ProviderCreatePlan = {
|
|
32
35
|
displayName: string;
|
package/dist/cli/create.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises";
|
|
4
4
|
import { dirname, relative, resolve } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { cancel, intro, isCancel, note, outro, select, text } from "@clack/prompts";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import packageJson from "../../package.json";
|
|
9
|
+
import { buildPromptAssetManifest, buildPromptAssetPlanEntries, PROMPT_ASSET_MANIFEST_PATH, } from "./prompt-assets.js";
|
|
9
10
|
export const PROVIDER_NAME_REGEX = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
10
11
|
export const CATEGORY_OPTIONS = [
|
|
11
12
|
"developer-tools",
|
|
@@ -18,7 +19,7 @@ export const CATEGORY_OPTIONS = [
|
|
|
18
19
|
"other",
|
|
19
20
|
];
|
|
20
21
|
export const AUTH_MODE_OPTIONS = ["none", "platform-managed", "credentials", "oauth2"];
|
|
21
|
-
export const RUNTIME_OPTIONS = ["standard", "browser"];
|
|
22
|
+
export const RUNTIME_OPTIONS = ["standard", "shared", "browser"];
|
|
22
23
|
export const PRESET_OPTIONS = ["standalone", "monorepo"];
|
|
23
24
|
const CREATE_CONFIG_SCHEMA = z.object({
|
|
24
25
|
authMode: z.enum(AUTH_MODE_OPTIONS).optional(),
|
|
@@ -45,7 +46,7 @@ Options:
|
|
|
45
46
|
--display-name <name>
|
|
46
47
|
--category <category>
|
|
47
48
|
--auth-mode <mode>
|
|
48
|
-
--runtime <standard|browser>
|
|
49
|
+
--runtime <standard|shared|browser>
|
|
49
50
|
--yes
|
|
50
51
|
--dry-run
|
|
51
52
|
--json
|
|
@@ -283,10 +284,15 @@ export async function buildProviderCreatePlan(options, cwd) {
|
|
|
283
284
|
if (options.sdkSpecifier?.startsWith("workspace:") && !resolvedWorkspaceRoot) {
|
|
284
285
|
throw new Error("workspace:* is only valid inside the APIFuse monorepo because public Provider SDK scaffolds must install from npm or an explicit tarball/file specifier.");
|
|
285
286
|
}
|
|
287
|
+
// Exact pin, not a caret range: the prompt-asset freshness gate requires
|
|
288
|
+
// manifest.sdkVersion === installed SDK version, and the manifest records
|
|
289
|
+
// this CLI's own version. A caret range would let `bun install` resolve a
|
|
290
|
+
// newer SDK than the create binary, making a fresh scaffold fail its own
|
|
291
|
+
// gate. `sync-assets` after an explicit SDK upgrade re-records the version.
|
|
286
292
|
const sdkSpecifier = options.sdkSpecifier ??
|
|
287
293
|
(options.preset === "monorepo" && resolvedWorkspaceRoot
|
|
288
294
|
? "workspace:*"
|
|
289
|
-
:
|
|
295
|
+
: packageJson.version);
|
|
290
296
|
const relativeProviderRoot = relative(cwd, providerRoot) || options.name;
|
|
291
297
|
const nextDevCommand = `cd ${relativeProviderRoot} && bun run dev`;
|
|
292
298
|
const packageName = options.preset === "monorepo"
|
|
@@ -373,6 +379,12 @@ export async function buildProviderCreatePlan(options, cwd) {
|
|
|
373
379
|
sdkSpecifier,
|
|
374
380
|
}),
|
|
375
381
|
},
|
|
382
|
+
{
|
|
383
|
+
path: resolve(providerRoot, "provider.json"),
|
|
384
|
+
content: await renderTemplate("provider.json.tpl", {
|
|
385
|
+
PROVIDER_ID: options.name,
|
|
386
|
+
}),
|
|
387
|
+
},
|
|
376
388
|
{
|
|
377
389
|
path: resolve(providerRoot, "Dockerfile"),
|
|
378
390
|
content: await renderTemplate("Dockerfile.tpl", {}),
|
|
@@ -405,39 +417,21 @@ export async function buildProviderCreatePlan(options, cwd) {
|
|
|
405
417
|
PROVIDER_ID: options.name,
|
|
406
418
|
}),
|
|
407
419
|
},
|
|
408
|
-
{
|
|
409
|
-
path: resolve(providerRoot, "AGENTS.md"),
|
|
410
|
-
content: await renderTemplate("AGENTS.md.tpl", {}),
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
path: resolve(providerRoot, "CLAUDE.md"),
|
|
414
|
-
content: await renderTemplate("CLAUDE.md.tpl", {}),
|
|
415
|
-
},
|
|
416
|
-
{
|
|
417
|
-
path: resolve(providerRoot, "skills", "normalization-standards", "SKILL.md"),
|
|
418
|
-
content: await renderTemplate("skills/normalization-standards/SKILL.md.tpl", {}),
|
|
419
|
-
},
|
|
420
|
-
{
|
|
421
|
-
path: resolve(providerRoot, "skills", "upstream-contract-verification", "SKILL.md"),
|
|
422
|
-
content: await renderTemplate("skills/upstream-contract-verification/SKILL.md.tpl", {}),
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
path: resolve(providerRoot, "skills", "fixtures-and-recording", "SKILL.md"),
|
|
426
|
-
content: await renderTemplate("skills/fixtures-and-recording/SKILL.md.tpl", {}),
|
|
427
|
-
},
|
|
428
|
-
{
|
|
429
|
-
path: resolve(providerRoot, "skills", "pagination-and-counts", "SKILL.md"),
|
|
430
|
-
content: await renderTemplate("skills/pagination-and-counts/SKILL.md.tpl", {}),
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
path: resolve(providerRoot, "skills", "health-checks-and-fail-closed", "SKILL.md"),
|
|
434
|
-
content: await renderTemplate("skills/health-checks-and-fail-closed/SKILL.md.tpl", {}),
|
|
435
|
-
},
|
|
436
|
-
{
|
|
437
|
-
path: resolve(providerRoot, "skills", "upstream-notes", "README.md"),
|
|
438
|
-
content: await renderTemplate("skills/upstream-notes/README.md.tpl", {}),
|
|
439
|
-
},
|
|
440
420
|
];
|
|
421
|
+
const promptAssetEntries = await buildPromptAssetPlanEntries(renderTemplate);
|
|
422
|
+
for (const entry of promptAssetEntries) {
|
|
423
|
+
files.push({
|
|
424
|
+
path: resolve(providerRoot, entry.path),
|
|
425
|
+
content: entry.content,
|
|
426
|
+
...(entry.kind === "symlink" ? { kind: "symlink" } : {}),
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
// Manifest last: writePlan writes in order, so a crash mid-scaffold never
|
|
430
|
+
// leaves a manifest that claims assets which were not written.
|
|
431
|
+
files.push({
|
|
432
|
+
path: resolve(providerRoot, PROMPT_ASSET_MANIFEST_PATH),
|
|
433
|
+
content: buildPromptAssetManifest(promptAssetEntries, packageJson.version),
|
|
434
|
+
});
|
|
441
435
|
return {
|
|
442
436
|
displayName: options.displayName,
|
|
443
437
|
files,
|
|
@@ -477,6 +471,7 @@ function renderPackageJson(input) {
|
|
|
477
471
|
check: "apifuse check . && bun run type-check",
|
|
478
472
|
"type-check": "tsc --noEmit",
|
|
479
473
|
"submit-check": "apifuse submit-check . --markdown submission-report.md",
|
|
474
|
+
"sync-assets": "apifuse sync-assets .",
|
|
480
475
|
test: "apifuse test .",
|
|
481
476
|
record: "apifuse record .",
|
|
482
477
|
start: "bun start.ts",
|
|
@@ -696,6 +691,13 @@ function isApifuseInternalWorkspaceRoot(workspaceRoot) {
|
|
|
696
691
|
async function writePlan(plan) {
|
|
697
692
|
for (const file of plan.files) {
|
|
698
693
|
await mkdir(dirname(file.path), { recursive: true });
|
|
694
|
+
if (file.kind === "symlink") {
|
|
695
|
+
// rm operates on the link itself (lstat semantics) and tolerates
|
|
696
|
+
// directories, so whatever occupies the path is replaced by the link.
|
|
697
|
+
await rm(file.path, { recursive: true, force: true });
|
|
698
|
+
await symlink(file.content, file.path);
|
|
699
|
+
continue;
|
|
700
|
+
}
|
|
699
701
|
await writeFile(file.path, file.content);
|
|
700
702
|
}
|
|
701
703
|
}
|
|
@@ -754,7 +756,10 @@ function printResult(plan, jsonMode, dryRun) {
|
|
|
754
756
|
},
|
|
755
757
|
validationCommands: plan.validationCommands,
|
|
756
758
|
nextDevCommand: plan.nextDevCommand,
|
|
757
|
-
files: plan.files.map((file) =>
|
|
759
|
+
files: plan.files.map((file) => {
|
|
760
|
+
const relativePath = relative(plan.providerRoot, file.path) || file.path;
|
|
761
|
+
return file.kind === "symlink" ? `${relativePath} -> ${file.content} (symlink)` : relativePath;
|
|
762
|
+
}),
|
|
758
763
|
};
|
|
759
764
|
if (jsonMode) {
|
|
760
765
|
console.log(JSON.stringify(payload, null, 2));
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type OperationDeclarationRefusalReason = "no_safety" | "safety_conflict" | "locale_key_conflict" | "connection_mode_conflict" | "execution_conflict" | "approval_conflict" | "non_literal" | "unsupported_member" | "factory_composed_operations" | "source_syntax" | "codemod_syntax" | "missing_english_locale" | "operation_id_unresolved" | "examples_conflict" | "locale_todo_conflict";
|
|
2
|
+
export type OperationDeclarationRefusal = {
|
|
3
|
+
readonly file: string;
|
|
4
|
+
readonly operationKey: string;
|
|
5
|
+
readonly reason: OperationDeclarationRefusalReason;
|
|
6
|
+
readonly detail: string;
|
|
7
|
+
};
|
|
8
|
+
export type LocaleTodo = {
|
|
9
|
+
readonly localeFile: string;
|
|
10
|
+
readonly operationKey: string;
|
|
11
|
+
readonly key: string;
|
|
12
|
+
readonly originalProse: string;
|
|
13
|
+
};
|
|
14
|
+
export type OperationDeclarationMigration = {
|
|
15
|
+
readonly status: "migrated";
|
|
16
|
+
readonly code: string;
|
|
17
|
+
readonly operations: number;
|
|
18
|
+
readonly localeTodos: readonly LocaleTodo[];
|
|
19
|
+
} | {
|
|
20
|
+
readonly status: "unchanged";
|
|
21
|
+
readonly code: string;
|
|
22
|
+
readonly operations: number;
|
|
23
|
+
} | {
|
|
24
|
+
readonly status: "refused";
|
|
25
|
+
readonly refusals: readonly OperationDeclarationRefusal[];
|
|
26
|
+
};
|
|
27
|
+
export type OperationDeclarationMigrationOptions = {
|
|
28
|
+
/** Exact operation ids proven from a static operations map, keyed by local binding name. */
|
|
29
|
+
readonly operationIds?: ReadonlyMap<string, string>;
|
|
30
|
+
/** Locale paths relative to the provider root. */
|
|
31
|
+
readonly localeFiles?: readonly string[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Rewrite every operation declaration in one TypeScript module.
|
|
35
|
+
*
|
|
36
|
+
* The function is file-atomic: a single refusal discards every planned edit.
|
|
37
|
+
* It uses AST ranges as a string/comment/template-aware brace balancer and
|
|
38
|
+
* copies every untouched source slice byte-for-byte.
|
|
39
|
+
*/
|
|
40
|
+
export declare function migrateOperationDeclaration(sourceText: string, fileName: string, options?: OperationDeclarationMigrationOptions): OperationDeclarationMigration;
|
|
41
|
+
/** Parse a proposed rewrite and classify a codemod-introduced syntax failure. */
|
|
42
|
+
export declare function verifyOperationDeclarationRewrite(code: string, fileName: string): OperationDeclarationRefusal | undefined;
|
|
43
|
+
export type OperationDeclarationRepositoryResult = {
|
|
44
|
+
readonly status: "migrated" | "would-migrate" | "unchanged";
|
|
45
|
+
readonly providerRoot: string;
|
|
46
|
+
readonly changedFiles: readonly string[];
|
|
47
|
+
readonly operationCount: number;
|
|
48
|
+
readonly sidecar?: string;
|
|
49
|
+
readonly localeTodoCount: number;
|
|
50
|
+
} | {
|
|
51
|
+
readonly status: "refused";
|
|
52
|
+
readonly providerRoot: string;
|
|
53
|
+
readonly refusals: readonly OperationDeclarationRefusal[];
|
|
54
|
+
};
|
|
55
|
+
/** Run the file transform repository-wide, committing writes only if every file is provable. */
|
|
56
|
+
export declare function migrateOperationDeclarationRepository(providerRootInput: string, options?: {
|
|
57
|
+
readonly check?: boolean;
|
|
58
|
+
}): OperationDeclarationRepositoryResult;
|
|
59
|
+
export declare function renderLocaleTodoSidecar(todos: readonly LocaleTodo[]): string;
|