youzanyun-devtool-worker
Version:
- web - ws - proxy
61 lines (60 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const axios_1 = tslib_1.__importDefault(require("axios"));
const https_1 = tslib_1.__importDefault(require("https"));
let dpDeveloperDecorate;
class DpDeveloperDecorate {
static getInstance() {
if (!dpDeveloperDecorate) {
dpDeveloperDecorate = new DpDeveloperDecorate();
}
return dpDeveloperDecorate;
}
async run(ctx) {
let requestHeader = JSON.parse(JSON.stringify(ctx.headers));
requestHeader['accept-encoding'] = 'gzip, deflate';
let axiosRes = await axios_1.default({
method: ctx.method,
url: ctx.href,
headers: requestHeader,
data: ctx.isJsonHeader ? ctx.request.body : ctx.req,
responseType: "text",
validateStatus: function (status) {
return true;
},
maxRedirects: 0,
httpsAgent: new https_1.default.Agent({ rejectUnauthorized: false }),
});
if (axiosRes.status < 200 || axiosRes.status >= 300) {
ctx.status = axiosRes.status;
let header = JSON.parse(JSON.stringify(axiosRes.headers));
delete header["content-length"];
ctx.set(header);
ctx.body = axiosRes.data;
}
const interceptA = `
<script src="https://b.yzcdn.cn/yzy/zepto.min.js"></script>
<script>
window.onload = function() {
Zepto(function($) {
$('body').on('click', 'a', e => { e.preventDefault() });
})
}
</script>
`;
const content = axiosRes.data;
const jsReg = /<\/body>/g;
let index = -1;
let matches;
while ((matches = jsReg.exec(content)) !== null) {
index = matches.index;
}
const finalContent = content.substring(0, index) + interceptA + content.substring(index);
let header = JSON.parse(JSON.stringify(axiosRes.headers));
delete header["content-length"];
ctx.set(header);
ctx.body = finalContent;
}
}
exports.default = DpDeveloperDecorate;