@xyo-network/crypto-nft-collection-witness-plugin 2.70.4 → 2.70.6

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 (85) hide show
  1. package/dist/cjs/Witness.js +23 -2
  2. package/dist/cjs/Witness.js.map +1 -1
  3. package/dist/cjs/lib/collectionMetrics/getNftCollectionMetrics.js +21 -0
  4. package/dist/cjs/lib/collectionMetrics/getNftCollectionMetrics.js.map +1 -0
  5. package/dist/cjs/lib/collectionMetrics/index.js +5 -0
  6. package/dist/cjs/lib/collectionMetrics/index.js.map +1 -0
  7. package/dist/cjs/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.js +30 -0
  8. package/dist/cjs/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.js.map +1 -0
  9. package/dist/cjs/lib/collectionMetrics/lib/calculatePropertyDistribution.js +26 -0
  10. package/dist/cjs/lib/collectionMetrics/lib/calculatePropertyDistribution.js.map +1 -0
  11. package/dist/cjs/lib/collectionMetrics/lib/distribution.js +3 -0
  12. package/dist/cjs/lib/collectionMetrics/lib/distribution.js.map +1 -0
  13. package/dist/cjs/lib/collectionMetrics/lib/index.js +6 -0
  14. package/dist/cjs/lib/collectionMetrics/lib/index.js.map +1 -0
  15. package/dist/cjs/lib/getNftCollectionInfo.js +6 -32
  16. package/dist/cjs/lib/getNftCollectionInfo.js.map +1 -1
  17. package/dist/cjs/lib/getNftCollectionNfts.js +51 -0
  18. package/dist/cjs/lib/getNftCollectionNfts.js.map +1 -0
  19. package/dist/cjs/lib/getNftCollectionTotalNfts.js +33 -0
  20. package/dist/cjs/lib/getNftCollectionTotalNfts.js.map +1 -0
  21. package/dist/cjs/lib/index.js +3 -0
  22. package/dist/cjs/lib/index.js.map +1 -1
  23. package/dist/cjs/lib/nonEvaluableContractAddresses.js +12 -0
  24. package/dist/cjs/lib/nonEvaluableContractAddresses.js.map +1 -0
  25. package/dist/docs.json +2171 -1631
  26. package/dist/esm/Witness.js +25 -4
  27. package/dist/esm/Witness.js.map +1 -1
  28. package/dist/esm/lib/collectionMetrics/getNftCollectionMetrics.js +17 -0
  29. package/dist/esm/lib/collectionMetrics/getNftCollectionMetrics.js.map +1 -0
  30. package/dist/esm/lib/collectionMetrics/index.js +2 -0
  31. package/dist/esm/lib/collectionMetrics/index.js.map +1 -0
  32. package/dist/esm/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.js +26 -0
  33. package/dist/esm/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.js.map +1 -0
  34. package/dist/esm/lib/collectionMetrics/lib/calculatePropertyDistribution.js +22 -0
  35. package/dist/esm/lib/collectionMetrics/lib/calculatePropertyDistribution.js.map +1 -0
  36. package/dist/esm/lib/collectionMetrics/lib/distribution.js +2 -0
  37. package/dist/esm/lib/collectionMetrics/lib/distribution.js.map +1 -0
  38. package/dist/esm/lib/collectionMetrics/lib/index.js +3 -0
  39. package/dist/esm/lib/collectionMetrics/lib/index.js.map +1 -0
  40. package/dist/esm/lib/getNftCollectionInfo.js +4 -30
  41. package/dist/esm/lib/getNftCollectionInfo.js.map +1 -1
  42. package/dist/esm/lib/getNftCollectionNfts.js +46 -0
  43. package/dist/esm/lib/getNftCollectionNfts.js.map +1 -0
  44. package/dist/esm/lib/getNftCollectionTotalNfts.js +28 -0
  45. package/dist/esm/lib/getNftCollectionTotalNfts.js.map +1 -0
  46. package/dist/esm/lib/index.js +3 -0
  47. package/dist/esm/lib/index.js.map +1 -1
  48. package/dist/esm/lib/nonEvaluableContractAddresses.js +9 -0
  49. package/dist/esm/lib/nonEvaluableContractAddresses.js.map +1 -0
  50. package/dist/types/Witness.d.ts.map +1 -1
  51. package/dist/types/lib/collectionMetrics/getNftCollectionMetrics.d.ts +13 -0
  52. package/dist/types/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +1 -0
  53. package/dist/types/lib/collectionMetrics/index.d.ts +2 -0
  54. package/dist/types/lib/collectionMetrics/index.d.ts.map +1 -0
  55. package/dist/types/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +3 -0
  56. package/dist/types/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +1 -0
  57. package/dist/types/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +3 -0
  58. package/dist/types/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +1 -0
  59. package/dist/types/lib/collectionMetrics/lib/distribution.d.ts +6 -0
  60. package/dist/types/lib/collectionMetrics/lib/distribution.d.ts.map +1 -0
  61. package/dist/types/lib/collectionMetrics/lib/index.d.ts +3 -0
  62. package/dist/types/lib/collectionMetrics/lib/index.d.ts.map +1 -0
  63. package/dist/types/lib/getNftCollectionInfo.d.ts +2 -7
  64. package/dist/types/lib/getNftCollectionInfo.d.ts.map +1 -1
  65. package/dist/types/lib/getNftCollectionNfts.d.ts +3 -0
  66. package/dist/types/lib/getNftCollectionNfts.d.ts.map +1 -0
  67. package/dist/types/lib/getNftCollectionTotalNfts.d.ts +2 -0
  68. package/dist/types/lib/getNftCollectionTotalNfts.d.ts.map +1 -0
  69. package/dist/types/lib/index.d.ts +3 -0
  70. package/dist/types/lib/index.d.ts.map +1 -1
  71. package/dist/types/lib/nonEvaluableContractAddresses.d.ts +6 -0
  72. package/dist/types/lib/nonEvaluableContractAddresses.d.ts.map +1 -0
  73. package/package.json +8 -7
  74. package/src/Witness.ts +29 -4
  75. package/src/lib/collectionMetrics/getNftCollectionMetrics.ts +29 -0
  76. package/src/lib/collectionMetrics/index.ts +1 -0
  77. package/src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts +25 -0
  78. package/src/lib/collectionMetrics/lib/calculatePropertyDistribution.ts +19 -0
  79. package/src/lib/collectionMetrics/lib/distribution.ts +3 -0
  80. package/src/lib/collectionMetrics/lib/index.ts +2 -0
  81. package/src/lib/getNftCollectionInfo.ts +5 -32
  82. package/src/lib/getNftCollectionNfts.ts +52 -0
  83. package/src/lib/getNftCollectionTotalNfts.ts +35 -0
  84. package/src/lib/index.ts +3 -0
  85. package/src/lib/nonEvaluableContractAddresses.ts +8 -0
@@ -0,0 +1,19 @@
1
+ import { Distribution } from './distribution'
2
+
3
+ export const calculatePropertyDistribution = <T>(array: T[], property: keyof T): Distribution<T> => {
4
+ const distribution: Distribution<T> = {}
5
+ array.forEach((item) => {
6
+ const value = item[property]
7
+ if (value !== undefined && value !== null) {
8
+ const valueString = value.toString()
9
+ if (!distribution[property]) {
10
+ distribution[property] = { [valueString]: 1 }
11
+ } else if (!distribution[property]![valueString]) {
12
+ ;(distribution[property] as Record<string, number>)[valueString] = 1
13
+ } else {
14
+ ;(distribution[property] as Record<string, number>)[valueString] += 1
15
+ }
16
+ }
17
+ })
18
+ return distribution
19
+ }
@@ -0,0 +1,3 @@
1
+ export type Distribution<T> = {
2
+ [K in keyof T]?: { [value: string]: number }
3
+ }
@@ -0,0 +1,2 @@
1
+ export * from './calculateAllPropertiesDistribution'
2
+ export * from './distribution'
@@ -1,14 +1,7 @@
1
1
  import { Auth, SDK } from '@infura/sdk'
2
- import { NftCollectionInfoPayload, NftCollectionSchema } from '@xyo-network/crypto-nft-collection-payload-plugin'
2
+ import { NftCollectionInfo } from '@xyo-network/crypto-nft-collection-payload-plugin'
3
3
 
4
- /**
5
- * These contracts are not evaluable for some
6
- * reason (too large, nonsensical, etc.)
7
- */
8
- export const nonEvaluableContractAddresses = [
9
- // ENS
10
- '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',
11
- ].map((address) => address.toUpperCase())
4
+ import { nonEvaluableContractAddresses } from './nonEvaluableContractAddresses'
12
5
 
