anta
Version:
CLI tool and lib to gather app audits via [Lighthouse](https://github.com/GoogleChrome/lighthouse/).
106 lines • 8.61 kB
JavaScript
const request = require('request');
function getResult(data, resolve) {
const url = `http://slm.dl.alipaydev.com/proxy/action.json?params={"action":"result","id":${data.details.taskId}}`;
// 轮询 检测结果
// todos: 超时取消
let timer;
const loop = () => {
request(url, function (error, response, body) {
if (error) {
// console.error('检测任务状态失败');
return;
}
// console.log('statusCode:', response && response.statusCode);
const jsonRes = JSON.parse(body);
if (jsonRes.result) {
clearTimeout(timer);
getLhResult(jsonRes, resolve);
}
else {
timer = setTimeout(loop, 15000);
}
});
};
loop();
}
function getLhResult(res, resolve) {
if (res.details.details[0]) {
if (res.details.details[0].result === 'Failed') {
// console.log('检测失败');
resolve(getRes(false, '检测失败'));
return;
}
const atts = res.details.details[0].attachments;
const pros = [];
for (let index = 0; index < Object.keys(atts).length; index++) {
const ks = Object.keys(atts)[index];
// ks like lighthouse-1520400573480-result.json
// 也可以直接使用 lighthouse_result_mapping.json 的数据
if (/lighthouse-\d+-result.json/.test(ks)) {
pros.push(new Promise(reso => request(`http://slm.dl.alipaydev.com/artifacts${atts[ks]}`, (error, response, body) => {
if (error) {
// console.error('检测任务状态失败');
return reso(getRes(false, '检测任务状态失败'));
}
// console.log('lh result', body);
return reso(getRes(true, '返回数据成功', JSON.parse(body)));
})));
}
}
Promise.all(pros).then(res => resolve(res));
}
else {
// console.log('have result', res);
resolve(getRes(false, '没有结果'));
}
}
function getRes(flag, message, res) {
return {
success: flag,
message,
runs: res ? [res] : [],
initialUrl: res ? res.initialUrl : undefined,
};
}
module.exports = function (urls) {
return new Promise((resolve) => {
request.post({
url: 'http://slm.dl.alipaydev.com/proxy/action.json',
form: {
params: JSON.stringify({
action: 'INVOKE',
planId: 896,
name: '然则的lighthouse测试',
trigger: 'hualei.hl',
envs: {
RUNNING_CONFIG: 'https://gw.alipayobjects.com/os/rmsportal/LKACPzrTRdBUuXULpasw.js',
RESULT_MODE: 'json',
H5_URL: JSON.stringify(urls) // 指定URL
},
devices: [
{
support: 'gift',
brand: 'LGE',
product: 'Nexus 5X' // 型号
}
]
}),
}
}, function (err, httpResponse, body) {
// console.log('xx', err, httpResponse.status, typeof body);
if (err) {
// console.error('发起任务失败');
resolve(getRes(false, '发起任务失败'));
return;
}
const jsonRes = JSON.parse(body);
if (jsonRes.result) {
// resolve(getRes(true, '检测过程,至少需要 5 分钟));
setTimeout(() => {
getResult(jsonRes, resolve);
}, 5 * 60000 + urls.length * 30000);
}
});
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbC1kZXZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWFsLWRldmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFbkMsbUJBQW1CLElBQVMsRUFBRSxPQUFZO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLGdGQUFnRixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQ25ILFVBQVU7SUFDVixjQUFjO0lBQ2QsSUFBSSxLQUFVLENBQUM7SUFDZixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDaEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQVUsRUFBRSxRQUFhLEVBQUUsSUFBUztZQUN6RCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNWLDZCQUE2QjtnQkFDN0IsTUFBTSxDQUFDO1lBQ1QsQ0FBQztZQUNELCtEQUErRDtZQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUNGLElBQUksRUFBRSxDQUFDO0FBQ1QsQ0FBQztBQUVELHFCQUFxQixHQUFRLEVBQUUsT0FBWTtJQUN6QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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