The @turnkey/sdk-react-native
package simplifies the integration of the Turnkey API into React Native applications. It provides secure session management, authentication, and cryptographic operations using react-native-keychain
, @turnkey/crypto
, @turnkey/api-key-stamper
, and @turnkey/http
.
Install the following dependencies in your React Native project:
react-native-keychain
@turnkey/crypto
@turnkey/api-key-stamper
@turnkey/http
@turnkey/sdk-react-native
(this package)Ensure your app is properly configured for secure storage and authentication.
You must polyfill random byte generation to ensure generateP256KeyPair
from @turnkey/crypto
works properly by importing react-native-get-random-values
at the entry point of your application:
To enable secure authentication, the following storage keys are used:
@turnkey/embedded-key
: Stores the private key that corresponds to the public key used when initiating the session request to Turnkey.@turnkey/session
: Default session storage key, storing the session credentials, including the private key, public key, and expiry time, which are decrypted from the credential bundle after a session is created.@turnkey/session-keys
: Stores the list of stored session keys.@turnkey/selected-session
: Stores the currently selected session key.createEmbeddedKey()
: Generates a new embedded key pair and securely stores the private key.createSession({ bundle, expirationSeconds?, sessionKey? })
: Creates a session. (API Docs)
sessionKey
is provided, the session will be stored under that key in secure storage.sessionKey
already exists in secure storage, an error is thrown.setSelectedSession({ sessionKey })
: Selects a session by its key (Used when handling multiple sessions).clearSession({ sessionKey? })
: Removes the specified session from secure storage. If no sessionKey
is provided, the currently selected session is removed.clearAllSessions()
: Clears all sessions from secure storage.updateUser({ email?, phone? })
: Updates the user’s email and/or phone number. (API Docs)refreshUser()
: Fetches the latest user data. (API Docs)createWallet({ walletName, accounts, mnemonicLength? })
: Creates a wallet. (API Docs)importWallet({ walletName, mnemonic, accounts })
: Imports a wallet. (API Docs)exportWallet({ walletId })
: Exports a wallet mnemonic. (API Docs)signRawPayload({ signWith, payload, encoding, hashFunction })
: Signs a payload. (API Docs)Most users won’t need multiple sessions, but if your app requires switching between multiple sessions, here’s what you need to know:
This SDK supports multiple sessions, allowing you to create and switch between different session keys using setSelectedSession({ sessionKey })
. When a session is selected, the client, user, and session information are updated accordingly, so that all subsequent function calls (like updateUser
or createWallet
) apply to the selected session.
sessionKey
when calling createSession
. If provided, the session will be stored in secure storage under that ID, allowing for multiple sessions.setSelectedSession({ sessionKey })
to switch between stored sessions. The client, user, and session information will automatically update.onSessionCreated
: Called when a session is created.onSessionSelected
: Called when a session is selected.onSessionExpired
: Called when a session expires.onSessionCleared
: Called when a session is cleared.When are multiple sessions useful?
Using multiple sessions can be beneficial when enabling different authentication methods for various operations. For example, you might authenticate a user with OTP for login while using a passkey-based session for signing transactions.
Check out this repository for a full working example.
The @turnkey/sdk-react-native
package simplifies the integration of the Turnkey API into React Native applications. It provides secure session management, authentication, and cryptographic operations using react-native-keychain
, @turnkey/crypto
, @turnkey/api-key-stamper
, and @turnkey/http
.
Install the following dependencies in your React Native project:
react-native-keychain
@turnkey/crypto
@turnkey/api-key-stamper
@turnkey/http
@turnkey/sdk-react-native
(this package)Ensure your app is properly configured for secure storage and authentication.
You must polyfill random byte generation to ensure generateP256KeyPair
from @turnkey/crypto
works properly by importing react-native-get-random-values
at the entry point of your application:
To enable secure authentication, the following storage keys are used:
@turnkey/embedded-key
: Stores the private key that corresponds to the public key used when initiating the session request to Turnkey.@turnkey/session
: Default session storage key, storing the session credentials, including the private key, public key, and expiry time, which are decrypted from the credential bundle after a session is created.@turnkey/session-keys
: Stores the list of stored session keys.@turnkey/selected-session
: Stores the currently selected session key.createEmbeddedKey()
: Generates a new embedded key pair and securely stores the private key.createSession({ bundle, expirationSeconds?, sessionKey? })
: Creates a session. (API Docs)
sessionKey
is provided, the session will be stored under that key in secure storage.sessionKey
already exists in secure storage, an error is thrown.setSelectedSession({ sessionKey })
: Selects a session by its key (Used when handling multiple sessions).clearSession({ sessionKey? })
: Removes the specified session from secure storage. If no sessionKey
is provided, the currently selected session is removed.clearAllSessions()
: Clears all sessions from secure storage.updateUser({ email?, phone? })
: Updates the user’s email and/or phone number. (API Docs)refreshUser()
: Fetches the latest user data. (API Docs)createWallet({ walletName, accounts, mnemonicLength? })
: Creates a wallet. (API Docs)importWallet({ walletName, mnemonic, accounts })
: Imports a wallet. (API Docs)exportWallet({ walletId })
: Exports a wallet mnemonic. (API Docs)signRawPayload({ signWith, payload, encoding, hashFunction })
: Signs a payload. (API Docs)Most users won’t need multiple sessions, but if your app requires switching between multiple sessions, here’s what you need to know:
This SDK supports multiple sessions, allowing you to create and switch between different session keys using setSelectedSession({ sessionKey })
. When a session is selected, the client, user, and session information are updated accordingly, so that all subsequent function calls (like updateUser
or createWallet
) apply to the selected session.
sessionKey
when calling createSession
. If provided, the session will be stored in secure storage under that ID, allowing for multiple sessions.setSelectedSession({ sessionKey })
to switch between stored sessions. The client, user, and session information will automatically update.onSessionCreated
: Called when a session is created.onSessionSelected
: Called when a session is selected.onSessionExpired
: Called when a session expires.onSessionCleared
: Called when a session is cleared.When are multiple sessions useful?
Using multiple sessions can be beneficial when enabling different authentication methods for various operations. For example, you might authenticate a user with OTP for login while using a passkey-based session for signing transactions.
Check out this repository for a full working example.