Skip to content

Commit 10dda31

Browse files
committed
First try
1 parent 5ffbcfc commit 10dda31

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

packages/sdk/src/core/schema/QueryParams.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ export const QueryAllParamsSchema = /* @__PURE__ */ (() =>
1010
.object({
1111
start: z.number().default(0),
1212
count: z.number().default(DEFAULT_QUERY_ALL_COUNT),
13+
loadMetadata: z.boolean().default(true),
1314
})
1415
.default({
1516
start: 0,
1617
count: DEFAULT_QUERY_ALL_COUNT,
18+
loadMetadata: true,
1719
}))();
1820

1921
/**

packages/sdk/src/core/schema/nft.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,13 @@ export type NFT = {
7676
supply: string;
7777
quantityOwned?: string;
7878
};
79+
/**
80+
* @public
81+
*/
82+
export type NFTWithoutMetadata = {
83+
metadata: Pick<NFTMetadata, "id">;
84+
owner: string;
85+
type: "ERC1155" | "ERC721" | "metaplex";
86+
supply: string;
87+
quantityOwned?: string;
88+
};

packages/sdk/src/evm/core/classes/erc-721.ts

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import type {
2525
NFT,
2626
NFTMetadata,
2727
NFTMetadataOrUri,
28+
NFTWithoutMetadata,
2829
} from "../../../core/schema/nft";
2930
import { resolveAddress } from "../../common/ens/resolveAddress";
3031
import {
@@ -167,16 +168,34 @@ export class Erc721<
167168
* @returns The NFT metadata
168169
* @twfeature ERC721
169170
*/
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+
}
180199
}
181200

182201
/**
@@ -425,11 +444,10 @@ export class Erc721<
425444
public async getOwned(
426445
walletAddress?: AddressOrEns,
427446
queryParams?: QueryAllParams,
428-
) {
447+
): Promise<NFT[] | NFTWithoutMetadata[]> {
429448
if (walletAddress) {
430449
walletAddress = await resolveAddress(walletAddress);
431450
}
432-
433451
if (this.query?.owned) {
434452
return this.query.owned.all(walletAddress, queryParams);
435453
} else {
@@ -445,8 +463,11 @@ export class Erc721<
445463
const count = queryParams?.count || DEFAULT_QUERY_ALL_COUNT;
446464
ownedTokens = ownedTokens.slice(start, start + count);
447465
}
466+
const loadMetadata = queryParams
467+
? queryParams.loadMetadata !== false
468+
: true;
448469
return await Promise.all(
449-
ownedTokens.map(async (i) => this.get(i.tokenId)),
470+
ownedTokens.map(async (i) => this.get(i.tokenId, loadMetadata)),
450471
);
451472
}
452473
}

packages/sdk/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export type {
99
NFTMetadata,
1010
NFTMetadataOrUri,
1111
BasicNFTInput,
12+
NFTWithoutMetadata,
1213
} from "./core/schema/nft";
1314

1415
export type { CurrencyValue, TokenMetadata } from "./core/schema/token";

0 commit comments

Comments
 (0)