6913c298ad
Build & Deploy / Build & Push Docker Image (push) Successful in 2m57s
Test / Type Check (all packages) (push) Successful in 57s
Build & Deploy / Deploy to VPS (push) Successful in 4s
Test / API Unit Tests (push) Successful in 47s
Test / Homepage Unit Tests (push) Successful in 43s
Test / Storefront Unit Tests (push) Successful in 42s
Test / Admin Unit Tests (push) Successful in 40s
Test / Dashboard Unit Tests (push) Successful in 45s
Test / API Integration Tests (push) Successful in 1m4s
Replace the legacy /explore marketplace route with /storefront across the storefront app and production routing. - move the marketplace index page to the storefront root route - move company and vehicle detail pages from /explore/* to /* internally - update marketplace links, renter dashboard links, saved company links, and header navigation to target /storefront - remove remaining explore route references and wording from storefront code - configure production Traefik to route /storefront and strip the prefix before forwarding to the storefront service - set the storefront production asset prefix to /storefront so Next chunks load from /storefront/_next instead of the shared root /_next path - redirect locale entry paths such as /storefront/fr back to /storefront while persisting the selected language cookie - update middleware tests for the locale redirect and adjusted redirect mock Verification: - npm run test --workspace @rentaldrivego/storefront - npm run build --workspace @rentaldrivego/storefront
81 lines
2.3 KiB
JavaScript
81 lines
2.3 KiB
JavaScript
/** @type {import('next').NextConfig} */
|
|
|
|
const { buildSecurityHeaders, normalizeAssetPrefix } = require('../../config/nextSecurityHeaders')
|
|
|
|
// The storefront proxies /dashboard and /admin to their own Next dev servers.
|
|
// Allow those asset-prefix origins so proxied pages can load chunks and HMR.
|
|
const dashboardAssetSource = normalizeAssetPrefix(
|
|
process.env.DASHBOARD_ASSET_PREFIX ?? (process.env.NODE_ENV !== 'production' ? 'http://localhost:3001' : undefined),
|
|
'/dashboard',
|
|
)
|
|
const STOREFRONT_ASSET_PREFIX = '/storefront'
|
|
const storefrontAssetPrefix = normalizeAssetPrefix(
|
|
process.env.STOREFRONT_ASSET_PREFIX ?? (process.env.NODE_ENV === 'production' ? STOREFRONT_ASSET_PREFIX : undefined),
|
|
STOREFRONT_ASSET_PREFIX,
|
|
)
|
|
const securityHeaders = buildSecurityHeaders({
|
|
assetSources: [storefrontAssetPrefix, dashboardAssetSource, process.env.ADMIN_ASSET_PREFIX],
|
|
})
|
|
const nextConfig = {
|
|
...(storefrontAssetPrefix ? { assetPrefix: storefrontAssetPrefix } : {}),
|
|
images: {
|
|
remotePatterns: [
|
|
{
|
|
protocol: 'https',
|
|
hostname: 'res.cloudinary.com',
|
|
},
|
|
],
|
|
},
|
|
transpilePackages: ['@rentaldrivego/types'],
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/:path*',
|
|
headers: securityHeaders,
|
|
},
|
|
]
|
|
},
|
|
async redirects() {
|
|
return [
|
|
{
|
|
source: '/dashboard/dashboard',
|
|
destination: '/dashboard',
|
|
permanent: false,
|
|
},
|
|
{
|
|
source: '/dashboard/dashboard/:path*',
|
|
destination: '/dashboard/:path*',
|
|
permanent: false,
|
|
},
|
|
]
|
|
},
|
|
async rewrites() {
|
|
const dashboardOrigin = process.env.DASHBOARD_INTERNAL_URL ?? 'http://dashboard:3001'
|
|
const adminOrigin = process.env.ADMIN_INTERNAL_URL ?? 'http://admin:3002'
|
|
|
|
return [
|
|
// Dashboard has basePath '/dashboard'. The proxy preserves the prefix
|
|
// so the dashboard can strip it and route internally.
|
|
{
|
|
source: '/dashboard',
|
|
destination: `${dashboardOrigin}/dashboard`,
|
|
},
|
|
{
|
|
source: '/dashboard/:path*',
|
|
destination: `${dashboardOrigin}/dashboard/:path*`,
|
|
},
|
|
// Admin routes (also uses basePath)
|
|
{
|
|
source: '/admin',
|
|
destination: `${adminOrigin}/admin`,
|
|
},
|
|
{
|
|
source: '/admin/:path*',
|
|
destination: `${adminOrigin}/admin/:path*`,
|
|
},
|
|
]
|
|
},
|
|
}
|
|
|
|
module.exports = nextConfig
|