@m3s/wallet
Version:
A flexible wallet interface supporting multiple blockchain wallet types, including EVM wallets and Web3Auth integration
81 lines • 3.5 kB
JavaScript
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