Skip to content

sec(SEC-02): opaque claim token for QR scan, rate endpoint, expiration countdown - #354

Open
vallejoraul08-debug wants to merge 1 commit into
Micopay:mainfrom
vallejoraul08-debug:sec02-claim-token-and-fixes
Open

sec(SEC-02): opaque claim token for QR scan, rate endpoint, expiration countdown#354
vallejoraul08-debug wants to merge 1 commit into
Micopay:mainfrom
vallejoraul08-debug:sec02-claim-token-and-fixes

Conversation

@vallejoraul08-debug

Copy link
Copy Markdown

Qué cierra

  • SEC-02: el QR de merchant-scan ya no lleva el preimage HTLC. Token opaco de un solo uso (trade_claim_tokens), sólo se guarda el sha256, consumo atómico por consumed_at IS NULL, redactado en logs.
  • GET /rate/usdc-mxn — quita el FX hardcodeado del frontend.
  • Contador de expiración en QRReveal + hook useCountdown compartido (reemplaza 3 copias).
  • POST /trades/:id/merchant-confirm — el backend no la tenía aunque api.ts ya la llamaba (404 en el escaneo del comercio). Aquí se quema el claim token.
  • Home.test.tsx y TradeDetail.test.tsx, rojos desde antes de este cambio.

Verificación

  • Backend tsc --noEmit limpio · claimToken 4/4 · tradeAuth 9/9 · rateCache 5/5 · requestId OK
  • Frontend tsc --noEmit limpio · vitest run 79/79
  • Rebasé sobre origin/main (main local estaba 14 commits atrás) y resolví conflictos en schema.ts, index.ts, i18n/en.json, i18n/es.json — todos additivos salvo htlcTestnet, donde mantuve el valor ya en main.

Fuera de este PR, a propósito

lib/xrpl-keystore.ts no se toca — depende de una decisión de producto sobre XRPL que sigue abierta.

No cerrado en este PR

  • La comisión del comercio (merchant_configs.rate_percent, 1.9–2.5%) no se cobra: createTrade sólo calcula el 0.8% de plataforma.
  • El estado expired es inalcanzable — el backend nunca lo persiste.
  • WAVE5 Issue 8 (modelo de roles del QR en cash-out) sigue sin decidir.

…n countdown

Replaces HTLC preimage in the merchant-scan QR with a single-use opaque
token (trade_claim_tokens, sha256 stored, atomic consume on consumed_at
IS NULL, redacted in logs). Adds GET /rate/usdc-mxn to remove hardcoded
FX from the frontend, a shared useCountdown hook for QRReveal expiration
UX, and the missing POST /trades/:id/merchant-confirm handler that api.ts
was already calling.

Local main was 14 commits behind origin/main when this was written; see
PR description for the reconciliation against the 62 commits landed since.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant