@@ -25,6 +25,7 @@ import type {
25
25
NFT ,
26
26
NFTMetadata ,
27
27
NFTMetadataOrUri ,
28
+ NFTWithoutMetadata ,
28
29
} from "../../../core/schema/nft" ;
29
30
import { resolveAddress } from "../../common/ens/resolveAddress" ;
30
31
import {
@@ -167,16 +168,34 @@ export class Erc721<
167
168
* @returns The NFT metadata
168
169
* @twfeature ERC721
169
170
*/
170
- public async get ( tokenId : BigNumberish ) : Promise < NFT > {
171
- const [ owner , metadata ] = await Promise . all ( [
172
- this . ownerOf ( tokenId ) . catch ( ( ) => constants . AddressZero ) ,
173
- this . getTokenMetadata ( tokenId ) . catch ( ( ) => ( {
174
- id : tokenId . toString ( ) ,
175
- uri : "" ,
176
- ...FALLBACK_METADATA ,
177
- } ) ) ,
178
- ] ) ;
179
- return { owner, metadata, type : "ERC721" , supply : "1" } ;
171
+ public async get < T extends boolean | undefined = undefined > (
172
+ tokenId : BigNumberish ,
173
+ loadMetadata ?: T ,
174
+ ) : Promise < T extends true | undefined ? NFT : NFTWithoutMetadata > {
175
+ if ( loadMetadata === false ) {
176
+ const owner = await this . ownerOf ( tokenId ) . catch (
177
+ ( ) => constants . AddressZero ,
178
+ ) ;
179
+ const nft : NFTWithoutMetadata = {
180
+ owner,
181
+ metadata : {
182
+ id : tokenId . toString ( ) ,
183
+ } ,
184
+ type : "ERC721" ,
185
+ supply : "1" ,
186
+ } ;
187
+ return nft as T extends true | undefined ? NFT : NFTWithoutMetadata ;
188
+ } else {
189
+ const [ owner , metadata ] = await Promise . all ( [
190
+ this . ownerOf ( tokenId ) . catch ( ( ) => constants . AddressZero ) ,
191
+ this . getTokenMetadata ( tokenId ) . catch ( ( ) => ( {
192
+ id : tokenId . toString ( ) ,
193
+ uri : "" ,
194
+ ...FALLBACK_METADATA ,
195
+ } ) ) ,
196
+ ] ) ;
197
+ return { owner, metadata, type : "ERC721" , supply : "1" } ;
198
+ }
180
199
}
181
200
182
201
/**
@@ -425,11 +444,10 @@ export class Erc721<
425
444
public async getOwned (
426
445
walletAddress ?: AddressOrEns ,
427
446
queryParams ?: QueryAllParams ,
428
- ) {
447
+ ) : Promise < NFT [ ] | NFTWithoutMetadata [ ] > {
429
448
if ( walletAddress ) {
430
449
walletAddress = await resolveAddress ( walletAddress ) ;
431
450
}
432
-
433
451
if ( this . query ?. owned ) {
434
452
return this . query . owned . all ( walletAddress , queryParams ) ;
435
453
} else {
@@ -445,8 +463,11 @@ export class Erc721<
445
463
const count = queryParams ?. count || DEFAULT_QUERY_ALL_COUNT ;
446
464
ownedTokens = ownedTokens . slice ( start , start + count ) ;
447
465
}
466
+ const loadMetadata = queryParams
467
+ ? queryParams . loadMetadata !== false
468
+ : true ;
448
469
return await Promise . all (
449
- ownedTokens . map ( async ( i ) => this . get ( i . tokenId ) ) ,
470
+ ownedTokens . map ( async ( i ) => this . get ( i . tokenId , loadMetadata ) ) ,
450
471
) ;
451
472
}
452
473
}
0 commit comments