@m3s/smart-contract
Version:
A modular toolkit for generating, compiling, deploying, and interacting with Ethereum-compatible smart contracts
49 lines • 2.44 kB
JavaScript
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