UNPKG

@web3auth/no-modal

Version:
66 lines (62 loc) 2.5 kB
import { randomId } from '@toruslabs/base-controllers'; import { mergeMiddleware, createAsyncMiddleware } 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" }; function createGetAccountsMiddleware({ getAccounts }) { return createAsyncMiddleware(async (request, response, next) => { const { method } = request; // hack to override big ids from fetch middleware which are not supported in xrpl servers // TODO: fix this for xrpl controllers. request.id = randomId(); if (method !== RPC_METHODS.GET_ACCOUNTS) return next(); if (!getAccounts) throw new Error("WalletMiddleware - opts.getAccounts not provided"); // This calls from the prefs controller const accounts = await getAccounts(request); response.result = accounts; return undefined; }); } function createGenericJRPCMiddleware(targetMethod, handler) { return createAsyncMiddleware(async (request, response, next) => { const { method } = request; if (method !== targetMethod) return next(); if (!handler) throw new Error(`WalletMiddleware - ${targetMethod} not provided`); const result = await handler(request); response.result = result; return undefined; }); } function createXRPLMiddleware(providerHandlers) { const { getAccounts, submitTransaction, signTransaction, signMessage, getKeyPair, getPublicKey } = providerHandlers; return mergeMiddleware([createGetAccountsMiddleware({ getAccounts }), createGenericJRPCMiddleware(RPC_METHODS.SIGN_TRANSACTION, signTransaction), createGenericJRPCMiddleware(RPC_METHODS.SUBMIT_TRANSACTION, submitTransaction), createGenericJRPCMiddleware(RPC_METHODS.SIGN_MESSAGE, signMessage), createGenericJRPCMiddleware(RPC_METHODS.GET_KEY_PAIR, getKeyPair), createGenericJRPCMiddleware(RPC_METHODS.GET_PUBLIC_KEY, getPublicKey)]); } function creatXrplChainSwitchMiddleware({ switchChain }) { return mergeMiddleware([createGenericJRPCMiddleware(RPC_METHODS.SWITCH_CHAIN, switchChain)]); } export { RPC_METHODS, creatXrplChainSwitchMiddleware, createGenericJRPCMiddleware, createGetAccountsMiddleware, createXRPLMiddleware };