diff --git a/android.js b/apk/android.js similarity index 100% rename from android.js rename to apk/android.js diff --git a/worker.js b/worker.js new file mode 100644 index 0000000..24572c6 --- /dev/null +++ b/worker.js @@ -0,0 +1,88 @@ +const BaseUrl = "自定义cloudflare worker 域名" +const NotionUrl = "www.notion.so"; +const BasePath = `https://${BaseUrl}`; +const NotionPath = `https://${NotionUrl}`; + +addEventListener('fetch', function(event) { + event.respondWith(handleRequest(event.request)) +}) + +class ElementHandler { + async element(element) { + const res = await fetch("https://cdn.jsdelivr.net/gh/Reamd7/notion-zh_CN@main/json/zh.json").then(res => { + return res.text(); + }) + element.prepend(` + + `, { + html: true + }) + } +} +class ScriptHandler { + element(element) { + element.append(` + + `, { + html: true + }) + } +} + +async function handleRequest(request) { + + const method = request.method; + const headers = new Headers(request.headers); + headers.set("origin", NotionPath) + headers.set("referer", NotionPath); + headers.set("host", NotionPath); + + const destinationURL = request.url.replace(BaseUrl, NotionUrl); + if (method === "GET") { + const headers = request.headers; + return fetch(destinationURL, { + method: request.method, + headers: headers, + }).then(rep => { + const contentType = rep.headers.get("Content-Type") + if (contentType.startsWith("text/html")) { + return new HTMLRewriter().on("head", new ElementHandler()).on("body", new ScriptHandler()).transform(rep) + } + return rep; + }) + } else { + let selfheader = {}; + headers.forEach((v, k) => { + selfheader[k] = v; + }) + selfheader = { + ...selfheader, + origin: NotionPath, + referer: NotionPath, + host: NotionPath, + } + const newR = new Request(destinationURL, { + ...request, + method: request.method, + headers: selfheader, + body: request.body, + }); + return fetch(newR).then(rep => { + let selfheader = {}; + rep.headers.forEach((v, k) => { + selfheader[k] = v.replaceAll(NotionUrl, BaseUrl); + }) + return new Response(rep.body, { + status: rep.status, + statusText: rep.statusText, + headers: selfheader + }) + }) + } +} + +