Initial scaffold: Shopify recesso (withdrawal) compliance app
- Remix (TypeScript) + Polaris, official Shopify app template - Prisma multi-tenant schema (Settings, ExclusionRule, WithdrawalRequest, AuditLog, WebhookEvent) on Postgres - Mandatory GDPR compliance webhooks (data_request, redact, shop/redact) + HMAC handlers - API version pinned 2026-04, scopes read_orders/read_products - Fly deploy config; two-env strategy (custom now, public later) - Dev setup: shopify.web.toml + Vite allowedHosts for tunnels - Docs: PLAN.md, ANALISI-REQUISITI-LEGALI.md (Art. 54-bis compliance) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mv83a29B4eFv5ixoj6PoE1
This commit is contained in:
74
app/vite.config.ts
Normal file
74
app/vite.config.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { vitePlugin as remix } from "@remix-run/dev";
|
||||
import { installGlobals } from "@remix-run/node";
|
||||
import { defineConfig, type UserConfig } from "vite";
|
||||
import tsconfigPaths from "vite-tsconfig-paths";
|
||||
|
||||
installGlobals({ nativeFetch: true });
|
||||
|
||||
// Related: https://github.com/remix-run/remix/issues/2835#issuecomment-1144102176
|
||||
// Replace the HOST env var with SHOPIFY_APP_URL so that it doesn't break the remix server. The CLI will eventually
|
||||
// stop passing in HOST, so we can remove this workaround after the next major release.
|
||||
if (
|
||||
process.env.HOST &&
|
||||
(!process.env.SHOPIFY_APP_URL ||
|
||||
process.env.SHOPIFY_APP_URL === process.env.HOST)
|
||||
) {
|
||||
process.env.SHOPIFY_APP_URL = process.env.HOST;
|
||||
delete process.env.HOST;
|
||||
}
|
||||
|
||||
const host = new URL(process.env.SHOPIFY_APP_URL || "http://localhost")
|
||||
.hostname;
|
||||
|
||||
let hmrConfig;
|
||||
if (host === "localhost") {
|
||||
hmrConfig = {
|
||||
protocol: "ws",
|
||||
host: "localhost",
|
||||
port: 64999,
|
||||
clientPort: 64999,
|
||||
};
|
||||
} else {
|
||||
hmrConfig = {
|
||||
protocol: "wss",
|
||||
host: host,
|
||||
port: parseInt(process.env.FRONTEND_PORT!) || 8002,
|
||||
clientPort: 443,
|
||||
};
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
server: {
|
||||
// host da SHOPIFY_APP_URL + wildcard tunnel dev (cloudflare quick tunnel / ngrok)
|
||||
allowedHosts: [host, ".trycloudflare.com", ".ngrok-free.app"],
|
||||
cors: {
|
||||
preflightContinue: true,
|
||||
},
|
||||
port: Number(process.env.PORT || 3000),
|
||||
hmr: hmrConfig,
|
||||
fs: {
|
||||
// See https://vitejs.dev/config/server-options.html#server-fs-allow for more information
|
||||
allow: ["app", "node_modules"],
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
remix({
|
||||
ignoredRouteFiles: ["**/.*"],
|
||||
future: {
|
||||
v3_fetcherPersist: true,
|
||||
v3_relativeSplatPath: true,
|
||||
v3_throwAbortReason: true,
|
||||
v3_lazyRouteDiscovery: true,
|
||||
v3_singleFetch: false,
|
||||
v3_routeConfig: true,
|
||||
},
|
||||
}),
|
||||
tsconfigPaths(),
|
||||
],
|
||||
build: {
|
||||
assetsInlineLimit: 0,
|
||||
},
|
||||
optimizeDeps: {
|
||||
include: ["@shopify/app-bridge-react", "@shopify/polaris"],
|
||||
},
|
||||
}) satisfies UserConfig;
|
||||
Reference in New Issue
Block a user