fix(observability,webhooks,i18n): timestamped logs, dedupe webhook retries, default non-de locales to English

- New custom server.js (replaces react-router-serve): ISO timestamps on
  all console.* output and on access logs, and skip successful /healthz
  polls so real traffic stays visible.
- New ProcessedWebhook table + dedupe helper keyed on
  X-Shopify-Webhook-Id; stops Shopify retries from triggering a second
  invoice email when the original delivery exceeded the 5s ack timeout.
- orders/create + orders/fulfilled now respond 200 immediately and run
  the PDF/email work in the background so we stay under that timeout.
- pickLanguage(): non-German locales (it, fr, es, ...) now default to
  English instead of falling back to German. Empty/unknown still maps to
  'de' so the per-shop defaultLanguage chain keeps working.
- Tests for pickLanguage and dedupe via node --test + tsx.
This commit is contained in:
Gerhard Scheikl
2026-05-15 11:02:17 +02:00
parent 274ccfbc01
commit dde53319e5
12 changed files with 361 additions and 29 deletions
+17
View File
@@ -12,6 +12,7 @@
"@prisma/client": "^6.16.3",
"@react-pdf/renderer": "^4.5.1",
"@react-router/dev": "^7.12.0",
"@react-router/express": "^7.14.2",
"@react-router/fs-routes": "^7.12.0",
"@react-router/node": "^7.12.0",
"@react-router/serve": "^7.12.0",
@@ -26,7 +27,10 @@
"@tiptap/react": "^3.23.1",
"@tiptap/starter-kit": "^3.23.1",
"@types/nodemailer": "^8.0.0",
"compression": "^1.8.1",
"express": "^4.22.1",
"isbot": "^5.1.31",
"morgan": "^1.10.1",
"nodemailer": "^8.0.7",
"prisma": "^6.16.3",
"qrcode": "^1.5.4",
@@ -61,6 +65,15 @@
"node": ">=20.19 <22 || >=22.12"
}
},
"extensions/customer-account-payment": {
"version": "1.0.0",
"devDependencies": {
"@preact/signals": "^1.3.0",
"@shopify/ui-extensions": "^2026.1.0",
"preact": "^10.22.0",
"typescript": "^5.6.0"
}
},
"extensions/invoice-order-action": {
"version": "1.0.0",
"devDependencies": {
@@ -6670,6 +6683,10 @@
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
"license": "MIT"
},
"node_modules/customer-account-payment": {
"resolved": "extensions/customer-account-payment",
"link": true
},
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",