@mapples/api-import 1.5.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/README.md +18 -0
- package/dist/bodyCredentials.d.ts +19 -0
- package/dist/bodyCredentials.d.ts.map +1 -0
- package/dist/bodyCredentials.js +77 -0
- package/dist/bodyCredentials.js.map +1 -0
- package/dist/curl.d.ts +19 -0
- package/dist/curl.d.ts.map +1 -0
- package/dist/curl.js +313 -0
- package/dist/curl.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/merge.d.ts +33 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +68 -0
- package/dist/merge.js.map +1 -0
- package/dist/names.d.ts +7 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +24 -0
- package/dist/names.js.map +1 -0
- package/dist/openapi.d.ts +25 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +299 -0
- package/dist/openapi.js.map +1 -0
- package/dist/postman.d.ts +11 -0
- package/dist/postman.d.ts.map +1 -0
- package/dist/postman.js +260 -0
- package/dist/postman.js.map +1 -0
- package/dist/swagger.d.ts +17 -0
- package/dist/swagger.d.ts.map +1 -0
- package/dist/swagger.js +171 -0
- package/dist/swagger.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
package/dist/postman.js
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { stripBodyCredentials } from './bodyCredentials.js';
|
|
2
|
+
import { nameFromRoute, toRequestName, uniqueName } from './names.js';
|
|
3
|
+
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
4
|
+
const METHODS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']);
|
|
5
|
+
/** Header and variable names whose values are credentials. */
|
|
6
|
+
const CREDENTIAL_NAME = /(token|secret|password|passwd|api[-_]?key|apikey|auth|bearer|session|cookie|private)/i;
|
|
7
|
+
/** A `{{name}}` that is the whole value. */
|
|
8
|
+
const WHOLE_VARIABLE = /^\{\{\s*([^}]+?)\s*\}\}$/;
|
|
9
|
+
/** `apiToken` / `api-token` → `API_TOKEN`, the shape secret names take. */
|
|
10
|
+
const secretName = (name) => toRequestName(name)
|
|
11
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
12
|
+
.toUpperCase();
|
|
13
|
+
/** Whether the text is a Postman collection export. */
|
|
14
|
+
export const looksLikePostman = (text) => /^\s*\{[\s\S]*"info"[\s\S]*"schema"\s*:\s*"[^"]*getpostman\.com\/json\/collection/.test(text);
|
|
15
|
+
/** Every request in the collection, folders flattened depth-first. */
|
|
16
|
+
const flatten = (items, out = []) => {
|
|
17
|
+
for (const item of items) {
|
|
18
|
+
if (!isObject(item))
|
|
19
|
+
continue;
|
|
20
|
+
if (Array.isArray(item.item)) {
|
|
21
|
+
flatten(item.item, out);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const request = typeof item.request === 'string'
|
|
25
|
+
? { url: item.request, method: 'GET' }
|
|
26
|
+
: item.request;
|
|
27
|
+
if (!isObject(request))
|
|
28
|
+
continue;
|
|
29
|
+
out.push({
|
|
30
|
+
name: typeof item.name === 'string' ? item.name : '',
|
|
31
|
+
request,
|
|
32
|
+
response: Array.isArray(item.response) ? item.response : [],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
};
|
|
37
|
+
const rawUrl = (url) => {
|
|
38
|
+
if (typeof url === 'string')
|
|
39
|
+
return url;
|
|
40
|
+
if (isObject(url) && typeof url.raw === 'string')
|
|
41
|
+
return url.raw;
|
|
42
|
+
throw new Error('A Postman request has no URL');
|
|
43
|
+
};
|
|
44
|
+
/** A collection/request `auth` block as a Mapples auth, plus the warning it costs. */
|
|
45
|
+
const authFrom = (auth, where, warnings) => {
|
|
46
|
+
if (!isObject(auth) || auth.type === 'noauth')
|
|
47
|
+
return undefined;
|
|
48
|
+
const entries = Array.isArray(auth[auth.type])
|
|
49
|
+
? auth[auth.type]
|
|
50
|
+
: [];
|
|
51
|
+
const field = (key) => {
|
|
52
|
+
const entry = entries.find((candidate) => isObject(candidate) && candidate.key === key);
|
|
53
|
+
return isObject(entry) && typeof entry.value === 'string'
|
|
54
|
+
? entry.value
|
|
55
|
+
: undefined;
|
|
56
|
+
};
|
|
57
|
+
const secretFor = (value, fallback) => {
|
|
58
|
+
const variable = value?.match(WHOLE_VARIABLE)?.[1];
|
|
59
|
+
return secretName(variable ?? fallback);
|
|
60
|
+
};
|
|
61
|
+
if (auth.type === 'bearer') {
|
|
62
|
+
const secretRef = secretFor(field('token'), 'API_TOKEN');
|
|
63
|
+
warnings.push(`${where}: the bearer token was not imported. Store it as the secret ${secretRef}.`);
|
|
64
|
+
return { kind: 'bearer', secretRef };
|
|
65
|
+
}
|
|
66
|
+
if (auth.type === 'apikey' && field('in') !== 'query') {
|
|
67
|
+
const header = field('key') ?? 'X-API-Key';
|
|
68
|
+
const secretRef = secretFor(field('value'), 'API_KEY');
|
|
69
|
+
warnings.push(`${where}: the ${header} value was not imported. Store it as the secret ${secretRef}.`);
|
|
70
|
+
return { kind: 'header', header, secretRef };
|
|
71
|
+
}
|
|
72
|
+
warnings.push(`${where}: Postman "${String(auth.type)}" auth is not supported — set the request's auth by hand.`);
|
|
73
|
+
return undefined;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Splits a URL into the shared origin and the path. A leading
|
|
77
|
+
* `{{baseUrl}}`-style variable is the origin (its value becomes the
|
|
78
|
+
* environment's base URL); otherwise the scheme + host are.
|
|
79
|
+
*/
|
|
80
|
+
const splitUrl = (url) => {
|
|
81
|
+
const variable = url.match(/^(\{\{\s*[^}]+?\s*\}\})(.*)$/);
|
|
82
|
+
if (variable)
|
|
83
|
+
return { origin: variable[1], path: variable[2] || '/' };
|
|
84
|
+
const absolute = url.match(/^(https?:\/\/[^/?#]+)(.*)$/i);
|
|
85
|
+
if (absolute)
|
|
86
|
+
return { origin: absolute[1], path: absolute[2] || '/' };
|
|
87
|
+
throw new Error(`"${url}" is neither absolute nor starts with a {{variable}}`);
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A Postman collection → one request per item. The most common origin
|
|
91
|
+
* becomes the environment's base URL (a `{{baseUrl}}` variable resolves to
|
|
92
|
+
* its collection value); requests on another origin keep absolute URLs.
|
|
93
|
+
* `:id` path segments become `{id}` tokens with the item's example values.
|
|
94
|
+
*/
|
|
95
|
+
export const importPostman = (text) => {
|
|
96
|
+
const collection = JSON.parse(text);
|
|
97
|
+
if (!isObject(collection) || !Array.isArray(collection.item)) {
|
|
98
|
+
throw new Error('The text is not a Postman collection');
|
|
99
|
+
}
|
|
100
|
+
const info = isObject(collection.info) ? collection.info : {};
|
|
101
|
+
const warnings = [];
|
|
102
|
+
const variables = {};
|
|
103
|
+
for (const entry of Array.isArray(collection.variable)
|
|
104
|
+
? collection.variable
|
|
105
|
+
: []) {
|
|
106
|
+
if (!isObject(entry) || typeof entry.key !== 'string')
|
|
107
|
+
continue;
|
|
108
|
+
if (CREDENTIAL_NAME.test(entry.key)) {
|
|
109
|
+
warnings.push(`The collection variable "${entry.key}" looks like a credential and was not imported. Store it as the secret ${secretName(entry.key)}.`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
variables[entry.key] = entry.value === undefined ? '' : String(entry.value);
|
|
113
|
+
}
|
|
114
|
+
const items = flatten(collection.item);
|
|
115
|
+
if (items.length === 0) {
|
|
116
|
+
throw new Error('The Postman collection holds no requests');
|
|
117
|
+
}
|
|
118
|
+
const origins = new Map();
|
|
119
|
+
const parsed = items.map((item) => {
|
|
120
|
+
const split = splitUrl(rawUrl(item.request.url));
|
|
121
|
+
origins.set(split.origin, (origins.get(split.origin) ?? 0) + 1);
|
|
122
|
+
return { item, ...split };
|
|
123
|
+
});
|
|
124
|
+
const origin = [...origins.entries()].sort((a, b) => b[1] - a[1])[0][0];
|
|
125
|
+
const originVariable = origin.match(WHOLE_VARIABLE)?.[1];
|
|
126
|
+
let baseUrl = origin;
|
|
127
|
+
if (originVariable) {
|
|
128
|
+
const value = variables[originVariable];
|
|
129
|
+
if (!value) {
|
|
130
|
+
throw new Error(`The requests start with {{${originVariable}}}, which the collection gives no value — export the collection with its variables`);
|
|
131
|
+
}
|
|
132
|
+
baseUrl = value;
|
|
133
|
+
delete variables[originVariable];
|
|
134
|
+
}
|
|
135
|
+
// Resolved once: requests without their own auth inherit it.
|
|
136
|
+
const collectionAuth = authFrom(collection.auth, 'Collection', warnings);
|
|
137
|
+
const taken = new Set();
|
|
138
|
+
const credentials = [];
|
|
139
|
+
const requests = parsed.map(({ item, origin: itemOrigin, path: rawPath }, index) => {
|
|
140
|
+
const method = String(item.request.method ?? 'GET').toUpperCase();
|
|
141
|
+
if (!METHODS.has(method)) {
|
|
142
|
+
throw new Error(`"${item.name}": method ${method} is not supported`);
|
|
143
|
+
}
|
|
144
|
+
const where = `${method} ${item.name || rawPath}`;
|
|
145
|
+
const url = isObject(item.request.url) ? item.request.url : {};
|
|
146
|
+
// `:id` → `{id}`; the query string moves into params.
|
|
147
|
+
const [pathPart, queryPart] = rawPath.split('?');
|
|
148
|
+
const path = pathPart.replace(/:([A-Za-z_][A-Za-z0-9_]*)/g, '{$1}');
|
|
149
|
+
const params = {};
|
|
150
|
+
for (const entry of Array.isArray(url.variable) ? url.variable : []) {
|
|
151
|
+
if (isObject(entry) && typeof entry.key === 'string') {
|
|
152
|
+
params[entry.key] = {
|
|
153
|
+
kind: 'static',
|
|
154
|
+
value: entry.value === undefined ? '' : String(entry.value),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// A URL given as a plain string carries its query only in the text.
|
|
159
|
+
const query = Array.isArray(url.query)
|
|
160
|
+
? url.query
|
|
161
|
+
: (queryPart ?? '')
|
|
162
|
+
.split('&')
|
|
163
|
+
.filter((pair) => pair !== '')
|
|
164
|
+
.map((pair) => {
|
|
165
|
+
const [key, ...value] = pair.split('=');
|
|
166
|
+
return {
|
|
167
|
+
key: decodeURIComponent(key),
|
|
168
|
+
value: decodeURIComponent(value.join('=')),
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
for (const entry of query) {
|
|
172
|
+
if (!isObject(entry) || typeof entry.key !== 'string' || entry.disabled)
|
|
173
|
+
continue;
|
|
174
|
+
if (CREDENTIAL_NAME.test(entry.key)) {
|
|
175
|
+
warnings.push(`${where}: the query parameter "${entry.key}" looks like a credential and was not imported.`);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
params[entry.key] = {
|
|
179
|
+
kind: 'static',
|
|
180
|
+
value: entry.value == null ? '' : String(entry.value),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const headers = {};
|
|
184
|
+
for (const entry of Array.isArray(item.request.header)
|
|
185
|
+
? item.request.header
|
|
186
|
+
: []) {
|
|
187
|
+
if (!isObject(entry) || typeof entry.key !== 'string' || entry.disabled)
|
|
188
|
+
continue;
|
|
189
|
+
if (CREDENTIAL_NAME.test(entry.key)) {
|
|
190
|
+
warnings.push(`${where}: the ${entry.key} header was not imported — it carries a credential; set the request's auth instead.`);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (entry.key.toLowerCase() === 'content-type')
|
|
194
|
+
continue;
|
|
195
|
+
headers[entry.key] = String(entry.value ?? '');
|
|
196
|
+
}
|
|
197
|
+
let template;
|
|
198
|
+
const body = isObject(item.request.body) ? item.request.body : null;
|
|
199
|
+
if (body && body.mode === 'raw' && typeof body.raw === 'string') {
|
|
200
|
+
const raw = body.raw.trim();
|
|
201
|
+
if (raw !== '') {
|
|
202
|
+
try {
|
|
203
|
+
template = JSON.parse(raw);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
warnings.push(`${where}: the body is not plain JSON (Postman variables inside it?) — it was not imported.`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else if (body && body.mode && body.mode !== 'none') {
|
|
211
|
+
warnings.push(`${where}: a ${String(body.mode)} body is not supported — only raw JSON bodies are imported.`);
|
|
212
|
+
}
|
|
213
|
+
if (template !== undefined) {
|
|
214
|
+
const stripped = stripBodyCredentials(template, index);
|
|
215
|
+
template = stripped.template;
|
|
216
|
+
credentials.push(...stripped.credentials);
|
|
217
|
+
}
|
|
218
|
+
let responseSample;
|
|
219
|
+
for (const response of item.response) {
|
|
220
|
+
if (!isObject(response) || typeof response.body !== 'string')
|
|
221
|
+
continue;
|
|
222
|
+
const code = Number(response.code);
|
|
223
|
+
if (Number.isFinite(code) && (code < 200 || code >= 300))
|
|
224
|
+
continue;
|
|
225
|
+
try {
|
|
226
|
+
responseSample = JSON.parse(response.body);
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// A non-JSON saved response is no sample.
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
name: uniqueName(item.name ? toRequestName(item.name) : nameFromRoute(method, path), taken),
|
|
235
|
+
method: method,
|
|
236
|
+
path: itemOrigin === origin ? path : `${itemOrigin}${path}`,
|
|
237
|
+
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
238
|
+
params: Object.keys(params).length > 0 ? params : undefined,
|
|
239
|
+
body: template === undefined ? undefined : { kind: 'json', template },
|
|
240
|
+
// The collection's credential is for its own API: a request to
|
|
241
|
+
// another origin never inherits it.
|
|
242
|
+
auth: item.request.auth !== undefined
|
|
243
|
+
? authFrom(item.request.auth, where, warnings)
|
|
244
|
+
: itemOrigin === origin
|
|
245
|
+
? collectionAuth
|
|
246
|
+
: undefined,
|
|
247
|
+
responseSample,
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
return {
|
|
251
|
+
format: 'postman',
|
|
252
|
+
baseUrl: baseUrl.replace(/\/$/, ''),
|
|
253
|
+
environmentName: typeof info.name === 'string' ? info.name : 'API',
|
|
254
|
+
requests,
|
|
255
|
+
variables: Object.keys(variables).length > 0 ? variables : undefined,
|
|
256
|
+
warnings,
|
|
257
|
+
bodyCredentials: credentials.length > 0 ? credentials : undefined,
|
|
258
|
+
};
|
|
259
|
+
};
|
|
260
|
+
//# sourceMappingURL=postman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postman.js","sourceRoot":"","sources":["../src/postman.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Swagger 2.0 → the OpenAPI 3 shape `importOpenApi` reads.
|
|
3
|
+
* Only what the importer uses is translated: the server URL, `$ref` roots,
|
|
4
|
+
* parameters (a `body` parameter becomes the request body), JSON responses
|
|
5
|
+
* and the security schemes. PostgREST (Supabase, Neon's Data API) serves
|
|
6
|
+
* this format, with most parameters shared under `#/parameters`.
|
|
7
|
+
*/
|
|
8
|
+
type Json = Record<string, unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* Translates a parsed Swagger 2.0 document. `resolveParameter` reads a
|
|
11
|
+
* shared parameter, so a `$ref`'d body parameter still becomes a body.
|
|
12
|
+
* `baseUrl` replaces `host` + `basePath` (a spec served behind a proxy
|
|
13
|
+
* often names the wrong host, or none).
|
|
14
|
+
*/
|
|
15
|
+
export declare const swaggerToOpenApi: (swagger: Json, baseUrl?: string) => Json;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=swagger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../src/swagger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAwEpC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,IAAI,EAAE,UAAU,MAAM,KAAG,IAsGlE,CAAC"}
|
package/dist/swagger.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Swagger 2.0 → the OpenAPI 3 shape `importOpenApi` reads.
|
|
3
|
+
* Only what the importer uses is translated: the server URL, `$ref` roots,
|
|
4
|
+
* parameters (a `body` parameter becomes the request body), JSON responses
|
|
5
|
+
* and the security schemes. PostgREST (Supabase, Neon's Data API) serves
|
|
6
|
+
* this format, with most parameters shared under `#/parameters`.
|
|
7
|
+
*/
|
|
8
|
+
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
9
|
+
const METHODS = ['get', 'post', 'put', 'patch', 'delete'];
|
|
10
|
+
/** `#/definitions/x` → `#/components/schemas/x`, and so on, everywhere. */
|
|
11
|
+
const rewriteRefs = (node) => {
|
|
12
|
+
if (Array.isArray(node))
|
|
13
|
+
return node.map(rewriteRefs);
|
|
14
|
+
if (!isObject(node))
|
|
15
|
+
return node;
|
|
16
|
+
const out = {};
|
|
17
|
+
for (const [key, value] of Object.entries(node)) {
|
|
18
|
+
out[key] =
|
|
19
|
+
key === '$ref' && typeof value === 'string'
|
|
20
|
+
? value
|
|
21
|
+
.replace(/^#\/definitions\//, '#/components/schemas/')
|
|
22
|
+
.replace(/^#\/parameters\//, '#/components/parameters/')
|
|
23
|
+
.replace(/^#\/responses\//, '#/components/responses/')
|
|
24
|
+
: rewriteRefs(value);
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
};
|
|
28
|
+
/** A Swagger 2 non-body parameter: its type fields move under `schema`. */
|
|
29
|
+
const parameter3 = (parameter) => {
|
|
30
|
+
if (parameter.in === 'body' || isObject(parameter.schema))
|
|
31
|
+
return parameter;
|
|
32
|
+
const { type, format, items, enum: values, default: fallback, ...rest } = parameter;
|
|
33
|
+
const schema = {};
|
|
34
|
+
if (type !== undefined)
|
|
35
|
+
schema.type = type;
|
|
36
|
+
if (format !== undefined)
|
|
37
|
+
schema.format = format;
|
|
38
|
+
if (items !== undefined)
|
|
39
|
+
schema.items = items;
|
|
40
|
+
if (values !== undefined)
|
|
41
|
+
schema.enum = values;
|
|
42
|
+
if (fallback !== undefined)
|
|
43
|
+
schema.default = fallback;
|
|
44
|
+
return { ...rest, schema };
|
|
45
|
+
};
|
|
46
|
+
/** A Swagger 2 response: `schema` / `examples` move under `content`. */
|
|
47
|
+
const response3 = (response) => {
|
|
48
|
+
if (!isObject(response) || typeof response.$ref === 'string')
|
|
49
|
+
return response;
|
|
50
|
+
const { schema, examples, ...rest } = response;
|
|
51
|
+
if (schema === undefined)
|
|
52
|
+
return rest;
|
|
53
|
+
const media = { schema };
|
|
54
|
+
if (isObject(examples) && 'application/json' in examples) {
|
|
55
|
+
media.example = examples['application/json'];
|
|
56
|
+
}
|
|
57
|
+
return { ...rest, content: { 'application/json': media } };
|
|
58
|
+
};
|
|
59
|
+
const serverUrl = (document, override) => {
|
|
60
|
+
if (override)
|
|
61
|
+
return override.replace(/\/$/, '');
|
|
62
|
+
if (typeof document.host !== 'string') {
|
|
63
|
+
throw new Error('The Swagger document has no host — the requests would have no base URL');
|
|
64
|
+
}
|
|
65
|
+
const schemes = Array.isArray(document.schemes) ? document.schemes : [];
|
|
66
|
+
const scheme = schemes.includes('https') ? 'https' : (schemes[0] ?? 'https');
|
|
67
|
+
const basePath = typeof document.basePath === 'string' ? document.basePath : '';
|
|
68
|
+
// `:443` adds nothing to an https URL and only clutters the environment.
|
|
69
|
+
const host = document.host.replace(/:443$/, '');
|
|
70
|
+
return `${String(scheme)}://${host}${basePath}`.replace(/\/$/, '');
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Translates a parsed Swagger 2.0 document. `resolveParameter` reads a
|
|
74
|
+
* shared parameter, so a `$ref`'d body parameter still becomes a body.
|
|
75
|
+
* `baseUrl` replaces `host` + `basePath` (a spec served behind a proxy
|
|
76
|
+
* often names the wrong host, or none).
|
|
77
|
+
*/
|
|
78
|
+
export const swaggerToOpenApi = (swagger, baseUrl) => {
|
|
79
|
+
const document = rewriteRefs(swagger);
|
|
80
|
+
const sharedParameters = isObject(document.parameters)
|
|
81
|
+
? document.parameters
|
|
82
|
+
: {};
|
|
83
|
+
const resolveParameter = (node) => {
|
|
84
|
+
if (!isObject(node))
|
|
85
|
+
return null;
|
|
86
|
+
if (typeof node.$ref === 'string') {
|
|
87
|
+
const name = node.$ref.replace(/^#\/components\/parameters\//, '');
|
|
88
|
+
const target = sharedParameters[name];
|
|
89
|
+
return isObject(target) ? target : null;
|
|
90
|
+
}
|
|
91
|
+
return node;
|
|
92
|
+
};
|
|
93
|
+
const paths = {};
|
|
94
|
+
for (const [path, pathNode] of Object.entries(isObject(document.paths) ? document.paths : {})) {
|
|
95
|
+
if (!isObject(pathNode))
|
|
96
|
+
continue;
|
|
97
|
+
const pathItem = { ...pathNode };
|
|
98
|
+
for (const method of METHODS) {
|
|
99
|
+
const operation = pathNode[method];
|
|
100
|
+
if (!isObject(operation))
|
|
101
|
+
continue;
|
|
102
|
+
const parameters = [];
|
|
103
|
+
let requestBody;
|
|
104
|
+
for (const node of Array.isArray(operation.parameters)
|
|
105
|
+
? operation.parameters
|
|
106
|
+
: []) {
|
|
107
|
+
const parameter = resolveParameter(node);
|
|
108
|
+
if (parameter?.in === 'body') {
|
|
109
|
+
requestBody = {
|
|
110
|
+
content: { 'application/json': { schema: parameter.schema } },
|
|
111
|
+
};
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// formData has no JSON-body equivalent; the importer skips it anyway.
|
|
115
|
+
if (parameter?.in === 'formData')
|
|
116
|
+
continue;
|
|
117
|
+
parameters.push(isObject(node) && typeof node.$ref === 'string'
|
|
118
|
+
? node
|
|
119
|
+
: parameter && parameter3(parameter));
|
|
120
|
+
}
|
|
121
|
+
const responses = isObject(operation.responses)
|
|
122
|
+
? Object.fromEntries(Object.entries(operation.responses).map(([code, response]) => [
|
|
123
|
+
code,
|
|
124
|
+
response3(response),
|
|
125
|
+
]))
|
|
126
|
+
: {};
|
|
127
|
+
pathItem[method] = {
|
|
128
|
+
...operation,
|
|
129
|
+
parameters,
|
|
130
|
+
...(requestBody ? { requestBody } : {}),
|
|
131
|
+
responses,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
paths[path] = pathItem;
|
|
135
|
+
}
|
|
136
|
+
const securitySchemes = {};
|
|
137
|
+
for (const [name, scheme] of Object.entries(isObject(document.securityDefinitions) ? document.securityDefinitions : {})) {
|
|
138
|
+
if (!isObject(scheme))
|
|
139
|
+
continue;
|
|
140
|
+
// Swagger 2 has no bearer type: an `Authorization` API key is one.
|
|
141
|
+
securitySchemes[name] =
|
|
142
|
+
scheme.type === 'apiKey' &&
|
|
143
|
+
scheme.in === 'header' &&
|
|
144
|
+
typeof scheme.name === 'string' &&
|
|
145
|
+
scheme.name.toLowerCase() === 'authorization'
|
|
146
|
+
? { type: 'http', scheme: 'bearer' }
|
|
147
|
+
: scheme;
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
openapi: '3.0.0',
|
|
151
|
+
info: document.info,
|
|
152
|
+
servers: [{ url: serverUrl(document, baseUrl) }],
|
|
153
|
+
paths,
|
|
154
|
+
security: document.security,
|
|
155
|
+
components: {
|
|
156
|
+
schemas: document.definitions,
|
|
157
|
+
parameters: Object.fromEntries(Object.entries(sharedParameters).map(([name, parameter]) => [
|
|
158
|
+
name,
|
|
159
|
+
isObject(parameter) ? parameter3(parameter) : parameter,
|
|
160
|
+
])),
|
|
161
|
+
responses: isObject(document.responses)
|
|
162
|
+
? Object.fromEntries(Object.entries(document.responses).map(([name, response]) => [
|
|
163
|
+
name,
|
|
164
|
+
response3(response),
|
|
165
|
+
]))
|
|
166
|
+
: undefined,
|
|
167
|
+
securitySchemes,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=swagger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../src/swagger.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ApiRequest, ApiValueSource } from '@mapples/types';
|
|
2
|
+
/** A request as an importer produces it: no id yet, path relative to `baseUrl`. */
|
|
3
|
+
export type ImportedRequest = Omit<ApiRequest, 'id'>;
|
|
4
|
+
export interface ApiImportResult {
|
|
5
|
+
/** Where the source came from — shown in the import preview. */
|
|
6
|
+
format: 'curl' | 'openapi' | 'swagger' | 'postman';
|
|
7
|
+
/**
|
|
8
|
+
* The origin the requests' relative paths hang off (`https://api.acme.com/v1`).
|
|
9
|
+
* The store decides whether that becomes an environment or the paths are
|
|
10
|
+
* made absolute.
|
|
11
|
+
*/
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
/** A name for the environment `baseUrl` may become. */
|
|
14
|
+
environmentName: string;
|
|
15
|
+
requests: ImportedRequest[];
|
|
16
|
+
/**
|
|
17
|
+
* `{{name}}` values the requests' url/header templates read (a Postman
|
|
18
|
+
* collection's variables). They become the environment's variables; a
|
|
19
|
+
* credential-looking one is never imported, only named in `warnings`.
|
|
20
|
+
*/
|
|
21
|
+
variables?: Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* What the import left out on purpose — above all secrets: a token found in
|
|
24
|
+
* the source is never imported, only the name of the secret to store it as.
|
|
25
|
+
*/
|
|
26
|
+
warnings: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Credential-like fields found in a request body (`password`, `token`, …).
|
|
29
|
+
* The requests already read them from `replacement` instead; the values
|
|
30
|
+
* are kept here only so the author can explicitly choose to keep them.
|
|
31
|
+
*/
|
|
32
|
+
bodyCredentials?: BodyCredential[];
|
|
33
|
+
}
|
|
34
|
+
/** A credential-like body field the importer took out of a request body. */
|
|
35
|
+
export interface BodyCredential {
|
|
36
|
+
/** Index into `ApiImportResult.requests`. */
|
|
37
|
+
requestIndex: number;
|
|
38
|
+
/** Where in the body template the field sits. */
|
|
39
|
+
path: string[];
|
|
40
|
+
/** The value found in the source. */
|
|
41
|
+
value: string;
|
|
42
|
+
/** What the body reads instead. */
|
|
43
|
+
replacement: ApiValueSource;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,WAAW,EAAE,cAAc,CAAC;CAC7B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mapples/api-import",
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Turns cURL commands, OpenAPI 3 / Swagger 2 documents and Postman collections into Mapples API requests, and merges them into a project API document. Pure: no I/O.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc -b tsconfig.build.json",
|
|
10
|
+
"lint": "eslint .",
|
|
11
|
+
"type-check": "tsc --noEmit",
|
|
12
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
13
|
+
},
|
|
14
|
+
"author": {
|
|
15
|
+
"name": "Oleksandr Soloviov",
|
|
16
|
+
"url": "https://mapples.org/people/olek_soloviov"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/mapplesorg/mapples-open-kit.git",
|
|
22
|
+
"directory": "packages/@mapples/api-import"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@mapples/types": "^1.5.0",
|
|
26
|
+
"yaml": "^2.6.1"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"typescript": "~6.0.3"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18.18"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"package.json"
|
|
38
|
+
]
|
|
39
|
+
}
|