UNPKG

@web3auth/no-modal

Version:
76 lines (73 loc) 2.4 kB
import { randomId } from '@toruslabs/base-controllers'; import { createScaffoldMiddlewareV2, JRPCEngineV2, rpcErrors } from '@web3auth/auth'; const RPC_METHODS = { GET_ACCOUNTS: "xrpl_getAccounts", GET_KEY_PAIR: "xrpl_getKeyPair", GET_PUBLIC_KEY: "xrpl_getPublicKey", SIGN_MESSAGE: "xrpl_signMessage", SIGN_TRANSACTION: "xrpl_signTransaction", SUBMIT_TRANSACTION: "xrpl_submitTransaction", SWITCH_CHAIN: "xrpl_switchChain", CHAIN_ID: "xrpl_chainId", PROVIDER_CHAIN_CONFIG: "xrpl_providerChainConfig" }; /** Normalizes request.id for XRPL servers that don't support large IDs from fetch middleware. */ function createRequestIdNormalizerMiddleware() { return ({ request, next }) => { request.id = randomId(); return next(request); }; } function createXRPLMiddleware(providerHandlers) { const { getAccounts, submitTransaction, signTransaction, signMessage, getKeyPair, getPublicKey } = providerHandlers; const scaffold = createScaffoldMiddlewareV2({ [RPC_METHODS.GET_ACCOUNTS]: params => { if (!getAccounts) throw new Error("WalletMiddleware - opts.getAccounts not provided"); return getAccounts(params.request); }, [RPC_METHODS.SIGN_TRANSACTION]: params => { return signTransaction(params.request); }, [RPC_METHODS.SUBMIT_TRANSACTION]: params => { return submitTransaction(params.request); }, [RPC_METHODS.SIGN_MESSAGE]: params => { return signMessage(params.request); }, [RPC_METHODS.GET_KEY_PAIR]: params => { return getKeyPair(params.request); }, [RPC_METHODS.GET_PUBLIC_KEY]: params => { return getPublicKey(params.request); } }); const engine = JRPCEngineV2.create({ middleware: [createRequestIdNormalizerMiddleware(), scaffold] }); return engine.asMiddleware(); } function creatXrplChainSwitchMiddleware(switchChain) { async function switchChainHandler(params) { const req = params.request; if (!req.params) throw rpcErrors.invalidParams("Missing request params"); if (!req.params.chainId) throw rpcErrors.invalidParams("Missing chainId"); await switchChain({ chainId: req.params.chainId }); return undefined; } return createScaffoldMiddlewareV2({ [RPC_METHODS.SWITCH_CHAIN]: switchChainHandler }); } export { RPC_METHODS, creatXrplChainSwitchMiddleware, createXRPLMiddleware };