thirdweb 5.29.4 → 5.29.5-nightly-a9ce10f39ad47f386e8086e230679093aab08754-20240617192538

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.
Files changed (44) hide show
  1. package/dist/cjs/exports/extensions/erc721.js +3 -1
  2. package/dist/cjs/exports/extensions/erc721.js.map +1 -1
  3. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js +116 -0
  4. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js.map +1 -0
  5. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js +116 -0
  6. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js.map +1 -0
  7. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js +123 -0
  8. package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js.map +1 -0
  9. package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js +89 -0
  10. package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js.map +1 -0
  11. package/dist/cjs/version.js +1 -1
  12. package/dist/cjs/version.js.map +1 -1
  13. package/dist/esm/exports/extensions/erc721.js +1 -0
  14. package/dist/esm/exports/extensions/erc721.js.map +1 -1
  15. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js +109 -0
  16. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js.map +1 -0
  17. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js +109 -0
  18. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js.map +1 -0
  19. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js +116 -0
  20. package/dist/esm/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js.map +1 -0
  21. package/dist/esm/extensions/erc721/drops/write/updateMetadata.js +84 -0
  22. package/dist/esm/extensions/erc721/drops/write/updateMetadata.js.map +1 -0
  23. package/dist/esm/version.js +1 -1
  24. package/dist/esm/version.js.map +1 -1
  25. package/dist/types/exports/extensions/erc721.d.ts +1 -0
  26. package/dist/types/exports/extensions/erc721.d.ts.map +1 -1
  27. package/dist/types/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.d.ts +80 -0
  28. package/dist/types/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.d.ts.map +1 -0
  29. package/dist/types/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.d.ts +80 -0
  30. package/dist/types/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.d.ts.map +1 -0
  31. package/dist/types/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.d.ts +87 -0
  32. package/dist/types/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.d.ts.map +1 -0
  33. package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts +37 -0
  34. package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts.map +1 -0
  35. package/dist/types/version.d.ts +1 -1
  36. package/dist/types/version.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/src/exports/extensions/erc721.ts +4 -0
  39. package/src/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.ts +141 -0
  40. package/src/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.ts +144 -0
  41. package/src/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.ts +149 -0
  42. package/src/extensions/erc721/drops/write/updateMetadata.test.ts +127 -0
  43. package/src/extensions/erc721/drops/write/updateMetadata.ts +123 -0
  44. package/src/version.ts +1 -1
@@ -0,0 +1,123 @@
1
+ import type { ThirdwebClient } from "../../../../client/client.js";
2
+ import type { BaseTransactionOptions } from "../../../../transaction/types.js";
3
+ import type { NFT, NFTInput } from "../../../../utils/nft/parseNft.js";
4
+ import {
5
+ type UpdateBatchBaseURIParams,
6
+ updateBatchBaseURI,
7
+ } from "../../__generated__/DropERC721/write/updateBatchBaseURI.js";
8
+ import { getBaseURICount } from "../../__generated__/IBatchMintMetadata/read/getBaseURICount.js";
9
+
10
+ export type UpdateMetadataParams = {
11
+ targetTokenId: bigint;
12
+ newMetadata: NFTInput;
13
+ client: ThirdwebClient;
14
+ };
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export async function getUpdateMetadataParams(
20
+ options: BaseTransactionOptions<UpdateMetadataParams>,
21
+ ): Promise<UpdateBatchBaseURIParams> {
22
+ const { contract, targetTokenId, newMetadata, client } = options;
23
+ const batchCount = await getBaseURICount(options);
24
+ if (batchCount === 0n) {
25
+ throw new Error(
26
+ "No base URI set. Please set a base URI before updating metadata",
27
+ );
28
+ }
29
+
30
+ // Look for the batchId & determine the start + end tokenId of the batch
31
+ const [{ getBatchIdAtIndex }, { getNFT }] = await Promise.all([
32
+ import("../../__generated__/IBatchMintMetadata/read/getBatchIdAtIndex.js"),
33
+ import("../../read/getNFT.js"),
34
+ ]);
35
+ let startTokenId = 0n;
36
+ let endTokenId = 0n;
37
+ let batchIndex = 0n;
38
+ for (let i = 0n; i < batchCount; i += 1n) {
39
+ batchIndex = i;
40
+ endTokenId = await getBatchIdAtIndex({ contract, index: batchIndex });
41
+ if (endTokenId > targetTokenId) {
42
+ break;
43
+ }
44
+ startTokenId = endTokenId;
45
+ }
46
+
47
+ const range = Array.from(
48
+ { length: Number(endTokenId - startTokenId) },
49
+ (_, k) => BigInt(k) + startTokenId,
50
+ );
51
+
52
+ const currentMetadatas = await Promise.all(
53
+ range.map((id) => getNFT({ contract, tokenId: id, includeOwner: false })),
54
+ );
55
+
56
+ // Abort if any of the items failed to load
57
+ if (currentMetadatas.some((item) => item === undefined || !item.tokenURI)) {
58
+ throw new Error(
59
+ `Failed to load all ${range.length} items from batchIndex: ${batchIndex}`,
60
+ );
61
+ }
62
+
63
+ const newMetadatas: NFTInput[] = [];
64
+ for (let i = 0; i < currentMetadatas.length; i++) {
65
+ const { id, metadata } = currentMetadatas[i] as NFT;
66
+ if (targetTokenId === id) {
67
+ newMetadatas.push(newMetadata);
68
+ } else {
69
+ newMetadatas.push(metadata);
70
+ }
71
+ }
72
+
73
+ const { uploadOrExtractURIs } = await import("../../../../utils/ipfs.js");
74
+ const batchOfUris = await uploadOrExtractURIs(
75
+ newMetadatas,
76
+ client,
77
+ Number(startTokenId),
78
+ );
79
+
80
+ if (!batchOfUris || !batchOfUris.length || !batchOfUris[0]) {
81
+ throw new Error("Failed to upload batch of new metadatas");
82
+ }
83
+
84
+ const baseUri = batchOfUris[0].substring(0, batchOfUris[0].lastIndexOf("/"));
85
+
86
+ // IMPORTANT: The new ipfs URI must have the trailing slash at the end
87
+ // this is required by the Drop contract
88
+ const uri = `${baseUri}/`;
89
+
90
+ return { index: batchIndex, uri };
91
+ }
92
+
93
+ /**
94
+ * Update the metadata of the single token in an NFT Drop (DropERC721) collection
95
+ * For NFT Collection, please use `setTokenURI`
96
+ * @param options
97
+ * @returns the prepared transaction
98
+ * @extension ERC721
99
+ * @example
100
+ * ```ts
101
+ * import { updateMetadata } from "thirdweb/extensions/erc721";
102
+ *
103
+ * const transaction = updateMetadata({
104
+ * contract,
105
+ * targetTokenId: 0n,
106
+ * newMetadata: {
107
+ * name: "this is the new nft name",
108
+ * description: "...",
109
+ * image: "new image uri"
110
+ * // ...
111
+ * }
112
+ * });
113
+ * ```
114
+ */
115
+ export function updateMetadata(
116
+ options: BaseTransactionOptions<UpdateMetadataParams>,
117
+ ) {
118
+ const { contract } = options;
119
+ return updateBatchBaseURI({
120
+ contract,
121
+ asyncParams: async () => getUpdateMetadataParams(options),
122
+ });
123
+ }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.29.4";
1
+ export const version = "5.29.5-nightly-a9ce10f39ad47f386e8086e230679093aab08754-20240617192538";