@xyo-network/crypto-nft-witness-wallet-plugin 2.78.1 → 2.78.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/dist/browser/Plugin.d.cts +2 -1
- package/dist/browser/Plugin.d.cts.map +1 -1
- package/dist/browser/Plugin.d.mts +2 -1
- package/dist/browser/Plugin.d.mts.map +1 -1
- package/dist/browser/Plugin.d.ts +2 -1
- package/dist/browser/Plugin.d.ts.map +1 -1
- package/dist/browser/Witness.d.cts +5 -1
- package/dist/browser/Witness.d.cts.map +1 -1
- package/dist/browser/Witness.d.mts +5 -1
- package/dist/browser/Witness.d.mts.map +1 -1
- package/dist/browser/Witness.d.ts +5 -1
- package/dist/browser/Witness.d.ts.map +1 -1
- package/dist/browser/index.cjs +140 -124
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +142 -126
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/getNftCollectionMetadata.d.cts.map +1 -1
- package/dist/browser/lib/getNftCollectionMetadata.d.mts.map +1 -1
- package/dist/browser/lib/getNftCollectionMetadata.d.ts.map +1 -1
- package/dist/browser/lib/{getNftFields.d.cts → getNftMetadata.d.cts} +4 -4
- package/dist/browser/lib/getNftMetadata.d.cts.map +1 -0
- package/dist/browser/lib/{getNftFields.d.ts → getNftMetadata.d.mts} +4 -4
- package/dist/browser/lib/getNftMetadata.d.mts.map +1 -0
- package/dist/browser/lib/{getNftFields.d.mts → getNftMetadata.d.ts} +4 -4
- package/dist/browser/lib/getNftMetadata.d.ts.map +1 -0
- package/dist/browser/lib/getNftsOwnedByAddress.d.cts +2 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +1 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.mts +2 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +1 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.ts +2 -1
- package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +1 -1
- package/dist/browser/lib/index.d.cts +2 -0
- package/dist/browser/lib/index.d.cts.map +1 -1
- package/dist/browser/lib/index.d.mts +2 -0
- package/dist/browser/lib/index.d.mts.map +1 -1
- package/dist/browser/lib/index.d.ts +2 -0
- package/dist/browser/lib/index.d.ts.map +1 -1
- package/dist/browser/lib/tokenTypes.d.cts +8 -0
- package/dist/browser/lib/tokenTypes.d.cts.map +1 -0
- package/dist/browser/lib/tokenTypes.d.mts +8 -0
- package/dist/browser/lib/tokenTypes.d.mts.map +1 -0
- package/dist/browser/lib/tokenTypes.d.ts +8 -0
- package/dist/browser/lib/tokenTypes.d.ts.map +1 -0
- package/dist/node/Plugin.d.cts +2 -1
- package/dist/node/Plugin.d.cts.map +1 -1
- package/dist/node/Plugin.d.mts +2 -1
- package/dist/node/Plugin.d.mts.map +1 -1
- package/dist/node/Plugin.d.ts +2 -1
- package/dist/node/Plugin.d.ts.map +1 -1
- package/dist/node/Witness.d.cts +5 -1
- package/dist/node/Witness.d.cts.map +1 -1
- package/dist/node/Witness.d.mts +5 -1
- package/dist/node/Witness.d.mts.map +1 -1
- package/dist/node/Witness.d.ts +5 -1
- package/dist/node/Witness.d.ts.map +1 -1
- package/dist/node/index.js +147 -125
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +143 -126
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/getNftCollectionMetadata.d.cts.map +1 -1
- package/dist/node/lib/getNftCollectionMetadata.d.mts.map +1 -1
- package/dist/node/lib/getNftCollectionMetadata.d.ts.map +1 -1
- package/dist/node/lib/{getNftFields.d.cts → getNftMetadata.d.cts} +4 -4
- package/dist/node/lib/getNftMetadata.d.cts.map +1 -0
- package/dist/node/lib/getNftMetadata.d.mts +11 -0
- package/dist/node/lib/getNftMetadata.d.mts.map +1 -0
- package/dist/node/lib/getNftMetadata.d.ts +11 -0
- package/dist/node/lib/getNftMetadata.d.ts.map +1 -0
- package/dist/node/lib/getNftsOwnedByAddress.d.cts +2 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +1 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.mts +2 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +1 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.ts +2 -1
- package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +1 -1
- package/dist/node/lib/index.d.cts +2 -0
- package/dist/node/lib/index.d.cts.map +1 -1
- package/dist/node/lib/index.d.mts +2 -0
- package/dist/node/lib/index.d.mts.map +1 -1
- package/dist/node/lib/index.d.ts +2 -0
- package/dist/node/lib/index.d.ts.map +1 -1
- package/dist/node/lib/tokenTypes.d.cts +8 -0
- package/dist/node/lib/tokenTypes.d.cts.map +1 -0
- package/dist/node/lib/tokenTypes.d.mts +8 -0
- package/dist/node/lib/tokenTypes.d.mts.map +1 -0
- package/dist/node/lib/tokenTypes.d.ts +8 -0
- package/dist/node/lib/tokenTypes.d.ts.map +1 -0
- package/package.json +14 -10
- package/src/Witness.ts +14 -3
- package/src/lib/getNftCollectionMetadata.ts +0 -2
- package/src/lib/getNftMetadata.ts +92 -0
- package/src/lib/getNftsOwnedByAddress.ts +62 -32
- package/src/lib/index.ts +2 -0
- package/src/lib/tokenTypes.ts +36 -0
- package/dist/browser/lib/getNftFields.d.cts.map +0 -1
- package/dist/browser/lib/getNftFields.d.mts.map +0 -1
- package/dist/browser/lib/getNftFields.d.ts.map +0 -1
- package/dist/node/lib/getNftFields.d.cts.map +0 -1
- package/dist/node/lib/getNftFields.d.mts +0 -11
- package/dist/node/lib/getNftFields.d.mts.map +0 -1
- package/dist/node/lib/getNftFields.d.ts +0 -11
- package/dist/node/lib/getNftFields.d.ts.map +0 -1
- package/src/lib/getNftFields.ts +0 -90
|
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
41
41
|
}) | undefined;
|
|
42
42
|
} & {
|
|
43
43
|
address?: string | undefined;
|
|
44
|
-
chainId?: number | undefined;
|
|
45
44
|
schema: "network.xyo.crypto.nft.witness.config";
|
|
46
45
|
timeout?: number | undefined;
|
|
47
46
|
}, "schema"> & {
|
|
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
53
52
|
};
|
|
54
53
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
54
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
55
|
+
} & {
|
|
56
|
+
provider: import("@ethersproject/abstract-provider").Provider;
|
|
56
57
|
}>>;
|
|
57
58
|
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
|
|
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
41
41
|
}) | undefined;
|
|
42
42
|
} & {
|
|
43
43
|
address?: string | undefined;
|
|
44
|
-
chainId?: number | undefined;
|
|
45
44
|
schema: "network.xyo.crypto.nft.witness.config";
|
|
46
45
|
timeout?: number | undefined;
|
|
47
46
|
}, "schema"> & {
|
|
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
53
52
|
};
|
|
54
53
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
54
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
55
|
+
} & {
|
|
56
|
+
provider: import("@ethersproject/abstract-provider").Provider;
|
|
56
57
|
}>>;
|
|
57
58
|
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
|
package/dist/browser/Plugin.d.ts
CHANGED
|
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
41
41
|
}) | undefined;
|
|
42
42
|
} & {
|
|
43
43
|
address?: string | undefined;
|
|
44
|
-
chainId?: number | undefined;
|
|
45
44
|
schema: "network.xyo.crypto.nft.witness.config";
|
|
46
45
|
timeout?: number | undefined;
|
|
47
46
|
}, "schema"> & {
|
|
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
|
|
|
53
52
|
};
|
|
54
53
|
ephemeralQueryAccountEnabled?: boolean | undefined;
|
|
55
54
|
wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
|
|
55
|
+
} & {
|
|
56
|
+
provider: import("@ethersproject/abstract-provider").Provider;
|
|
56
57
|
}>>;
|
|
57
58
|
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
1
2
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
3
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
3
4
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
5
|
-
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig
|
|
6
|
+
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
+
provider: Provider;
|
|
8
|
+
}>;
|
|
6
9
|
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
7
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
|
+
get provider(): Provider;
|
|
8
12
|
get timeout(): number;
|
|
9
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
10
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,QAAQ,CAAA;CACnB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
1
2
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
3
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
3
4
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
5
|
-
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig
|
|
6
|
+
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
+
provider: Provider;
|
|
8
|
+
}>;
|
|
6
9
|
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
7
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
|
+
get provider(): Provider;
|
|
8
12
|
get timeout(): number;
|
|
9
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
10
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,QAAQ,CAAA;CACnB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
1
2
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
3
|
import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
|
|
3
4
|
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
4
5
|
import { WitnessParams } from '@xyo-network/witness-model';
|
|
5
|
-
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig
|
|
6
|
+
export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
|
|
7
|
+
provider: Provider;
|
|
8
|
+
}>;
|
|
6
9
|
export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
|
|
7
10
|
static configSchemas: "network.xyo.crypto.nft.witness.config"[];
|
|
11
|
+
get provider(): Provider;
|
|
8
12
|
get timeout(): number;
|
|
9
13
|
protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
|
|
10
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,QAAQ,CAAA;CACnB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -27,23 +27,30 @@ __export(src_exports, {
|
|
|
27
27
|
getErc1155MetadataUri: () => getErc1155MetadataUri,
|
|
28
28
|
getErc721MetadataUri: () => getErc721MetadataUri,
|
|
29
29
|
getNftMetadataUri: () => getNftMetadataUri,
|
|
30
|
-
getNftsOwnedByAddress: () => getNftsOwnedByAddress
|
|
30
|
+
getNftsOwnedByAddress: () => getNftsOwnedByAddress,
|
|
31
|
+
getProviderFromEnv: () => getProviderFromEnv,
|
|
32
|
+
hasFunctions: () => hasFunctions,
|
|
33
|
+
isErc1155: () => isErc1155,
|
|
34
|
+
isErc721: () => isErc721,
|
|
35
|
+
tokenTypes: () => tokenTypes
|
|
31
36
|
});
|
|
32
37
|
module.exports = __toCommonJS(src_exports);
|
|
33
38
|
|
|
34
39
|
// src/Plugin.ts
|
|
35
|
-
var
|
|
40
|
+
var import_crypto_nft_payload_plugin2 = require("@xyo-network/crypto-nft-payload-plugin");
|
|
36
41
|
var import_payload_model = require("@xyo-network/payload-model");
|
|
37
42
|
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
38
43
|
|
|
39
44
|
// src/Witness.ts
|
|
40
|
-
var
|
|
45
|
+
var import_assert3 = require("@xylabs/assert");
|
|
41
46
|
var import_eth_address = require("@xylabs/eth-address");
|
|
42
47
|
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
43
|
-
var
|
|
48
|
+
var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
|
|
44
49
|
|
|
45
50
|
// src/lib/getNftsOwnedByAddress.ts
|
|
46
|
-
var
|
|
51
|
+
var import_assert2 = require("@xylabs/assert");
|
|
52
|
+
var import_account = require("@xyo-network/account");
|
|
53
|
+
var import_api_graphql_plugin = require("@xyo-network/api-graphql-plugin");
|
|
47
54
|
var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
|
|
48
55
|
|
|
49
56
|
// src/lib/getInfuraProvider.ts
|
|
@@ -63,57 +70,42 @@ var getInfuraProviderConfig = () => {
|
|
|
63
70
|
return { projectId, projectSecret };
|
|
64
71
|
};
|
|
65
72
|
|
|
66
|
-
// src/lib/
|
|
73
|
+
// src/lib/getNftMetadata.ts
|
|
67
74
|
var import_axios = require("@xyo-network/axios");
|
|
68
|
-
var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
|
|
69
75
|
var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
|
|
70
76
|
|
|
71
|
-
// src/lib/
|
|
77
|
+
// src/lib/tokenTypes.ts
|
|
72
78
|
var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
|
|
73
|
-
var
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const contract1155 = import_open_zeppelin_typechain.ERC1155__factory.connect(contractAddress, provider);
|
|
86
|
-
let name = "";
|
|
87
|
-
try {
|
|
88
|
-
name = await contract721.name();
|
|
89
|
-
} catch (ex) {
|
|
90
|
-
const error = ex;
|
|
91
|
-
console.log(`name: ${error.message}`);
|
|
92
|
-
}
|
|
93
|
-
let symbol = "";
|
|
94
|
-
try {
|
|
95
|
-
symbol = await contract721.symbol();
|
|
96
|
-
} catch (ex) {
|
|
97
|
-
const error = ex;
|
|
98
|
-
console.log(`symbol: ${error.message}`);
|
|
99
|
-
}
|
|
100
|
-
let is1155 = false;
|
|
101
|
-
try {
|
|
102
|
-
is1155 = await contract1155.supportsInterface(getInterfaceID(import_open_zeppelin_typechain.ERC1155__factory.getInterface(import_open_zeppelin_typechain.ERC1155__factory.abi)));
|
|
103
|
-
} catch (ex) {
|
|
104
|
-
const error = ex;
|
|
105
|
-
console.log(`is1155: ${error.message}`);
|
|
106
|
-
is1155 = false;
|
|
79
|
+
var isErc1155 = async (contract) => {
|
|
80
|
+
return await hasFunctions(contract, import_open_zeppelin_typechain.ERC1155URIStorage__factory.createInterface(), ["uri"]);
|
|
81
|
+
};
|
|
82
|
+
var isErc721 = async (contract) => {
|
|
83
|
+
return await hasFunctions(contract, import_open_zeppelin_typechain.IERC721Metadata__factory.createInterface(), ["name", "symbol", "tokenURI"]);
|
|
84
|
+
};
|
|
85
|
+
var hasFunctions = async (contract, contractInterface, functionNames) => {
|
|
86
|
+
const bytecode = await contract.provider.getCode(contract.address);
|
|
87
|
+
for (let i = 0; i < functionNames.length; i++) {
|
|
88
|
+
const nameSig = contractInterface.getSighash(functionNames[i]).substring(2);
|
|
89
|
+
if (!bytecode.includes(nameSig)) {
|
|
90
|
+
return false;
|
|
107
91
|
}
|
|
108
|
-
return
|
|
109
|
-
} catch (ex) {
|
|
110
|
-
const error = ex;
|
|
111
|
-
console.error(`getNftCollectionMetadata: ${error.message}`);
|
|
112
|
-
throw ex;
|
|
92
|
+
return true;
|
|
113
93
|
}
|
|
94
|
+
return false;
|
|
95
|
+
};
|
|
96
|
+
var tokenTypes = async (contract) => {
|
|
97
|
+
const [erc721, erc1155] = await Promise.all([isErc721(contract), isErc1155(contract)]);
|
|
98
|
+
const result = [];
|
|
99
|
+
if (erc721) {
|
|
100
|
+
result.push("ERC721");
|
|
101
|
+
}
|
|
102
|
+
if (erc1155) {
|
|
103
|
+
result.push("ERC1155");
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
114
106
|
};
|
|
115
107
|
|
|
116
|
-
// src/lib/
|
|
108
|
+
// src/lib/getNftMetadata.ts
|
|
117
109
|
var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
|
|
118
110
|
var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
|
|
119
111
|
const url = new URL(urlToCheck);
|
|
@@ -131,59 +123,39 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
|
|
|
131
123
|
return urlToCheck;
|
|
132
124
|
}
|
|
133
125
|
};
|
|
134
|
-
var
|
|
135
|
-
const axios = new import_axios.AxiosJson({ timeout:
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
126
|
+
var getNftMetadata = async (contractAddress, provider, tokenId) => {
|
|
127
|
+
const axios = new import_axios.AxiosJson({ timeout: 2e3 });
|
|
128
|
+
const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
|
|
129
|
+
const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
|
|
130
|
+
const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
|
|
131
|
+
const is1155 = await isErc1155(storage1155);
|
|
132
|
+
let uri1155;
|
|
133
|
+
if (is1155) {
|
|
134
|
+
try {
|
|
135
|
+
uri1155 = await storage1155.uri(tokenId);
|
|
136
|
+
} catch (ex) {
|
|
137
|
+
}
|
|
145
138
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
139
|
+
const is721 = await isErc721(enumerable721);
|
|
140
|
+
let metadataUri;
|
|
141
|
+
if (is721) {
|
|
142
|
+
try {
|
|
143
|
+
metadataUri = await enumerable721.tokenURI(tokenId);
|
|
144
|
+
} catch (ex) {
|
|
145
|
+
try {
|
|
146
|
+
metadataUri = await storage721.tokenURI(tokenId);
|
|
147
|
+
} catch (ex2) {
|
|
148
|
+
}
|
|
149
|
+
}
|
|
152
150
|
}
|
|
153
|
-
const
|
|
151
|
+
const tokenMetadataUri = metadataUri ?? uri1155;
|
|
152
|
+
const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
|
|
154
153
|
let metadata = void 0;
|
|
155
154
|
try {
|
|
156
155
|
metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
|
|
157
156
|
} catch (ex) {
|
|
158
|
-
const error = ex;
|
|
159
|
-
console.error(`metadata: ${error.message}`);
|
|
160
157
|
}
|
|
161
|
-
|
|
162
|
-
address: contractAddress,
|
|
163
|
-
chainId: provider.network.chainId,
|
|
164
|
-
metaDataUri,
|
|
165
|
-
metadata,
|
|
166
|
-
schema: import_crypto_nft_payload_plugin.NftSchema,
|
|
167
|
-
supply: supply ?? "1",
|
|
168
|
-
tokenId,
|
|
169
|
-
type: nftType
|
|
170
|
-
};
|
|
171
|
-
return info;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
// src/lib/getProvider.ts
|
|
175
|
-
var import_providers2 = require("@ethersproject/providers");
|
|
176
|
-
var getProviderFromEnv = (chainId = "homestead") => {
|
|
177
|
-
const infuraWssUri = process.env.INFURA_WSS_URI;
|
|
178
|
-
const infuraProvider = new import_providers2.InfuraProvider("homestead", {
|
|
179
|
-
projectId: process.env.INFURA_PROJECT_ID,
|
|
180
|
-
projectSecret: process.env.INFURA_PROJECT_SECRET
|
|
181
|
-
});
|
|
182
|
-
const infuraWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
|
|
183
|
-
const quickNodeUri = process.env.QUICKNODE_WSS_URI;
|
|
184
|
-
const quickNodeProvider = quickNodeUri ? new import_providers2.WebSocketProvider(quickNodeUri, chainId) : void 0;
|
|
185
|
-
const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider;
|
|
186
|
-
return provider;
|
|
158
|
+
return [tokenMetadataUri, metadata];
|
|
187
159
|
};
|
|
188
160
|
|
|
189
161
|
// src/lib/getNftsOwnedByAddress.ts
|
|
@@ -223,43 +195,68 @@ var getNftMetadataUri = async (address, tokenId) => {
|
|
|
223
195
|
const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
|
|
224
196
|
return results[0][0] ?? results[1][0];
|
|
225
197
|
};
|
|
226
|
-
var getNftsOwnedByAddress = async (publicAddress,
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
198
|
+
var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 1e3, timeout = 2e3) => {
|
|
199
|
+
const endpoint = "https://api.quicknode.com/graphql";
|
|
200
|
+
const witness = await import_api_graphql_plugin.ApiGraphqlWitness.create({
|
|
201
|
+
account: import_account.Account.randomSync(),
|
|
202
|
+
config: { schema: import_api_graphql_plugin.ApiGraphqlWitnessConfigSchema, timeout },
|
|
203
|
+
endpoint
|
|
204
|
+
});
|
|
205
|
+
const query = {
|
|
232
206
|
query: `query Query {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
207
|
+
ethereum {
|
|
208
|
+
walletByAddress(address: "${publicAddress}") {
|
|
209
|
+
walletNFTs (first: ${maxNfts}) {
|
|
210
|
+
edges {
|
|
211
|
+
node {
|
|
212
|
+
nft {
|
|
213
|
+
contractAddress
|
|
214
|
+
metadata
|
|
215
|
+
tokenId
|
|
216
|
+
externalUrl
|
|
217
|
+
name
|
|
218
|
+
}
|
|
241
219
|
}
|
|
242
220
|
}
|
|
243
221
|
}
|
|
244
222
|
}
|
|
245
223
|
}
|
|
246
|
-
}
|
|
247
|
-
|
|
224
|
+
}`,
|
|
225
|
+
schema: import_api_graphql_plugin.GraphqlQuerySchema,
|
|
248
226
|
variables: {}
|
|
249
|
-
}
|
|
227
|
+
};
|
|
228
|
+
const results = await witness.observe([query]);
|
|
229
|
+
const witnessResult = (0, import_assert2.assertEx)(results.at(0), "ApiGraphqlWitness failed");
|
|
250
230
|
const nftResult = await Promise.all(
|
|
251
231
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
252
|
-
Object.values(result
|
|
232
|
+
Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft) => {
|
|
253
233
|
try {
|
|
254
|
-
const { contractAddress, tokenId } = nft.node.nft;
|
|
255
|
-
|
|
234
|
+
const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft;
|
|
235
|
+
let supply = "0x01";
|
|
236
|
+
const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(contractAddress, provider);
|
|
237
|
+
const storage1155 = import_open_zeppelin_typechain3.ERC1155URIStorage__factory.connect(contractAddress, provider);
|
|
238
|
+
const types = await tokenTypes(storage1155);
|
|
239
|
+
if (types.includes("ERC1155")) {
|
|
240
|
+
try {
|
|
241
|
+
supply = (await supply1155.totalSupply(tokenId)).toHexString();
|
|
242
|
+
} catch (ex) {
|
|
243
|
+
}
|
|
244
|
+
}
|
|
256
245
|
const fields = {
|
|
257
246
|
address: contractAddress,
|
|
258
|
-
chainId,
|
|
247
|
+
chainId: (await provider.getNetwork()).chainId,
|
|
248
|
+
metadata,
|
|
249
|
+
metadataUri: externalUrl,
|
|
259
250
|
supply,
|
|
260
251
|
tokenId,
|
|
261
|
-
type
|
|
252
|
+
type: types.at(0),
|
|
253
|
+
types
|
|
262
254
|
};
|
|
255
|
+
if (!fields.metadataUri || !fields.metadata) {
|
|
256
|
+
const [metadataUri, metadata2] = await getNftMetadata(contractAddress, provider, fields.tokenId);
|
|
257
|
+
fields.metadata = metadata2;
|
|
258
|
+
fields.metadataUri = metadataUri;
|
|
259
|
+
}
|
|
263
260
|
return fields;
|
|
264
261
|
} catch (ex) {
|
|
265
262
|
const error = ex;
|
|
@@ -272,27 +269,46 @@ var getNftsOwnedByAddress = async (publicAddress, chainId, privateKey, maxNfts =
|
|
|
272
269
|
return nftResult;
|
|
273
270
|
};
|
|
274
271
|
|
|
272
|
+
// src/lib/getProvider.ts
|
|
273
|
+
var import_providers2 = require("@ethersproject/providers");
|
|
274
|
+
var getProviderFromEnv = (chainId = "homestead") => {
|
|
275
|
+
const infuraWssUri = process.env.INFURA_WSS_URI;
|
|
276
|
+
const infuraProvider = new import_providers2.InfuraProvider("homestead", {
|
|
277
|
+
projectId: process.env.INFURA_PROJECT_ID,
|
|
278
|
+
projectSecret: process.env.INFURA_PROJECT_SECRET
|
|
279
|
+
});
|
|
280
|
+
const infuraWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
|
|
281
|
+
const quickNodeUri = process.env.QUICKNODE_WSS_URI;
|
|
282
|
+
const quickNodeProvider = quickNodeUri ? new import_providers2.WebSocketProvider(quickNodeUri, chainId) : void 0;
|
|
283
|
+
const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider;
|
|
284
|
+
return provider;
|
|
285
|
+
};
|
|
286
|
+
|
|
275
287
|
// src/Witness.ts
|
|
276
|
-
var schema =
|
|
288
|
+
var schema = import_crypto_nft_payload_plugin.NftSchema;
|
|
277
289
|
var defaultMaxNfts = 100;
|
|
278
290
|
var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitness {
|
|
279
|
-
static configSchemas = [
|
|
291
|
+
static configSchemas = [import_crypto_nft_payload_plugin.NftWitnessConfigSchema];
|
|
292
|
+
get provider() {
|
|
293
|
+
return this.params.provider;
|
|
294
|
+
}
|
|
280
295
|
get timeout() {
|
|
281
296
|
return this.config.timeout ?? 2e3;
|
|
282
297
|
}
|
|
283
298
|
async observeHandler(payloads) {
|
|
284
299
|
await this.started("throw");
|
|
285
|
-
const queries = payloads?.filter(
|
|
300
|
+
const queries = payloads?.filter(import_crypto_nft_payload_plugin.isNftWitnessQuery) ?? [];
|
|
286
301
|
const observations = await Promise.all(
|
|
287
302
|
queries.map(async (query) => {
|
|
288
|
-
const address = (0,
|
|
289
|
-
import_eth_address.EthAddress.parse((0,
|
|
303
|
+
const address = (0, import_assert3.assertEx)(
|
|
304
|
+
import_eth_address.EthAddress.parse((0, import_assert3.assertEx)(query?.address || this.config.address, "params.address is required")),
|
|
290
305
|
"Failed to parse params.address"
|
|
291
306
|
).toString();
|
|
292
|
-
const
|
|
307
|
+
const network = await this.provider.getNetwork();
|
|
308
|
+
const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
|
|
293
309
|
const maxNfts = query?.maxNfts || defaultMaxNfts;
|
|
294
310
|
try {
|
|
295
|
-
const nfts = await getNftsOwnedByAddress(address,
|
|
311
|
+
const nfts = await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
|
|
296
312
|
const observation = nfts.map((nft) => {
|
|
297
313
|
return { ...nft, schema };
|
|
298
314
|
});
|
|
@@ -308,7 +324,7 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
|
|
|
308
324
|
|
|
309
325
|
// src/Plugin.ts
|
|
310
326
|
var CryptoWalletNftWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
|
|
311
|
-
{ required: { [
|
|
327
|
+
{ required: { [import_crypto_nft_payload_plugin2.NftSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
312
328
|
{
|
|
313
329
|
witness: async (params) => {
|
|
314
330
|
const result = await CryptoWalletNftWitness.create(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftFields.ts","../../src/lib/getNftCollectionMetadata.ts","../../src/lib/getProvider.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 { 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 } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>>\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 timeout() {\n return this.config.timeout ?? 2000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map(async (query) => {\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, 'params.address is required')),\n 'Failed to parse params.address',\n ).toString()\n const chainId = assertEx(query?.chainId || this.config.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = await getNftsOwnedByAddress(address, chainId, this.account.private.hex, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (error) {\n throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}`)\n }\n }),\n )\n return observations.flat()\n }\n}\n","import { AxiosJson } from '@xyo-network/axios'\nimport { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftFields } from './getNftFields'\nimport { getProviderFromEnv } from './getProvider'\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 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\ninterface QuickNodeNft {\n contractAddress: string\n tokenId: string\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param chainId The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on */\n chainId: number,\n /** @param privateKey The private key of the wallet to use to search for NFTs */\n privateKey: string,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 1000,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 2000,\n): Promise<NftInfoFields[]> => {\n const axios = new AxiosJson()\n const nfts: NftInfoFields[] = []\n const provider = getProviderFromEnv()\n\n const qnUri = 'https://api.quicknode.com/graphql'\n\n const result = await axios.post(qnUri, {\n query: `query Query {\n ethereum {\n walletByAddress(address: \"${publicAddress}\") {\n walletNFTs {\n edges {\n node {\n nft {\n contractAddress\n tokenId\n }\n }\n }\n }\n }\n }\n }`,\n variables: {},\n })\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(result.data.data.ethereum.walletByAddress.walletNFTs.edges).map(async (nft: any) => {\n try {\n const { contractAddress, tokenId } = nft.node.nft as QuickNodeNft\n const { supply, type } = await getNftFields(contractAddress, provider, tokenId)\n const fields: NftInfoFields = {\n address: contractAddress,\n chainId,\n supply,\n tokenId,\n type,\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 { 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 { JsonRpcProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftInfo, NftMetadata, NftSchema, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getNftCollectionMetadata } from './getNftCollectionMetadata'\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 getNftFields = 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: JsonRpcProvider,\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<NftInfo> => {\n const axios = new AxiosJson({ timeout: 500 })\n const storage = ERC721URIStorage__factory.connect(contractAddress, provider)\n const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)\n const { type: nftType } = await getNftCollectionMetadata(contractAddress, provider)\n\n let supply: string | undefined\n try {\n supply = nftType === toTokenType('ERC1155') ? (await supply1155.totalSupply(tokenId)).toHexString() : '0x01'\n } catch (ex) {\n const error = ex as Error\n console.error(`supply: ${error.message}`)\n }\n\n let metaDataUri: string | undefined\n try {\n metaDataUri = await storage.tokenURI(tokenId)\n } catch (ex) {\n const error = ex as Error\n console.error(`metaDataUri: ${error.message}`)\n }\n\n const checkedMetaDataUri = metaDataUri ? checkIpfsUrl(metaDataUri, ipfsGateway) : metaDataUri\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 const info: NftInfo = {\n address: contractAddress,\n chainId: provider.network.chainId,\n metaDataUri,\n metadata,\n schema: NftSchema,\n supply: supply ?? '1',\n tokenId,\n type: nftType,\n }\n return info\n}\n","import { Interface } from '@ethersproject/abi'\nimport { JsonRpcProvider } from '@ethersproject/providers'\nimport { NftCollectionMetadata } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory, ERC1155__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { constants } from 'ethers'\n\nimport { getProviderFromEnv } from './getProvider'\n\nexport function getInterfaceID(contractInterface: Interface) {\n let interfaceID = constants.Zero\n const functions: string[] = Object.keys(contractInterface.functions)\n for (let i = 0; i < functions.length; i++) {\n interfaceID = interfaceID.xor(contractInterface.getSighash(functions[i]))\n }\n\n return interfaceID.toHexString()\n}\n\nexport const getNftCollectionMetadata = 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: JsonRpcProvider,\n): Promise<Omit<NftCollectionMetadata, 'total'>> => {\n try {\n const contract721 = ERC721Enumerable__factory.connect(contractAddress, provider)\n const contract1155 = ERC1155__factory.connect(contractAddress, provider)\n let name: string = ''\n try {\n name = await contract721.name()\n } catch (ex) {\n const error = ex as Error\n console.log(`name: ${error.message}`)\n }\n let symbol: string = ''\n try {\n symbol = await contract721.symbol()\n } catch (ex) {\n const error = ex as Error\n console.log(`symbol: ${error.message}`)\n }\n let is1155: boolean = false\n try {\n is1155 = await contract1155.supportsInterface(getInterfaceID(ERC1155__factory.getInterface(ERC1155__factory.abi)))\n } catch (ex) {\n const error = ex as Error\n console.log(`is1155: ${error.message}`)\n is1155 = false\n }\n return { address: contractAddress, chainId: provider.network.chainId, name, symbol, type: is1155 ? 'ERC1155' : 'ERC721' }\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionMetadata: ${error.message}`)\n throw ex\n }\n}\n","import { InfuraProvider, WebSocketProvider } from '@ethersproject/providers'\n\nexport const getProviderFromEnv = (chainId: string | number = 'homestead') => {\n const infuraWssUri = process.env.INFURA_WSS_URI\n const infuraProvider = new InfuraProvider('homestead', {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n\n const infuraWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined\n\n const quickNodeUri = process.env.QUICKNODE_WSS_URI\n const quickNodeProvider = quickNodeUri ? new WebSocketProvider(quickNodeUri, chainId) : undefined\n\n const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider\n return provider\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_crypto_nft_payload_plugin","import_axios","import_open_zeppelin_typechain","import_open_zeppelin_typechain","ipfsGateway","import_providers","checkIpfsUrl","ipfsGateway"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getProvider.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 { Provider } 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 } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n provider: Provider\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 provider() {\n return this.params.provider\n }\n\n get timeout() {\n return this.config.timeout ?? 2000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map(async (query) => {\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, 'params.address is required')),\n 'Failed to parse params.address',\n ).toString()\n const network = await this.provider.getNetwork()\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = 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 (error) {\n throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}`)\n }\n }),\n )\n return observations.flat()\n }\n}\n","import { Provider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { Account } from '@xyo-network/account'\nimport { ApiGraphqlWitness, ApiGraphqlWitnessConfigSchema, GraphqlQuery, GraphqlQuerySchema, GraphqlResult } from '@xyo-network/api-graphql-plugin'\nimport { NftInfoFields, NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftMetadata } from './getNftMetadata'\nimport { tokenTypes } from './tokenTypes'\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 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\ninterface QuickNodeNft {\n contractAddress: string\n externalUrl: string\n metadata: NftMetadata\n name: string\n tokenId: string\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: Provider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 1000,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 2000,\n): Promise<NftInfoFields[]> => {\n const endpoint = 'https://api.quicknode.com/graphql'\n const witness = await ApiGraphqlWitness.create({\n account: Account.randomSync(),\n config: { schema: ApiGraphqlWitnessConfigSchema, timeout },\n endpoint,\n })\n const query: GraphqlQuery = {\n query: `query Query {\n ethereum {\n walletByAddress(address: \"${publicAddress}\") {\n walletNFTs (first: ${maxNfts}) {\n edges {\n node {\n nft {\n contractAddress\n metadata\n tokenId\n externalUrl\n name\n }\n }\n }\n }\n }\n }\n }`,\n schema: GraphqlQuerySchema,\n variables: {},\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const results = (await witness.observe([query])) as GraphqlResult<any>[]\n const witnessResult = assertEx(results.at(0), 'ApiGraphqlWitness failed')\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft: any) => {\n try {\n const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft as QuickNodeNft\n let supply = '0x01'\n const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n const types = await tokenTypes(storage1155)\n if (types.includes('ERC1155')) {\n try {\n supply = (await supply1155.totalSupply(tokenId)).toHexString()\n } catch (ex) {\n //const error = ex as Error\n //console.error(`supply: ${error.message}`)\n }\n }\n const fields: NftInfoFields = {\n address: contractAddress,\n chainId: (await provider.getNetwork()).chainId,\n metadata,\n metadataUri: externalUrl,\n supply,\n tokenId,\n type: types.at(0),\n types,\n }\n if (!fields.metadataUri || !fields.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(contractAddress, provider, fields.tokenId)\n fields.metadata = metadata\n fields.metadataUri = metadataUri\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 { 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 { Provider } 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: Provider,\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(storage1155)\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(enumerable721)\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 { Interface } from '@ethersproject/abi'\nimport { Contract } from '@ethersproject/contracts'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nexport const isErc1155 = async (contract: Contract) => {\n return await hasFunctions(contract, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (contract: Contract) => {\n return await hasFunctions(contract, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const hasFunctions = async (contract: Contract, contractInterface: Interface, functionNames: string[]) => {\n const bytecode = await contract.provider.getCode(contract.address)\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}\n\nexport const tokenTypes = async (contract: Contract) => {\n const [erc721, erc1155] = await Promise.all([isErc721(contract), isErc1155(contract)])\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 { InfuraProvider, WebSocketProvider } from '@ethersproject/providers'\n\nexport const getProviderFromEnv = (chainId: string | number = 'homestead') => {\n const infuraWssUri = process.env.INFURA_WSS_URI\n const infuraProvider = new InfuraProvider('homestead', {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n\n const infuraWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined\n\n const quickNodeUri = process.env.QUICKNODE_WSS_URI\n const quickNodeProvider = quickNodeUri ? new WebSocketProvider(quickNodeUri, chainId) : undefined\n\n const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider\n return provider\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_assert","import_open_zeppelin_typechain","import_open_zeppelin_typechain","ipfsGateway","ex","checkIpfsUrl","ipfsGateway","metadata","import_providers"]}
|