UNPKG

@web3auth/no-modal

Version:
90 lines (87 loc) 3.61 kB
import { createAsyncMiddleware, mergeMiddleware } from '@web3auth/auth'; import { SOLANA_METHOD_TYPES } from '@web3auth/ws-embed'; function createGetAccountsMiddleware({ getAccounts }) { return createAsyncMiddleware(async (request, response, next) => { const { method } = request; if (method !== SOLANA_METHOD_TYPES.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 createGetPublicKeyMiddleware({ getPublicKey }) { return createAsyncMiddleware(async (request, response, next) => { const { method } = request; if (method !== "getPublicKey") return next(); if (!getPublicKey) throw new Error("WalletMiddleware - opts.getPublicKey not provided"); const publicKey = await getPublicKey(request); response.result = publicKey; return undefined; }); } function createRequestAccountsMiddleware({ requestAccounts }) { return createAsyncMiddleware(async (request, response, next) => { const { method } = request; if (method !== SOLANA_METHOD_TYPES.SOLANA_REQUEST_ACCOUNTS) return next(); if (!requestAccounts) throw new Error("WalletMiddleware - opts.requestAccounts not provided"); // This calls the UI login function const accounts = await requestAccounts(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 createSolanaMiddleware(providerHandlers) { const { getAccounts, requestAccounts, signTransaction, signAndSendTransaction, signAllTransactions, signMessage, getPrivateKey, getSecretKey, getPublicKey } = providerHandlers; return mergeMiddleware([createRequestAccountsMiddleware({ requestAccounts }), createGetAccountsMiddleware({ getAccounts }), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_TRANSACTION, signTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SEND_TRANSACTION, signAndSendTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_ALL_TRANSACTIONS, signAllTransactions), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_MESSAGE, signMessage), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SOLANA_PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware("public_key", getPublicKey), createGenericJRPCMiddleware("solanaPublicKey", getPublicKey), createGenericJRPCMiddleware("solanaSecretKey", getSecretKey)]); } function createSolanaChainSwitchMiddleware({ switchSolanaChain }) { return mergeMiddleware([createGenericJRPCMiddleware("switchSolanaChain", switchSolanaChain)]); } function createSolanaAccountMiddleware({ updatePrivatekey }) { return mergeMiddleware([createGenericJRPCMiddleware("updateAccount", updatePrivatekey)]); } export { createGenericJRPCMiddleware, createGetAccountsMiddleware, createGetPublicKeyMiddleware, createRequestAccountsMiddleware, createSolanaAccountMiddleware, createSolanaChainSwitchMiddleware, createSolanaMiddleware };