@glubean/sdk 0.2.1 → 0.2.3
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/dist/bootstrap-registry.d.ts +38 -0
- package/dist/bootstrap-registry.d.ts.map +1 -0
- package/dist/bootstrap-registry.js +54 -0
- package/dist/bootstrap-registry.js.map +1 -0
- package/dist/configure/http.d.ts +25 -0
- package/dist/configure/http.d.ts.map +1 -0
- package/dist/configure/http.js +88 -0
- package/dist/configure/http.js.map +1 -0
- package/dist/configure/index.d.ts +78 -0
- package/dist/configure/index.d.ts.map +1 -0
- package/dist/configure/index.js +78 -0
- package/dist/configure/index.js.map +1 -0
- package/dist/configure/plugin.d.ts +23 -0
- package/dist/configure/plugin.d.ts.map +1 -0
- package/dist/configure/plugin.js +81 -0
- package/dist/configure/plugin.js.map +1 -0
- package/dist/configure/runtime.d.ts +24 -0
- package/dist/configure/runtime.d.ts.map +1 -0
- package/dist/configure/runtime.js +45 -0
- package/dist/configure/runtime.js.map +1 -0
- package/dist/configure/template.d.ts +22 -0
- package/dist/configure/template.d.ts.map +1 -0
- package/dist/configure/template.js +34 -0
- package/dist/configure/template.js.map +1 -0
- package/dist/configure/vars.d.ts +20 -0
- package/dist/configure/vars.d.ts.map +1 -0
- package/dist/configure/vars.js +48 -0
- package/dist/configure/vars.js.map +1 -0
- package/dist/configure.d.ts +2 -133
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +2 -436
- package/dist/configure.js.map +1 -1
- package/dist/contract-artifacts.d.ts +268 -0
- package/dist/contract-artifacts.d.ts.map +1 -0
- package/dist/contract-artifacts.js +402 -0
- package/dist/contract-artifacts.js.map +1 -0
- package/dist/contract-core.d.ts +43 -1
- package/dist/contract-core.d.ts.map +1 -1
- package/dist/contract-core.js +376 -5
- package/dist/contract-core.js.map +1 -1
- package/dist/contract-http/adapter.d.ts +1 -7
- package/dist/contract-http/adapter.d.ts.map +1 -1
- package/dist/contract-http/adapter.js +221 -199
- package/dist/contract-http/adapter.js.map +1 -1
- package/dist/contract-http/factory.d.ts.map +1 -1
- package/dist/contract-http/factory.js +13 -14
- package/dist/contract-http/factory.js.map +1 -1
- package/dist/contract-http/index.d.ts +1 -0
- package/dist/contract-http/index.d.ts.map +1 -1
- package/dist/contract-http/index.js +1 -0
- package/dist/contract-http/index.js.map +1 -1
- package/dist/contract-http/openapi.d.ts +56 -7
- package/dist/contract-http/openapi.d.ts.map +1 -1
- package/dist/contract-http/openapi.js +371 -21
- package/dist/contract-http/openapi.js.map +1 -1
- package/dist/contract-http/types.d.ts +72 -24
- package/dist/contract-http/types.d.ts.map +1 -1
- package/dist/contract-http/types.js +45 -1
- package/dist/contract-http/types.js.map +1 -1
- package/dist/contract-types.d.ts +270 -30
- package/dist/contract-types.d.ts.map +1 -1
- package/dist/expect.d.ts +13 -0
- package/dist/expect.d.ts.map +1 -1
- package/dist/expect.js +18 -0
- package/dist/expect.js.map +1 -1
- package/dist/index.d.ts +57 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -8
- package/dist/index.js.map +1 -1
- package/dist/install-plugin.d.ts +94 -0
- package/dist/install-plugin.d.ts.map +1 -0
- package/dist/install-plugin.js +222 -0
- package/dist/install-plugin.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +8 -0
- package/dist/internal.js.map +1 -1
- package/dist/plugin.d.ts +45 -34
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +47 -34
- package/dist/plugin.js.map +1 -1
- package/dist/runner-input-channel.d.ts +95 -0
- package/dist/runner-input-channel.d.ts.map +1 -0
- package/dist/runner-input-channel.js +110 -0
- package/dist/runner-input-channel.js.map +1 -0
- package/dist/{test-builder.d.ts → test/builder.d.ts} +2 -2
- package/dist/test/builder.d.ts.map +1 -0
- package/dist/{test-builder.js → test/builder.js} +3 -3
- package/dist/{test-builder.js.map → test/builder.js.map} +1 -1
- package/dist/{each-builder.d.ts → test/each-builder.d.ts} +1 -1
- package/dist/test/each-builder.d.ts.map +1 -0
- package/dist/{each-builder.js → test/each-builder.js} +3 -3
- package/dist/test/each-builder.js.map +1 -0
- package/dist/{test-extend.d.ts → test/extend.d.ts} +3 -3
- package/dist/test/extend.d.ts.map +1 -0
- package/dist/{test-extend.js → test/extend.js} +5 -5
- package/dist/test/extend.js.map +1 -0
- package/dist/{test-utils.d.ts → test/utils.d.ts} +2 -2
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/{test-utils.js → test/utils.js} +1 -1
- package/dist/test/utils.js.map +1 -0
- package/dist/types.d.ts +78 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/contract-http/flow-helpers.d.ts +0 -12
- package/dist/contract-http/flow-helpers.d.ts.map +0 -1
- package/dist/contract-http/flow-helpers.js +0 -34
- package/dist/contract-http/flow-helpers.js.map +0 -1
- package/dist/contract-http/markdown.d.ts +0 -10
- package/dist/contract-http/markdown.d.ts.map +0 -1
- package/dist/contract-http/markdown.js +0 -21
- package/dist/contract-http/markdown.js.map +0 -1
- package/dist/each-builder.d.ts.map +0 -1
- package/dist/each-builder.js.map +0 -1
- package/dist/test-builder.d.ts.map +0 -1
- package/dist/test-extend.d.ts.map +0 -1
- package/dist/test-extend.js.map +0 -1
- package/dist/test-utils.d.ts.map +0 -1
- package/dist/test-utils.js.map +0 -1
|
@@ -27,13 +27,24 @@ function mergeHttpDefaults(defaults, spec) {
|
|
|
27
27
|
return spec;
|
|
28
28
|
const mergedTags = [...(defaults.tags ?? []), ...(spec.tags ?? [])];
|
|
29
29
|
const mergedExtensions = mergeExtensions(defaults.extensions, spec.extensions);
|
|
30
|
-
|
|
30
|
+
// Embed the factory's instanceName + security into the spec via a private
|
|
31
|
+
// `_factory` channel. `projectHttp` reads this at projection time so the
|
|
32
|
+
// produced `_projection` (and therefore `_extracted`) already carry these
|
|
33
|
+
// fields — no post-dispatch mutation needed.
|
|
34
|
+
const baseMerged = {
|
|
31
35
|
...spec,
|
|
32
36
|
client: spec.client ?? defaults.client,
|
|
33
37
|
feature: spec.feature ?? defaults.feature,
|
|
34
38
|
tags: mergedTags.length > 0 ? mergedTags : undefined,
|
|
35
39
|
extensions: mergedExtensions,
|
|
36
40
|
};
|
|
41
|
+
if (defaults._name) {
|
|
42
|
+
baseMerged._factory = {
|
|
43
|
+
instanceName: defaults._name,
|
|
44
|
+
security: defaults.security,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return baseMerged;
|
|
37
48
|
}
|
|
38
49
|
/**
|
|
39
50
|
* Build a scoped HTTP factory. `dispatch` is `contract.http` attached by
|
|
@@ -47,10 +58,7 @@ export function createHttpFactory(dispatch, defaults) {
|
|
|
47
58
|
`then call instance("${id}", spec).`);
|
|
48
59
|
}
|
|
49
60
|
const merged = mergeHttpDefaults(defaults, spec);
|
|
50
|
-
|
|
51
|
-
// Attach instanceName + security after dispatch so they appear in projection
|
|
52
|
-
applyInstanceMetadata(result, defaults._name, defaults.security);
|
|
53
|
-
return result;
|
|
61
|
+
return dispatch(id, merged);
|
|
54
62
|
};
|
|
55
63
|
factory.with = (name, more) => {
|
|
56
64
|
const mergedTags = [...(defaults?.tags ?? []), ...(more.tags ?? [])];
|
|
@@ -71,13 +79,4 @@ export function createHttpFactory(dispatch, defaults) {
|
|
|
71
79
|
export function createHttpRoot(dispatch) {
|
|
72
80
|
return createHttpFactory(dispatch);
|
|
73
81
|
}
|
|
74
|
-
function applyInstanceMetadata(contract, instanceName, security) {
|
|
75
|
-
// Mutate _projection to attach instanceName / security (not otherwise
|
|
76
|
-
// available to adapter.project since it doesn't know the factory defaults)
|
|
77
|
-
const proj = contract._projection;
|
|
78
|
-
proj.instanceName = instanceName;
|
|
79
|
-
if (security != null && proj.schemas) {
|
|
80
|
-
proj.schemas.security = security;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
82
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/contract-http/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsBH,SAAS,eAAe,CACtB,IAA4B,EAC5B,QAAgC;IAEhC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAA4B;QACtC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACf,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAsC,EACtC,IAAsB;IAEtB,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/E,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/contract-http/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,5 +12,6 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { httpAdapter } from "./adapter.js";
|
|
14
14
|
export { createHttpFactory, createHttpRoot } from "./factory.js";
|
|
15
|
+
export { defineHttpCase } from "./types.js";
|
|
15
16
|
export type { HttpContractSpec, HttpContractDefaults, HttpSecurityScheme, HttpContractRoot, HttpContractFactory, ContractCase, ContractExpect, ContractExample, NormalizedHeaders, ParamValue, RequestSpec, HttpPayloadSchemas, HttpSafeSchemas, HttpContractMeta, HttpParamSchema, HttpParamMeta, HttpFlowCaseOutput, InferHttpInputs, InferHttpOutput, } from "./types.js";
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAEV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,WAAW,EAEX,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,15 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenAPI generation for HTTP contracts.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Two public functions:
|
|
5
|
+
* - `buildOpenApiPartForHttp(contract)` → partial OpenAPI document for a
|
|
6
|
+
* single HTTP contract. Used as HTTP adapter's `artifacts.openapi`
|
|
7
|
+
* producer.
|
|
8
|
+
* - `mergeOpenApiParts(parts, options)` → combine partial docs into a
|
|
9
|
+
* full OpenAPI document with info / tags / components / paths. Used as
|
|
10
|
+
* `openapiArtifact.merge`.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
12
|
+
* Logic ported from `packages/mcp/src/index.ts` `contractsToOpenApi` (CAR-1
|
|
13
|
+
* Phase 2 — the two-way split of the former 250-line monolith:
|
|
14
|
+
* per-contract path+operation build stays with the HTTP adapter, final
|
|
15
|
+
* assembly moves to the artifact kind). Behavior is byte-for-byte
|
|
16
|
+
* preserved; `packages/mcp/src/openapi-integration.test.ts` guards the
|
|
17
|
+
* contract.
|
|
11
18
|
*/
|
|
12
19
|
import type { ExtractedContractProjection } from "../contract-types.js";
|
|
13
20
|
import type { HttpContractMeta, HttpSafeSchemas } from "./types.js";
|
|
14
|
-
export
|
|
21
|
+
export type OpenApiDocument = Record<string, unknown>;
|
|
22
|
+
export interface OpenApiOptions {
|
|
23
|
+
title?: string;
|
|
24
|
+
version?: string;
|
|
25
|
+
servers?: Array<{
|
|
26
|
+
url: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build a partial OpenAPI document for a single HTTP contract.
|
|
32
|
+
*
|
|
33
|
+
* Returns an object containing only the fields this contract contributes:
|
|
34
|
+
* a single `paths[apiPath][method]` entry, the `tags` it references (from
|
|
35
|
+
* `feature`), and the `components.securitySchemes` entry it needs (if any).
|
|
36
|
+
* Cross-contract fields (`openapi`, `info`, full `tags` array, full
|
|
37
|
+
* `components`) are materialized by `mergeOpenApiParts`.
|
|
38
|
+
*
|
|
39
|
+
* Returns `null` for non-HTTP protocols or malformed targets; the render
|
|
40
|
+
* pipeline drops null parts.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildOpenApiPartForHttp(projection: ExtractedContractProjection<HttpSafeSchemas, HttpContractMeta>): OpenApiDocument | null;
|
|
43
|
+
/**
|
|
44
|
+
* Combine per-contract partials into a full OpenAPI 3.1 document.
|
|
45
|
+
*
|
|
46
|
+
* - `paths`: deep-merge at 2 levels (same path, different methods combine)
|
|
47
|
+
* - `components.securitySchemes`: union by name (first wins on collision;
|
|
48
|
+
* name uniqueness is handled at part construction via `instanceName` suffix)
|
|
49
|
+
* - `tags`: dedupe by name across parts
|
|
50
|
+
* - `info`: built from options.title / options.version (defaults match MCP)
|
|
51
|
+
* - `servers`: from options, if present
|
|
52
|
+
*
|
|
53
|
+
* Null / non-contributing parts are filtered by the render pipeline before
|
|
54
|
+
* reaching here.
|
|
55
|
+
*/
|
|
56
|
+
export declare function mergeOpenApiParts(parts: OpenApiDocument[], options?: OpenApiOptions): OpenApiDocument;
|
|
57
|
+
/**
|
|
58
|
+
* Empty OpenAPI 3.1 skeleton returned when no HTTP contract contributes a
|
|
59
|
+
* part (e.g. a project with only gRPC / GraphQL contracts, or an empty
|
|
60
|
+
* project). Used as `openapiArtifact.empty` so callers always receive a
|
|
61
|
+
* valid `OpenApiDocument`.
|
|
62
|
+
*/
|
|
63
|
+
export declare const emptyOpenApiDocument: OpenApiDocument;
|
|
15
64
|
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/contract-http/openapi.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/contract-http/openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMpE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAyMD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,2BAA2B,CAAC,eAAe,EAAE,gBAAgB,CAAC,GACzE,eAAe,GAAG,IAAI,CA6QxB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,eAAe,CA8DjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAIlC,CAAC"}
|
|
@@ -1,38 +1,388 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenAPI generation for HTTP contracts.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Two public functions:
|
|
5
|
+
* - `buildOpenApiPartForHttp(contract)` → partial OpenAPI document for a
|
|
6
|
+
* single HTTP contract. Used as HTTP adapter's `artifacts.openapi`
|
|
7
|
+
* producer.
|
|
8
|
+
* - `mergeOpenApiParts(parts, options)` → combine partial docs into a
|
|
9
|
+
* full OpenAPI document with info / tags / components / paths. Used as
|
|
10
|
+
* `openapiArtifact.merge`.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
12
|
+
* Logic ported from `packages/mcp/src/index.ts` `contractsToOpenApi` (CAR-1
|
|
13
|
+
* Phase 2 — the two-way split of the former 250-line monolith:
|
|
14
|
+
* per-contract path+operation build stays with the HTTP adapter, final
|
|
15
|
+
* assembly moves to the artifact kind). Behavior is byte-for-byte
|
|
16
|
+
* preserved; `packages/mcp/src/openapi-integration.test.ts` guards the
|
|
17
|
+
* contract.
|
|
11
18
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Internal helpers
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Map HttpSecurityScheme to OpenAPI securitySchemes entry + scheme name.
|
|
24
|
+
* Uses instanceName to disambiguate when multiple instances use different
|
|
25
|
+
* apiKey/oauth2 configurations (bearer/basic are canonical and shared).
|
|
26
|
+
*/
|
|
27
|
+
function securityToOpenApi(security, instanceName) {
|
|
28
|
+
if (!security)
|
|
29
|
+
return null;
|
|
30
|
+
if (security === "bearer")
|
|
31
|
+
return { name: "bearerAuth", scheme: { type: "http", scheme: "bearer" } };
|
|
32
|
+
if (security === "basic")
|
|
33
|
+
return { name: "basicAuth", scheme: { type: "http", scheme: "basic" } };
|
|
34
|
+
if (typeof security === "object" && security !== null) {
|
|
35
|
+
const s = security;
|
|
36
|
+
const suffix = instanceName ? `_${instanceName}` : "";
|
|
37
|
+
if (s.type === "apiKey")
|
|
38
|
+
return {
|
|
39
|
+
name: `apiKeyAuth${suffix}`,
|
|
40
|
+
scheme: { type: "apiKey", name: s.name, in: s.in },
|
|
41
|
+
};
|
|
42
|
+
if (s.type === "oauth2")
|
|
43
|
+
return {
|
|
44
|
+
name: `oauth2Auth${suffix}`,
|
|
45
|
+
scheme: { type: "oauth2", flows: s.flows },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Read HTTP fields from either nested (v0.2+) or flat (pre-v0.2 fixture)
|
|
52
|
+
* shape. Mirrors MCP's former `toLegacyHttpContract` dual-read.
|
|
53
|
+
*/
|
|
54
|
+
function readContractFields(c) {
|
|
55
|
+
const cAny = c;
|
|
56
|
+
const schemas = cAny.schemas;
|
|
57
|
+
return {
|
|
58
|
+
security: schemas?.security ?? cAny.security,
|
|
59
|
+
requestBody: schemas?.request?.body ?? cAny.requestSchema,
|
|
60
|
+
requestContentType: schemas?.request?.contentType ??
|
|
61
|
+
cAny.requestContentType,
|
|
62
|
+
requestHeaders: schemas?.request?.headers ?? cAny.requestHeaders,
|
|
63
|
+
requestExample: schemas?.request?.example ?? cAny.requestExample,
|
|
64
|
+
requestExamples: (schemas?.request?.examples ??
|
|
65
|
+
cAny.requestExamples),
|
|
19
66
|
};
|
|
67
|
+
}
|
|
68
|
+
function readCaseFields(cas) {
|
|
69
|
+
const csAny = cas;
|
|
70
|
+
const cs_schemas = csAny.schemas;
|
|
71
|
+
const response = cs_schemas?.response;
|
|
72
|
+
const protocolExpect = csAny.protocolExpect;
|
|
73
|
+
return {
|
|
74
|
+
status: response?.status ?? protocolExpect?.status,
|
|
75
|
+
responseBody: response?.body ?? csAny.responseSchema,
|
|
76
|
+
responseContentType: response?.contentType ??
|
|
77
|
+
csAny.responseContentType,
|
|
78
|
+
responseHeaders: response?.headers ?? csAny.responseHeaders,
|
|
79
|
+
examples: (response?.examples ??
|
|
80
|
+
csAny.examples),
|
|
81
|
+
paramSchemas: (cs_schemas?.params ??
|
|
82
|
+
csAny.paramSchemas),
|
|
83
|
+
querySchemas: (cs_schemas?.query ??
|
|
84
|
+
csAny.querySchemas),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// =============================================================================
|
|
88
|
+
// Per-contract builder (HTTP adapter's artifacts.openapi producer)
|
|
89
|
+
// =============================================================================
|
|
90
|
+
/**
|
|
91
|
+
* Build a partial OpenAPI document for a single HTTP contract.
|
|
92
|
+
*
|
|
93
|
+
* Returns an object containing only the fields this contract contributes:
|
|
94
|
+
* a single `paths[apiPath][method]` entry, the `tags` it references (from
|
|
95
|
+
* `feature`), and the `components.securitySchemes` entry it needs (if any).
|
|
96
|
+
* Cross-contract fields (`openapi`, `info`, full `tags` array, full
|
|
97
|
+
* `components`) are materialized by `mergeOpenApiParts`.
|
|
98
|
+
*
|
|
99
|
+
* Returns `null` for non-HTTP protocols or malformed targets; the render
|
|
100
|
+
* pipeline drops null parts.
|
|
101
|
+
*/
|
|
102
|
+
export function buildOpenApiPartForHttp(projection) {
|
|
103
|
+
const c = projection;
|
|
104
|
+
if (c.protocol !== "http")
|
|
105
|
+
return null;
|
|
106
|
+
const match = c.target.match(/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+(.+)$/i);
|
|
107
|
+
if (!match)
|
|
108
|
+
return null;
|
|
109
|
+
const method = match[1].toLowerCase();
|
|
110
|
+
let apiPath = match[2];
|
|
111
|
+
// Convert :param to {param} for OpenAPI
|
|
112
|
+
apiPath = apiPath.replace(/:(\w+)/g, "{$1}");
|
|
113
|
+
// Dual-shape field reads (nested v0.2+ / flat pre-v0.2 fixtures)
|
|
114
|
+
const fields = readContractFields(c);
|
|
115
|
+
// Collect security scheme
|
|
116
|
+
const secMapping = securityToOpenApi(fields.security, c.instanceName);
|
|
20
117
|
const responses = {};
|
|
21
|
-
for (const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
118
|
+
for (const cas of c.cases) {
|
|
119
|
+
const casFields = readCaseFields(cas);
|
|
120
|
+
const statusCode = String(casFields.status ?? 200);
|
|
121
|
+
const contentType = casFields.responseContentType ?? "application/json";
|
|
122
|
+
if (!responses[statusCode]) {
|
|
123
|
+
responses[statusCode] = {
|
|
124
|
+
description: cas.description ?? "",
|
|
125
|
+
contents: {},
|
|
126
|
+
headers: {},
|
|
26
127
|
};
|
|
27
128
|
}
|
|
129
|
+
const resp = responses[statusCode];
|
|
130
|
+
if (!resp.contents[contentType]) {
|
|
131
|
+
resp.contents[contentType] = { examples: {} };
|
|
132
|
+
}
|
|
133
|
+
const bucket = resp.contents[contentType];
|
|
134
|
+
// First non-undefined schema per (status, contentType) wins.
|
|
135
|
+
if (!bucket.schema && casFields.responseBody) {
|
|
136
|
+
bucket.schema = casFields.responseBody;
|
|
137
|
+
}
|
|
138
|
+
// Examples merge. Prefix with case key to guarantee uniqueness.
|
|
139
|
+
if (casFields.examples) {
|
|
140
|
+
for (const [exName, ex] of Object.entries(casFields.examples)) {
|
|
141
|
+
const fullName = exName === "default" ? cas.key : `${cas.key}_${exName}`;
|
|
142
|
+
bucket.examples[fullName] = ex;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Response headers merge at status level (first wins per header name).
|
|
146
|
+
if (casFields.responseHeaders) {
|
|
147
|
+
const headersSchema = casFields.responseHeaders;
|
|
148
|
+
if (headersSchema?.properties) {
|
|
149
|
+
for (const [headerName, headerSchema] of Object.entries(headersSchema.properties)) {
|
|
150
|
+
if (!resp.headers[headerName]) {
|
|
151
|
+
resp.headers[headerName] = { schema: headerSchema };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
28
156
|
}
|
|
29
|
-
|
|
30
|
-
|
|
157
|
+
// Finalize response shape for OpenAPI
|
|
158
|
+
const openApiResponses = {};
|
|
159
|
+
for (const [status, resp] of Object.entries(responses)) {
|
|
160
|
+
const out = { description: resp.description };
|
|
161
|
+
const contentOut = {};
|
|
162
|
+
for (const [ctype, bucket] of Object.entries(resp.contents)) {
|
|
163
|
+
if (bucket.schema || Object.keys(bucket.examples).length > 0) {
|
|
164
|
+
const entry = {};
|
|
165
|
+
if (bucket.schema)
|
|
166
|
+
entry.schema = bucket.schema;
|
|
167
|
+
if (Object.keys(bucket.examples).length > 0)
|
|
168
|
+
entry.examples = bucket.examples;
|
|
169
|
+
contentOut[ctype] = entry;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (Object.keys(contentOut).length > 0)
|
|
173
|
+
out.content = contentOut;
|
|
174
|
+
if (Object.keys(resp.headers).length > 0)
|
|
175
|
+
out.headers = resp.headers;
|
|
176
|
+
openApiResponses[status] = out;
|
|
177
|
+
}
|
|
178
|
+
// Build operation
|
|
179
|
+
const operation = {
|
|
180
|
+
operationId: c.id,
|
|
181
|
+
summary: c.description,
|
|
182
|
+
responses: openApiResponses,
|
|
183
|
+
};
|
|
184
|
+
if (c.feature)
|
|
185
|
+
operation.tags = [c.feature];
|
|
186
|
+
// Contract-level deprecated flag
|
|
187
|
+
if (c.deprecated) {
|
|
188
|
+
operation.deprecated = true;
|
|
189
|
+
operation["x-deprecated-reason"] = c.deprecated;
|
|
190
|
+
}
|
|
191
|
+
// Contract-level OpenAPI extensions (x-* keys)
|
|
192
|
+
if (c.extensions) {
|
|
193
|
+
for (const [extKey, extVal] of Object.entries(c.extensions)) {
|
|
194
|
+
operation[extKey] = extVal;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Operation-level security from contract instance
|
|
198
|
+
if (secMapping) {
|
|
199
|
+
operation.security = [{ [secMapping.name]: [] }];
|
|
200
|
+
}
|
|
201
|
+
else if (fields.security === null) {
|
|
202
|
+
operation.security = []; // explicitly public
|
|
203
|
+
}
|
|
204
|
+
const mergeFieldLevel = (target, source) => {
|
|
205
|
+
if (!source)
|
|
206
|
+
return;
|
|
207
|
+
for (const [name, meta] of Object.entries(source)) {
|
|
208
|
+
if (!target[name])
|
|
209
|
+
target[name] = {};
|
|
210
|
+
const slot = target[name];
|
|
211
|
+
if (slot.schema === undefined && meta.schema !== undefined)
|
|
212
|
+
slot.schema = meta.schema;
|
|
213
|
+
if (slot.description === undefined && meta.description !== undefined)
|
|
214
|
+
slot.description = meta.description;
|
|
215
|
+
if (slot.required === undefined && meta.required !== undefined)
|
|
216
|
+
slot.required = meta.required;
|
|
217
|
+
if (slot.deprecated === undefined && meta.deprecated !== undefined)
|
|
218
|
+
slot.deprecated = meta.deprecated;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const mergedParamMetas = {};
|
|
222
|
+
const mergedQueryMetas = {};
|
|
223
|
+
for (const cas of c.cases) {
|
|
224
|
+
const casFields = readCaseFields(cas);
|
|
225
|
+
mergeFieldLevel(mergedParamMetas, casFields.paramSchemas);
|
|
226
|
+
mergeFieldLevel(mergedQueryMetas, casFields.querySchemas);
|
|
227
|
+
}
|
|
228
|
+
// Extract path parameters from URL and attach merged metadata
|
|
229
|
+
const paramMatches = apiPath.matchAll(/\{(\w+)\}/g);
|
|
230
|
+
const pathParams = [...paramMatches].map((m) => {
|
|
231
|
+
const name = m[1];
|
|
232
|
+
const meta = mergedParamMetas[name];
|
|
233
|
+
return {
|
|
234
|
+
name,
|
|
235
|
+
in: "path",
|
|
236
|
+
required: meta?.required ?? true,
|
|
237
|
+
schema: meta?.schema ?? { type: "string" },
|
|
238
|
+
...(meta?.description ? { description: meta.description } : {}),
|
|
239
|
+
...(meta?.deprecated ? { deprecated: true } : {}),
|
|
240
|
+
};
|
|
241
|
+
});
|
|
242
|
+
// Query parameters (only ones with metadata)
|
|
243
|
+
const queryParams = Object.entries(mergedQueryMetas).map(([name, meta]) => ({
|
|
244
|
+
name,
|
|
245
|
+
in: "query",
|
|
246
|
+
required: meta.required ?? false,
|
|
247
|
+
schema: meta.schema ?? { type: "string" },
|
|
248
|
+
...(meta.description ? { description: meta.description } : {}),
|
|
249
|
+
...(meta.deprecated ? { deprecated: true } : {}),
|
|
250
|
+
}));
|
|
251
|
+
// Request header parameters from contract-level request.headers schema.
|
|
252
|
+
const headerParams = [];
|
|
253
|
+
const reqHeadersSchema = fields.requestHeaders;
|
|
254
|
+
if (reqHeadersSchema &&
|
|
255
|
+
typeof reqHeadersSchema === "object" &&
|
|
256
|
+
reqHeadersSchema.properties) {
|
|
257
|
+
const requiredList = Array.isArray(reqHeadersSchema.required)
|
|
258
|
+
? reqHeadersSchema.required
|
|
259
|
+
: [];
|
|
260
|
+
for (const [headerName, headerSchema] of Object.entries(reqHeadersSchema.properties)) {
|
|
261
|
+
headerParams.push({
|
|
262
|
+
name: headerName,
|
|
263
|
+
in: "header",
|
|
264
|
+
required: requiredList.includes(headerName),
|
|
265
|
+
schema: headerSchema,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const allParams = [...pathParams, ...queryParams, ...headerParams];
|
|
270
|
+
if (allParams.length > 0)
|
|
271
|
+
operation.parameters = allParams;
|
|
272
|
+
// Request body (schema + examples)
|
|
273
|
+
if (fields.requestBody ||
|
|
274
|
+
fields.requestExample !== undefined ||
|
|
275
|
+
fields.requestExamples) {
|
|
276
|
+
const reqContentType = fields.requestContentType ?? "application/json";
|
|
277
|
+
const contentEntry = {};
|
|
278
|
+
if (fields.requestBody)
|
|
279
|
+
contentEntry.schema = fields.requestBody;
|
|
280
|
+
const exMap = {};
|
|
281
|
+
if (fields.requestExample !== undefined) {
|
|
282
|
+
exMap.default = { value: fields.requestExample };
|
|
283
|
+
}
|
|
284
|
+
if (fields.requestExamples) {
|
|
285
|
+
for (const [k, v] of Object.entries(fields.requestExamples)) {
|
|
286
|
+
exMap[k] = v;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (Object.keys(exMap).length > 0)
|
|
290
|
+
contentEntry.examples = exMap;
|
|
291
|
+
operation.requestBody = {
|
|
292
|
+
content: { [reqContentType]: contentEntry },
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
// Assemble the partial doc
|
|
296
|
+
const partial = {
|
|
31
297
|
paths: {
|
|
32
|
-
[
|
|
298
|
+
[apiPath]: {
|
|
33
299
|
[method]: operation,
|
|
34
300
|
},
|
|
35
301
|
},
|
|
36
302
|
};
|
|
303
|
+
if (c.feature) {
|
|
304
|
+
partial.tags = [{ name: c.feature }];
|
|
305
|
+
}
|
|
306
|
+
if (secMapping) {
|
|
307
|
+
partial.components = {
|
|
308
|
+
securitySchemes: { [secMapping.name]: secMapping.scheme },
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
return partial;
|
|
312
|
+
}
|
|
313
|
+
// =============================================================================
|
|
314
|
+
// Merge: combine partial docs into a full OpenAPI document
|
|
315
|
+
// =============================================================================
|
|
316
|
+
/**
|
|
317
|
+
* Combine per-contract partials into a full OpenAPI 3.1 document.
|
|
318
|
+
*
|
|
319
|
+
* - `paths`: deep-merge at 2 levels (same path, different methods combine)
|
|
320
|
+
* - `components.securitySchemes`: union by name (first wins on collision;
|
|
321
|
+
* name uniqueness is handled at part construction via `instanceName` suffix)
|
|
322
|
+
* - `tags`: dedupe by name across parts
|
|
323
|
+
* - `info`: built from options.title / options.version (defaults match MCP)
|
|
324
|
+
* - `servers`: from options, if present
|
|
325
|
+
*
|
|
326
|
+
* Null / non-contributing parts are filtered by the render pipeline before
|
|
327
|
+
* reaching here.
|
|
328
|
+
*/
|
|
329
|
+
export function mergeOpenApiParts(parts, options) {
|
|
330
|
+
const paths = {};
|
|
331
|
+
const tagsByName = new Map();
|
|
332
|
+
const securitySchemes = {};
|
|
333
|
+
for (const part of parts) {
|
|
334
|
+
const partPaths = (part.paths ?? {});
|
|
335
|
+
for (const [apiPath, methods] of Object.entries(partPaths)) {
|
|
336
|
+
if (!paths[apiPath])
|
|
337
|
+
paths[apiPath] = {};
|
|
338
|
+
for (const [method, operation] of Object.entries(methods)) {
|
|
339
|
+
// Same path + method collision shouldn't happen (ids unique) but if it
|
|
340
|
+
// does, first-wins matches MCP's Object.assign semantics.
|
|
341
|
+
if (!paths[apiPath][method]) {
|
|
342
|
+
paths[apiPath][method] = operation;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
const partTags = (part.tags ?? []);
|
|
347
|
+
for (const tag of partTags) {
|
|
348
|
+
if (tag?.name && !tagsByName.has(tag.name))
|
|
349
|
+
tagsByName.set(tag.name, tag);
|
|
350
|
+
}
|
|
351
|
+
const partSchemes = (part.components ?? {}).securitySchemes;
|
|
352
|
+
if (partSchemes) {
|
|
353
|
+
for (const [name, scheme] of Object.entries(partSchemes)) {
|
|
354
|
+
if (!securitySchemes[name])
|
|
355
|
+
securitySchemes[name] = scheme;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
const title = options?.title ?? "API Specification";
|
|
360
|
+
const version = options?.version ?? "1.0.0";
|
|
361
|
+
const doc = {
|
|
362
|
+
openapi: "3.1.0",
|
|
363
|
+
info: { title, version },
|
|
364
|
+
};
|
|
365
|
+
if (options?.servers && options.servers.length > 0) {
|
|
366
|
+
doc.servers = options.servers;
|
|
367
|
+
}
|
|
368
|
+
if (tagsByName.size > 0) {
|
|
369
|
+
doc.tags = [...tagsByName.values()];
|
|
370
|
+
}
|
|
371
|
+
if (Object.keys(securitySchemes).length > 0) {
|
|
372
|
+
doc.components = { securitySchemes };
|
|
373
|
+
}
|
|
374
|
+
doc.paths = paths;
|
|
375
|
+
return doc;
|
|
37
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Empty OpenAPI 3.1 skeleton returned when no HTTP contract contributes a
|
|
379
|
+
* part (e.g. a project with only gRPC / GraphQL contracts, or an empty
|
|
380
|
+
* project). Used as `openapiArtifact.empty` so callers always receive a
|
|
381
|
+
* valid `OpenApiDocument`.
|
|
382
|
+
*/
|
|
383
|
+
export const emptyOpenApiDocument = {
|
|
384
|
+
openapi: "3.1.0",
|
|
385
|
+
info: { title: "", version: "0.0.0" },
|
|
386
|
+
paths: {},
|
|
387
|
+
};
|
|
38
388
|
//# sourceMappingURL=openapi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/contract-http/openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,UAAU,mBAAmB,CACjC,UAA0E;IAE1E,qEAAqE;IACrE,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC;IAExD,MAAM,SAAS,GAA4B;QACzC,OAAO,EAAE,UAAU,CAAC,WAAW;QAC/B,WAAW,EAAE,UAAU,CAAC,EAAE;KAC3B,CAAC;IAEF,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,MAAM,CAAC,GAAG;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IAEhC,OAAO;QACL,KAAK,EAAE;YACL,CAAC,IAAI,CAAC,EAAE;gBACN,CAAC,MAAM,CAAC,EAAE,SAAS;aACpB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/contract-http/openapi.ts"],"names":[],"mappings":"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"}
|