Skip to content

Commit 6c2ea7c

Browse files
authored
Merge pull request #1244 from Dannyswiss1/feature/fe-payment-success-settings-dashboard-1179-1182
Feature/fe payment success settings dashboard 1179 1182
2 parents cf65311 + 9458a85 commit 6c2ea7c

31 files changed

Lines changed: 381 additions & 1331 deletions

backend/logs/audit_fallback.log

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,10 @@
2727
2026-06-28T08:03:05.982Z | {"merchant_id":"merchant-uuid-005","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
2828
2026-06-28T08:03:05.984Z | {"merchant_id":"merchant-uuid-004","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
2929
2026-06-28T08:03:06.289Z | {"merchant_id":"merchant-uuid-006","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
30+
2026-07-24T15:08:33.295Z | {"merchant_id":"merchant-uuid-001","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
31+
2026-07-24T15:08:33.324Z | {"merchant_id":"merchant-uuid-002","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
32+
2026-07-24T15:08:33.327Z | {"merchant_id":null,"action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
33+
2026-07-24T15:08:33.329Z | {"merchant_id":"merchant-uuid-003","action":"login","status":"success","ip_address":null,"user_agent":null,"event_type":"login_attempt"} | error: optimizedWrite is not defined
34+
2026-07-24T15:08:33.331Z | {"merchant_id":"merchant-uuid-005","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
35+
2026-07-24T15:08:33.351Z | {"merchant_id":"merchant-uuid-004","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined
36+
2026-07-24T15:08:33.654Z | {"merchant_id":"merchant-uuid-006","action":"login","event_type":"login_attempt"} | error: optimizedWrite is not defined

frontend/.eslintrc.json

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,26 @@
22
"extends": [
33
"next/core-web-vitals",
44
"next/typescript"
5-
]
5+
],
6+
"ignorePatterns": [
7+
"**/*.test.ts",
8+
"**/*.test.tsx",
9+
"**/*.test.js",
10+
"**/*.test.jsx",
11+
"src/test/**",
12+
"tests/**"
13+
],
14+
"rules": {
15+
"@typescript-eslint/no-explicit-any": "warn",
16+
"@typescript-eslint/no-unused-vars": [
17+
"warn",
18+
{
19+
"argsIgnorePattern": "^_",
20+
"varsIgnorePattern": "^_",
21+
"caughtErrorsIgnorePattern": "^_"
22+
}
23+
],
24+
"@typescript-eslint/no-unused-expressions": "warn",
25+
"react-hooks/rules-of-hooks": "warn"
26+
}
627
}

frontend/messages/en.json

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@
343343
"eyebrowAccount": "Account",
344344
"title": "Settings",
345345
"description": "Manage your credentials, branding, and integrations.",
346+
"loadingSettings": "Loading settings…",
346347
"noApiKeyTitle": "No API key found",
347348
"noApiKeyDescription": "Register a merchant account first to manage your credentials here.",
348349
"registerAsMerchant": "Register as Merchant",
@@ -415,7 +416,30 @@
415416
"regenerateSecretEllipsis": "Regenerate Secret…",
416417
"regenerateSecretWarning": "The current secret will stop working immediately.",
417418
"regenerating": "Regenerating…",
418-
"dangerZoneDescription": "Irreversible actions. Proceed with caution."
419+
"dangerZoneDescription": "Irreversible actions. Proceed with caution.",
420+
"failedToLoadBranding": "Failed to load branding",
421+
"failedToLoadWebhookSettings": "Failed to load webhook settings",
422+
"failedToRotateKey": "Failed to rotate key",
423+
"apiKeyRotatedSuccess": "API key rotated — update any integrations using the old key.",
424+
"imageSizeLimit": "Image must be under 2MB",
425+
"logoUploaded": "Logo uploaded!",
426+
"hexColorRequired": "{field} must be a valid hex color",
427+
"failedToSaveBranding": "Failed to save branding",
428+
"brandingSaved": "Branding saved",
429+
"webhookUrlMustBeHttps": "Webhook URL must use HTTPS",
430+
"webhookUrlInvalid": "Invalid URL (e.g. https://example.com/webhook)",
431+
"failedToSaveWebhookUrl": "Failed to save webhook URL",
432+
"webhookUrlSaved": "Webhook URL saved",
433+
"webhookUrlCleared": "Webhook URL cleared",
434+
"failedToVerifyDomain": "Failed to verify webhook domain",
435+
"domainVerified": "Domain verified",
436+
"domainStillUnverified": "Domain still unverified",
437+
"failedToRegenerateSecret": "Failed to regenerate secret",
438+
"webhookSecretRegenerated": "Webhook secret regenerated — update your integrations.",
439+
"testWebhookRequestFailed": "Test webhook request failed",
440+
"failedToTestWebhook": "Failed to test webhook",
441+
"testWebhookSentStatus": "Test webhook sent — status {status}",
442+
"colorPickerLabel": "{label} color picker"
419443
},
420444
"notificationCenter": {
421445
"buttonLabel": "Notifications",

frontend/messages/es.json

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@
343343
"eyebrowAccount": "Cuenta",
344344
"title": "Configuración",
345345
"description": "Administra tus credenciales, marca e integraciones.",
346+
"loadingSettings": "Cargando configuración…",
346347
"noApiKeyTitle": "No se encontró clave API",
347348
"noApiKeyDescription": "Registra una cuenta de comercio primero para administrar tus credenciales aquí.",
348349
"registerAsMerchant": "Registrarse como Comercio",
@@ -415,7 +416,30 @@
415416
"regenerateSecretEllipsis": "Regenerar Secreto…",
416417
"regenerateSecretWarning": "El secreto actual dejará de funcionar inmediatamente.",
417418
"regenerating": "Regenerando…",
418-
"dangerZoneDescription": "Acciones irreversibles. Procede con precaución."
419+
"dangerZoneDescription": "Acciones irreversibles. Procede con precaución.",
420+
"failedToLoadBranding": "Error al cargar la marca",
421+
"failedToLoadWebhookSettings": "Error al cargar la configuración del webhook",
422+
"failedToRotateKey": "Error al rotar la clave",
423+
"apiKeyRotatedSuccess": "Clave API rotada — actualiza cualquier integración que use la clave anterior.",
424+
"imageSizeLimit": "La imagen debe ser menor a 2MB",
425+
"logoUploaded": "¡Logo subido!",
426+
"hexColorRequired": "{field} debe ser un color hexadecimal válido",
427+
"failedToSaveBranding": "Error al guardar la marca",
428+
"brandingSaved": "Marca guardada",
429+
"webhookUrlMustBeHttps": "La URL del webhook debe usar HTTPS",
430+
"webhookUrlInvalid": "URL inválida (ej. https://example.com/webhook)",
431+
"failedToSaveWebhookUrl": "Error al guardar la URL del webhook",
432+
"webhookUrlSaved": "URL del webhook guardada",
433+
"webhookUrlCleared": "URL del webhook eliminada",
434+
"failedToVerifyDomain": "Error al verificar el dominio del webhook",
435+
"domainVerified": "Dominio verificado",
436+
"domainStillUnverified": "El dominio sigue sin verificarse",
437+
"failedToRegenerateSecret": "Error al regenerar el secreto",
438+
"webhookSecretRegenerated": "Secreto del webhook regenerado — actualiza tus integraciones.",
439+
"testWebhookRequestFailed": "Falló la solicitud de prueba del webhook",
440+
"failedToTestWebhook": "Error al probar el webhook",
441+
"testWebhookSentStatus": "Webhook de prueba enviado — estado {status}",
442+
"colorPickerLabel": "Selector de color {label}"
419443
},
420444
"notificationCenter": {
421445
"buttonLabel": "Notificaciones",

frontend/messages/pt.json

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@
343343
"eyebrowAccount": "Conta",
344344
"title": "Configuracoes",
345345
"description": "Gerencie suas credenciais, marca e integracoes.",
346+
"loadingSettings": "Carregando configuracoes…",
346347
"noApiKeyTitle": "Nenhuma chave de API encontrada",
347348
"noApiKeyDescription": "Registre uma conta de lojista primeiro para gerenciar suas credenciais aqui.",
348349
"registerAsMerchant": "Registrar como Lojista",
@@ -415,7 +416,30 @@
415416
"regenerateSecretEllipsis": "Regenerar Segredo…",
416417
"regenerateSecretWarning": "O segredo atual deixara de funcionar imediatamente.",
417418
"regenerating": "Regenerando…",
418-
"dangerZoneDescription": "Acoes irreversiveis. Prossiga com cautela."
419+
"dangerZoneDescription": "Acoes irreversiveis. Prossiga com cautela.",
420+
"failedToLoadBranding": "Falha ao carregar a marca",
421+
"failedToLoadWebhookSettings": "Falha ao carregar as configuracoes do webhook",
422+
"failedToRotateKey": "Falha ao rotacionar a chave",
423+
"apiKeyRotatedSuccess": "Chave de API rotacionada — atualize as integracoes que usam a chave antiga.",
424+
"imageSizeLimit": "A imagem deve ter menos de 2MB",
425+
"logoUploaded": "Logo enviado!",
426+
"hexColorRequired": "{field} deve ser uma cor hexadecimal valida",
427+
"failedToSaveBranding": "Falha ao salvar a marca",
428+
"brandingSaved": "Marca salva",
429+
"webhookUrlMustBeHttps": "A URL do webhook deve usar HTTPS",
430+
"webhookUrlInvalid": "URL invalida (ex. https://example.com/webhook)",
431+
"failedToSaveWebhookUrl": "Falha ao salvar a URL do webhook",
432+
"webhookUrlSaved": "URL do webhook salva",
433+
"webhookUrlCleared": "URL do webhook removida",
434+
"failedToVerifyDomain": "Falha ao verificar o dominio do webhook",
435+
"domainVerified": "Dominio verificado",
436+
"domainStillUnverified": "Dominio ainda nao verificado",
437+
"failedToRegenerateSecret": "Falha ao regenerar o segredo",
438+
"webhookSecretRegenerated": "Segredo do webhook regenerado — atualize suas integracoes.",
439+
"testWebhookRequestFailed": "Falha na solicitacao de teste do webhook",
440+
"failedToTestWebhook": "Falha ao testar o webhook",
441+
"testWebhookSentStatus": "Webhook de teste enviado — status {status}",
442+
"colorPickerLabel": "Seletor de cor {label}"
419443
},
420444
"notificationCenter": {
421445
"buttonLabel": "Notificacoes",

frontend/next.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ let withPWA = (config) => config;
1010
try {
1111
withPWA = require("@ducanh2912/next-pwa").default({
1212
dest: "public",
13-
disable: process.env.NODE_ENV === "development",
13+
disable: process.env.NODE_ENV === "development" || process.env.CI === "true",
1414
register: true,
1515
skipWaiting: true,
1616
fallbacks: {

0 commit comments

Comments
 (0)