@mercuryworkshop/scramjet-controller 0.0.3 → 0.0.4

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.
@@ -1,416 +1,29 @@
1
- var $scramjetController;
2
- (() => { // webpackBootstrap
3
- var __webpack_modules__ = ({
4
- "./packages/scramjet/packages/rpc/index.ts":
5
- /*!*************************************************!*\
6
- !*** ./packages/scramjet/packages/rpc/index.ts ***!
7
- \*************************************************/
8
- (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
- __webpack_require__.r(__webpack_exports__);
10
- __webpack_require__.d(__webpack_exports__, {
11
- RpcHelper: () => (RpcHelper)
12
- });
13
- class RpcHelper {
14
- methods;
15
- id;
16
- sendRaw;
17
- counter = 0;
18
- promiseCallbacks = new Map();
19
- constructor(methods, id, sendRaw){
20
- this.methods = methods;
21
- this.id = id;
22
- this.sendRaw = sendRaw;
23
- }
24
- recieve(data) {
25
- if (data === undefined || data === null || typeof data !== "object") return;
26
- const dt = data[this.id];
27
- if (dt === undefined || dt === null || typeof dt !== "object") return;
28
- const type = dt.$type;
29
- if (type === "response") {
30
- const token = dt.$token;
31
- const data = dt.$data;
32
- const error = dt.$error;
33
- const cb = this.promiseCallbacks.get(token);
34
- if (!cb) return;
35
- this.promiseCallbacks.delete(token);
36
- if (error !== undefined) {
37
- cb.reject(new Error(error));
38
- } else {
39
- cb.resolve(data);
40
- }
41
- } else if (type === "request") {
42
- const method = dt.$method;
43
- const args = dt.$args;
44
- this.methods[method](args).then((r)=>{
45
- this.sendRaw({
46
- [this.id]: {
47
- $type: "response",
48
- $token: dt.$token,
49
- $data: r?.[0]
50
- }
51
- }, r?.[1]);
52
- }).catch((err)=>{
53
- console.error(err);
54
- this.sendRaw({
55
- [this.id]: {
56
- $type: "response",
57
- $token: dt.$token,
58
- $error: err?.toString() || "Unknown error"
59
- }
60
- }, []);
61
- });
62
- }
63
- }
64
- call(method, args, transfer = []) {
65
- let token = this.counter++;
66
- return new Promise((resolve, reject)=>{
67
- this.promiseCallbacks.set(token, {
68
- resolve,
69
- reject
70
- });
71
- this.sendRaw({
72
- [this.id]: {
73
- $type: "request",
74
- $method: method,
75
- $args: args,
76
- $token: token
77
- }
78
- }, transfer);
79
- });
80
- }
81
- }
82
-
83
-
84
- }),
85
-
86
- });
87
- /************************************************************************/
88
- // The module cache
89
- var __webpack_module_cache__ = {};
90
-
91
- // The require function
92
- function __webpack_require__(moduleId) {
93
-
94
- // Check if module is in cache
95
- var cachedModule = __webpack_module_cache__[moduleId];
96
- if (cachedModule !== undefined) {
97
- return cachedModule.exports;
98
- }
99
- // Create a new module (and put it into the cache)
100
- var module = (__webpack_module_cache__[moduleId] = {
101
- exports: {}
102
- });
103
- // Execute the module function
104
- __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
105
-
106
- // Return the exports of the module
107
- return module.exports;
108
-
109
- }
110
-
111
- /************************************************************************/
112
- // webpack/runtime/define_property_getters
113
- (() => {
114
- __webpack_require__.d = (exports, definition) => {
115
- for(var key in definition) {
116
- if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
117
- Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
118
- }
119
- }
120
- };
121
- })();
122
- // webpack/runtime/has_own_property
123
- (() => {
124
- __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
125
- })();
126
- // webpack/runtime/make_namespace_object
127
- (() => {
128
- // define __esModule on exports
129
- __webpack_require__.r = (exports) => {
130
- if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
131
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
132
- }
133
- Object.defineProperty(exports, '__esModule', { value: true });
134
- };
135
- })();
136
- /************************************************************************/
137
- var __webpack_exports__ = {};
138
- // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
139
- (() => {
140
-
141
- /*!************************************************************!*\
142
- !*** ./packages/scramjet/packages/controller/src/index.ts ***!
143
- \************************************************************/
144
- __webpack_require__.r(__webpack_exports__);
145
- __webpack_require__.d(__webpack_exports__, {
146
- Controller: () => (Controller),
147
- config: () => (config)
148
- });
149
- /* ESM import */var _mercuryworkshop_rpc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mercuryworkshop/rpc */ "./packages/scramjet/packages/rpc/index.ts");
150
-
151
- const cookieJar = new $scramjet.CookieJar();
152
- fetch("/scramjet/scramjet.wasm.wasm").then(async (resp)=>{
153
- $scramjet.setWasm(await resp.arrayBuffer());
154
- });
155
- const config = {
156
- prefix: "/~/sj/",
157
- virtualWasmPath: "scramjet.wasm.js",
158
- injectPath: "/controller/controller.inject.js",
159
- scramjetPath: "/scramjet/scramjet.js",
160
- wasmPath: "/scramjet/scramjet.wasm.wasm"
161
- };
162
- const cfg = {
163
- flags: {
164
- ...$scramjet.defaultConfig.flags,
165
- allowFailedIntercepts: true
166
- },
167
- maskedfiles: [
168
- "inject.js",
169
- "scramjet.wasm.js"
170
- ]
171
- };
172
- const frames = {};
173
- let wasmPayload = null;
174
- function makeId() {
175
- return Math.random().toString(36).substring(2, 10);
176
- }
177
- const codecEncode = (url)=>{
178
- if (!url) return url;
179
- return encodeURIComponent(url);
180
- };
181
- const codecDecode = (url)=>{
182
- if (!url) return url;
183
- return decodeURIComponent(url);
184
- };
185
- class Controller {
186
- init;
187
- id;
188
- prefix;
189
- frames = [];
190
- cookieJar = new $scramjet.CookieJar();
191
- rpc;
192
- ready;
193
- readyResolve;
194
- transport;
195
- methods = {
196
- ready: async ()=>{
197
- this.readyResolve();
198
- },
199
- request: async (data)=>{
200
- try {
201
- let path = new URL(data.rawUrl).pathname;
202
- const frame = this.frames.find((f)=>path.startsWith(f.prefix));
203
- if (!frame) throw new Error("No frame found for request");
204
- if (path === frame.prefix + config.virtualWasmPath) {
205
- if (!wasmPayload) {
206
- const resp = await fetch(config.wasmPath);
207
- const buf = await resp.arrayBuffer();
208
- const b64 = btoa(new Uint8Array(buf).reduce((data, byte)=>(data.push(String.fromCharCode(byte)), data), []).join(""));
209
- let payload = "";
210
- payload += "console.warn('WTF'); if ('document' in self && document.currentScript) { document.currentScript.remove(); }\n";
211
- payload += `self.WASM = '${b64}';`;
212
- wasmPayload = payload;
213
- }
214
- return [
215
- {
216
- body: wasmPayload,
217
- status: 200,
218
- statusText: "OK",
219
- headers: {
220
- "Content-Type": [
221
- "application/javascript"
222
- ]
223
- }
224
- },
225
- []
226
- ];
227
- }
228
- let sjheaders = $scramjet.ScramjetHeaders.fromRawHeaders(data.initialHeaders);
229
- const fetchresponse = await frame.fetchHandler.handleFetch({
230
- initialHeaders: sjheaders,
231
- rawClientUrl: data.rawClientUrl ? new URL(data.rawClientUrl) : undefined,
232
- rawUrl: new URL(data.rawUrl),
233
- destination: data.destination,
234
- method: data.method,
235
- mode: data.mode,
236
- referrer: data.referrer,
237
- body: data.body,
238
- cache: data.cache
239
- });
240
- return [
241
- {
242
- body: fetchresponse.body,
243
- status: fetchresponse.status,
244
- statusText: fetchresponse.statusText,
245
- headers: fetchresponse.headers.toRawHeaders()
246
- },
247
- fetchresponse.body instanceof ReadableStream || fetchresponse.body instanceof ArrayBuffer ? [
248
- fetchresponse.body
249
- ] : []
250
- ];
251
- } catch (e) {
252
- console.error("Error in controller request handler:", e);
253
- throw e;
254
- }
255
- },
256
- initRemoteTransport: async (port)=>{
257
- const rpc = new _mercuryworkshop_rpc__WEBPACK_IMPORTED_MODULE_0__.RpcHelper({
258
- request: async ({ remote, method, body, headers })=>{
259
- let response = await this.transport.request(new URL(remote), method, body, headers, undefined);
260
- return [
261
- response,
262
- [
263
- response.body
264
- ]
265
- ];
266
- },
267
- connect: async ({ url, protocols, requestHeaders, port })=>{
268
- let resolve;
269
- let promise = new Promise((res)=>resolve = res);
270
- const [send, close] = this.transport.connect(new URL(url), protocols, requestHeaders, (protocol)=>{
271
- resolve({
272
- result: "success",
273
- protocol: protocol
274
- });
275
- }, (data)=>{
276
- port.postMessage({
277
- type: "data",
278
- data: data
279
- }, data instanceof ArrayBuffer ? [
280
- data
281
- ] : []);
282
- }, (close, reason)=>{
283
- port.postMessage({
284
- type: "close",
285
- code: close,
286
- reason: reason
287
- });
288
- }, (error)=>{
289
- resolve({
290
- result: "failure",
291
- error: error
292
- });
293
- });
294
- port.onmessageerror = (ev)=>{
295
- console.error("Transport port messageerror (this should never happen!)", ev);
296
- };
297
- port.onmessage = ({ data })=>{
298
- if (data.type === "data") {
299
- send(data.data);
300
- } else if (data.type === "close") {
301
- close(data.code, data.reason);
302
- }
303
- };
304
- return [
305
- await promise,
306
- []
307
- ];
308
- }
309
- }, "transport", (data, transfer)=>port.postMessage(data, transfer));
310
- port.onmessageerror = (ev)=>{
311
- console.error("Transport port messageerror (this should never happen!)", ev);
312
- };
313
- port.onmessage = (e)=>{
314
- rpc.recieve(e.data);
315
- };
316
- rpc.call("ready", undefined, []);
317
- },
318
- sendSetCookie: async ({ url, cookie })=>{}
319
- };
320
- constructor(init){
321
- this.init = init;
322
- this.transport = init.transport;
323
- this.id = makeId();
324
- this.prefix = config.prefix + this.id + "/";
325
- this.ready = new Promise((resolve)=>{
326
- this.readyResolve = resolve;
327
- });
328
- let channel = new MessageChannel();
329
- this.rpc = new _mercuryworkshop_rpc__WEBPACK_IMPORTED_MODULE_0__.RpcHelper(this.methods, "tabchannel-" + this.id, (data, transfer)=>{
330
- channel.port1.postMessage(data, transfer);
331
- });
332
- channel.port1.addEventListener("message", (e)=>{
333
- this.rpc.recieve(e.data);
334
- });
335
- channel.port1.start();
336
- init.serviceworker.postMessage({
337
- $controller$init: {
338
- prefix: config.prefix + this.id,
339
- id: this.id
340
- }
341
- }, [
342
- channel.port2
343
- ]);
344
- }
345
- createFrame(element) {
346
- element ??= document.createElement("iframe");
347
- const frame = new Frame(this, element);
348
- this.frames.push(frame);
349
- return frame;
350
- }
351
- wait() {
352
- return this.ready;
353
- }
354
- }
355
- function yieldGetInjectScripts(cookieJar, config, sjconfig, prefix) {
356
- return function getInjectScripts(meta, handler, script) {
357
- return [
358
- script(config.scramjetPath),
359
- script(config.injectPath),
360
- script(prefix.href + config.virtualWasmPath),
361
- script("data:text/javascript;base64," + btoa(`
1
+ var $scramjetController;(()=>{var e={470:function(e,t,r){r.d(t,{C:()=>s});class s{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,s=t.$error,o=this.promiseCallbacks.get(e);if(!o)return;this.promiseCallbacks.delete(e),void 0!==s?o.reject(Error(s)):o.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 s=this.counter++;return new Promise((o,a)=>{this.promiseCallbacks.set(s,{resolve:o,reject:a}),this.sendRaw({[this.id]:{$type:"request",$method:e,$args:t,$token:s}},r)})}}}},t={};function r(s){var o=t[s];if(void 0!==o)return o.exports;var a=t[s]={exports:{}};return e[s](a,a.exports,r),a.exports}r.d=(e,t)=>{for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},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 s={};(()=>{r.r(s),r.d(s,{Controller:()=>d,config:()=>o});var e=r(470);let t=new $scramjet.CookieJar;fetch("/scramjet/scramjet.wasm.wasm").then(async e=>{$scramjet.setWasm(await e.arrayBuffer())});let o={prefix:"/~/sj/",virtualWasmPath:"scramjet.wasm.js",injectPath:"/controller/controller.inject.js",scramjetPath:"/scramjet/scramjet.js",wasmPath:"/scramjet/scramjet.wasm.wasm"},a={flags:{...$scramjet.defaultConfig.flags,allowFailedIntercepts:!0},maskedfiles:["inject.js","scramjet.wasm.js"]},n=null;function i(){return Math.random().toString(36).substring(2,10)}let c=e=>e?encodeURIComponent(e):e,l=e=>e?decodeURIComponent(e):e;class d{init;id;prefix;frames=[];cookieJar=new $scramjet.CookieJar;rpc;ready;readyResolve;transport;methods={ready:async()=>{this.readyResolve()},request:async e=>{try{let t=new URL(e.rawUrl).pathname,r=this.frames.find(e=>t.startsWith(e.prefix));if(!r)throw Error("No frame found for request");if(t===r.prefix+o.virtualWasmPath){if(!n){let e=await fetch(o.wasmPath),t=await e.arrayBuffer(),r=btoa(new Uint8Array(t).reduce((e,t)=>(e.push(String.fromCharCode(t)),e),[]).join("")),s="";s+=`console.warn('WTF'); if ('document' in self && document.currentScript) { document.currentScript.remove(); }
2
+ self.WASM = '${r}';`,n=s}return[{body:n,status:200,statusText:"OK",headers:{"Content-Type":["application/javascript"]}},[]]}let s=$scramjet.ScramjetHeaders.fromRawHeaders(e.initialHeaders),a=await r.fetchHandler.handleFetch({initialHeaders:s,rawClientUrl:e.rawClientUrl?new URL(e.rawClientUrl):void 0,rawUrl:new URL(e.rawUrl),destination:e.destination,method:e.method,mode:e.mode,referrer:e.referrer,body:e.body,cache:e.cache});return[{body:a.body,status:a.status,statusText:a.statusText,headers:a.headers.toRawHeaders()},a.body instanceof ReadableStream||a.body instanceof ArrayBuffer?[a.body]:[]]}catch(e){throw console.error("Error in controller request handler:",e),e}},initRemoteTransport:async t=>{let r=new e.C({request:async({remote:e,method:t,body:r,headers:s})=>{let o=await this.transport.request(new URL(e),t,r,s,void 0);return[o,[o.body]]},connect:async({url:e,protocols:t,requestHeaders:r,port:s})=>{let o,a=new Promise(e=>o=e),[n,i]=this.transport.connect(new URL(e),t,r,e=>{o({result:"success",protocol:e})},e=>{s.postMessage({type:"data",data:e},e instanceof ArrayBuffer?[e]:[])},(e,t)=>{s.postMessage({type:"close",code:e,reason:t})},e=>{o({result:"failure",error:e})});return s.onmessageerror=e=>{console.error("Transport port messageerror (this should never happen!)",e)},s.onmessage=({data:e})=>{"data"===e.type?n(e.data):"close"===e.type&&i(e.code,e.reason)},[await a,[]]}},"transport",(e,r)=>t.postMessage(e,r));t.onmessageerror=e=>{console.error("Transport port messageerror (this should never happen!)",e)},t.onmessage=e=>{r.recieve(e.data)},r.call("ready",void 0,[])},sendSetCookie:async({url:e,cookie:t})=>{}};constructor(t){this.init=t,this.transport=t.transport,this.id=i(),this.prefix=o.prefix+this.id+"/",this.ready=new Promise(e=>{this.readyResolve=e});let r=new MessageChannel;this.rpc=new e.C(this.methods,"tabchannel-"+this.id,(e,t)=>{r.port1.postMessage(e,t)}),r.port1.addEventListener("message",e=>{this.rpc.recieve(e.data)}),r.port1.start(),t.serviceworker.postMessage({$controller$init:{prefix:o.prefix+this.id,id:this.id}},[r.port2])}createFrame(e){let t=new h(this,e??=document.createElement("iframe"));return this.frames.push(t),t}wait(){return this.ready}}class h{controller;element;fetchHandler;id;prefix;get context(){let e={...$scramjet.defaultConfig,...a};return{cookieJar:t,prefix:new URL(this.prefix,location.href),config:e,interface:{getInjectScripts:function e(t,r,s,o){return function(a,n,i){return[i(r.scramjetPath),i(r.injectPath),i(o.href+r.virtualWasmPath),i("data:text/javascript;base64,"+btoa(`
362
3
  document.currentScript.remove();
363
4
  $scramjetController.load({
364
- config: ${JSON.stringify(config)},
365
- sjconfig: ${JSON.stringify(sjconfig)},
366
- cookies: ${cookieJar.dump()},
367
- prefix: new URL("${prefix.href}"),
368
- yieldGetInjectScripts: ${yieldGetInjectScripts.toString()},
369
- codecEncode: ${codecEncode.toString()},
370
- codecDecode: ${codecDecode.toString()},
5
+ config: ${JSON.stringify(r)},
6
+ sjconfig: ${JSON.stringify(s)},
7
+ cookies: ${t.dump()},
8
+ prefix: new URL("${o.href}"),
9
+ yieldGetInjectScripts: ${e.toString()},
10
+ codecEncode: ${c.toString()},
11
+ codecDecode: ${l.toString()},
371
12
  })
372
- `))
373
- ];
374
- };
375
- }
376
- class Frame {
377
- controller;
378
- element;
379
- fetchHandler;
380
- id;
381
- prefix;
382
- get context() {
383
- let sjcfg = {
384
- ...$scramjet.defaultConfig,
385
- ...cfg
386
- };
387
- return {
388
- cookieJar,
389
- prefix: new URL(this.prefix, location.href),
390
- config: sjcfg,
391
- interface: {
392
- getInjectScripts: yieldGetInjectScripts(this.controller.cookieJar, config, {
393
- ...$scramjet.defaultConfig,
394
- ...cfg
395
- }, new URL(this.prefix, location.href)),
396
- getWorkerInjectScripts: (meta, type, script)=>{
397
- let str = "";
398
- str += script(config.scramjetPath);
399
- str += script(this.prefix + config.virtualWasmPath);
400
- str += `
13
+ `))]}}(this.controller.cookieJar,o,{...$scramjet.defaultConfig,...a},new URL(this.prefix,location.href)),getWorkerInjectScripts:(t,r,s)=>{let a="";return a+=s(o.scramjetPath),a+=s(this.prefix+o.virtualWasmPath),a+=`
401
14
  (()=>{
402
15
  const { ScramjetClient, CookieJar, setWasm } = $scramjet;
403
16
 
404
17
  setWasm(Uint8Array.from(atob(self.WASM), (c) => c.charCodeAt(0)));
405
18
  delete self.WASM;
406
19
 
407
- const sjconfig = ${JSON.stringify(sjcfg)};
20
+ const sjconfig = ${JSON.stringify(e)};
408
21
  const prefix = new URL("${this.prefix}", location.href);
409
22
 
410
23
  const context = {
411
24
  interface: {
412
- codecEncode: ${codecEncode.toString()},
413
- codecDecode: ${codecDecode.toString()},
25
+ codecEncode: ${c.toString()},
26
+ codecDecode: ${l.toString()},
414
27
  },
415
28
  prefix,
416
29
  config: sjconfig
@@ -426,44 +39,5 @@ class Frame {
426
39
 
427
40
  client.hook();
428
41
  })();
429
- `;
430
- return str;
431
- },
432
- codecEncode,
433
- codecDecode
434
- }
435
- };
436
- }
437
- constructor(controller, element){
438
- this.controller = controller;
439
- this.element = element;
440
- this.id = makeId();
441
- this.prefix = this.controller.prefix + this.id + "/";
442
- this.fetchHandler = new $scramjet.ScramjetFetchHandler({
443
- crossOriginIsolated: self.crossOriginIsolated,
444
- context: this.context,
445
- transport: controller.transport,
446
- async sendSetCookie (url, cookie) {},
447
- async fetchBlobUrl (url) {
448
- return await fetch(url);
449
- },
450
- async fetchDataUrl (url) {
451
- return await fetch(url);
452
- }
453
- });
454
- }
455
- go(url) {
456
- const encoded = $scramjet.rewriteUrl(url, this.context, {
457
- origin: new URL(location.href),
458
- base: new URL(location.href)
459
- });
460
- this.element.src = encoded;
461
- }
462
- }
463
-
464
- })();
465
-
466
- $scramjetController = __webpack_exports__;
467
- })()
468
- ;
42
+ `},codecEncode:c,codecDecode:l}}}constructor(e,t){this.controller=e,this.element=t,this.id=i(),this.prefix=this.controller.prefix+this.id+"/",this.fetchHandler=new $scramjet.ScramjetFetchHandler({crossOriginIsolated:self.crossOriginIsolated,context:this.context,transport:e.transport,async sendSetCookie(e,t){},fetchBlobUrl:async e=>await fetch(e),fetchDataUrl:async e=>await fetch(e)})}go(e){let t=$scramjet.rewriteUrl(e,this.context,{origin:new URL(location.href),base:new URL(location.href)});this.element.src=t}}})(),$scramjetController=s})();
469
43
  //# sourceMappingURL=controller.api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.api.js","sources":["webpack://$scramjetController/./packages/scramjet/packages/rpc/index.ts","webpack://$scramjetController/webpack/runtime/define_property_getters","webpack://$scramjetController/webpack/runtime/has_own_property","webpack://$scramjetController/webpack/runtime/make_namespace_object","webpack://$scramjetController/./packages/scramjet/packages/controller/src/index.ts"],"sourcesContent":["type Serverbound = {\n\tmethod1: [{ paramA: string; paramB: number }, boolean];\n\tmethod2: [string, number];\n};\n\ntype Clientbound = {\n\tmethod1: [number];\n\tmethod2: [boolean, string];\n};\n\nexport type RpcDescription = {\n\t[method: string]: [args: any, returnType: any] | [args: any] | [];\n};\n\nexport type MethodsDefinition<Description extends RpcDescription> = {\n\t[Method in keyof Description]: (\n\t\t...args: Description[Method] extends [infer A, ...any[]] ? [A] : []\n\t) => Description[Method] extends [any, infer R]\n\t\t? Promise<[R, Transferable[]]>\n\t\t: Promise<void>;\n};\n\nexport class RpcHelper<\n\tLocal extends RpcDescription,\n\tRemote extends RpcDescription,\n> {\n\tcounter: number = 0;\n\tpromiseCallbacks: Map<\n\t\tnumber,\n\t\t{ resolve: (value: any) => void; reject: (reason?: any) => void }\n\t> = new Map();\n\tconstructor(\n\t\tprivate methods: MethodsDefinition<Local>,\n\t\tprivate id: string,\n\t\tprivate sendRaw: (data: any, transfer: Transferable[]) => void\n\t) {}\n\n\trecieve(data: any) {\n\t\tif (data === undefined || data === null || typeof data !== \"object\") return;\n\t\tconst dt = data[this.id];\n\t\tif (dt === undefined || dt === null || typeof dt !== \"object\") return;\n\n\t\tconst type = dt.$type;\n\n\t\tif (type === \"response\") {\n\t\t\tconst token = dt.$token;\n\t\t\tconst data = dt.$data;\n\t\t\tconst error = dt.$error;\n\t\t\tconst cb = this.promiseCallbacks.get(token);\n\t\t\tif (!cb) return;\n\t\t\tthis.promiseCallbacks.delete(token);\n\t\t\tif (error !== undefined) {\n\t\t\t\tcb.reject(new Error(error));\n\t\t\t} else {\n\t\t\t\tcb.resolve(data);\n\t\t\t}\n\t\t} else if (type === \"request\") {\n\t\t\tconst method = dt.$method as keyof Local;\n\t\t\tconst args = dt.$args as Local[typeof method][0];\n\t\t\t(this.methods[method] as any)(args)\n\t\t\t\t.then((r: any) => {\n\t\t\t\t\tthis.sendRaw(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t\t\t$type: \"response\",\n\t\t\t\t\t\t\t\t$token: dt.$token,\n\t\t\t\t\t\t\t\t$data: r?.[0],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tr?.[1]\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.catch((err: any) => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t\tthis.sendRaw(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t\t\t$type: \"response\",\n\t\t\t\t\t\t\t\t$token: dt.$token,\n\t\t\t\t\t\t\t\t$error: err?.toString() || \"Unknown error\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tcall<Method extends keyof Remote>(\n\t\tmethod: Method,\n\t\targs: Remote[Method][0],\n\t\ttransfer: Transferable[] = []\n\t): Promise<Remote[Method][1]> {\n\t\tlet token = this.counter++;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.promiseCallbacks.set(token, { resolve, reject });\n\t\t\tthis.sendRaw(\n\t\t\t\t{\n\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t$type: \"request\",\n\t\t\t\t\t\t$method: method,\n\t\t\t\t\t\t$args: args,\n\t\t\t\t\t\t$token: token,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttransfer\n\t\t\t);\n\t\t});\n\t}\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { type MethodsDefinition, RpcHelper } from \"@mercuryworkshop/rpc\";\nimport type * as ScramjetGlobal from \"@mercuryworkshop/scramjet\";\n\ndeclare const $scramjet: typeof ScramjetGlobal;\n\nimport {\n\ttype TransportToController,\n\ttype Controllerbound,\n\ttype ControllerToTransport,\n\ttype SWbound,\n\ttype WebSocketMessage,\n} from \"./types\";\nimport {\n\tBareCompatibleClient,\n\ttype BareResponse,\n\ttype ProxyTransport,\n} from \"@mercuryworkshop/proxy-transports\";\n\nconst cookieJar = new $scramjet.CookieJar();\n\ntype Config = {\n\twasmPath: string;\n\tinjectPath: string;\n\tscramjetPath: string;\n\tvirtualWasmPath: string;\n\tprefix: string;\n};\n\nfetch(\"/scramjet/scramjet.wasm.wasm\").then(async (resp) => {\n\t$scramjet.setWasm(await resp.arrayBuffer());\n});\n\nexport const config: Config = {\n\tprefix: \"/~/sj/\",\n\tvirtualWasmPath: \"scramjet.wasm.js\",\n\tinjectPath: \"/controller/controller.inject.js\",\n\tscramjetPath: \"/scramjet/scramjet.js\",\n\twasmPath: \"/scramjet/scramjet.wasm.wasm\",\n};\n\nconst cfg = {\n\tflags: {\n\t\t...$scramjet.defaultConfig.flags,\n\t\tallowFailedIntercepts: true,\n\t},\n\tmaskedfiles: [\"inject.js\", \"scramjet.wasm.js\"],\n};\n\nconst frames: Record<string, Frame> = {};\n\nlet wasmPayload: string | null = null;\n\nfunction makeId(): string {\n\treturn Math.random().toString(36).substring(2, 10);\n}\n\nconst codecEncode = (url: string) => {\n\tif (!url) return url;\n\n\treturn encodeURIComponent(url);\n};\n\nconst codecDecode = (url: string) => {\n\tif (!url) return url;\n\n\treturn decodeURIComponent(url);\n};\n\ntype ControllerInit = {\n\tserviceworker: ServiceWorker;\n\ttransport: ProxyTransport;\n};\nexport class Controller {\n\tid: string;\n\tprefix: string;\n\tframes: Frame[] = [];\n\tcookieJar = new $scramjet.CookieJar();\n\n\trpc: RpcHelper<Controllerbound, SWbound>;\n\tprivate ready: Promise<void>;\n\tprivate readyResolve!: () => void;\n\n\ttransport: ProxyTransport;\n\n\tprivate methods: MethodsDefinition<Controllerbound> = {\n\t\tready: async () => {\n\t\t\tthis.readyResolve();\n\t\t},\n\t\trequest: async (data) => {\n\t\t\ttry {\n\t\t\t\tlet path = new URL(data.rawUrl).pathname;\n\t\t\t\tconst frame = this.frames.find((f) => path.startsWith(f.prefix));\n\t\t\t\tif (!frame) throw new Error(\"No frame found for request\");\n\n\t\t\t\tif (path === frame.prefix + config.virtualWasmPath) {\n\t\t\t\t\tif (!wasmPayload) {\n\t\t\t\t\t\tconst resp = await fetch(config.wasmPath);\n\t\t\t\t\t\tconst buf = await resp.arrayBuffer();\n\t\t\t\t\t\tconst b64 = btoa(\n\t\t\t\t\t\t\tnew Uint8Array(buf)\n\t\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t\t(data, byte) => (data.push(String.fromCharCode(byte)), data),\n\t\t\t\t\t\t\t\t\t[] as any\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlet payload = \"\";\n\t\t\t\t\t\tpayload +=\n\t\t\t\t\t\t\t\"console.warn('WTF'); if ('document' in self && document.currentScript) { document.currentScript.remove(); }\\n\";\n\t\t\t\t\t\tpayload += `self.WASM = '${b64}';`;\n\t\t\t\t\t\twasmPayload = payload;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbody: wasmPayload,\n\t\t\t\t\t\t\tstatus: 200,\n\t\t\t\t\t\t\tstatusText: \"OK\",\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\"Content-Type\": [\"application/javascript\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[],\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\tlet sjheaders = $scramjet.ScramjetHeaders.fromRawHeaders(\n\t\t\t\t\tdata.initialHeaders\n\t\t\t\t);\n\n\t\t\t\tconst fetchresponse = await frame.fetchHandler.handleFetch({\n\t\t\t\t\tinitialHeaders: sjheaders,\n\t\t\t\t\trawClientUrl: data.rawClientUrl\n\t\t\t\t\t\t? new URL(data.rawClientUrl)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\trawUrl: new URL(data.rawUrl),\n\t\t\t\t\tdestination: data.destination,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tmode: data.mode,\n\t\t\t\t\treferrer: data.referrer,\n\t\t\t\t\tbody: data.body,\n\t\t\t\t\tcache: data.cache,\n\t\t\t\t});\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tbody: fetchresponse.body,\n\t\t\t\t\t\tstatus: fetchresponse.status,\n\t\t\t\t\t\tstatusText: fetchresponse.statusText,\n\t\t\t\t\t\theaders: fetchresponse.headers.toRawHeaders(),\n\t\t\t\t\t},\n\t\t\t\t\tfetchresponse.body instanceof ReadableStream ||\n\t\t\t\t\tfetchresponse.body instanceof ArrayBuffer\n\t\t\t\t\t\t? [fetchresponse.body]\n\t\t\t\t\t\t: [],\n\t\t\t\t];\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Error in controller request handler:\", e);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tinitRemoteTransport: async (port) => {\n\t\t\tconst rpc = new RpcHelper<TransportToController, ControllerToTransport>(\n\t\t\t\t{\n\t\t\t\t\trequest: async ({ remote, method, body, headers }) => {\n\t\t\t\t\t\tlet response = await this.transport.request(\n\t\t\t\t\t\t\tnew URL(remote),\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn [response, [response.body]];\n\t\t\t\t\t},\n\t\t\t\t\tconnect: async ({ url, protocols, requestHeaders, port }) => {\n\t\t\t\t\t\tlet resolve: (arg: TransportToController[\"connect\"][1]) => void;\n\t\t\t\t\t\tlet promise = new Promise<TransportToController[\"connect\"][1]>(\n\t\t\t\t\t\t\t(res) => (resolve = res)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst [send, close] = this.transport.connect(\n\t\t\t\t\t\t\tnew URL(url),\n\t\t\t\t\t\t\tprotocols,\n\t\t\t\t\t\t\trequestHeaders,\n\t\t\t\t\t\t\t(protocol) => {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tresult: \"success\",\n\t\t\t\t\t\t\t\t\tprotocol: protocol,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\t\tport.postMessage(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"data\",\n\t\t\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\t\t} as WebSocketMessage,\n\t\t\t\t\t\t\t\t\tdata instanceof ArrayBuffer ? [data] : []\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(close, reason) => {\n\t\t\t\t\t\t\t\tport.postMessage({\n\t\t\t\t\t\t\t\t\ttype: \"close\",\n\t\t\t\t\t\t\t\t\tcode: close,\n\t\t\t\t\t\t\t\t\treason: reason,\n\t\t\t\t\t\t\t\t} as WebSocketMessage);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tresult: \"failure\",\n\t\t\t\t\t\t\t\t\terror: error,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tport.onmessageerror = (ev) => {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\"Transport port messageerror (this should never happen!)\",\n\t\t\t\t\t\t\t\tev\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tport.onmessage = ({ data }: { data: WebSocketMessage }) => {\n\t\t\t\t\t\t\tif (data.type === \"data\") {\n\t\t\t\t\t\t\t\tsend(data.data);\n\t\t\t\t\t\t\t} else if (data.type === \"close\") {\n\t\t\t\t\t\t\t\tclose(data.code, data.reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn [await promise, []];\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"transport\",\n\t\t\t\t(data, transfer) => port.postMessage(data, transfer)\n\t\t\t);\n\t\t\tport.onmessageerror = (ev) => {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Transport port messageerror (this should never happen!)\",\n\t\t\t\t\tev\n\t\t\t\t);\n\t\t\t};\n\t\t\tport.onmessage = (e) => {\n\t\t\t\trpc.recieve(e.data);\n\t\t\t};\n\t\t\trpc.call(\"ready\", undefined, []);\n\t\t},\n\t\tsendSetCookie: async ({ url, cookie }) => {},\n\t};\n\n\tconstructor(public init: ControllerInit) {\n\t\tthis.transport = init.transport;\n\t\tthis.id = makeId();\n\t\tthis.prefix = config.prefix + this.id + \"/\";\n\n\t\tthis.ready = new Promise<void>((resolve) => {\n\t\t\tthis.readyResolve = resolve;\n\t\t});\n\n\t\tlet channel = new MessageChannel();\n\t\tthis.rpc = new RpcHelper<Controllerbound, SWbound>(\n\t\t\tthis.methods,\n\t\t\t\"tabchannel-\" + this.id,\n\t\t\t(data, transfer) => {\n\t\t\t\tchannel.port1.postMessage(data, transfer);\n\t\t\t}\n\t\t);\n\t\tchannel.port1.addEventListener(\"message\", (e) => {\n\t\t\tthis.rpc.recieve(e.data);\n\t\t});\n\t\tchannel.port1.start();\n\n\t\tinit.serviceworker.postMessage(\n\t\t\t{\n\t\t\t\t$controller$init: {\n\t\t\t\t\tprefix: config.prefix + this.id,\n\t\t\t\t\tid: this.id,\n\t\t\t\t},\n\t\t\t},\n\t\t\t[channel.port2]\n\t\t);\n\t}\n\n\tcreateFrame(element?: HTMLIFrameElement): Frame {\n\t\telement ??= document.createElement(\"iframe\");\n\t\tconst frame = new Frame(this, element);\n\t\tthis.frames.push(frame);\n\t\treturn frame;\n\t}\n\n\twait(): Promise<void> {\n\t\treturn this.ready;\n\t}\n}\n\nfunction yieldGetInjectScripts(\n\tcookieJar: ScramjetGlobal.CookieJar,\n\tconfig: Config,\n\tsjconfig: ScramjetGlobal.ScramjetConfig,\n\tprefix: URL\n) {\n\treturn function getInjectScripts(meta, handler, script) {\n\t\treturn [\n\t\t\tscript(config.scramjetPath),\n\t\t\tscript(config.injectPath),\n\t\t\tscript(prefix.href + config.virtualWasmPath),\n\t\t\tscript(\n\t\t\t\t\"data:text/javascript;base64,\" +\n\t\t\t\t\tbtoa(`\n\t\t\t\t\tdocument.currentScript.remove();\n\t\t\t\t\t$scramjetController.load({\n\t\t\t\t\t\tconfig: ${JSON.stringify(config)},\n\t\t\t\t\t\tsjconfig: ${JSON.stringify(sjconfig)},\n\t\t\t\t\t\tcookies: ${cookieJar.dump()},\n\t\t\t\t\t\tprefix: new URL(\"${prefix.href}\"),\n\t\t\t\t\t\tyieldGetInjectScripts: ${yieldGetInjectScripts.toString()},\n\t\t\t\t\t\tcodecEncode: ${codecEncode.toString()},\n\t\t\t\t\t\tcodecDecode: ${codecDecode.toString()},\n\t\t\t\t\t})\n\t\t\t\t`)\n\t\t\t),\n\t\t];\n\t};\n}\n\nclass Frame {\n\tfetchHandler: ScramjetGlobal.ScramjetFetchHandler;\n\tid: string;\n\tprefix: string;\n\n\tget context() {\n\t\tlet sjcfg = {\n\t\t\t...$scramjet.defaultConfig,\n\t\t\t...cfg,\n\t\t};\n\t\treturn {\n\t\t\tcookieJar,\n\t\t\tprefix: new URL(this.prefix, location.href),\n\t\t\tconfig: sjcfg,\n\t\t\tinterface: {\n\t\t\t\tgetInjectScripts: yieldGetInjectScripts(\n\t\t\t\t\tthis.controller.cookieJar,\n\t\t\t\t\tconfig,\n\t\t\t\t\t{ ...$scramjet.defaultConfig, ...cfg },\n\t\t\t\t\tnew URL(this.prefix, location.href)\n\t\t\t\t),\n\t\t\t\tgetWorkerInjectScripts: (meta, type, script) => {\n\t\t\t\t\tlet str = \"\";\n\n\t\t\t\t\tstr += script(config.scramjetPath);\n\t\t\t\t\tstr += script(this.prefix + config.virtualWasmPath);\n\t\t\t\t\tstr += `\n\t\t\t\t\t(()=>{\n\t\t\t\t\t\tconst { ScramjetClient, CookieJar, setWasm } = $scramjet;\n\n\t\t\t\t\t\tsetWasm(Uint8Array.from(atob(self.WASM), (c) => c.charCodeAt(0)));\n\t\t\t\t\t\tdelete self.WASM;\n\n\t\t\t\t\t\tconst sjconfig = ${JSON.stringify(sjcfg)};\n\t\t\t\t\t\tconst prefix = new URL(\"${this.prefix}\", location.href);\n\n\t\t\t\t\t\tconst context = {\n\t\t\t\t\t\t\tinterface: {\n\t\t\t\t\t\t\t\tcodecEncode: ${codecEncode.toString()},\n\t\t\t\t\t\t\t\tcodecDecode: ${codecDecode.toString()},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\tconfig: sjconfig\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst client = new ScramjetClient(globalThis, {\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\ttransport: null,\n\t\t\t\t\t\t\tshouldPassthroughWebsocket: (url) => {\n\t\t\t\t\t\t\t\treturn url === \"wss://anura.pro/\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tclient.hook();\n\t\t\t\t\t})();\n\t\t\t\t\t`;\n\n\t\t\t\t\treturn str;\n\t\t\t\t},\n\t\t\t\tcodecEncode,\n\t\t\t\tcodecDecode,\n\t\t\t},\n\t\t};\n\t}\n\n\tconstructor(\n\t\tpublic controller: Controller,\n\t\tpublic element: HTMLIFrameElement\n\t) {\n\t\tthis.id = makeId();\n\t\tthis.prefix = this.controller.prefix + this.id + \"/\";\n\n\t\tthis.fetchHandler = new $scramjet.ScramjetFetchHandler({\n\t\t\tcrossOriginIsolated: self.crossOriginIsolated,\n\t\t\tcontext: this.context,\n\t\t\ttransport: controller.transport,\n\t\t\tasync sendSetCookie(url, cookie) {},\n\t\t\tasync fetchBlobUrl(url) {\n\t\t\t\treturn (await fetch(url)) as BareResponseFetch;\n\t\t\t},\n\t\t\tasync fetchDataUrl(url) {\n\t\t\t\treturn (await fetch(url)) as BareResponseFetch;\n\t\t\t},\n\t\t});\n\t}\n\n\tgo(url: string) {\n\t\tconst encoded = $scramjet.rewriteUrl(url, this.context, {\n\t\t\torigin: new URL(location.href),\n\t\t\tbase: new URL(location.href),\n\t\t});\n\t\tthis.element.src = encoded;\n\t}\n}\n"],"names":["RpcHelper","Map","methods","id","sendRaw","data","undefined","dt","type","token","error","cb","Error","method","args","r","err","console","transfer","Promise","resolve","reject","cookieJar","$scramjet","fetch","resp","config","cfg","frames","wasmPayload","makeId","Math","codecEncode","url","encodeURIComponent","codecDecode","decodeURIComponent","Controller","path","URL","frame","f","buf","b64","btoa","Uint8Array","byte","String","payload","sjheaders","fetchresponse","ReadableStream","ArrayBuffer","e","port","rpc","remote","body","headers","response","protocols","requestHeaders","promise","res","send","close","protocol","reason","ev","cookie","init","channel","MessageChannel","element","document","Frame","yieldGetInjectScripts","sjconfig","prefix","getInjectScripts","meta","handler","script","JSON","sjcfg","location","str","controller","self","encoded"],"mappings":"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"}
