lucent-pack 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/httpuv/constants.ts","../node_modules/comlink/src/comlink.ts","../src/httpuv/comlink.ts","../src/httpuv/debug.ts","../src/httpuv/prefix.ts","../src/httpuv/htmlwidget-deps-patch.ts","../src/httpuv/sw.ts"],"names":["obj","returnValue","proxy"],"mappings":"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","file":"httpuv-sw.js","sourcesContent":["/** WebSocket frame types used by httpuv (mirrors native httpuv). */\nexport const WS_FRAME = {\n SEND: \"websocket.send\",\n CLOSE: \"websocket.close\",\n} as const;\n\n/** R_HOME inside the mounted wasm prefix (VFS root is /). */\nexport const WASM_R_HOME = \"/lib/R\";\n\n/** Max time the service worker waits for the R worker to answer a request. */\nexport const REQUEST_TIMEOUT_MS = 180_000;\n\n/** Message types exchanged between the service worker and the main page. */\nexport const MSG = {\n REGISTER_HOST: \"httpuv_register_host\",\n HTTP_REQUEST: \"httpuv_http_request\",\n HTTP_RESPONSE: \"httpuv_http_response\",\n WS_PUSH: \"httpuv_ws_push\",\n /** Iframe → SW (on session port): frame delivered to Shiny.createSocket. */\n WS_PUSH_ACK: \"httpuv_ws_push_ack\",\n STOP: \"httpuv_stop\",\n /** Drop cached GET /shiny/ without tearing down the R worker (app restart). */\n CLEAR_APP_CACHE: \"httpuv_clear_app_cache\",\n /** Host -> SW: full shiny::resourcePaths() map (warmup). */\n REGISTER_RESOURCE_PATHS: \"httpuv_register_resource_paths\",\n /** Host -> SW: upsert or remove one addResourcePath prefix (empty dir removes). */\n UPDATE_RESOURCE_PATH: \"httpuv_update_resource_path\",\n /** SW -> host: Comlink to the R worker was lost (e.g. after SW update). */\n REQUEST_COMLINK: \"httpuv_request_comlink\",\n /** Iframe → SW: transfer a MessagePort for session WS push delivery. */\n REGISTER_SESSION: \"httpuv_register_session\",\n /** SW → iframe (on session port): registration accepted. */\n SESSION_ACK: \"httpuv_session_ack\",\n /** SW → iframe client: session MessagePort was lost (e.g. SW idle restart); re-REGISTER_SESSION. */\n REQUEST_SESSION_PORT: \"httpuv_request_session_port\",\n} as const;\n\n/** Bypass SW app-document cache (warmup must hit R so deps register). */\nexport const WARMUP_REQUEST_HEADER = \"X-Shiny-Forge-Warmup\";\n\n/** Message types on Module.httpuv.channel (R <-> JS bridge). */\nexport const CHANNEL = {\n HTTP_REQUEST: \"httpuv_http_request\",\n TCP_RESPONSE: \"httpuv_tcp_response\",\n WS_OPEN: \"httpuv_ws_open\",\n WS_MESSAGE: \"httpuv_ws_message\",\n WS_CLOSE: \"httpuv_ws_close\",\n WS_RESPONSE: \"httpuv_ws_response\",\n STDIN: \"stdin\",\n} as const;\n\n/** R option names registered by httpuv::startServer(). */\nexport const HTTPUV_OPTIONS = {\n ON_REQUEST: \"httpuv_onRequest\",\n ON_WS_OPEN: \"httpuv_onWSOpen\",\n ON_WS_MESSAGE: \"httpuv_onWSMessage\",\n ON_WS_CLOSE: \"httpuv_onWSClose\",\n} as const;\n\n/** Comlink MessagePort handshake between host page, service worker, and R worker. */\nexport const COMLINK = {\n PORT_HANDOFF: \"httpuv_comlink_port\",\n /**\n * SW -> host: the handoff port arrived. Sent before the Comlink round-trip so\n * the host can distinguish a dropped handoff (worker evicted mid-boot) from an\n * R worker that never finished setup.\n */\n PORT_HANDOFF_ACK: \"httpuv_comlink_port_ack\",\n} as const;\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Endpoint,\n EventSource,\n Message,\n MessageType,\n PostMessageWithOrigin,\n WireValue,\n WireValueType,\n} from \"./protocol\";\nexport type { Endpoint };\n\nexport const proxyMarker = Symbol(\"Comlink.proxy\");\nexport const createEndpoint = Symbol(\"Comlink.endpoint\");\nexport const releaseProxy = Symbol(\"Comlink.releaseProxy\");\nexport const finalizer = Symbol(\"Comlink.finalizer\");\n\nconst throwMarker = Symbol(\"Comlink.thrown\");\n\n/**\n * Interface of values that were marked to be proxied with `comlink.proxy()`.\n * Can also be implemented by classes.\n */\nexport interface ProxyMarked {\n [proxyMarker]: true;\n}\n\n/**\n * Takes a type and wraps it in a Promise, if it not already is one.\n * This is to avoid `Promise<Promise<T>>`.\n *\n * This is the inverse of `Unpromisify<T>`.\n */\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>;\n/**\n * Takes a type that may be Promise and unwraps the Promise type.\n * If `P` is not a Promise, it returns `P`.\n *\n * This is the inverse of `Promisify<T>`.\n */\ntype Unpromisify<P> = P extends Promise<infer T> ? T : P;\n\n/**\n * Takes the raw type of a remote property and returns the type that is visible to the local thread on the proxy.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions.\n * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype RemoteProperty<T> =\n // If the value is a method, comlink will proxy it automatically.\n // Objects are only proxied if they are marked to be proxied.\n // Otherwise, the property is converted to a Promise that resolves the cloned value.\n T extends Function | ProxyMarked ? Remote<T> : Promisify<T>;\n\n/**\n * Takes the raw type of a property as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This is the inverse of `RemoteProperty<T>`.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions. See\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype LocalProperty<T> = T extends Function | ProxyMarked\n ? Local<T>\n : Unpromisify<T>;\n\n/**\n * Proxies `T` if it is a `ProxyMarked`, clones it otherwise (as handled by structured cloning and transfer handlers).\n */\nexport type ProxyOrClone<T> = T extends ProxyMarked ? Remote<T> : T;\n/**\n * Inverse of `ProxyOrClone<T>`.\n */\nexport type UnproxyOrClone<T> = T extends RemoteObject<ProxyMarked>\n ? Local<T>\n : T;\n\n/**\n * Takes the raw type of a remote object in the other thread and returns the type as it is visible to the local thread\n * when proxied with `Comlink.proxy()`.\n *\n * This does not handle call signatures, which is handled by the more general `Remote<T>` type.\n *\n * @template T The raw type of a remote object as seen in the other thread.\n */\nexport type RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> };\n/**\n * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This does not handle call signatures, which is handled by the more general `Local<T>` type.\n *\n * This is the inverse of `RemoteObject<T>`.\n *\n * @template T The type of a proxied object.\n */\nexport type LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> };\n\n/**\n * Additional special comlink methods available on each proxy returned by `Comlink.wrap()`.\n */\nexport interface ProxyMethods {\n [createEndpoint]: () => Promise<MessagePort>;\n [releaseProxy]: () => void;\n}\n\n/**\n * Takes the raw type of a remote object, function or class in the other thread and returns the type as it is visible to\n * the local thread from the proxy return value of `Comlink.wrap()` or `Comlink.proxy()`.\n */\nexport type Remote<T> =\n // Handle properties\n RemoteObject<T> &\n // Handle call signature (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>;\n }\n ): Promisify<Remote<TInstance>>;\n }\n : unknown) &\n // Include additional special comlink methods available on the proxy.\n ProxyMethods;\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T;\n\n/**\n * Takes the raw type of a remote object, function or class as a remote thread would see it through a proxy (e.g. when\n * passed in as a function argument) and returns the type the local thread has to supply.\n *\n * This is the inverse of `Remote<T>`. It takes a `Remote<T>` and returns its original input `T`.\n */\nexport type Local<T> =\n // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n Omit<LocalObject<T>, keyof ProxyMethods> &\n // Handle call signatures (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n ) => // The raw function could either be sync or async, but is always proxied automatically\n MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: ProxyOrClone<TArguments[I]>;\n }\n ): // The raw constructor could either be sync or async, but is always proxied automatically\n MaybePromise<Local<Unpromisify<TInstance>>>;\n }\n : unknown);\n\nconst isObject = (val: unknown): val is object =>\n (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n\n/**\n * Customizes the serialization of certain values as determined by `canHandle()`.\n *\n * @template T The input type being handled by this transfer handler.\n * @template S The serialized type sent over the wire.\n */\nexport interface TransferHandler<T, S> {\n /**\n * Gets called for every value to determine whether this transfer handler\n * should serialize the value, which includes checking that it is of the right\n * type (but can perform checks beyond that as well).\n */\n canHandle(value: unknown): value is T;\n\n /**\n * Gets called with the value if `canHandle()` returned `true` to produce a\n * value that can be sent in a message, consisting of structured-cloneable\n * values and/or transferrable objects.\n */\n serialize(value: T): [S, Transferable[]];\n\n /**\n * Gets called to deserialize an incoming value that was serialized in the\n * other thread with this transfer handler (known through the name it was\n * registered under).\n */\n deserialize(value: S): T;\n}\n\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler: TransferHandler<object, MessagePort> = {\n canHandle: (val): val is ProxyMarked =>\n isObject(val) && (val as ProxyMarked)[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n\ninterface ThrownValue {\n [throwMarker]: unknown; // just needs to be present\n value: unknown;\n}\ntype SerializedThrownValue =\n | { isError: true; value: Error }\n | { isError: false; value: unknown };\ntype PendingListenersMap = Map<\n string,\n (value: WireValue | PromiseLike<WireValue>) => void\n>;\n\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler: TransferHandler<\n ThrownValue,\n SerializedThrownValue\n> = {\n canHandle: (value): value is ThrownValue =>\n isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized: SerializedThrownValue;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(\n new Error(serialized.value.message),\n serialized.value\n );\n }\n throw serialized.value;\n },\n};\n\n/**\n * Allows customizing the serialization of certain values.\n */\nexport const transferHandlers = new Map<\n string,\n TransferHandler<unknown, unknown>\n>([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\n\nfunction isAllowedOrigin(\n allowedOrigins: (string | RegExp)[],\n origin: string\n): boolean {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\n\nexport function expose(\n obj: any,\n ep: Endpoint = globalThis as any,\n allowedOrigins: (string | RegExp)[] = [\"*\"]\n) {\n ep.addEventListener(\"message\", function callback(ev: MessageEvent) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = {\n path: [] as string[],\n ...(ev.data as Message),\n };\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case MessageType.GET:\n {\n returnValue = rawValue;\n }\n break;\n case MessageType.SET:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case MessageType.APPLY:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case MessageType.CONSTRUCT:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case MessageType.ENDPOINT:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case MessageType.RELEASE:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n } catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage({ ...wireValue, id }, transferables);\n if (type === MessageType.RELEASE) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback as any);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage({ ...wireValue, id }, transferables);\n });\n } as any);\n if (ep.start) {\n ep.start();\n }\n}\n\nfunction isMessagePort(endpoint: Endpoint): endpoint is MessagePort {\n return endpoint.constructor.name === \"MessagePort\";\n}\n\nfunction closeEndPoint(endpoint: Endpoint) {\n if (isMessagePort(endpoint)) endpoint.close();\n}\n\nexport function wrap<T>(ep: Endpoint, target?: any): Remote<T> {\n const pendingListeners : PendingListenersMap = new Map();\n\n ep.addEventListener(\"message\", function handleMessage(ev: Event) {\n const { data } = ev as MessageEvent;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n\n try {\n resolver(data);\n } finally {\n pendingListeners.delete(data.id);\n }\n });\n\n return createProxy<T>(ep, pendingListeners, [], target) as any;\n}\n\nfunction throwIfProxyReleased(isReleased: boolean) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\n\nfunction releaseEndpoint(ep: Endpoint) {\n return requestResponseMessage(ep, new Map(), {\n type: MessageType.RELEASE,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\n\ninterface FinalizationRegistry<T> {\n new (cb: (heldValue: T) => void): FinalizationRegistry<T>;\n register(\n weakItem: object,\n heldValue: T,\n unregisterToken?: object | undefined\n ): void;\n unregister(unregisterToken: object): void;\n}\ndeclare var FinalizationRegistry: FinalizationRegistry<Endpoint>;\n\nconst proxyCounter = new WeakMap<Endpoint, number>();\nconst proxyFinalizers =\n \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep: Endpoint) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n\nfunction registerProxy(proxy: object, ep: Endpoint) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\n\nfunction unregisterProxy(proxy: object) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\n\nfunction createProxy<T>(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n path: (string | number | symbol)[] = [],\n target: object = function () {}\n): Remote<T> {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: MessageType.GET,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.SET,\n path: [...path, prop].map((p) => p.toString()),\n value,\n },\n transferables\n ).then(fromWireValue) as any;\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if ((last as any) === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: MessageType.ENDPOINT,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.APPLY,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.CONSTRUCT,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy as any;\n}\n\nfunction myFlat<T>(arr: (T | T[])[]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n\nfunction processArguments(argumentList: any[]): [WireValue[], Transferable[]] {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport function proxy<T extends {}>(obj: T): T & ProxyMarked {\n return Object.assign(obj, { [proxyMarker]: true }) as any;\n}\n\nexport function windowEndpoint(\n w: PostMessageWithOrigin,\n context: EventSource = globalThis,\n targetOrigin = \"*\"\n): Endpoint {\n return {\n postMessage: (msg: any, transferables: Transferable[]) =>\n w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\n\nfunction toWireValue(value: any): [WireValue, Transferable[]] {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: WireValueType.HANDLER,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: WireValueType.RAW,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\n\nfunction fromWireValue(value: WireValue): any {\n switch (value.type) {\n case WireValueType.HANDLER:\n return transferHandlers.get(value.name)!.deserialize(value.value);\n case WireValueType.RAW:\n return value.value;\n }\n}\n\nfunction requestResponseMessage(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n msg: Message,\n transfers?: Transferable[]\n): Promise<WireValue> {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage({ id, ...msg }, transfers);\n});\n}\n\nfunction generateUUID(): string {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n","import * as Comlink from \"comlink\";\nimport { MSG } from \"./constants\";\nimport type { HeaderMap } from \"./types\";\n\nexport interface HttpResponsePayload {\n uuid: string;\n status?: number;\n headers?: HeaderMap;\n body?: ArrayBuffer | Uint8Array | string | null;\n}\n\n/** API the service worker exposes to the R worker for outbound httpuv traffic. */\nexport interface SwDeliveryApi {\n /** HTTP only — WS pushes use a dedicated one-way MessagePort. */\n deliverHttpResponse(resp: HttpResponsePayload): void;\n}\n\n/** API the R worker exposes to the service worker for inbound httpuv traffic. */\nexport interface RHostApi {\n /**\n * @param port Comlink channel for HTTP responses\n * @param wsPushPort one-way channel for WS pushes (ordered postMessage, no reply)\n */\n registerSwDelivery(port: MessagePort, wsPushPort: MessagePort): void | Promise<void>;\n deliverHttpRequest(req: unknown): Promise<void>;\n getShinyResourcePaths(): Promise<Record<string, string>>;\n readVfsFile(vfsDir: string, suffix: string): Promise<ArrayBuffer | null>;\n readVfsFileAt(vfsPath: string): Promise<ArrayBuffer | null>;\n stop(): void | Promise<void>;\n}\n\n/**\n * Build the API exposed by the service worker for outbound httpuv traffic.\n * The delivery callback formats messages the SW can route back to fetch waiters.\n */\nexport function createSwDeliveryApi(deliverOutbound: (msg: object) => void): SwDeliveryApi {\n return {\n deliverHttpResponse(resp: HttpResponsePayload) {\n deliverOutbound({\n type: MSG.HTTP_RESPONSE,\n uuid: resp.uuid,\n status: resp.status ?? 500,\n headers: resp.headers ?? {},\n body: resp.body ?? null,\n });\n },\n };\n}\n\nexport { Comlink };\n","/**\n * Opt-in tracing for the httpuv / Shiny-Forge request pipeline.\n *\n * Enable with either:\n * - URL query: ?httpuvDebug=1\n * - localStorage: localStorage.shinyForgeDebug = \"1\"\n * - console: shinyForge.enableHttpuvDebug()\n */\nexport function isHttpuvDebug(): boolean {\n if (globalThis.__HTTPUV_DEBUG__) {\n return true;\n }\n try {\n if (typeof location !== \"undefined\") {\n const params = new URLSearchParams(location.search);\n if (params.has(\"httpuvDebug\") || params.get(\"debug\") === \"httpuv\") {\n return true;\n }\n }\n if (typeof localStorage !== \"undefined\" && localStorage.getItem(\"shinyForgeDebug\") === \"1\") {\n return true;\n }\n if (typeof self !== \"undefined\" && self.location?.href) {\n const params = new URL(self.location.href).searchParams;\n if (params.has(\"httpuvDebug\") || params.get(\"debug\") === \"httpuv\") {\n return true;\n }\n }\n } catch {\n // ignore\n }\n return false;\n}\n\nexport function httpuvDebugLog(stage: string, ...args: unknown[]): void {\n if (!isHttpuvDebug()) {\n return;\n }\n console.info(`[httpuv-debug:${stage}]`, ...args);\n}\n\nexport function enableHttpuvDebug(): void {\n globalThis.__HTTPUV_DEBUG__ = true;\n try {\n localStorage.setItem(\"shinyForgeDebug\", \"1\");\n } catch {\n // ignore\n }\n console.info(\n \"[httpuv-debug] enabled - reload or run shinyForge.enableHttpuvDebug() then re-run app\",\n );\n}\n","let shinyPrefix: string | null = null;\n\n/**\n * Resolve the virtual Shiny app prefix from a module script URL.\n * e.g. /site/runApp.js -> /site/shiny/\n */\nexport function resolveShinyPrefix(fromUrl: string | URL): string {\n const prefix = new URL(\"shiny/\", fromUrl).pathname;\n return prefix.endsWith(\"/\") ? prefix : `${prefix}/`;\n}\n\nexport function setShinyPrefix(prefix: string): void {\n shinyPrefix = prefix.endsWith(\"/\") ? prefix : `${prefix}/`;\n}\n\nexport function getShinyPrefix(): string {\n if (!shinyPrefix) {\n throw new Error(\"Shiny prefix not initialized\");\n }\n return shinyPrefix;\n}\n\n/** Session directory name under the Shiny virtual app prefix. */\nexport const SESSION_DIR = \"__session__\";\n\n/** Host -> SW outbound path (fetch fallback when controller.postMessage unavailable). */\nexport const HOST_DIR = \"__host__\";\n\nexport interface SessionAction {\n action: string;\n handle: string | null;\n}\n\n/**\n * Strip accidental JSON quoting from session handles (R/Comlink sometimes\n * double-encode UUID strings).\n */\nexport function normalizeSessionHandle(handle: unknown): string {\n let s = String(handle ?? \"\").trim();\n while (s.length >= 2 && s.startsWith('\"') && s.endsWith('\"')) {\n s = s.slice(1, -1);\n }\n return s;\n}\n\nexport function resolveSessionPrefix(fromUrl: string | URL): string {\n return `${resolveShinyPrefix(fromUrl)}${SESSION_DIR}/`;\n}\n\nexport function getSessionPrefix(): string {\n return `${getShinyPrefix()}${SESSION_DIR}/`;\n}\n\nexport function parseSessionAction(urlString: string, prefix: string): SessionAction | null {\n const url = new URL(urlString);\n const sessionPrefix = `${prefix}${SESSION_DIR}/`;\n if (!url.pathname.startsWith(sessionPrefix)) {\n return null;\n }\n const action = url.pathname.slice(sessionPrefix.length).replace(/\\/$/, \"\");\n if (![\"open\", \"send\", \"recv\", \"close\"].includes(action)) {\n return null;\n }\n const rawHandle = url.searchParams.get(\"handle\");\n return {\n action,\n handle: rawHandle ? normalizeSessionHandle(rawHandle) : null,\n };\n}\n\n/** Session HTTP actions handled by the R worker (not SW MessagePort delivery). */\nexport function isSessionHttpRequest(urlString: string, prefix?: string): boolean {\n if (prefix) {\n const session = parseSessionAction(urlString, prefix);\n return session !== null && session.action !== \"recv\";\n }\n return /\\/__session__\\/(open|send|close)(?:\\?|$|\\/)/.test(urlString);\n}\n\nexport function isHostPushUrl(urlString: string, prefix: string): boolean {\n const url = new URL(urlString);\n return url.pathname === `${prefix}${HOST_DIR}/push`;\n}\n\n/**\n * Build a same-origin URL under the Shiny virtual app prefix.\n * @param fromUrl defaults to this module's location when called from the main page\n */\nexport function shinyAppUrl(subpath = \"\", fromUrl: string | URL = import.meta.url): string {\n const base = new URL(\"shiny/\", fromUrl);\n return new URL(subpath.replace(/^\\//, \"\"), base).href;\n}\n","import type { PendingResponse } from \"./types\";\n\n/** Bump when the injected app-document script changes (invalidates SW HTML cache). */\nconst LUCENT_PATCH_VERSION = \"htmlwidget-async-v2\";\n\n/**\n * Chromium SW does not intercept sync XHR (jQuery._evalUrl). When widgets load\n * deps via async <script> tags, cache the bodies so a later sync _evalUrl can\n * still eval them. Also prefer Shiny.renderDependenciesAsync over sync loads.\n */\nconst HTMLWIDGET_ASYNC_DEPS_PATCH = `<script id=\"lucent-htmlwidget-async-deps\">(function(){\nwindow.__lucentEvalCache=window.__lucentEvalCache||{};\nfunction cacheScript(url,text){\n try{\n var abs=new URL(url,document.baseURI).href;\n window.__lucentEvalCache[abs]=text;\n window.__lucentEvalCache[url]=text;\n }catch(e){}\n}\n(function(){\n var ofetch=window.fetch;\n if(!ofetch)return;\n var oAppend=Element.prototype.appendChild;\n Element.prototype.appendChild=function(node){\n if(node&&node.tagName==='SCRIPT'&&node.src){\n var src=node.src;\n ofetch(src).then(function(r){return r.ok?r.text():null;}).then(function(t){if(t)cacheScript(src,t);}).catch(function(){});\n }\n return oAppend.apply(this,arguments);\n };\n})();\nfunction installEvalUrlPatch(){\n if(!window.jQuery||!jQuery._evalUrl||jQuery._evalUrl.__lucentPatched)return;\n var orig=jQuery._evalUrl;\n jQuery._evalUrl=function(url,options,doc){\n var abs;\n try{abs=new URL(url,document.baseURI).href;}catch(e){abs=url;}\n var cached=window.__lucentEvalCache[abs]||window.__lucentEvalCache[url];\n if(typeof cached==='string'){\n jQuery.globalEval(cached,options,doc);\n return {status:200,responseText:cached};\n }\n return orig.apply(this,arguments);\n };\n jQuery._evalUrl.__lucentPatched=1;\n}\nfunction wrap(binding){\n if(!binding||!binding.renderValue||binding.__lucentAsyncDeps)return;\n binding.__lucentAsyncDeps=1;\n try{\n if(binding.renderValue.constructor&&binding.renderValue.constructor.name==='AsyncFunction')return;\n }catch(e){}\n var rv=binding.renderValue.bind(binding);\n binding.renderValue=function(el,data){\n if(data&&data.x!=null&&data.deps&&data.deps.length){\n return Shiny.renderDependenciesAsync(data.deps).then(function(){return rv(el,data);});\n }\n return rv(el,data);\n };\n}\nfunction installBindingWrap(){\n if(!window.Shiny||!Shiny.outputBindings||!Shiny.renderDependenciesAsync)return;\n if(!Shiny.outputBindings.__lucentAsyncDepsReg){\n Shiny.outputBindings.__lucentAsyncDepsReg=1;\n var reg=Shiny.outputBindings.register.bind(Shiny.outputBindings);\n Shiny.outputBindings.register=function(binding,name){\n wrap(binding);\n return reg(binding,name);\n };\n }\n var list=Shiny.outputBindings.getBindings?Shiny.outputBindings.getBindings():[];\n for(var i=0;i<list.length;i++){\n wrap(list[i].binding||list[i]);\n }\n}\nfunction install(){\n installEvalUrlPatch();\n installBindingWrap();\n}\ninstall();\nvar n=0,t=setInterval(function(){install();if(++n>400)clearInterval(t);},5);\n})();</script>`;\n\nfunction responseBodyToText(body: PendingResponse[\"body\"]): string | null {\n if (body == null) {\n return null;\n }\n if (typeof body === \"string\") {\n return body;\n }\n if (body instanceof ArrayBuffer) {\n return new TextDecoder().decode(body);\n }\n if (ArrayBuffer.isView(body)) {\n return new TextDecoder().decode(body);\n }\n return null;\n}\n\nfunction isHtmlContentType(headers: Record<string, string> | undefined): boolean {\n if (!headers) {\n return false;\n }\n const ct = headers[\"content-type\"] ?? headers[\"Content-Type\"] ?? \"\";\n return ct.includes(\"text/html\");\n}\n\nexport function injectHtmlwidgetAsyncDepsPatch(html: string): string {\n let out = html.replace(/<script id=\"lucent-htmlwidget-async-deps\"[\\s\\S]*?<\\/script>\\s*/g, \"\");\n const patch = HTMLWIDGET_ASYNC_DEPS_PATCH.replace(\n 'id=\"lucent-htmlwidget-async-deps\"',\n `id=\"lucent-htmlwidget-async-deps\" data-lucent-patch=\"${LUCENT_PATCH_VERSION}\"`,\n );\n const shinyScript = out.match(/<script src=\"[^\"]*\\/shiny(?:\\.min)?\\.js\"><\\/script>/);\n if (shinyScript) {\n return out.replace(shinyScript[0], `${shinyScript[0]}\\n${patch}`);\n }\n if (out.includes(\"<head>\")) {\n return out.replace(\"<head>\", `<head>\\n${patch}`);\n }\n if (out.includes(\"</head>\")) {\n return out.replace(\"</head>\", `${patch}\\n</head>`);\n }\n return patch + out;\n}\n\nexport function maybePatchAppDocumentResponse(\n resp: PendingResponse,\n url: string,\n method: string,\n isAppDocument: (url: string) => boolean,\n): PendingResponse {\n if (method !== \"GET\" || resp.status !== 200 || !isAppDocument(url) || !isHtmlContentType(resp.headers)) {\n return resp;\n }\n const html = responseBodyToText(resp.body);\n if (!html || !html.includes(\"htmlwidgets\")) {\n return resp;\n }\n const patched = injectHtmlwidgetAsyncDepsPatch(html);\n if (patched === html) {\n return resp;\n }\n return {\n status: resp.status,\n headers: resp.headers,\n body: patched,\n };\n}\n","/// <reference lib=\"webworker\" />\nimport type { Remote } from \"comlink\";\nimport {\n COMLINK,\n MSG,\n REQUEST_TIMEOUT_MS,\n WASM_R_HOME,\n WARMUP_REQUEST_HEADER,\n WS_FRAME,\n} from \"./constants\";\nimport { Comlink, createSwDeliveryApi } from \"./comlink\";\nimport type { RHostApi } from \"./comlink\";\nimport { httpuvDebugLog } from \"./debug\";\nimport {\n isHostPushUrl,\n normalizeSessionHandle,\n parseSessionAction,\n resolveSessionPrefix,\n resolveShinyPrefix,\n} from \"./prefix\";\nimport { maybePatchAppDocumentResponse } from \"./htmlwidget-deps-patch\";\nimport type { HeaderMap, PendingResponse } from \"./types\";\n\n// `self` is typed as Window because the DOM lib is enabled for the other\n// entries; cast it to the service-worker global for this bundle.\nconst swSelf = self as unknown as ServiceWorkerGlobalScope;\n\n/**\n * Resolve the initial mount prefix without assuming the SW script location.\n * The bundle may live under /lucent/dist/ or as a root alias /httpuv-sw.js;\n * deriving the Shiny prefix from import.meta.url is wrong. Prefer an explicit\n * `?shinyPrefix=` on the registration URL; otherwise default to the origin\n * root, giving `/shiny/`. The host also confirms this via REGISTER_HOST.\n */\nfunction initialShinyPrefix(): string {\n try {\n const own = new URL(swSelf.location.href);\n const declared = own.searchParams.get(\"shinyPrefix\");\n if (declared) {\n return declared.endsWith(\"/\") ? declared : `${declared}/`;\n }\n } catch {\n // fall through to origin-root default\n }\n return resolveShinyPrefix(new URL(\"/\", swSelf.location.href).href);\n}\n\nconst SHINY_PREFIX = initialShinyPrefix();\nconst SESSION_PREFIX = resolveSessionPrefix(new URL(\"/\", swSelf.location.href).href);\nvoid SESSION_PREFIX;\n\n/** Host-announced prefix (defaults to the origin-root mount; updated via REGISTER_HOST). */\nlet shinyAppPrefix = SHINY_PREFIX;\n\nlet hostClientId: string | null = null;\n\nlet rwasmHost: Remote<RHostApi> | null = null;\n\ninterface RwasmHostReady {\n promise: Promise<Remote<RHostApi>>;\n resolve: (host: Remote<RHostApi>) => void;\n reject: (err: Error) => void;\n}\n\nfunction createRwasmHostReady(): RwasmHostReady {\n let resolve!: (host: Remote<RHostApi>) => void;\n let reject!: (err: Error) => void;\n const promise = new Promise<Remote<RHostApi>>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\n/** Pending waiters until Comlink connects or the handshake is reset/fails. */\nlet rwasmHostReady: RwasmHostReady = createRwasmHostReady();\n\ninterface WsPushMsg {\n wsType?: string;\n binary?: boolean;\n message?: unknown;\n}\n\ninterface HttpWaiter {\n resolve: (resp: PendingResponse) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n url: string;\n method: string;\n}\n\ninterface HostOutbound {\n type: string;\n uuid?: string;\n status?: number;\n headers?: HeaderMap;\n body?: ArrayBuffer | Uint8Array | string | null;\n handle?: string;\n binary?: boolean;\n wsType?: string;\n message?: unknown;\n}\n\nasync function connectSwToWorker(port: MessagePort): Promise<void> {\n const workerHost = Comlink.wrap<RHostApi>(port);\n const deliveryChannel = new MessageChannel();\n // One-way WS push port: ordered postMessage without Comlink request/response\n // (awaiting Comlink void hung Firefox; fire-and-forget raced Chromium).\n const wsPushChannel = new MessageChannel();\n Comlink.expose(\n createSwDeliveryApi((msg) => handleHostOutboundMessage(msg as HostOutbound)),\n deliveryChannel.port1,\n );\n wsPushChannel.port1.onmessage = (event: MessageEvent) => {\n const msg = event.data as HostOutbound;\n if (!msg || typeof msg !== \"object\" || typeof msg.type !== \"string\") {\n return;\n }\n handleHostOutboundMessage(msg);\n };\n wsPushChannel.port1.start();\n try {\n await workerHost.registerSwDelivery(\n Comlink.transfer(deliveryChannel.port2, [deliveryChannel.port2]),\n Comlink.transfer(wsPushChannel.port2, [wsPushChannel.port2]),\n );\n rwasmHost = workerHost;\n markRwasmHostReady();\n httpuvDebugLog(\"sw-comlink-connected\");\n } catch (err) {\n console.error(\"[httpuv-sw] Comlink unified setup failed\", err);\n const message = err instanceof Error ? err.message : String(err);\n resetRwasmHostWaiter(new Error(`R worker Comlink setup failed: ${message}`));\n }\n}\n\nfunction markRwasmHostReady(): void {\n if (!rwasmHost) {\n return;\n }\n rwasmHostReady.resolve(rwasmHost);\n}\n\n/**\n * Hard reset: drop the host and reject anyone waiting (activate / STOP / fatal\n * Comlink failure). Callers that need a reconnect should use\n * {@link rollRwasmHostWaiter} instead so in-flight fetches keep waiting.\n */\nfunction resetRwasmHostWaiter(reason?: Error): void {\n const previous = rwasmHostReady;\n rwasmHost = null;\n rwasmHostReady = createRwasmHostReady();\n previous.reject(reason ?? new Error(\"R worker Comlink not ready\"));\n}\n\n/**\n * Soft reset for PORT_HANDOFF: clear the live host and open a new waiter, but\n * forward settlement to the previous promise so warmup/fetch waiters are not\n * rejected mid-handshake (that produced instant HTTP 503 \"not ready\").\n */\nfunction rollRwasmHostWaiter(): void {\n const previous = rwasmHostReady;\n rwasmHost = null;\n rwasmHostReady = createRwasmHostReady();\n void rwasmHostReady.promise.then(\n (host) => {\n previous.resolve(host);\n },\n (err: unknown) => {\n previous.reject(err instanceof Error ? err : new Error(String(err)));\n },\n );\n}\n\nasync function waitForRwasmHost(): Promise<Remote<RHostApi>> {\n // Retry across soft handoffs: a PORT_HANDOFF may replace rwasmHostReady while\n // we are awaiting; permanent rejects (STOP / setup failure) still propagate.\n for (;;) {\n if (rwasmHost) {\n return rwasmHost;\n }\n const ready = rwasmHostReady;\n try {\n return await ready.promise;\n } catch (err) {\n if (rwasmHost) {\n return rwasmHost;\n }\n if (rwasmHostReady !== ready) {\n continue;\n }\n throw err;\n }\n }\n}\n\n/** Ask the Lucent host page to re-handshake Comlink MessagePorts. */\nasync function requestComlinkFromHost(): Promise<void> {\n // Broadcast to every window client. After an idle SW restart hostClientId is\n // gone, and Chromium often lists the focused /shiny/ iframe first — posting\n // only to clients[0] never reaches Lucent. The iframe ignores this message.\n const clients = await swSelf.clients.matchAll({\n type: \"window\",\n includeUncontrolled: true,\n });\n httpuvDebugLog(\"sw-request-comlink\", {\n clients: clients.length,\n hostClientId,\n urls: clients.map((c) => c.url),\n });\n for (const client of clients) {\n client.postMessage({ type: MSG.REQUEST_COMLINK });\n }\n}\n\nconst pendingHttp = new Map<string, HttpWaiter>();\n\n/** Per-session MessagePort for SW → iframe WS push delivery. */\nconst sessionPorts = new Map<string, MessagePort>();\n\n/** Iframe clientId that owns each session (for REQUEST_SESSION_PORT after SW idle). */\nconst sessionClientIds = new Map<string, string>();\n\n/** Frames that arrived before REGISTER_SESSION (mirrors old recv queue). */\nconst queuedWsPush = new Map<string, WsPushMsg[]>();\n\n/** Avoid spamming the client with re-register requests while one is in flight. */\nconst sessionPortReregisterPending = new Set<string>();\n\n/** Serialize SW→iframe WS posts and wait for client ACK (Chromium drops flooded ports). */\nconst sessionDeliverChain = new Map<string, Promise<void>>();\nconst pendingSessionAcks = new Map<number, { resolve: () => void; reject: (e: Error) => void }>();\nlet nextSessionPushId = 1;\n\n/** How long to wait for the iframe to ACK a WS_PUSH on the session port. */\nconst SESSION_PUSH_ACK_TIMEOUT_MS = 8_000;\n\n/** Cached GET /shiny/ document so warmup and iframe do not each trigger a full R render. */\nlet cachedAppDocument: PendingResponse | null = null;\n\n/** Bump when htmlwidget-deps-patch payload changes so SW cache cannot pin a stale inject. */\nconst LUCENT_APP_PATCH_VERSION = \"htmlwidget-async-v2\";\n\n/** addResourcePath prefix -> VFS directory (e.g. shiny-plots -> /tmp/shiny-plots). */\nlet shinyResourcePaths = new Map<string, string>();\n\nfunction isAppDocumentRequest(urlString: string): boolean {\n const url = new URL(urlString);\n if (!url.pathname.startsWith(shinyAppPrefix)) {\n return false;\n }\n const rest = url.pathname.slice(shinyAppPrefix.length).replace(/\\/$/, \"\");\n return rest === \"\" || rest === \"index.html\";\n}\n\nfunction pathUnderShinyPrefix(pathname: string): boolean {\n return pathname.startsWith(shinyAppPrefix) || pathname.startsWith(SHINY_PREFIX);\n}\n\nfunction clonePendingResponse(resp: PendingResponse): PendingResponse {\n let body = resp.body;\n if (body instanceof ArrayBuffer) {\n body = body.slice(0);\n } else if (body instanceof Uint8Array) {\n body = body.slice();\n }\n return {\n status: resp.status,\n headers: { ...(resp.headers ?? {}) },\n body,\n };\n}\n\nfunction clearCachedAppDocument(): void {\n cachedAppDocument = null;\n}\n\nfunction clearShinyResourcePaths(): void {\n shinyResourcePaths = new Map();\n}\n\nfunction setShinyResourcePaths(paths: Record<string, string>): void {\n shinyResourcePaths = new Map();\n for (const [prefix, dir] of Object.entries(paths ?? {})) {\n if (prefix && dir) {\n shinyResourcePaths.set(prefix, dir);\n }\n }\n if (shinyResourcePaths.size > 0) {\n httpuvDebugLog(\"sw-resource-paths\", {\n count: shinyResourcePaths.size,\n keys: [...shinyResourcePaths.keys()],\n });\n }\n}\n\nfunction updateShinyResourcePath(prefix: string, dir: string | undefined): void {\n if (!prefix) {\n return;\n }\n if (!dir) {\n shinyResourcePaths.delete(prefix);\n } else {\n shinyResourcePaths.set(prefix, dir);\n }\n httpuvDebugLog(\"sw-resource-path-update\", {\n prefix,\n dir: dir || null,\n count: shinyResourcePaths.size,\n });\n}\n\nfunction mimeForAssetSuffix(suffix: string): string {\n if (suffix.endsWith(\".js\") || suffix.endsWith(\".mjs\")) {\n return \"application/javascript\";\n }\n if (suffix.endsWith(\".css\")) {\n return \"text/css\";\n }\n if (suffix.endsWith(\".svg\")) {\n return \"image/svg+xml\";\n }\n if (suffix.endsWith(\".png\")) {\n return \"image/png\";\n }\n if (suffix.endsWith(\".woff2\")) {\n return \"font/woff2\";\n }\n if (suffix.endsWith(\".woff\")) {\n return \"font/woff\";\n }\n return \"application/octet-stream\";\n}\n\n/** Pathname relative to the SW registration scope (`/` or `/repo/` on Pages). */\nfunction pathnameRelativeToScope(pathname: string): string {\n const scopeUrl = swSelf.registration?.scope;\n if (!scopeUrl) {\n return pathname;\n }\n let scopePath = new URL(scopeUrl).pathname;\n if (!scopePath.endsWith(\"/\")) {\n scopePath += \"/\";\n }\n if (scopePath !== \"/\" && pathname.startsWith(scopePath)) {\n return `/${pathname.slice(scopePath.length)}`;\n }\n return pathname;\n}\n\n/**\n * Map a request pathname to an absolute VFS path under `/lib/R/`.\n * Must be the R_HOME mount (`/lib/R/...` or `/repo/lib/R/...`), not a substring\n * of `/runtime/lib/R/...` (Rmain SIDE_MODULEs loaded during boot).\n */\nfunction vfsPathFromLibRRequest(pathname: string): string | null {\n const rest = pathnameRelativeToScope(pathname);\n const marker = `${WASM_R_HOME}/`;\n if (rest !== WASM_R_HOME && !rest.startsWith(marker)) {\n return null;\n }\n if (rest.includes(\"..\")) {\n return null;\n }\n return rest;\n}\n\nfunction vfsStaticResponse(\n body: ArrayBuffer,\n suffix: string,\n source: string,\n method: string,\n): Response {\n const headers = new Headers({\n \"Content-Type\": mimeForAssetSuffix(suffix),\n \"X-Httpuv-Static\": source,\n });\n // Plot PNGs overwrite a fixed VFS path; without no-store the browser can\n // keep serving a prior response when ?v= collides across rapid updates.\n if (suffix.toLowerCase().endsWith(\".png\") || source === \"vfs\") {\n headers.set(\"Cache-Control\", \"no-store\");\n }\n if (method === \"HEAD\") {\n return new Response(null, { status: 200, headers });\n }\n return new Response(body, { status: 200, headers });\n}\n\n/** Serve files under `/lib/R/**` directly from the wasm VFS. */\nasync function tryServeLibRAsset(request: Request): Promise<Response | null> {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return null;\n }\n\n const url = new URL(request.url);\n const vfsPath = vfsPathFromLibRRequest(url.pathname);\n if (!vfsPath) {\n return null;\n }\n\n const suffix = vfsPath.slice(vfsPath.lastIndexOf(\"/\") + 1);\n\n try {\n if (!rwasmHost) {\n void requestComlinkFromHost();\n }\n const host = await waitForRwasmHost();\n const body = await host.readVfsFileAt(vfsPath);\n if (!body) {\n httpuvDebugLog(\"sw-vfs-read-miss\", { vfsPath });\n return null;\n }\n httpuvDebugLog(\"sw-static-hit\", { vfsPath, source: \"lib-r-vfs\" });\n return vfsStaticResponse(body, suffix, \"lib-r-vfs\", request.method);\n } catch (err) {\n httpuvDebugLog(\"sw-vfs-read-fail\", { vfsPath, err: String(err) });\n return null;\n }\n}\n\n/** Serve `/shiny/{prefix}/{suffix}` from synced resourcePaths() VFS dirs. */\nasync function tryServeShinyStaticAsset(request: Request): Promise<Response | null> {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return null;\n }\n\n const url = new URL(request.url);\n if (!url.pathname.startsWith(shinyAppPrefix)) {\n return null;\n }\n\n const rest = url.pathname.slice(shinyAppPrefix.length);\n const slash = rest.indexOf(\"/\");\n if (slash <= 0) {\n return null;\n }\n\n const prefix = rest.slice(0, slash);\n const suffix = rest.slice(slash + 1);\n if (!suffix || suffix.includes(\"..\")) {\n return null;\n }\n\n const localDir = shinyResourcePaths.get(prefix);\n if (!localDir || !rwasmHost) {\n return null;\n }\n\n try {\n const body = await rwasmHost.readVfsFile(localDir, suffix);\n if (!body) {\n httpuvDebugLog(\"sw-vfs-read-miss\", { prefix, suffix, vfsDir: localDir });\n return null;\n }\n httpuvDebugLog(\"sw-static-hit\", { prefix, suffix, source: \"vfs\", path: localDir });\n return vfsStaticResponse(body, suffix, \"vfs\", request.method);\n } catch (err) {\n httpuvDebugLog(\"sw-vfs-read-fail\", { prefix, suffix, vfsDir: localDir, err: String(err) });\n return null;\n }\n}\n\nswSelf.addEventListener(\"install\", (event) => {\n httpuvDebugLog(\"sw-install\", { shinyPrefix: SHINY_PREFIX });\n event.waitUntil(swSelf.skipWaiting());\n});\n\nswSelf.addEventListener(\"activate\", (event) => {\n httpuvDebugLog(\"sw-activate\", { shinyPrefix: SHINY_PREFIX });\n resetRwasmHostWaiter();\n event.waitUntil(\n (async () => {\n await swSelf.clients.claim();\n // SW memory (hostClientId, Comlink) was wiped — ask Lucent to re-handshake.\n await requestComlinkFromHost();\n })(),\n );\n});\n\nfunction waitForHttpResponse(uuid: string, url: string, method: string): Promise<PendingResponse> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingHttp.delete(uuid);\n httpuvDebugLog(\"sw-timeout\", { uuid, timeoutMs: REQUEST_TIMEOUT_MS });\n reject(new Error(`httpuv request ${uuid} timed out after ${REQUEST_TIMEOUT_MS}ms`));\n }, REQUEST_TIMEOUT_MS);\n\n pendingHttp.set(uuid, { resolve, reject, timer, url, method });\n });\n}\n\nfunction maybeCacheAppDocument(resp: PendingResponse, url: string, method: string): void {\n if (url && method === \"GET\" && isAppDocumentRequest(url) && resp.status === 200) {\n cachedAppDocument = clonePendingResponse(resp);\n // Tag so we can detect stale caches after Lucent patch updates.\n if (cachedAppDocument.headers) {\n cachedAppDocument.headers[\"x-lucent-app-patch\"] = LUCENT_APP_PATCH_VERSION;\n }\n httpuvDebugLog(\"sw-app-cache-store\", { url, patch: LUCENT_APP_PATCH_VERSION });\n }\n}\n\nfunction toFetchResponse(resp: PendingResponse): Response {\n const headers = new Headers(resp.headers ?? {});\n if (resp.body == null) {\n return new Response(null, { status: resp.status, headers });\n }\n return new Response(resp.body as BodyInit, { status: resp.status, headers });\n}\n\nasync function headersToObject(request: Request): Promise<Record<string, string>> {\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return headers;\n}\n\nfunction messageBodyLength(message: unknown): number {\n if (typeof message === \"string\") {\n return message.length;\n }\n if (message instanceof ArrayBuffer) {\n return message.byteLength;\n }\n if (ArrayBuffer.isView(message)) {\n return message.byteLength;\n }\n return 0;\n}\n\nfunction cloneWsMessage(message: unknown, binary: boolean): unknown {\n if (message == null) {\n return null;\n }\n if (!binary) {\n if (typeof message === \"string\") {\n return message;\n }\n if (message instanceof ArrayBuffer) {\n return new TextDecoder().decode(message);\n }\n if (ArrayBuffer.isView(message)) {\n return new TextDecoder().decode(message);\n }\n return String(message);\n }\n // Always copy binary payloads. The buffer may already have been transferred\n // through Comlink; posting with a transfer list (or a detached buffer) throws\n // DataCloneError and used to tear down the session port.\n if (message instanceof ArrayBuffer) {\n return message.slice(0);\n }\n if (ArrayBuffer.isView(message)) {\n return message.buffer.slice(message.byteOffset, message.byteOffset + message.byteLength);\n }\n if (Array.isArray(message)) {\n return new Uint8Array(message as number[]).buffer;\n }\n return message;\n}\n\nfunction postWsPushToPort(\n port: MessagePort,\n handle: string,\n msg: WsPushMsg,\n pushId: number,\n): boolean {\n const binary = Boolean(msg.binary);\n const payload = {\n type: MSG.WS_PUSH,\n handle,\n wsType: msg.wsType ?? WS_FRAME.SEND,\n binary,\n message: cloneWsMessage(msg.message ?? null, binary),\n pushId,\n };\n try {\n // Structured clone only — never transfer. Transferring a buffer that Comlink\n // already moved throws and would stall the session.\n port.postMessage(payload);\n return true;\n } catch (err) {\n console.warn(\"[httpuv-sw] session port postMessage failed\", err);\n return false;\n }\n}\n\nfunction rejectPendingSessionAcks(reason: string): void {\n for (const [id, pending] of pendingSessionAcks) {\n pendingSessionAcks.delete(id);\n pending.reject(new Error(reason));\n }\n}\n\nfunction waitForSessionPushAck(pushId: number): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n pendingSessionAcks.delete(pushId);\n reject(new Error(`session WS_PUSH_ACK timed out (id=${pushId})`));\n }, SESSION_PUSH_ACK_TIMEOUT_MS);\n pendingSessionAcks.set(pushId, {\n resolve: () => {\n clearTimeout(timer);\n resolve();\n },\n reject: (err: Error) => {\n clearTimeout(timer);\n reject(err);\n },\n });\n });\n}\n\nfunction handleSessionPortInbound(key: string, event: MessageEvent): void {\n const data = event.data as { type?: string; pushId?: number } | null;\n if (!data || typeof data !== \"object\") {\n return;\n }\n if (data.type === MSG.WS_PUSH_ACK && typeof data.pushId === \"number\") {\n const pending = pendingSessionAcks.get(data.pushId);\n if (pending) {\n pendingSessionAcks.delete(data.pushId);\n pending.resolve();\n }\n return;\n }\n httpuvDebugLog(\"sw-session-port-unknown\", { handle: key, type: data.type });\n}\n\nfunction clearSessionPort(handle: string): void {\n const key = normalizeSessionHandle(handle);\n const port = sessionPorts.get(key);\n if (!port) {\n return;\n }\n sessionPorts.delete(key);\n rejectPendingSessionAcks(`session port cleared (${key})`);\n try {\n port.onmessage = null;\n port.close();\n } catch {\n // ignore\n }\n}\n\n/** Ask the iframe to transfer a fresh MessagePort (SW may have been killed while idle). */\nfunction requestSessionPortReregister(handle: string): void {\n const key = normalizeSessionHandle(handle);\n if (!key || sessionPortReregisterPending.has(key)) {\n return;\n }\n sessionPortReregisterPending.add(key);\n const storedClientId = sessionClientIds.get(key);\n void (async () => {\n try {\n let client: Client | undefined;\n if (storedClientId) {\n client = await swSelf.clients.get(storedClientId);\n }\n if (!client) {\n // After Chromium idle-stops the SW, sessionClientIds is empty — find the\n // Shiny iframe (or any window) so REQUEST_SESSION_PORT still arrives.\n const clients = await swSelf.clients.matchAll({\n type: \"window\",\n includeUncontrolled: true,\n });\n client =\n clients.find((c) => isShinyAppClientUrl(c.url)) ??\n clients.find((c) => !isShinyAppClientUrl(c.url)) ??\n clients[0];\n }\n if (!client) {\n httpuvDebugLog(\"sw-session-reregister-no-client\", { handle: key });\n return;\n }\n httpuvDebugLog(\"sw-session-reregister\", { handle: key, clientId: client.id });\n client.postMessage({ type: MSG.REQUEST_SESSION_PORT, handle: key });\n } catch (err: unknown) {\n console.warn(\"[httpuv-sw] REQUEST_SESSION_PORT failed\", err);\n } finally {\n setTimeout(() => {\n sessionPortReregisterPending.delete(key);\n }, 2_000);\n }\n })();\n}\n\nfunction queueWsPush(key: string, msg: WsPushMsg): void {\n const existing = queuedWsPush.get(key);\n if (existing) {\n existing.push(msg);\n } else {\n queuedWsPush.set(key, [msg]);\n }\n}\n\nfunction registerSessionPort(handle: string, port: MessagePort, clientId?: string): void {\n const key = normalizeSessionHandle(handle);\n clearSessionPort(key);\n if (clientId) {\n sessionClientIds.set(key, clientId);\n }\n sessionPortReregisterPending.delete(key);\n port.start();\n port.onmessage = (event: MessageEvent) => {\n handleSessionPortInbound(key, event);\n };\n sessionPorts.set(key, port);\n httpuvDebugLog(\"sw-session-registered\", { handle: key, clientId: sessionClientIds.get(key) });\n\n const queued = queuedWsPush.get(key);\n if (queued && queued.length > 0) {\n queuedWsPush.delete(key);\n for (const next of queued) {\n deliverWsPush(key, next);\n }\n }\n\n try {\n port.postMessage({ type: MSG.SESSION_ACK, handle: key });\n } catch (err) {\n console.warn(\"[httpuv-sw] session ACK failed\", err);\n clearSessionPort(key);\n }\n}\n\n/**\n * Deliver one frame to the session port and wait for the iframe ACK.\n * Chromium silently fails to deliver large frames when many postMessages\n * are fired in one turn without backpressure.\n */\nasync function deliverWsPushOne(key: string, msg: WsPushMsg): Promise<void> {\n const port = sessionPorts.get(key);\n\n if (!port) {\n queueWsPush(key, msg);\n requestSessionPortReregister(key);\n return;\n }\n\n const pushId = nextSessionPushId++;\n const ackPromise = waitForSessionPushAck(pushId);\n if (!postWsPushToPort(port, key, msg, pushId)) {\n pendingSessionAcks.delete(pushId);\n clearSessionPort(key);\n queueWsPush(key, msg);\n requestSessionPortReregister(key);\n return;\n }\n\n try {\n await ackPromise;\n } catch (err) {\n console.warn(\"[httpuv-sw] session WS_PUSH_ACK failed; re-queueing frame\", err);\n // Do not drop the frame across port churn (ensurePort re-register races).\n queueWsPush(key, msg);\n requestSessionPortReregister(key);\n }\n}\n\nfunction deliverWsPush(handle: string, msg: WsPushMsg): void {\n const key = normalizeSessionHandle(handle);\n httpuvDebugLog(\"sw-ws-push\", {\n handle: key,\n wsType: msg.wsType,\n messageLen: messageBodyLength(msg.message),\n hasPort: Boolean(sessionPorts.get(key)),\n queuedBefore: queuedWsPush.get(key)?.length ?? 0,\n });\n const prev = sessionDeliverChain.get(key) ?? Promise.resolve();\n const next = prev\n .then(() => deliverWsPushOne(key, msg))\n .catch((err: unknown) => {\n console.warn(\"[httpuv-sw] session deliver chain error\", err);\n });\n sessionDeliverChain.set(key, next);\n}\n\n/** Legacy recv long-poll is retired; clients must REGISTER_SESSION. */\nfunction handleSessionRecv(): Response {\n return new Response(\"session recv long-poll is retired; use REGISTER_SESSION MessagePort\", {\n status: 410,\n headers: { \"Content-Type\": \"text/plain\" },\n });\n}\n\nfunction isShinyAppClientUrl(url: string): boolean {\n try {\n const pathname = new URL(url).pathname;\n return pathname.startsWith(shinyAppPrefix) || pathname.startsWith(SHINY_PREFIX);\n } catch {\n return false;\n }\n}\n\nasync function getHostClient(): Promise<Client | undefined> {\n if (hostClientId) {\n const client = await swSelf.clients.get(hostClientId);\n if (client) {\n return client;\n }\n }\n const clients = await swSelf.clients.matchAll({\n type: \"window\",\n includeUncontrolled: true,\n });\n // Prefer the Lucent shell over the /shiny/ iframe. Chromium often returns the\n // focused iframe first after idle; that client does not handle host control msgs.\n return clients.find((c) => !isShinyAppClientUrl(c.url)) ?? clients[0];\n}\n\nfunction handleHostOutboundMessage(msg: HostOutbound): void {\n switch (msg.type) {\n case MSG.HTTP_RESPONSE: {\n httpuvDebugLog(\"sw-response\", { uuid: msg.uuid, status: msg.status });\n const pending = msg.uuid ? pendingHttp.get(msg.uuid) : undefined;\n if (!pending || !msg.uuid) {\n httpuvDebugLog(\"sw-response-orphan\", { uuid: msg.uuid });\n return;\n }\n clearTimeout(pending.timer);\n pendingHttp.delete(msg.uuid);\n const resp: PendingResponse = maybePatchAppDocumentResponse(\n {\n status: msg.status ?? 500,\n headers: msg.headers ?? {},\n body: msg.body ?? null,\n },\n pending.url,\n pending.method,\n isAppDocumentRequest,\n );\n maybeCacheAppDocument(resp, pending.url, pending.method);\n pending.resolve(resp);\n break;\n }\n case MSG.WS_PUSH: {\n if (!msg.handle) {\n httpuvDebugLog(\"sw-ws-push-missing-handle\");\n return;\n }\n httpuvDebugLog(\"sw-ws-push-inbound\", {\n handle: normalizeSessionHandle(msg.handle),\n wsType: msg.wsType,\n messageLen: messageBodyLength(msg.message),\n });\n deliverWsPush(normalizeSessionHandle(msg.handle), msg);\n break;\n }\n default:\n httpuvDebugLog(\"sw-unknown-push\", { type: msg.type });\n }\n}\n\nasync function handleHostPush(event: FetchEvent): Promise<Response> {\n try {\n const msg = (await event.request.json()) as HostOutbound;\n handleHostOutboundMessage(msg);\n return new Response(null, { status: 204 });\n } catch (err) {\n console.error(\"[httpuv-sw] host push failed\", err);\n return new Response(\"bad host push payload\", { status: 400 });\n }\n}\n\nasync function handleShinyFetch(event: FetchEvent): Promise<Response> {\n const request = event.request;\n const uuid = crypto.randomUUID();\n httpuvDebugLog(\"sw-request\", { uuid, method: request.method, url: request.url });\n\n const bypassAppCache = request.headers.get(WARMUP_REQUEST_HEADER) === \"1\";\n if (\n request.method === \"GET\" &&\n isAppDocumentRequest(request.url) &&\n cachedAppDocument &&\n !bypassAppCache\n ) {\n const cachedPatch = cachedAppDocument.headers?.[\"x-lucent-app-patch\"];\n if (cachedPatch !== LUCENT_APP_PATCH_VERSION) {\n httpuvDebugLog(\"sw-app-cache-stale\", {\n uuid,\n cachedPatch: cachedPatch ?? null,\n want: LUCENT_APP_PATCH_VERSION,\n });\n clearCachedAppDocument();\n } else {\n httpuvDebugLog(\"sw-app-cache-hit\", { uuid, url: request.url });\n // Re-apply latest HTML inject even on cache hit (strip+replace old script).\n const refreshed = maybePatchAppDocumentResponse(\n clonePendingResponse(cachedAppDocument),\n request.url,\n request.method,\n isAppDocumentRequest,\n );\n return toFetchResponse(refreshed);\n }\n }\n\n const staticRes = await tryServeShinyStaticAsset(request);\n if (staticRes) {\n return staticRes;\n }\n\n if (!rwasmHost) {\n void requestComlinkFromHost();\n try {\n await waitForRwasmHost();\n } catch (err) {\n console.error(\"[httpuv-sw] R worker not ready for\", request.url, err);\n return new Response(\"Shiny R worker is not ready\", {\n status: 503,\n headers: { \"Content-Type\": \"text/plain\" },\n });\n }\n }\n\n const host = rwasmHost;\n if (!host) {\n return new Response(\"Shiny R worker is not ready\", {\n status: 503,\n headers: { \"Content-Type\": \"text/plain\" },\n });\n }\n\n const body =\n request.method === \"GET\" || request.method === \"HEAD\" ? null : await request.arrayBuffer();\n\n const responsePromise = waitForHttpResponse(uuid, request.url, request.method);\n\n const payload = {\n uuid,\n method: request.method,\n url: request.url,\n headers: await headersToObject(request),\n body,\n clientId: event.clientId,\n };\n\n const delivery = host\n .deliverHttpRequest(body ? Comlink.transfer(payload, [body]) : payload)\n .catch((err: unknown) => {\n console.error(\"[httpuv-sw] R worker request failed\", err);\n throw err;\n });\n\n try {\n const resp = await responsePromise;\n await delivery;\n return toFetchResponse(resp);\n } catch (err) {\n const pending = pendingHttp.get(uuid);\n if (pending) {\n clearTimeout(pending.timer);\n pendingHttp.delete(uuid);\n }\n console.error(\"[httpuv-sw]\", err);\n const failed = err instanceof Error && err.message.includes(\"request failed\");\n return new Response(failed ? \"Bad Gateway\" : \"Gateway Timeout\", {\n status: failed ? 502 : 504,\n headers: { \"Content-Type\": \"text/plain\" },\n });\n }\n}\n\nswSelf.addEventListener(\"fetch\", (event) => {\n const url = new URL(event.request.url);\n\n if (event.request.method === \"GET\" || event.request.method === \"HEAD\") {\n if (vfsPathFromLibRRequest(url.pathname)) {\n event.respondWith(\n (async () => {\n if (!rwasmHost) {\n void requestComlinkFromHost();\n }\n const served = await tryServeLibRAsset(event.request);\n if (!served) {\n return new Response(\"Not Found\", { status: 404 });\n }\n return served;\n })(),\n );\n return;\n }\n }\n\n if (!pathUnderShinyPrefix(url.pathname)) {\n return;\n }\n\n if (\n isHostPushUrl(event.request.url, shinyAppPrefix) ||\n isHostPushUrl(event.request.url, SHINY_PREFIX)\n ) {\n event.respondWith(handleHostPush(event));\n return;\n }\n\n const session =\n parseSessionAction(event.request.url, shinyAppPrefix) ??\n parseSessionAction(event.request.url, SHINY_PREFIX);\n if (session?.action === \"recv\") {\n event.respondWith(handleSessionRecv());\n return;\n }\n\n event.respondWith(handleShinyFetch(event));\n});\n\n/** Reply to whoever sent `event` (window client, worker, or port). */\nfunction replyToMessageSource(\n event: ExtendableMessageEvent,\n msg: Record<string, unknown>,\n): void {\n const source = event.source;\n if (!source) {\n httpuvDebugLog(\"sw-reply-no-source\", { type: msg.type });\n return;\n }\n try {\n source.postMessage(msg);\n } catch (err) {\n httpuvDebugLog(\"sw-reply-failed\", { type: msg.type, err: String(err) });\n }\n}\n\nswSelf.addEventListener(\"message\", (event) => {\n const msg = event.data;\n if (msg === \"skipWaiting\" || msg?.type === \"SKIP_WAITING\") {\n void swSelf.skipWaiting();\n return;\n }\n if (!msg || typeof msg !== \"object\") {\n return;\n }\n\n if (msg.type === COMLINK.PORT_HANDOFF && event.ports[0]) {\n const port = event.ports[0];\n port.start();\n httpuvDebugLog(\"sw-port-handoff\");\n // Confirm receipt before the Comlink round-trip, so the host can tell a\n // handoff that never arrived from an R worker that is too busy to answer\n // registerSwDelivery.\n replyToMessageSource(event, { type: COMLINK.PORT_HANDOFF_ACK });\n // Soft roll: keep in-flight waitForRwasmHost() waiters alive across handoff.\n rollRwasmHostWaiter();\n void connectSwToWorker(port);\n return;\n }\n\n if (msg.type === MSG.REGISTER_SESSION && event.ports[0]) {\n const handle = normalizeSessionHandle(msg.handle);\n if (!handle) {\n httpuvDebugLog(\"sw-session-register-missing-handle\");\n try {\n event.ports[0].close();\n } catch {\n // ignore\n }\n return;\n }\n const source = event.source;\n const clientId = source && \"id\" in source ? String(source.id) : undefined;\n registerSessionPort(handle, event.ports[0], clientId);\n return;\n }\n\n if (typeof msg.type !== \"string\") {\n return;\n }\n\n switch (msg.type) {\n case MSG.REGISTER_HOST: {\n if (typeof msg.shinyPrefix === \"string\" && msg.shinyPrefix) {\n shinyAppPrefix = msg.shinyPrefix.endsWith(\"/\") ? msg.shinyPrefix : `${msg.shinyPrefix}/`;\n }\n const source = event.source;\n if (source && \"id\" in source) {\n hostClientId = source.id;\n httpuvDebugLog(\"sw-host-registered\", { hostClientId });\n }\n break;\n }\n\n case MSG.HTTP_RESPONSE: {\n handleHostOutboundMessage(msg as HostOutbound);\n break;\n }\n\n case MSG.WS_PUSH: {\n handleHostOutboundMessage(msg as HostOutbound);\n break;\n }\n\n case MSG.CLEAR_APP_CACHE: {\n clearCachedAppDocument();\n clearShinyResourcePaths();\n break;\n }\n\n case MSG.REGISTER_RESOURCE_PATHS: {\n setShinyResourcePaths(msg.paths);\n break;\n }\n\n case MSG.UPDATE_RESOURCE_PATH: {\n updateShinyResourcePath(String(msg.prefix ?? \"\"), msg.dir == null ? \"\" : String(msg.dir));\n break;\n }\n\n case MSG.STOP: {\n clearCachedAppDocument();\n clearShinyResourcePaths();\n for (const [uuid, pending] of pendingHttp) {\n clearTimeout(pending.timer);\n pending.reject(new Error(\"httpuv stopped\"));\n pendingHttp.delete(uuid);\n }\n for (const handle of [...sessionPorts.keys()]) {\n clearSessionPort(handle);\n }\n sessionClientIds.clear();\n sessionPortReregisterPending.clear();\n queuedWsPush.clear();\n hostClientId = null;\n if (rwasmHost) {\n void rwasmHost.stop().catch((err: unknown) => {\n console.warn(\"[httpuv-sw] R worker stop failed\", err);\n });\n }\n resetRwasmHostWaiter(new Error(\"httpuv stopped\"));\n break;\n }\n\n default:\n break;\n }\n});\n"]}
@@ -0,0 +1,263 @@
1
+ type HeaderMap = Record<string, string>;
2
+ /** A message on Module.httpuv.channel (the R <-> JS bridge). */
3
+ interface ChannelMessage {
4
+ type: string;
5
+ uuid?: string;
6
+ handle?: string;
7
+ binary?: boolean;
8
+ message?: unknown;
9
+ method?: string;
10
+ url?: string;
11
+ headers?: HeaderMap;
12
+ body?: ArrayBuffer | number[] | null;
13
+ req?: unknown;
14
+ clientId?: string | null;
15
+ data?: ChannelMessageData;
16
+ }
17
+ interface ChannelMessageData {
18
+ status?: number;
19
+ headers?: HeaderMap;
20
+ body?: unknown;
21
+ handle?: string;
22
+ binary?: boolean;
23
+ type?: string;
24
+ message?: unknown;
25
+ }
26
+ /** Request env fields buildReq needs from an inbound HTTP message. */
27
+ interface HttpRequestInput {
28
+ uuid: string;
29
+ method: string;
30
+ url: string;
31
+ headers?: HeaderMap;
32
+ body?: ArrayBuffer | null;
33
+ }
34
+ /** Response payload buffered/forwarded between the R worker and service worker. */
35
+ interface PendingResponse {
36
+ status: number;
37
+ headers: HeaderMap;
38
+ body: ArrayBuffer | Uint8Array | string | null;
39
+ }
40
+ /** Callback R registers so the bridge can invoke httpuv option handlers. */
41
+ type InvokeROption = (optionName: string, ...args: unknown[]) => boolean;
42
+ /** Deliver an outbound host message (main page -> service worker). */
43
+ type OutboundDeliver = (msg: object, transfer?: Transferable[]) => void;
44
+ interface HttpuvChannel {
45
+ inbox: ChannelMessage[];
46
+ hasMessage(): boolean;
47
+ read(): ChannelMessage;
48
+ write(msg: ChannelMessage): void;
49
+ }
50
+ interface HttpuvModule {
51
+ channel?: HttpuvChannel;
52
+ dispatch?: (msg: ChannelMessage) => void;
53
+ drainInboundChannel?: () => void;
54
+ pushInboundChannelMessage?: (msg: ChannelMessage) => boolean;
55
+ pushInboundHostMessage?: (msg: HostInboundMessage) => void;
56
+ buildReq?: (msg: HttpRequestInput) => Record<string, unknown>;
57
+ injectShinySocketBootstrap?: (html: string) => string;
58
+ shinySocketScriptUrl?: () => string;
59
+ shinyPrefix?: string;
60
+ pushWsMessage?: (handle: string, message: unknown, opts?: {
61
+ binary?: boolean;
62
+ wsType?: string;
63
+ }) => void;
64
+ bindInvokeROption?: (fn: InvokeROption) => void;
65
+ /** Shiny host mode: request an immediate host service wake. */
66
+ requestHostService?: () => void;
67
+ /** Shiny host mode: wake after delayMs (setTimeout → MessageChannel). */
68
+ scheduleHostDelay?: (delayMs: number) => void;
69
+ _swListenerInstalled?: boolean;
70
+ [key: string]: unknown;
71
+ }
72
+ /** Inbound message from the service worker (or a host proxy) to the R worker. */
73
+ interface HostInboundMessage {
74
+ type: string;
75
+ uuid?: string;
76
+ method?: string;
77
+ url?: string;
78
+ headers?: HeaderMap;
79
+ body?: ArrayBuffer | null;
80
+ clientId?: string | null;
81
+ }
82
+
83
+ /** Build a rook-like request env object for httpuv handlers. */
84
+ declare function buildReq(msg: HttpRequestInput): Record<string, unknown>;
85
+ /** Absolute pathname for shiny-socket.js (served next to httpuv-web.js). */
86
+ declare function shinySocketScriptUrl(): string;
87
+ /** Inject the virtual Shiny socket bootstrap into an HTML document. */
88
+ declare function injectShinySocketBootstrap(html: string): string;
89
+ /**
90
+ * Deliver responses queued while evalR is active (Comlink must not run inside WASM eval).
91
+ */
92
+ declare function flushDeferredOutbound(): void;
93
+ declare function dispatch(msg: ChannelMessage): void;
94
+ /** Drain inbound channel messages until empty or only stdin placeholders remain. */
95
+ declare function drainInboundChannel(): void;
96
+ /** Push a channel message into R immediately (worker push path). */
97
+ declare function pushInboundChannelMessage(msg: ChannelMessage): boolean;
98
+ /** Push an inbound host message from the service worker into R. */
99
+ declare function pushInboundHostMessage(msg: HostInboundMessage): void;
100
+ /** Handle an inbound message from the service worker (or a host proxy). */
101
+ declare function handleInboundHostMessage(msg: HostInboundMessage): void;
102
+ interface HttpuvBridgeOptions {
103
+ /** Deliver HTTP/WS responses to the host (main page -> service worker). */
104
+ postOutbound?: OutboundDeliver;
105
+ /** Listen for service worker messages in this context (false in the R worker). */
106
+ installSwListener?: boolean;
107
+ /** Push inbound HTTP/WebSocket channel messages into R (R worker only). */
108
+ pushToR?: (msg: ChannelMessage) => void;
109
+ /** Shiny host mode: immediate wake (NEED_SERVICE). */
110
+ requestHostService?: () => void;
111
+ /** Shiny host mode: delayed wake (SCHEDULE_DELAY). */
112
+ scheduleHostDelay?: (delayMs: number) => void;
113
+ }
114
+ /**
115
+ * Install Module.httpuv (channel + dispatch) and optionally wire the service
116
+ * worker listener. Call before WASM R starts.
117
+ */
118
+ declare function installHttpuvBridge(options?: HttpuvBridgeOptions): HttpuvModule;
119
+ declare function setInvokeROption(fn: InvokeROption | null): void;
120
+ declare function setPushToR(fn: ((msg: ChannelMessage) => void) | null): void;
121
+
122
+ /** Double-encode a value as a JSON string literal safe to embed in R source. */
123
+ declare function jsonForR(value: unknown): string;
124
+ declare function serializeReqForR(req: Record<string, unknown>): Record<string, unknown>;
125
+ declare function isLikelyStaticAsset(url: string): boolean;
126
+ /** Build an R expression that pushes a channel message into httpuv handlers. */
127
+ declare function channelMessageToRExpr(msg: ChannelMessage): string;
128
+
129
+ /** WebSocket frame types used by httpuv (mirrors native httpuv). */
130
+ declare const WS_FRAME: {
131
+ readonly SEND: "websocket.send";
132
+ readonly CLOSE: "websocket.close";
133
+ };
134
+ /** R_HOME inside the mounted wasm prefix (VFS root is /). */
135
+ declare const WASM_R_HOME = "/lib/R";
136
+ /** Max time the service worker waits for the R worker to answer a request. */
137
+ declare const REQUEST_TIMEOUT_MS = 180000;
138
+ /** Message types exchanged between the service worker and the main page. */
139
+ declare const MSG: {
140
+ readonly REGISTER_HOST: "httpuv_register_host";
141
+ readonly HTTP_REQUEST: "httpuv_http_request";
142
+ readonly HTTP_RESPONSE: "httpuv_http_response";
143
+ readonly WS_PUSH: "httpuv_ws_push";
144
+ /** Iframe → SW (on session port): frame delivered to Shiny.createSocket. */
145
+ readonly WS_PUSH_ACK: "httpuv_ws_push_ack";
146
+ readonly STOP: "httpuv_stop";
147
+ /** Drop cached GET /shiny/ without tearing down the R worker (app restart). */
148
+ readonly CLEAR_APP_CACHE: "httpuv_clear_app_cache";
149
+ /** Host -> SW: full shiny::resourcePaths() map (warmup). */
150
+ readonly REGISTER_RESOURCE_PATHS: "httpuv_register_resource_paths";
151
+ /** Host -> SW: upsert or remove one addResourcePath prefix (empty dir removes). */
152
+ readonly UPDATE_RESOURCE_PATH: "httpuv_update_resource_path";
153
+ /** SW -> host: Comlink to the R worker was lost (e.g. after SW update). */
154
+ readonly REQUEST_COMLINK: "httpuv_request_comlink";
155
+ /** Iframe → SW: transfer a MessagePort for session WS push delivery. */
156
+ readonly REGISTER_SESSION: "httpuv_register_session";
157
+ /** SW → iframe (on session port): registration accepted. */
158
+ readonly SESSION_ACK: "httpuv_session_ack";
159
+ /** SW → iframe client: session MessagePort was lost (e.g. SW idle restart); re-REGISTER_SESSION. */
160
+ readonly REQUEST_SESSION_PORT: "httpuv_request_session_port";
161
+ };
162
+ /** Bypass SW app-document cache (warmup must hit R so deps register). */
163
+ declare const WARMUP_REQUEST_HEADER = "X-Shiny-Forge-Warmup";
164
+ /** Message types on Module.httpuv.channel (R <-> JS bridge). */
165
+ declare const CHANNEL: {
166
+ readonly HTTP_REQUEST: "httpuv_http_request";
167
+ readonly TCP_RESPONSE: "httpuv_tcp_response";
168
+ readonly WS_OPEN: "httpuv_ws_open";
169
+ readonly WS_MESSAGE: "httpuv_ws_message";
170
+ readonly WS_CLOSE: "httpuv_ws_close";
171
+ readonly WS_RESPONSE: "httpuv_ws_response";
172
+ readonly STDIN: "stdin";
173
+ };
174
+ /** R option names registered by httpuv::startServer(). */
175
+ declare const HTTPUV_OPTIONS: {
176
+ readonly ON_REQUEST: "httpuv_onRequest";
177
+ readonly ON_WS_OPEN: "httpuv_onWSOpen";
178
+ readonly ON_WS_MESSAGE: "httpuv_onWSMessage";
179
+ readonly ON_WS_CLOSE: "httpuv_onWSClose";
180
+ };
181
+ /** Comlink MessagePort handshake between host page, service worker, and R worker. */
182
+ declare const COMLINK: {
183
+ readonly PORT_HANDOFF: "httpuv_comlink_port";
184
+ /**
185
+ * SW -> host: the handoff port arrived. Sent before the Comlink round-trip so
186
+ * the host can distinguish a dropped handoff (worker evicted mid-boot) from an
187
+ * R worker that never finished setup.
188
+ */
189
+ readonly PORT_HANDOFF_ACK: "httpuv_comlink_port_ack";
190
+ };
191
+
192
+ /**
193
+ * Resolve the virtual Shiny app prefix from a module script URL.
194
+ * e.g. /site/runApp.js -> /site/shiny/
195
+ */
196
+ declare function resolveShinyPrefix(fromUrl: string | URL): string;
197
+ declare function setShinyPrefix(prefix: string): void;
198
+ declare function getShinyPrefix(): string;
199
+ /** Session directory name under the Shiny virtual app prefix. */
200
+ declare const SESSION_DIR = "__session__";
201
+ /** Host -> SW outbound path (fetch fallback when controller.postMessage unavailable). */
202
+ declare const HOST_DIR = "__host__";
203
+ interface SessionAction {
204
+ action: string;
205
+ handle: string | null;
206
+ }
207
+ /**
208
+ * Strip accidental JSON quoting from session handles (R/Comlink sometimes
209
+ * double-encode UUID strings).
210
+ */
211
+ declare function normalizeSessionHandle(handle: unknown): string;
212
+ declare function resolveSessionPrefix(fromUrl: string | URL): string;
213
+ declare function getSessionPrefix(): string;
214
+ declare function parseSessionAction(urlString: string, prefix: string): SessionAction | null;
215
+ /** Session HTTP actions handled by the R worker (not SW MessagePort delivery). */
216
+ declare function isSessionHttpRequest(urlString: string, prefix?: string): boolean;
217
+ declare function isHostPushUrl(urlString: string, prefix: string): boolean;
218
+ /**
219
+ * Build a same-origin URL under the Shiny virtual app prefix.
220
+ * @param fromUrl defaults to this module's location when called from the main page
221
+ */
222
+ declare function shinyAppUrl(subpath?: string, fromUrl?: string | URL): string;
223
+
224
+ /**
225
+ * Opt-in tracing for the httpuv / Shiny-Forge request pipeline.
226
+ *
227
+ * Enable with either:
228
+ * - URL query: ?httpuvDebug=1
229
+ * - localStorage: localStorage.shinyForgeDebug = "1"
230
+ * - console: shinyForge.enableHttpuvDebug()
231
+ */
232
+ declare function isHttpuvDebug(): boolean;
233
+ declare function httpuvDebugLog(stage: string, ...args: unknown[]): void;
234
+ declare function enableHttpuvDebug(): void;
235
+
236
+ interface HttpResponsePayload {
237
+ uuid: string;
238
+ status?: number;
239
+ headers?: HeaderMap;
240
+ body?: ArrayBuffer | Uint8Array | string | null;
241
+ }
242
+ /** API the service worker exposes to the R worker for outbound httpuv traffic. */
243
+ interface SwDeliveryApi {
244
+ /** HTTP only — WS pushes use a dedicated one-way MessagePort. */
245
+ deliverHttpResponse(resp: HttpResponsePayload): void;
246
+ }
247
+ /** API the R worker exposes to the service worker for inbound httpuv traffic. */
248
+ interface RHostApi {
249
+ /**
250
+ * @param port Comlink channel for HTTP responses
251
+ * @param wsPushPort one-way channel for WS pushes (ordered postMessage, no reply)
252
+ */
253
+ registerSwDelivery(port: MessagePort, wsPushPort: MessagePort): void | Promise<void>;
254
+ deliverHttpRequest(req: unknown): Promise<void>;
255
+ getShinyResourcePaths(): Promise<Record<string, string>>;
256
+ readVfsFile(vfsDir: string, suffix: string): Promise<ArrayBuffer | null>;
257
+ readVfsFileAt(vfsPath: string): Promise<ArrayBuffer | null>;
258
+ stop(): void | Promise<void>;
259
+ }
260
+
261
+ declare const HTTPUV_TRANSPORT_VERSION = "0.0.0";
262
+
263
+ export { CHANNEL, COMLINK, type ChannelMessage, type ChannelMessageData, HOST_DIR, HTTPUV_OPTIONS, HTTPUV_TRANSPORT_VERSION, type HeaderMap, type HostInboundMessage, type HttpRequestInput, type HttpResponsePayload, type HttpuvBridgeOptions, type HttpuvChannel, type HttpuvModule, type InvokeROption, MSG, type OutboundDeliver, type PendingResponse, REQUEST_TIMEOUT_MS, type RHostApi, SESSION_DIR, type SessionAction, type SwDeliveryApi, WARMUP_REQUEST_HEADER, WASM_R_HOME, WS_FRAME, buildReq, channelMessageToRExpr, dispatch, drainInboundChannel, enableHttpuvDebug, flushDeferredOutbound, getSessionPrefix, getShinyPrefix, handleInboundHostMessage, httpuvDebugLog, injectShinySocketBootstrap, installHttpuvBridge, isHostPushUrl, isHttpuvDebug, isLikelyStaticAsset, isSessionHttpRequest, jsonForR, normalizeSessionHandle, parseSessionAction, pushInboundChannelMessage, pushInboundHostMessage, resolveSessionPrefix, resolveShinyPrefix, serializeReqForR, setInvokeROption, setPushToR, setShinyPrefix, shinyAppUrl, shinySocketScriptUrl };