@xyo-network/crypto-nft-witness-wallet-plugin 2.78.2 → 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 +124 -115
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +122 -113
- 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/getNftMetadata.d.cts +2 -2
- package/dist/browser/lib/getNftMetadata.d.cts.map +1 -1
- package/dist/browser/lib/getNftMetadata.d.mts +2 -2
- package/dist/browser/lib/getNftMetadata.d.mts.map +1 -1
- package/dist/browser/lib/getNftMetadata.d.ts +2 -2
- package/dist/browser/lib/getNftMetadata.d.ts.map +1 -1
- 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 +131 -116
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +123 -113
- 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/getNftMetadata.d.cts +2 -2
- package/dist/node/lib/getNftMetadata.d.cts.map +1 -1
- package/dist/node/lib/getNftMetadata.d.mts +2 -2
- package/dist/node/lib/getNftMetadata.d.mts.map +1 -1
- package/dist/node/lib/getNftMetadata.d.ts +2 -2
- package/dist/node/lib/getNftMetadata.d.ts.map +1 -1
- 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 +29 -16
- package/src/lib/getNftsOwnedByAddress.ts +48 -41
- package/src/lib/index.ts +2 -0
- package/src/lib/tokenTypes.ts +36 -0
|
@@ -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,24 +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
|
|
47
|
-
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");
|
|
48
54
|
var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
|
|
49
55
|
|
|
50
56
|
// src/lib/getInfuraProvider.ts
|
|
@@ -64,54 +70,42 @@ var getInfuraProviderConfig = () => {
|
|
|
64
70
|
return { projectId, projectSecret };
|
|
65
71
|
};
|
|
66
72
|
|
|
67
|
-
// src/lib/
|
|
73
|
+
// src/lib/getNftMetadata.ts
|
|
74
|
+
var import_axios = require("@xyo-network/axios");
|
|
75
|
+
var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
|
|
76
|
+
|
|
77
|
+
// src/lib/tokenTypes.ts
|
|
68
78
|
var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const contract1155 = import_open_zeppelin_typechain.ERC1155__factory.connect(contractAddress, provider);
|
|
82
|
-
let name = "";
|
|
83
|
-
try {
|
|
84
|
-
name = await contract721.name();
|
|
85
|
-
} catch (ex) {
|
|
86
|
-
const error = ex;
|
|
87
|
-
console.log(`name: ${error.message}`);
|
|
88
|
-
}
|
|
89
|
-
let symbol = "";
|
|
90
|
-
try {
|
|
91
|
-
symbol = await contract721.symbol();
|
|
92
|
-
} catch (ex) {
|
|
93
|
-
const error = ex;
|
|
94
|
-
console.log(`symbol: ${error.message}`);
|
|
95
|
-
}
|
|
96
|
-
let is1155 = false;
|
|
97
|
-
try {
|
|
98
|
-
is1155 = await contract1155.supportsInterface(getInterfaceID(import_open_zeppelin_typechain.ERC1155__factory.getInterface(import_open_zeppelin_typechain.ERC1155__factory.abi)));
|
|
99
|
-
} catch (ex) {
|
|
100
|
-
const error = ex;
|
|
101
|
-
console.log(`is1155: ${error.message}`);
|
|
102
|
-
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;
|
|
103
91
|
}
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
92
|
+
return true;
|
|
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");
|
|
109
104
|
}
|
|
105
|
+
return result;
|
|
110
106
|
};
|
|
111
107
|
|
|
112
108
|
// src/lib/getNftMetadata.ts
|
|
113
|
-
var import_axios = require("@xyo-network/axios");
|
|
114
|
-
var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
|
|
115
109
|
var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
|
|
116
110
|
var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
|
|
117
111
|
const url = new URL(urlToCheck);
|
|
@@ -131,21 +125,28 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
|
|
|
131
125
|
};
|
|
132
126
|
var getNftMetadata = async (contractAddress, provider, tokenId) => {
|
|
133
127
|
const axios = new import_axios.AxiosJson({ timeout: 2e3 });
|
|
134
|
-
const
|
|
128
|
+
const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
|
|
129
|
+
const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
|
|
135
130
|
const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
|
|
131
|
+
const is1155 = await isErc1155(storage1155);
|
|
136
132
|
let uri1155;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
133
|
+
if (is1155) {
|
|
134
|
+
try {
|
|
135
|
+
uri1155 = await storage1155.uri(tokenId);
|
|
136
|
+
} catch (ex) {
|
|
137
|
+
}
|
|
142
138
|
}
|
|
139
|
+
const is721 = await isErc721(enumerable721);
|
|
143
140
|
let metadataUri;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
+
}
|
|
149
150
|
}
|
|
150
151
|
const tokenMetadataUri = metadataUri ?? uri1155;
|
|
151
152
|
const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
|
|
@@ -153,27 +154,10 @@ var getNftMetadata = async (contractAddress, provider, tokenId) => {
|
|
|
153
154
|
try {
|
|
154
155
|
metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
|
|
155
156
|
} catch (ex) {
|
|
156
|
-
const error = ex;
|
|
157
|
-
console.error(`metadata: ${error.message}`);
|
|
158
157
|
}
|
|
159
158
|
return [tokenMetadataUri, metadata];
|
|
160
159
|
};
|
|
161
160
|
|
|
162
|
-
// src/lib/getProvider.ts
|
|
163
|
-
var import_providers2 = require("@ethersproject/providers");
|
|
164
|
-
var getProviderFromEnv = (chainId = "homestead") => {
|
|
165
|
-
const infuraWssUri = process.env.INFURA_WSS_URI;
|
|
166
|
-
const infuraProvider = new import_providers2.InfuraProvider("homestead", {
|
|
167
|
-
projectId: process.env.INFURA_PROJECT_ID,
|
|
168
|
-
projectSecret: process.env.INFURA_PROJECT_SECRET
|
|
169
|
-
});
|
|
170
|
-
const infuraWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
|
|
171
|
-
const quickNodeUri = process.env.QUICKNODE_WSS_URI;
|
|
172
|
-
const quickNodeProvider = quickNodeUri ? new import_providers2.WebSocketProvider(quickNodeUri, chainId) : void 0;
|
|
173
|
-
const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider;
|
|
174
|
-
return provider;
|
|
175
|
-
};
|
|
176
|
-
|
|
177
161
|
// src/lib/getNftsOwnedByAddress.ts
|
|
178
162
|
var checkIpfsUrl2 = (urlToCheck, ipfsGateway2) => {
|
|
179
163
|
const url = new URL(urlToCheck);
|
|
@@ -211,56 +195,62 @@ var getNftMetadataUri = async (address, tokenId) => {
|
|
|
211
195
|
const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
|
|
212
196
|
return results[0][0] ?? results[1][0];
|
|
213
197
|
};
|
|
214
|
-
var getNftsOwnedByAddress = async (publicAddress,
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
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 = {
|
|
219
206
|
query: `query Query {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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
|
+
}
|
|
231
219
|
}
|
|
232
220
|
}
|
|
233
221
|
}
|
|
234
222
|
}
|
|
235
223
|
}
|
|
236
|
-
}
|
|
237
|
-
|
|
224
|
+
}`,
|
|
225
|
+
schema: import_api_graphql_plugin.GraphqlQuerySchema,
|
|
238
226
|
variables: {}
|
|
239
|
-
}
|
|
227
|
+
};
|
|
228
|
+
const results = await witness.observe([query]);
|
|
229
|
+
const witnessResult = (0, import_assert2.assertEx)(results.at(0), "ApiGraphqlWitness failed");
|
|
240
230
|
const nftResult = await Promise.all(
|
|
241
231
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
242
|
-
Object.values(result
|
|
232
|
+
Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft) => {
|
|
243
233
|
try {
|
|
244
234
|
const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft;
|
|
245
235
|
let supply = "0x01";
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
console.error(`supply: ${error.message}`);
|
|
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
|
+
}
|
|
255
244
|
}
|
|
256
245
|
const fields = {
|
|
257
246
|
address: contractAddress,
|
|
258
|
-
chainId,
|
|
247
|
+
chainId: (await provider.getNetwork()).chainId,
|
|
259
248
|
metadata,
|
|
260
249
|
metadataUri: externalUrl,
|
|
261
250
|
supply,
|
|
262
251
|
tokenId,
|
|
263
|
-
type
|
|
252
|
+
type: types.at(0),
|
|
253
|
+
types
|
|
264
254
|
};
|
|
265
255
|
if (!fields.metadataUri || !fields.metadata) {
|
|
266
256
|
const [metadataUri, metadata2] = await getNftMetadata(contractAddress, provider, fields.tokenId);
|
|
@@ -279,27 +269,46 @@ var getNftsOwnedByAddress = async (publicAddress, chainId, privateKey, maxNfts =
|
|
|
279
269
|
return nftResult;
|
|
280
270
|
};
|
|
281
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
|
+
|
|
282
287
|
// src/Witness.ts
|
|
283
|
-
var schema =
|
|
288
|
+
var schema = import_crypto_nft_payload_plugin.NftSchema;
|
|
284
289
|
var defaultMaxNfts = 100;
|
|
285
290
|
var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitness {
|
|
286
|
-
static configSchemas = [
|
|
291
|
+
static configSchemas = [import_crypto_nft_payload_plugin.NftWitnessConfigSchema];
|
|
292
|
+
get provider() {
|
|
293
|
+
return this.params.provider;
|
|
294
|
+
}
|
|
287
295
|
get timeout() {
|
|
288
296
|
return this.config.timeout ?? 2e3;
|
|
289
297
|
}
|
|
290
298
|
async observeHandler(payloads) {
|
|
291
299
|
await this.started("throw");
|
|
292
|
-
const queries = payloads?.filter(
|
|
300
|
+
const queries = payloads?.filter(import_crypto_nft_payload_plugin.isNftWitnessQuery) ?? [];
|
|
293
301
|
const observations = await Promise.all(
|
|
294
302
|
queries.map(async (query) => {
|
|
295
|
-
const address = (0,
|
|
296
|
-
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")),
|
|
297
305
|
"Failed to parse params.address"
|
|
298
306
|
).toString();
|
|
299
|
-
const
|
|
307
|
+
const network = await this.provider.getNetwork();
|
|
308
|
+
const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
|
|
300
309
|
const maxNfts = query?.maxNfts || defaultMaxNfts;
|
|
301
310
|
try {
|
|
302
|
-
const nfts = await getNftsOwnedByAddress(address,
|
|
311
|
+
const nfts = await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
|
|
303
312
|
const observation = nfts.map((nft) => {
|
|
304
313
|
return { ...nft, schema };
|
|
305
314
|
});
|
|
@@ -315,7 +324,7 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
|
|
|
315
324
|
|
|
316
325
|
// src/Plugin.ts
|
|
317
326
|
var CryptoWalletNftWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
|
|
318
|
-
{ required: { [
|
|
327
|
+
{ required: { [import_crypto_nft_payload_plugin2.NftSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
319
328
|
{
|
|
320
329
|
witness: async (params) => {
|
|
321
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/getNftCollectionMetadata.ts","../../src/lib/getNftMetadata.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, NftMetadata, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftCollectionMetadata } from './getNftCollectionMetadata'\nimport { getNftMetadata } from './getNftMetadata'\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 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 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({ timeout })\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 (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 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, metadata, externalUrl } = nft.node.nft as QuickNodeNft\n let supply = '0x01'\n let type = toTokenType('ERC721')\n try {\n const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)\n const { type: nftType } = await getNftCollectionMetadata(contractAddress, provider)\n type = nftType\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 const fields: NftInfoFields = {\n address: contractAddress,\n chainId,\n metadata,\n metadataUri: externalUrl,\n supply,\n tokenId,\n type,\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 { 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 { JsonRpcProvider } 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'\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: 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<[string | undefined, NftMetadata | undefined]> => {\n const axios = new AxiosJson({ timeout: 2000 })\n const storage = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n let uri1155: string | undefined\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 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 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 { 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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,oCAA0B;AAC1B,2BAAiC;AACjC,+BAA8C;;;ACF9C,IAAAC,iBAAyB;AACzB,yBAA2B;AAC3B,8BAAgC;AAChC,IAAAC,oCAOO;;;ACVP,IAAAC,gBAA0B;AAC1B,uCAAwD;AACxD,IAAAC,kCAA0E;;;ACF1E,uBAAyC;AACzC,oBAAyB;AAOzB,IAAI,WAAuC;AAEpC,IAAM,oBAAoB,MAAgB;AAC/C,MAAI;AAAU,WAAO;AACrB,QAAM,SAAS,wBAAwB;AACvC,aAAW,IAAI,gCAAe,aAAa,MAAM;AACjD,SAAO;AACT;AAMO,IAAM,0BAA0B,MAA4B;AACjE,QAAM,gBAAY,wBAAS,QAAQ,IAAI,mBAAmB,mCAAmC;AAC7F,QAAM,oBAAgB,wBAAS,QAAQ,IAAI,uBAAuB,uCAAuC;AACzG,SAAO,EAAE,WAAW,cAAc;AACpC;;;ACtBA,qCAA4D;AAC5D,oBAA0B;AAInB,SAAS,eAAe,mBAA8B;AAC3D,MAAI,cAAc,wBAAU;AAC5B,QAAM,YAAsB,OAAO,KAAK,kBAAkB,SAAS;AACnE,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,kBAAc,YAAY,IAAI,kBAAkB,WAAW,UAAU,CAAC,CAAC,CAAC;AAAA,EAC1E;AAEA,SAAO,YAAY,YAAY;AACjC;AAEO,IAAM,2BAA2B,OAItC,iBAIA,aACkD;AAClD,MAAI;AACF,UAAM,cAAc,yDAA0B,QAAQ,iBAAiB,QAAQ;AAC/E,UAAM,eAAe,gDAAiB,QAAQ,iBAAiB,QAAQ;AACvE,QAAI,OAAe;AACnB,QAAI;AACF,aAAO,MAAM,YAAY,KAAK;AAAA,IAChC,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,IAAI,SAAS,MAAM,OAAO,EAAE;AAAA,IACtC;AACA,QAAI,SAAiB;AACrB,QAAI;AACF,eAAS,MAAM,YAAY,OAAO;AAAA,IACpC,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,IAAI,WAAW,MAAM,OAAO,EAAE;AAAA,IACxC;AACA,QAAI,SAAkB;AACtB,QAAI;AACF,eAAS,MAAM,aAAa,kBAAkB,eAAe,gDAAiB,aAAa,gDAAiB,GAAG,CAAC,CAAC;AAAA,IACnH,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,IAAI,WAAW,MAAM,OAAO,EAAE;AACtC,eAAS;AAAA,IACX;AACA,WAAO,EAAE,SAAS,iBAAiB,SAAS,SAAS,QAAQ,SAAS,MAAM,QAAQ,MAAM,SAAS,YAAY,SAAS;AAAA,EAC1H,SAAS,IAAI;AACX,UAAM,QAAQ;AACd,YAAQ,MAAM,6BAA6B,MAAM,OAAO,EAAE;AAC1D,UAAM;AAAA,EACR;AACF;;;AC1DA,mBAA0B;AAE1B,IAAAC,kCAAsE;AAEtE,IAAM,cAAc;AAQb,IAAM,eAAe,CAAC,YAAoBC,iBAAwB;AACvE,QAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,MAAI,WAAW,IAAI;AACnB,MAAI,OAAO,IAAI;AACf,MAAI,OAAO,IAAI;AACf,QAAM,QAAQ,IAAI;AAClB,MAAI,aAAa,SAAS;AACxB,eAAW;AACX,WAAOA;AACP,WAAO,IAAI,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI;AACpE,UAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,WAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,EAClD,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,iBAAiB,OAI5B,iBAIA,UAMA,YAC2D;AAC3D,QAAM,QAAQ,IAAI,uBAAU,EAAE,SAAS,IAAK,CAAC;AAC7C,QAAM,UAAU,0DAA0B,QAAQ,iBAAiB,QAAQ;AAC3E,QAAM,cAAc,2DAA2B,QAAQ,iBAAiB,QAAQ;AAEhF,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,YAAY,IAAI,OAAO;AAAA,EACzC,SAAS,IAAI;AACX,UAAM,QAAQ;AACd,YAAQ,MAAM,gBAAgB,MAAM,OAAO,EAAE;AAAA,EAC/C;AAEA,MAAI;AACJ,MAAI;AACF,kBAAc,MAAM,QAAQ,SAAS,OAAO;AAAA,EAC9C,SAAS,IAAI;AACX,UAAM,QAAQ;AACd,YAAQ,MAAM,gBAAgB,MAAM,OAAO,EAAE;AAAA,EAC/C;AAEA,QAAM,mBAAmB,eAAe;AAExC,QAAM,qBAAqB,mBAAmB,aAAa,kBAAkB,WAAW,IAAI;AAC5F,MAAI,WAAoC;AACxC,MAAI;AACF,eAAW,sBAAsB,MAAM,MAAM,IAAI,kBAAkB,GAAG,OAAO;AAAA,EAC/E,SAAS,IAAI;AACX,UAAM,QAAQ;AACd,YAAQ,MAAM,aAAa,MAAM,OAAO,EAAE;AAAA,EAC5C;AAEA,SAAO,CAAC,kBAAkB,QAAQ;AACpC;;;AC9EA,IAAAC,oBAAkD;AAE3C,IAAM,qBAAqB,CAAC,UAA2B,gBAAgB;AAC5E,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,iBAAiB,IAAI,iCAAe,aAAa;AAAA,IACrD,WAAW,QAAQ,IAAI;AAAA,IACvB,eAAe,QAAQ,IAAI;AAAA,EAC7B,CAAC;AAED,QAAM,0BAA0B,eAAe,IAAI,oCAAkB,cAAc,OAAO,IAAI;AAE9F,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,oBAAoB,eAAe,IAAI,oCAAkB,cAAc,OAAO,IAAI;AAExF,QAAM,WAAW,2BAA2B,kBAAkB,2BAA2B,qBAAqB;AAC9G,SAAO;AACT;;;AJDO,IAAMC,gBAAe,CAAC,YAAoBC,iBAAwB;AACvE,QAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,MAAI,WAAW,IAAI;AACnB,MAAI,OAAO,IAAI;AACf,MAAI,OAAO,IAAI;AACf,QAAM,QAAQ,IAAI;AAClB,MAAI,aAAa,SAAS;AACxB,eAAW;AACX,WAAOA;AACP,WAAO,IAAI,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI;AACpE,UAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,WAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,EAClD,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAuB,OAAO,SAAiB,YAAsE;AAChI,MAAI;AACF,UAAM,WAAW,gDAAgB,QAAQ,SAAS,kBAAkB,CAAC;AACrE,WAAO,CAAC,MAAM,SAAS,SAAS,OAAO,GAAG,MAAS;AAAA,EACrD,SAAS,IAAI;AACX,WAAO,CAAC,QAAW,EAAW;AAAA,EAChC;AACF;AAEO,IAAM,wBAAwB,OAAO,SAAiB,YAAsE;AACjI,MAAI;AACF,UAAM,WAAW,iDAAiB,QAAQ,SAAS,kBAAkB,CAAC;AACtE,WAAO,CAAC,MAAM,SAAS,IAAI,OAAO,GAAG,MAAS;AAAA,EAChD,SAAS,IAAI;AACX,WAAO,CAAC,QAAW,EAAW;AAAA,EAChC;AACF;AAEO,IAAM,oBAAoB,OAAO,SAAiB,YAAoB;AAC3E,QAAM,UAAU,MAAM,QAAQ,IAAI,CAAC,qBAAqB,SAAS,OAAO,GAAG,sBAAsB,SAAS,OAAO,CAAC,CAAC;AACnH,SAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;AACtC;AAUO,IAAM,wBAAwB,OAEnC,eAEA,SAEA,YAEA,UAAU,KAEV,UAAU,QACmB;AAC7B,QAAM,QAAQ,IAAI,wBAAU,EAAE,QAAQ,CAAC;AACvC,QAAM,WAAW,mBAAmB;AAEpC,QAAM,QAAQ;AAEd,QAAM,SAAS,MAAM,MAAM,KAAK,OAAO;AAAA,IACrC,OAAO;AAAA;AAAA,kCAEuB,aAAa;AAAA,6BAClB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBhC,WAAW,CAAC;AAAA,EACd,CAAC;AAED,QAAM,YAAY,MAAM,QAAQ;AAAA;AAAA,IAE9B,OAAO,OAAO,OAAO,KAAK,KAAK,SAAS,gBAAgB,WAAW,KAAK,EAAE,IAAI,OAAO,QAAa;AAChG,UAAI;AACF,cAAM,EAAE,iBAAiB,SAAS,UAAU,YAAY,IAAI,IAAI,KAAK;AACrE,YAAI,SAAS;AACb,YAAI,WAAO,8CAAY,QAAQ;AAC/B,YAAI;AACF,gBAAM,aAAa,uDAAuB,QAAQ,iBAAiB,QAAQ;AAC3E,gBAAM,EAAE,MAAM,QAAQ,IAAI,MAAM,yBAAyB,iBAAiB,QAAQ;AAClF,iBAAO;AACP,mBAAS,gBAAY,8CAAY,SAAS,KAAK,MAAM,WAAW,YAAY,OAAO,GAAG,YAAY,IAAI;AAAA,QACxG,SAAS,IAAI;AACX,gBAAM,QAAQ;AACd,kBAAQ,MAAM,WAAW,MAAM,OAAO,EAAE;AAAA,QAC1C;AACA,cAAM,SAAwB;AAAA,UAC5B,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,YAAI,CAAC,OAAO,eAAe,CAAC,OAAO,UAAU;AAC3C,gBAAM,CAAC,aAAaC,SAAQ,IAAI,MAAM,eAAe,iBAAiB,UAAU,OAAO,OAAO;AAC9F,iBAAO,WAAWA;AAClB,iBAAO,cAAc;AAAA,QACvB;AACA,eAAO;AAAA,MACT,SAAS,IAAI;AACX,cAAM,QAAQ;AACd,gBAAQ,MAAM,UAAU,MAAM,OAAO,EAAE;AACvC,gBAAQ,MAAM,GAAG,MAAM,KAAK,EAAE;AAC9B,cAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AD9HA,IAAM,SAAS;AAEf,IAAM,iBAAiB;AAEhB,IAAM,yBAAN,cAAkH,wCAIvH;AAAA,EACA,OAAgB,gBAAgB,CAAC,wDAAsB;AAAA,EAEvD,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EAEA,MAAyB,eAAe,UAAkD;AACxF,UAAM,KAAK,QAAQ,OAAO;AAC1B,UAAM,UAAU,UAAU,OAAO,mDAAiB,KAAK,CAAC;AACxD,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,QAAQ,IAAI,OAAO,UAAU;AAC3B,cAAM,cAAU;AAAA,UACd,8BAAW,UAAM,yBAAS,OAAO,WAAW,KAAK,OAAO,SAAS,4BAA4B,CAAC;AAAA,UAC9F;AAAA,QACF,EAAE,SAAS;AACX,cAAM,cAAU,yBAAS,OAAO,WAAW,KAAK,OAAO,SAAS,4BAA4B;AAC5F,cAAM,UAAU,OAAO,WAAW;AAClC,YAAI;AACF,gBAAM,OAAO,MAAM,sBAAsB,SAAS,SAAS,KAAK,QAAQ,QAAQ,KAAK,SAAS,KAAK,OAAO;AAC1G,gBAAM,cAAc,KAAK,IAAa,CAAC,QAAQ;AAC7C,mBAAO,EAAE,GAAG,KAAK,OAAO;AAAA,UAC1B,CAAC;AACD,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,IAAI,MAAM,kCAAkC,OAAO,eAAe,OAAO,EAAE;AAAA,QACnF;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,aAAa,KAAK;AAAA,EAC3B;AACF;;;ADnDO,IAAM,+BAA+B,UAC1C;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,2CAAS,GAAG,EAAE,GAAG,QAAQ,sCAAiB;AAAA,EACzD;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,uBAAuB,OAAO,MAAM;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ADPF,IAAO,cAAQ;","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","metadata"]}
|
|
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"]}
|