- Reset TPIN: empty-body initiate -> OTP -> encrypted new TPIN via
/tpin/reset/*, from a Services tile, search, and "Forgot your TPIN?"
on the transfer's TPIN sheet (returns to the same transfer review)
- Handle every documented code: SESSION_INVALID signs out, TPIN_NOT_SET
offers Create TPIN, CBS customer/account/org refusals stop the flow,
outages retry from the start, expired or spent OTP/token restarts,
policy VALIDATION_ERROR stays on the new-TPIN step
- Secrets live in screen state only and are dropped as each step ends
- Countdowns use the envelope timestamp, kept aside by the interceptor,
so a wrong device clock cannot skew OTP or token expiry
- New TPINs refuse any three-digit run (1235, 5987), for create too
- Dev API logger redacts the session token, OTPs, PINs, encrypted
payloads and one-time tokens
- Tests: request bodies, RSA-OAEP SHA-256 payload decrypted with Node,
fresh nonce on key retry, server-clock deadlines, log redaction
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Create TPIN: current MPIN -> OTP -> encrypted TPIN via /tpin/create/*,
from Services and from the transfer screen on TPIN_NOT_SET
- IMPS initiate now sends encryptedTpin instead of encryptedMpin; handles
INVALID_TPIN and TPIN_NOT_SET
- Share one RSA-OAEP encryption and key-retry path for MPIN and TPIN
- Forgot MPIN on sign-in and Reset MPIN in the Security Center
- Fund transfer history list and detail, reachable from Home
- Brand logo on sign-in and palette updates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Initiate runs the IMPS name inquiry and sends an OTP; verify-otp sends
ReqPay. The result screen now distinguishes success, failure and
pending reconciliation. The payer is temporarily fixed to the test
account 002002000100019, and the to-mobile form no longer blocks on
mobile/MMID format.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every action this screen offers — mini statement, e-passbook, re-KYC,
balance — is one the bank refuses on a deposit, and the account information
grid showed an MMID that is permanently "Not allocated" because deposits
cannot take part in IMPS. The home screen already filters its carousel the
same way; this brings the screen it links to into line.
Filtered on type alone, not through `isOperativeAccount`, so a dormant
savings account still appears — it cannot be debited but it is still the
customer's money.
Adds `isEverydayAccount` to carry that rule, with `supportsBalanceEnquiry`
now defined in terms of it: the same set today, kept under its own name
because it states a fact about the endpoint rather than about the account.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The CBS API now exposes a balance endpoint, which it previously did not.
Several comments in the codebase asserted that no such endpoint existed
anywhere in the API; those are corrected here rather than left to mislead.
Balance is fetched lazily, per account, from the Account Details card:
- `accounts.balance` endpoint, `CbsAccountBalance` type, and a
`getAccountBalance` query with `keepUnusedDataFor: 0` — a balance is the
most perishable figure in the app and must not outlive its screen.
- The call is triggered by the customer, not by render. Every call reaches
the core banking system, and a balance should not appear over someone's
shoulder just for opening a screen.
- `supportsBalanceEnquiry` gates the control by account type only, with no
status check: a dormant savings account cannot be debited but still has a
balance. Deposits are excluded because the endpoint does not serve them.
- `ACCOUNT_BALANCE_NOT_AVAILABLE` added to the error catalogue as a
non-retryable refusal, so the card states it instead of inviting a tap
that gets the identical answer.
Also carries in-progress work already present in the tree: customer-facing
account type labels (`accountTypeLabel`) applied across the account card,
selector, mini statement, balance enquiry and MMID screens.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Global feature search for the user app, wired to the home search icon
- Notifications screen: swipe-to-delete, vanish animation, unread badge,
and Notifee-backed foreground + background (scheduled) OS notifications
- Fix Add Beneficiary save (single source of truth via beneficiaries slice)
- Fix Cards tab scroll freeze and bottom blank space (use ScreenShell scroll)
- User-friendly toast copy across the app
- Android build tuning: parallel/caching/JVM G1 args, mobile-only ABIs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>