@m3s/smart-contract
Version:
A modular toolkit for generating, compiling, deploying, and interacting with Ethereum-compatible smart contracts
52 lines • 2.56 kB
JavaScript
import pkgJson from '../package.json' with { type: "json" };
import { registry, AdapterError, createErrorHandlingProxy, validateAdapterParameters, validateEnvironment, Capability } from '@m3s/shared';
// Register this module in the registry
registry.registerModule({ name: 'smart-contract', version: pkgJson.version });
import './adapters/index.js';
export * from './types/index.js';
registry.registerInterfaceShape('IContractHandler', [
Capability.ContractGenerator,
Capability.ContractCompiler
]);
/**
* 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.capabilities, adapterInfo.errorMap || {}, undefined, `ContractHandler(${name})`);
}
//# sourceMappingURL=index.js.map