Browser Extension
GemWallet Compatibility
Run a dApp built on GemWallet's API against Joey by changing one import.
@joeywallet/gemwallet-compat implements GemWallet's @gemwallet/api interface (matching version 3.8.0) on top of Joey.
Install
npm install @joeywallet/gemwallet-compat
It's released with the same version number as @joeywallet/wallet-sdk.
Migrate
- import { isInstalled, getAddress, sendPayment } from '@gemwallet/api'
+ import { isInstalled, getAddress, sendPayment } from '@joeywallet/gemwallet-compat'
Note
Joey doesn't pretend to be GemWallet in the page (there's no window.gemWallet). Your dApp has to import this package for GemWallet-style code to reach Joey.
Results use GemWallet's { type: 'response' | 'reject', result } envelope, so existing result.type === 'reject' checks keep working. GemWallet's field names (for example fee, sequence and memos: [{ memo: { memoData } }]) are converted to XRPL field names for you.
Supported functions
| Function | Behaviour |
|---|---|
isInstalled() |
{ result: { isInstalled } }. Never rejects; waits up to 1 second, like GemWallet. |
getAddress() |
Reconnects silently if possible, otherwise prompts. Returns { address }. |
getPublicKey() |
{ address, publicKey }. Fails for watch-only accounts. |
getNetwork() |
{ chain: 'XRPL', network: 'Mainnet' | 'Testnet' | 'Devnet', websocket } |
sendPayment(payload) |
Builds a Payment, signs and submits it. Returns { hash }. |
setTrustline(payload) |
Builds a TrustSet, signs and submits it. Returns { hash }. |
signTransaction({ transaction }) |
{ signature }: the signed transaction blob, as in GemWallet |
submitTransaction({ transaction }) |
{ hash } |
submitBulkTransactions({ transactions }) |
{ transactions: [{ id?, accepted, hash? }] }. Always stops at the first failure (onError is ignored). |
on(event, callback) |
login, logout, networkChanged and walletChanged. Returns an unsubscribe function. |
Not supported
These throw GemWalletUnsupportedError (code 4200) immediately:
setRegularKey(),setHook()andsetAccount(): Joey refuses account-control operations from dApps. See Supported transactions.signMessage(): use the SDK'ssignIn()instead.
GemWallet's NFT and offer helpers (mintNFT, createOffer and similar) aren't included. Build those transactions yourself and send them with submitTransaction, or use the SDK directly.