UNPKG

@m3s/wallet

Version:

A flexible wallet interface supporting multiple blockchain wallet types, including EVM wallets and Web3Auth integration

81 lines 3.5 kB
import pkgJson from '../package.json' with { type: "json" }; import { registry, createErrorHandlingProxy, AdapterError, validateAdapterParameters, validateEnvironment, Ms3Modules, Capability } from '@m3s/shared'; // Register this module in the registry registry.registerModule({ name: 'wallet', version: pkgJson.version }); export * from './types/index.js'; registry.registerInterfaceShape('IEVMWallet', [ Capability.CoreWallet, Capability.EventEmitter, Capability.MessageSigner, Capability.TransactionHandler, Capability.TypedDataSigner, Capability.GasEstimation, Capability.TokenOperations, Capability.RPCHandler, Capability.TransactionStatus ]); async function loadAdapter(name) { switch (name) { case 'ethers': await import('./adapters/ethers/ethersWallet.registration.js'); break; case 'web3auth': await import('./adapters/web3auth/web3authWallet.registration.js'); break; default: break; } } /** * Creates and returns a wallet adapter instance based on the provided configuration. * */ export async function createWallet(params) { const { name, version } = params; try { await loadAdapter(name); const adapterInfo = registry.getAdapter(Ms3Modules.wallet, name, version); if (!adapterInfo) { // ✅ Enhanced error message with available versions const availableVersions = registry.getAdapterVersions(Ms3Modules.wallet, name); const versionsText = availableVersions.length > 0 ? ` Available versions: ${availableVersions.join(', ')}` : ''; throw new AdapterError(`Adapter '${name}' version '${version}' not found for wallet module.${versionsText}`); } // ✅ Validate environment before creation if (adapterInfo.environment) { console.log(adapterInfo.environment); validateEnvironment(name, adapterInfo.environment); } // Use the validation utility // ✅ Updated ValidatorArguments const validatorArgs = { moduleName: Ms3Modules.wallet, name, version, // ✅ Add version params, adapterInfo, registry, factoryMethodName: 'createWallet' }; validateAdapterParameters(validatorArgs); const AdapterClass = adapterInfo.adapterClass; if (!AdapterClass || typeof AdapterClass.create !== 'function') { throw new AdapterError(`Adapter class or its static 'create' method is invalid for '${name}'.`); } // ✅ Pass the registry name and version to the adapter const adapter = await AdapterClass.create({ name, version, options: params.options }); if (!adapter) { } // ✅ Preserve all error handling and proxy functionality return createErrorHandlingProxy(adapter, adapterInfo.capabilities, // Pass the capabilities adapterInfo.errorMap || {}, undefined, `WalletAdapter(${name})`); } catch (error) { if (error instanceof AdapterError) { // Re-throw the original AdapterError to preserve its code and details. throw error; } // For other types of errors, wrap them in a generic AdapterError. throw new AdapterError(`Adapter '${name}' failed to be created: ${error}`); } } //# sourceMappingURL=index.js.map