getImgData = (contractAddress, tokenId) =>
graph
.request(
"https://hasura2.foundation.app/v1/graphql/",
graph.gql`
query ArtworkByContractTokenId($contractAddress: String!, $tokenId: numeric!) {
artworks: artwork(
where: {tokenId: {_eq: $tokenId}, collection: {contractAddress: {_eq: $contractAddress}}}
) {
...ArtworkFragmentExtended
}
}
fragment ArtworkFragmentExtended on artwork {
...ArtworkFragment
...LatestArtworkEventFragment
...ArtworkMintEventFragment
...ArtworkSplitRecipientsFragment
...MostRecentAuctionFragment
...MostRecentOfferFragment
...MostRecentBuyNowFragment
...MostRecentPrivateSaleFragment
owner {
...UserFragment
}
creator: user {
...UserFragment
}
collection {
symbol
contractAddress
slug
name
collectionImageUrl
coverImageUrl
contractType
moderationStatus
maxTokenId
isRevealed
collectionSale: collection_sales(limit: 1) {
mintPrice
saleType
clearingPrice
}
attributes
}
}
fragment ArtworkFragment on artwork {
id
name
description
assetScheme
assetHost
assetPath
assetIPFSPath
metadataScheme
metadataHost
metadataPath
metadataIPFSPath
duration
mimeType
mintTxHash
assetId
assetStatus
tokenId
status
hiddenAt
deletedAt
moderationStatus
moderationFrom
latestTxDate
assetVersion
ownerPublicKey
publicKey
contractAddress
activeSalePriceInETH
lastSalePriceInETH
isIndexed
}
fragment LatestArtworkEventFragment on artwork {
latestEvents: event(
where: {eventType: {_nin: ["MIGRATE_CREATOR", "MIGRATE_CREATOR_PAYMENT_ADDRESS", "MIGRATE_OWNER", "MIGRATE_SELLER", "SELL", "PRICE_CHANGE"]}}
limit: 1
order_by: {blockTimestamp: desc_nulls_last}
) {
id
eventType
data
}
}
fragment ArtworkMintEventFragment on artwork {
mintEvents: event(where: {eventType: {_eq: "MINT"}}, limit: 1) {
...ArtworkEventFragment
}
}
fragment ArtworkEventFragment on event {
id
eventType
data
blockTimestamp
publicKey
tokenId
tokenCreator
}
fragment ArtworkSplitRecipientsFragment on artwork {
splitRecipients: splitRecipients_aggregate {
aggregate {
count
}
}
}
fragment MostRecentAuctionFragment on artwork {
auctions(
where: {status: {_in: ["OPEN", "FINALIZED", "ENDED"]}}
order_by: {endsAt: desc_nulls_first}
limit: 5
) {
auctionId
canceledAt
createdAt
duration
endsAt
finalizedAt
highestBidAmount
highestBidder
id
isPrimarySale
reservePriceInETH
seller
startsAt
status
tokenId
updatedAt
highestBidderUser {
publicKey
username
profileImageUrl
coverImageUrl
name
}
}
}
fragment MostRecentOfferFragment on artwork {
offers(
where: {status: {_in: ["ACCEPTED", "HIGHEST"]}}
order_by: {placedAt: desc}
limit: 5
) {
id
status
amountInETH
acceptedAt
expiresAt
seller
buyer
userBuyer {
name
profileImageUrl
publicKey
username
}
}
}
fragment MostRecentBuyNowFragment on artwork {
buyNows(
where: {status: {_in: ["ACCEPTED", "OPEN"]}}
order_by: {createdAt: desc}
limit: 5
) {
id
status
amountInETH
acceptedAt
seller
buyer
}
}
fragment MostRecentPrivateSaleFragment on artwork {
mostRecentPrivateSales: privateSales(
where: {soldAt: {_is_null: false}}
limit: 1
) {
id
ipfsPath
deadlineAt
soldAt
saleAmountInETH
seller
buyer
}
}
fragment UserFragment on user {
bio
coverImageUrl
createdAt
isAdmin
links
moderationStatus
name
profileImageUrl
publicKey
username
}
`,
{ tokenId, contractAddress }
)
.then((r) => r)