shopware-frontends-proxy
Version:
This Shopware Frontends (nuxt3) module proxies requests to the Shopware 6 instance to bypass preflight requests.
56 lines (53 loc) • 1.76 kB
JavaScript
import { fileURLToPath } from 'node:url';
import { defineNuxtModule, addServerHandler } from '@nuxt/kit';
function createProxyMiddleware(options, index) {
return `
import { createProxyMiddleware } from 'nuxt-proxy/middleware'
import { defu } from 'defu'
import { useRuntimeConfig } from '#imports'
const buildtimeOptions = ${JSON.stringify(options)}
const runtimeOptions = [].concat(useRuntimeConfig().proxy?.options)[${JSON.stringify(
index
)} ?? 0]
export default createProxyMiddleware(defu(runtimeOptions, buildtimeOptions))
`;
}
const module = defineNuxtModule({
meta: {
name: "shopware-frontends-proxy",
configKey: "shopware"
},
defaults: {
proxy: false,
proxyDocuments: true,
proxyDestinationEndpoint: "https://demo-frontends.shopware.store",
shopwareEndpoint: "http://localhost:3000",
shopwareAccessToken: "SWSCBHFSNTVMAWNZDNFKSHLAYW"
},
setup(options, nuxt) {
if (options.proxy && options.proxyDestinationEndpoint) {
const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url));
nuxt.options.build.transpile.push(runtimeDir);
const config = {
options: {
target: options.proxyDestinationEndpoint,
changeOrigin: true,
pathRewrite: {
"^/store-api": "/store-api"
},
pathFilter: ["/store-api"]
}
};
nuxt.hook("nitro:config", (nitroConfig) => {
nitroConfig.virtual = nitroConfig.virtual || {};
const handler = "#proxy-handler";
nitroConfig.virtual[handler] = createProxyMiddleware(config.options);
addServerHandler({
handler,
middleware: true
});
});
}
}
});
export { module as default };