@mercuryworkshop/scramjet-controller 0.0.3 → 0.0.5
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/dist/controller.api.js +14 -440
- package/dist/controller.api.js.map +1 -1
- package/dist/controller.inject.js +1 -307
- package/dist/controller.inject.js.map +1 -1
- package/dist/controller.sw.js +1 -275
- package/dist/controller.sw.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.sw.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/sw.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};","declare var clients: Clients;\nimport { RpcHelper } from \"@mercuryworkshop/rpc\";\nimport type { Controllerbound, SWbound } from \"./types\";\nimport type { RawHeaders } from \"@mercuryworkshop/proxy-transports\";\nimport { ScramjetHeaders } from \"@mercuryworkshop/scramjet\";\n\nfunction makeId(): string {\n\treturn Math.random().toString(36).substring(2, 10);\n}\n\nlet cookieResolvers: Record<string, (value: void) => void> = {};\naddEventListener(\"message\", (e) => {\n\tif (!e.data) return;\n\tif (typeof e.data != \"object\") return;\n\tif (e.data.$sw$setCookieDone && typeof e.data.$sw$setCookieDone == \"object\") {\n\t\tconst done = e.data.$sw$setCookieDone;\n\n\t\tconst resolver = cookieResolvers[done.id];\n\t\tif (resolver) {\n\t\t\tresolver();\n\t\t\tdelete cookieResolvers[done.id];\n\t\t}\n\t}\n\n\tif (\n\t\te.data.$sw$initRemoteTransport &&\n\t\ttypeof e.data.$sw$initRemoteTransport == \"object\"\n\t) {\n\t\tconst { port, prefix } = e.data.$sw$initRemoteTransport;\n\n\t\tconsole.error(prefix, tabs);\n\t\tconst relevantcontroller = tabs.find((tab) =>\n\t\t\tnew URL(prefix).pathname.startsWith(tab.prefix)\n\t\t);\n\t\tif (!relevantcontroller) {\n\t\t\tconsole.error(\"No relevant controller found for transport init\");\n\t\t\treturn;\n\t\t}\n\t\trelevantcontroller.rpc.call(\"initRemoteTransport\", port, [port]);\n\t}\n});\n\nclass ControllerReference {\n\trpc: RpcHelper<SWbound, Controllerbound>;\n\n\tconstructor(\n\t\tpublic prefix: string,\n\t\tpublic id: string,\n\t\tport: MessagePort\n\t) {\n\t\tthis.rpc = new RpcHelper(\n\t\t\t{\n\t\t\t\tsendSetCookie: async ({ url, cookie }) => {\n\t\t\t\t\tlet clients = await self.clients.matchAll();\n\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\tfor (const client of clients) {\n\t\t\t\t\t\tlet id = makeId();\n\t\t\t\t\t\tclient.postMessage({\n\t\t\t\t\t\t\t$controller$setCookie: {\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises.push(\n\t\t\t\t\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\t\t\t\t\tcookieResolvers[id] = resolve;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\tnew Promise<void>((resolve) =>\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\t\"timed out waiting for set cookie response (deadlock?)\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}, 1000)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"tabchannel-\" + id,\n\t\t\t(data, transfer) => {\n\t\t\t\tport.postMessage(data, transfer);\n\t\t\t}\n\t\t);\n\t\tport.addEventListener(\"message\", (e) => {\n\t\t\tthis.rpc.recieve(e.data);\n\t\t});\n\t\tport.onmessageerror = console.error;\n\n\t\tthis.rpc.call(\"ready\", null);\n\t}\n}\n\nconst tabs: ControllerReference[] = [];\n\naddEventListener(\"message\", (e) => {\n\tif (!e.data) return;\n\tif (typeof e.data != \"object\") return;\n\tif (!e.data.$controller$init) return;\n\tif (typeof e.data.$controller$init != \"object\") return;\n\tconst init = e.data.$controller$init;\n\n\ttabs.push(new ControllerReference(init.prefix, init.id, e.ports[0]));\n});\n\nexport function shouldRoute(event: FetchEvent): boolean {\n\tconst url = new URL(event.request.url);\n\tconst tab = tabs.find((tab) => url.pathname.startsWith(tab.prefix));\n\treturn tab !== undefined;\n}\n\nexport async function route(event: FetchEvent): Promise<Response> {\n\ttry {\n\t\tconst url = new URL(event.request.url);\n\t\tconst tab = tabs.find((tab) => url.pathname.startsWith(tab.prefix))!;\n\t\tconst client = await clients.get(event.clientId);\n\n\t\tconst rawheaders: RawHeaders = [...event.request.headers];\n\n\t\tconst response = await tab.rpc.call(\n\t\t\t\"request\",\n\t\t\t{\n\t\t\t\trawUrl: event.request.url,\n\t\t\t\tdestination: event.request.destination,\n\t\t\t\tmode: event.request.mode,\n\t\t\t\treferrer: event.request.referrer,\n\t\t\t\tmethod: event.request.method,\n\t\t\t\tbody: event.request.body,\n\t\t\t\tcache: event.request.cache,\n\t\t\t\tforceCrossOriginIsolated: false,\n\t\t\t\tinitialHeaders: rawheaders,\n\t\t\t\trawClientUrl: client ? client.url : undefined,\n\t\t\t},\n\t\t\tevent.request.body instanceof ReadableStream ||\n\t\t\t\t// @ts-expect-error the types for fetchevent are messed up\n\t\t\t\tevent.request.body instanceof ArrayBuffer\n\t\t\t\t? [event.request.body]\n\t\t\t\t: undefined\n\t\t);\n\n\t\treturn new Response(response.body, {\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\theaders: response.headers,\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Service Worker error:\", e);\n\t\treturn new Response(\n\t\t\t\"Internal Service Worker Error: \" + (e as Error).message,\n\t\t\t{\n\t\t\t\tstatus: 500,\n\t\t\t}\n\t\t);\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","makeId","Math","cookieResolvers","addEventListener","e","done","resolver","port","prefix","tabs","relevantcontroller","tab","URL","ControllerReference","url","cookie","clients1","self","promises","client","setTimeout","init","shouldRoute","event","route","clients","rawheaders","response","ReadableStream","ArrayBuffer","Response"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"controller.sw.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/sw.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};","declare var clients: Clients;\nimport { RpcHelper } from \"@mercuryworkshop/rpc\";\nimport type { Controllerbound, SWbound } from \"./types\";\nimport type { RawHeaders } from \"@mercuryworkshop/proxy-transports\";\nimport { ScramjetHeaders } from \"@mercuryworkshop/scramjet\";\n\nfunction makeId(): string {\n\treturn Math.random().toString(36).substring(2, 10);\n}\n\nlet cookieResolvers: Record<string, (value: void) => void> = {};\naddEventListener(\"message\", (e) => {\n\tif (!e.data) return;\n\tif (typeof e.data != \"object\") return;\n\tif (e.data.$sw$setCookieDone && typeof e.data.$sw$setCookieDone == \"object\") {\n\t\tconst done = e.data.$sw$setCookieDone;\n\n\t\tconst resolver = cookieResolvers[done.id];\n\t\tif (resolver) {\n\t\t\tresolver();\n\t\t\tdelete cookieResolvers[done.id];\n\t\t}\n\t}\n\n\tif (\n\t\te.data.$sw$initRemoteTransport &&\n\t\ttypeof e.data.$sw$initRemoteTransport == \"object\"\n\t) {\n\t\tconst { port, prefix } = e.data.$sw$initRemoteTransport;\n\n\t\tconsole.error(prefix, tabs);\n\t\tconst relevantcontroller = tabs.find((tab) =>\n\t\t\tnew URL(prefix).pathname.startsWith(tab.prefix)\n\t\t);\n\t\tif (!relevantcontroller) {\n\t\t\tconsole.error(\"No relevant controller found for transport init\");\n\t\t\treturn;\n\t\t}\n\t\trelevantcontroller.rpc.call(\"initRemoteTransport\", port, [port]);\n\t}\n});\n\nclass ControllerReference {\n\trpc: RpcHelper<SWbound, Controllerbound>;\n\n\tconstructor(\n\t\tpublic prefix: string,\n\t\tpublic id: string,\n\t\tport: MessagePort\n\t) {\n\t\tthis.rpc = new RpcHelper(\n\t\t\t{\n\t\t\t\tsendSetCookie: async ({ url, cookie }) => {\n\t\t\t\t\tlet clients = await self.clients.matchAll();\n\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\tfor (const client of clients) {\n\t\t\t\t\t\tlet id = makeId();\n\t\t\t\t\t\tclient.postMessage({\n\t\t\t\t\t\t\t$controller$setCookie: {\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises.push(\n\t\t\t\t\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\t\t\t\t\tcookieResolvers[id] = resolve;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\tnew Promise<void>((resolve) =>\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\t\"timed out waiting for set cookie response (deadlock?)\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}, 1000)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"tabchannel-\" + id,\n\t\t\t(data, transfer) => {\n\t\t\t\tport.postMessage(data, transfer);\n\t\t\t}\n\t\t);\n\t\tport.addEventListener(\"message\", (e) => {\n\t\t\tthis.rpc.recieve(e.data);\n\t\t});\n\t\tport.onmessageerror = console.error;\n\n\t\tthis.rpc.call(\"ready\", null);\n\t}\n}\n\nconst tabs: ControllerReference[] = [];\n\naddEventListener(\"message\", (e) => {\n\tif (!e.data) return;\n\tif (typeof e.data != \"object\") return;\n\tif (!e.data.$controller$init) return;\n\tif (typeof e.data.$controller$init != \"object\") return;\n\tconst init = e.data.$controller$init;\n\n\ttabs.push(new ControllerReference(init.prefix, init.id, e.ports[0]));\n});\n\nexport function shouldRoute(event: FetchEvent): boolean {\n\tconst url = new URL(event.request.url);\n\tconst tab = tabs.find((tab) => url.pathname.startsWith(tab.prefix));\n\treturn tab !== undefined;\n}\n\nexport async function route(event: FetchEvent): Promise<Response> {\n\ttry {\n\t\tconst url = new URL(event.request.url);\n\t\tconst tab = tabs.find((tab) => url.pathname.startsWith(tab.prefix))!;\n\t\tconst client = await clients.get(event.clientId);\n\n\t\tconst rawheaders: RawHeaders = [...event.request.headers];\n\n\t\tconst response = await tab.rpc.call(\n\t\t\t\"request\",\n\t\t\t{\n\t\t\t\trawUrl: event.request.url,\n\t\t\t\tdestination: event.request.destination,\n\t\t\t\tmode: event.request.mode,\n\t\t\t\treferrer: event.request.referrer,\n\t\t\t\tmethod: event.request.method,\n\t\t\t\tbody: event.request.body,\n\t\t\t\tcache: event.request.cache,\n\t\t\t\tforceCrossOriginIsolated: false,\n\t\t\t\tinitialHeaders: rawheaders,\n\t\t\t\trawClientUrl: client ? client.url : undefined,\n\t\t\t},\n\t\t\tevent.request.body instanceof ReadableStream ||\n\t\t\t\t// @ts-expect-error the types for fetchevent are messed up\n\t\t\t\tevent.request.body instanceof ArrayBuffer\n\t\t\t\t? [event.request.body]\n\t\t\t\t: undefined\n\t\t);\n\n\t\treturn new Response(response.body, {\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\theaders: response.headers,\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Service Worker error:\", e);\n\t\treturn new Response(\n\t\t\t\"Internal Service Worker Error: \" + (e as Error).message,\n\t\t\t{\n\t\t\t\tstatus: 500,\n\t\t\t}\n\t\t);\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","cookieResolvers","addEventListener","done","resolver","port","prefix","tabs","relevantcontroller","tab","URL","ControllerReference","url","cookie","clients1","self","promises","client","Math","setTimeout","shouldRoute","event","route","clients","rawheaders","response","ReadableStream","ArrayBuffer","Response","init"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mercuryworkshop/scramjet-controller",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@mercuryworkshop/proxy-transports": "1.0.2",
|
|
8
|
-
"@mercuryworkshop/
|
|
9
|
-
"@mercuryworkshop/
|
|
8
|
+
"@mercuryworkshop/scramjet": "2.0.1-alpha",
|
|
9
|
+
"@mercuryworkshop/rpc": "0.0.1"
|
|
10
10
|
}
|
|
11
11
|
}
|