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.
- package/dist/cjs/exports/extensions/erc721.js +3 -1
- package/dist/cjs/exports/extensions/erc721.js.map +1 -1
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js +116 -0
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js.map +1 -0
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js +116 -0
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js.map +1 -0
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js +123 -0
- package/dist/cjs/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js.map +1 -0
- package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js +89 -0
- package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/exports/extensions/erc721.js +1 -0
- package/dist/esm/exports/extensions/erc721.js.map +1 -1
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js +109 -0
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.js.map +1 -0
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js +109 -0
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.js.map +1 -0
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js +116 -0
- package/dist/esm/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.js.map +1 -0
- package/dist/esm/extensions/erc721/drops/write/updateMetadata.js +84 -0
- package/dist/esm/extensions/erc721/drops/write/updateMetadata.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/exports/extensions/erc721.d.ts +1 -0
- package/dist/types/exports/extensions/erc721.d.ts.map +1 -1
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.d.ts +80 -0
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.d.ts.map +1 -0
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.d.ts +80 -0
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.d.ts.map +1 -0
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.d.ts +87 -0
- package/dist/types/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.d.ts.map +1 -0
- package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts +37 -0
- package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/exports/extensions/erc721.ts +4 -0
- package/src/extensions/erc721/__generated__/DropERC721/write/freezeBatchBaseURI.ts +141 -0
- package/src/extensions/erc721/__generated__/DropERC721/write/setMaxTotalSupply.ts +144 -0
- package/src/extensions/erc721/__generated__/DropERC721/write/updateBatchBaseURI.ts +149 -0
- package/src/extensions/erc721/drops/write/updateMetadata.test.ts +127 -0
- package/src/extensions/erc721/drops/write/updateMetadata.ts +123 -0
- 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.
|
1
|
+
export const version = "5.29.5-nightly-a9ce10f39ad47f386e8086e230679093aab08754-20240617192538";
|