roxxie-proxy-u-prod 0.3.0 → 0.4.0
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.
- package/README.md +6 -6
- package/dist/assets/{index-C8me8aPT.js → index-Ba7edhay.js} +166 -159
- package/dist/assets/{inject-B58ufVkG.js → inject-DpzNxvgT.js} +1 -1
- package/embed.js +1 -1
- package/examples/single-page.html +2 -2
- package/package.json +1 -1
- package/runtime/controller.sw.js +2 -273
- package/runtime/index.html +3 -3
- package/scripts/verify.mjs +2 -2
- package/source/packages/chrome/public/controller.sw.js +2 -273
- package/source/packages/chrome/src/components/StartScreen.tsx +189 -0
- package/source/packages/chrome/src/index.ts +7 -0
- package/source/packages/chrome/src/pages/SettingsPage.tsx +0 -11
- package/source/packages/chrome/src/proxy/sw-routing.test.ts +80 -0
- package/source/packages/scramjet/packages/controller/src/sw.ts +86 -13
- package/source/packages/scramjet/packages/core/dist/scramjet.js +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet.mjs +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs +1 -1
- package/standalone.html +2 -2
- package/source/packages/chrome/src/pages/AdvancedSettings.tsx +0 -225
package/embed.js
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
<div id="roxxie-browser"></div>
|
|
19
19
|
<script
|
|
20
20
|
defer
|
|
21
|
-
src="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.
|
|
22
|
-
integrity="sha384-
|
|
21
|
+
src="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.4.0/embed.js"
|
|
22
|
+
integrity="sha384-XUQcRrXesM9oedkzCx9DaWtFBih+4ITK0m9iiFxTmATyor09TJSzDKSDHcyLI0F1"
|
|
23
23
|
crossorigin="anonymous"
|
|
24
24
|
data-roxxie-target="#roxxie-browser"
|
|
25
25
|
></script>
|
package/package.json
CHANGED
package/runtime/controller.sw.js
CHANGED
|
@@ -1,273 +1,2 @@
|
|
|
1
|
-
var $scramjetController;
|
|
2
|
-
|
|
3
|
-
var e = {
|
|
4
|
-
805(e, t, r) {
|
|
5
|
-
r.d(t, { C: () => o });
|
|
6
|
-
class o {
|
|
7
|
-
methods;
|
|
8
|
-
id;
|
|
9
|
-
sendRaw;
|
|
10
|
-
counter = 0;
|
|
11
|
-
promiseCallbacks = new Map();
|
|
12
|
-
constructor(e, t, r) {
|
|
13
|
-
((this.methods = e), (this.id = t), (this.sendRaw = r));
|
|
14
|
-
}
|
|
15
|
-
recieve(e) {
|
|
16
|
-
if (null == e || "object" != typeof e) return;
|
|
17
|
-
let t = e[this.id];
|
|
18
|
-
if (null == t || "object" != typeof t) return;
|
|
19
|
-
let r = t.$type;
|
|
20
|
-
if ("response" === r) {
|
|
21
|
-
let e = t.$token,
|
|
22
|
-
r = t.$data,
|
|
23
|
-
o = t.$error,
|
|
24
|
-
s = this.promiseCallbacks.get(e);
|
|
25
|
-
if (!s) return;
|
|
26
|
-
(this.promiseCallbacks.delete(e),
|
|
27
|
-
void 0 !== o ? s.reject(Error(o)) : s.resolve(r));
|
|
28
|
-
} else if ("request" === r) {
|
|
29
|
-
let e = t.$method,
|
|
30
|
-
r = t.$args;
|
|
31
|
-
this.methods[e](r)
|
|
32
|
-
.then((e) => {
|
|
33
|
-
this.sendRaw(
|
|
34
|
-
{
|
|
35
|
-
[this.id]: {
|
|
36
|
-
$type: "response",
|
|
37
|
-
$token: t.$token,
|
|
38
|
-
$data: e?.[0],
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
e?.[1]
|
|
42
|
-
);
|
|
43
|
-
})
|
|
44
|
-
.catch((e) => {
|
|
45
|
-
(console.error(e),
|
|
46
|
-
this.sendRaw(
|
|
47
|
-
{
|
|
48
|
-
[this.id]: {
|
|
49
|
-
$type: "response",
|
|
50
|
-
$token: t.$token,
|
|
51
|
-
$error: e?.toString() || "Unknown error",
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
[]
|
|
55
|
-
));
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
call(e, t, r = []) {
|
|
60
|
-
let o = this.counter++;
|
|
61
|
-
return new Promise((s, i) => {
|
|
62
|
-
(this.promiseCallbacks.set(o, { resolve: s, reject: i }),
|
|
63
|
-
this.sendRaw(
|
|
64
|
-
{
|
|
65
|
-
[this.id]: {
|
|
66
|
-
$type: "request",
|
|
67
|
-
$method: e,
|
|
68
|
-
$args: t,
|
|
69
|
-
$token: o,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
r
|
|
73
|
-
));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
t = {};
|
|
80
|
-
function r(o) {
|
|
81
|
-
var s = t[o];
|
|
82
|
-
if (void 0 !== s) return s.exports;
|
|
83
|
-
var i = (t[o] = { exports: {} });
|
|
84
|
-
return (e[o](i, i.exports, r), i.exports);
|
|
85
|
-
}
|
|
86
|
-
((r.d = (e, t) => {
|
|
87
|
-
for (var o in t)
|
|
88
|
-
r.o(t, o) &&
|
|
89
|
-
!r.o(e, o) &&
|
|
90
|
-
Object.defineProperty(e, o, { enumerable: !0, get: t[o] });
|
|
91
|
-
}),
|
|
92
|
-
(r.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)),
|
|
93
|
-
(r.r = (e) => {
|
|
94
|
-
("undefined" != typeof Symbol &&
|
|
95
|
-
Symbol.toStringTag &&
|
|
96
|
-
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
|
97
|
-
Object.defineProperty(e, "__esModule", { value: !0 }));
|
|
98
|
-
}));
|
|
99
|
-
var o = {};
|
|
100
|
-
((() => {
|
|
101
|
-
(r.r(o), r.d(o, { route: () => a, shouldRoute: () => n }));
|
|
102
|
-
var e = r(805);
|
|
103
|
-
let t = {};
|
|
104
|
-
addEventListener("message", (e) => {
|
|
105
|
-
if (e.data && "object" == typeof e.data) {
|
|
106
|
-
if (
|
|
107
|
-
e.data.$sw$setCookieDone &&
|
|
108
|
-
"object" == typeof e.data.$sw$setCookieDone
|
|
109
|
-
) {
|
|
110
|
-
let r = e.data.$sw$setCookieDone,
|
|
111
|
-
o = t[r.id];
|
|
112
|
-
o && (o(), delete t[r.id]);
|
|
113
|
-
}
|
|
114
|
-
if (
|
|
115
|
-
e.data.$sw$initRemoteTransport &&
|
|
116
|
-
"object" == typeof e.data.$sw$initRemoteTransport
|
|
117
|
-
) {
|
|
118
|
-
let { port: t, prefix: r } = e.data.$sw$initRemoteTransport,
|
|
119
|
-
o = i.find((e) => new URL(r).pathname.startsWith(e.prefix));
|
|
120
|
-
if (!o)
|
|
121
|
-
return void console.error(
|
|
122
|
-
"No relevant controller found for transport init"
|
|
123
|
-
);
|
|
124
|
-
o.rpc.call("initRemoteTransport", t, [t]);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
class s {
|
|
129
|
-
prefix;
|
|
130
|
-
id;
|
|
131
|
-
rpc;
|
|
132
|
-
constructor(r, o, s) {
|
|
133
|
-
((this.prefix = r),
|
|
134
|
-
(this.id = o),
|
|
135
|
-
(this.rpc = new e.C(
|
|
136
|
-
{
|
|
137
|
-
sendSetCookie: async ({ cookies: e, options: r }) => {
|
|
138
|
-
let o = await self.clients.matchAll(),
|
|
139
|
-
s = [],
|
|
140
|
-
i = [],
|
|
141
|
-
n =
|
|
142
|
-
r?.destination === "document" ||
|
|
143
|
-
r?.destination === "iframe";
|
|
144
|
-
for (let a of o) {
|
|
145
|
-
let o = Math.random().toString(36).substring(2, 10);
|
|
146
|
-
(s.push(o),
|
|
147
|
-
a.postMessage({
|
|
148
|
-
$controller$setCookie: { cookies: e, options: r, id: o },
|
|
149
|
-
}),
|
|
150
|
-
n ||
|
|
151
|
-
i.push(
|
|
152
|
-
new Promise((e) => {
|
|
153
|
-
t[o] = () => e(o);
|
|
154
|
-
})
|
|
155
|
-
));
|
|
156
|
-
}
|
|
157
|
-
if (i.length > 0) {
|
|
158
|
-
let r,
|
|
159
|
-
n = !1,
|
|
160
|
-
a = new Promise((i) => {
|
|
161
|
-
r = setTimeout(() => {
|
|
162
|
-
if (!n) {
|
|
163
|
-
let r = s.filter((e) => void 0 !== t[e]);
|
|
164
|
-
console.error(
|
|
165
|
-
`timed out waiting for set cookie response (deadlock?): cookies=${e.length} clients=${o.length} pending=${r.length}/${s.length} clientUrls=${o.map((e) => e.url).join(",")}`
|
|
166
|
-
);
|
|
167
|
-
}
|
|
168
|
-
i();
|
|
169
|
-
}, 1e3);
|
|
170
|
-
});
|
|
171
|
-
try {
|
|
172
|
-
await Promise.race([
|
|
173
|
-
a,
|
|
174
|
-
Promise.any(i)
|
|
175
|
-
.then(() => {
|
|
176
|
-
n = !0;
|
|
177
|
-
})
|
|
178
|
-
.catch(() => {}),
|
|
179
|
-
]);
|
|
180
|
-
} finally {
|
|
181
|
-
for (let e of (void 0 !== r && clearTimeout(r), s))
|
|
182
|
-
delete t[e];
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
"tabchannel-" + o,
|
|
188
|
-
(e, t) => {
|
|
189
|
-
s.postMessage(e, t);
|
|
190
|
-
}
|
|
191
|
-
)),
|
|
192
|
-
(s.onmessage = (e) => {
|
|
193
|
-
this.rpc.recieve(e.data);
|
|
194
|
-
}),
|
|
195
|
-
(s.onmessageerror = console.error),
|
|
196
|
-
this.rpc.call("ready", void 0));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
let i = [];
|
|
200
|
-
function n(e) {
|
|
201
|
-
let t = new URL(e.request.url);
|
|
202
|
-
return void 0 !== i.find((e) => t.pathname.startsWith(e.prefix));
|
|
203
|
-
}
|
|
204
|
-
async function a(e) {
|
|
205
|
-
try {
|
|
206
|
-
let t = new URL(e.request.url),
|
|
207
|
-
r = i.find((e) => t.pathname.startsWith(e.prefix)),
|
|
208
|
-
o = await clients.get(e.clientId),
|
|
209
|
-
s = [...e.request.headers],
|
|
210
|
-
n = await r.rpc.call(
|
|
211
|
-
"request",
|
|
212
|
-
{
|
|
213
|
-
rawUrl: e.request.url,
|
|
214
|
-
rawReferrer: e.request.referrer,
|
|
215
|
-
destination: e.request.destination,
|
|
216
|
-
mode: e.request.mode,
|
|
217
|
-
referrer: e.request.referrer,
|
|
218
|
-
method: e.request.method,
|
|
219
|
-
body: e.request.body,
|
|
220
|
-
cache: e.request.cache,
|
|
221
|
-
forceCrossOriginIsolated: !1,
|
|
222
|
-
initialHeaders: s,
|
|
223
|
-
rawClientUrl: o ? o.url : void 0,
|
|
224
|
-
clientId: e.clientId || e.resultingClientId,
|
|
225
|
-
},
|
|
226
|
-
e.request.body instanceof ReadableStream ||
|
|
227
|
-
e.request.body instanceof ArrayBuffer
|
|
228
|
-
? [e.request.body]
|
|
229
|
-
: void 0
|
|
230
|
-
);
|
|
231
|
-
return new Response(n.body, {
|
|
232
|
-
status: n.status,
|
|
233
|
-
statusText: n.statusText,
|
|
234
|
-
headers: n.headers,
|
|
235
|
-
});
|
|
236
|
-
} catch (e) {
|
|
237
|
-
return (
|
|
238
|
-
console.error("Service Worker error:", e),
|
|
239
|
-
new Response("Internal Service Worker Error: " + e.message, {
|
|
240
|
-
status: 500,
|
|
241
|
-
})
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
(addEventListener("message", (e) => {
|
|
246
|
-
if (
|
|
247
|
-
!e.data ||
|
|
248
|
-
"object" != typeof e.data ||
|
|
249
|
-
!e.data.$controller$init ||
|
|
250
|
-
"object" != typeof e.data.$controller$init
|
|
251
|
-
)
|
|
252
|
-
return;
|
|
253
|
-
let t = e.data.$controller$init,
|
|
254
|
-
r = i.findIndex((e) => e.id === t.id);
|
|
255
|
-
(-1 !== r && i.splice(r, 1), i.push(new s(t.prefix, t.id, e.ports[0])));
|
|
256
|
-
}),
|
|
257
|
-
addEventListener("install", () => {
|
|
258
|
-
self.skipWaiting();
|
|
259
|
-
}),
|
|
260
|
-
addEventListener("activate", (e) => {
|
|
261
|
-
e.waitUntil(clients.claim());
|
|
262
|
-
}),
|
|
263
|
-
setTimeout(async () => {
|
|
264
|
-
for (let e of (console.log(
|
|
265
|
-
"service worker activated, notifying clients to revive"
|
|
266
|
-
),
|
|
267
|
-
await clients.matchAll()))
|
|
268
|
-
e.postMessage({ $controller$swrevive: {} });
|
|
269
|
-
}, 100));
|
|
270
|
-
})(),
|
|
271
|
-
($scramjetController = o));
|
|
272
|
-
})();
|
|
273
|
-
//# sourceMappingURL=controller.sw.js.map
|
|
1
|
+
var $scramjetController;(()=>{var e={470:function(e,t,r){r.d(t,{C:()=>o});class o{methods;id;sendRaw;counter=0;promiseCallbacks=new Map;constructor(e,t,r){this.methods=e,this.id=t,this.sendRaw=r}recieve(e){if(null==e||"object"!=typeof e)return;let t=e[this.id];if(null==t||"object"!=typeof t)return;let r=t.$type;if("response"===r){let e=t.$token,r=t.$data,o=t.$error,s=this.promiseCallbacks.get(e);if(!s)return;this.promiseCallbacks.delete(e),void 0!==o?s.reject(Error(o)):s.resolve(r)}else if("request"===r){let e=t.$method,r=t.$args;this.methods[e](r).then(e=>{this.sendRaw({[this.id]:{$type:"response",$token:t.$token,$data:e?.[0]}},e?.[1])}).catch(e=>{console.error(e),this.sendRaw({[this.id]:{$type:"response",$token:t.$token,$error:e?.toString()||"Unknown error"}},[])})}}call(e,t,r=[]){let o=this.counter++;return new Promise((s,n)=>{this.promiseCallbacks.set(o,{resolve:s,reject:n}),this.sendRaw({[this.id]:{$type:"request",$method:e,$args:t,$token:o}},r)})}}}},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=(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=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{r.r(o),r.d(o,{route:()=>c,shouldRoute:()=>a});var e=r(470);let t={};addEventListener("message",e=>{if(e.data&&"object"==typeof e.data){if(e.data.$sw$setCookieDone&&"object"==typeof e.data.$sw$setCookieDone){let r=e.data.$sw$setCookieDone,o=t[r.id];o&&(o(),delete t[r.id])}if(e.data.$sw$initRemoteTransport&&"object"==typeof e.data.$sw$initRemoteTransport){let{port:t,prefix:r}=e.data.$sw$initRemoteTransport,o=n.find(e=>new URL(r).pathname.startsWith(e.prefix));if(!o)return void console.error("No relevant controller found for transport init");o.rpc.call("initRemoteTransport",t,[t])}}});class s{prefix;id;rpc;constructor(r,o,s){this.prefix=r,this.id=o,this.rpc=new e.C({sendSetCookie:async({cookies:e,options:r})=>{let o=await self.clients.matchAll(),s=[],n=[],i=r?.destination==="document"||r?.destination==="iframe";for(let a of o){let o=Math.random().toString(36).substring(2,10);s.push(o),a.postMessage({$controller$setCookie:{cookies:e,options:r,id:o}}),i||n.push(new Promise(e=>{t[o]=()=>e(o)}))}if(n.length>0){let r,i=!1,a=new Promise(n=>{r=setTimeout(()=>{if(!i){let r=s.filter(e=>void 0!==t[e]);console.error(`timed out waiting for set cookie response (deadlock?): cookies=${e.length} clients=${o.length} pending=${r.length}/${s.length} clientUrls=${o.map(e=>e.url).join(",")}`)}n()},1e3)});try{await Promise.race([a,Promise.any(n).then(()=>{i=!0}).catch(()=>{})])}finally{for(let e of(void 0!==r&&clearTimeout(r),s))delete t[e]}}}},"tabchannel-"+o,(e,t)=>{s.postMessage(e,t)}),s.onmessage=e=>{this.rpc.recieve(e.data)},s.onmessageerror=console.error,this.rpc.call("ready",void 0)}}let n=[],i=new Set;function a(e){let t=new URL(e.request.url);if(n.some(e=>t.pathname.startsWith(e.prefix)))return!0;try{let e=new URL(registration.scope);return t.origin===e.origin&&t.pathname.startsWith(e.pathname)}catch{return!1}}function l(){clients.matchAll().then(e=>{for(let t of e)t.postMessage({$controller$swrevive:{}})})}async function d(e){let t=()=>n.find(t=>e.startsWith(t.prefix)),r=t();if(r)return r;l();let o=Date.now()+1e4;for(;Date.now()<o;){await new Promise(e=>{let t=setTimeout(e,100),r=()=>{clearTimeout(t),i.delete(r),e()};i.add(r)});let e=t();if(e)return e}}async function c(e){try{let t=new URL(e.request.url),r=await d(t.pathname);if(!r)return new Response("Roxxie proxy controller is not attached to this page. Reload to reconnect.",{status:503,headers:{"content-type":"text/plain"}});let o=await clients.get(e.clientId),s=[...e.request.headers],n=await r.rpc.call("request",{rawUrl:e.request.url,rawReferrer:e.request.referrer,destination:e.request.destination,mode:e.request.mode,referrer:e.request.referrer,method:e.request.method,body:e.request.body,cache:e.request.cache,forceCrossOriginIsolated:!1,initialHeaders:s,rawClientUrl:o?o.url:void 0,clientId:e.clientId||e.resultingClientId},e.request.body instanceof ReadableStream||e.request.body instanceof ArrayBuffer?[e.request.body]:void 0);return new Response(n.body,{status:n.status,statusText:n.statusText,headers:n.headers})}catch(e){return console.error("Service Worker error:",e),new Response("Internal Service Worker Error: "+e.message,{status:500})}}addEventListener("message",e=>{if(!e.data||"object"!=typeof e.data||!e.data.$controller$init||"object"!=typeof e.data.$controller$init)return;let t=e.data.$controller$init,r=n.findIndex(e=>e.id===t.id);for(let o of(-1!==r&&n.splice(r,1),n.push(new s(t.prefix,t.id,e.ports[0])),[...i]))o()}),addEventListener("install",()=>{self.skipWaiting()}),addEventListener("activate",e=>{e.waitUntil(clients.claim())}),l(),setTimeout(()=>{l()},100)})(),$scramjetController=o})();
|
|
2
|
+
//# sourceMappingURL=controller.sw.js.map
|
package/runtime/index.html
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/png" sizes="any" href="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.
|
|
5
|
+
<link rel="icon" type="image/png" sizes="any" href="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.4.0/dist/favicon.png" />
|
|
6
6
|
<meta name="theme-color" content="#222230" />
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
8
|
<title>Roxxie Proxy U</title>
|
|
9
9
|
|
|
10
10
|
<!--ssr-head-->
|
|
11
|
-
<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.
|
|
12
|
-
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.
|
|
11
|
+
<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.4.0/dist/assets/index-Ba7edhay.js"></script>
|
|
12
|
+
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.4.0/dist/assets/index-EeRhLAof.css">
|
|
13
13
|
</head>
|
|
14
14
|
|
|
15
15
|
<body>
|
package/scripts/verify.mjs
CHANGED
|
@@ -118,8 +118,8 @@ if (
|
|
|
118
118
|
throw new Error("Start screen must remain flat and glow-free");
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
if (manifest.version !== "0.
|
|
122
|
-
throw new Error("This production release must be version 0.
|
|
121
|
+
if (manifest.version !== "0.4.0") {
|
|
122
|
+
throw new Error("This production release must be version 0.4.0");
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
const embedBytes = await readFile(join(packageRoot, "embed.js"));
|
|
@@ -1,273 +1,2 @@
|
|
|
1
|
-
var $scramjetController;
|
|
2
|
-
|
|
3
|
-
var e = {
|
|
4
|
-
805(e, t, r) {
|
|
5
|
-
r.d(t, { C: () => o });
|
|
6
|
-
class o {
|
|
7
|
-
methods;
|
|
8
|
-
id;
|
|
9
|
-
sendRaw;
|
|
10
|
-
counter = 0;
|
|
11
|
-
promiseCallbacks = new Map();
|
|
12
|
-
constructor(e, t, r) {
|
|
13
|
-
((this.methods = e), (this.id = t), (this.sendRaw = r));
|
|
14
|
-
}
|
|
15
|
-
recieve(e) {
|
|
16
|
-
if (null == e || "object" != typeof e) return;
|
|
17
|
-
let t = e[this.id];
|
|
18
|
-
if (null == t || "object" != typeof t) return;
|
|
19
|
-
let r = t.$type;
|
|
20
|
-
if ("response" === r) {
|
|
21
|
-
let e = t.$token,
|
|
22
|
-
r = t.$data,
|
|
23
|
-
o = t.$error,
|
|
24
|
-
s = this.promiseCallbacks.get(e);
|
|
25
|
-
if (!s) return;
|
|
26
|
-
(this.promiseCallbacks.delete(e),
|
|
27
|
-
void 0 !== o ? s.reject(Error(o)) : s.resolve(r));
|
|
28
|
-
} else if ("request" === r) {
|
|
29
|
-
let e = t.$method,
|
|
30
|
-
r = t.$args;
|
|
31
|
-
this.methods[e](r)
|
|
32
|
-
.then((e) => {
|
|
33
|
-
this.sendRaw(
|
|
34
|
-
{
|
|
35
|
-
[this.id]: {
|
|
36
|
-
$type: "response",
|
|
37
|
-
$token: t.$token,
|
|
38
|
-
$data: e?.[0],
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
e?.[1]
|
|
42
|
-
);
|
|
43
|
-
})
|
|
44
|
-
.catch((e) => {
|
|
45
|
-
(console.error(e),
|
|
46
|
-
this.sendRaw(
|
|
47
|
-
{
|
|
48
|
-
[this.id]: {
|
|
49
|
-
$type: "response",
|
|
50
|
-
$token: t.$token,
|
|
51
|
-
$error: e?.toString() || "Unknown error",
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
[]
|
|
55
|
-
));
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
call(e, t, r = []) {
|
|
60
|
-
let o = this.counter++;
|
|
61
|
-
return new Promise((s, i) => {
|
|
62
|
-
(this.promiseCallbacks.set(o, { resolve: s, reject: i }),
|
|
63
|
-
this.sendRaw(
|
|
64
|
-
{
|
|
65
|
-
[this.id]: {
|
|
66
|
-
$type: "request",
|
|
67
|
-
$method: e,
|
|
68
|
-
$args: t,
|
|
69
|
-
$token: o,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
r
|
|
73
|
-
));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
t = {};
|
|
80
|
-
function r(o) {
|
|
81
|
-
var s = t[o];
|
|
82
|
-
if (void 0 !== s) return s.exports;
|
|
83
|
-
var i = (t[o] = { exports: {} });
|
|
84
|
-
return (e[o](i, i.exports, r), i.exports);
|
|
85
|
-
}
|
|
86
|
-
((r.d = (e, t) => {
|
|
87
|
-
for (var o in t)
|
|
88
|
-
r.o(t, o) &&
|
|
89
|
-
!r.o(e, o) &&
|
|
90
|
-
Object.defineProperty(e, o, { enumerable: !0, get: t[o] });
|
|
91
|
-
}),
|
|
92
|
-
(r.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)),
|
|
93
|
-
(r.r = (e) => {
|
|
94
|
-
("undefined" != typeof Symbol &&
|
|
95
|
-
Symbol.toStringTag &&
|
|
96
|
-
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
|
97
|
-
Object.defineProperty(e, "__esModule", { value: !0 }));
|
|
98
|
-
}));
|
|
99
|
-
var o = {};
|
|
100
|
-
((() => {
|
|
101
|
-
(r.r(o), r.d(o, { route: () => a, shouldRoute: () => n }));
|
|
102
|
-
var e = r(805);
|
|
103
|
-
let t = {};
|
|
104
|
-
addEventListener("message", (e) => {
|
|
105
|
-
if (e.data && "object" == typeof e.data) {
|
|
106
|
-
if (
|
|
107
|
-
e.data.$sw$setCookieDone &&
|
|
108
|
-
"object" == typeof e.data.$sw$setCookieDone
|
|
109
|
-
) {
|
|
110
|
-
let r = e.data.$sw$setCookieDone,
|
|
111
|
-
o = t[r.id];
|
|
112
|
-
o && (o(), delete t[r.id]);
|
|
113
|
-
}
|
|
114
|
-
if (
|
|
115
|
-
e.data.$sw$initRemoteTransport &&
|
|
116
|
-
"object" == typeof e.data.$sw$initRemoteTransport
|
|
117
|
-
) {
|
|
118
|
-
let { port: t, prefix: r } = e.data.$sw$initRemoteTransport,
|
|
119
|
-
o = i.find((e) => new URL(r).pathname.startsWith(e.prefix));
|
|
120
|
-
if (!o)
|
|
121
|
-
return void console.error(
|
|
122
|
-
"No relevant controller found for transport init"
|
|
123
|
-
);
|
|
124
|
-
o.rpc.call("initRemoteTransport", t, [t]);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
class s {
|
|
129
|
-
prefix;
|
|
130
|
-
id;
|
|
131
|
-
rpc;
|
|
132
|
-
constructor(r, o, s) {
|
|
133
|
-
((this.prefix = r),
|
|
134
|
-
(this.id = o),
|
|
135
|
-
(this.rpc = new e.C(
|
|
136
|
-
{
|
|
137
|
-
sendSetCookie: async ({ cookies: e, options: r }) => {
|
|
138
|
-
let o = await self.clients.matchAll(),
|
|
139
|
-
s = [],
|
|
140
|
-
i = [],
|
|
141
|
-
n =
|
|
142
|
-
r?.destination === "document" ||
|
|
143
|
-
r?.destination === "iframe";
|
|
144
|
-
for (let a of o) {
|
|
145
|
-
let o = Math.random().toString(36).substring(2, 10);
|
|
146
|
-
(s.push(o),
|
|
147
|
-
a.postMessage({
|
|
148
|
-
$controller$setCookie: { cookies: e, options: r, id: o },
|
|
149
|
-
}),
|
|
150
|
-
n ||
|
|
151
|
-
i.push(
|
|
152
|
-
new Promise((e) => {
|
|
153
|
-
t[o] = () => e(o);
|
|
154
|
-
})
|
|
155
|
-
));
|
|
156
|
-
}
|
|
157
|
-
if (i.length > 0) {
|
|
158
|
-
let r,
|
|
159
|
-
n = !1,
|
|
160
|
-
a = new Promise((i) => {
|
|
161
|
-
r = setTimeout(() => {
|
|
162
|
-
if (!n) {
|
|
163
|
-
let r = s.filter((e) => void 0 !== t[e]);
|
|
164
|
-
console.error(
|
|
165
|
-
`timed out waiting for set cookie response (deadlock?): cookies=${e.length} clients=${o.length} pending=${r.length}/${s.length} clientUrls=${o.map((e) => e.url).join(",")}`
|
|
166
|
-
);
|
|
167
|
-
}
|
|
168
|
-
i();
|
|
169
|
-
}, 1e3);
|
|
170
|
-
});
|
|
171
|
-
try {
|
|
172
|
-
await Promise.race([
|
|
173
|
-
a,
|
|
174
|
-
Promise.any(i)
|
|
175
|
-
.then(() => {
|
|
176
|
-
n = !0;
|
|
177
|
-
})
|
|
178
|
-
.catch(() => {}),
|
|
179
|
-
]);
|
|
180
|
-
} finally {
|
|
181
|
-
for (let e of (void 0 !== r && clearTimeout(r), s))
|
|
182
|
-
delete t[e];
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
"tabchannel-" + o,
|
|
188
|
-
(e, t) => {
|
|
189
|
-
s.postMessage(e, t);
|
|
190
|
-
}
|
|
191
|
-
)),
|
|
192
|
-
(s.onmessage = (e) => {
|
|
193
|
-
this.rpc.recieve(e.data);
|
|
194
|
-
}),
|
|
195
|
-
(s.onmessageerror = console.error),
|
|
196
|
-
this.rpc.call("ready", void 0));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
let i = [];
|
|
200
|
-
function n(e) {
|
|
201
|
-
let t = new URL(e.request.url);
|
|
202
|
-
return void 0 !== i.find((e) => t.pathname.startsWith(e.prefix));
|
|
203
|
-
}
|
|
204
|
-
async function a(e) {
|
|
205
|
-
try {
|
|
206
|
-
let t = new URL(e.request.url),
|
|
207
|
-
r = i.find((e) => t.pathname.startsWith(e.prefix)),
|
|
208
|
-
o = await clients.get(e.clientId),
|
|
209
|
-
s = [...e.request.headers],
|
|
210
|
-
n = await r.rpc.call(
|
|
211
|
-
"request",
|
|
212
|
-
{
|
|
213
|
-
rawUrl: e.request.url,
|
|
214
|
-
rawReferrer: e.request.referrer,
|
|
215
|
-
destination: e.request.destination,
|
|
216
|
-
mode: e.request.mode,
|
|
217
|
-
referrer: e.request.referrer,
|
|
218
|
-
method: e.request.method,
|
|
219
|
-
body: e.request.body,
|
|
220
|
-
cache: e.request.cache,
|
|
221
|
-
forceCrossOriginIsolated: !1,
|
|
222
|
-
initialHeaders: s,
|
|
223
|
-
rawClientUrl: o ? o.url : void 0,
|
|
224
|
-
clientId: e.clientId || e.resultingClientId,
|
|
225
|
-
},
|
|
226
|
-
e.request.body instanceof ReadableStream ||
|
|
227
|
-
e.request.body instanceof ArrayBuffer
|
|
228
|
-
? [e.request.body]
|
|
229
|
-
: void 0
|
|
230
|
-
);
|
|
231
|
-
return new Response(n.body, {
|
|
232
|
-
status: n.status,
|
|
233
|
-
statusText: n.statusText,
|
|
234
|
-
headers: n.headers,
|
|
235
|
-
});
|
|
236
|
-
} catch (e) {
|
|
237
|
-
return (
|
|
238
|
-
console.error("Service Worker error:", e),
|
|
239
|
-
new Response("Internal Service Worker Error: " + e.message, {
|
|
240
|
-
status: 500,
|
|
241
|
-
})
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
(addEventListener("message", (e) => {
|
|
246
|
-
if (
|
|
247
|
-
!e.data ||
|
|
248
|
-
"object" != typeof e.data ||
|
|
249
|
-
!e.data.$controller$init ||
|
|
250
|
-
"object" != typeof e.data.$controller$init
|
|
251
|
-
)
|
|
252
|
-
return;
|
|
253
|
-
let t = e.data.$controller$init,
|
|
254
|
-
r = i.findIndex((e) => e.id === t.id);
|
|
255
|
-
(-1 !== r && i.splice(r, 1), i.push(new s(t.prefix, t.id, e.ports[0])));
|
|
256
|
-
}),
|
|
257
|
-
addEventListener("install", () => {
|
|
258
|
-
self.skipWaiting();
|
|
259
|
-
}),
|
|
260
|
-
addEventListener("activate", (e) => {
|
|
261
|
-
e.waitUntil(clients.claim());
|
|
262
|
-
}),
|
|
263
|
-
setTimeout(async () => {
|
|
264
|
-
for (let e of (console.log(
|
|
265
|
-
"service worker activated, notifying clients to revive"
|
|
266
|
-
),
|
|
267
|
-
await clients.matchAll()))
|
|
268
|
-
e.postMessage({ $controller$swrevive: {} });
|
|
269
|
-
}, 100));
|
|
270
|
-
})(),
|
|
271
|
-
($scramjetController = o));
|
|
272
|
-
})();
|
|
273
|
-
//# sourceMappingURL=controller.sw.js.map
|
|
1
|
+
var $scramjetController;(()=>{var e={470:function(e,t,r){r.d(t,{C:()=>o});class o{methods;id;sendRaw;counter=0;promiseCallbacks=new Map;constructor(e,t,r){this.methods=e,this.id=t,this.sendRaw=r}recieve(e){if(null==e||"object"!=typeof e)return;let t=e[this.id];if(null==t||"object"!=typeof t)return;let r=t.$type;if("response"===r){let e=t.$token,r=t.$data,o=t.$error,s=this.promiseCallbacks.get(e);if(!s)return;this.promiseCallbacks.delete(e),void 0!==o?s.reject(Error(o)):s.resolve(r)}else if("request"===r){let e=t.$method,r=t.$args;this.methods[e](r).then(e=>{this.sendRaw({[this.id]:{$type:"response",$token:t.$token,$data:e?.[0]}},e?.[1])}).catch(e=>{console.error(e),this.sendRaw({[this.id]:{$type:"response",$token:t.$token,$error:e?.toString()||"Unknown error"}},[])})}}call(e,t,r=[]){let o=this.counter++;return new Promise((s,n)=>{this.promiseCallbacks.set(o,{resolve:s,reject:n}),this.sendRaw({[this.id]:{$type:"request",$method:e,$args:t,$token:o}},r)})}}}},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=(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=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{r.r(o),r.d(o,{route:()=>c,shouldRoute:()=>a});var e=r(470);let t={};addEventListener("message",e=>{if(e.data&&"object"==typeof e.data){if(e.data.$sw$setCookieDone&&"object"==typeof e.data.$sw$setCookieDone){let r=e.data.$sw$setCookieDone,o=t[r.id];o&&(o(),delete t[r.id])}if(e.data.$sw$initRemoteTransport&&"object"==typeof e.data.$sw$initRemoteTransport){let{port:t,prefix:r}=e.data.$sw$initRemoteTransport,o=n.find(e=>new URL(r).pathname.startsWith(e.prefix));if(!o)return void console.error("No relevant controller found for transport init");o.rpc.call("initRemoteTransport",t,[t])}}});class s{prefix;id;rpc;constructor(r,o,s){this.prefix=r,this.id=o,this.rpc=new e.C({sendSetCookie:async({cookies:e,options:r})=>{let o=await self.clients.matchAll(),s=[],n=[],i=r?.destination==="document"||r?.destination==="iframe";for(let a of o){let o=Math.random().toString(36).substring(2,10);s.push(o),a.postMessage({$controller$setCookie:{cookies:e,options:r,id:o}}),i||n.push(new Promise(e=>{t[o]=()=>e(o)}))}if(n.length>0){let r,i=!1,a=new Promise(n=>{r=setTimeout(()=>{if(!i){let r=s.filter(e=>void 0!==t[e]);console.error(`timed out waiting for set cookie response (deadlock?): cookies=${e.length} clients=${o.length} pending=${r.length}/${s.length} clientUrls=${o.map(e=>e.url).join(",")}`)}n()},1e3)});try{await Promise.race([a,Promise.any(n).then(()=>{i=!0}).catch(()=>{})])}finally{for(let e of(void 0!==r&&clearTimeout(r),s))delete t[e]}}}},"tabchannel-"+o,(e,t)=>{s.postMessage(e,t)}),s.onmessage=e=>{this.rpc.recieve(e.data)},s.onmessageerror=console.error,this.rpc.call("ready",void 0)}}let n=[],i=new Set;function a(e){let t=new URL(e.request.url);if(n.some(e=>t.pathname.startsWith(e.prefix)))return!0;try{let e=new URL(registration.scope);return t.origin===e.origin&&t.pathname.startsWith(e.pathname)}catch{return!1}}function l(){clients.matchAll().then(e=>{for(let t of e)t.postMessage({$controller$swrevive:{}})})}async function d(e){let t=()=>n.find(t=>e.startsWith(t.prefix)),r=t();if(r)return r;l();let o=Date.now()+1e4;for(;Date.now()<o;){await new Promise(e=>{let t=setTimeout(e,100),r=()=>{clearTimeout(t),i.delete(r),e()};i.add(r)});let e=t();if(e)return e}}async function c(e){try{let t=new URL(e.request.url),r=await d(t.pathname);if(!r)return new Response("Roxxie proxy controller is not attached to this page. Reload to reconnect.",{status:503,headers:{"content-type":"text/plain"}});let o=await clients.get(e.clientId),s=[...e.request.headers],n=await r.rpc.call("request",{rawUrl:e.request.url,rawReferrer:e.request.referrer,destination:e.request.destination,mode:e.request.mode,referrer:e.request.referrer,method:e.request.method,body:e.request.body,cache:e.request.cache,forceCrossOriginIsolated:!1,initialHeaders:s,rawClientUrl:o?o.url:void 0,clientId:e.clientId||e.resultingClientId},e.request.body instanceof ReadableStream||e.request.body instanceof ArrayBuffer?[e.request.body]:void 0);return new Response(n.body,{status:n.status,statusText:n.statusText,headers:n.headers})}catch(e){return console.error("Service Worker error:",e),new Response("Internal Service Worker Error: "+e.message,{status:500})}}addEventListener("message",e=>{if(!e.data||"object"!=typeof e.data||!e.data.$controller$init||"object"!=typeof e.data.$controller$init)return;let t=e.data.$controller$init,r=n.findIndex(e=>e.id===t.id);for(let o of(-1!==r&&n.splice(r,1),n.push(new s(t.prefix,t.id,e.ports[0])),[...i]))o()}),addEventListener("install",()=>{self.skipWaiting()}),addEventListener("activate",e=>{e.waitUntil(clients.claim())}),l(),setTimeout(()=>{l()},100)})(),$scramjetController=o})();
|
|
2
|
+
//# sourceMappingURL=controller.sw.js.map
|