import { Context, Effect, Layer } from "effect";
import type { Address, Hash, Hex } from "viem";
import type { ClientNotFoundError, WrongNetworkError } from "../core/errors/index.js";
import { ContractReadError, ContractWriteError, WalletNotConnectedError } from "../core/errors/index.js";
import { PublicClientService, WalletClientService } from "../core/index.js";
import { Erc721MetadataFetchError, Erc721NoTokenURIError, Erc721OwnerNotFoundError, Erc721TransferError } from "../erc721/errors.js";
import type { NftMetadata } from "../erc721/metadata.js";
export type Erc721ServiceShape = {
readonly ownerOf: (params: {
address: Address;
chainId: number;
tokenId: bigint;
}) => Effect.Effect
;
readonly balanceOf: (params: {
address: Address;
chainId: number;
owner: Address;
}) => Effect.Effect;
readonly getApproved: (params: {
address: Address;
chainId: number;
tokenId: bigint;
}) => Effect.Effect;
readonly isApprovedForAll: (params: {
address: Address;
chainId: number;
operator: Address;
owner: Address;
}) => Effect.Effect;
readonly approve: (params: {
account?: Address;
address: Address;
chainId: number;
to: Address;
tokenId: bigint;
}) => Effect.Effect;
readonly setApprovalForAll: (params: {
account?: Address;
address: Address;
approved: boolean;
chainId: number;
operator: Address;
}) => Effect.Effect;
readonly transferFrom: (params: {
account?: Address;
address: Address;
chainId: number;
from: Address;
to: Address;
tokenId: bigint;
}) => Effect.Effect;
readonly safeTransferFrom: (params: {
account?: Address;
address: Address;
chainId: number;
data?: Hex;
from: Address;
to: Address;
tokenId: bigint;
}) => Effect.Effect;
readonly tokenURI: (params: {
address: Address;
chainId: number;
tokenId: bigint;
}) => Effect.Effect;
readonly fetchMetadata: (params: {
address: Address;
chainId: number;
gateways?: {
arweave?: string;
ipfs?: string;
};
tokenId: bigint;
}) => Effect.Effect;
readonly name: (params: {
address: Address;
chainId: number;
}) => Effect.Effect;
readonly symbol: (params: {
address: Address;
chainId: number;
}) => Effect.Effect;
readonly totalSupply: (params: {
address: Address;
chainId: number;
}) => Effect.Effect;
};
declare const Erc721Service_base: Context.TagClass;
export declare class Erc721Service extends Erc721Service_base {
}
export declare const Erc721ServiceLive: Layer.Layer;
export {};
//# sourceMappingURL=service.d.ts.map