@zero-tech/zauction-sdk 0.2.10 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/package.json +3 -2
  2. package/src/actions/acceptBid.ts +167 -0
  3. package/src/actions/approveDomainTransfer.ts +25 -0
  4. package/src/actions/approveSpender.ts +27 -0
  5. package/src/actions/buyNow.ts +109 -0
  6. package/src/actions/cancelBid.ts +37 -0
  7. package/src/actions/getBuyNowListing.ts +65 -0
  8. package/src/actions/getPaymentTokenAllowance.ts +30 -0
  9. package/src/actions/index.ts +11 -0
  10. package/src/actions/isZAuctionApproved.ts +20 -0
  11. package/src/actions/placeBid.ts +102 -0
  12. package/src/actions/setBuyNowPrice.ts +56 -0
  13. package/src/actions/setNetworkPaymentToken.ts +46 -0
  14. package/src/api/actions/encodeBid.ts +44 -0
  15. package/src/api/actions/encodeCancelMessage.ts +24 -0
  16. package/src/api/actions/helpers.ts +61 -0
  17. package/src/api/actions/index.ts +6 -0
  18. package/src/api/actions/listBidsForAccount.ts +24 -0
  19. package/src/api/actions/listBidsForTokens.ts +39 -0
  20. package/src/api/actions/submitBid.ts +28 -0
  21. package/src/api/actions/submitCancelMessage.ts +30 -0
  22. package/src/api/client.ts +78 -0
  23. package/src/api/index.ts +1 -0
  24. package/src/api/types.ts +47 -0
  25. package/src/contracts/index.ts +53 -0
  26. package/src/contracts/types/IERC20.d.ts +294 -0
  27. package/src/contracts/types/IERC721.d.ts +472 -0
  28. package/src/contracts/types/IZNSHub.d.ts +578 -0
  29. package/src/contracts/types/ZAuction.d.ts +1487 -0
  30. package/src/contracts/types/ZAuctionV1.d.ts +440 -0
  31. package/src/contracts/types/commons.ts +36 -0
  32. package/src/contracts/types/factories/IERC20__factory.ts +203 -0
  33. package/src/contracts/types/factories/IERC721__factory.ts +308 -0
  34. package/src/contracts/types/factories/IZNSHub__factory.ts +311 -0
  35. package/src/contracts/types/factories/ZAuctionV1__factory.ts +326 -0
  36. package/src/contracts/types/factories/ZAuction__factory.ts +1033 -0
  37. package/src/contracts/types/index.ts +14 -0
  38. package/src/index.ts +468 -0
  39. package/src/subgraph/actions/index.ts +4 -0
  40. package/src/subgraph/actions/listAllBuyNowListings.ts +69 -0
  41. package/src/subgraph/actions/listAllSales.ts +57 -0
  42. package/src/subgraph/actions/listBuyNowSales.ts +44 -0
  43. package/src/subgraph/actions/listSales.ts +33 -0
  44. package/src/subgraph/client.ts +62 -0
  45. package/src/subgraph/helpers/index.ts +39 -0
  46. package/src/subgraph/index.ts +1 -0
  47. package/src/subgraph/queries.ts +75 -0
  48. package/src/subgraph/types.ts +58 -0
  49. package/src/types.ts +181 -0
  50. package/src/utilities/index.ts +2 -0
  51. package/src/utilities/logging.ts +27 -0
