-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
117 lines (100 loc) · 2.76 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env node
require('dotenv').config();
const POSTMAN_API_KEY = process.env.POSTMAN_API_KEY;
const axios = require('axios');
const fs = require('fs');
const Converter = require('openapi-to-postmanv2');
const readOasFile = (filePath) => {
if (!fs.existsSync(filePath)) {
throw new Error('File not found');
}
return fs.readFileSync(filePath, { encoding: 'UTF8' });
};
const convertOpenApiData = async (openapiData) => {
return new Promise((resolve, reject) => {
Converter.convert({ type: 'string', data: openapiData }, {}, (err, conversionResult) => {
if (err) {
reject(err);
} else if (!conversionResult.result) {
reject(new Error(`Could not convert: ${conversionResult.reason}`));
} else {
resolve(conversionResult.output[0].data);
}
});
});
};
async function getPostmanCollection(collectionId) {
const config = {
method: 'get',
maxBodyLength: Infinity,
url: `https://api.getpostman.com/collections/${collectionId}`,
headers: {
'X-API-Key': POSTMAN_API_KEY
}
};
try {
const response = await axios.request(config);
// console.log(JSON.stringify(response.data, null, 2));
return response;
} catch (error) {
console.log(error);
}
}
const preparePostmanRequest = (input) => {
const output = {
collection: {
info: {
name: input.info.name,
schema: input.info.schema
},
item: input.item
}
};
return JSON.stringify(output);
};
async function updatePostmanCollection(collectionId, collection) {
const data = preparePostmanRequest(collection);
const config = {
method: 'put',
url: `https://api.getpostman.com/collections/${collectionId}`,
headers: {
'Content-Type': 'application/json',
'X-API-Key': POSTMAN_API_KEY
},
data: data
};
try {
const response = await axios.request(config);
return response;
} catch (error) {
console.log(error);
}
}
async function main(oasFilePath, collectionId) {
try {
const OAS_FILE = readOasFile(oasFilePath);
const conversionResult = await convertOpenApiData(OAS_FILE);
const updatedCollection = await updatePostmanCollection(collectionId, conversionResult);
// console.log('The collection object is: ', conversionResult);
} catch (error) {
console.log('Error:', error.message);
}
}
if (require.main === module) {
const args = process.argv.slice(2);
if (args.length < 2) {
console.log('Usage: node script.js <OAS_FILE_PATH> <COLLECTION_ID>');
process.exit(1);
}
const OAS_FILE_PATH = args[0];
const COLLECTION_ID = args[1];
main(OAS_FILE_PATH, COLLECTION_ID);
}
module.exports = {
convertOpenApiData,
getPostmanCollection,
preparePostmanRequest,
updatePostmanCollection,
readOasFile,
main
};