## Problem solved
Short description of the bug fixed or feature added
<!-- start pr-codex -->
---
## PR-Codex overview
This PR updates JSDoc annotations in various files to change `@module` to `@modules` for improved clarity and consistency.
### Detailed summary
- Updated JSDoc annotations from `@module` to `@modules` in multiple files
- Added `@social` tag in `tsdoc.json`
- Updated annotations in ERC20, ERC721, and ERC1155 related modules
> The following files were skipped due to too many changes: `packages/thirdweb/src/extensions/airdrop/write/merkleInfoERC721.ts`, `packages/thirdweb/src/extensions/airdrop/write/merkleInfoERC1155.ts`, `packages/thirdweb/src/extensions/modules/common/installPublishedModule.ts`, `packages/thirdweb/src/extensions/modules/common/uninstallPublishedModule.ts`, `packages/thirdweb/src/extensions/modules/MintableERC20/mintWithSignature.ts`, `packages/thirdweb/src/extensions/modules/MintableERC721/mintWithSignature.ts`, `packages/thirdweb/src/extensions/modules/MintableERC1155/mintWithSignature.ts`, `packages/thirdweb/src/extensions/split/read/getRecipientSplitPercentage.ts`, `packages/thirdweb/src/react/core/utils/defaultTokens.ts`, `apps/portal/src/app/typescript/v5/modular/upgrade/page.mdx`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC20WithSignature.ts`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC721WithSignature.ts`, `packages/thirdweb/src/extensions/airdrop/write/airdropERC1155WithSignature.ts`, `packages/thirdweb/src/extensions/erc20/drops/read/getActiveClaimCondition.ts`, `packages/thirdweb/src/extensions/modules/BatchMetadataERC721/uploadMetadata.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/ClaimableERC20/setClaimConditions.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC20/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/ClaimableERC721/setClaimConditions.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC20/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/SequentialTokenIdERC1155/module/install.ts`, `packages/thirdweb/src/extensions/modules/__generated__/OpenEditionMetadataERC721/module/install.ts`, `packages/thirdweb/src/extensions/modules/ClaimableERC1155/setClaimConditions.ts`, `apps/portal/src/app/typescript/v5/modular/interact/page.mdx`, `apps/portal/src/app/typescript/v5/modular/deploy/page.mdx`, `packages/thirdweb/src/extensions/modules/BatchMetadataERC1155/uploadMetadata.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC721Core/read/totalMinted.ts`, `packages/thirdweb/scripts/generate/generate.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC20/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC20/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC721/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC721/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC1155/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC1155/read/getSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC20/read/getClaimCondition.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC721/read/getClaimCondition.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/read/getTransferValidator.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/read/getDefaultRoyaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/read/getTransferValidator.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/read/getDefaultRoyaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/read/isTransferEnabled.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/read/isTransferEnabled.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/read/getTransferValidationFunction.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/read/isTransferEnabled.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/read/getTransferValidationFunction.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC721/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC721/read/getAllMetadataBatches.ts`, `packages/thirdweb/src/extensions/modules/__generated__/SequentialTokenIdERC1155/read/getNextTokenId.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC1155/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC1155/read/getAllMetadataBatches.ts`, `packages/thirdweb/src/extensions/modules/__generated__/SequentialTokenIdERC1155/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/OpenEditionMetadataERC721/read/encodeBytesOnInstall.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC20Core/write/burn.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC20Core/write/mint.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC721Core/write/burn.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC721Core/write/mint.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC1155Core/write/burn.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC1155Core/write/mint.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC20Core/write/initialize.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC721Core/write/initialize.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC1155Core/write/initialize.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC20Core/write/mintWithSignature.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC721Core/write/mintWithSignature.ts`, `packages/thirdweb/src/extensions/modules/common/getOrDeployModule.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ERC1155Core/write/mintWithSignature.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC1155/write/setTokenURI.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC20/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/write/setRoyaltyInfoForToken.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC20/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC721/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/write/setTransferValidator.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/write/setRoyaltyInfoForToken.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC721/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/MintableERC1155/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/write/setTransferValidator.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/write/setDefaultRoyaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC20/write/setClaimCondition.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC1155/write/setSaleConfig.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/write/setDefaultRoyaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC721/write/setClaimCondition.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/write/setTransferable.ts`, `apps/portal/src/app/typescript/v5/modular/page.mdx`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/write/setTransferableFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC721/write/uploadMetadata.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/write/setTransferable.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/write/setTransferableFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC1155/write/setClaimConditionByTokenId.ts`, `packages/thirdweb/src/extensions/modules/__generated__/BatchMetadataERC1155/write/uploadMetadata.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/write/setTransferable.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/write/setTransferableFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/OpenEditionMetadataERC721/write/setSharedMetadata.ts`, `apps/portal/src/app/typescript/v5/modular/built-in/page.tsx`, `apps/portal/src/app/typescript/v5/extensions/built-in/page.tsx`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/read/royaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/read/royaltyInfo.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC721/read/getRoyaltyInfoForToken.ts`, `packages/thirdweb/src/extensions/modules/__generated__/RoyaltyERC1155/read/getRoyaltyInfoForToken.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC20/read/isTransferEnabledFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC721/read/isTransferEnabledFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/TransferableERC1155/read/isTransferEnabledFor.ts`, `packages/thirdweb/src/extensions/modules/__generated__/ClaimableERC1155/read/getClaimConditionByTokenId.ts`, `packages/thirdweb/src/extensions/modules/__generated__/OpenEditionMetadataERC721/read/onTokenURI.ts`, `packages/thirdweb/src/exports/modules.ts`, `apps/portal/src/app/references/components/TDoc/utils/slugs.ts`, `apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts`, `apps/portal/src/app/typescript/v5/sidebar.tsx`
> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`
<!-- end pr-codex -->
194 lines
5.9 KiB
TypeScript
194 lines
5.9 KiB
TypeScript
import { maxUint256 } from "viem";
|
|
import { NATIVE_TOKEN_ADDRESS } from "../../../constants/addresses.js";
|
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
|
import type { Address } from "../../../utils/address.js";
|
|
import { dateToSeconds, tenYearsFromNow } from "../../../utils/date.js";
|
|
import type { Hex } from "../../../utils/encoding/hex.js";
|
|
import type { NFTInput } from "../../../utils/nft/parseNft.js";
|
|
import { randomBytesHex } from "../../../utils/random.js";
|
|
import type { Account } from "../../../wallets/interfaces/wallet.js";
|
|
import { mintWithSignature as generatedMint } from "../__generated__/ERC1155Core/write/mintWithSignature.js";
|
|
import {
|
|
type EncodeBytesBeforeMintWithSignatureERC1155Params,
|
|
encodeBytesBeforeMintWithSignatureERC1155Params,
|
|
} from "../__generated__/MintableERC1155/encode/encodeBytesBeforeMintWithSignatureERC1155.js";
|
|
|
|
/**
|
|
* Mints ERC1155 tokens to a specified address with a signature via a MintableERC1155 module.
|
|
* @param options The options for minting tokens.
|
|
* @returns A transaction to mint tokens.
|
|
* @example
|
|
* ```typescript
|
|
* import { MintableERC1155 } from "thirdweb/modules";
|
|
*
|
|
* // generate the payload and signature, this is typically done on the server
|
|
* // requires to be generated with a wallet that has the MINTER_ROLE
|
|
* const { payload, signature } = await MintableERC1155.generateMintSignature({
|
|
* account,
|
|
* contract,
|
|
* nft: {
|
|
* name: "My NFT",
|
|
* description: "This is my NFT",
|
|
* image: "ipfs://...",
|
|
* },
|
|
* mintRequest: {
|
|
* recipient: "0x...",
|
|
* quantity: "10",
|
|
* },
|
|
* });
|
|
*
|
|
* // prepare the transaction, this is typically done on the client
|
|
* // can be executed by any wallet
|
|
* const transaction = MintableERC1155.mintWithSignature({
|
|
* contract,
|
|
* payload,
|
|
* signature,
|
|
* });
|
|
*
|
|
* // Send the transaction
|
|
* await sendTransaction({ transaction, account });
|
|
* ```
|
|
* @modules MintableERC1155
|
|
*/
|
|
export function mintWithSignature(
|
|
options: BaseTransactionOptions<
|
|
Awaited<ReturnType<typeof generateMintSignature>>
|
|
>,
|
|
) {
|
|
return generatedMint({
|
|
contract: options.contract,
|
|
asyncParams: async () => {
|
|
const { payload, signature } = options;
|
|
return {
|
|
to: payload.to,
|
|
tokenId: payload.tokenId,
|
|
baseURI: payload.baseURI,
|
|
amount: payload.amount,
|
|
data: payload.data,
|
|
signature,
|
|
};
|
|
},
|
|
});
|
|
}
|
|
|
|
export type GenerateMintSignatureOptions = {
|
|
account: Account;
|
|
contract: ThirdwebContract;
|
|
nft: NFTInput | string;
|
|
mintRequest: GeneratePayloadInput;
|
|
};
|
|
|
|
/**
|
|
* Generates a payload and signature for minting ERC1155 tokens with a signature.
|
|
* @param options The options for generating the payload and signature.
|
|
* @returns The payload and signature.
|
|
* @example
|
|
* ```typescript
|
|
* import { MintableERC1155 } from "thirdweb/modules";
|
|
*
|
|
* // generate the payload and signature, this is typically done on the server
|
|
* // requires to be generated with a wallet that has the MINTER_ROLE
|
|
* const { payload, signature } = await MintableERC1155.generateMintSignature({
|
|
* account,
|
|
* contract,
|
|
* nft: {
|
|
* name: "My NFT",
|
|
* description: "This is my NFT",
|
|
* image: "ipfs://...",
|
|
* },
|
|
* mintRequest: {
|
|
* recipient: "0x...",
|
|
* quantity: "10",
|
|
* },
|
|
* });
|
|
*
|
|
* // prepare the transaction, this is typically done on the client
|
|
* // can be executed by any wallet
|
|
* const transaction = MintableERC1155.mintWithSignature({
|
|
* contract,
|
|
* payload,
|
|
* signature,
|
|
* });
|
|
*
|
|
* // Send the transaction
|
|
* await sendTransaction({ transaction, account });
|
|
* ```
|
|
* @modules MintableERC1155
|
|
*/
|
|
export async function generateMintSignature(
|
|
options: GenerateMintSignatureOptions,
|
|
) {
|
|
const { mintRequest, account, contract } = options;
|
|
const currency = mintRequest.currency || NATIVE_TOKEN_ADDRESS;
|
|
const pricePerUnit = options.mintRequest.pricePerUnit || 0n;
|
|
const uid = mintRequest.uid || randomBytesHex();
|
|
const startTime = mintRequest.validityStartTimestamp || new Date(0);
|
|
const endTime = mintRequest.validityEndTimestamp || tenYearsFromNow();
|
|
|
|
let metadataURI: string;
|
|
if (typeof options.nft === "string") {
|
|
// if the input is already a string then we just use that
|
|
metadataURI = options.nft;
|
|
} else {
|
|
// otherwise we need to upload the file to the storage server
|
|
// load the upload code if we need it
|
|
const { upload } = await import("../../../storage/upload.js");
|
|
metadataURI = await upload({
|
|
client: options.contract.client,
|
|
files: [options.nft],
|
|
});
|
|
}
|
|
|
|
const mintParams: EncodeBytesBeforeMintWithSignatureERC1155Params["params"] =
|
|
{
|
|
pricePerUnit,
|
|
uid,
|
|
currency,
|
|
startTimestamp: Number(dateToSeconds(startTime)),
|
|
endTimestamp: Number(dateToSeconds(endTime)),
|
|
};
|
|
|
|
const payload = {
|
|
to: mintRequest.recipient,
|
|
tokenId: mintRequest.tokenId ?? maxUint256,
|
|
amount: mintRequest.quantity,
|
|
baseURI: metadataURI,
|
|
data: encodeBytesBeforeMintWithSignatureERC1155Params({
|
|
params: mintParams,
|
|
}),
|
|
};
|
|
|
|
const signature = await account.signTypedData({
|
|
domain: {
|
|
name: "ERC1155Core",
|
|
version: "1",
|
|
chainId: contract.chain.id,
|
|
verifyingContract: contract.address as Hex,
|
|
},
|
|
types: { MintRequestERC1155: MintRequestERC1155 },
|
|
primaryType: "MintRequestERC1155",
|
|
message: payload,
|
|
});
|
|
return { payload, signature };
|
|
}
|
|
|
|
type GeneratePayloadInput = {
|
|
recipient: Address;
|
|
quantity: bigint;
|
|
tokenId?: bigint;
|
|
currency?: Address;
|
|
pricePerUnit?: bigint;
|
|
uid?: Hex;
|
|
validityStartTimestamp?: Date;
|
|
validityEndTimestamp?: Date;
|
|
};
|
|
|
|
export const MintRequestERC1155 = [
|
|
{ type: "address", name: "to" },
|
|
{ type: "uint256", name: "tokenId" },
|
|
{ type: "uint256", name: "amount" },
|
|
{ type: "string", name: "baseURI" },
|
|
{ type: "bytes", name: "data" },
|
|
] as const;
|