@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
66 lines (62 loc) • 2.5 kB
JavaScript
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 };