@xyo-network/crypto-nft-collection-witness-plugin 2.70.3

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 (40) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/Plugin.js +16 -0
  4. package/dist/cjs/Plugin.js.map +1 -0
  5. package/dist/cjs/Witness.js +30 -0
  6. package/dist/cjs/Witness.js.map +1 -0
  7. package/dist/cjs/index.js +11 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/lib/getNftCollectionInfo.js +59 -0
  10. package/dist/cjs/lib/getNftCollectionInfo.js.map +1 -0
  11. package/dist/cjs/lib/index.js +5 -0
  12. package/dist/cjs/lib/index.js.map +1 -0
  13. package/dist/docs.json +21466 -0
  14. package/dist/esm/Plugin.js +11 -0
  15. package/dist/esm/Plugin.js.map +1 -0
  16. package/dist/esm/Witness.js +22 -0
  17. package/dist/esm/Witness.js.map +1 -0
  18. package/dist/esm/index.js +7 -0
  19. package/dist/esm/index.js.map +1 -0
  20. package/dist/esm/lib/getNftCollectionInfo.js +54 -0
  21. package/dist/esm/lib/getNftCollectionInfo.js.map +1 -0
  22. package/dist/esm/lib/index.js +2 -0
  23. package/dist/esm/lib/index.js.map +1 -0
  24. package/dist/types/Plugin.d.ts +54 -0
  25. package/dist/types/Plugin.d.ts.map +1 -0
  26. package/dist/types/Witness.d.ts +14 -0
  27. package/dist/types/Witness.d.ts.map +1 -0
  28. package/dist/types/index.d.ts +6 -0
  29. package/dist/types/index.d.ts.map +1 -0
  30. package/dist/types/lib/getNftCollectionInfo.d.ts +8 -0
  31. package/dist/types/lib/getNftCollectionInfo.d.ts.map +1 -0
  32. package/dist/types/lib/index.d.ts +2 -0
  33. package/dist/types/lib/index.d.ts.map +1 -0
  34. package/package.json +65 -0
  35. package/src/Plugin.ts +16 -0
  36. package/src/Witness.ts +45 -0
  37. package/src/index.ts +9 -0
  38. package/src/lib/getNftCollectionInfo.ts +63 -0
  39. package/src/lib/index.ts +1 -0
  40. package/typedoc.json +5 -0
