chemicaljs 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,148 @@
1
+ (()=>{"use strict";var e={1762:function(e,t,r){r.d(t,{Z:function(){return o}});let o={fmt:function(e,t,...r){let o=Error.prepareStackTrace;Error.prepareStackTrace=(e,t)=>{t.shift(),t.shift(),t.shift();let r="";for(let e=1;e<Math.min(2,t.length);e++)t[e].getFunctionName()&&(r+=`${t[e].getFunctionName()} -> `+r);return r+=t[0].getFunctionName()||"Anonymous"};let s=function(){try{throw Error()}catch(e){return e.stack}}();Error.prepareStackTrace=o;let n=console[e]||console.log;n(`%c${s}%c ${t}`,`
2
+ background-color: ${{log:"#000",warn:"#f80",error:"#f00",debug:"transparent"}[e]};
3
+ color: ${{log:"#fff",warn:"#fff",error:"#fff",debug:"gray"}[e]};
4
+ padding: ${{log:2,warn:4,error:4,debug:0}[e]}px;
5
+ font-weight: bold;
6
+ font-family: monospace;
7
+ font-size: 0.9em;
8
+ `,`${"debug"===e?"color: gray":""}`,...r)},log:function(e,...t){this.fmt("log",e,...t)},warn:function(e,...t){this.fmt("warn",e,...t)},error:function(e,...t){this.fmt("error",e,...t)},debug:function(e,...t){this.fmt("debug",e,...t)}}}},t={};function r(o){var s=t[o];if(void 0!==s)return s.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.d=function(e,t){for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};class o{handle;origin;syncToken;promises;messageChannel;connected;constructor(e,t){this.handle=e,this.origin=t,this.syncToken=0,this.promises={},this.messageChannel=new MessageChannel,this.connected=!1,this.messageChannel.port1.addEventListener("message",e=>{"scramjet$type"in e.data&&("init"===e.data.scramjet$type?this.connected=!0:this.handleMessage(e.data))}),this.messageChannel.port1.start(),this.handle.postMessage({scramjet$type:"init",scramjet$port:this.messageChannel.port2},[this.messageChannel.port2])}handleMessage(e){let t=this.promises[e.scramjet$token];t&&(t(e),delete this.promises[e.scramjet$token])}async fetch(e){let t=this.syncToken++,r={scramjet$type:"fetch",scramjet$token:t,scramjet$request:{url:e.url,body:e.body,headers:Array.from(e.headers.entries()),method:e.method,mode:e.mode,destinitation:e.destination}},o=e.body?[e.body]:[];this.handle.postMessage(r,o);let{scramjet$response:s}=await new Promise(e=>{this.promises[t]=e});return!!s&&new Response(s.body,{headers:s.headers,status:s.status,statusText:s.statusText})}}!("$scramjet"in self)&&(self.$scramjet={version:{build:"e4a0ee9",version:"1.0.2-dev"},codec:{},flagEnabled:function(e,t){let r=s.config.defaultFlags[e];for(let r in s.config.siteFlags){let o=s.config.siteFlags[r];if(new RegExp(r).test(t.href)&&e in o)return o[e]}return r}});let s=self.$scramjet,n=Function,{util:{BareClient:i,ScramjetHeaders:a,BareMuxConnection:c},url:{rewriteUrl:l,unrewriteUrl:d,rewriteBlob:u,unrewriteBlob:h},rewrite:{rewriteCss:f,unrewriteCss:p,rewriteHtml:m,unrewriteHtml:g,rewriteSrcset:y,rewriteJs:b,rewriteHeaders:w,rewriteWorkers:v,htmlRules:k},CookieStore:x}=s.shared;function R(e){return{origin:e,base:e}}async function S(e,t){let r=new URLSearchParams(new URL(e.url).search);if(r.has("url"))return Response.redirect(l(r.get("url"),R(new URL(r.get("url")))));try{let o=new URL(e.url),n="";if(o.searchParams.has("type")&&(n=o.searchParams.get("type"),o.searchParams.delete("type")),o.searchParams.has("dest")&&o.searchParams.delete("dest"),o.pathname.startsWith(this.config.prefix+"blob:")||o.pathname.startsWith(this.config.prefix+"data:")){let r,s=o.pathname.substring(this.config.prefix.length);s.startsWith("blob:")&&(s=h(s));let i=await fetch(s,{});i.body&&(r=await j(i,t?{base:new URL(new URL(t.url).origin),origin:new URL(new URL(t.url).origin)}:R(new URL(d(e.referrer))),e.destination,n,this.cookieStore));let a=Object.fromEntries(i.headers.entries());return crossOriginIsolated&&(a["Cross-Origin-Opener-Policy"]="same-origin",a["Cross-Origin-Embedder-Policy"]="require-corp"),new Response(r,{status:i.status,statusText:i.statusText,headers:a})}let i=new URL(d(o)),c=this.serviceWorkers.find(e=>e.origin===i.origin);if(c&&c.connected&&"swruntime"!==r.get("from")){let t=await c.fetch(e);if(t)return t}if(i.origin==new URL(e.url).origin)throw Error("attempted to fetch from same origin - this means the site has obtained a reference to the real origin, aborting");let l=new a;for(let[t,r]of e.headers.entries())l.set(t,r);if(t&&new URL(t.url).pathname.startsWith(s.config.prefix)){let e=new URL(d(t.url));e.toString().includes("youtube.com")||(l.set("Referer",e.toString()),l.set("Origin",e.origin))}let u=this.cookieStore.getCookies(i,!1);u.length&&l.set("Cookie",u);let f=new E("request");f.url=i,f.body=e.body,f.method=e.method,f.destination=e.destination,f.client=t,f.requestHeaders=l.headers,this.dispatchEvent(f);let p=f.response||await this.client.fetch(f.url,{method:f.method,body:f.body,headers:f.requestHeaders,credentials:"omit",mode:"cors"===e.mode?e.mode:"same-origin",cache:e.cache,redirect:"manual",duplex:"half"});return await $(i,n,e.destination,p,this.cookieStore,t,this)}catch(t){if(console.error("ERROR FROM SERVICE WORKER FETCH",t),!["document","iframe"].includes(e.destination))return new Response(void 0,{status:500});return function(e,t){let r={"content-type":"text/html"};return crossOriginIsolated&&(r["Cross-Origin-Embedder-Policy"]="require-corp"),new Response(function(e,t){let r=`
9
+ errorTrace.value = ${JSON.stringify(e)};
10
+ fetchedURL.textContent = ${JSON.stringify(t)};
11
+ for (const node of document.querySelectorAll("#hostname")) node.textContent = ${JSON.stringify(location.hostname)};
12
+ reload.addEventListener("click", () => location.reload());
13
+ version.textContent = ${JSON.stringify(s.version.version)};
14
+ build.textContent = ${JSON.stringify(s.version.build)};
15
+ `;return`<!DOCTYPE html>
16
+ <html>
17
+ <head>
18
+ <meta charset="utf-8" />
19
+ <title>Scramjet</title>
20
+ <style>
21
+ :root {
22
+ --deep: #080602;
23
+ --shallow: #181412;
24
+ --beach: #f1e8e1;
25
+ --shore: #b1a8a1;
26
+ --accent: #ffa938;
27
+ --font-sans: -apple-system, system-ui, BlinkMacSystemFont, sans-serif;
28
+ --font-monospace: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
29
+ }
30
+
31
+ *:not(div,p,span,ul,li,i,span) {
32
+ background-color: var(--deep);
33
+ color: var(--beach);
34
+ font-family: var(--font-sans);
35
+ }
36
+
37
+ textarea,
38
+ button {
39
+ background-color: var(--shallow);
40
+ border-radius: 0.6em;
41
+ padding: 0.6em;
42
+ border: none;
43
+ appearance: none;
44
+ font-family: var(--font-sans);
45
+ color: var(--beach);
46
+ }
47
+
48
+ button.primary {
49
+ background-color: var(--accent);
50
+ color: var(--deep);
51
+ font-weight: bold;
52
+ }
53
+
54
+ textarea {
55
+ resize: none;
56
+ height: 20em;
57
+ text-align: left;
58
+ font-family: var(--font-monospace);
59
+ }
60
+
61
+ body {
62
+ width: 100vw;
63
+ height: 100vh;
64
+ justify-content: center;
65
+ align-items: center;
66
+ }
67
+
68
+ body,
69
+ html,
70
+ #inner {
71
+ display: flex;
72
+ align-items: center;
73
+ flex-direction: column;
74
+ gap: 0.5em;
75
+ overflow: hidden;
76
+ }
77
+
78
+ #inner {
79
+ z-index: 100;
80
+ }
81
+
82
+ #cover {
83
+ position: absolute;
84
+ width: 100%;
85
+ height: 100%;
86
+ background-color: color-mix(in srgb, var(--deep) 70%, transparent);
87
+ z-index: 99;
88
+ }
89
+
90
+ #info {
91
+ display: flex;
92
+ flex-direction: row;
93
+ align-items: flex-start;
94
+ gap: 1em;
95
+ }
96
+
97
+ #version-wrapper {
98
+ width: 100%;
99
+ text-align: center;
100
+ position: absolute;
101
+ bottom: 0.2rem;
102
+ font-size: 0.8rem;
103
+ color: var(--shore)!important;
104
+ i {
105
+ background-color: color-mix(in srgb, var(--deep), transparent 50%);
106
+ border-radius: 9999px;
107
+ padding: 0.2em 0.5em;
108
+ }
109
+ z-index: 101;
110
+ }
111
+ </style>
112
+ </head>
113
+ <body>
114
+ <div id="cover"></div>
115
+ <div id="inner">
116
+ <h1 id="errorTitle">Uh oh!</h1>
117
+ <p>There was an error loading <b id="fetchedURL"></b></p>
118
+ <!-- <p id="errorMessage">Internal Server Error</p> -->
119
+
120
+ <div id="info">
121
+ <textarea id="errorTrace" cols="40" rows="10" readonly>
122
+ </textarea>
123
+ <div id="troubleshooting">
124
+ <p>Try:</p>
125
+ <ul>
126
+ <li>Checking your internet connection</li>
127
+ <li>Verifying you entered the correct address</li>
128
+ <li>Clearing the site data</li>
129
+ <li>Contacting <b id="hostname"></b>'s administrator</li>
130
+ <li>Verify the server isn't censored</li>
131
+ </ul>
132
+ <p>If you're the administrator of <b id="hostname"></b>, try:</p>
133
+ <ul>
134
+ <li>Restarting your server</li>
135
+ <li>Updating Scramjet</li>
136
+ <li>Troubleshooting the error on the <a href="https://github.com/MercuryWorkshop/scramjet" target="_blank">GitHub repository</a></li>
137
+ </ul>
138
+ </div>
139
+ </div>
140
+ <br>
141
+ <button id="reload" class="primary">Reload</button>
142
+ </div>
143
+ <p id="version-wrapper"><i>Scramjet v<span id="version"></span> (build <span id="build"></span>)</i></p>
144
+ <script src="${"data:application/javascript,"+encodeURIComponent(r)}"></script>
145
+ </body>
146
+ </html>
147
+ `}(String(e),t),{status:500,headers:r})}(t,d(e.url))}}async function $(e,t,r,o,s,n,i){let a;let c=w(o.rawHeaders,R(e)),l=c["set-cookie"]||[];for(let t in l)n&&n.postMessage({scramjet$type:"cookie",cookie:t,url:e.href});for(let t in await s.setCookies(l instanceof Array?l:[l],e),c)Array.isArray(c[t])&&(c[t]=c[t][0]);if(o.body&&(a=await j(o,R(e),r,t,s)),["document","iframe"].includes(r)){let e=c["content-disposition"];if(!/\s*?((inline|attachment);\s*?)filename=/i.test(e)){let t=/^\s*?attachment/i.test(e)?"attachment":"inline",[r]=new URL(o.finalURL).pathname.split("/").slice(-1);c["content-disposition"]=`${t}; filename=${JSON.stringify(r)}`}}"text/event-stream"===c.accept&&(c["content-type"]="text/event-stream"),delete c["permissions-policy"],crossOriginIsolated&&["document","iframe","worker","sharedworker","style","script"].includes(r)&&(c["Cross-Origin-Embedder-Policy"]="require-corp",c["Cross-Origin-Opener-Policy"]="same-origin");let d=new C("handleResponse");return d.responseBody=a,d.responseHeaders=c,d.status=o.status,d.statusText=o.statusText,d.destination=r,d.url=e,d.rawResponse=o,d.client=n,i.dispatchEvent(d),new Response(d.responseBody,{headers:d.responseHeaders,status:d.status,statusText:d.statusText})}async function j(e,t,r,o,s){switch(r){case"iframe":case"document":if(e.headers.get("content-type")?.startsWith("text/html"))return m(await e.text(),s,t,!0);return e.body;case"script":return b(await e.arrayBuffer(),e.url,t);case"style":return f(await e.text(),t);case"sharedworker":case"worker":return v(await e.arrayBuffer(),o,e.url,t);default:return e.body}}s.config;class C extends Event{responseHeaders;responseBody;status;statusText;destination;url;rawResponse;client}class E extends Event{url;destination;client;method;body;requestHeaders;response}var O=r(1762).Z;class T extends EventTarget{client;config;syncPool={};synctoken=0;cookieStore=new s.shared.CookieStore;serviceWorkers=[];constructor(){super(),this.client=new s.shared.util.BareClient;let e=indexedDB.open("$scramjet",1);e.onsuccess=()=>{let t=e.result.transaction("cookies","readonly").objectStore("cookies").get("cookies");t.onsuccess=()=>{t.result&&(this.cookieStore.load(t.result),O.log("Loaded cookies from IDB!"))}},addEventListener("message",async({data:t})=>{if("scramjet$type"in t){if("registerServiceWorker"===t.scramjet$type){this.serviceWorkers.push(new o(t.port,t.origin));return}"cookie"===t.scramjet$type&&(this.cookieStore.setCookies([t.cookie],new URL(t.url)),e.result.transaction("cookies","readwrite").objectStore("cookies").put(JSON.parse(this.cookieStore.dump()),"cookies"))}})}async loadConfig(){if(this.config)return;let e=indexedDB.open("$scramjet",1);return new Promise((t,r)=>{e.onsuccess=async()=>{let o=e.result.transaction("config","readonly").objectStore("config").get("config");o.onsuccess=()=>{this.config=o.result,s.config=o.result,s.codec.encode=n("url",s.config.codec.encode),s.codec.decode=n("url",s.config.codec.decode),t()},o.onerror=()=>r(o.error)},e.onerror=()=>r(e.error)})}route({request:e}){return!!e.url.startsWith(location.origin+this.config.prefix)||!1}async fetch({request:e,clientId:t}){let r=await self.clients.get(t);return S.call(this,e,r)}}self.ScramjetServiceWorker=T})();
148
+ //# sourceMappingURL=scramjet.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scramjet.worker.js","sources":["webpack://@mercuryworkshop/scramjet/./src/log.ts","webpack://@mercuryworkshop/scramjet/./src/worker/fakesw.ts","webpack://@mercuryworkshop/scramjet/./src/scramjet.ts","webpack://@mercuryworkshop/scramjet/./src/shared.ts","webpack://@mercuryworkshop/scramjet/./src/worker/fetch.ts","webpack://@mercuryworkshop/scramjet/./src/worker/error.ts","webpack://@mercuryworkshop/scramjet/./src/worker/index.ts"],"sourcesContent":["export default {\n\tfmt: function (severity: string, message: string, ...args: any[]) {\n\t\tconst old = Error.prepareStackTrace;\n\n\t\tError.prepareStackTrace = (_, stack) => {\n\t\t\tstack.shift(); // stack();\n\t\t\tstack.shift(); // fmt();\n\t\t\tstack.shift();\n\n\t\t\tlet fmt = \"\";\n\t\t\tfor (let i = 1; i < Math.min(2, stack.length); i++) {\n\t\t\t\tif (stack[i].getFunctionName()) {\n\t\t\t\t\t// const f = stack[i].getThis()?.constructor?.name;\n\t\t\t\t\t// if (f) fmt += `${f}.`\n\t\t\t\t\tfmt += `${stack[i].getFunctionName()} -> ` + fmt;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt += stack[0].getFunctionName() || \"Anonymous\";\n\n\t\t\treturn fmt;\n\t\t};\n\n\t\tconst fmt = (function stack() {\n\t\t\ttry {\n\t\t\t\tthrow new Error();\n\t\t\t} catch (e) {\n\t\t\t\treturn e.stack;\n\t\t\t}\n\t\t})();\n\n\t\tError.prepareStackTrace = old;\n\n\t\tconst fn = console[severity] || console.log;\n\t\tconst bg = {\n\t\t\tlog: \"#000\",\n\t\t\twarn: \"#f80\",\n\t\t\terror: \"#f00\",\n\t\t\tdebug: \"transparent\",\n\t\t}[severity];\n\t\tconst fg = {\n\t\t\tlog: \"#fff\",\n\t\t\twarn: \"#fff\",\n\t\t\terror: \"#fff\",\n\t\t\tdebug: \"gray\",\n\t\t}[severity];\n\t\tconst padding = {\n\t\t\tlog: 2,\n\t\t\twarn: 4,\n\t\t\terror: 4,\n\t\t\tdebug: 0,\n\t\t}[severity];\n\n\t\tfn(\n\t\t\t`%c${fmt}%c ${message}`,\n\t\t\t`\n\t\tbackground-color: ${bg};\n\t\tcolor: ${fg};\n\t\tpadding: ${padding}px;\n\t\tfont-weight: bold;\n\t\tfont-family: monospace;\n\t\tfont-size: 0.9em;\n\t`,\n\t\t\t`${severity === \"debug\" ? \"color: gray\" : \"\"}`,\n\t\t\t...args\n\t\t);\n\t},\n\tlog: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"log\", message, ...args);\n\t},\n\twarn: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"warn\", message, ...args);\n\t},\n\terror: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"error\", message, ...args);\n\t},\n\tdebug: function (message: string, ...args: any[]) {\n\t\tthis.fmt(\"debug\", message, ...args);\n\t},\n};\n","import { type MessageW2R, type MessageR2W } from \"../client/swruntime\";\n\nexport class FakeServiceWorker {\n\tsyncToken = 0;\n\tpromises: Record<number, (val?: MessageR2W) => void> = {};\n\tmessageChannel = new MessageChannel();\n\tconnected = false;\n\n\tconstructor(\n\t\tpublic handle: MessagePort,\n\t\tpublic origin: string\n\t) {\n\t\tthis.messageChannel.port1.addEventListener(\"message\", (event) => {\n\t\t\tif (\"scramjet$type\" in event.data) {\n\t\t\t\tif (event.data.scramjet$type === \"init\") {\n\t\t\t\t\tthis.connected = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.handleMessage(event.data);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.messageChannel.port1.start();\n\n\t\tthis.handle.postMessage(\n\t\t\t{\n\t\t\t\tscramjet$type: \"init\",\n\t\t\t\tscramjet$port: this.messageChannel.port2,\n\t\t\t},\n\t\t\t[this.messageChannel.port2]\n\t\t);\n\t}\n\n\thandleMessage(data: MessageR2W) {\n\t\tconst cb = this.promises[data.scramjet$token];\n\t\tif (cb) {\n\t\t\tcb(data);\n\t\t\tdelete this.promises[data.scramjet$token];\n\t\t}\n\t}\n\n\tasync fetch(request: Request): Promise<Response | false> {\n\t\tconst token = this.syncToken++;\n\n\t\tconst message: MessageW2R = {\n\t\t\tscramjet$type: \"fetch\",\n\t\t\tscramjet$token: token,\n\t\t\tscramjet$request: {\n\t\t\t\turl: request.url,\n\t\t\t\tbody: request.body,\n\t\t\t\theaders: Array.from(request.headers.entries()),\n\t\t\t\tmethod: request.method,\n\t\t\t\tmode: request.mode,\n\t\t\t\tdestinitation: request.destination,\n\t\t\t},\n\t\t};\n\n\t\tconst transfer = request.body ? [request.body] : [];\n\n\t\tthis.handle.postMessage(message, transfer);\n\n\t\tconst { scramjet$response: r } = (await new Promise((resolve) => {\n\t\t\tthis.promises[token] = resolve;\n\t\t})) as MessageR2W;\n\n\t\tif (!r) return false;\n\n\t\treturn new Response(r.body, {\n\t\t\theaders: r.headers,\n\t\t\tstatus: r.status,\n\t\t\tstatusText: r.statusText,\n\t\t});\n\t}\n}\n","import { ScramjetFlags } from \"./types\";\n\nif (!(\"$scramjet\" in self)) {\n\t// @ts-expect-error ts stuff\n\tself.$scramjet = {\n\t\tversion: {\n\t\t\tbuild: COMMITHASH,\n\t\t\tversion: VERSION,\n\t\t},\n\t\tcodec: {},\n\t\tflagEnabled,\n\t};\n}\n\nexport const $scramjet = self.$scramjet;\n\nconst nativeFunction = Function;\nexport function loadCodecs() {\n\t$scramjet.codec.encode = nativeFunction(\n\t\t\"url\",\n\t\t$scramjet.config.codec.encode\n\t) as any;\n\t$scramjet.codec.decode = nativeFunction(\n\t\t\"url\",\n\t\t$scramjet.config.codec.decode\n\t) as any;\n}\n\nexport function flagEnabled(flag: keyof ScramjetFlags, url: URL): boolean {\n\tconst value = $scramjet.config.defaultFlags[flag];\n\tfor (const regex in $scramjet.config.siteFlags) {\n\t\tconst partialflags = $scramjet.config.siteFlags[regex];\n\t\tif (new RegExp(regex).test(url.href) && flag in partialflags) {\n\t\t\treturn partialflags[flag];\n\t\t}\n\t}\n\n\treturn value;\n}\n","import { $scramjet } from \"./scramjet\";\n\nexport const {\n\tutil: { BareClient, ScramjetHeaders, BareMuxConnection },\n\turl: { rewriteUrl, unrewriteUrl, rewriteBlob, unrewriteBlob },\n\trewrite: {\n\t\trewriteCss,\n\t\tunrewriteCss,\n\t\trewriteHtml,\n\t\tunrewriteHtml,\n\t\trewriteSrcset,\n\t\trewriteJs,\n\t\trewriteHeaders,\n\t\trewriteWorkers,\n\t\thtmlRules,\n\t},\n\tCookieStore,\n} = $scramjet.shared;\n\nexport const config = $scramjet.config;\n","import { BareResponseFetch } from \"@mercuryworkshop/bare-mux\";\nimport { MessageW2C, ScramjetServiceWorker } from \".\";\nimport { renderError } from \"./error\";\nimport { FakeServiceWorker } from \"./fakesw\";\nimport { CookieStore } from \"../shared/cookie\";\nimport {\n\tScramjetHeaders,\n\tunrewriteUrl,\n\trewriteUrl,\n\trewriteCss,\n\trewriteHeaders,\n\trewriteHtml,\n\trewriteJs,\n\trewriteWorkers,\n\tunrewriteBlob,\n} from \"../shared\";\n\nimport type { URLMeta } from \"../shared/rewriters/url\";\nimport { $scramjet } from \"../scramjet\";\n\nfunction newmeta(url: URL): URLMeta {\n\treturn {\n\t\torigin: url,\n\t\tbase: url,\n\t};\n}\n\nexport async function swfetch(\n\tthis: ScramjetServiceWorker,\n\trequest: Request,\n\tclient: Client | null\n) {\n\tconst urlParam = new URLSearchParams(new URL(request.url).search);\n\n\tif (urlParam.has(\"url\")) {\n\t\treturn Response.redirect(\n\t\t\trewriteUrl(urlParam.get(\"url\"), newmeta(new URL(urlParam.get(\"url\"))))\n\t\t);\n\t}\n\n\ttry {\n\t\tconst requesturl = new URL(request.url);\n\t\tlet workertype = \"\";\n\t\tif (requesturl.searchParams.has(\"type\")) {\n\t\t\tworkertype = requesturl.searchParams.get(\"type\") as string;\n\t\t\trequesturl.searchParams.delete(\"type\");\n\t\t}\n\t\tif (requesturl.searchParams.has(\"dest\")) {\n\t\t\trequesturl.searchParams.delete(\"dest\");\n\t\t}\n\n\t\tif (\n\t\t\trequesturl.pathname.startsWith(this.config.prefix + \"blob:\") ||\n\t\t\trequesturl.pathname.startsWith(this.config.prefix + \"data:\")\n\t\t) {\n\t\t\tlet dataurl = requesturl.pathname.substring(this.config.prefix.length);\n\t\t\tif (dataurl.startsWith(\"blob:\")) {\n\t\t\t\tdataurl = unrewriteBlob(dataurl);\n\t\t\t}\n\n\t\t\tconst response: Response = await fetch(dataurl, {});\n\n\t\t\tlet body: BodyType;\n\n\t\t\tif (response.body) {\n\t\t\t\tbody = await rewriteBody(\n\t\t\t\t\tresponse,\n\t\t\t\t\tclient\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tbase: new URL(new URL(client.url).origin),\n\t\t\t\t\t\t\t\torigin: new URL(new URL(client.url).origin),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: newmeta(new URL(unrewriteUrl(request.referrer))),\n\t\t\t\t\trequest.destination,\n\t\t\t\t\tworkertype,\n\t\t\t\t\tthis.cookieStore\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst headers = Object.fromEntries(response.headers.entries());\n\n\t\t\tif (crossOriginIsolated) {\n\t\t\t\theaders[\"Cross-Origin-Opener-Policy\"] = \"same-origin\";\n\t\t\t\theaders[\"Cross-Origin-Embedder-Policy\"] = \"require-corp\";\n\t\t\t}\n\n\t\t\treturn new Response(body, {\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: headers,\n\t\t\t});\n\t\t}\n\n\t\tconst url = new URL(unrewriteUrl(requesturl));\n\n\t\tconst activeWorker: FakeServiceWorker | null = this.serviceWorkers.find(\n\t\t\t(w) => w.origin === url.origin\n\t\t);\n\n\t\tif (\n\t\t\tactiveWorker &&\n\t\t\tactiveWorker.connected &&\n\t\t\turlParam.get(\"from\") !== \"swruntime\"\n\t\t) {\n\t\t\t// TODO: check scope\n\t\t\tconst r = await activeWorker.fetch(request);\n\t\t\tif (r) return r;\n\t\t}\n\t\tif (url.origin == new URL(request.url).origin) {\n\t\t\tthrow new Error(\n\t\t\t\t\"attempted to fetch from same origin - this means the site has obtained a reference to the real origin, aborting\"\n\t\t\t);\n\t\t}\n\n\t\tconst headers = new ScramjetHeaders();\n\t\tfor (const [key, value] of request.headers.entries()) {\n\t\t\theaders.set(key, value);\n\t\t}\n\n\t\tif (\n\t\t\tclient &&\n\t\t\tnew URL(client.url).pathname.startsWith($scramjet.config.prefix)\n\t\t) {\n\t\t\t// TODO: i was against cors emulation but we might actually break stuff if we send full origin/referrer always\n\t\t\tconst clientURL = new URL(unrewriteUrl(client.url));\n\t\t\tif (clientURL.toString().includes(\"youtube.com\")) {\n\t\t\t\t// console.log(headers);\n\t\t\t} else {\n\t\t\t\theaders.set(\"Referer\", clientURL.toString());\n\t\t\t\theaders.set(\"Origin\", clientURL.origin);\n\t\t\t}\n\t\t}\n\n\t\tconst cookies = this.cookieStore.getCookies(url, false);\n\n\t\tif (cookies.length) {\n\t\t\theaders.set(\"Cookie\", cookies);\n\t\t}\n\t\t/*\n\t\t// yeah this is VERY wrong, never do this again\n\t\t// TODO this is wrong somehow\n\t\theaders.set(\"Sec-Fetch-Mode\", \"cors\");\n\t\theaders.set(\"Sec-Fetch-Site\", \"same-origin\");\n\t\theaders.set(\"Sec-Fetch-Dest\", \"empty\");\n\t\t*/\n\n\t\tconst ev = new ScramjetRequestEvent(\"request\");\n\t\tev.url = url;\n\t\tev.body = request.body;\n\t\tev.method = request.method;\n\t\tev.destination = request.destination;\n\t\tev.client = client;\n\t\tev.requestHeaders = headers.headers;\n\t\tthis.dispatchEvent(ev);\n\n\t\tconst response: BareResponseFetch =\n\t\t\tev.response ||\n\t\t\t(await this.client.fetch(ev.url, {\n\t\t\t\tmethod: ev.method,\n\t\t\t\tbody: ev.body,\n\t\t\t\theaders: ev.requestHeaders,\n\t\t\t\tcredentials: \"omit\",\n\t\t\t\tmode: request.mode === \"cors\" ? request.mode : \"same-origin\",\n\t\t\t\tcache: request.cache,\n\t\t\t\tredirect: \"manual\",\n\t\t\t\t//@ts-ignore why the fuck is this not typed mircosoft\n\t\t\t\tduplex: \"half\",\n\t\t\t}));\n\n\t\treturn await handleResponse(\n\t\t\turl,\n\t\t\tworkertype,\n\t\t\trequest.destination,\n\t\t\tresponse,\n\t\t\tthis.cookieStore,\n\t\t\tclient,\n\t\t\tthis\n\t\t);\n\t} catch (err) {\n\t\tconsole.error(\"ERROR FROM SERVICE WORKER FETCH\", err);\n\t\tif (![\"document\", \"iframe\"].includes(request.destination))\n\t\t\treturn new Response(undefined, { status: 500 });\n\n\t\treturn renderError(err, unrewriteUrl(request.url));\n\t}\n}\n\nasync function handleResponse(\n\turl: URL,\n\tworkertype: string,\n\tdestination: RequestDestination,\n\tresponse: BareResponseFetch,\n\tcookieStore: CookieStore,\n\tclient: Client,\n\tswtarget: ScramjetServiceWorker\n): Promise<Response> {\n\tlet responseBody: BodyType;\n\tconst responseHeaders = rewriteHeaders(response.rawHeaders, newmeta(url));\n\n\tconst maybeHeaders = responseHeaders[\"set-cookie\"] || [];\n\tfor (const cookie in maybeHeaders) {\n\t\tif (client)\n\t\t\tclient.postMessage({\n\t\t\t\tscramjet$type: \"cookie\",\n\t\t\t\tcookie,\n\t\t\t\turl: url.href,\n\t\t\t} as MessageW2C);\n\t}\n\n\tawait cookieStore.setCookies(\n\t\tmaybeHeaders instanceof Array ? maybeHeaders : [maybeHeaders],\n\t\turl\n\t);\n\n\tfor (const header in responseHeaders) {\n\t\t// flatten everything past here\n\t\tif (Array.isArray(responseHeaders[header]))\n\t\t\tresponseHeaders[header] = responseHeaders[header][0];\n\t}\n\n\tif (response.body) {\n\t\tresponseBody = await rewriteBody(\n\t\t\tresponse,\n\t\t\tnewmeta(url),\n\t\t\tdestination,\n\t\t\tworkertype,\n\t\t\tcookieStore\n\t\t);\n\t}\n\n\t// downloads\n\tif ([\"document\", \"iframe\"].includes(destination)) {\n\t\tconst header = responseHeaders[\"content-disposition\"];\n\n\t\t// validate header and test for filename\n\t\tif (!/\\s*?((inline|attachment);\\s*?)filename=/i.test(header)) {\n\t\t\t// if filename= wasn\"t specified then maybe the remote specified to download this as an attachment?\n\t\t\t// if it\"s invalid then we can still possibly test for the attachment/inline type\n\t\t\tconst type = /^\\s*?attachment/i.test(header) ? \"attachment\" : \"inline\";\n\n\t\t\t// set the filename\n\t\t\tconst [filename] = new URL(response.finalURL).pathname\n\t\t\t\t.split(\"/\")\n\t\t\t\t.slice(-1);\n\n\t\t\tresponseHeaders[\"content-disposition\"] =\n\t\t\t\t`${type}; filename=${JSON.stringify(filename)}`;\n\t\t}\n\t}\n\tif (responseHeaders[\"accept\"] === \"text/event-stream\") {\n\t\tresponseHeaders[\"content-type\"] = \"text/event-stream\";\n\t}\n\n\t// scramjet runtime can use features that permissions-policy blocks\n\tdelete responseHeaders[\"permissions-policy\"];\n\n\tif (\n\t\tcrossOriginIsolated &&\n\t\t[\n\t\t\t\"document\",\n\t\t\t\"iframe\",\n\t\t\t\"worker\",\n\t\t\t\"sharedworker\",\n\t\t\t\"style\",\n\t\t\t\"script\",\n\t\t].includes(destination)\n\t) {\n\t\tresponseHeaders[\"Cross-Origin-Embedder-Policy\"] = \"require-corp\";\n\t\tresponseHeaders[\"Cross-Origin-Opener-Policy\"] = \"same-origin\";\n\t}\n\n\tconst ev = new ScramjetHandleResponseEvent(\"handleResponse\");\n\tev.responseBody = responseBody;\n\tev.responseHeaders = responseHeaders;\n\tev.status = response.status;\n\tev.statusText = response.statusText;\n\tev.destination = destination;\n\tev.url = url;\n\tev.rawResponse = response;\n\tev.client = client;\n\tswtarget.dispatchEvent(ev);\n\n\treturn new Response(ev.responseBody, {\n\t\theaders: ev.responseHeaders as HeadersInit,\n\t\tstatus: ev.status,\n\t\tstatusText: ev.statusText,\n\t});\n}\n\nasync function rewriteBody(\n\tresponse: Response,\n\tmeta: URLMeta,\n\tdestination: RequestDestination,\n\tworkertype: string,\n\tcookieStore: CookieStore\n): Promise<BodyType> {\n\tswitch (destination) {\n\t\tcase \"iframe\":\n\t\tcase \"document\":\n\t\t\tif (response.headers.get(\"content-type\")?.startsWith(\"text/html\")) {\n\t\t\t\treturn rewriteHtml(await response.text(), cookieStore, meta, true);\n\t\t\t} else {\n\t\t\t\treturn response.body;\n\t\t\t}\n\t\tcase \"script\":\n\t\t\treturn rewriteJs(await response.arrayBuffer(), response.url, meta);\n\t\tcase \"style\":\n\t\t\treturn rewriteCss(await response.text(), meta);\n\t\tcase \"sharedworker\":\n\t\tcase \"worker\":\n\t\t\treturn rewriteWorkers(\n\t\t\t\tawait response.arrayBuffer(),\n\t\t\t\tworkertype,\n\t\t\t\tresponse.url,\n\t\t\t\tmeta\n\t\t\t);\n\t\tdefault:\n\t\t\treturn response.body;\n\t}\n}\n\ntype BodyType = string | ArrayBuffer | Blob | ReadableStream<any>;\n\nexport class ScramjetHandleResponseEvent extends Event {\n\tpublic responseHeaders: Record<string, string>;\n\tpublic responseBody: BodyType;\n\tpublic status: number;\n\tpublic statusText: string;\n\tpublic destination: string;\n\tpublic url: URL;\n\tpublic rawResponse: BareResponseFetch;\n\tpublic client: Client;\n}\n\nexport class ScramjetRequestEvent extends Event {\n\tpublic url: URL;\n\tpublic destination: string;\n\tpublic client: Client;\n\tpublic method: string;\n\tpublic body: BodyType;\n\tpublic requestHeaders: Record<string, string>;\n\tpublic response?: BareResponseFetch;\n}\n","import { $scramjet } from \"../scramjet\";\n\nexport function errorTemplate(trace: string, fetchedURL: string) {\n\t// turn script into a data URI so we don\"t have to escape any HTML values\n\tconst script = `\n errorTrace.value = ${JSON.stringify(trace)};\n fetchedURL.textContent = ${JSON.stringify(fetchedURL)};\n for (const node of document.querySelectorAll(\"#hostname\")) node.textContent = ${JSON.stringify(location.hostname)};\n reload.addEventListener(\"click\", () => location.reload());\n version.textContent = ${JSON.stringify($scramjet.version.version)};\n build.textContent = ${JSON.stringify($scramjet.version.build)};\n `;\n\n\treturn `<!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <title>Scramjet</title>\n <style>\n :root {\n --deep: #080602;\n --shallow: #181412;\n --beach: #f1e8e1;\n --shore: #b1a8a1;\n --accent: #ffa938;\n --font-sans: -apple-system, system-ui, BlinkMacSystemFont, sans-serif;\n --font-monospace: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n }\n\n *:not(div,p,span,ul,li,i,span) {\n background-color: var(--deep);\n color: var(--beach);\n font-family: var(--font-sans);\n }\n\n textarea,\n button {\n background-color: var(--shallow);\n border-radius: 0.6em;\n padding: 0.6em;\n border: none;\n appearance: none;\n font-family: var(--font-sans);\n color: var(--beach);\n }\n\n button.primary {\n background-color: var(--accent);\n color: var(--deep);\n font-weight: bold;\n }\n\n textarea {\n resize: none;\n height: 20em;\n text-align: left;\n font-family: var(--font-monospace);\n }\n\n body {\n width: 100vw;\n height: 100vh;\n justify-content: center;\n align-items: center;\n }\n\n body,\n html,\n #inner {\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: 0.5em;\n overflow: hidden;\n }\n\n #inner {\n z-index: 100;\n }\n\n #cover {\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: color-mix(in srgb, var(--deep) 70%, transparent);\n z-index: 99;\n }\n\n #info {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 1em;\n }\n\n #version-wrapper {\n width: 100%;\n text-align: center;\n position: absolute;\n bottom: 0.2rem;\n font-size: 0.8rem;\n color: var(--shore)!important;\n i {\n background-color: color-mix(in srgb, var(--deep), transparent 50%);\n border-radius: 9999px;\n padding: 0.2em 0.5em;\n }\n z-index: 101;\n }\n </style>\n </head>\n <body>\n <div id=\"cover\"></div>\n <div id=\"inner\">\n <h1 id=\"errorTitle\">Uh oh!</h1>\n <p>There was an error loading <b id=\"fetchedURL\"></b></p>\n <!-- <p id=\"errorMessage\">Internal Server Error</p> -->\n\n <div id=\"info\">\n <textarea id=\"errorTrace\" cols=\"40\" rows=\"10\" readonly>\n </textarea>\n <div id=\"troubleshooting\">\n <p>Try:</p>\n <ul>\n <li>Checking your internet connection</li>\n <li>Verifying you entered the correct address</li>\n <li>Clearing the site data</li>\n <li>Contacting <b id=\"hostname\"></b>'s administrator</li>\n <li>Verify the server isn't censored</li>\n </ul>\n <p>If you're the administrator of <b id=\"hostname\"></b>, try:</p>\n <ul>\n <li>Restarting your server</li>\n <li>Updating Scramjet</li>\n <li>Troubleshooting the error on the <a href=\"https://github.com/MercuryWorkshop/scramjet\" target=\"_blank\">GitHub repository</a></li>\n </ul>\n </div>\n </div>\n <br>\n <button id=\"reload\" class=\"primary\">Reload</button>\n </div>\n <p id=\"version-wrapper\"><i>Scramjet v<span id=\"version\"></span> (build <span id=\"build\"></span>)</i></p>\n <script src=\"${\"data:application/javascript,\" + encodeURIComponent(script)}\"></script>\n </body>\n </html>\n `;\n}\n\nexport function renderError(err: unknown, fetchedURL: string) {\n\tconst headers = {\n\t\t\"content-type\": \"text/html\",\n\t};\n\tif (crossOriginIsolated) {\n\t\theaders[\"Cross-Origin-Embedder-Policy\"] = \"require-corp\";\n\t}\n\n\treturn new Response(errorTemplate(String(err), fetchedURL), {\n\t\tstatus: 500,\n\t\theaders: headers,\n\t});\n}\n","import { FakeServiceWorker } from \"./fakesw\";\nimport { swfetch } from \"./fetch\";\nimport type BareClient from \"@mercuryworkshop/bare-mux\";\nimport { ScramjetConfig } from \"../types\";\nimport { $scramjet, loadCodecs } from \"../scramjet\";\n\nexport class ScramjetServiceWorker extends EventTarget {\n\tclient: BareClient;\n\tconfig: ScramjetConfig;\n\n\tsyncPool: Record<number, (val?: any) => void> = {};\n\tsynctoken = 0;\n\n\tcookieStore = new $scramjet.shared.CookieStore();\n\n\tserviceWorkers: FakeServiceWorker[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.client = new $scramjet.shared.util.BareClient();\n\n\t\tconst db = indexedDB.open(\"$scramjet\", 1);\n\n\t\tdb.onsuccess = () => {\n\t\t\tconst res = db.result;\n\t\t\tconst tx = res.transaction(\"cookies\", \"readonly\");\n\t\t\tconst store = tx.objectStore(\"cookies\");\n\t\t\tconst cookies = store.get(\"cookies\");\n\n\t\t\tcookies.onsuccess = () => {\n\t\t\t\tif (cookies.result) {\n\t\t\t\t\tthis.cookieStore.load(cookies.result);\n\t\t\t\t\tdbg.log(\"Loaded cookies from IDB!\");\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\taddEventListener(\"message\", async ({ data }: { data: MessageC2W }) => {\n\t\t\tif (!(\"scramjet$type\" in data)) return;\n\n\t\t\tif (data.scramjet$type === \"registerServiceWorker\") {\n\t\t\t\tthis.serviceWorkers.push(new FakeServiceWorker(data.port, data.origin));\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (data.scramjet$type === \"cookie\") {\n\t\t\t\tthis.cookieStore.setCookies([data.cookie], new URL(data.url));\n\t\t\t\tconst res = db.result;\n\t\t\t\tconst tx = res.transaction(\"cookies\", \"readwrite\");\n\t\t\t\tconst store = tx.objectStore(\"cookies\");\n\t\t\t\tstore.put(JSON.parse(this.cookieStore.dump()), \"cookies\");\n\t\t\t}\n\t\t});\n\t}\n\n\tasync loadConfig() {\n\t\tif (this.config) return;\n\n\t\tconst request = indexedDB.open(\"$scramjet\", 1);\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\trequest.onsuccess = async () => {\n\t\t\t\tconst db = request.result;\n\t\t\t\tconst tx = db.transaction(\"config\", \"readonly\");\n\t\t\t\tconst store = tx.objectStore(\"config\");\n\t\t\t\tconst config = store.get(\"config\");\n\n\t\t\t\tconfig.onsuccess = () => {\n\t\t\t\t\tthis.config = config.result;\n\t\t\t\t\t$scramjet.config = config.result;\n\n\t\t\t\t\tloadCodecs();\n\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t\tconfig.onerror = () => reject(config.error);\n\t\t\t};\n\n\t\t\trequest.onerror = () => reject(request.error);\n\t\t});\n\t}\n\n\troute({ request }: FetchEvent) {\n\t\tif (request.url.startsWith(location.origin + this.config.prefix))\n\t\t\treturn true;\n\t\telse return false;\n\t}\n\n\tasync fetch({ request, clientId }: FetchEvent) {\n\t\tconst client = await self.clients.get(clientId);\n\n\t\treturn swfetch.call(this, request, client);\n\t}\n}\n\n// @ts-ignore\nself.ScramjetServiceWorker = ScramjetServiceWorker;\n\ntype RegisterServiceWorkerMessage = {\n\tscramjet$type: \"registerServiceWorker\";\n\tport: MessagePort;\n\torigin: string;\n};\n\ntype CookieMessage = {\n\tscramjet$type: \"cookie\";\n\tcookie: string;\n\turl: string;\n};\n\ntype MessageCommon = {\n\tscramjet$type: string;\n\tscramjet$token: number;\n};\n\ntype MessageTypeC2W = RegisterServiceWorkerMessage | CookieMessage;\ntype MessageTypeW2C = CookieMessage;\n\n// c2w: client to (service) worker\nexport type MessageC2W = MessageCommon & MessageTypeC2W;\nexport type MessageW2C = MessageCommon & MessageTypeW2C;\n"],"names":["severity","message","args","old","Error","_","stack","fmt","i","Math","FakeServiceWorker","self","COMMITHASH","VERSION","flagEnabled","flag","url","value","$scramjet","regex","partialflags","RegExp","nativeFunction","Function","BareClient","ScramjetHeaders","BareMuxConnection","rewriteUrl","unrewriteUrl","rewriteBlob","unrewriteBlob","rewriteCss","unrewriteCss","rewriteHtml","unrewriteHtml","rewriteSrcset","rewriteJs","rewriteHeaders","rewriteWorkers","htmlRules","CookieStore","newmeta","swfetch","request","client","urlParam","URLSearchParams","URL","Response","requesturl","workertype","body","dataurl","response","fetch","rewriteBody","headers","Object","crossOriginIsolated","activeWorker","w","r","key","clientURL","cookies","ev","ScramjetRequestEvent","handleResponse","err","console","undefined","renderError","fetchedURL","errorTemplate","trace","script","JSON","location","encodeURIComponent","String","destination","cookieStore","swtarget","responseBody","responseHeaders","maybeHeaders","cookie","header","Array","type","filename","ScramjetHandleResponseEvent","meta","Event","ScramjetServiceWorker","EventTarget","db","indexedDB","store","tx","res","dbg","addEventListener","data","Promise","resolve","reject","config","clientId"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { resolve, dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+
6
+ const scramjetPath = resolve(__dirname, "dist");
7
+
8
+ export { scramjetPath };
@@ -1,13 +0,0 @@
1
- self.$meteor_config = {
2
- prefix: "/~/meteor/",
3
- codec: self.$meteor_codecs.xor,
4
- debug: false,
5
- plugins: [],
6
- files: {
7
- client: "/meteor/meteor.client.js",
8
- worker: "/meteor/meteor.worker.js",
9
- bundle: "/meteor/meteor.bundle.js",
10
- codecs: "/meteor/meteor.codecs.js",
11
- config: "/meteor/meteor.config.js",
12
- },
13
- };
@@ -1,9 +0,0 @@
1
- self.__scramjet$config = {
2
- prefix: "/~/sj/",
3
- codec: self.__scramjet$codecs.plain,
4
- config: "/scramjet/scramjet.config.js",
5
- bundle: "/scramjet/scramjet.bundle.js",
6
- worker: "/scramjet/scramjet.worker.js",
7
- client: "/scramjet/scramjet.client.js",
8
- codecs: "/scramjet/scramjet.codecs.js",
9
- };