@@ -0,0 +1,14 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ export type { IERC20 } from "./IERC20";
5
+ export type { IERC721 } from "./IERC721";
6
+ export type { IZNSHub } from "./IZNSHub";
7
+ export type { ZAuction } from "./ZAuction";
8
+ export type { ZAuctionV1 } from "./ZAuctionV1";
9
+
10
+ export { IERC20__factory } from "./factories/IERC20__factory";
11
+ export { IERC721__factory } from "./factories/IERC721__factory";
12
+ export { IZNSHub__factory } from "./factories/IZNSHub__factory";
13
+ export { ZAuction__factory } from "./factories/ZAuction__factory";
14
+ export { ZAuctionV1__factory } from "./factories/ZAuctionV1__factory";
package/src/index.ts ADDED
@@ -0,0 +1,468 @@
1
+ import * as subgraph from "./subgraph";
2
+ import * as api from "./api";
3
+ import * as actions from "./actions";
4
+
5
+ import { ethers } from "ethers";
6
+
7
+ import {
8
+ PlaceBidStatusCallback,
9
+ NewBidParameters,
10
+ Config,
11
+ Instance,
12
+ Bid,
13
+ BuyNowParams,
14
+ BuyNowListing,
15
+ TokenSale,
16
+ TokenBuy,
17
+ TokenSaleCollection,
18
+ TokenBidCollection,
19
+ TokenBuyNowListingCollection,
20
+ TokenBidFilter,
21
+ } from "./types";
22
+ import {
23
+ getERC721Contract,
24
+ getZAuctionContract,
25
+ getZnsHubContract,
26
+ } from "./contracts";
27
+ import { IZNSHub } from "./contracts/types";
28
+ import { approveDomainTransfer, approveSpender } from "./actions";
29
+ import { getLogger, Maybe } from "./utilities/";
30
+
31
+ const logger = getLogger("zauction-sdk");
32
+
33
+ export * from "./types";
34
+
35
+ export const createInstance = (config: Config): Instance => {
36
+ logger.debug("Creating instance of zAuction SDK");
37
+ logger.debug(config);
38
+
39
+ const subgraphClient: subgraph.SubgraphClient = subgraph.createClient(
40
+ config.subgraphUri,
41
+ config.wildTokenAddress
42
+ );
43
+
44
+ const apiClient: api.ApiClient = api.createClient(config.apiUri);
45
+
46
+ const instance = {
47
+ listSales: async (tokenId: string): Promise<TokenSale[]> => {
48
+ const hub = await getZnsHubContract(
49
+ config.web3Provider,
50
+ config.znsHubAddress
51
+ );
52
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
53
+ const tokenSales: TokenSale[] = await subgraphClient.listSales(
54
+ domainContract,
55
+ tokenId
56
+ );
57
+ return tokenSales;
58
+ },
59
+ listAllSales: async (): Promise<TokenSaleCollection> => {
60
+ const tokenSaleCollection: TokenSaleCollection =
61
+ await subgraphClient.listAllSales();
62
+ return tokenSaleCollection;
63
+ },
64
+ listAllBuyNowListings: async () => {
65
+ const tokenBuyNowListingCollection: TokenBuyNowListingCollection =
66
+ await subgraphClient.listAllBuyNowListings();
67
+ return tokenBuyNowListingCollection;
68
+ },
69
+ listBuyNowSales: async (tokenId: string): Promise<TokenBuy[]> => {
70
+ const hub = await getZnsHubContract(
71
+ config.web3Provider,
72
+ config.znsHubAddress
73
+ );
74
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
75
+ const tokenBuys: TokenBuy[] = await subgraphClient.listBuyNowSales(
76
+ domainContract,
77
+ tokenId
78
+ );
79
+ return tokenBuys;
80
+ },
81
+ listBids: async (
82
+ tokenIds: string[],
83
+ filter?: TokenBidFilter
84
+ ): Promise<TokenBidCollection> => {
85
+ const tokenBidCollection: TokenBidCollection =
86
+ await apiClient.listBidsForTokens(
87
+ tokenIds,
88
+ config.wildTokenAddress,
89
+ filter
90
+ );
91
+ return tokenBidCollection;
92
+ },
93
+ listBidsByAccount: async (account: string) => {
94
+ const bidsList: Bid[] = await apiClient.listBidsByAccount(
95
+ account,
96
+ config.wildTokenAddress
97
+ );
98
+ return bidsList;
99
+ },
100
+ placeBid: async (
101
+ params: NewBidParameters,
102
+ signer: ethers.Signer,
103
+ statusCallback?: PlaceBidStatusCallback
104
+ ) => {
105
+ await actions.placeBid({
106
+ bid: params,
107
+ config: config,
108
+ bidder: await signer.getAddress(),
109
+ encodeBid: apiClient.encodeBid,
110
+ signMessage: (e) => signer.signMessage(e),
111
+ submitBid: apiClient.submitBid,
112
+ statusCallback,
113
+ });
114
+ },
115
+ isZAuctionApprovedToTransferNftByBid: async (
116
+ account: string,
117
+ bid: Bid
118
+ ): Promise<boolean> => {
119
+ logger.trace(
120
+ `Calling to check if user ${account} has approved zAuction to transfer NFTs from ${bid.contract}`
121
+ );
122
+ const isVersion1 = bid.version === "1.0";
123
+
124
+ // route to legacy if version 1.0
125
+ const zAuctionAddress = isVersion1
126
+ ? config.zAuctionLegacyAddress
127
+ : config.zAuctionAddress;
128
+
129
+ const nftContract = await getERC721Contract(
130
+ config.web3Provider,
131
+ bid.contract
132
+ );
133
+
134
+ const isApproved = await actions.isZAuctionApprovedNftTransfer(
135
+ account,
136
+ zAuctionAddress,
137
+ nftContract
138
+ );
139
+
140
+ return isApproved;
141
+ },
142
+
143
+ isZAuctionApprovedToTransferNftByDomain: async (
144
+ account: string,
145
+ tokenId: string
146
+ ): Promise<boolean> => {
147
+ const hub = await getZnsHubContract(
148
+ config.web3Provider,
149
+ config.znsHubAddress
150
+ );
151
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
152
+ logger.trace(
153
+ `Calling to check if user ${account} has approved zAuction to transfer NFTs from ${domainContract}`
154
+ );
155
+ const nftContract = await getERC721Contract(
156
+ config.web3Provider,
157
+ domainContract
158
+ );
159
+
160
+ const isApproved = await actions.isZAuctionApprovedNftTransfer(
161
+ account,
162
+ config.zAuctionAddress,
163
+ nftContract
164
+ );
165
+
166
+ return isApproved;
167
+ },
168
+ isZAuctionLegacyApprovedToTransferNft: async (
169
+ account: string,
170
+ tokenId: string
171
+ ): Promise<boolean> => {
172
+ const hub = await getZnsHubContract(
173
+ config.web3Provider,
174
+ config.znsHubAddress
175
+ );
176
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
177
+ logger.trace(
178
+ `Calling to check if user ${account} has approved zAuction to transfer NFTs from ${domainContract}`
179
+ );
180
+ const nftContract = await getERC721Contract(
181
+ config.web3Provider,
182
+ domainContract
183
+ );
184
+
185
+ const isApproved = await actions.isZAuctionApprovedNftTransfer(
186
+ account,
187
+ config.zAuctionLegacyAddress,
188
+ nftContract
189
+ );
190
+
191
+ return isApproved;
192
+ },
193
+ getZAuctionSpendAllowanceByBid: async (
194
+ account: string,
195
+ bid: Bid
196
+ ): Promise<ethers.BigNumber> => {
197
+ const isVersion1 = bid.version === "1.0";
198
+
199
+ // route to legacy if version 1.0
200
+ const zAuctionAddress = isVersion1
201
+ ? config.zAuctionLegacyAddress
202
+ : config.zAuctionAddress;
203
+
204
+ const bidToken = bid.bidToken ?? config.wildTokenAddress;
205
+
206
+ const allowance = await actions.getPaymentTokenAllowance(
207
+ account,
208
+ bidToken,
209
+ config.web3Provider,
210
+ zAuctionAddress
211
+ );
212
+
213
+ return allowance;
214
+ },
215
+ getZAuctionSpendAllowanceByDomain: async (
216
+ account: string,
217
+ tokenId: string
218
+ ): Promise<ethers.BigNumber> => {
219
+ const contract = await getZAuctionContract(
220
+ config.web3Provider,
221
+ config.zAuctionAddress
222
+ );
223
+ const paymentToken = await contract.getPaymentTokenForDomain(tokenId);
224
+
225
+ const allowance = await actions.getPaymentTokenAllowance(
226
+ account,
227
+ paymentToken,
228
+ config.web3Provider,
229
+ config.zAuctionAddress
230
+ );
231
+ return allowance;
232
+ },
233
+ getZAuctionSpendAllowance: async (
234
+ account: string,
235
+ paymentToken: string
236
+ ): Promise<ethers.BigNumber> => {
237
+ const allowance = await actions.getPaymentTokenAllowance(
238
+ account,
239
+ paymentToken,
240
+ config.web3Provider,
241
+ config.zAuctionAddress
242
+ );
243
+ return allowance;
244
+ },
245
+ getZAuctionLegacySpendAllowance: async (
246
+ account: string
247
+ ): Promise<ethers.BigNumber> => {
248
+ const allowance = await actions.getPaymentTokenAllowance(
249
+ account,
250
+ config.wildTokenAddress,
251
+ config.web3Provider,
252
+ config.zAuctionLegacyAddress
253
+ );
254
+ return allowance;
255
+ },
256
+ // Set the ERC20 token for a specific domain network
257
+ setNetworkPaymentToken: async (
258
+ networkId: string,
259
+ paymentToken: string,
260
+ signer: ethers.Signer
261
+ ): Promise<ethers.ContractTransaction> => {
262
+ const tx = await actions.setNetworkPaymentToken(
263
+ networkId,
264
+ paymentToken,
265
+ signer,
266
+ config
267
+ );
268
+ return tx;
269
+ },
270
+ // Return the ERC20 token used for payment in the network that domain is a part of.
271
+ // This could be either the network payment token or the default payment token
272
+ getPaymentTokenForDomain: async (
273
+ domainTokenId: string
274
+ ): Promise<string> => {
275
+ const contract = await getZAuctionContract(
276
+ config.web3Provider,
277
+ config.zAuctionAddress
278
+ );
279
+ const paymentToken = await contract.getPaymentTokenForDomain(
280
+ domainTokenId
281
+ );
282
+ logger.trace(
283
+ `Payment token for domain with ID ${domainTokenId} is ${paymentToken}`
284
+ );
285
+ return paymentToken;
286
+ },
287
+ approveZAuctionSpendPaymentTokenByBid: async (
288
+ bid: Bid,
289
+ signer: ethers.Signer
290
+ ): Promise<ethers.ContractTransaction> => {
291
+ const isVersion1 = bid.version === "1.0";
292
+
293
+ // route to legacy if version 1.0
294
+ const zAuctionAddress = isVersion1
295
+ ? config.zAuctionLegacyAddress
296
+ : config.zAuctionAddress;
297
+
298
+ const bidToken = bid.bidToken ?? config.wildTokenAddress;
299
+ const tx = await actions.approveSpender(
300
+ bidToken,
301
+ zAuctionAddress,
302
+ signer
303
+ );
304
+ return tx;
305
+ },
306
+ approveZAuctionSpendPaymentTokenByDomain: async (
307
+ tokenId: string,
308
+ signer: ethers.Signer
309
+ ): Promise<ethers.ContractTransaction> => {
310
+ const contract = await getZAuctionContract(
311
+ config.web3Provider,
312
+ config.zAuctionAddress
313
+ );
314
+ const paymentToken = await contract.getPaymentTokenForDomain(tokenId);
315
+ const tx = await approveSpender(
316
+ paymentToken,
317
+ config.zAuctionAddress,
318
+ signer
319
+ );
320
+ return tx;
321
+ },
322
+ approveZAuctionSpendPaymentToken: async (
323
+ paymentTokenAddress: string,
324
+ signer: ethers.Signer
325
+ ): Promise<ethers.ContractTransaction> => {
326
+ const tx = await approveSpender(
327
+ paymentTokenAddress,
328
+ config.zAuctionAddress,
329
+ signer
330
+ );
331
+ return tx;
332
+ },
333
+ approveZAuctionTransferNftByBid: async (
334
+ bid: Bid,
335
+ signer: ethers.Signer
336
+ ): Promise<ethers.ContractTransaction> => {
337
+ const isVersion1 = bid.version === "1.0";
338
+
339
+ // route to legacy if version 1.0
340
+ const zAuctionAddress = isVersion1
341
+ ? config.zAuctionLegacyAddress
342
+ : config.zAuctionAddress;
343
+
344
+ const hub: IZNSHub = await getZnsHubContract(
345
+ signer,
346
+ config.znsHubAddress
347
+ );
348
+ const domainContract = await hub.getRegistrarForDomain(bid.tokenId);
349
+
350
+ const tx = await approveDomainTransfer(
351
+ domainContract,
352
+ zAuctionAddress,
353
+ signer
354
+ );
355
+
356
+ return tx;
357
+ },
358
+ approveZAuctionTransferNftByDomain: async (
359
+ tokenId: string,
360
+ signer: ethers.Signer
361
+ ): Promise<ethers.ContractTransaction> => {
362
+ const hub: IZNSHub = await getZnsHubContract(
363
+ signer,
364
+ config.znsHubAddress
365
+ );
366
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
367
+
368
+ const tx = approveDomainTransfer(
369
+ domainContract,
370
+ config.zAuctionAddress,
371
+ signer
372
+ );
373
+ return tx;
374
+ },
375
+ acceptBid: async (
376
+ bid: Bid,
377
+ signer: ethers.Signer
378
+ ): Promise<ethers.ContractTransaction> => {
379
+ const tx = await actions.acceptBid(bid, signer, config);
380
+ return tx;
381
+ },
382
+ cancelBid: async (
383
+ bid: Bid,
384
+ cancelOnChain: boolean,
385
+ signer: ethers.Signer
386
+ ): Promise<ethers.ContractTransaction | void> => {
387
+ const isVersion1 = bid.version === "1.0";
388
+
389
+ // route to legacy if version 1.0
390
+ const zAuctionAddress = isVersion1
391
+ ? config.zAuctionLegacyAddress
392
+ : config.zAuctionAddress;
393
+
394
+ const tx: ethers.ContractTransaction | void = await actions.cancelBid(
395
+ bid,
396
+ cancelOnChain,
397
+ apiClient,
398
+ zAuctionAddress,
399
+ signer
400
+ );
401
+ return tx;
402
+ },
403
+ buyNow: async (
404
+ params: BuyNowParams,
405
+ signer: ethers.Signer
406
+ ): Promise<ethers.ContractTransaction> => {
407
+ const tx = await actions.buyNow(params, signer, config);
408
+ return tx;
409
+ },
410
+
411
+ // IF no return value then that domain is not on sale
412
+ getBuyNowListing: async (
413
+ tokenId: string
414
+ ): Promise<Maybe<BuyNowListing>> => {
415
+ const listing: Maybe<BuyNowListing> = await actions.getBuyNowListing(
416
+ tokenId,
417
+ config
418
+ );
419
+ return listing;
420
+ },
421
+ setBuyNowPrice: async (
422
+ params: BuyNowParams,
423
+ signer: ethers.Signer
424
+ ): Promise<ethers.ContractTransaction> => {
425
+ const tx = await actions.setBuyNowPrice(
426
+ params,
427
+ signer,
428
+ config.znsHubAddress,
429
+ config.zAuctionAddress
430
+ );
431
+ return tx;
432
+ },
433
+
434
+ cancelBuyNow: async (
435
+ tokenId: string,
436
+ signer: ethers.Signer
437
+ ): Promise<ethers.ContractTransaction> => {
438
+ const contract = await getZAuctionContract(
439
+ signer,
440
+ config.zAuctionAddress
441
+ );
442
+
443
+ const hub: IZNSHub = await getZnsHubContract(
444
+ config.web3Provider,
445
+ config.znsHubAddress
446
+ );
447
+ const domainContract = await hub.getRegistrarForDomain(tokenId);
448
+
449
+ const nftContract = await getERC721Contract(
450
+ config.web3Provider,
451
+ domainContract
452
+ );
453
+
454
+ const seller = await nftContract.ownerOf(tokenId);
455
+ const signerAddress = await signer.getAddress();
456
+
457
+ if (signerAddress !== seller)
458
+ throw Error("Cannot cancel buy now of a domain that is not yours");
459
+
460
+ const tx = await contract
461
+ .connect(signer)
462
+ .setBuyPrice(ethers.BigNumber.from("0"), tokenId);
463
+ return tx;
464
+ },
465
+ };
466
+
467
+ return instance;
468
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./listSales";
2
+ export * from "./listBuyNowSales";
3
+ export * from "./listAllSales";
4
+ export * from "./listAllBuyNowListings";
@@ -0,0 +1,69 @@
1
+ import { ApolloClient } from "@apollo/client/core";
2
+ import {
3
+ ListAllBuyNowListingsQueryOptions,
4
+ TokenBuyNowListingsDto,
5
+ } from "../types";
6
+ import { TokenBuyNowListing, TokenBuyNowListingCollection } from "../../types";
7
+ import * as queries from "../queries";
8
+ import { getLogger } from "../../utilities";
9
+
10
+ const logger = getLogger("subgraph:actions:listAllSales");
11
+
12
+ export const listAllBuyNowListings = async <T>(
13
+ apolloClient: ApolloClient<T>,
14
+ wildToken: string
15
+ ): Promise<TokenBuyNowListingCollection> => {
16
+ const collection: TokenBuyNowListingCollection = {};
17
+
18
+ const options: ListAllBuyNowListingsQueryOptions = {
19
+ count: 1000,
20
+ skipCount: 0,
21
+ };
22
+
23
+ let allListingsLength = 0;
24
+ /* eslint-disable-next-line no-constant-condition */
25
+ while (true) {
26
+ logger.trace(
27
+ `Querying for ${options.count} buy now listings starting at ${options.skipCount}`
28
+ );
29
+
30
+ const queryResult = await apolloClient.query<TokenBuyNowListingsDto>({
31
+ query: queries.getBuyNowTokenListings,
32
+ variables: {
33
+ ...options,
34
+ },
35
+ });
36
+
37
+ if (queryResult.error) {
38
+ throw queryResult.error;
39
+ }
40
+
41
+ const listings: TokenBuyNowListing[] = queryResult.data.buyNowListings.map(
42
+ (e) => {
43
+ const listing: TokenBuyNowListing = {
44
+ tokenId: e.id,
45
+ amount: e.amount,
46
+ paymentToken: e.paymentToken ?? wildToken,
47
+ };
48
+ return listing;
49
+ }
50
+ );
51
+
52
+ for (const listing of listings) {
53
+ if (!collection[listing.tokenId]) {
54
+ collection[listing.tokenId] = [];
55
+ }
56
+ if (listing.amount !== "0") {
57
+ collection[listing.tokenId].push(listing);
58
+ allListingsLength++;
59
+ }
60
+ }
61
+
62
+ if (listings.length < options.count) {
63
+ break;
64
+ }
65
+ }
66
+
67
+ logger.trace(`Found ${allListingsLength} buy now listings`);
68
+ return collection;
69
+ };
@@ -0,0 +1,57 @@
1
+ import { ApolloClient } from "@apollo/client/core";
2
+ import { ListAllSalesQueryOptions } from "../types";
3
+ import { getLogger } from "../../utilities";
4
+ import { TokenSaleCollection } from "../../types";
5
+ import * as queries from "../queries";
6
+ import * as helpers from "../helpers";
7
+
8
+ const logger = getLogger("subgraph:actions:listAllSales");
9
+
10
+ export const listAllSales = async <T>(
11
+ apolloClient: ApolloClient<T>,
12
+ wildToken: string
13
+ ): Promise<TokenSaleCollection> => {
14
+ const collection: TokenSaleCollection = {};
15
+ const options: ListAllSalesQueryOptions = {
16
+ count: 1000,
17
+ skipCount: 0,
18
+ };
19
+
20
+ // eslint-disable-next-line no-constant-condition
21
+ let allSalesLength = 0;
22
+ /* eslint-disable-next-line no-constant-condition */
23
+ while (true) {
24
+ logger.trace(
25
+ `Querying for ${options.count} sales starting at ${options.skipCount}`
26
+ );
27
+
28
+ const sales = await helpers.listSales(
29
+ apolloClient,
30
+ queries.getAllTokenSales,
31
+ options,
32
+ wildToken
33
+ );
34
+
35
+ for (const sale of sales) {
36
+ if (!collection[sale.tokenId]) {
37
+ collection[sale.tokenId] = [];
38
+ }
39
+
40
+ collection[sale.tokenId].push(sale);
41
+ allSalesLength++;
42
+ }
43
+
44
+ /**
45
+ * We will only get back up to `queryCount` # of sales
46
+ * So if we get that many there's probably more sales we need
47
+ * to fetch. If we got back less, we can stop querying
48
+ */
49
+ if (sales.length < options.count) {
50
+ break;
51
+ }
52
+ options.skipCount += sales.length;
53
+ }
54
+
55
+ logger.trace(`Found ${allSalesLength} sales for all domains`);
56
+ return collection;
57
+ };
@@ -0,0 +1,44 @@
1
+ import { ApolloClient } from "@apollo/client/core";
2
+ import { TokenBuyNowSalesDto } from "../types";
3
+ import * as queries from "../queries";
4
+ import { TokenBuy } from "../../types";
5
+ import { getLogger } from "../../utilities";
6
+
7
+ const logger = getLogger("subgraph:actions:listBuyNowSales");
8
+
9
+ export const listBuyNowSales = async <T>(
10
+ apolloClient: ApolloClient<T>,
11
+ contractAddress: string,
12
+ tokenId: string,
13
+ wildToken: string
14
+ ): Promise<TokenBuy[]> => {
15
+ logger.trace(`Querying "buy now" sales for domain with ID ${tokenId}`);
16
+ const queryResult = await apolloClient.query<TokenBuyNowSalesDto>({
17
+ query: queries.getBuyNowTokenSales,
18
+ variables: {
19
+ contractAddress: contractAddress.toLowerCase(),
20
+ tokenId,
21
+ },
22
+ });
23
+
24
+ if (queryResult.error) {
25
+ throw queryResult.error;
26
+ }
27
+
28
+ const buys: TokenBuy[] = queryResult.data.domainTokenSolds.map((e) => {
29
+ const buy: TokenBuy = {
30
+ tokenId: e.tokenId,
31
+ contract: e.contractAddress,
32
+ amount: e.amount,
33
+ seller: e.seller.id,
34
+ buyer: e.buyer.id,
35
+ timestamp: e.timestamp,
36
+ paymentToken: e.paymentToken ?? wildToken,
37
+ topLevelDomainId: e.topLevelDomainId,
38
+ };
39
+ return buy;
40
+ });
41
+
42
+ logger.trace(`Found ${buys.length} buy now sales`);
43
+ return buys;
44
+ };
@@ -0,0 +1,33 @@
1
+ import { ApolloClient } from "@apollo/client/core";
2
+ import { ListSalesQueryOptions } from "../types";
3
+ import * as queries from "../queries";
4
+ import { TokenSale } from "../../types";
5
+ import { getLogger } from "../../utilities";
6
+
7
+ const logger = getLogger("subgraph:actions:listSales");
8
+
9
+ import * as helpers from "../helpers";
10
+
11
+ export const listSales = async <T>(
12
+ apolloClient: ApolloClient<T>,
13
+ contract: string,
14
+ tokenId: string,
15
+ wildToken: string
16
+ ): Promise<TokenSale[]> => {
17
+ logger.trace(`Querying sales for domain with ID ${tokenId}`);
18
+
19
+ const options: ListSalesQueryOptions = {
20
+ contract: contract.toLowerCase(),
21
+ tokenId,
22
+ };
23
+
24
+ const sales = await helpers.listSales(
25
+ apolloClient,
26
+ queries.getTokenSalesForNftQuery,
27
+ options,
28
+ wildToken
29
+ );
30
+
31
+ logger.trace(`Found ${sales.length} sales`);
32
+ return sales;
33
+ };