1
+ {"version":3,"file":"controller.api.js","sources":["webpack://$scramjetController/./packages/rpc/index.ts","webpack://$scramjetController/webpack/runtime/define_property_getters","webpack://$scramjetController/webpack/runtime/has_own_property","webpack://$scramjetController/webpack/runtime/make_namespace_object","webpack://$scramjetController/./packages/controller/src/index.ts"],"sourcesContent":["type Serverbound = {\n\tmethod1: [{ paramA: string; paramB: number }, boolean];\n\tmethod2: [string, number];\n};\n\ntype Clientbound = {\n\tmethod1: [number];\n\tmethod2: [boolean, string];\n};\n\nexport type RpcDescription = {\n\t[method: string]: [args: any, returnType: any] | [args: any] | [];\n};\n\nexport type MethodsDefinition<Description extends RpcDescription> = {\n\t[Method in keyof Description]: (\n\t\t...args: Description[Method] extends [infer A, ...any[]] ? [A] : []\n\t) => Description[Method] extends [any, infer R]\n\t\t? Promise<[R, Transferable[]]>\n\t\t: Promise<void>;\n};\n\nexport class RpcHelper<\n\tLocal extends RpcDescription,\n\tRemote extends RpcDescription,\n> {\n\tcounter: number = 0;\n\tpromiseCallbacks: Map<\n\t\tnumber,\n\t\t{ resolve: (value: any) => void; reject: (reason?: any) => void }\n\t> = new Map();\n\tconstructor(\n\t\tprivate methods: MethodsDefinition<Local>,\n\t\tprivate id: string,\n\t\tprivate sendRaw: (data: any, transfer: Transferable[]) => void\n\t) {}\n\n\trecieve(data: any) {\n\t\tif (data === undefined || data === null || typeof data !== \"object\") return;\n\t\tconst dt = data[this.id];\n\t\tif (dt === undefined || dt === null || typeof dt !== \"object\") return;\n\n\t\tconst type = dt.$type;\n\n\t\tif (type === \"response\") {\n\t\t\tconst token = dt.$token;\n\t\t\tconst data = dt.$data;\n\t\t\tconst error = dt.$error;\n\t\t\tconst cb = this.promiseCallbacks.get(token);\n\t\t\tif (!cb) return;\n\t\t\tthis.promiseCallbacks.delete(token);\n\t\t\tif (error !== undefined) {\n\t\t\t\tcb.reject(new Error(error));\n\t\t\t} else {\n\t\t\t\tcb.resolve(data);\n\t\t\t}\n\t\t} else if (type === \"request\") {\n\t\t\tconst method = dt.$method as keyof Local;\n\t\t\tconst args = dt.$args as Local[typeof method][0];\n\t\t\t(this.methods[method] as any)(args)\n\t\t\t\t.then((r: any) => {\n\t\t\t\t\tthis.sendRaw(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t\t\t$type: \"response\",\n\t\t\t\t\t\t\t\t$token: dt.$token,\n\t\t\t\t\t\t\t\t$data: r?.[0],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tr?.[1]\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.catch((err: any) => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t\tthis.sendRaw(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t\t\t$type: \"response\",\n\t\t\t\t\t\t\t\t$token: dt.$token,\n\t\t\t\t\t\t\t\t$error: err?.toString() || \"Unknown error\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tcall<Method extends keyof Remote>(\n\t\tmethod: Method,\n\t\targs: Remote[Method][0],\n\t\ttransfer: Transferable[] = []\n\t): Promise<Remote[Method][1]> {\n\t\tlet token = this.counter++;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.promiseCallbacks.set(token, { resolve, reject });\n\t\t\tthis.sendRaw(\n\t\t\t\t{\n\t\t\t\t\t[this.id]: {\n\t\t\t\t\t\t$type: \"request\",\n\t\t\t\t\t\t$method: method,\n\t\t\t\t\t\t$args: args,\n\t\t\t\t\t\t$token: token,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttransfer\n\t\t\t);\n\t\t});\n\t}\n}\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { type MethodsDefinition, RpcHelper } from \"@mercuryworkshop/rpc\";\nimport type * as ScramjetGlobal from \"@mercuryworkshop/scramjet\";\n\ndeclare const $scramjet: typeof ScramjetGlobal;\n\nimport {\n\ttype TransportToController,\n\ttype Controllerbound,\n\ttype ControllerToTransport,\n\ttype SWbound,\n\ttype WebSocketMessage,\n} from \"./types\";\nimport {\n\tBareCompatibleClient,\n\ttype BareResponse,\n\ttype ProxyTransport,\n} from \"@mercuryworkshop/proxy-transports\";\n\nconst cookieJar = new $scramjet.CookieJar();\n\ntype Config = {\n\twasmPath: string;\n\tinjectPath: string;\n\tscramjetPath: string;\n\tvirtualWasmPath: string;\n\tprefix: string;\n};\n\nfetch(\"/scramjet/scramjet.wasm.wasm\").then(async (resp) => {\n\t$scramjet.setWasm(await resp.arrayBuffer());\n});\n\nexport const config: Config = {\n\tprefix: \"/~/sj/\",\n\tvirtualWasmPath: \"scramjet.wasm.js\",\n\tinjectPath: \"/controller/controller.inject.js\",\n\tscramjetPath: \"/scramjet/scramjet.js\",\n\twasmPath: \"/scramjet/scramjet.wasm.wasm\",\n};\n\nconst cfg = {\n\tflags: {\n\t\t...$scramjet.defaultConfig.flags,\n\t\tallowFailedIntercepts: true,\n\t},\n\tmaskedfiles: [\"inject.js\", \"scramjet.wasm.js\"],\n};\n\nconst frames: Record<string, Frame> = {};\n\nlet wasmPayload: string | null = null;\n\nfunction makeId(): string {\n\treturn Math.random().toString(36).substring(2, 10);\n}\n\nconst codecEncode = (url: string) => {\n\tif (!url) return url;\n\n\treturn encodeURIComponent(url);\n};\n\nconst codecDecode = (url: string) => {\n\tif (!url) return url;\n\n\treturn decodeURIComponent(url);\n};\n\ntype ControllerInit = {\n\tserviceworker: ServiceWorker;\n\ttransport: ProxyTransport;\n};\nexport class Controller {\n\tid: string;\n\tprefix: string;\n\tframes: Frame[] = [];\n\tcookieJar = new $scramjet.CookieJar();\n\n\trpc: RpcHelper<Controllerbound, SWbound>;\n\tprivate ready: Promise<void>;\n\tprivate readyResolve!: () => void;\n\n\ttransport: ProxyTransport;\n\n\tprivate methods: MethodsDefinition<Controllerbound> = {\n\t\tready: async () => {\n\t\t\tthis.readyResolve();\n\t\t},\n\t\trequest: async (data) => {\n\t\t\ttry {\n\t\t\t\tlet path = new URL(data.rawUrl).pathname;\n\t\t\t\tconst frame = this.frames.find((f) => path.startsWith(f.prefix));\n\t\t\t\tif (!frame) throw new Error(\"No frame found for request\");\n\n\t\t\t\tif (path === frame.prefix + config.virtualWasmPath) {\n\t\t\t\t\tif (!wasmPayload) {\n\t\t\t\t\t\tconst resp = await fetch(config.wasmPath);\n\t\t\t\t\t\tconst buf = await resp.arrayBuffer();\n\t\t\t\t\t\tconst b64 = btoa(\n\t\t\t\t\t\t\tnew Uint8Array(buf)\n\t\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t\t(data, byte) => (data.push(String.fromCharCode(byte)), data),\n\t\t\t\t\t\t\t\t\t[] as any\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlet payload = \"\";\n\t\t\t\t\t\tpayload +=\n\t\t\t\t\t\t\t\"console.warn('WTF'); if ('document' in self && document.currentScript) { document.currentScript.remove(); }\\n\";\n\t\t\t\t\t\tpayload += `self.WASM = '${b64}';`;\n\t\t\t\t\t\twasmPayload = payload;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbody: wasmPayload,\n\t\t\t\t\t\t\tstatus: 200,\n\t\t\t\t\t\t\tstatusText: \"OK\",\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\"Content-Type\": [\"application/javascript\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[],\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\tlet sjheaders = $scramjet.ScramjetHeaders.fromRawHeaders(\n\t\t\t\t\tdata.initialHeaders\n\t\t\t\t);\n\n\t\t\t\tconst fetchresponse = await frame.fetchHandler.handleFetch({\n\t\t\t\t\tinitialHeaders: sjheaders,\n\t\t\t\t\trawClientUrl: data.rawClientUrl\n\t\t\t\t\t\t? new URL(data.rawClientUrl)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\trawUrl: new URL(data.rawUrl),\n\t\t\t\t\tdestination: data.destination,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tmode: data.mode,\n\t\t\t\t\treferrer: data.referrer,\n\t\t\t\t\tbody: data.body,\n\t\t\t\t\tcache: data.cache,\n\t\t\t\t});\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tbody: fetchresponse.body,\n\t\t\t\t\t\tstatus: fetchresponse.status,\n\t\t\t\t\t\tstatusText: fetchresponse.statusText,\n\t\t\t\t\t\theaders: fetchresponse.headers.toRawHeaders(),\n\t\t\t\t\t},\n\t\t\t\t\tfetchresponse.body instanceof ReadableStream ||\n\t\t\t\t\tfetchresponse.body instanceof ArrayBuffer\n\t\t\t\t\t\t? [fetchresponse.body]\n\t\t\t\t\t\t: [],\n\t\t\t\t];\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Error in controller request handler:\", e);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tinitRemoteTransport: async (port) => {\n\t\t\tconst rpc = new RpcHelper<TransportToController, ControllerToTransport>(\n\t\t\t\t{\n\t\t\t\t\trequest: async ({ remote, method, body, headers }) => {\n\t\t\t\t\t\tlet response = await this.transport.request(\n\t\t\t\t\t\t\tnew URL(remote),\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn [response, [response.body]];\n\t\t\t\t\t},\n\t\t\t\t\tconnect: async ({ url, protocols, requestHeaders, port }) => {\n\t\t\t\t\t\tlet resolve: (arg: TransportToController[\"connect\"][1]) => void;\n\t\t\t\t\t\tlet promise = new Promise<TransportToController[\"connect\"][1]>(\n\t\t\t\t\t\t\t(res) => (resolve = res)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst [send, close] = this.transport.connect(\n\t\t\t\t\t\t\tnew URL(url),\n\t\t\t\t\t\t\tprotocols,\n\t\t\t\t\t\t\trequestHeaders,\n\t\t\t\t\t\t\t(protocol) => {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tresult: \"success\",\n\t\t\t\t\t\t\t\t\tprotocol: protocol,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\t\tport.postMessage(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"data\",\n\t\t\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\t\t} as WebSocketMessage,\n\t\t\t\t\t\t\t\t\tdata instanceof ArrayBuffer ? [data] : []\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(close, reason) => {\n\t\t\t\t\t\t\t\tport.postMessage({\n\t\t\t\t\t\t\t\t\ttype: \"close\",\n\t\t\t\t\t\t\t\t\tcode: close,\n\t\t\t\t\t\t\t\t\treason: reason,\n\t\t\t\t\t\t\t\t} as WebSocketMessage);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tresult: \"failure\",\n\t\t\t\t\t\t\t\t\terror: error,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tport.onmessageerror = (ev) => {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\"Transport port messageerror (this should never happen!)\",\n\t\t\t\t\t\t\t\tev\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tport.onmessage = ({ data }: { data: WebSocketMessage }) => {\n\t\t\t\t\t\t\tif (data.type === \"data\") {\n\t\t\t\t\t\t\t\tsend(data.data);\n\t\t\t\t\t\t\t} else if (data.type === \"close\") {\n\t\t\t\t\t\t\t\tclose(data.code, data.reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn [await promise, []];\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"transport\",\n\t\t\t\t(data, transfer) => port.postMessage(data, transfer)\n\t\t\t);\n\t\t\tport.onmessageerror = (ev) => {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Transport port messageerror (this should never happen!)\",\n\t\t\t\t\tev\n\t\t\t\t);\n\t\t\t};\n\t\t\tport.onmessage = (e) => {\n\t\t\t\trpc.recieve(e.data);\n\t\t\t};\n\t\t\trpc.call(\"ready\", undefined, []);\n\t\t},\n\t\tsendSetCookie: async ({ url, cookie }) => {},\n\t};\n\n\tconstructor(public init: ControllerInit) {\n\t\tthis.transport = init.transport;\n\t\tthis.id = makeId();\n\t\tthis.prefix = config.prefix + this.id + \"/\";\n\n\t\tthis.ready = new Promise<void>((resolve) => {\n\t\t\tthis.readyResolve = resolve;\n\t\t});\n\n\t\tlet channel = new MessageChannel();\n\t\tthis.rpc = new RpcHelper<Controllerbound, SWbound>(\n\t\t\tthis.methods,\n\t\t\t\"tabchannel-\" + this.id,\n\t\t\t(data, transfer) => {\n\t\t\t\tchannel.port1.postMessage(data, transfer);\n\t\t\t}\n\t\t);\n\t\tchannel.port1.addEventListener(\"message\", (e) => {\n\t\t\tthis.rpc.recieve(e.data);\n\t\t});\n\t\tchannel.port1.start();\n\n\t\tinit.serviceworker.postMessage(\n\t\t\t{\n\t\t\t\t$controller$init: {\n\t\t\t\t\tprefix: config.prefix + this.id,\n\t\t\t\t\tid: this.id,\n\t\t\t\t},\n\t\t\t},\n\t\t\t[channel.port2]\n\t\t);\n\t}\n\n\tcreateFrame(element?: HTMLIFrameElement): Frame {\n\t\telement ??= document.createElement(\"iframe\");\n\t\tconst frame = new Frame(this, element);\n\t\tthis.frames.push(frame);\n\t\treturn frame;\n\t}\n\n\twait(): Promise<void> {\n\t\treturn this.ready;\n\t}\n}\n\nfunction yieldGetInjectScripts(\n\tcookieJar: ScramjetGlobal.CookieJar,\n\tconfig: Config,\n\tsjconfig: ScramjetGlobal.ScramjetConfig,\n\tprefix: URL\n) {\n\treturn function getInjectScripts(meta, handler, script) {\n\t\treturn [\n\t\t\tscript(config.scramjetPath),\n\t\t\tscript(config.injectPath),\n\t\t\tscript(prefix.href + config.virtualWasmPath),\n\t\t\tscript(\n\t\t\t\t\"data:text/javascript;base64,\" +\n\t\t\t\t\tbtoa(`\n\t\t\t\t\tdocument.currentScript.remove();\n\t\t\t\t\t$scramjetController.load({\n\t\t\t\t\t\tconfig: ${JSON.stringify(config)},\n\t\t\t\t\t\tsjconfig: ${JSON.stringify(sjconfig)},\n\t\t\t\t\t\tcookies: ${cookieJar.dump()},\n\t\t\t\t\t\tprefix: new URL(\"${prefix.href}\"),\n\t\t\t\t\t\tyieldGetInjectScripts: ${yieldGetInjectScripts.toString()},\n\t\t\t\t\t\tcodecEncode: ${codecEncode.toString()},\n\t\t\t\t\t\tcodecDecode: ${codecDecode.toString()},\n\t\t\t\t\t})\n\t\t\t\t`)\n\t\t\t),\n\t\t];\n\t};\n}\n\nclass Frame {\n\tfetchHandler: ScramjetGlobal.ScramjetFetchHandler;\n\tid: string;\n\tprefix: string;\n\n\tget context() {\n\t\tlet sjcfg = {\n\t\t\t...$scramjet.defaultConfig,\n\t\t\t...cfg,\n\t\t};\n\t\treturn {\n\t\t\tcookieJar,\n\t\t\tprefix: new URL(this.prefix, location.href),\n\t\t\tconfig: sjcfg,\n\t\t\tinterface: {\n\t\t\t\tgetInjectScripts: yieldGetInjectScripts(\n\t\t\t\t\tthis.controller.cookieJar,\n\t\t\t\t\tconfig,\n\t\t\t\t\t{ ...$scramjet.defaultConfig, ...cfg },\n\t\t\t\t\tnew URL(this.prefix, location.href)\n\t\t\t\t),\n\t\t\t\tgetWorkerInjectScripts: (meta, type, script) => {\n\t\t\t\t\tlet str = \"\";\n\n\t\t\t\t\tstr += script(config.scramjetPath);\n\t\t\t\t\tstr += script(this.prefix + config.virtualWasmPath);\n\t\t\t\t\tstr += `\n\t\t\t\t\t(()=>{\n\t\t\t\t\t\tconst { ScramjetClient, CookieJar, setWasm } = $scramjet;\n\n\t\t\t\t\t\tsetWasm(Uint8Array.from(atob(self.WASM), (c) => c.charCodeAt(0)));\n\t\t\t\t\t\tdelete self.WASM;\n\n\t\t\t\t\t\tconst sjconfig = ${JSON.stringify(sjcfg)};\n\t\t\t\t\t\tconst prefix = new URL(\"${this.prefix}\", location.href);\n\n\t\t\t\t\t\tconst context = {\n\t\t\t\t\t\t\tinterface: {\n\t\t\t\t\t\t\t\tcodecEncode: ${codecEncode.toString()},\n\t\t\t\t\t\t\t\tcodecDecode: ${codecDecode.toString()},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\tconfig: sjconfig\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst client = new ScramjetClient(globalThis, {\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\ttransport: null,\n\t\t\t\t\t\t\tshouldPassthroughWebsocket: (url) => {\n\t\t\t\t\t\t\t\treturn url === \"wss://anura.pro/\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tclient.hook();\n\t\t\t\t\t})();\n\t\t\t\t\t`;\n\n\t\t\t\t\treturn str;\n\t\t\t\t},\n\t\t\t\tcodecEncode,\n\t\t\t\tcodecDecode,\n\t\t\t},\n\t\t};\n\t}\n\n\tconstructor(\n\t\tpublic controller: Controller,\n\t\tpublic element: HTMLIFrameElement\n\t) {\n\t\tthis.id = makeId();\n\t\tthis.prefix = this.controller.prefix + this.id + \"/\";\n\n\t\tthis.fetchHandler = new $scramjet.ScramjetFetchHandler({\n\t\t\tcrossOriginIsolated: self.crossOriginIsolated,\n\t\t\tcontext: this.context,\n\t\t\ttransport: controller.transport,\n\t\t\tasync sendSetCookie(url, cookie) {},\n\t\t\tasync fetchBlobUrl(url) {\n\t\t\t\treturn (await fetch(url)) as BareResponseFetch;\n\t\t\t},\n\t\t\tasync fetchDataUrl(url) {\n\t\t\t\treturn (await fetch(url)) as BareResponseFetch;\n\t\t\t},\n\t\t});\n\t}\n\n\tgo(url: string) {\n\t\tconst encoded = $scramjet.rewriteUrl(url, this.context, {\n\t\t\torigin: new URL(location.href),\n\t\t\tbase: new URL(location.href),\n\t\t});\n\t\tthis.element.src = encoded;\n\t}\n}\n"],"names":["RpcHelper","Map","methods","id","sendRaw","data","dt","type","token","error","cb","undefined","Error","method","args","r","err","console","transfer","Promise","resolve","reject","e","Object","Symbol","cookieJar","$scramjet","fetch","resp","config","cfg","wasmPayload","makeId","Math","codecEncode","url","encodeURIComponent","codecDecode","decodeURIComponent","Controller","path","URL","frame","f","buf","b64","btoa","Uint8Array","byte","String","payload","sjheaders","fetchresponse","ReadableStream","ArrayBuffer","port","rpc","remote","body","headers","response","protocols","requestHeaders","promise","res","send","close","protocol","reason","ev","cookie","init","channel","MessageChannel","element","Frame","document","sjcfg","location","yieldGetInjectScripts","sjconfig","prefix","meta","handler","script","JSON","str","controller","self","encoded"],"mappings":"yEAsBO,OAAMA,E,kBAIZ,SAAkB,CAAE,AACpB,kBAGI,IAAIC,GAAM,AACd,aACSC,CAAiC,CACjCC,CAAU,CACVC,CAAsD,CAC7D,C,KAHOF,OAAO,CAAPA,E,KACAC,EAAE,CAAFA,E,KACAC,OAAO,CAAPA,CACN,CAEH,QAAQC,CAAS,CAAE,CAClB,GAAIA,MAAAA,GAAuC,AAAgB,UAAhB,OAAOA,EAAmB,OACrE,IAAMC,EAAKD,CAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACxB,GAAIC,MAAAA,GAAmC,AAAc,UAAd,OAAOA,EAAiB,OAE/D,IAAMC,EAAOD,EAAG,KAAK,CAErB,GAAIC,AAAS,aAATA,EAAqB,CACxB,IAAMC,EAAQF,EAAG,MAAM,CACjBD,EAAOC,EAAG,KAAK,CACfG,EAAQH,EAAG,MAAM,CACjBI,EAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACF,GACrC,GAAI,CAACE,EAAI,OACT,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAACF,GACzBC,AAAUE,SAAVF,EACHC,EAAG,MAAM,CAAC,AAAIE,MAAMH,IAEpBC,EAAG,OAAO,CAACL,EAEb,MAAO,GAAIE,AAAS,YAATA,EAAoB,CAC9B,IAAMM,EAASP,EAAG,OAAO,CACnBQ,EAAOR,EAAG,KAAK,CACpB,IAAI,CAAC,OAAO,CAACO,EAAO,CAASC,GAC5B,IAAI,CAAC,AAACC,IACN,IAAI,CAAC,OAAO,CACX,CACC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CACV,MAAO,WACP,OAAQT,EAAG,MAAM,CACjB,MAAOS,GAAG,CAAC,EAAE,AACd,CACD,EACAA,GAAG,CAAC,EAAE,CAER,GACC,KAAK,CAAC,AAACC,IACPC,QAAQ,KAAK,CAACD,GACd,IAAI,CAAC,OAAO,CACX,CACC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CACV,MAAO,WACP,OAAQV,EAAG,MAAM,CACjB,OAAQU,GAAK,YAAc,eAC5B,CACD,EACA,EAAE,CAEJ,EACF,CACD,CAEA,KACCH,CAAc,CACdC,CAAuB,CACvBI,EAA2B,EAAE,CACA,CAC7B,IAAIV,EAAQ,IAAI,CAAC,OAAO,GACxB,OAAO,IAAIW,QAAQ,CAACC,EAASC,KAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACb,EAAO,CAAEY,QAAAA,EAASC,OAAAA,CAAO,GACnD,IAAI,CAAC,OAAO,CACX,CACC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CACV,MAAO,UACP,QAASR,EACT,MAAOC,EACP,OAAQN,CACT,CACD,EACAU,EAEF,EACD,CACD,C,6HC7GA,EAAoB,CAAC,CAAG,CAACI,EAAS,KACjC,IAAI,IAAI,KAAO,EACL,EAAoB,CAAC,CAAC,EAAY,IAAQ,CAAC,EAAoB,CAAC,CAACA,EAAS,IACzEC,OAAO,cAAc,CAACD,EAAS,EAAK,CAAE,WAAY,GAAM,IAAK,CAAU,CAAC,EAAI,AAAC,EAGzF,ECNA,EAAoB,CAAC,CAAG,CAAC,EAAK,IAAUC,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GCClF,EAAoB,CAAC,CAAG,AAACD,IACrB,AAAkB,aAAlB,OAAOE,QAA0BA,OAAO,WAAW,EACrDD,OAAO,cAAc,CAACD,EAASE,OAAO,WAAW,CAAE,CAAE,MAAO,QAAS,GAEtED,OAAO,cAAc,CAACD,EAAS,aAAc,CAAE,MAAO,EAAK,EAC5D,E,0ECYA,IAAMG,EAAY,IAAIC,UAAU,SAAS,CAUzCC,MAAM,gCAAgC,IAAI,CAAC,MAAOC,IACjDF,UAAU,OAAO,CAAC,MAAME,EAAK,WAAW,GACzC,GAEO,IAAMC,EAAiB,CAC7B,OAAQ,SACR,gBAAiB,mBACjB,WAAY,mCACZ,aAAc,wBACd,SAAU,8BACX,EAEMC,EAAM,CACX,MAAO,CACN,GAAGJ,UAAU,aAAa,CAAC,KAAK,CAChC,sBAAuB,EACxB,EACA,YAAa,CAAC,YAAa,mBAAmB,AAC/C,EAIIK,EAA6B,KAEjC,SAASC,IACR,OAAOC,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,SAAS,CAAC,EAAG,GAChD,CAEA,IAAMC,EAAc,AAACC,GACpB,AAAKA,EAEEC,mBAAmBD,GAFTA,EAKZE,EAAc,AAACF,GACpB,AAAKA,EAEEG,mBAAmBH,GAFTA,CASX,OAAMI,E,IACZ,GAAW,AACX,OAAe,AACf,QAAkB,EAAE,AAAC,AACrB,WAAY,IAAIb,UAAU,SAAS,AAAG,AAEtC,IAAyC,AACjC,MAAqB,AACrB,aAA0B,AAElC,UAA0B,AAElB,SAA8C,CACrD,MAAO,UACN,IAAI,CAAC,YAAY,EAClB,EACA,QAAS,MAAOrB,IACf,GAAI,CACH,IAAImC,EAAO,IAAIC,IAAIpC,EAAK,MAAM,EAAE,QAAQ,CAClCqC,EAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,AAACC,GAAMH,EAAK,UAAU,CAACG,EAAE,MAAM,GAC9D,GAAI,CAACD,EAAO,MAAM,AAAI9B,MAAM,8BAE5B,GAAI4B,IAASE,EAAM,MAAM,CAAGb,EAAO,eAAe,CAAE,CACnD,GAAI,CAACE,EAAa,CACjB,IAAMH,EAAO,MAAMD,MAAME,EAAO,QAAQ,EAClCe,EAAM,MAAMhB,EAAK,WAAW,GAC5BiB,EAAMC,KACX,IAAIC,WAAWH,GACb,MAAM,CACN,CAACvC,EAAM2C,IAAU3C,CAAAA,EAAK,IAAI,CAAC4C,OAAO,YAAY,CAACD,IAAQ3C,CAAG,EAC1D,EAAE,EAEF,IAAI,CAAC,KAGJ6C,EAAU,GAGdA,GAAW,CAAC;aAAa,EAAEL,EAAI,EAAE,CAAC,CAClCd,EAAcmB,CACf,CAEA,MAAO,CACN,CACC,KAAMnB,EACN,OAAQ,IACR,WAAY,KACZ,QAAS,CACR,eAAgB,CAAC,yBAAyB,AAC3C,CACD,EACA,EAAE,CACF,AACF,CAEA,IAAIoB,EAAYzB,UAAU,eAAe,CAAC,cAAc,CACvDrB,EAAK,cAAc,EAGd+C,EAAgB,MAAMV,EAAM,YAAY,CAAC,WAAW,CAAC,CAC1D,eAAgBS,EAChB,aAAc9C,EAAK,YAAY,CAC5B,IAAIoC,IAAIpC,EAAK,YAAY,EACzBM,OACH,OAAQ,IAAI8B,IAAIpC,EAAK,MAAM,EAC3B,YAAaA,EAAK,WAAW,CAC7B,OAAQA,EAAK,MAAM,CACnB,KAAMA,EAAK,IAAI,CACf,SAAUA,EAAK,QAAQ,CACvB,KAAMA,EAAK,IAAI,CACf,MAAOA,EAAK,KAAK,AAClB,GAEA,MAAO,CACN,CACC,KAAM+C,EAAc,IAAI,CACxB,OAAQA,EAAc,MAAM,CAC5B,WAAYA,EAAc,UAAU,CACpC,QAASA,EAAc,OAAO,CAAC,YAAY,EAC5C,EACAA,EAAc,IAAI,YAAYC,gBAC9BD,EAAc,IAAI,YAAYE,YAC3B,CAACF,EAAc,IAAI,CAAC,CACpB,EAAE,CACL,AACF,CAAE,MAAO9B,EAAG,CAEX,MADAL,QAAQ,KAAK,CAAC,uCAAwCK,GAChDA,CACP,CACD,EACA,oBAAqB,MAAOiC,IAC3B,IAAMC,EAAM,IAAIxD,EAAAA,CAASA,CACxB,CACC,QAAS,MAAO,CAAEyD,OAAAA,CAAM,CAAE5C,OAAAA,CAAM,CAAE6C,KAAAA,CAAI,CAAEC,QAAAA,CAAO,CAAE,IAChD,IAAIC,EAAW,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAC1C,IAAInB,IAAIgB,GACR5C,EACA6C,EACAC,EACAhD,QAED,MAAO,CAACiD,EAAU,CAACA,EAAS,IAAI,CAAC,CAAC,AACnC,EACA,QAAS,MAAO,CAAEzB,IAAAA,CAAG,CAAE0B,UAAAA,CAAS,CAAEC,eAAAA,CAAc,CAAEP,KAAAA,CAAI,CAAE,IAEvD,IADInC,EACA2C,EAAU,IAAI5C,QACjB,AAAC6C,GAAS5C,EAAU4C,GAEf,CAACC,EAAMC,EAAM,CAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3C,IAAIzB,IAAIN,GACR0B,EACAC,EACA,AAACK,IACA/C,EAAQ,CACP,OAAQ,UACR,SAAU+C,CACX,EACD,EACA,AAAC9D,IACAkD,EAAK,WAAW,CACf,CACC,KAAM,OACN,KAAMlD,CACP,EACAA,aAAgBiD,YAAc,CAACjD,EAAK,CAAG,EAAE,CAE3C,EACA,CAAC6D,EAAOE,KACPb,EAAK,WAAW,CAAC,CAChB,KAAM,QACN,KAAMW,EACN,OAAQE,CACT,EACD,EACA,AAAC3D,IACAW,EAAQ,CACP,OAAQ,UACR,MAAOX,CACR,EACD,GAgBD,OAdA8C,EAAK,cAAc,CAAG,AAACc,IACtBpD,QAAQ,KAAK,CACZ,0DACAoD,EAEF,EACAd,EAAK,SAAS,CAAG,CAAC,CAAElD,KAAAA,CAAI,CAA8B,IACjDA,AAAc,SAAdA,EAAK,IAAI,CACZ4D,EAAK5D,EAAK,IAAI,EACJA,AAAc,UAAdA,EAAK,IAAI,EACnB6D,EAAM7D,EAAK,IAAI,CAAEA,EAAK,MAAM,CAE9B,EAEO,CAAC,MAAM0D,EAAS,EAAE,CAAC,AAC3B,CACD,EACA,YACA,CAAC1D,EAAMa,IAAaqC,EAAK,WAAW,CAAClD,EAAMa,GAE5CqC,CAAAA,EAAK,cAAc,CAAG,AAACc,IACtBpD,QAAQ,KAAK,CACZ,0DACAoD,EAEF,EACAd,EAAK,SAAS,CAAG,AAACjC,IACjBkC,EAAI,OAAO,CAAClC,EAAE,IAAI,CACnB,EACAkC,EAAI,IAAI,CAAC,QAAS7C,OAAW,EAAE,CAChC,EACA,cAAe,MAAO,CAAEwB,IAAAA,CAAG,CAAEmC,OAAAA,CAAM,CAAE,IAAM,CAC5C,CAAE,AAEF,aAAmBC,CAAoB,CAAE,C,KAAtBA,IAAI,CAAJA,EAClB,IAAI,CAAC,SAAS,CAAGA,EAAK,SAAS,CAC/B,IAAI,CAAC,EAAE,CAAGvC,IACV,IAAI,CAAC,MAAM,CAAGH,EAAO,MAAM,CAAG,IAAI,CAAC,EAAE,CAAG,IAExC,IAAI,CAAC,KAAK,CAAG,IAAIV,QAAc,AAACC,IAC/B,IAAI,CAAC,YAAY,CAAGA,CACrB,GAEA,IAAIoD,EAAU,IAAIC,cAClB,KAAI,CAAC,GAAG,CAAG,IAAIzE,EAAAA,CAASA,CACvB,IAAI,CAAC,OAAO,CACZ,cAAgB,IAAI,CAAC,EAAE,CACvB,CAACK,EAAMa,KACNsD,EAAQ,KAAK,CAAC,WAAW,CAACnE,EAAMa,EACjC,GAEDsD,EAAQ,KAAK,CAAC,gBAAgB,CAAC,UAAW,AAAClD,IAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,CAACA,EAAE,IAAI,CACxB,GACAkD,EAAQ,KAAK,CAAC,KAAK,GAEnBD,EAAK,aAAa,CAAC,WAAW,CAC7B,CACC,iBAAkB,CACjB,OAAQ1C,EAAO,MAAM,CAAG,IAAI,CAAC,EAAE,CAC/B,GAAI,IAAI,CAAC,EAAE,AACZ,CACD,EACA,CAAC2C,EAAQ,KAAK,CAAC,CAEjB,CAEA,YAAYE,CAA2B,CAAS,CAE/C,IAAMhC,EAAQ,IAAIiC,EAAM,IAAI,CAD5BD,IAAYE,SAAS,aAAa,CAAC,WAGnC,OADA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAClC,GACVA,CACR,CAEA,MAAsB,CACrB,OAAO,IAAI,CAAC,KAAK,AAClB,CACD,CAgCA,MAAMiC,E,kBACL,aAAkD,AAClD,GAAW,AACX,OAAe,AAEf,KAAI,SAAU,CACb,IAAIE,EAAQ,CACX,GAAGnD,UAAU,aAAa,CAC1B,GAAGI,CAAG,AACP,EACA,MAAO,CACNL,UAAAA,EACA,OAAQ,IAAIgB,IAAI,IAAI,CAAC,MAAM,CAAEqC,SAAS,IAAI,EAC1C,OAAQD,EACR,UAAW,CACV,iBAAkBE,AA7CtB,SAASA,EACRtD,CAAmC,CACnCI,CAAc,CACdmD,CAAuC,CACvCC,CAAW,EAEX,OAAO,SAA0BC,CAAI,CAAEC,CAAO,CAAEC,CAAM,EACrD,MAAO,CACNA,EAAOvD,EAAO,YAAY,EAC1BuD,EAAOvD,EAAO,UAAU,EACxBuD,EAAOH,EAAO,IAAI,CAAGpD,EAAO,eAAe,EAC3CuD,EACC,+BACCtC,KAAK;;;cAGI,EAAEuC,KAAK,SAAS,CAACxD,GAAQ;gBACvB,EAAEwD,KAAK,SAAS,CAACL,GAAU;eAC5B,EAAEvD,EAAU,IAAI,GAAG;uBACX,EAAEwD,EAAO,IAAI,CAAC;6BACR,EAAEF,EAAsB,QAAQ,GAAG;mBAC7C,EAAE7C,EAAY,QAAQ,GAAG;mBACzB,EAAEG,EAAY,QAAQ,GAAG;;IAExC,CAAC,GAEF,AACF,CACD,EAkBK,IAAI,CAAC,UAAU,CAAC,SAAS,CACzBR,EACA,CAAE,GAAGH,UAAU,aAAa,CAAE,GAAGI,CAAG,AAAC,EACrC,IAAIW,IAAI,IAAI,CAAC,MAAM,CAAEqC,SAAS,IAAI,GAEnC,uBAAwB,CAACI,EAAM3E,EAAM6E,KACpC,IAAIE,EAAM,GAmCV,OAjCAA,GAAOF,EAAOvD,EAAO,YAAY,EACjCyD,GAAOF,EAAO,IAAI,CAAC,MAAM,CAAGvD,EAAO,eAAe,EAClDyD,GAAO;;;;;;;uBAOW,EAAED,KAAK,SAAS,CAACR,GAAO;8BACjB,EAAE,IAAI,CAAC,MAAM,CAAC;;;;qBAIvB,EAAE3C,EAAY,QAAQ,GAAG;qBACzB,EAAEG,EAAY,QAAQ,GAAG;;;;;;;;;;;;;;;;KAgBzC,CAAC,AAGF,EACAH,YAAAA,EACAG,YAAAA,CACD,CACD,CACD,CAEA,YACQkD,CAAsB,CACtBb,CAA0B,CAChC,C,KAFMa,UAAU,CAAVA,E,KACAb,OAAO,CAAPA,EAEP,IAAI,CAAC,EAAE,CAAG1C,IACV,IAAI,CAAC,MAAM,CAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAG,IAAI,CAAC,EAAE,CAAG,IAEjD,IAAI,CAAC,YAAY,CAAG,IAAIN,UAAU,oBAAoB,CAAC,CACtD,oBAAqB8D,KAAK,mBAAmB,CAC7C,QAAS,IAAI,CAAC,OAAO,CACrB,UAAWD,EAAW,SAAS,CAC/B,MAAM,cAAcpD,CAAG,CAAEmC,CAAM,EAAG,EAC5B,aAAN,MAAmBnC,GACV,MAAMR,MAAMQ,GAEf,aAAN,MAAmBA,GACV,MAAMR,MAAMQ,EAEtB,EACD,CAEA,GAAGA,CAAW,CAAE,CACf,IAAMsD,EAAU/D,UAAU,UAAU,CAACS,EAAK,IAAI,CAAC,OAAO,CAAE,CACvD,OAAQ,IAAIM,IAAIqC,SAAS,IAAI,EAC7B,KAAM,IAAIrC,IAAIqC,SAAS,IAAI,CAC5B,EACA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAGW,CACpB,CACD,C"}