apisailor-cli
Version:
Commond tool for API sailor
105 lines (81 loc) • 2.46 kB
JavaScript
const request_client = require('request-promise-native');
var express = require('express')
var router = express.Router()
var browser=null;
var puppeteer=null;
async function run() {
var npm = require("npm");
if(puppeteer){
launchRecording("https://workspace.apisailor.com");
}
else{
await npm.load({
loaded: false
}, function (err) {
// catch errors
console.log({err});
npm.commands.install(["puppeteer"], function (er, data) {
launchRecording("https://workspace.apisailor.com");
});
npm.on("log", function (message) {
// log the progress of the installation
console.log({message});
});
});
}
}
router.get('/v1/launch/recording', async function (req, res) {
console.log('launching');
await run();
res.send({"msg": "Start successfully"})
});
router.get('/v1/launch/stop', async function (req, res) {
if(browser){
await browser.close();
}
res.send({"msg": "Stopped successfully"})
});
const launchRecording=(async (siteName) => {
puppeteer=require('puppeteer')
if(!browser) {
browser = await puppeteer.launch({"headless": false,args: [
'--disable-web-security' ]});
}
const page = await browser.newPage();
await page.setViewport({ width: 1166, height: 768});
const result = [];
await page.setRequestInterception(true);
page.on('request', request => {
request_client({
uri: request.url(),
resolveWithFullResponse: true,
}).then(response => {
const request_url = request.url();
const request_headers = request.headers();
const request_post_data = request.postData();
const response_headers = response.headers;
const response_size = response_headers['content-length'];
const response_body = response.body;
result.push({
request_url
//request_headers,
//request_post_data,
//response_headers,
//response_size,
//response_body,
});
console.log({request_url});
request.continue();
}).catch(error => {
console.error("error");
//request.abort();
request.continue();
});
});
await page.goto(siteName, {
waitUntil: 'networkidle0',
});
//await browser.close();
});
module.exports = router
//run();