@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
80 lines (76 loc) • 2.5 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"
};
/** Normalizes request.id for XRPL servers that don't support large IDs from fetch middleware. */
function createRequestIdNormalizerMiddleware() {
return ({
request,
next
}) => {
request.id = baseControllers.randomId();
return next(request);
};
}
function createXRPLMiddleware(providerHandlers) {
const {
getAccounts,
submitTransaction,
signTransaction,
signMessage,
getKeyPair,
getPublicKey
} = providerHandlers;
const scaffold = auth.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 = auth.JRPCEngineV2.create({
middleware: [createRequestIdNormalizerMiddleware(), scaffold]
});
return engine.asMiddleware();
}
function creatXrplChainSwitchMiddleware(switchChain) {
async function switchChainHandler(params) {
const req = params.request;
if (!req.params) throw auth.rpcErrors.invalidParams("Missing request params");
if (!req.params.chainId) throw auth.rpcErrors.invalidParams("Missing chainId");
await switchChain({
chainId: req.params.chainId
});
return undefined;
}
return auth.createScaffoldMiddlewareV2({
[RPC_METHODS.SWITCH_CHAIN]: switchChainHandler
});
}
exports.RPC_METHODS = RPC_METHODS;
exports.creatXrplChainSwitchMiddleware = creatXrplChainSwitchMiddleware;
exports.createXRPLMiddleware = createXRPLMiddleware;