import { type Address, type Client, type ReadContractErrorType } from 'viem'; import { type Role } from '../../../../utils/v2/roles/encodeRoleBitmap.js'; import { type ResolverRole } from '../../../../utils/v2/roles/resolverRoles.js'; export type HasRolesRegistryParameters = { /** The registry address to check */ registryAddress: Address; /** The label to check roles for */ label: string; /** The roles to check */ roles: Role[]; /** The account address to check */ account: Address; }; export type HasRolesRegistryRootParameters = { /** The registry address to check */ registryAddress: Address; /** The roles to check at the registry root resource */ roles: Role[]; /** The account address to check */ account: Address; }; export type HasRolesResolverRootParameters = { /** The resolver address to check */ resolverAddress: Address; /** The resolver roles to check */ roles: ResolverRole[]; /** The account address to check */ account: Address; }; export type HasRolesResolverParameters = { /** The resolver address to check */ resolverAddress: Address; /** The EAC resource to check roles on */ resource: bigint; /** The resolver roles to check */ roles: ResolverRole[]; /** The account address to check */ account: Address; }; export type HasRolesParameters = HasRolesRegistryParameters | HasRolesRegistryRootParameters | HasRolesResolverRootParameters | HasRolesResolverParameters; export type HasRolesErrorType = ReadContractErrorType; /** * Check if an account has specific roles. * * Supports four modes based on the parameters passed: * * **Registry mode** (pass `registryAddress` + `label`): * Check roles on a registry for a specific name. * * **Registry root mode** (pass `registryAddress` only): * Check registry-wide roles at the root resource (resource = 0). * * **Resolver root mode** (pass `resolverAddress` only): * Check root-level roles on a resolver (global, any name/record). * * **Resolver mode** (pass `resolverAddress` + `resource`): * Check roles on a resolver for a setter-argument resource (see * `computeResolverResource`). Resolver roles are never scoped to a name. * * @param client - {@link Client} * @param parameters - {@link HasRolesParameters} * @returns Boolean indicating if the account has the roles. * * @example * // Registry mode - check registry roles for a name * const hasRole = await hasRoles(client, { * registryAddress: '0x...', * label: 'example', * roles: ['ROLE_SET_SUBREGISTRY'], * account: '0x...', * }) * * @example * // Registry root mode - check registry-wide root roles * const isAdmin = await hasRoles(client, { * registryAddress: '0x...', * roles: ['ROLE_REGISTRAR_ADMIN'], * account: '0x...', * }) * * @example * // Resolver root mode - check global resolver roles * const canLink = await hasRoles(client, { * resolverAddress: '0x...', * roles: ['ROLE_LINK'], * account: '0x...', * }) * * @example * // Resolver mode - check a role scoped to one setter argument. The contract * // ORs root roles into the check, so this also passes for root holders. * const canSetAvatar = await hasRoles(client, { * resolverAddress: '0x...', * resource: computeResolverResource({ kind: 'text', key: 'avatar' }), * roles: ['ROLE_SET_TEXT'], * account: '0x...', * }) */ export declare function hasRoles(client: Client, params: HasRolesParameters): Promise; export { computeResolverResource } from '../../../../utils/v2/roles/resolverResource.js'; //# sourceMappingURL=hasRoles.d.ts.map