13
6
  type ContractAddressOptions = {
14
7
  contractAddress: string
@@ -32,32 +25,12 @@ export const getNftCollectionInfo = async (
32
25
  * The private key of the wallet to use to search for NFTs
33
26
  */
34
27
  privateKey: string,
35
- /**
36
- * The maximum number of NFTs to return. Configurable to prevent
37
- * large wallets from exhausting Infura API credits.
38
- */
39
- maxNftCount = 20000,
40
- ): Promise<NftCollectionInfoPayload> => {
28
+ ): Promise<Omit<NftCollectionInfo, 'total'>> => {
41
29
  if (nonEvaluableContractAddresses.includes(contractAddress.toUpperCase())) {
42
30
  throw new Error(`Unable to evaluate collection with contractAddress: ${contractAddress}`)
43
31
  }
44
- // Instantiate SDK
45
- const sdk = new SDK(
46
- new Auth({
47
- chainId,
48
- privateKey,
49
- projectId: process.env.INFURA_PROJECT_ID,
50
- // ipfs: {
51
- // apiKeySecret: process.env.INFURA_IPFS_PROJECT_SECRET,
52
- // projectId: process.env.INFURA_IPFS_PROJECT_ID,
53
- // },
54
- // provider,
55
- // NOTE: rpcUrl is not required if chainId & projectId are provided
56
- // rpcUrl: process.env.EVM_RPC_URL,
57
- secretId: process.env.INFURA_PROJECT_SECRET,
58
- }),
59
- )
32
+ const sdk = new SDK(new Auth({ chainId, privateKey, projectId: process.env.INFURA_PROJECT_ID, secretId: process.env.INFURA_PROJECT_SECRET }))
60
33
  const opts: ContractAddressOptions = { contractAddress }
61
34
  const { name, symbol, tokenType } = await sdk.api.getContractMetadata(opts)
62
- return { address: contractAddress, chainId, name, schema: NftCollectionSchema, symbol, tokenType }
35
+ return { address: contractAddress, chainId, name, symbol, tokenType }
63
36
  }
@@ -0,0 +1,52 @@
1
+ import { Auth, SDK } from '@infura/sdk'
2
+ import { NftInfo, NftInfoPayload, NftSchema } from '@xyo-network/crypto-nft-payload-plugin'
3
+
4
+ import { nonEvaluableContractAddresses } from './nonEvaluableContractAddresses'
5
+
6
+ type ContractAddressOptions = {
7
+ contractAddress: string
8
+ cursor?: string
9
+ }
10
+
11
+ export const getNftCollectionNfts = async (
12
+ /**
13
+ * The address of the NFT contract to search for
14
+ */
15
+ contractAddress: string,
16
+ /**
17
+ * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on
18
+ */
19
+ chainId: number,
20
+ // /**
21
+ // * The ethers provider to use to search for NFTs
22
+ // */
23
+ // provider: ExternalProvider | JsonRpcFetchFunc,
24
+ /**
25
+ * The private key of the wallet to use to search for NFTs
26
+ */
27
+ privateKey: string,
28
+ /**
29
+ * The maximum number of NFTs to return. Configurable to prevent
30
+ * large wallets from exhausting Infura API credits. Ideally a
31
+ * multiple of 100 as that appears to be the default page size.
32
+ */
33
+ maxNftSampleSize = 100,
34
+ ): Promise<NftInfoPayload[]> => {
35
+ if (nonEvaluableContractAddresses.includes(contractAddress.toUpperCase())) {
36
+ throw new Error(`Unable to evaluate collection with contractAddress: ${contractAddress}`)
37
+ }
38
+ const sdk = new SDK(new Auth({ chainId, privateKey, projectId: process.env.INFURA_PROJECT_ID, secretId: process.env.INFURA_PROJECT_SECRET }))
39
+ const nfts: NftInfo[] = []
40
+ let cursor: string | undefined = undefined
41
+ do {
42
+ const opts: ContractAddressOptions = { contractAddress, cursor }
43
+ const { cursor: nextCursor, pageSize, total, assets } = await sdk.api.getNFTsForCollection(opts)
44
+ const batch: NftInfo[] = assets.slice(0, Math.min(pageSize, total - nfts.length))
45
+ nfts.push(...batch)
46
+ cursor = nextCursor
47
+ if (nfts.length >= total || !cursor) break
48
+ } while (nfts.length < maxNftSampleSize)
49
+ return nfts.map((nft) => {
50
+ return { ...nft, schema: NftSchema }
51
+ })
52
+ }
@@ -0,0 +1,35 @@
1
+ import { Auth, SDK } from '@infura/sdk'
2
+
3
+ import { nonEvaluableContractAddresses } from './nonEvaluableContractAddresses'
4
+
5
+ type ContractAddressOptions = {
6
+ contractAddress: string
7
+ cursor?: string
8
+ }
9
+
10
+ export const getNftCollectionTotalNfts = async (
11
+ /**
12
+ * The address of the NFT contract to search for
13
+ */
14
+ contractAddress: string,
15
+ /**
16
+ * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on
17
+ */
18
+ chainId: number,
19
+ // /**
20
+ // * The ethers provider to use to search for NFTs
21
+ // */
22
+ // provider: ExternalProvider | JsonRpcFetchFunc,
23
+ /**
24
+ * The private key of the wallet to use to search for NFTs
25
+ */
26
+ privateKey: string,
27
+ ): Promise<number> => {
28
+ if (nonEvaluableContractAddresses.includes(contractAddress.toUpperCase())) {
29
+ throw new Error(`Unable to evaluate collection with contractAddress: ${contractAddress}`)
30
+ }
31
+ const sdk = new SDK(new Auth({ chainId, privateKey, projectId: process.env.INFURA_PROJECT_ID, secretId: process.env.INFURA_PROJECT_SECRET }))
32
+ const opts: ContractAddressOptions = { contractAddress }
33
+ const { total } = await sdk.api.getNFTsForCollection(opts)
34
+ return total
35
+ }
package/src/lib/index.ts CHANGED
@@ -1 +1,4 @@
1
+ export * from './collectionMetrics'
1
2
  export * from './getNftCollectionInfo'
3
+ export * from './getNftCollectionNfts'
4
+ export * from './getNftCollectionTotalNfts'
@@ -0,0 +1,8 @@
1
+ /**
2
+ * These contracts are not evaluable for some
3
+ * reason (too large, nonsensical, etc.)
4
+ */
5
+ export const nonEvaluableContractAddresses = [
6
+ // ENS
7
+ '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',
8
+ ].map((address) => address.toUpperCase())