UNPKG

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
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 };