Add better error handling to aero
This commit is contained in:
parent
97d305ddcc
commit
3c3dc996e4
3 changed files with 70 additions and 8 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
|
@ -36,12 +36,4 @@ yarn-error.log*
|
|||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# SW proxies - general
|
||||
public/aeroHandleSimple.js
|
||||
public/sw.js
|
||||
|
||||
# aero
|
||||
public/aero/
|
||||
**/aeroConfigBuild/
|
||||
|
||||
# TODO: Add UV public build files here (not the UV config file)
|
||||
51
public/sw.js
Normal file
51
public/sw.js
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// Example: aero with other proxies in a SW switcher design
|
||||
|
||||
// Constants
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
const dirToAeroConfig = "/aero/";
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
const dirToUvConfigAndBundle = "/uv/";
|
||||
|
||||
importScripts(`${dirToAeroConfig}config.aero.js`);
|
||||
importScripts(aeroConfig.bundle["bare-mux"]);
|
||||
importScripts(aeroConfig.bundle.handle);
|
||||
|
||||
importScripts(`${dirToUvConfigAndBundle}uv.bundle.js`);
|
||||
importScripts(`${dirToUvConfigAndBundle}uv.config.js`);
|
||||
importScripts(__uv$config.sw);
|
||||
|
||||
importScripts(`${dirToAeroConfig}/extras/aeroHandleSimple.js`);
|
||||
|
||||
const aeroHandlerWithExtras = patchAeroHandler(handle);
|
||||
const uv = new UVServiceWorker();
|
||||
|
||||
addEventListener("install", skipWaiting);
|
||||
|
||||
// Switching
|
||||
let chosenProxy = defaultProxy;
|
||||
addEventListener("message", event => {
|
||||
if ("type" in event.data && event.data.type === "changeDefault") {
|
||||
const possibleChosenProxy = event.data.data;
|
||||
if (isValidProxy(possibleChosenProxy))
|
||||
chosenProxy = possibleChosenProxy;
|
||||
else {
|
||||
console.log(
|
||||
`Fatal error: tried to set the default proxy, but the proxy to be set isn't supported: ${chosenProxy}`
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
addEventListener("fetch", ev => {
|
||||
if (ev.request.url.startsWith(__uv$config.prefix))
|
||||
return ev.respondWith(uv.fetch(ev));
|
||||
if (routeAero(ev)) return ev.respondWith(aeroHandlerWithExtras(ev));
|
||||
});
|
||||
|
||||
function isValidProxy(proxy) {
|
||||
return ["aero", "uv"].includes(proxy);
|
||||
}
|
||||
19
src/app/aero/extras/[extras]/route.ts
Normal file
19
src/app/aero/extras/[extras]/route.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import fs from 'fs'
|
||||
import { notFound } from 'next/navigation'
|
||||
import { NextRequest } from 'next/server'
|
||||
|
||||
export async function GET(_req: NextRequest, { params }: { params: { aero: string } }) {
|
||||
const requestedFile = params.aero
|
||||
try {
|
||||
const res = await fetch(`https://unpkg.com/browse/aero-proxy/extras/${requestedFile}`)
|
||||
const file = await res.text()
|
||||
const fileBlob = new Blob([file])
|
||||
return new Response(fileBlob, {
|
||||
headers: {
|
||||
'Content-Type': 'application/javascript'
|
||||
}
|
||||
})
|
||||
} catch {
|
||||
notFound()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue