@sdk-it/spec 0.26.0 → 0.28.0
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +2 -2
- package/dist/lib/operation.js +1 -1
- package/dist/lib/operation.js.map +1 -1
- package/dist/lib/options.d.ts +2 -2
- package/dist/lib/options.d.ts.map +1 -1
- package/dist/lib/options.js +9 -1
- package/dist/lib/options.js.map +2 -2
- package/dist/lib/overview-docs/overview-auth.d.ts +4 -0
- package/dist/lib/overview-docs/overview-auth.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-auth.js +173 -0
- package/dist/lib/overview-docs/overview-auth.js.map +7 -0
- package/dist/lib/overview-docs/overview-docs.d.ts +4 -0
- package/dist/lib/overview-docs/overview-docs.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-docs.js +20 -0
- package/dist/lib/overview-docs/overview-docs.js.map +7 -0
- package/dist/lib/overview-docs/overview-errors.d.ts +4 -0
- package/dist/lib/overview-docs/overview-errors.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-errors.js +137 -0
- package/dist/lib/overview-docs/overview-errors.js.map +7 -0
- package/dist/lib/overview-docs/overview-intro.d.ts +4 -0
- package/dist/lib/overview-docs/overview-intro.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-intro.js +77 -0
- package/dist/lib/overview-docs/overview-intro.js.map +7 -0
- package/dist/lib/overview-docs/overview-pagination.d.ts +4 -0
- package/dist/lib/overview-docs/overview-pagination.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-pagination.js +80 -0
- package/dist/lib/overview-docs/overview-pagination.js.map +7 -0
- package/dist/lib/overview-docs/overview-quick-reference.d.ts +4 -0
- package/dist/lib/overview-docs/overview-quick-reference.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-sdk-examples.d.ts +4 -0
- package/dist/lib/overview-docs/overview-sdk-examples.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-usage.d.ts +4 -0
- package/dist/lib/overview-docs/overview-usage.d.ts.map +1 -0
- package/dist/lib/tune-request-body.d.ts.map +1 -1
- package/dist/lib/tune-request-body.js +5 -2
- package/dist/lib/tune-request-body.js.map +2 -2
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/lib/overview-docs.js +0 -276
- package/dist/lib/overview-docs.js.map +0 -7
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { forEachOperation } from "../for-each-operation.js";
|
|
2
|
+
function generateIntroOverview(spec, availablesdks = ["typescript"]) {
|
|
3
|
+
const info = spec.info;
|
|
4
|
+
const markdown = [];
|
|
5
|
+
const tags = /* @__PURE__ */ new Set();
|
|
6
|
+
const methods = /* @__PURE__ */ new Set();
|
|
7
|
+
forEachOperation(spec, (entry) => {
|
|
8
|
+
tags.add(entry.tag);
|
|
9
|
+
methods.add(entry.method.toUpperCase());
|
|
10
|
+
});
|
|
11
|
+
if (spec.info.title) {
|
|
12
|
+
markdown.push(`# ${spec.info.title || "API Reference"}
|
|
13
|
+
`);
|
|
14
|
+
}
|
|
15
|
+
if (spec.info.description) {
|
|
16
|
+
markdown.push(`${spec.info.description}
|
|
17
|
+
`);
|
|
18
|
+
}
|
|
19
|
+
if (spec.info.version) {
|
|
20
|
+
markdown.push(`**Version:** ${spec.info.version}
|
|
21
|
+
`);
|
|
22
|
+
}
|
|
23
|
+
if (spec.servers && spec.servers.length > 0) {
|
|
24
|
+
markdown.push(`## API Servers`);
|
|
25
|
+
markdown.push(`The following servers are available for this API:`);
|
|
26
|
+
markdown.push("");
|
|
27
|
+
for (const server of spec.servers) {
|
|
28
|
+
let serverLine = `- **${server.url}**`;
|
|
29
|
+
if (server.description) {
|
|
30
|
+
serverLine += ` - ${server.description}`;
|
|
31
|
+
}
|
|
32
|
+
markdown.push(serverLine);
|
|
33
|
+
}
|
|
34
|
+
markdown.push("");
|
|
35
|
+
}
|
|
36
|
+
if (info.contact) {
|
|
37
|
+
markdown.push(`## Contact`);
|
|
38
|
+
if (info.contact.name) {
|
|
39
|
+
markdown.push(`**Name:** ${info.contact.name}`);
|
|
40
|
+
}
|
|
41
|
+
if (info.contact.email) {
|
|
42
|
+
markdown.push(`**Email:** ${info.contact.email}`);
|
|
43
|
+
}
|
|
44
|
+
if (info.contact.url) {
|
|
45
|
+
markdown.push(`**URL:** ${info.contact.url}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (info.license) {
|
|
49
|
+
markdown.push(`## License`);
|
|
50
|
+
if (info.license.name) {
|
|
51
|
+
let licenseString = `**License:** ${info.license.name}`;
|
|
52
|
+
if (info.license.url) {
|
|
53
|
+
licenseString += ` ([${info.license.url}](${info.license.url}))`;
|
|
54
|
+
}
|
|
55
|
+
markdown.push(licenseString);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
markdown.push(`## Official API Clients`);
|
|
59
|
+
markdown.push(
|
|
60
|
+
`${info.title || "This API"} provides official client SDKs for multiple programming languages. We recommend using these clients to interact with all stable endpoints. You can find them here:`
|
|
61
|
+
);
|
|
62
|
+
for (const link of availablesdks) {
|
|
63
|
+
const sdkName = link.replace("/", "").replace("-sdk", "").toUpperCase();
|
|
64
|
+
markdown.push(`- [${sdkName} SDK](${link})`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
id: "generated-introduction",
|
|
68
|
+
title: "Introduction",
|
|
69
|
+
url: "/introduction",
|
|
70
|
+
description: "API overview and getting started guide",
|
|
71
|
+
content: markdown.join("\n\n")
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
generateIntroOverview
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=overview-intro.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lib/overview-docs/overview-intro.ts"],
|
|
4
|
+
"sourcesContent": ["import { forEachOperation } from '../for-each-operation.js';\nimport type { NavItem } from '../sidebar.js';\nimport type { OurOpenAPIObject } from '../types.js';\n\nexport function generateIntroOverview(\n spec: OurOpenAPIObject,\n availablesdks = ['typescript'],\n): NavItem {\n const info = spec.info;\n const markdown: string[] = [];\n\n const tags = new Set<string>();\n const methods = new Set<string>();\n\n forEachOperation(spec, (entry) => {\n tags.add(entry.tag);\n methods.add(entry.method.toUpperCase());\n });\n\n if (spec.info.title) {\n markdown.push(`# ${spec.info.title || 'API Reference'}\\n`);\n }\n\n if (spec.info.description) {\n markdown.push(`${spec.info.description}\\n`);\n }\n\n if (spec.info.version) {\n markdown.push(`**Version:** ${spec.info.version}\\n`);\n }\n\n if (spec.servers && spec.servers.length > 0) {\n markdown.push(`## API Servers`);\n markdown.push(`The following servers are available for this API:`);\n markdown.push('');\n\n for (const server of spec.servers) {\n let serverLine = `- **${server.url}**`;\n if (server.description) {\n serverLine += ` - ${server.description}`;\n }\n markdown.push(serverLine);\n }\n markdown.push('');\n }\n\n if (info.contact) {\n markdown.push(`## Contact`);\n if (info.contact.name) {\n markdown.push(`**Name:** ${info.contact.name}`);\n }\n if (info.contact.email) {\n markdown.push(`**Email:** ${info.contact.email}`);\n }\n if (info.contact.url) {\n markdown.push(`**URL:** ${info.contact.url}`);\n }\n }\n\n if (info.license) {\n markdown.push(`## License`);\n if (info.license.name) {\n let licenseString = `**License:** ${info.license.name}`;\n if (info.license.url) {\n licenseString += ` ([${info.license.url}](${info.license.url}))`;\n }\n markdown.push(licenseString);\n }\n }\n\n markdown.push(`## Official API Clients`);\n markdown.push(\n `${info.title || 'This API'} provides official client SDKs for multiple programming languages. We recommend using these clients to interact with all stable endpoints. You can find them here:`,\n );\n\n for (const link of availablesdks) {\n const sdkName = link.replace('/', '').replace('-sdk', '').toUpperCase();\n markdown.push(`- [${sdkName} SDK](${link})`);\n }\n\n return {\n id: 'generated-introduction',\n title: 'Introduction',\n url: '/introduction',\n description: 'API overview and getting started guide',\n content: markdown.join('\\n\\n'),\n };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,wBAAwB;AAI1B,SAAS,sBACd,MACA,gBAAgB,CAAC,YAAY,GACpB;AACT,QAAM,OAAO,KAAK;AAClB,QAAM,WAAqB,CAAC;AAE5B,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAAU,oBAAI,IAAY;AAEhC,mBAAiB,MAAM,CAAC,UAAU;AAChC,SAAK,IAAI,MAAM,GAAG;AAClB,YAAQ,IAAI,MAAM,OAAO,YAAY,CAAC;AAAA,EACxC,CAAC;AAED,MAAI,KAAK,KAAK,OAAO;AACnB,aAAS,KAAK,KAAK,KAAK,KAAK,SAAS,eAAe;AAAA,CAAI;AAAA,EAC3D;AAEA,MAAI,KAAK,KAAK,aAAa;AACzB,aAAS,KAAK,GAAG,KAAK,KAAK,WAAW;AAAA,CAAI;AAAA,EAC5C;AAEA,MAAI,KAAK,KAAK,SAAS;AACrB,aAAS,KAAK,gBAAgB,KAAK,KAAK,OAAO;AAAA,CAAI;AAAA,EACrD;AAEA,MAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,aAAS,KAAK,gBAAgB;AAC9B,aAAS,KAAK,mDAAmD;AACjE,aAAS,KAAK,EAAE;AAEhB,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,aAAa,OAAO,OAAO,GAAG;AAClC,UAAI,OAAO,aAAa;AACtB,sBAAc,MAAM,OAAO,WAAW;AAAA,MACxC;AACA,eAAS,KAAK,UAAU;AAAA,IAC1B;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAEA,MAAI,KAAK,SAAS;AAChB,aAAS,KAAK,YAAY;AAC1B,QAAI,KAAK,QAAQ,MAAM;AACrB,eAAS,KAAK,aAAa,KAAK,QAAQ,IAAI,EAAE;AAAA,IAChD;AACA,QAAI,KAAK,QAAQ,OAAO;AACtB,eAAS,KAAK,cAAc,KAAK,QAAQ,KAAK,EAAE;AAAA,IAClD;AACA,QAAI,KAAK,QAAQ,KAAK;AACpB,eAAS,KAAK,YAAY,KAAK,QAAQ,GAAG,EAAE;AAAA,IAC9C;AAAA,EACF;AAEA,MAAI,KAAK,SAAS;AAChB,aAAS,KAAK,YAAY;AAC1B,QAAI,KAAK,QAAQ,MAAM;AACrB,UAAI,gBAAgB,gBAAgB,KAAK,QAAQ,IAAI;AACrD,UAAI,KAAK,QAAQ,KAAK;AACpB,yBAAiB,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,MAC9D;AACA,eAAS,KAAK,aAAa;AAAA,IAC7B;AAAA,EACF;AAEA,WAAS,KAAK,yBAAyB;AACvC,WAAS;AAAA,IACP,GAAG,KAAK,SAAS,UAAU;AAAA,EAC7B;AAEA,aAAW,QAAQ,eAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,YAAY;AACtE,aAAS,KAAK,MAAM,OAAO,SAAS,IAAI,GAAG;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,aAAa;AAAA,IACb,SAAS,SAAS,KAAK,MAAM;AAAA,EAC/B;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview-pagination.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAkF1E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
function generatePaginationOverview(spec) {
|
|
2
|
+
const markdown = [];
|
|
3
|
+
markdown.push(`# Pagination`);
|
|
4
|
+
markdown.push(`This API uses cursor-based pagination to efficiently navigate through large datasets.`);
|
|
5
|
+
markdown.push(`## How Pagination Works`);
|
|
6
|
+
markdown.push(`When making requests to endpoints that return multiple items, you can control the number of results and navigate through pages using the following parameters:`);
|
|
7
|
+
markdown.push("");
|
|
8
|
+
markdown.push(`- **limit** - The maximum number of items to return per page (default: 20, max: 100)`);
|
|
9
|
+
markdown.push(`- **cursor** - A token representing the position in the dataset to start from`);
|
|
10
|
+
markdown.push("");
|
|
11
|
+
markdown.push(`## Example Usage`);
|
|
12
|
+
markdown.push("");
|
|
13
|
+
markdown.push("### TypeScript");
|
|
14
|
+
markdown.push("```typescript");
|
|
15
|
+
markdown.push("// First page");
|
|
16
|
+
markdown.push("const firstPage = await client.items.list({");
|
|
17
|
+
markdown.push(" limit: 25");
|
|
18
|
+
markdown.push("});");
|
|
19
|
+
markdown.push("");
|
|
20
|
+
markdown.push("// Next page");
|
|
21
|
+
markdown.push("if (firstPage.nextCursor) {");
|
|
22
|
+
markdown.push(" const secondPage = await client.items.list({");
|
|
23
|
+
markdown.push(" limit: 25,");
|
|
24
|
+
markdown.push(" cursor: firstPage.nextCursor");
|
|
25
|
+
markdown.push(" });");
|
|
26
|
+
markdown.push("}");
|
|
27
|
+
markdown.push("```");
|
|
28
|
+
markdown.push("");
|
|
29
|
+
markdown.push(`## Response Structure`);
|
|
30
|
+
markdown.push(`Paginated responses follow this structure:`);
|
|
31
|
+
markdown.push("");
|
|
32
|
+
markdown.push("```json");
|
|
33
|
+
markdown.push("{");
|
|
34
|
+
markdown.push(' "data": [...], // Array of items');
|
|
35
|
+
markdown.push(' "nextCursor": "eyJpZCI6MTAwfQ==", // Token for next page (null if last page)');
|
|
36
|
+
markdown.push(' "hasMore": true, // Whether more pages exist');
|
|
37
|
+
markdown.push(' "totalCount": 150 // Total number of items (if available)');
|
|
38
|
+
markdown.push("}");
|
|
39
|
+
markdown.push("```");
|
|
40
|
+
markdown.push("");
|
|
41
|
+
markdown.push(`## Iterating Through All Pages`);
|
|
42
|
+
markdown.push("");
|
|
43
|
+
markdown.push("### TypeScript");
|
|
44
|
+
markdown.push("```typescript");
|
|
45
|
+
markdown.push("async function getAllItems() {");
|
|
46
|
+
markdown.push(" const allItems = [];");
|
|
47
|
+
markdown.push(" let cursor = undefined;");
|
|
48
|
+
markdown.push(" ");
|
|
49
|
+
markdown.push(" do {");
|
|
50
|
+
markdown.push(" const page = await client.items.list({");
|
|
51
|
+
markdown.push(" limit: 100,");
|
|
52
|
+
markdown.push(" cursor");
|
|
53
|
+
markdown.push(" });");
|
|
54
|
+
markdown.push(" ");
|
|
55
|
+
markdown.push(" allItems.push(...page.data);");
|
|
56
|
+
markdown.push(" cursor = page.nextCursor;");
|
|
57
|
+
markdown.push(" } while (cursor);");
|
|
58
|
+
markdown.push(" ");
|
|
59
|
+
markdown.push(" return allItems;");
|
|
60
|
+
markdown.push("}");
|
|
61
|
+
markdown.push("```");
|
|
62
|
+
markdown.push("");
|
|
63
|
+
markdown.push(`## Best Practices`);
|
|
64
|
+
markdown.push("");
|
|
65
|
+
markdown.push(`1. **Use appropriate page sizes** - Balance between number of requests and response size`);
|
|
66
|
+
markdown.push(`2. **Handle cursors securely** - Don't modify cursor values; treat them as opaque tokens`);
|
|
67
|
+
markdown.push(`3. **Implement retry logic** - Handle temporary failures when iterating through pages`);
|
|
68
|
+
markdown.push(`4. **Consider rate limits** - Be mindful of API rate limits when fetching multiple pages`);
|
|
69
|
+
return {
|
|
70
|
+
id: "generated-pagination",
|
|
71
|
+
title: "Pagination",
|
|
72
|
+
url: "/pagination",
|
|
73
|
+
description: "Learn how to navigate through paginated API responses",
|
|
74
|
+
content: markdown.join("\n")
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
generatePaginationOverview
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=overview-pagination.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lib/overview-docs/overview-pagination.ts"],
|
|
4
|
+
"sourcesContent": ["import type { NavItem } from '../sidebar.js';\nimport type { OurOpenAPIObject } from '../types.js';\n\nexport function generatePaginationOverview(spec: OurOpenAPIObject): NavItem {\n const markdown: string[] = [];\n\n markdown.push(`# Pagination`);\n markdown.push(`This API uses cursor-based pagination to efficiently navigate through large datasets.`);\n \n markdown.push(`## How Pagination Works`);\n markdown.push(`When making requests to endpoints that return multiple items, you can control the number of results and navigate through pages using the following parameters:`);\n markdown.push('');\n markdown.push(`- **limit** - The maximum number of items to return per page (default: 20, max: 100)`);\n markdown.push(`- **cursor** - A token representing the position in the dataset to start from`);\n markdown.push('');\n\n markdown.push(`## Example Usage`);\n markdown.push('');\n markdown.push('### TypeScript');\n markdown.push('```typescript');\n markdown.push('// First page');\n markdown.push('const firstPage = await client.items.list({');\n markdown.push(' limit: 25');\n markdown.push('});');\n markdown.push('');\n markdown.push('// Next page');\n markdown.push('if (firstPage.nextCursor) {');\n markdown.push(' const secondPage = await client.items.list({');\n markdown.push(' limit: 25,');\n markdown.push(' cursor: firstPage.nextCursor');\n markdown.push(' });');\n markdown.push('}');\n markdown.push('```');\n markdown.push('');\n\n markdown.push(`## Response Structure`);\n markdown.push(`Paginated responses follow this structure:`);\n markdown.push('');\n markdown.push('```json');\n markdown.push('{');\n markdown.push(' \"data\": [...], // Array of items');\n markdown.push(' \"nextCursor\": \"eyJpZCI6MTAwfQ==\", // Token for next page (null if last page)');\n markdown.push(' \"hasMore\": true, // Whether more pages exist');\n markdown.push(' \"totalCount\": 150 // Total number of items (if available)');\n markdown.push('}');\n markdown.push('```');\n markdown.push('');\n\n markdown.push(`## Iterating Through All Pages`);\n markdown.push('');\n markdown.push('### TypeScript');\n markdown.push('```typescript');\n markdown.push('async function getAllItems() {');\n markdown.push(' const allItems = [];');\n markdown.push(' let cursor = undefined;');\n markdown.push(' ');\n markdown.push(' do {');\n markdown.push(' const page = await client.items.list({');\n markdown.push(' limit: 100,');\n markdown.push(' cursor');\n markdown.push(' });');\n markdown.push(' ');\n markdown.push(' allItems.push(...page.data);');\n markdown.push(' cursor = page.nextCursor;');\n markdown.push(' } while (cursor);');\n markdown.push(' ');\n markdown.push(' return allItems;');\n markdown.push('}');\n markdown.push('```');\n markdown.push('');\n\n markdown.push(`## Best Practices`);\n markdown.push('');\n markdown.push(`1. **Use appropriate page sizes** - Balance between number of requests and response size`);\n markdown.push(`2. **Handle cursors securely** - Don't modify cursor values; treat them as opaque tokens`);\n markdown.push(`3. **Implement retry logic** - Handle temporary failures when iterating through pages`);\n markdown.push(`4. **Consider rate limits** - Be mindful of API rate limits when fetching multiple pages`);\n\n return {\n id: 'generated-pagination',\n title: 'Pagination',\n url: '/pagination',\n description: 'Learn how to navigate through paginated API responses',\n content: markdown.join('\\n'),\n };\n}"],
|
|
5
|
+
"mappings": "AAGO,SAAS,2BAA2B,MAAiC;AAC1E,QAAM,WAAqB,CAAC;AAE5B,WAAS,KAAK,cAAc;AAC5B,WAAS,KAAK,uFAAuF;AAErG,WAAS,KAAK,yBAAyB;AACvC,WAAS,KAAK,gKAAgK;AAC9K,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,sFAAsF;AACpG,WAAS,KAAK,+EAA+E;AAC7F,WAAS,KAAK,EAAE;AAEhB,WAAS,KAAK,kBAAkB;AAChC,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,gBAAgB;AAC9B,WAAS,KAAK,eAAe;AAC7B,WAAS,KAAK,eAAe;AAC7B,WAAS,KAAK,6CAA6C;AAC3D,WAAS,KAAK,aAAa;AAC3B,WAAS,KAAK,KAAK;AACnB,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,cAAc;AAC5B,WAAS,KAAK,6BAA6B;AAC3C,WAAS,KAAK,gDAAgD;AAC9D,WAAS,KAAK,gBAAgB;AAC9B,WAAS,KAAK,kCAAkC;AAChD,WAAS,KAAK,OAAO;AACrB,WAAS,KAAK,GAAG;AACjB,WAAS,KAAK,KAAK;AACnB,WAAS,KAAK,EAAE;AAEhB,WAAS,KAAK,uBAAuB;AACrC,WAAS,KAAK,4CAA4C;AAC1D,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,SAAS;AACvB,WAAS,KAAK,GAAG;AACjB,WAAS,KAAK,oCAAoC;AAClD,WAAS,KAAK,gFAAgF;AAC9F,WAAS,KAAK,gDAAgD;AAC9D,WAAS,KAAK,6DAA6D;AAC3E,WAAS,KAAK,GAAG;AACjB,WAAS,KAAK,KAAK;AACnB,WAAS,KAAK,EAAE;AAEhB,WAAS,KAAK,gCAAgC;AAC9C,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,gBAAgB;AAC9B,WAAS,KAAK,eAAe;AAC7B,WAAS,KAAK,gCAAgC;AAC9C,WAAS,KAAK,wBAAwB;AACtC,WAAS,KAAK,2BAA2B;AACzC,WAAS,KAAK,IAAI;AAClB,WAAS,KAAK,QAAQ;AACtB,WAAS,KAAK,4CAA4C;AAC1D,WAAS,KAAK,mBAAmB;AACjC,WAAS,KAAK,cAAc;AAC5B,WAAS,KAAK,SAAS;AACvB,WAAS,KAAK,MAAM;AACpB,WAAS,KAAK,kCAAkC;AAChD,WAAS,KAAK,+BAA+B;AAC7C,WAAS,KAAK,qBAAqB;AACnC,WAAS,KAAK,IAAI;AAClB,WAAS,KAAK,oBAAoB;AAClC,WAAS,KAAK,GAAG;AACjB,WAAS,KAAK,KAAK;AACnB,WAAS,KAAK,EAAE;AAEhB,WAAS,KAAK,mBAAmB;AACjC,WAAS,KAAK,EAAE;AAChB,WAAS,KAAK,0FAA0F;AACxG,WAAS,KAAK,0FAA0F;AACxG,WAAS,KAAK,uFAAuF;AACrG,WAAS,KAAK,0FAA0F;AAExG,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,aAAa;AAAA,IACb,SAAS,SAAS,KAAK,IAAI;AAAA,EAC7B;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview-quick-reference.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-quick-reference.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,gBAAgB,GACrB,OAAO,CA6KT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview-sdk-examples.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-sdk-examples.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,EACtB,aAAa,GAAE,MAAM,EAAmB,GACvC,OAAO,CAwMT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview-usage.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-usage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CA2FrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tune-request-body.d.ts","sourceRoot":"","sources":["../../src/lib/tune-request-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,YAAY,EACZ,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,eAAe,EAAE,EAC7B,QAAQ,EAAE,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"tune-request-body.d.ts","sourceRoot":"","sources":["../../src/lib/tune-request-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,YAAY,EACZ,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,eAAe,EAAE,EAC7B,QAAQ,EAAE,yBAAyB,EAAE,QA+BtC;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,eAAe,EAAE,EAC7B,QAAQ,EAAE,yBAAyB,EAAE,GACpC,oBAAoB,CA+DtB"}
|
|
@@ -3,8 +3,11 @@ import { isEmpty } from "@sdk-it/core/utils.js";
|
|
|
3
3
|
import { findUniqueSchemaName } from "./find-unique-schema-name.js";
|
|
4
4
|
import { securityToOptions } from "./security.js";
|
|
5
5
|
function patchParameters(spec, schema, parameters, security) {
|
|
6
|
-
const
|
|
7
|
-
|
|
6
|
+
const securityOptions = securityToOptions(
|
|
7
|
+
spec,
|
|
8
|
+
security,
|
|
9
|
+
spec.components.securitySchemes
|
|
10
|
+
);
|
|
8
11
|
let required = Array.isArray(schema.required) ? schema.required : [];
|
|
9
12
|
schema["x-properties"] ??= {};
|
|
10
13
|
for (const param of parameters) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/tune-request-body.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n OperationObject,\n ParameterObject,\n RequestBodyObject,\n SchemaObject,\n SecurityRequirementObject,\n} from 'openapi3-ts/oas31';\n\nimport { followRef, isRef } from '@sdk-it/core/ref.js';\nimport { isEmpty } from '@sdk-it/core/utils.js';\n\nimport { findUniqueSchemaName } from './find-unique-schema-name.js';\nimport { securityToOptions } from './security.js';\nimport type { OurOpenAPIObject, OurRequestBodyObject } from './types.js';\n\nexport function patchParameters(\n spec: OurOpenAPIObject,\n schema: SchemaObject,\n parameters: ParameterObject[],\n security: SecurityRequirementObject[],\n) {\n const
|
|
5
|
-
"mappings": "AAQA,SAAS,WAAW,aAAa;AACjC,SAAS,eAAe;AAExB,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAG3B,SAAS,gBACd,MACA,QACA,YACA,UACA;AACA,QAAM,kBAAkB,
|
|
4
|
+
"sourcesContent": ["import type {\n OperationObject,\n ParameterObject,\n RequestBodyObject,\n SchemaObject,\n SecurityRequirementObject,\n} from 'openapi3-ts/oas31';\n\nimport { followRef, isRef } from '@sdk-it/core/ref.js';\nimport { isEmpty } from '@sdk-it/core/utils.js';\n\nimport { findUniqueSchemaName } from './find-unique-schema-name.js';\nimport { securityToOptions } from './security.js';\nimport type { OurOpenAPIObject, OurRequestBodyObject } from './types.js';\n\nexport function patchParameters(\n spec: OurOpenAPIObject,\n schema: SchemaObject,\n parameters: ParameterObject[],\n security: SecurityRequirementObject[],\n) {\n const securityOptions = securityToOptions(\n spec,\n security,\n spec.components.securitySchemes,\n );\n\n let required = Array.isArray(schema.required) ? schema.required : [];\n schema['x-properties'] ??= {};\n for (const param of parameters) {\n if (param.required) {\n required.push(param.name);\n }\n schema['x-properties'][param.name] = {\n 'x-in': param.in,\n ...(isRef(param.schema)\n ? followRef<SchemaObject>(spec, param.schema.$ref)\n : (param.schema ?? { type: 'string' })),\n };\n }\n for (const param of securityOptions) {\n required = required.filter((name) => name !== param.name);\n schema['x-properties'][param.name] = {\n 'x-in': 'header',\n ...(isRef(param.schema)\n ? followRef<SchemaObject>(spec, param.schema.$ref)\n : (param.schema ?? { type: 'string' })),\n };\n }\n schema['x-required'] = required;\n}\n\nexport function tuneRequestBody(\n spec: OurOpenAPIObject,\n operationId: string,\n operation: OperationObject,\n parameters: ParameterObject[],\n security: SecurityRequirementObject[],\n): OurRequestBodyObject {\n const inputName = findUniqueSchemaName(spec, operationId, [\n 'input',\n 'payload',\n 'request',\n ]);\n const requestBody = isRef(operation.requestBody)\n ? followRef<RequestBodyObject>(spec, operation.requestBody.$ref)\n : (operation.requestBody ?? {\n content: {},\n required: false,\n });\n if (isEmpty(requestBody.content)) {\n const schema: SchemaObject = {\n 'x-inputname': inputName,\n 'x-requestbody': true,\n };\n patchParameters(spec, schema, parameters, security);\n const tuned: OurRequestBodyObject = {\n ...requestBody,\n content: {\n 'application/empty': {\n schema: { $ref: `#/components/schemas/${inputName}` },\n },\n },\n };\n\n spec.components.schemas[inputName] = schema;\n return tuned;\n }\n for (const contentType in requestBody.content) {\n const mediaType = requestBody.content[contentType];\n let schema: SchemaObject | undefined;\n\n switch (true) {\n case isRef(mediaType.schema):\n schema = followRef<SchemaObject>(spec, mediaType.schema.$ref);\n // we cannot use the model name as inputName as it might be used in other places that are not request bodies\n // inputName = parseRef(mediaType.schema.$ref).model;\n break;\n case isEmpty(mediaType.schema):\n schema ??= {}; // default to empty schema if not defined\n console.warn(\n `Request body schema for content type \"${contentType}\" is empty.`,\n );\n break;\n default:\n schema = mediaType.schema;\n break;\n }\n\n patchParameters(spec, schema, parameters, security);\n spec.components.schemas[inputName] = {\n ...schema,\n 'x-requestbody': true,\n 'x-inputname': inputName,\n };\n\n requestBody.content[contentType].schema = {\n $ref: `#/components/schemas/${inputName}`,\n };\n }\n return requestBody as OurRequestBodyObject;\n}\n"],
|
|
5
|
+
"mappings": "AAQA,SAAS,WAAW,aAAa;AACjC,SAAS,eAAe;AAExB,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAG3B,SAAS,gBACd,MACA,QACA,YACA,UACA;AACA,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,KAAK,WAAW;AAAA,EAClB;AAEA,MAAI,WAAW,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW,CAAC;AACnE,SAAO,cAAc,MAAM,CAAC;AAC5B,aAAW,SAAS,YAAY;AAC9B,QAAI,MAAM,UAAU;AAClB,eAAS,KAAK,MAAM,IAAI;AAAA,IAC1B;AACA,WAAO,cAAc,EAAE,MAAM,IAAI,IAAI;AAAA,MACnC,QAAQ,MAAM;AAAA,MACd,GAAI,MAAM,MAAM,MAAM,IAClB,UAAwB,MAAM,MAAM,OAAO,IAAI,IAC9C,MAAM,UAAU,EAAE,MAAM,SAAS;AAAA,IACxC;AAAA,EACF;AACA,aAAW,SAAS,iBAAiB;AACnC,eAAW,SAAS,OAAO,CAAC,SAAS,SAAS,MAAM,IAAI;AACxD,WAAO,cAAc,EAAE,MAAM,IAAI,IAAI;AAAA,MACnC,QAAQ;AAAA,MACR,GAAI,MAAM,MAAM,MAAM,IAClB,UAAwB,MAAM,MAAM,OAAO,IAAI,IAC9C,MAAM,UAAU,EAAE,MAAM,SAAS;AAAA,IACxC;AAAA,EACF;AACA,SAAO,YAAY,IAAI;AACzB;AAEO,SAAS,gBACd,MACA,aACA,WACA,YACA,UACsB;AACtB,QAAM,YAAY,qBAAqB,MAAM,aAAa;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,cAAc,MAAM,UAAU,WAAW,IAC3C,UAA6B,MAAM,UAAU,YAAY,IAAI,IAC5D,UAAU,eAAe;AAAA,IACxB,SAAS,CAAC;AAAA,IACV,UAAU;AAAA,EACZ;AACJ,MAAI,QAAQ,YAAY,OAAO,GAAG;AAChC,UAAM,SAAuB;AAAA,MAC3B,eAAe;AAAA,MACf,iBAAiB;AAAA,IACnB;AACA,oBAAgB,MAAM,QAAQ,YAAY,QAAQ;AAClD,UAAM,QAA8B;AAAA,MAClC,GAAG;AAAA,MACH,SAAS;AAAA,QACP,qBAAqB;AAAA,UACnB,QAAQ,EAAE,MAAM,wBAAwB,SAAS,GAAG;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAEA,SAAK,WAAW,QAAQ,SAAS,IAAI;AACrC,WAAO;AAAA,EACT;AACA,aAAW,eAAe,YAAY,SAAS;AAC7C,UAAM,YAAY,YAAY,QAAQ,WAAW;AACjD,QAAI;AAEJ,YAAQ,MAAM;AAAA,MACZ,KAAK,MAAM,UAAU,MAAM;AACzB,iBAAS,UAAwB,MAAM,UAAU,OAAO,IAAI;AAG5D;AAAA,MACF,KAAK,QAAQ,UAAU,MAAM;AAC3B,mBAAW,CAAC;AACZ,gBAAQ;AAAA,UACN,yCAAyC,WAAW;AAAA,QACtD;AACA;AAAA,MACF;AACE,iBAAS,UAAU;AACnB;AAAA,IACJ;AAEA,oBAAgB,MAAM,QAAQ,YAAY,QAAQ;AAClD,SAAK,WAAW,QAAQ,SAAS,IAAI;AAAA,MACnC,GAAG;AAAA,MACH,iBAAiB;AAAA,MACjB,eAAe;AAAA,IACjB;AAEA,gBAAY,QAAQ,WAAW,EAAE,SAAS;AAAA,MACxC,MAAM,wBAAwB,SAAS;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface OurOpenAPIObject extends OpenAPIObject {
|
|
|
7
7
|
'x-tagGroups': TagGroups[];
|
|
8
8
|
components: Omit<ComponentsObject, 'schemas'> & {
|
|
9
9
|
schemas: Record<string, SchemaObject | ReferenceObject>;
|
|
10
|
-
securitySchemes: Record<string, SecuritySchemeObject
|
|
10
|
+
securitySchemes: Record<string, SecuritySchemeObject>;
|
|
11
11
|
};
|
|
12
12
|
paths: PathsObject;
|
|
13
13
|
}
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KACvD,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,MAAM,CACb,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAC9D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CACpE,GAAG;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CACf,MAAM,EACN,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdk-it/spec",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"!**/*.tsbuildinfo"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@sdk-it/core": "0.
|
|
29
|
+
"@sdk-it/core": "0.28.0",
|
|
30
30
|
"openapi3-ts": "4.4.0",
|
|
31
31
|
"pluralize": "^8.0.0",
|
|
32
32
|
"stringcase": "^4.3.1",
|
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
import { resolveRef } from "@sdk-it/core/ref.js";
|
|
2
|
-
import { forEachOperation } from "./for-each-operation.js";
|
|
3
|
-
import { isErrorStatusCode } from "./is.js";
|
|
4
|
-
function generateIntroductionMarkdown(spec) {
|
|
5
|
-
const info = spec.info;
|
|
6
|
-
let markdown = "";
|
|
7
|
-
if (info.title) {
|
|
8
|
-
markdown += `# ${info.title}
|
|
9
|
-
|
|
10
|
-
`;
|
|
11
|
-
}
|
|
12
|
-
if (info.description) {
|
|
13
|
-
markdown += `${info.description}
|
|
14
|
-
|
|
15
|
-
`;
|
|
16
|
-
}
|
|
17
|
-
if (info.version) {
|
|
18
|
-
markdown += `**Version:** ${info.version}
|
|
19
|
-
|
|
20
|
-
`;
|
|
21
|
-
}
|
|
22
|
-
if (info.contact) {
|
|
23
|
-
markdown += `## Contact
|
|
24
|
-
|
|
25
|
-
`;
|
|
26
|
-
if (info.contact.name) {
|
|
27
|
-
markdown += `**Name:** ${info.contact.name}
|
|
28
|
-
|
|
29
|
-
`;
|
|
30
|
-
}
|
|
31
|
-
if (info.contact.email) {
|
|
32
|
-
markdown += `**Email:** ${info.contact.email}
|
|
33
|
-
|
|
34
|
-
`;
|
|
35
|
-
}
|
|
36
|
-
if (info.contact.url) {
|
|
37
|
-
markdown += `**URL:** ${info.contact.url}
|
|
38
|
-
|
|
39
|
-
`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (info.license) {
|
|
43
|
-
markdown += `## License
|
|
44
|
-
|
|
45
|
-
`;
|
|
46
|
-
if (info.license.name) {
|
|
47
|
-
markdown += `**License:** ${info.license.name}`;
|
|
48
|
-
if (info.license.url) {
|
|
49
|
-
markdown += ` ([${info.license.url}](${info.license.url}))`;
|
|
50
|
-
}
|
|
51
|
-
markdown += `
|
|
52
|
-
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
markdown += `## Available SDKs
|
|
57
|
-
|
|
58
|
-
`;
|
|
59
|
-
const sdkLinks = [
|
|
60
|
-
"/typescript-sdk",
|
|
61
|
-
"/python-sdk",
|
|
62
|
-
"/go-sdk",
|
|
63
|
-
"/java-sdk",
|
|
64
|
-
"/php-sdk",
|
|
65
|
-
"/ruby-sdk",
|
|
66
|
-
"/dart-sdk"
|
|
67
|
-
];
|
|
68
|
-
for (const link of sdkLinks) {
|
|
69
|
-
const sdkName = link.replace("/", "").replace("-sdk", "").toUpperCase();
|
|
70
|
-
markdown += `- [${sdkName} SDK](${link})
|
|
71
|
-
`;
|
|
72
|
-
}
|
|
73
|
-
return markdown;
|
|
74
|
-
}
|
|
75
|
-
function getStatusDescription(statusCode) {
|
|
76
|
-
const descriptions = {
|
|
77
|
-
"400": "Bad Request - The request was invalid or cannot be served.",
|
|
78
|
-
"401": "Unauthorized - Authentication is required and has failed or has not been provided.",
|
|
79
|
-
"403": "Forbidden - The request was valid, but the server is refusing action.",
|
|
80
|
-
"404": "Not Found - The requested resource could not be found.",
|
|
81
|
-
"422": "Unprocessable Entity - The request was well-formed but contains semantic errors.",
|
|
82
|
-
"429": "Too Many Requests - The user has sent too many requests in a given amount of time.",
|
|
83
|
-
"500": "Internal Server Error - The server encountered an unexpected condition.",
|
|
84
|
-
"502": "Bad Gateway - The server received an invalid response from the upstream server.",
|
|
85
|
-
"503": "Service Unavailable - The server is currently unavailable."
|
|
86
|
-
};
|
|
87
|
-
return descriptions[statusCode] || "An error occurred while processing the request.";
|
|
88
|
-
}
|
|
89
|
-
function generateErrorsMarkdown(errorSchemas) {
|
|
90
|
-
let markdown = `# Error Handling
|
|
91
|
-
|
|
92
|
-
`;
|
|
93
|
-
markdown += `This API uses conventional HTTP response codes to indicate the success or failure of an API request.
|
|
94
|
-
|
|
95
|
-
`;
|
|
96
|
-
markdown += `## HTTP Status Codes
|
|
97
|
-
|
|
98
|
-
`;
|
|
99
|
-
const errors = Array.from(errorSchemas.values()).sort(
|
|
100
|
-
(a, b) => parseInt(a.statusCode) - parseInt(b.statusCode)
|
|
101
|
-
);
|
|
102
|
-
for (const error of errors) {
|
|
103
|
-
markdown += `### ${error.statusCode} - ${error.title}
|
|
104
|
-
|
|
105
|
-
`;
|
|
106
|
-
const description = error.description || getStatusDescription(error.statusCode);
|
|
107
|
-
if (description) {
|
|
108
|
-
markdown += `${description}
|
|
109
|
-
|
|
110
|
-
`;
|
|
111
|
-
}
|
|
112
|
-
if (error.schema) {
|
|
113
|
-
markdown += `**Response Schema:**
|
|
114
|
-
|
|
115
|
-
`;
|
|
116
|
-
markdown += `\`\`\`json
|
|
117
|
-
${JSON.stringify(
|
|
118
|
-
error.schema,
|
|
119
|
-
null,
|
|
120
|
-
2
|
|
121
|
-
)}
|
|
122
|
-
\`\`\`
|
|
123
|
-
|
|
124
|
-
`;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return markdown;
|
|
128
|
-
}
|
|
129
|
-
function getSecuritySchemeDescription(scheme) {
|
|
130
|
-
switch (scheme.type.toLowerCase()) {
|
|
131
|
-
case "apikey":
|
|
132
|
-
return `This API uses an API key for authentication. The key should be sent in the \`${scheme.in}\` named \`${scheme.name}\`.`;
|
|
133
|
-
case "http":
|
|
134
|
-
if (scheme.scheme === "bearer") {
|
|
135
|
-
return `This API uses HTTP Bearer authentication. A token should be included in the Authorization header.`;
|
|
136
|
-
}
|
|
137
|
-
return `This API uses HTTP ${scheme.scheme} authentication.`;
|
|
138
|
-
case "oauth2": {
|
|
139
|
-
const flows = Object.keys(scheme.flows || {});
|
|
140
|
-
return `This API uses OAuth 2.0 for authentication with the following flow(s): ${flows.join(
|
|
141
|
-
", "
|
|
142
|
-
)}.`;
|
|
143
|
-
}
|
|
144
|
-
case "openidconnect":
|
|
145
|
-
return `This API uses OpenID Connect for authentication. The OpenID Connect URL is: ${scheme.openIdConnectUrl}`;
|
|
146
|
-
default:
|
|
147
|
-
return "This API uses a custom authentication scheme.";
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function generateAuthorizationMarkdown(spec) {
|
|
151
|
-
let markdown = `# Authorization
|
|
152
|
-
|
|
153
|
-
`;
|
|
154
|
-
const securitySchemes = spec.components?.securitySchemes || {};
|
|
155
|
-
const globalSecurity = spec.security || [];
|
|
156
|
-
if (Object.keys(securitySchemes).length > 0) {
|
|
157
|
-
markdown += `This API uses the following authentication schemes:
|
|
158
|
-
|
|
159
|
-
`;
|
|
160
|
-
markdown += `## Security Schemes
|
|
161
|
-
|
|
162
|
-
`;
|
|
163
|
-
for (const [name, scheme] of Object.entries(securitySchemes)) {
|
|
164
|
-
const schemeObj = resolveRef(spec, scheme);
|
|
165
|
-
markdown += `### ${name}
|
|
166
|
-
|
|
167
|
-
`;
|
|
168
|
-
const description = schemeObj.description || getSecuritySchemeDescription(schemeObj);
|
|
169
|
-
markdown += `${description}
|
|
170
|
-
|
|
171
|
-
`;
|
|
172
|
-
markdown += `**Type:** \`${schemeObj.type}\`
|
|
173
|
-
|
|
174
|
-
`;
|
|
175
|
-
if (schemeObj.type === "http") {
|
|
176
|
-
markdown += `**Scheme:** \`${schemeObj.scheme}\`
|
|
177
|
-
|
|
178
|
-
`;
|
|
179
|
-
if (schemeObj.bearerFormat) {
|
|
180
|
-
markdown += `**Bearer Format:** \`${schemeObj.bearerFormat}\`
|
|
181
|
-
|
|
182
|
-
`;
|
|
183
|
-
}
|
|
184
|
-
} else if (schemeObj.type === "oauth2") {
|
|
185
|
-
markdown += `**Flows:**
|
|
186
|
-
|
|
187
|
-
`;
|
|
188
|
-
markdown += `\`\`\`json
|
|
189
|
-
${JSON.stringify(
|
|
190
|
-
schemeObj.flows,
|
|
191
|
-
null,
|
|
192
|
-
2
|
|
193
|
-
)}
|
|
194
|
-
\`\`\`
|
|
195
|
-
|
|
196
|
-
`;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
if (globalSecurity.length > 0) {
|
|
201
|
-
markdown += `## Global Security Requirements
|
|
202
|
-
|
|
203
|
-
`;
|
|
204
|
-
markdown += `These security schemes are required for all operations.
|
|
205
|
-
|
|
206
|
-
`;
|
|
207
|
-
markdown += `\`\`\`json
|
|
208
|
-
${JSON.stringify(
|
|
209
|
-
globalSecurity,
|
|
210
|
-
null,
|
|
211
|
-
2
|
|
212
|
-
)}
|
|
213
|
-
\`\`\`
|
|
214
|
-
|
|
215
|
-
`;
|
|
216
|
-
}
|
|
217
|
-
return markdown;
|
|
218
|
-
}
|
|
219
|
-
function extractOverviewDocs(spec) {
|
|
220
|
-
const introduction = {
|
|
221
|
-
id: "introduction",
|
|
222
|
-
title: "Introduction",
|
|
223
|
-
url: "/introduction",
|
|
224
|
-
description: "API overview and getting started guide",
|
|
225
|
-
content: generateIntroductionMarkdown(spec)
|
|
226
|
-
};
|
|
227
|
-
const errorSchemas = /* @__PURE__ */ new Map();
|
|
228
|
-
forEachOperation(spec, (entry, operation) => {
|
|
229
|
-
if (operation.responses) {
|
|
230
|
-
for (const [statusCode, response] of Object.entries(
|
|
231
|
-
operation.responses
|
|
232
|
-
)) {
|
|
233
|
-
if (isErrorStatusCode(statusCode)) {
|
|
234
|
-
const content = response.content;
|
|
235
|
-
if (content?.["application/json"]?.schema) {
|
|
236
|
-
const key = `${statusCode}`;
|
|
237
|
-
if (!errorSchemas.has(key)) {
|
|
238
|
-
errorSchemas.set(key, {
|
|
239
|
-
statusCode,
|
|
240
|
-
title: response.description || `${statusCode} Error`,
|
|
241
|
-
description: response.description,
|
|
242
|
-
schema: content["application/json"].schema
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
const errors = {
|
|
251
|
-
id: "errors",
|
|
252
|
-
title: "Errors",
|
|
253
|
-
url: "/errors",
|
|
254
|
-
description: "Error handling and HTTP status codes",
|
|
255
|
-
content: generateErrorsMarkdown(errorSchemas)
|
|
256
|
-
};
|
|
257
|
-
const authorization = {
|
|
258
|
-
id: "authorization",
|
|
259
|
-
url: "/authorization",
|
|
260
|
-
title: "Authorization",
|
|
261
|
-
description: "Authentication methods and security schemes",
|
|
262
|
-
content: generateAuthorizationMarkdown(spec)
|
|
263
|
-
};
|
|
264
|
-
const docs = [introduction, errors, authorization];
|
|
265
|
-
return [
|
|
266
|
-
{
|
|
267
|
-
id: "overview",
|
|
268
|
-
category: "Overview",
|
|
269
|
-
items: docs
|
|
270
|
-
}
|
|
271
|
-
];
|
|
272
|
-
}
|
|
273
|
-
export {
|
|
274
|
-
extractOverviewDocs
|
|
275
|
-
};
|
|
276
|
-
//# sourceMappingURL=overview-docs.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/lib/overview-docs.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SchemaObject, SecuritySchemeObject } from 'openapi3-ts/oas31';\n\nimport { resolveRef } from '@sdk-it/core/ref.js';\n\nimport { forEachOperation } from './for-each-operation.js';\nimport { isErrorStatusCode } from './is.js';\nimport type { NavItem, SidebarData } from './sidebar.js';\nimport type { OurOpenAPIObject } from './types.js';\n\ninterface ErrorSchema {\n statusCode: string;\n title: string;\n description?: string;\n schema: SchemaObject;\n}\n\nfunction generateIntroductionMarkdown(spec: OurOpenAPIObject): string {\n const info = spec.info;\n let markdown = '';\n\n if (info.title) {\n markdown += `# ${info.title}\\n\\n`;\n }\n\n if (info.description) {\n markdown += `${info.description}\\n\\n`;\n }\n\n if (info.version) {\n markdown += `**Version:** ${info.version}\\n\\n`;\n }\n\n if (info.contact) {\n markdown += `## Contact\\n\\n`;\n if (info.contact.name) {\n markdown += `**Name:** ${info.contact.name}\\n\\n`;\n }\n if (info.contact.email) {\n markdown += `**Email:** ${info.contact.email}\\n\\n`;\n }\n if (info.contact.url) {\n markdown += `**URL:** ${info.contact.url}\\n\\n`;\n }\n }\n\n if (info.license) {\n markdown += `## License\\n\\n`;\n if (info.license.name) {\n markdown += `**License:** ${info.license.name}`;\n if (info.license.url) {\n markdown += ` ([${info.license.url}](${info.license.url}))`;\n }\n markdown += `\\n\\n`;\n }\n }\n\n // Add SDK links\n markdown += `## Available SDKs\\n\\n`;\n const sdkLinks = [\n '/typescript-sdk',\n '/python-sdk',\n '/go-sdk',\n '/java-sdk',\n '/php-sdk',\n '/ruby-sdk',\n '/dart-sdk',\n ];\n\n for (const link of sdkLinks) {\n const sdkName = link.replace('/', '').replace('-sdk', '').toUpperCase();\n markdown += `- [${sdkName} SDK](${link})\\n`;\n }\n\n return markdown;\n}\n\nfunction getStatusDescription(statusCode: string): string {\n const descriptions: Record<string, string> = {\n '400': 'Bad Request - The request was invalid or cannot be served.',\n '401':\n 'Unauthorized - Authentication is required and has failed or has not been provided.',\n '403':\n 'Forbidden - The request was valid, but the server is refusing action.',\n '404': 'Not Found - The requested resource could not be found.',\n '422':\n 'Unprocessable Entity - The request was well-formed but contains semantic errors.',\n '429':\n 'Too Many Requests - The user has sent too many requests in a given amount of time.',\n '500':\n 'Internal Server Error - The server encountered an unexpected condition.',\n '502':\n 'Bad Gateway - The server received an invalid response from the upstream server.',\n '503': 'Service Unavailable - The server is currently unavailable.',\n };\n return (\n descriptions[statusCode] ||\n 'An error occurred while processing the request.'\n );\n}\n\nfunction generateErrorsMarkdown(\n errorSchemas: Map<string, ErrorSchema>,\n): string {\n let markdown = `# Error Handling\\n\\n`;\n markdown += `This API uses conventional HTTP response codes to indicate the success or failure of an API request.\\n\\n`;\n markdown += `## HTTP Status Codes\\n\\n`;\n\n const errors = Array.from(errorSchemas.values()).sort(\n (a, b) => parseInt(a.statusCode) - parseInt(b.statusCode),\n );\n\n for (const error of errors) {\n markdown += `### ${error.statusCode} - ${error.title}\\n\\n`;\n const description =\n error.description || getStatusDescription(error.statusCode);\n if (description) {\n markdown += `${description}\\n\\n`;\n }\n if (error.schema) {\n markdown += `**Response Schema:**\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n error.schema,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n return markdown;\n}\n\nfunction getSecuritySchemeDescription(scheme: SecuritySchemeObject): string {\n switch (scheme.type.toLowerCase()) {\n case 'apikey':\n return `This API uses an API key for authentication. The key should be sent in the \\`${scheme.in}\\` named \\`${scheme.name}\\`.`;\n case 'http':\n if (scheme.scheme === 'bearer') {\n return `This API uses HTTP Bearer authentication. A token should be included in the Authorization header.`;\n }\n return `This API uses HTTP ${scheme.scheme} authentication.`;\n case 'oauth2': {\n const flows = Object.keys(scheme.flows || {});\n return `This API uses OAuth 2.0 for authentication with the following flow(s): ${flows.join(\n ', ',\n )}.`;\n }\n case 'openidconnect':\n return `This API uses OpenID Connect for authentication. The OpenID Connect URL is: ${scheme.openIdConnectUrl}`;\n default:\n return 'This API uses a custom authentication scheme.';\n }\n}\n\nfunction generateAuthorizationMarkdown(spec: OurOpenAPIObject): string {\n let markdown = `# Authorization\\n\\n`;\n\n const securitySchemes = spec.components?.securitySchemes || {};\n const globalSecurity = spec.security || [];\n\n if (Object.keys(securitySchemes).length > 0) {\n markdown += `This API uses the following authentication schemes:\\n\\n`;\n markdown += `## Security Schemes\\n\\n`;\n\n for (const [name, scheme] of Object.entries(securitySchemes)) {\n const schemeObj = resolveRef<SecuritySchemeObject>(spec, scheme);\n markdown += `### ${name}\\n\\n`;\n\n const description =\n schemeObj.description || getSecuritySchemeDescription(schemeObj);\n markdown += `${description}\\n\\n`;\n\n markdown += `**Type:** \\`${schemeObj.type}\\`\\n\\n`;\n\n if (schemeObj.type === 'http') {\n markdown += `**Scheme:** \\`${schemeObj.scheme}\\`\\n\\n`;\n if (schemeObj.bearerFormat) {\n markdown += `**Bearer Format:** \\`${schemeObj.bearerFormat}\\`\\n\\n`;\n }\n } else if (schemeObj.type === 'oauth2') {\n markdown += `**Flows:**\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n schemeObj.flows,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n }\n }\n\n if (globalSecurity.length > 0) {\n markdown += `## Global Security Requirements\\n\\n`;\n markdown += `These security schemes are required for all operations.\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n globalSecurity,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n\n return markdown;\n}\n\nexport function extractOverviewDocs(spec: OurOpenAPIObject): SidebarData {\n const introduction: NavItem = {\n id: 'introduction',\n title: 'Introduction',\n url: '/introduction',\n description: 'API overview and getting started guide',\n content: generateIntroductionMarkdown(spec),\n };\n\n const errorSchemas = new Map<string, ErrorSchema>();\n\n forEachOperation(spec, (entry, operation) => {\n if (operation.responses) {\n for (const [statusCode, response] of Object.entries(\n operation.responses,\n )) {\n if (isErrorStatusCode(statusCode)) {\n const content = response.content;\n if (content?.['application/json']?.schema) {\n const key = `${statusCode}`;\n if (!errorSchemas.has(key)) {\n errorSchemas.set(key, {\n statusCode,\n title: response.description || `${statusCode} Error`,\n description: response.description,\n schema: content['application/json'].schema as SchemaObject,\n });\n }\n }\n }\n }\n }\n });\n\n const errors: NavItem = {\n id: 'errors',\n title: 'Errors',\n url: '/errors',\n description: 'Error handling and HTTP status codes',\n content: generateErrorsMarkdown(errorSchemas),\n };\n\n const authorization: NavItem = {\n id: 'authorization',\n url: '/authorization',\n title: 'Authorization',\n description: 'Authentication methods and security schemes',\n content: generateAuthorizationMarkdown(spec),\n };\n const docs: NavItem[] = [introduction, errors, authorization];\n\n return [\n {\n id: 'overview',\n category: 'Overview',\n items: docs,\n },\n ];\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|