Skip to content

Instantly share code, notes, and snippets.

@ucw

ucw/proxy.ts Secret

Last active May 11, 2023 13:52
Show Gist options
  • Save ucw/67f7291c64777fb24341e8eae72bcd24 to your computer and use it in GitHub Desktop.
Save ucw/67f7291c64777fb24341e8eae72bcd24 to your computer and use it in GitHub Desktop.
Nuxt 3 websocket proxy module
import { defineNuxtModule, logger } from "@nuxt/kit";
import { IncomingMessage } from "http";
import { createProxyServer } from "http-proxy";
import internal from "stream";
export default defineNuxtModule({
defaults: {
target: "",
path: "/v1/graphql",
},
meta: {
configKey: "websocketProxy",
name: "Websocket proxy",
},
setup(resolvedOptions, nuxt) {
if (!nuxt.options.dev || !resolvedOptions.target) {
return;
}
nuxt.hook("listen", (server) => {
const proxy = createProxyServer({
ws: true,
secure: false,
changeOrigin: true,
target: resolvedOptions.target,
});
const proxyFn = (req: IncomingMessage, socket: internal.Duplex, head: Buffer) => {
if (req.url && req.url.startsWith(resolvedOptions.path)) {
proxy.ws(req, socket, head);
}
};
server.on("upgrade", proxyFn);
nuxt.hook("close", () => {
server.off("upgrade", proxyFn);
proxy.close();
});
logger.info(`Websocket dev proxy started on ${resolvedOptions.path}`);
});
},
});
@jonkri
Copy link

jonkri commented May 11, 2023

Hi! 👋 Would you mind putting this under an open source license, say the MIT license (which Nuxt uses). Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment