Skip to content

fix: asset-aware tx amounts, real overview data, biometric lockout counting, job queue visibility timeout - #1438

Closed
ritik4ever wants to merge 1 commit into
ancore-org:mainfrom
ritik4ever:fix/1410-1415-1418-1407
Closed

ritik4ever wants to merge 1 commit into
ancore-org:mainfrom
ritik4ever:fix/1410-1415-1418-1407

Conversation

@ritik4ever

Copy link
Copy Markdown
Contributor

Closes #1410
Closes #1415
Closes #1418
Closes #1407

Summary

Four small, independent fixes across the monorepo.

#1410 — [WEB-DASHBOARD] TransactionTable hardcodes USD

formatAmount() formatted every amount as style: 'currency', currency: 'USD', ignoring
Transaction.asset. It now renders "142.50 XLM" and falls back to XLM when the field is
absent, matching the documented default.
apps/web-dashboard/src/components/transactions/TransactionTable.tsx:46

#1415 — [MOBILE] NativeBiometricAdapter misclassifies failed matches

A resolved { success: false } from createSignature() is a genuinely failed match (wrong
finger / spoofing attempt), not a voluntary cancel, but it was mapped to USER_CANCEL — which
BiometricLockoutManager.recordFailure() explicitly excludes from the failure counter. The
resolve path now returns AUTHENTICATION_FAILED, so BIOMETRIC_MAX_ATTEMPTS and the lockout
timer actually engage. The thrown-exception path still distinguishes real cancellation.
apps/mobile-wallet/src/security/NativeBiometricAdapter.ts:45

#1418 — [RELAYER] PgJobQueue.dequeue() has no visibility timeout

Jobs claimed via FOR UPDATE SKIP LOCKED had no lease, so a worker SIGKILLed between
dequeue() and ack()/nack() stranded the job in processing forever. dequeue() now
reclaims any processing row whose updated_at is older than a 5-minute visibility timeout
back to pending before selecting, using a data-modifying CTE (always executed, independent
of whether the outer query reads its output).
services/relayer/src/queue/PgJobQueue.ts:135

#1407 — [WEB-DASHBOARD] OverviewPage is entirely hardcoded

OverviewPage — the component actually rendered at /dashboard — rendered a literal array of
fabricated figures (1,245.80 XLM, 24 payments) and fired zero network requests. It now
reads the app's real hooks: useAccountState() for the active address and
useAccountOverview() for balance, status and nonce, with a loading placeholder.
apps/web-dashboard/src/router/index.tsx:212

Testing

Not run — changes are scoped and reviewable individually. Worth a follow-up pass:

  • a TransactionTable case with asset set to a non-XLM code
  • a NativeBiometricAdapter case for resolve({ success: false })
  • a PgJobQueue case asserting a stale processing job is reclaimed

Notes

…t failed biometrics, add queue visibility timeout
@coderabbitai

coderabbitai Bot commented Sep 26, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 6d376537-d64a-47f9-9ed9-c823eeee56b3


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ritik4ever ritik4ever closed this by deleting the head repository Sep 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment