@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
71 lines (67 loc) • 2.67 kB
JavaScript
;
var baseControllers = require('@toruslabs/base-controllers');
var auth = require('@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 auth.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 = baseControllers.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 auth.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 auth.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 auth.mergeMiddleware([createGenericJRPCMiddleware(RPC_METHODS.SWITCH_CHAIN, switchChain)]);
}
exports.RPC_METHODS = RPC_METHODS;
exports.creatXrplChainSwitchMiddleware = creatXrplChainSwitchMiddleware;
exports.createGenericJRPCMiddleware = createGenericJRPCMiddleware;
exports.createGetAccountsMiddleware = createGetAccountsMiddleware;
exports.createXRPLMiddleware = createXRPLMiddleware;