-
-
Notifications
You must be signed in to change notification settings - Fork 97
/
Copy pathoriginoverride.js
43 lines (33 loc) · 1.25 KB
/
originoverride.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
import { errJSON, logger } from "./logger.js";
export class OriginOverride
{
constructor(originOverride) {
this.originOverride = originOverride.map((override) => {
let [orig, dest] = override.split("=");
orig = new URL(orig).origin;
dest = new URL(dest).origin;
return {orig, dest};
});
}
initPage(page) {
for (const {orig, dest} of this.originOverride) {
const logDetails = {page: page.url(), orig, dest};
logger.debug(`Adding override ${orig} => ${dest}`);
page.route(orig + "/**", async (route) => {
try {
const request = route.request();
const url = request.url();
const newUrl = dest + url.slice(orig.length);
const resp = await fetch(newUrl, {headers: request.headers()});
const body = Buffer.from(await resp.arrayBuffer());
const headers = Object.fromEntries(resp.headers);
const status = resp.status;
logger.debug("Origin overridden", {orig: url, dest: newUrl, status, body: body.length}, "originoverride");
route.fulfill({body, headers, status});
} catch (e) {
logger.warn("Error overriding origin", {...errJSON(e), ...logDetails}, "originoverride");
}
});
}
}
}