jz_*_pk_*) and a client session from your backend (jaza.init → getSession / authEndpoint). Never put your secret key in the app.
Server-side: @jazadev/node — init for the handshake, consume for debits. The SDK mints short-lived top-up JWTs internally; apps do not implement onRequestToken on the happy path.
Source and examples live on GitHub: @jaza-react-native. The Expo sample under
example/ mirrors the full sign-in → init → top-up → consume path.Install
Expo config
Keep the phone field visible when the keyboard opens on Android:Provider setup
Wrap the app outermost withGestureHandlerRootView, then JazaProvider. Prefer getSession (or authEndpoint).
Provider props (high level)
See Handshake.
Widgets and customization
Default UI works out of the box. Pass a children render prop to wrap your own components while reusing SDK state.JazaBalance
JazaBalanceWidget remains as a deprecated alias.
JazaTopUpButton
Opens the bottom sheet using a session-minted top-up JWT (no onRequestToken).
JazaLedger
mode="scroll" needs peer @shopify/flash-list.
JazaActionButton
Gate only — never consume. See Gating actions.
What happens after Top up
- SDK calls
POST /v1/client/top-upswith the session token - Sheet opens → bundles and balance
- User picks bundle → phone, country, currency → quote
- Confirm → Jaza collects via Mobile Money → SDK polls
- Balance refreshes via
GET /v1/client/wallet