Skip to main content
A completed wallet session combines a selected wallet, credential expiry, and authentication metadata. Protected wallet operations require this active session.

Restore the completed session

The native SDK persists completed sessions. Reuse the single OMSWallet instance with the same publishable key when the app starts, then read its state:
OMSWalletSessionState contains: Email metadata contains type: 'email' and email. OIDC metadata contains type: 'oidc', flow: 'id-token' | 'redirect', issuer, and optional provider, label, and email values. Use getWalletAddress() when you only need the selected address:

Observe expiration

Subscribe where your application owns wallet-session state and remove the subscription during cleanup:
The SDK replays the latest expiration event to a listener that subscribes after native expiration. Starting or completing a new authentication flow clears that replay.

List and activate wallets

An access credential can have multiple wallets. useWallet changes the selected wallet for the active session:
Create and activate another wallet with an optional application reference:
Wallet listing, switching, and creation require an active credential. They do not repeat authentication. Create a Solana wallet with walletType: 'solana':

Import and activate a wallet

Ethereum imports accept 32 raw bytes or 64 hexadecimal digits with an optional 0x prefix. Solana imports accept a 32-byte seed or 64-byte keypair as raw bytes, or the base58 encoding of either. The native SDK encrypts the key locally for the attested import transport and does not persist the plaintext key. Returned wallets identify keyOrigin as 'enclave' or 'imported'. Attestation failures reject with SDK error code OMS_ATTESTATION_VERIFICATION_FAILED.
Development uses Nitro debug-mode attestation. Use only disposable test keys in Development. Staging and Production verify against SDK-pinned enclave measurements.

Issue a wallet ID token

A wallet ID token is short-lived proof for the currently active wallet. It is not the provider ID token used to authenticate and it is not the access credential that authorizes wallet API calls.
Send the token to your backend over HTTPS and verify it there. See backend wallet verification.

Inspect access grants

Access grants authorize wallet operations and have their own credential IDs and expiry timestamps. A grant has type: 'direct' or type: 'remote'; remote grants also include a session ID, display metadata, and bounded smart-session grants. isCaller identifies the credential currently authorizing the list request. For a short list:
Iterate every page when you need the complete list:
Use listAccessPage when your UI owns cursor pagination. Omit cursor for the first page, then pass the returned cursor when it is defined:

Revoke access safely

Check isCaller before revocation. Revoking the caller removes the credential being used for the request and can end the current app’s ability to perform protected operations.
For a remote grant, sessionId is required and revokes exactly that session.

Authorize remote access

Remote access grants are bounded EVM smart sessions. Inspect the remote credential and show its returned metadata to the wallet owner before requesting approval: This example uses Polygon Amoy. Grant limits are raw EVM base-unit amounts. A native-transfer limit is cumulative, so 1000000000000000 wei authorizes up to 0.001 POL across the session.
WaaS caps the requested session expiry at the remote credential’s expiry. Backend credential registration and remote execution are outside the React Native SDK; implement them with the TypeScript SDK’s backend smart sessions guide.

Sign out

Sign-out clears the active local wallet session. It does not revoke other credentials. Use revokeAccess to remove access from another credential.