@etherspot/modular-sdk
Version:
Etherspot Modular SDK - build with ERC-7579 smart accounts modules
58 lines • 2.54 kB
JavaScript
import { parseAbi, zeroAddress } from 'viem';
import { VIEM_SENTINEL_ADDRESS } from './constants.js';
import { isContract } from './utils/viem-utils.js';
import { accountAbi } from './abis.js';
import { DEFAULT_QUERY_PAGE_SIZE } from '../network/constants.js';
export const getInstalledModules = async ({ client, moduleAddress, moduleTypes = ['validator', 'executor', 'hook', 'fallback'], pageSize = DEFAULT_QUERY_PAGE_SIZE }) => {
const modules = [];
if (await isContract({ client, address: moduleAddress })) {
for (const moduleType of moduleTypes) {
switch (moduleType) {
case 'validator':
const validators = await getModulesPaginated({
client,
functionName: 'getValidatorPaginated',
walletAddress: moduleAddress,
pageSize: pageSize
});
validators && modules.push(...validators);
break;
case 'executor':
const executors = await getModulesPaginated({
client,
functionName: 'getExecutorsPaginated',
walletAddress: moduleAddress,
pageSize: pageSize
});
executors && modules.push(...executors);
break;
case 'hook':
const activeHook = (await client.readContract({
address: moduleAddress,
abi: parseAbi(accountAbi),
functionName: 'getActiveHook',
}));
modules.push(activeHook);
break;
case 'fallback':
// todo: implement on account or use events
}
}
}
else {
throw new Error('Account has no init code and is not deployed');
}
const onlyModules = modules.filter((module) => module !== zeroAddress);
const uniqueModules = Array.from(new Set(onlyModules));
return uniqueModules;
};
export const getModulesPaginated = async ({ client, functionName, walletAddress, pageSize = DEFAULT_QUERY_PAGE_SIZE }) => {
const data = (await client.readContract({
address: walletAddress,
abi: parseAbi(accountAbi),
functionName: functionName,
args: [VIEM_SENTINEL_ADDRESS, pageSize],
}));
return data[0];
};
//# sourceMappingURL=getInstalledModules.js.map