@xyo-network/crypto-nft-witness-wallet-plugin 2.79.2 → 2.79.4
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/dist/browser/Plugin.d.cts +1 -1
- package/dist/browser/Plugin.d.mts +1 -1
- package/dist/browser/Plugin.d.ts +1 -1
- package/dist/browser/Witness.d.cts +3 -4
- package/dist/browser/Witness.d.cts.map +1 -1
- package/dist/browser/Witness.d.mts +3 -4
- package/dist/browser/Witness.d.mts.map +1 -1
- package/dist/browser/Witness.d.ts +3 -4
- package/dist/browser/Witness.d.ts.map +1 -1
- package/dist/browser/index.cjs +87 -99
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +78 -100
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.cts +2 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.cts.map +1 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.mts +2 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.mts.map +1 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.ts +2 -1
- package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.ts.map +1 -1
- package/dist/browser/lib/getNftMetadata.d.cts +1 -8
- package/dist/browser/lib/getNftMetadata.d.cts.map +1 -1
- package/dist/browser/lib/getNftMetadata.d.mts +1 -8
- package/dist/browser/lib/getNftMetadata.d.mts.map +1 -1
- package/dist/browser/lib/getNftMetadata.d.ts +1 -8
- package/dist/browser/lib/getNftMetadata.d.ts.map +1 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.cts +5 -12
- package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +1 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.mts +5 -12
- package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +1 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.ts +5 -12
- package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +1 -1
- package/dist/browser/lib/getProvider.d.cts +3 -0
- package/dist/browser/lib/getProvider.d.cts.map +1 -0
- package/dist/browser/lib/getProvider.d.mts +3 -0
- package/dist/browser/lib/getProvider.d.mts.map +1 -0
- package/dist/browser/lib/getProvider.d.ts +3 -0
- package/dist/browser/lib/getProvider.d.ts.map +1 -0
- package/dist/node/Plugin.d.cts +1 -1
- package/dist/node/Plugin.d.mts +1 -1
- package/dist/node/Plugin.d.ts +1 -1
- package/dist/node/Witness.d.cts +3 -4
- package/dist/node/Witness.d.cts.map +1 -1
- package/dist/node/Witness.d.mts +3 -4
- package/dist/node/Witness.d.mts.map +1 -1
- package/dist/node/Witness.d.ts +3 -4
- package/dist/node/Witness.d.ts.map +1 -1
- package/dist/node/index.js +87 -100
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +78 -100
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.cts +2 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.cts.map +1 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.mts +2 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.mts.map +1 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.ts +2 -1
- package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.ts.map +1 -1
- package/dist/node/lib/getNftMetadata.d.cts +1 -8
- package/dist/node/lib/getNftMetadata.d.cts.map +1 -1
- package/dist/node/lib/getNftMetadata.d.mts +1 -8
- package/dist/node/lib/getNftMetadata.d.mts.map +1 -1
- package/dist/node/lib/getNftMetadata.d.ts +1 -8
- package/dist/node/lib/getNftMetadata.d.ts.map +1 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.cts +5 -12
- package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +1 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.mts +5 -12
- package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +1 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.ts +5 -12
- package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +1 -1
- package/dist/node/lib/getProvider.d.cts +3 -0
- package/dist/node/lib/getProvider.d.cts.map +1 -0
- package/dist/node/lib/getProvider.d.mts +3 -0
- package/dist/node/lib/getProvider.d.mts.map +1 -0
- package/dist/node/lib/getProvider.d.ts +3 -0
- package/dist/node/lib/getProvider.d.ts.map +1 -0
- package/package.json +14 -12
- package/src/Witness.ts +6 -10
- package/src/lib/getAssetsFromWalletFromOpenSea.ts +2 -1
- package/src/lib/getNftMetadata.ts +71 -44
- package/src/lib/getNftsOwnedByAddress.ts +42 -41
- package/src/lib/getProvider.ts +5 -0
- package/dist/browser/lib/getInfuraProvider.d.cts +0 -9
- package/dist/browser/lib/getInfuraProvider.d.cts.map +0 -1
- package/dist/browser/lib/getInfuraProvider.d.mts +0 -9
- package/dist/browser/lib/getInfuraProvider.d.mts.map +0 -1
- package/dist/browser/lib/getInfuraProvider.d.ts +0 -9
- package/dist/browser/lib/getInfuraProvider.d.ts.map +0 -1
- package/dist/node/lib/getInfuraProvider.d.cts +0 -9
- package/dist/node/lib/getInfuraProvider.d.cts.map +0 -1
- package/dist/node/lib/getInfuraProvider.d.mts +0 -9
- package/dist/node/lib/getInfuraProvider.d.mts.map +0 -1
- package/dist/node/lib/getInfuraProvider.d.ts +0 -9
- package/dist/node/lib/getInfuraProvider.d.ts.map +0 -1
- package/src/lib/getInfuraProvider.ts +0 -26
|
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
54
54
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
55
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
56
56
|
} & {
|
|
57
|
-
|
|
57
|
+
providers: import("@ethersproject/providers").BaseProvider[];
|
|
58
58
|
}>>;
|
|
59
59
|
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
54
54
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
55
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
56
56
|
} & {
|
|
57
|
-
|
|
57
|
+
providers: import("@ethersproject/providers").BaseProvider[];
|
|
58
58
|
}>>;
|
|
59
59
|
//# sourceMappingURL=Plugin.d.ts.map
|
package/dist/browser/Plugin.d.ts
CHANGED
|
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
54
54
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
55
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
56
56
|
} & {
|
|
57
|
-
|
|
57
|
+
providers: import("@ethersproject/providers").BaseProvider[];
|
|
58
58
|
}>>;
|
|
59
59
|
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
-
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
3
2
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
4
3
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
|
+
import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
|
|
5
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
6
6
|
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
-
|
|
7
|
+
providers: BaseProvider[];
|
|
8
8
|
}>;
|
|
9
|
-
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends
|
|
9
|
+
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
10
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
11
|
get loadMetadata(): boolean;
|
|
12
|
-
get provider(): BaseProvider;
|
|
13
12
|
get timeout(): number;
|
|
14
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
15
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
-
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
3
2
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
4
3
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
|
+
import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
|
|
5
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
6
6
|
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
-
|
|
7
|
+
providers: BaseProvider[];
|
|
8
8
|
}>;
|
|
9
|
-
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends
|
|
9
|
+
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
10
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
11
|
get loadMetadata(): boolean;
|
|
12
|
-
get provider(): BaseProvider;
|
|
13
12
|
get timeout(): number;
|
|
14
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
15
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
-
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
3
2
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
4
3
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
|
+
import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
|
|
5
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
6
6
|
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
-
|
|
7
|
+
providers: BaseProvider[];
|
|
8
8
|
}>;
|
|
9
|
-
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends
|
|
9
|
+
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
10
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
11
|
get loadMetadata(): boolean;
|
|
12
|
-
get provider(): BaseProvider;
|
|
13
12
|
get timeout(): number;
|
|
14
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
15
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/index.ts
|
|
@@ -22,7 +32,6 @@ var src_exports = {};
|
|
|
22
32
|
__export(src_exports, {
|
|
23
33
|
CryptoWalletNftWitness: () => CryptoWalletNftWitness,
|
|
24
34
|
CryptoWalletNftWitnessPlugin: () => CryptoWalletNftWitnessPlugin,
|
|
25
|
-
checkIpfsUrl: () => checkIpfsUrl2,
|
|
26
35
|
contractHasFunctions: () => contractHasFunctions,
|
|
27
36
|
default: () => src_default,
|
|
28
37
|
getErc1155MetadataUri: () => getErc1155MetadataUri,
|
|
@@ -43,10 +52,10 @@ var import_payload_model = require("@xyo-network/payload-model");
|
|
|
43
52
|
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
44
53
|
|
|
45
54
|
// src/Witness.ts
|
|
46
|
-
var
|
|
55
|
+
var import_assert2 = require("@xylabs/assert");
|
|
47
56
|
var import_eth_address = require("@xylabs/eth-address");
|
|
48
|
-
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
49
57
|
var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
|
|
58
|
+
var import_witness_blockchain_abstract3 = require("@xyo-network/witness-blockchain-abstract");
|
|
50
59
|
|
|
51
60
|
// src/lib/contractHasFunctions.ts
|
|
52
61
|
var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
|
|
@@ -69,38 +78,24 @@ var contractHasFunctions = async (provider, address, contractInterface, function
|
|
|
69
78
|
|
|
70
79
|
// src/lib/getNftsOwnedByAddress.ts
|
|
71
80
|
var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
|
|
81
|
+
var import_witness_blockchain_abstract2 = require("@xyo-network/witness-blockchain-abstract");
|
|
72
82
|
var import_lru_cache = require("lru-cache");
|
|
73
83
|
|
|
74
84
|
// src/lib/getAssetsFromWalletFromOpenSea.ts
|
|
75
85
|
var import_assert = require("@xylabs/assert");
|
|
76
86
|
var import_axios = require("@xyo-network/axios");
|
|
77
|
-
var getNftsFromWalletFromOpenSea = async (
|
|
87
|
+
var getNftsFromWalletFromOpenSea = async (providers, address, maxNfts = 200, timeout = 2e3) => {
|
|
78
88
|
const apiKey = (0, import_assert.assertEx)(process.env.OPENSEA_API_KEY, "No opensea key found");
|
|
79
89
|
const axios = new import_axios.AxiosJson({ headers: { "x-api-key": apiKey }, timeout });
|
|
80
90
|
const nfts = (await axios.get(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data.nfts;
|
|
81
91
|
return nfts;
|
|
82
92
|
};
|
|
83
93
|
|
|
84
|
-
// src/lib/getInfuraProvider.ts
|
|
85
|
-
var import_providers = require("@ethersproject/providers");
|
|
86
|
-
var import_assert2 = require("@xylabs/assert");
|
|
87
|
-
var instance = void 0;
|
|
88
|
-
var getInfuraProvider = () => {
|
|
89
|
-
if (instance)
|
|
90
|
-
return instance;
|
|
91
|
-
const config = getInfuraProviderConfig();
|
|
92
|
-
instance = new import_providers.InfuraProvider("homestead", config);
|
|
93
|
-
return instance;
|
|
94
|
-
};
|
|
95
|
-
var getInfuraProviderConfig = () => {
|
|
96
|
-
const projectId = (0, import_assert2.assertEx)(process.env.INFURA_PROJECT_ID, "Missing INFURA_PROJECT_ID ENV VAR");
|
|
97
|
-
const projectSecret = (0, import_assert2.assertEx)(process.env.INFURA_PROJECT_SECRET, "Missing INFURA_PROJECT_SECRET ENV VAR");
|
|
98
|
-
return { projectId, projectSecret };
|
|
99
|
-
};
|
|
100
|
-
|
|
101
94
|
// src/lib/getNftMetadata.ts
|
|
102
95
|
var import_axios2 = require("@xyo-network/axios");
|
|
103
96
|
var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
|
|
97
|
+
var import_witness_blockchain_abstract = require("@xyo-network/witness-blockchain-abstract");
|
|
98
|
+
var import_parse_data_url = __toESM(require("parse-data-url"));
|
|
104
99
|
|
|
105
100
|
// src/lib/tokenTypes.ts
|
|
106
101
|
var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
|
|
@@ -124,57 +119,57 @@ var tokenTypes = async (provider, address) => {
|
|
|
124
119
|
|
|
125
120
|
// src/lib/getNftMetadata.ts
|
|
126
121
|
var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
|
|
127
|
-
var
|
|
128
|
-
const url = new URL(urlToCheck);
|
|
129
|
-
let protocol = url.protocol;
|
|
130
|
-
let host = url.host;
|
|
131
|
-
let path = url.pathname;
|
|
132
|
-
const query = url.search;
|
|
133
|
-
if (protocol === "ipfs:") {
|
|
134
|
-
protocol = "https:";
|
|
135
|
-
host = ipfsGateway2;
|
|
136
|
-
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
137
|
-
const root = `${protocol}//${host}/${path}`;
|
|
138
|
-
return query?.length > 0 ? `${root}?${query}` : root;
|
|
139
|
-
} else {
|
|
140
|
-
return urlToCheck;
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
var getNftMetadata = async (contractAddress, provider, tokenId) => {
|
|
144
|
-
const axios = new import_axios2.AxiosJson({ timeout: 2e3 });
|
|
145
|
-
const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
|
|
122
|
+
var getNftMetadata = async (contractAddress, provider, tokenId, load = false, defaultUri) => {
|
|
146
123
|
const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
|
|
147
124
|
const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
|
|
148
|
-
|
|
149
|
-
let uri1155;
|
|
150
|
-
if (is1155) {
|
|
151
|
-
try {
|
|
152
|
-
uri1155 = await storage1155.uri(tokenId);
|
|
153
|
-
} catch (ex) {
|
|
154
|
-
}
|
|
155
|
-
}
|
|
125
|
+
let uri721 = void 0;
|
|
156
126
|
const is721 = await isErc721(provider, contractAddress);
|
|
157
|
-
let metadataUri;
|
|
158
127
|
if (is721) {
|
|
159
128
|
try {
|
|
160
|
-
|
|
129
|
+
uri721 = await storage721.tokenURI(tokenId);
|
|
161
130
|
} catch (ex) {
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
let uri1155 = void 0;
|
|
134
|
+
if (!uri721) {
|
|
135
|
+
const is1155 = await isErc1155(provider, contractAddress);
|
|
136
|
+
if (is1155) {
|
|
162
137
|
try {
|
|
163
|
-
|
|
164
|
-
} catch (
|
|
138
|
+
uri1155 = await storage1155.uri(tokenId);
|
|
139
|
+
} catch (ex) {
|
|
165
140
|
}
|
|
166
141
|
}
|
|
167
142
|
}
|
|
168
|
-
const tokenMetadataUri =
|
|
169
|
-
const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
|
|
143
|
+
const tokenMetadataUri = uri721 || uri1155 || defaultUri;
|
|
170
144
|
let metadata = void 0;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
145
|
+
if (load) {
|
|
146
|
+
if (tokenMetadataUri?.startsWith("data:")) {
|
|
147
|
+
const parsedDataUrl = (0, import_parse_data_url.default)(tokenMetadataUri);
|
|
148
|
+
if (parsedDataUrl !== false && parsedDataUrl.contentType === "application/json") {
|
|
149
|
+
const buf = parsedDataUrl.toBuffer();
|
|
150
|
+
const value = buf.toString("utf8");
|
|
151
|
+
metadata = JSON.parse(value);
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
let checkedMetaDataUri;
|
|
155
|
+
if (tokenMetadataUri && tokenMetadataUri.length > 5) {
|
|
156
|
+
checkedMetaDataUri = tokenMetadataUri ? (0, import_witness_blockchain_abstract.checkIpfsUrl)(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const axios = new import_axios2.AxiosJson({ timeout: 5e3 });
|
|
160
|
+
metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
|
|
161
|
+
} catch (ex) {
|
|
162
|
+
}
|
|
163
|
+
}
|
|
174
164
|
}
|
|
175
165
|
return [tokenMetadataUri, metadata];
|
|
176
166
|
};
|
|
177
167
|
|
|
168
|
+
// src/lib/getProvider.ts
|
|
169
|
+
var getProvider = (providers) => {
|
|
170
|
+
return providers[Date.now() % providers.length];
|
|
171
|
+
};
|
|
172
|
+
|
|
178
173
|
// src/lib/tryCall.ts
|
|
179
174
|
var tryCall = async (func, name) => {
|
|
180
175
|
try {
|
|
@@ -189,22 +184,6 @@ var tryCall = async (func, name) => {
|
|
|
189
184
|
};
|
|
190
185
|
|
|
191
186
|
// src/lib/getNftsOwnedByAddress.ts
|
|
192
|
-
var checkIpfsUrl2 = (urlToCheck, ipfsGateway2) => {
|
|
193
|
-
const url = new URL(urlToCheck);
|
|
194
|
-
let protocol = url.protocol;
|
|
195
|
-
let host = url.host;
|
|
196
|
-
let path = url.pathname;
|
|
197
|
-
const query = url.search;
|
|
198
|
-
if (protocol === "ipfs:") {
|
|
199
|
-
protocol = "https:";
|
|
200
|
-
host = ipfsGateway2;
|
|
201
|
-
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
202
|
-
const root = `${protocol}//${host}/${path}`;
|
|
203
|
-
return query?.length > 0 ? `${root}?${query}` : root;
|
|
204
|
-
} else {
|
|
205
|
-
return urlToCheck;
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
187
|
var tokenTypeCache = new import_lru_cache.LRUCache({ max: 100 });
|
|
209
188
|
var getTokenTypes = async (provider, address) => {
|
|
210
189
|
const key = `${address}|${(await provider.getNetwork()).chainId}`;
|
|
@@ -217,36 +196,42 @@ var getTokenTypes = async (provider, address) => {
|
|
|
217
196
|
return types;
|
|
218
197
|
}
|
|
219
198
|
};
|
|
220
|
-
var getErc721MetadataUri = async (address, tokenId) => {
|
|
199
|
+
var getErc721MetadataUri = async (address, tokenId, provider) => {
|
|
221
200
|
try {
|
|
222
|
-
const contract = import_open_zeppelin_typechain3.ERC721__factory.connect(address,
|
|
201
|
+
const contract = import_open_zeppelin_typechain3.ERC721__factory.connect(address, provider);
|
|
223
202
|
return [await contract.tokenURI(tokenId), void 0];
|
|
224
203
|
} catch (ex) {
|
|
225
204
|
return [void 0, ex];
|
|
226
205
|
}
|
|
227
206
|
};
|
|
228
|
-
var getErc1155MetadataUri = async (address, tokenId) => {
|
|
207
|
+
var getErc1155MetadataUri = async (address, tokenId, provider) => {
|
|
229
208
|
try {
|
|
230
|
-
const contract = import_open_zeppelin_typechain3.ERC1155__factory.connect(address,
|
|
209
|
+
const contract = import_open_zeppelin_typechain3.ERC1155__factory.connect(address, provider);
|
|
231
210
|
return [await contract.uri(tokenId), void 0];
|
|
232
211
|
} catch (ex) {
|
|
233
212
|
return [void 0, ex];
|
|
234
213
|
}
|
|
235
214
|
};
|
|
236
|
-
var getNftMetadataUri = async (address, tokenId) => {
|
|
237
|
-
const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
|
|
215
|
+
var getNftMetadataUri = async (address, tokenId, provider) => {
|
|
216
|
+
const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)]);
|
|
238
217
|
return results[0][0] ?? results[1][0];
|
|
239
218
|
};
|
|
240
|
-
var getNftsOwnedByAddressWithMetadata = async (publicAddress,
|
|
241
|
-
const nfts = await getNftsOwnedByAddress(publicAddress,
|
|
219
|
+
var getNftsOwnedByAddressWithMetadata = async (publicAddress, providers, maxNfts = 200, timeout = 5e3) => {
|
|
220
|
+
const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout);
|
|
242
221
|
const nftResult = await Promise.all(
|
|
243
222
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
244
223
|
nfts.map(async (nft) => {
|
|
245
224
|
try {
|
|
246
225
|
if (!nft.metadataUri || !nft.metadata) {
|
|
247
|
-
const [metadataUri, metadata] = await getNftMetadata(
|
|
248
|
-
|
|
249
|
-
|
|
226
|
+
const [metadataUri, metadata] = await getNftMetadata(
|
|
227
|
+
nft.implementation ?? nft.address,
|
|
228
|
+
getProvider(providers),
|
|
229
|
+
nft.tokenId,
|
|
230
|
+
true,
|
|
231
|
+
nft.metadataUri
|
|
232
|
+
);
|
|
233
|
+
nft.metadata = nft.metadata ?? metadata;
|
|
234
|
+
nft.metadataUri = nft.metadataUri ?? metadataUri;
|
|
250
235
|
}
|
|
251
236
|
return nft;
|
|
252
237
|
} catch (ex) {
|
|
@@ -259,27 +244,33 @@ var getNftsOwnedByAddressWithMetadata = async (publicAddress, provider, maxNfts
|
|
|
259
244
|
);
|
|
260
245
|
return nftResult;
|
|
261
246
|
};
|
|
262
|
-
var getNftsOwnedByAddress = async (publicAddress,
|
|
263
|
-
const nfts = await getNftsFromWalletFromOpenSea(
|
|
247
|
+
var getNftsOwnedByAddress = async (publicAddress, providers, maxNfts = 100, timeout = 5e3) => {
|
|
248
|
+
const nfts = await getNftsFromWalletFromOpenSea(providers, publicAddress, maxNfts, timeout);
|
|
264
249
|
const nftResult = await Promise.all(
|
|
265
250
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
266
251
|
nfts.map(async (nft) => {
|
|
267
252
|
try {
|
|
268
253
|
const { contract, identifier } = nft;
|
|
254
|
+
const erc1976Status = await (0, import_witness_blockchain_abstract2.getErc1967Status)(getProvider(providers), contract);
|
|
255
|
+
const { implementation } = erc1976Status;
|
|
269
256
|
let supply = "0x01";
|
|
270
|
-
const types = await getTokenTypes(
|
|
257
|
+
const types = await getTokenTypes(getProvider(providers), implementation);
|
|
271
258
|
if (types.includes("ERC1155")) {
|
|
272
|
-
const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(
|
|
273
|
-
supply = await tryCall(async () => (await supply1155.totalSupply(
|
|
259
|
+
const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(implementation, getProvider(providers));
|
|
260
|
+
supply = await tryCall(async () => (await supply1155.totalSupply(erc1976Status.address)).toHexString()) ?? "0x01";
|
|
274
261
|
}
|
|
275
262
|
const fields = {
|
|
276
263
|
address: contract,
|
|
277
|
-
chainId:
|
|
264
|
+
chainId: getProvider(providers).network.chainId,
|
|
265
|
+
metadataUri: nft.metadata_url ?? void 0,
|
|
278
266
|
supply,
|
|
279
267
|
tokenId: identifier,
|
|
280
268
|
type: types.at(0),
|
|
281
269
|
types
|
|
282
270
|
};
|
|
271
|
+
if (implementation !== contract) {
|
|
272
|
+
fields.implementation = implementation;
|
|
273
|
+
}
|
|
283
274
|
return fields;
|
|
284
275
|
} catch (ex) {
|
|
285
276
|
const error = ex;
|
|
@@ -294,15 +285,12 @@ var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 100, timeo
|
|
|
294
285
|
|
|
295
286
|
// src/Witness.ts
|
|
296
287
|
var schema = import_crypto_nft_payload_plugin.NftSchema;
|
|
297
|
-
var defaultMaxNfts =
|
|
298
|
-
var CryptoWalletNftWitness = class extends
|
|
288
|
+
var defaultMaxNfts = 200;
|
|
289
|
+
var CryptoWalletNftWitness = class extends import_witness_blockchain_abstract3.AbstractBlockchainWitness {
|
|
299
290
|
static configSchemas = [import_crypto_nft_payload_plugin.NftWitnessConfigSchema];
|
|
300
291
|
get loadMetadata() {
|
|
301
292
|
return this.config.loadMetadata ?? true;
|
|
302
293
|
}
|
|
303
|
-
get provider() {
|
|
304
|
-
return this.params.provider;
|
|
305
|
-
}
|
|
306
294
|
get timeout() {
|
|
307
295
|
return this.config.timeout ?? 1e4;
|
|
308
296
|
}
|
|
@@ -312,14 +300,14 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
|
|
|
312
300
|
try {
|
|
313
301
|
const observations = await Promise.all(
|
|
314
302
|
queries.map(async (query) => {
|
|
315
|
-
const addressValue = (0,
|
|
303
|
+
const addressValue = (0, import_assert2.assertEx)(query?.address ?? this.config.address, "params.address is required");
|
|
316
304
|
const parsedAddressValue = import_eth_address.EthAddress.parse(addressValue);
|
|
317
|
-
const address = (0,
|
|
305
|
+
const address = (0, import_assert2.assertEx)(parsedAddressValue?.toString(), "Failed to parse params.address");
|
|
318
306
|
const network = this.provider.network;
|
|
319
|
-
const chainId = (0,
|
|
307
|
+
const chainId = (0, import_assert2.assertEx)(network.chainId, "params.chainId is required");
|
|
320
308
|
const maxNfts = query?.maxNfts || defaultMaxNfts;
|
|
321
309
|
try {
|
|
322
|
-
const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, this.
|
|
310
|
+
const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, this.params.providers, maxNfts, this.timeout) : await getNftsOwnedByAddress(address, this.params.providers, maxNfts, this.timeout);
|
|
323
311
|
const observation = nfts.map((nft) => {
|
|
324
312
|
return { ...nft, schema };
|
|
325
313
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getAssetsFromWalletFromOpenSea.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts"],"sourcesContent":["import { CryptoWalletNftWitnessPlugin } from './Plugin'\n\nexport * from './lib'\nexport * from './Witness'\n\nexport { CryptoWalletNftWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoWalletNftWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness'\n\nexport const CryptoWalletNftWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoWalletNftWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoWalletNftWitness.create(params)\n return result\n },\n },\n )\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n provider: BaseProvider\n }\n>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 100\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override configSchemas = [NftWitnessConfigSchema]\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get provider() {\n return this.params.provider\n }\n\n get timeout() {\n return this.config.timeout ?? 10000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const addressValue = assertEx(query?.address ?? this.config.address, 'params.address is required')\n const parsedAddressValue = EthAddress.parse(addressValue)\n const address = assertEx(parsedAddressValue?.toString(), 'Failed to parse params.address')\n const network = this.provider.network\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, this.provider, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`)\n }\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.error(error)\n return []\n }\n }\n}\n","import { Interface } from '@ethersproject/abi'\nimport { Provider } from '@ethersproject/providers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (let i = 0; i < functionNames.length; i++) {\n const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)\n if (!bytecode.includes(nameSig)) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftsFromWalletFromOpenSea } from './getAssetsFromWalletFromOpenSea'\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftMetadata } from './getNftMetadata'\nimport { tokenTypes } from './tokenTypes'\nimport { tryCall } from './tryCall'\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n}\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: BaseProvider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (address: string, tokenId: string): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, getInfuraProvider())\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (address: string, tokenId: string): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, getInfuraProvider())\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n provider: BaseProvider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, provider, maxNfts, timeout)\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(nft.address, provider, nft.tokenId)\n nft.metadata = metadata\n nft.metadataUri = metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n provider: BaseProvider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n //const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(provider.network.chainId, publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n const { contract, identifier } = nft\n let supply = '0x01'\n const types = await getTokenTypes(provider, contract)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(contract, provider)\n supply = (await tryCall(async () => (await supply1155.totalSupply(contract)).toHexString())) ?? '0x01'\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: provider.network.chainId,\n supply,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xyo-network/axios'\n\ninterface OpenSeaNFT {\n collection: string\n contract: string\n created_at: string\n description: string | null\n identifier: string\n image_url: string | null\n is_disabled: boolean\n is_nsfw: boolean\n metadata_url: string | null\n name: string | null\n token_standard: string\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (chainId: number, address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","import { InfuraProvider, Provider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\n\nexport interface InfuraProviderConfig {\n projectId: string\n projectSecret: string\n}\n\nlet instance: InfuraProvider | undefined = undefined\n\nexport const getInfuraProvider = (): Provider => {\n if (instance) return instance\n const config = getInfuraProviderConfig()\n instance = new InfuraProvider('homestead', config)\n return instance\n}\n\nexport const canUseInfuraProvider = (): boolean => {\n return !!process.env.INFURA_PROJECT_ID && !!process.env.INFURA_PROJECT_SECRET ? true : false\n}\n\nexport const getInfuraProviderConfig = (): InfuraProviderConfig => {\n const projectId = assertEx(process.env.INFURA_PROJECT_ID, 'Missing INFURA_PROJECT_ID ENV VAR')\n const projectSecret = assertEx(process.env.INFURA_PROJECT_SECRET, 'Missing INFURA_PROJECT_SECRET ENV VAR')\n return { projectId, projectSecret }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { isErc721, isErc1155 } from './tokenTypes'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n}\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: BaseProvider,\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n tokenId: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable721 = ERC721Enumerable__factory.connect(contractAddress, provider)\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n const is1155 = await isErc1155(provider, contractAddress)\n let uri1155: string | undefined\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri: ${error.message}`)\n }\n }\n\n const is721 = await isErc721(provider, contractAddress)\n let metadataUri: string | undefined\n if (is721) {\n try {\n metadataUri = await enumerable721.tokenURI(tokenId)\n } catch (ex) {\n try {\n metadataUri = await storage721.tokenURI(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadataUri[${contractAddress}][${error.name}]: ${error.message}`)\n }\n }\n }\n\n const tokenMetadataUri = metadataUri ?? uri1155\n\n const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n let metadata: NftMetadata | undefined = undefined\n try {\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadata: ${error.message}`)\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { Provider } from '@ethersproject/providers'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { contractHasFunctions } from './contractHasFunctions'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_open_zeppelin_typechain","import_assert","import_axios","import_open_zeppelin_typechain","ipfsGateway","ex","checkIpfsUrl","ipfsGateway"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getAssetsFromWalletFromOpenSea.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getProvider.ts","../../src/lib/tryCall.ts"],"sourcesContent":["import { CryptoWalletNftWitnessPlugin } from './Plugin'\n\nexport * from './lib'\nexport * from './Witness'\n\nexport { CryptoWalletNftWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoWalletNftWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness'\n\nexport const CryptoWalletNftWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoWalletNftWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoWalletNftWitness.create(params)\n return result\n },\n },\n )\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n providers: BaseProvider[]\n }\n>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 200\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override configSchemas = [NftWitnessConfigSchema]\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get timeout() {\n return this.config.timeout ?? 10000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const addressValue = assertEx(query?.address ?? this.config.address, 'params.address is required')\n const parsedAddressValue = EthAddress.parse(addressValue)\n const address = assertEx(parsedAddressValue?.toString(), 'Failed to parse params.address')\n const network = this.provider.network\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, this.params.providers, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, this.params.providers, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`)\n }\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.error(error)\n return []\n }\n }\n}\n","import { Interface } from '@ethersproject/abi'\nimport { Provider } from '@ethersproject/providers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (let i = 0; i < functionNames.length; i++) {\n const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)\n if (!bytecode.includes(nameSig)) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { getErc1967Status } from '@xyo-network/witness-blockchain-abstract'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftsFromWalletFromOpenSea } from './getAssetsFromWalletFromOpenSea'\nimport { getNftMetadata } from './getNftMetadata'\nimport { getProvider } from './getProvider'\nimport { tokenTypes } from './tokenTypes'\nimport { tryCall } from './tryCall'\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: BaseProvider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (\n address: string,\n tokenId: string,\n provider: BaseProvider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, provider)\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (\n address: string,\n tokenId: string,\n provider: BaseProvider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, provider)\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string, provider: BaseProvider) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: BaseProvider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout)\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(\n nft.implementation ?? nft.address,\n getProvider(providers),\n nft.tokenId,\n true,\n nft.metadataUri,\n )\n nft.metadata = nft.metadata ?? metadata\n nft.metadataUri = nft.metadataUri ?? metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: BaseProvider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n //const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(providers, publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n const { contract, identifier } = nft\n //Check if ERC-1967 Upgradeable\n const erc1976Status = await getErc1967Status(getProvider(providers), contract)\n //console.log(`1976: ${JSON.stringify(erc1976Status, null, 2)}`)\n const { implementation } = erc1976Status\n\n let supply = '0x01'\n const types = await getTokenTypes(getProvider(providers), implementation)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers))\n supply = (await tryCall(async () => (await supply1155.totalSupply(erc1976Status.address)).toHexString())) ?? '0x01'\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: getProvider(providers).network.chainId,\n metadataUri: nft.metadata_url ?? undefined,\n supply,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n if (implementation !== contract) {\n fields.implementation = implementation\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xyo-network/axios'\n\ninterface OpenSeaNFT {\n collection: string\n contract: string\n created_at: string\n description: string | null\n identifier: string\n image_url: string | null\n is_disabled: boolean\n is_nsfw: boolean\n metadata_url: string | null\n name: string | null\n token_standard: string\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (providers: BaseProvider[], address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { BaseProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Contract } from 'ethers'\nimport parseDataUrl from 'parse-data-url'\n\nimport { isErc721, isErc1155 } from './tokenTypes'\n\nconst baseUrlAbi = [\n {\n inputs: [],\n name: 'baseUrl',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n]\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: BaseProvider,\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n tokenId: string,\n load = false,\n defaultUri?: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n let uri721: string | undefined = undefined\n const is721 = await isErc721(provider, contractAddress)\n if (is721) {\n try {\n uri721 = await storage721.tokenURI(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri[${error.name}][${contractAddress}]: storage721.tokenURI(tokenId) failed`)\n }\n }\n\n /*let baseUrl: string | undefined = undefined\n if (is721) {\n try {\n const baseUrlContract = new Contract(contractAddress, baseUrlAbi, provider)\n baseUrl = await baseUrlContract.bareUrl()\n } catch (ex) {\n const error = ex as Error\n console.error(`baseUrl[${error.name}][${contractAddress}]: baseUrl() failed`)\n }\n }\n\n if (baseUrl && !uri721?.startsWith(baseUrl)) {\n uri721 = `${baseUrl}${uri721 ?? tokenId}`\n }\n */\n\n let uri1155: string | undefined = undefined\n if (!uri721) {\n const is1155 = await isErc1155(provider, contractAddress)\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri[${error.name}][${contractAddress}]: storage1155.uri(tokenId) failed`)\n //console.log(error.message)\n }\n }\n }\n\n const tokenMetadataUri = uri721 || uri1155 || defaultUri\n let metadata: NftMetadata | undefined = undefined\n if (load) {\n if (tokenMetadataUri?.startsWith('data:')) {\n const parsedDataUrl = parseDataUrl(tokenMetadataUri)\n if (parsedDataUrl !== false && parsedDataUrl.contentType === 'application/json') {\n const buf = parsedDataUrl.toBuffer()\n const value = buf.toString('utf8')\n metadata = JSON.parse(value)\n }\n } else {\n let checkedMetaDataUri: string | undefined\n if (tokenMetadataUri && tokenMetadataUri.length > 5) {\n checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n }\n try {\n const axios = new AxiosJson({ timeout: 5000 })\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadata: ${error.message}`)\n }\n }\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { Provider } from '@ethersproject/providers'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { contractHasFunctions } from './contractHasFunctions'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","import { BaseProvider } from '@ethersproject/providers'\n\nexport const getProvider = (providers: BaseProvider[]) => {\n return providers[Date.now() % providers.length] //pick a random provider\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["import_crypto_nft_payload_plugin","import_assert","import_witness_blockchain_abstract","import_open_zeppelin_typechain","import_witness_blockchain_abstract","import_axios","import_open_zeppelin_typechain","parseDataUrl"]}
|