Skip to content

Commit c5c9c64

Browse files
committed
[chrome] implement error page
1 parent 8284e38 commit c5c9c64

File tree

6 files changed

+311
-78
lines changed

6 files changed

+311
-78
lines changed

packages/chrome/src/proxy/Controller.ts

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import type {
66
} from "../../../scramjet/packages/controller/src/types";
77
import { RpcHelper, type MethodsDefinition } from "@mercuryworkshop/rpc";
88
import * as tldts from "tldts";
9-
import { createFetchHandler, handlefetch } from "./scramjet";
9+
import {
10+
createFetchHandler,
11+
handlefetch,
12+
renderErrorPage,
13+
virtualInjectPath,
14+
} from "./scramjet";
1015
import {
1116
ScramjetHeaders,
1217
type ScramjetFetchHandler,
@@ -29,42 +34,55 @@ export class Controller {
2934
this.readyResolve();
3035
},
3136
request: async (data) => {
32-
let headers = new ScramjetHeaders();
33-
for (let [k, v] of Object.entries(data.initialHeaders)) {
34-
if (typeof v !== "string") v = v[0];
35-
if (v) headers.set(k, v);
36-
}
37-
const request: ScramjetFetchRequest = {
38-
rawUrl: new URL(data.rawUrl),
39-
rawClientUrl: data.rawClientUrl
40-
? new URL(data.rawClientUrl)
41-
: undefined,
42-
method: data.method,
43-
initialHeaders: headers,
44-
body: data.body,
45-
mode: data.mode,
46-
cache: data.cache,
47-
referrer: data.referrer,
48-
destination: data.destination,
49-
};
50-
51-
const fetchresp = await handlefetch(request, this);
52-
53-
const response: TransferResponse = {
54-
status: fetchresp.status,
55-
statusText: fetchresp.statusText,
56-
headers: fetchresp.headers,
57-
body: fetchresp.body,
58-
};
59-
60-
let transfer: any[] | undefined = [];
61-
if (
62-
response.body instanceof ArrayBuffer ||
63-
response.body instanceof ReadableStream
64-
) {
65-
transfer = [response.body];
37+
try {
38+
let headers = new ScramjetHeaders();
39+
for (let [k, v] of Object.entries(data.initialHeaders)) {
40+
if (typeof v !== "string") v = v[0];
41+
if (v) headers.set(k, v);
42+
}
43+
const request: ScramjetFetchRequest = {
44+
rawUrl: new URL(data.rawUrl),
45+
rawClientUrl: data.rawClientUrl
46+
? new URL(data.rawClientUrl)
47+
: undefined,
48+
method: data.method,
49+
initialHeaders: headers,
50+
body: data.body,
51+
mode: data.mode,
52+
cache: data.cache,
53+
referrer: data.referrer,
54+
destination: data.destination,
55+
};
56+
57+
const fetchresp = await handlefetch(request, this);
58+
59+
const response: TransferResponse = {
60+
status: fetchresp.status,
61+
statusText: fetchresp.statusText,
62+
headers: fetchresp.headers,
63+
body: fetchresp.body,
64+
};
65+
66+
let transfer: any[] | undefined = [];
67+
if (
68+
response.body instanceof ArrayBuffer ||
69+
response.body instanceof ReadableStream
70+
) {
71+
transfer = [response.body];
72+
}
73+
return [response, transfer];
74+
} catch (e: any) {
75+
return [
76+
{
77+
status: 500,
78+
statusText: "Internal Server Error",
79+
headers: {
80+
"Content-Type": "text/html",
81+
},
82+
body: renderErrorPage(this, e),
83+
},
84+
];
6685
}
67-
return [response, transfer];
6886
},
6987
};
7088

0 commit comments

Comments
 (0)