import { ContractRunner, ethers } from 'ethers' import { sTokensAbi } from './abi' import { createPositionsCaller, Positions } from './positions' import { createIsFreezedCaller } from './isFreezed' import { createFreezeTokenURICaller } from './freezeTokenURI' import { createSetTokenURIImageCaller } from './setTokenURIImage' import { createOwnerOfCaller } from './ownerOf' import { createRewardsCaller, Rewards } from './rewards' import { createTokenURICaller, TokenURI } from './tokenURI' import { createPayloadOfCaller } from './payloadOf' import { createPositionsOfPropertyCaller } from './positionsOfProperty' import { createPositionsOfOwnerCaller } from './positionsOfOwner' import { createSetSTokenRoyaltyForPropertyCaller } from './setSTokenRoyaltyForProperty' import { createRoyaltyOfCaller } from './royaltyOf' import { createSetTokenURIDescriptorCaller } from './setTokenURIDescriptor' import type { TransactionResponse } from 'ethers' import { createTokenURISimCaller, TokenURISimProps } from './tokenURISim' import { FallbackableOverrides } from '../../common/utils/execute' import { createDescriptorOfCaller } from './descriptorOf' import { createDescriptorOfPropertyByPayloadCaller } from './descriptorOfPropertyByPayload' export type STokensContract = { readonly positions: (tokenId: number) => Promise readonly isFreezed: (tokenId: number) => Promise readonly freezeTokenURI: ( tokenId: number, overrides?: FallbackableOverrides, ) => Promise readonly setTokenURIImage: ( tokenId: number, data: string, overrides?: FallbackableOverrides, ) => Promise readonly setSTokenRoyaltyForProperty: ( propertyAddress: string, royalty: number, overrides?: FallbackableOverrides, ) => Promise readonly royaltyOf: (propertyAddress: string) => Promise readonly setTokenURIDescriptor: ( propertyAddress: string, descriptorAddress: string, payloads?: ReadonlyArray, overrides?: FallbackableOverrides, ) => Promise readonly ownerOf: (tokenId: number) => Promise readonly rewards: (tokenId: number) => Promise readonly tokenURI: (tokenId: number) => Promise readonly tokenURISim: (props?: TokenURISimProps) => Promise readonly positionsOfProperty: ( propertyAddress: string, ) => Promise readonly positionsOfOwner: ( accountAddress: string, ) => Promise readonly contract: () => ethers.Contract readonly payloadOf: (tokenId: number) => Promise readonly descriptorOf: (propertyAddress: string) => Promise readonly descriptorOfPropertyByPayload: ( propertyAddress: string, payload: string | Uint8Array, ) => Promise } // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types export const createSTokensContract = (provider: ContractRunner) => (address: string): STokensContract => { const contractClient: ethers.Contract = new ethers.Contract( address, [...sTokensAbi], provider, ) return { positions: createPositionsCaller(contractClient), isFreezed: createIsFreezedCaller(contractClient), freezeTokenURI: createFreezeTokenURICaller(contractClient), setTokenURIImage: createSetTokenURIImageCaller(contractClient), setSTokenRoyaltyForProperty: createSetSTokenRoyaltyForPropertyCaller(contractClient), royaltyOf: createRoyaltyOfCaller(contractClient), setTokenURIDescriptor: createSetTokenURIDescriptorCaller(contractClient), ownerOf: createOwnerOfCaller(contractClient), rewards: createRewardsCaller(contractClient), tokenURI: createTokenURICaller(contractClient), tokenURISim: createTokenURISimCaller(contractClient), payloadOf: createPayloadOfCaller(contractClient), positionsOfProperty: createPositionsOfPropertyCaller(contractClient), positionsOfOwner: createPositionsOfOwnerCaller(contractClient), descriptorOf: createDescriptorOfCaller(contractClient), descriptorOfPropertyByPayload: createDescriptorOfPropertyByPayloadCaller(contractClient), contract: () => contractClient, } } export { Positions } from './positions'