@@ -0,0 +1,11 @@
1
+ import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin';
2
+ import { PayloadSetSchema } from '@xyo-network/payload-model';
3
+ import { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin';
4
+ import { CryptoNftCollectionWitness } from './Witness';
5
+ export const CryptoNftCollectionWitnessPlugin = () => createPayloadSetWitnessPlugin({ required: { [NftSchema]: 1 }, schema: PayloadSetSchema }, {
6
+ witness: async (params) => {
7
+ const result = await CryptoNftCollectionWitness.create(params);
8
+ return result;
9
+ },
10
+ });
11
+ //# sourceMappingURL=Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAA;AAE9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAEtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,EAAE,CACnD,6BAA6B,CAC3B,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAC1D;IACE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CACF,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { assertEx } from '@xylabs/assert';
2
+ import { isNftCollectionWitnessQueryPayload, NftCollectionWitnessConfigSchema, } from '@xyo-network/crypto-nft-collection-payload-plugin';
3
+ import { AbstractWitness } from '@xyo-network/witness';
4
+ import { getNftCollectionInfo } from './lib';
5
+ export class CryptoNftCollectionWitness extends AbstractWitness {
6
+ static configSchemas = [NftCollectionWitnessConfigSchema];
7
+ get provider() {
8
+ return assertEx(this.params.provider, 'Provider Required');
9
+ }
10
+ async observeHandler(payloads) {
11
+ await this.started('throw');
12
+ const queries = payloads?.filter(isNftCollectionWitnessQueryPayload) ?? [];
13
+ const observations = await Promise.all(queries.map(async (query) => {
14
+ const address = assertEx(query?.address || this.config.address, 'params.address is required');
15
+ const chainId = assertEx(query?.chainId || this.config.chainId, 'params.chainId is required');
16
+ const observation = await getNftCollectionInfo(address, chainId, this.account.private.hex);
17
+ return observation;
18
+ }));
19
+ return observations.flat();
20
+ }
21
+ }
22
+ //# sourceMappingURL=Witness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EACL,kCAAkC,EAIlC,gCAAgC,GACjC,MAAM,mDAAmD,CAAA;AAG1D,OAAO,EAAE,eAAe,EAAiB,MAAM,sBAAsB,CAAA;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAS5C,MAAM,OAAO,0BAEX,SAAQ,eAAwB;IAChC,MAAM,CAAU,aAAa,GAAG,CAAC,gCAAgC,CAAC,CAAA;IAElE,IAAc,QAAQ;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;IAC5D,CAAC;IAEkB,KAAK,CAAC,cAAc,CAAC,QAAoB;QAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC,kCAAkC,CAAC,IAAI,EAAE,CAAA;QAC1E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAA;YAC7F,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAA;YAC7F,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1F,OAAO,WAAW,CAAA;QACpB,CAAC,CAAC,CACH,CAAA;QACD,OAAO,YAAY,CAAC,IAAI,EAAE,CAAA;IAC5B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { CryptoNftCollectionWitnessPlugin } from './Plugin';
2
+ export * from './lib';
3
+ export * from './Witness';
4
+ export { CryptoNftCollectionWitnessPlugin };
5
+ // eslint-disable-next-line import/no-default-export
6
+ export default CryptoNftCollectionWitnessPlugin;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAA;AAE3D,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,gCAAgC,EAAE,CAAA;AAE3C,oDAAoD;AACpD,eAAe,gCAAgC,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { Auth, SDK } from '@infura/sdk';
2
+ import { NftCollectionSchema } from '@xyo-network/crypto-nft-collection-payload-plugin';
3
+ /**
4
+ * These contracts are not evaluable for some
5
+ * reason (too large, nonsensical, etc.)
6
+ */
7
+ export const nonEvaluableContractAddresses = [
8
+ // ENS
9
+ '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',
10
+ ].map((address) => address.toUpperCase());
11
+ export const getNftCollectionInfo = async (
12
+ /**
13
+ * The address of the NFT contract to search for
14
+ */
15
+ contractAddress,
16
+ /**
17
+ * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on
18
+ */
19
+ chainId,
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,
28
+ /**
29
+ * The maximum number of NFTs to return. Configurable to prevent
30
+ * large wallets from exhausting Infura API credits.
31
+ */
32
+ maxNftCount = 20000) => {
33
+ if (nonEvaluableContractAddresses.includes(contractAddress.toUpperCase())) {
34
+ throw new Error(`Unable to evaluate collection with contractAddress: ${contractAddress}`);
35
+ }
36
+ // Instantiate SDK
37
+ const sdk = new SDK(new Auth({
38
+ chainId,
39
+ privateKey,
40
+ projectId: process.env.INFURA_PROJECT_ID,
41
+ // ipfs: {
42
+ // apiKeySecret: process.env.INFURA_IPFS_PROJECT_SECRET,
43
+ // projectId: process.env.INFURA_IPFS_PROJECT_ID,
44
+ // },
45
+ // provider,
46
+ // NOTE: rpcUrl is not required if chainId & projectId are provided
47
+ // rpcUrl: process.env.EVM_RPC_URL,
48
+ secretId: process.env.INFURA_PROJECT_SECRET,
49
+ }));
50
+ const opts = { contractAddress };
51
+ const { name, symbol, tokenType } = await sdk.api.getContractMetadata(opts);
52
+ return { address: contractAddress, chainId, name, schema: NftCollectionSchema, symbol, tokenType };
53
+ };
54
+ //# sourceMappingURL=getNftCollectionInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNftCollectionInfo.js","sourceRoot":"","sources":["../../../src/lib/getNftCollectionInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAA4B,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAEjH;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,MAAM;IACN,4CAA4C;CAC7C,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;AAOzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK;AACvC;;GAEG;AACH,eAAuB;AACvB;;GAEG;AACH,OAAe;AACf,MAAM;AACN,mDAAmD;AACnD,MAAM;AACN,iDAAiD;AACjD;;GAEG;AACH,UAAkB;AAClB;;;GAGG;AACH,WAAW,GAAG,KAAK,EACgB,EAAE;IACrC,IAAI,6BAA6B,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,EAAE;QACzE,MAAM,IAAI,KAAK,CAAC,uDAAuD,eAAe,EAAE,CAAC,CAAA;KAC1F;IACD,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,IAAI,IAAI,CAAC;QACP,OAAO;QACP,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACxC,UAAU;QACV,0DAA0D;QAC1D,mDAAmD;QACnD,KAAK;QACL,YAAY;QACZ,mEAAmE;QACnE,mCAAmC;QACnC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;KAC5C,CAAC,CACH,CAAA;IACD,MAAM,IAAI,GAA2B,EAAE,eAAe,EAAE,CAAA;IACxD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC3E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AACpG,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './getNftCollectionInfo';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { CryptoNftCollectionWitness } from './Witness';
2
+ export declare const CryptoNftCollectionWitnessPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<CryptoNftCollectionWitness<import("@xyo-network/core").BaseParamsFields & {
3
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
4
+ accountDerivationPath?: string | undefined;
5
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
6
+ readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
7
+ readonly name?: string | undefined;
8
+ readonly paging?: Record<string, {
9
+ size?: number | undefined;
10
+ }> | undefined;
11
+ readonly schema: string;
12
+ readonly security?: {
13
+ readonly allowAnonymous?: boolean | undefined;
14
+ readonly allowed?: Record<string, (string | import("@xyo-network/module-model").CosigningAddressSet)[]> | undefined;
15
+ readonly disallowed?: Record<string, string[]> | undefined;
16
+ } | undefined;
17
+ readonly sign?: boolean | undefined;
18
+ readonly storeQueries?: boolean | undefined;
19
+ } & Omit<Omit<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
20
+ readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
21
+ readonly name?: string | undefined;
22
+ readonly paging?: Record<string, {
23
+ size?: number | undefined;
24
+ }> | undefined;
25
+ readonly schema: "network.xyo.crypto.nft.collection.witness.config";
26
+ readonly security?: {
27
+ readonly allowAnonymous?: boolean | undefined;
28
+ readonly allowed?: Record<string, (string | import("@xyo-network/module-model").CosigningAddressSet)[]> | undefined;
29
+ readonly disallowed?: Record<string, string[]> | undefined;
30
+ } | undefined;
31
+ readonly sign?: boolean | undefined;
32
+ readonly storeQueries?: boolean | undefined;
33
+ } & Omit<{
34
+ schema: "network.xyo.crypto.nft.collection.witness.config";
35
+ targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
36
+ schema: "network.xyo.payload.set";
37
+ }) | undefined;
38
+ } & {
39
+ address?: string | undefined;
40
+ chainId?: number | undefined;
41
+ schema: "network.xyo.crypto.nft.collection.witness.config";
42
+ }, "schema"> & {
43
+ schema: "network.xyo.crypto.nft.collection.witness.config";
44
+ }, "schema"> & {
45
+ schema: string;
46
+ }, "schema"> & {
47
+ schema: string;
48
+ };
49
+ ephemeralQueryAccountEnabled?: boolean | undefined;
50
+ wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
51
+ } & {
52
+ provider?: import("@ethersproject/providers").ExternalProvider | import("@ethersproject/providers").JsonRpcFetchFunc | undefined;
53
+ }>>;
54
+ //# sourceMappingURL=Plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAEtD,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS1C,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { ExternalProvider, JsonRpcFetchFunc } from '@ethersproject/providers';
2
+ import { NftCollectionWitnessConfig } from '@xyo-network/crypto-nft-collection-payload-plugin';
3
+ import { AnyConfigSchema } from '@xyo-network/module';
4
+ import { Payload } from '@xyo-network/payload-model';
5
+ import { AbstractWitness, WitnessParams } from '@xyo-network/witness';
6
+ export type CryptoNftCollectionWitnessParams = WitnessParams<AnyConfigSchema<NftCollectionWitnessConfig>, {
7
+ provider?: ExternalProvider | JsonRpcFetchFunc;
8
+ }>;
9
+ export declare class CryptoNftCollectionWitness<TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams> extends AbstractWitness<TParams> {
10
+ static configSchemas: "network.xyo.crypto.nft.collection.witness.config"[];
11
+ protected get provider(): ExternalProvider | JsonRpcFetchFunc;
12
+ protected observeHandler(payloads?: Payload[]): Promise<Payload[]>;
13
+ }
14
+ //# sourceMappingURL=Witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAElF,OAAO,EAIL,0BAA0B,EAE3B,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAIrE,MAAM,MAAM,gCAAgC,GAAG,aAAa,CAC1D,eAAe,CAAC,0BAA0B,CAAC,EAC3C;IACE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAA;CAC/C,CACF,CAAA;AAED,qBAAa,0BAA0B,CACrC,OAAO,SAAS,gCAAgC,GAAG,gCAAgC,CACnF,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,OAAgB,aAAa,uDAAqC;IAElE,SAAS,KAAK,QAAQ,wCAErB;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAalF"}
@@ -0,0 +1,6 @@
1
+ import { CryptoNftCollectionWitnessPlugin } from './Plugin';
2
+ export * from './lib';
3
+ export * from './Witness';
4
+ export { CryptoNftCollectionWitnessPlugin };
5
+ export default CryptoNftCollectionWitnessPlugin;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAA;AAE3D,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,gCAAgC,EAAE,CAAA;AAG3C,eAAe,gCAAgC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin';
2
+ /**
3
+ * These contracts are not evaluable for some
4
+ * reason (too large, nonsensical, etc.)
5
+ */
6
+ export declare const nonEvaluableContractAddresses: string[];
7
+ export declare const getNftCollectionInfo: (contractAddress: string, chainId: number, privateKey: string, maxNftCount?: number) => Promise<NftCollectionInfoPayload>;
8
+ //# sourceMappingURL=getNftCollectionInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNftCollectionInfo.d.ts","sourceRoot":"","sources":["../../../src/lib/getNftCollectionInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAuB,MAAM,mDAAmD,CAAA;AAEjH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,UAGD,CAAA;AAOzC,eAAO,MAAM,oBAAoB,oBAId,MAAM,WAId,MAAM,cAQH,MAAM,2BAMjB,QAAQ,wBAAwB,CAuBlC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './getNftCollectionInfo';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@xyo-network/crypto-nft-collection-witness-plugin",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@ethersproject/providers": "^5.7.2",
14
+ "@infura/sdk": "^2.4.3",
15
+ "@xylabs/assert": "^2.9.3",
16
+ "@xyo-network/crypto-nft-collection-payload-plugin": "~2.70.3",
17
+ "@xyo-network/crypto-nft-payload-plugin": "~2.70.3",
18
+ "@xyo-network/module": "~2.70.3",
19
+ "@xyo-network/payload-model": "~2.70.3",
20
+ "@xyo-network/payloadset-plugin": "~2.70.3",
21
+ "@xyo-network/witness": "~2.70.3"
22
+ },
23
+ "devDependencies": {
24
+ "@xylabs/jest-helpers": "^2.9.3",
25
+ "@xylabs/ts-scripts-yarn3": "^2.19.0",
26
+ "@xylabs/tsconfig": "^2.19.0",
27
+ "ethers": "^5.7.2",
28
+ "jest": "^29.6.2",
29
+ "typescript": "^5.1.6"
30
+ },
31
+ "description": "Primary SDK for using XYO Protocol 2.0",
32
+ "browser": "dist/esm/index.js",
33
+ "docs": "dist/docs.json",
34
+ "exports": {
35
+ ".": {
36
+ "node": {
37
+ "import": "./dist/esm/index.js",
38
+ "require": "./dist/cjs/index.js"
39
+ },
40
+ "browser": {
41
+ "import": "./dist/esm/index.js",
42
+ "require": "./dist/cjs/index.js"
43
+ },
44
+ "default": "./dist/esm/index.js"
45
+ },
46
+ "./dist/docs.json": {
47
+ "default": "./dist/docs.json"
48
+ },
49
+ "./package.json": "./package.json"
50
+ },
51
+ "main": "dist/cjs/index.js",
52
+ "module": "dist/esm/index.js",
53
+ "homepage": "https://xyo.network",
54
+ "license": "LGPL-3.0",
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
61
+ },
62
+ "sideEffects": false,
63
+ "types": "dist/types/index.d.ts",
64
+ "version": "2.70.3"
65
+ }
package/src/Plugin.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'
2
+ import { PayloadSetSchema } from '@xyo-network/payload-model'
3
+ import { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'
4
+
5
+ import { CryptoNftCollectionWitness } from './Witness'
6
+
7
+ export const CryptoNftCollectionWitnessPlugin = () =>
8
+ createPayloadSetWitnessPlugin<CryptoNftCollectionWitness>(
9
+ { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
10
+ {
11
+ witness: async (params) => {
12
+ const result = await CryptoNftCollectionWitness.create(params)
13
+ return result
14
+ },
15
+ },
16
+ )
package/src/Witness.ts ADDED
@@ -0,0 +1,45 @@
1
+ import type { ExternalProvider, JsonRpcFetchFunc } from '@ethersproject/providers'
2
+ import { assertEx } from '@xylabs/assert'
3
+ import {
4
+ isNftCollectionWitnessQueryPayload,
5
+ NftCollectionInfoPayload,
6
+ NftCollectionSchema,
7
+ NftCollectionWitnessConfig,
8
+ NftCollectionWitnessConfigSchema,
9
+ } from '@xyo-network/crypto-nft-collection-payload-plugin'
10
+ import { AnyConfigSchema } from '@xyo-network/module'
11
+ import { Payload } from '@xyo-network/payload-model'
12
+ import { AbstractWitness, WitnessParams } from '@xyo-network/witness'
13
+
14
+ import { getNftCollectionInfo } from './lib'
15
+
16
+ export type CryptoNftCollectionWitnessParams = WitnessParams<
17
+ AnyConfigSchema<NftCollectionWitnessConfig>,
18
+ {
19
+ provider?: ExternalProvider | JsonRpcFetchFunc
20
+ }
21
+ >
22
+
23
+ export class CryptoNftCollectionWitness<
24
+ TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams,
25
+ > extends AbstractWitness<TParams> {
26
+ static override configSchemas = [NftCollectionWitnessConfigSchema]
27
+
28
+ protected get provider() {
29
+ return assertEx(this.params.provider, 'Provider Required')
30
+ }
31
+
32
+ protected override async observeHandler(payloads?: Payload[]): Promise<Payload[]> {
33
+ await this.started('throw')
34
+ const queries = payloads?.filter(isNftCollectionWitnessQueryPayload) ?? []
35
+ const observations = await Promise.all(
36
+ queries.map(async (query) => {
37
+ const address = assertEx(query?.address || this.config.address, 'params.address is required')
38
+ const chainId = assertEx(query?.chainId || this.config.chainId, 'params.chainId is required')
39
+ const observation = await getNftCollectionInfo(address, chainId, this.account.private.hex)
40
+ return observation
41
+ }),
42
+ )
43
+ return observations.flat()
44
+ }
45
+ }
package/src/index.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { CryptoNftCollectionWitnessPlugin } from './Plugin'
2
+
3
+ export * from './lib'
4
+ export * from './Witness'
5
+
6
+ export { CryptoNftCollectionWitnessPlugin }
7
+
8
+ // eslint-disable-next-line import/no-default-export
9
+ export default CryptoNftCollectionWitnessPlugin
@@ -0,0 +1,63 @@
1
+ import { Auth, SDK } from '@infura/sdk'
2
+ import { NftCollectionInfoPayload, NftCollectionSchema } from '@xyo-network/crypto-nft-collection-payload-plugin'
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())
12
+
13
+ type ContractAddressOptions = {
14
+ contractAddress: string
15
+ cursor?: string
16
+ }
17
+
18
+ export const getNftCollectionInfo = async (
19
+ /**
20
+ * The address of the NFT contract to search for
21
+ */
22
+ contractAddress: string,
23
+ /**
24
+ * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on
25
+ */
26
+ chainId: number,
27
+ // /**
28
+ // * The ethers provider to use to search for NFTs
29
+ // */
30
+ // provider: ExternalProvider | JsonRpcFetchFunc,
31
+ /**
32
+ * The private key of the wallet to use to search for NFTs
33
+ */
34
+ 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> => {
41
+ if (nonEvaluableContractAddresses.includes(contractAddress.toUpperCase())) {
42
+ throw new Error(`Unable to evaluate collection with contractAddress: ${contractAddress}`)
43
+ }
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
+ )
60
+ const opts: ContractAddressOptions = { contractAddress }
61
+ const { name, symbol, tokenType } = await sdk.api.getContractMetadata(opts)
62
+ return { address: contractAddress, chainId, name, schema: NftCollectionSchema, symbol, tokenType }
63
+ }
@@ -0,0 +1 @@
1
+ export * from './getNftCollectionInfo'
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["./src/index.ts"],
4
+ "tsconfig": "./tsconfig.typedoc.json"
5
+ }