homebox/frontend/nuxt.proxyoverride.ts

53 lines
1.4 KiB
TypeScript

// https://gist.github.com/ucw/67f7291c64777fb24341e8eae72bcd24
import type { IncomingMessage } from "http";
import type internal from "stream";
import { defineNuxtModule, logger } from "@nuxt/kit";
// Related To
// - https://github.com/nuxt/nuxt/issues/15417
// - https://github.com/nuxt/cli/issues/107
//
// fix from
// - https://gist.github.com/ucw/67f7291c64777fb24341e8eae72bcd24
// eslint-disable-next-line
import { createProxyServer } from "http-proxy";
export default defineNuxtModule({
defaults: {
target: "ws://localhost:7745",
path: "/api/v1/ws",
},
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}`);
});
},
});