@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.
- package/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/cjs/Plugin.js +16 -0
- package/dist/cjs/Plugin.js.map +1 -0
- package/dist/cjs/Witness.js +30 -0
- package/dist/cjs/Witness.js.map +1 -0
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/getNftCollectionInfo.js +59 -0
- package/dist/cjs/lib/getNftCollectionInfo.js.map +1 -0
- package/dist/cjs/lib/index.js +5 -0
- package/dist/cjs/lib/index.js.map +1 -0
- package/dist/docs.json +21466 -0
- package/dist/esm/Plugin.js +11 -0
- package/dist/esm/Plugin.js.map +1 -0
- package/dist/esm/Witness.js +22 -0
- package/dist/esm/Witness.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/getNftCollectionInfo.js +54 -0
- package/dist/esm/lib/getNftCollectionInfo.js.map +1 -0
- package/dist/esm/lib/index.js +2 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/dist/types/Plugin.d.ts +54 -0
- package/dist/types/Plugin.d.ts.map +1 -0
- package/dist/types/Witness.d.ts +14 -0
- package/dist/types/Witness.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/getNftCollectionInfo.d.ts +8 -0
- package/dist/types/lib/getNftCollectionInfo.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +2 -0
- package/dist/types/lib/index.d.ts.map +1 -0
- package/package.json +65 -0
- package/src/Plugin.ts +16 -0
- package/src/Witness.ts +45 -0
- package/src/index.ts +9 -0
- package/src/lib/getNftCollectionInfo.ts +63 -0
- package/src/lib/index.ts +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getNftCollectionInfo'
|