UNPKG

@m3s/smart-contract

Version:

A modular toolkit for generating, compiling, deploying, and interacting with Ethereum-compatible smart contracts

49 lines 2.44 kB
import pkgJson from '../package.json' with { type: "json" }; import { registry, AdapterError, createErrorHandlingProxy, validateAdapterParameters, validateEnvironment } from '@m3s/common'; // Register this module in the registry registry.registerModule({ name: 'smart-contract', version: pkgJson.version }); import './adapters/index.js'; export * from './types/index.js'; /** * Creates and returns a contract handler adapter instance based on the provided configuration. */ export async function createContractHandler(params) { const { name, version } = params; // 'options' and 'provider' from params are accessed via getPropertyByPath or directly by adapter const adapterInfo = registry.getAdapter('smart-contract', name, version); if (!adapterInfo) { // ✅ Show available versions in error const availableVersions = registry.getAdapterVersions('smart-contract', name); const versionsText = availableVersions.length > 0 ? ` Available versions: ${availableVersions.join(', ')}` : ''; throw new AdapterError(`Adapter '${name}' version '${version}' not found for contractHandler module.${versionsText}`); } // ✅ ADD: Validate environment before creation if (adapterInfo.environment) { console.log(`[ContractHandler] Environment requirements for ${name}:`, adapterInfo.environment); validateEnvironment(name, adapterInfo.environment); } // ✅ Updated ValidatorArguments with correct parameter names const validatorArgs = { moduleName: 'smart-contract', name, version, params, adapterInfo, registry, factoryMethodName: 'createContractHandler' }; 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}'.`); } const adapter = await AdapterClass.create(params); if (!adapter) { throw new AdapterError(`Adapter '${name}' failed to be created.`, { methodName: 'createContractHandler' }); } // ✅ Preserve all error handling and proxy functionality return createErrorHandlingProxy(adapter, adapterInfo.errorMap || {}, undefined, `ContractHandler(${name})` // ✅ Updated display name ); } //# sourceMappingURL=index.js.map