@zoralabs/protocol-sdk 0.5.3-mints.0 → 0.5.4-MINT.0
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/.turbo/turbo-build.log +6 -7
- package/CHANGELOG.md +11 -2
- package/dist/apis/chain-constants.d.ts +1 -0
- package/dist/apis/chain-constants.d.ts.map +1 -1
- package/dist/index.cjs +120 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -9
- package/dist/index.js.map +1 -1
- package/dist/mints/mints-queries.d.ts +44 -0
- package/dist/mints/mints-queries.d.ts.map +1 -0
- package/dist/premint/contract-types.d.ts +1 -1
- package/dist/premint/contract-types.d.ts.map +1 -1
- package/dist/premint/premint-client.d.ts +2 -2
- package/dist/premint/premint-client.d.ts.map +1 -1
- package/dist/premint/preminter.d.ts +1 -1
- package/dist/premint/preminter.d.ts.map +1 -1
- package/dist/preminter.d.ts +2 -2
- package/dist/preminter.d.ts.map +1 -1
- package/package.json +8 -7
- package/src/apis/chain-constants.ts +10 -0
- package/src/create/1155-create-helper.ts +1 -1
- package/src/index.ts +2 -0
- package/src/mint/mint-client.test.ts +1 -1
- package/src/mint/mint-client.ts +1 -1
- package/src/mints/mints-queries.test.ts +78 -0
- package/src/mints/mints-queries.ts +121 -0
- package/src/premint/contract-types.ts +1 -1
- package/src/premint/premint-client.ts +6 -3
- package/src/premint/preminter.test.ts +1 -1
- package/src/premint/preminter.ts +1 -1
- package/src/preminter.ts +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/premint/contract-types.ts","../src/apis/http-api-base.ts","../src/constants.ts","../src/apis/chain-constants.ts","../src/mint/mint-api-client.ts","../src/premint/conversions.ts","../src/premint/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts"],"sourcesContent":["export * from \"./premint/premint-client\";\n\nexport * from \"./premint/preminter\";\n\nexport * from \"./premint/contract-types\";\n\nexport * from \"./premint/premint-api-client\";\n\nexport * from \"./premint/conversions\";\n\nexport * from \"./mint/mint-api-client\";\n\nexport * from \"./mint/mint-client\";\n\nexport * from \"./create/1155-create-helper\";\n","import { createPublicClient, decodeEventLog, http, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport { zoraCreator1155PremintExecutorImplABI } from \"@zoralabs/1155-deployments\";\nimport {\n getPremintCollectionAddress,\n premintTypedDataDefinition,\n isValidSignature,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n markPremintDeleted,\n makeNewPremint,\n supportsPremintVersion,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenConfigForVersion,\n PremintConfigWithVersion,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigForVersion,\n MintArguments,\n} from \"./contract-types\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\nimport { MintCosts } from \"src/mint/mint-client\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n};\n\nexport const defaultTokenConfigV1MintArguments = (): Omit<\n TokenCreationConfigV1,\n \"fixedPriceMinter\" | \"tokenURI\" | \"royaltyRecipient\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: BigInt(60 * 60 * 24 * 7), // 1 week\n mintStart: 0n,\n royaltyMintSchedule: 0,\n royaltyBPS: 1000, // 10%,\n});\n\nexport const defaultTokenConfigV2MintArguments = (): Omit<\n TokenCreationConfigV2,\n \"fixedPriceMinter\" | \"tokenURI\" | \"payoutRecipient\" | \"createReferral\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: BigInt(60 * 60 * 24 * 7), // 1 week\n mintStart: 0n,\n royaltyBPS: 1000, // 10%,\n});\n\nconst makeTokenConfigWithDefaults = <T extends PremintConfigVersion>({\n chainId,\n premintConfigVersion,\n tokenCreationConfig,\n creatorAccount,\n}: {\n chainId: number;\n premintConfigVersion: PremintConfigVersion;\n tokenCreationConfig: Partial<TokenConfigForVersion<T>> & { tokenURI: string };\n creatorAccount: Address;\n}): TokenConfigForVersion<T> => {\n const fixedPriceMinter =\n tokenCreationConfig.fixedPriceMinter ||\n getDefaultFixedPriceMinterAddress(chainId);\n\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return {\n fixedPriceMinter,\n ...defaultTokenConfigV1MintArguments(),\n royaltyRecipient: creatorAccount,\n ...tokenCreationConfig,\n };\n } else if (premintConfigVersion === PremintConfigVersion.V2) {\n return {\n fixedPriceMinter,\n ...defaultTokenConfigV2MintArguments(),\n payoutRecipient: creatorAccount,\n createReferral: zeroAddress,\n ...tokenCreationConfig,\n };\n } else {\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n }\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nexport function getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n account,\n tokenConfigUpdates,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n }): Promise<SignedPremintResponse> {\n const {\n premintConfig,\n collection: collectionCreationConfig,\n premintConfigVersion,\n } = await this.apiClient.getSignature({\n collectionAddress: collection,\n uid: uid,\n });\n\n const updatedPremint = applyUpdateToPremint({\n uid: premintConfig.uid,\n version: premintConfig.version,\n tokenConfig: premintConfig.tokenConfig,\n tokenConfigUpdates: tokenConfigUpdates,\n });\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: true,\n verifyingContract: collection,\n collection: collectionCreationConfig,\n premintConfig: updatedPremint,\n premintConfigVersion: premintConfigVersion,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const {\n premintConfig,\n premintConfigVersion,\n collection: collectionCreationConfig,\n } = await this.apiClient.getSignature({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = markPremintDeleted(premintConfig);\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n collection: collectionCreationConfig,\n premintConfig: deletedPremint,\n premintConfigVersion,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint<T extends PremintConfigVersion>(\n params: SignAndSubmitPremintParams<T>,\n ): Promise<SignedPremintResponse> {\n const { verifyingContract } = await signAndSubmitPremint({\n ...params,\n chainId: this.chain.id,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n\n const uid = params.premintConfig.uid;\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.tokenCreationConfig Mint argument settings, optional settings are overridden with sensible defaults.\n * @param setings.premintConfigVersion Premint config version to use, defaults to V2\n * @param settings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint<\n T extends PremintConfigVersion = PremintConfigVersion.V1,\n >({\n creatorAccount,\n collection,\n tokenCreationConfig,\n premintConfigVersion,\n walletClient,\n uid,\n checkSignature = false,\n }: {\n creatorAccount: Address;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: ContractCreationConfig;\n tokenCreationConfig: Partial<TokenConfigForVersion<T>> & {\n tokenURI: string;\n };\n premintConfigVersion?: T;\n uid?: number;\n }) {\n const newContractAddress = await getPremintCollectionAddress({\n publicClient: this.publicClient,\n collection,\n });\n\n let uidToUse = uid;\n\n if (typeof uidToUse !== \"number\") {\n uidToUse = await this.apiClient.getNextUID(newContractAddress);\n }\n\n const actualVersion = premintConfigVersion || PremintConfigVersion.V1;\n\n if (\n !(await supportsPremintVersion({\n version: actualVersion,\n publicClient: this.publicClient,\n tokenContract: newContractAddress,\n }))\n ) {\n throw new Error(\n `Premint version ${actualVersion} not supported by contract`,\n );\n }\n\n const premintConfig = makeNewPremint({\n tokenConfig: makeTokenConfigWithDefaults({\n premintConfigVersion: actualVersion,\n tokenCreationConfig,\n creatorAccount,\n chainId: this.chain.id,\n }),\n uid: uidToUse,\n });\n\n return await this.signAndSubmitPremint({\n verifyingContract: newContractAddress,\n premintConfig,\n premintConfigVersion: actualVersion,\n checkSignature,\n account: creatorAccount,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintSignature({\n address,\n uid,\n }: {\n address: Address;\n uid: number;\n }) {\n return await this.apiClient.getSignature({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n collection,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Check user signature for v1\n *\n * @param data Signature data from the API\n * @returns isValid = signature is valid or not, recoveredSigner = signer from contract\n */\n async isValidSignature<T extends PremintConfigVersion>({\n signature,\n collection,\n premintConfig,\n premintConfigVersion,\n }: {\n signature: Hex;\n collection: ContractCreationConfig;\n premintConfig: PremintConfigForVersion<T>;\n premintConfigVersion?: T;\n }): Promise<{\n isValid: boolean;\n recoveredSigner: Address | undefined;\n }> {\n const { isAuthorized, recoveredAddress } = await isValidSignature({\n chainId: this.chain.id,\n signature: signature as Hex,\n collection: collection,\n publicClient: this.publicClient,\n premintConfig,\n premintConfigVersion: premintConfigVersion || PremintConfigVersion.V1,\n });\n\n return { isValid: isAuthorized, recoveredSigner: recoveredAddress };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n }): URLSReturnType {\n return makeUrls({\n uid,\n address,\n tokenId,\n chain: this.chain,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n uid,\n tokenContract,\n minterAccount,\n mintArguments,\n }: {\n uid: number;\n tokenContract: Address;\n minterAccount: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n platformReferral?: Address;\n mintRecipient?: Address;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n if (!minterAccount) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const { premintConfig, premintConfigVersion, collection, signature } =\n await this.getPremintSignature({\n address: tokenContract,\n uid,\n });\n\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n\n const value = (\n await getPremintMintCosts({\n tokenContract,\n quantityToMint: numberToMint,\n publicClient: this.publicClient,\n tokenPrice: premintConfig.tokenConfig.pricePerToken,\n })\n ).totalCost;\n\n const mintArgumentsContract: MintArguments = {\n mintComment: mintArguments?.mintComment || \"\",\n mintRecipient:\n mintArguments?.mintRecipient ||\n (typeof minterAccount === \"string\"\n ? minterAccount\n : minterAccount.address),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral: mintArguments?.mintReferral,\n platformReferral: mintArguments?.platformReferral,\n }),\n };\n\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return {\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premintV1\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collection,\n premintConfig,\n signature,\n numberToMint,\n mintArgumentsContract,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premintV1\"\n >;\n } else if (premintConfigVersion === PremintConfigVersion.V2) {\n return {\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premintV2\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collection,\n premintConfig,\n signature,\n numberToMint,\n mintArgumentsContract,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premintV2\"\n >;\n }\n\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n\nfunction makeUrls({\n uid,\n address,\n tokenId,\n chain,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chain: Chain;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chain.id);\n\n return {\n explorer: tokenId\n ? `https://${chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n\ntype SignAndSubmitPremintParams<T extends PremintConfigVersion> = {\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n collection: ContractCreationConfig;\n} & PremintConfigWithVersion<T>;\n\nasync function signAndSubmitPremint<T extends PremintConfigVersion>({\n walletClient,\n verifyingContract,\n account,\n checkSignature,\n collection,\n chainId,\n publicClient,\n apiClient,\n ...premintConfigAndVersion\n}: SignAndSubmitPremintParams<T> & {\n chainId: number;\n publicClient: PublicClient;\n apiClient: PremintAPIClient;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...premintTypedDataDefinition({\n verifyingContract,\n ...premintConfigAndVersion,\n chainId,\n }),\n });\n\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collection,\n publicClient,\n signer: typeof account === \"string\" ? account : account.address,\n collectionAddress: await getPremintCollectionAddress({\n collection,\n publicClient,\n }),\n });\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n const premint = await apiClient.postSignature({\n collection: collection,\n signature: signature,\n ...premintConfigAndVersion,\n });\n\n return { premint, verifyingContract };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155ImplABI,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/1155-deployments\";\nimport {\n TypedDataDefinition,\n recoverTypedDataAddress,\n Hex,\n PublicClient,\n zeroAddress,\n hashDomain,\n keccak256,\n concat,\n recoverAddress,\n GetEventArgs,\n parseEther,\n} from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfig,\n PremintConfigForTokenCreationConfig,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n PreminterDomain,\n TokenCreationConfig,\n v1Types,\n v2Types,\n} from \"./contract-types\";\nimport { MintCosts } from \"src/mint/mint-client\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999];\n\n/**\n * Creates a typed data definition for a premint config. Works for all versions of the premint config by specifying the premintConfigVersion.\n *\n * @param params.verifyingContract the address of the 1155 contract\n * @param params.chainId the chain id the premint is signed for\n * @param params.premintConfigVersion the version of the premint config\n * @param params.premintConfig the premint config\n * @returns\n */\nexport const premintTypedDataDefinition = <T extends PremintConfigVersion>({\n verifyingContract,\n chainId,\n premintConfigVersion: version,\n premintConfig,\n}: {\n verifyingContract: Address;\n chainId: number;\n} & PremintConfigWithVersion<T>): TypedDataDefinition => {\n const domain = {\n chainId,\n name: PreminterDomain,\n version,\n verifyingContract: verifyingContract,\n };\n\n if (version === PremintConfigVersion.V1)\n return {\n domain,\n types: v1Types,\n message: premintConfig as PremintConfigV1,\n primaryType: \"CreatorAttribution\",\n } satisfies TypedDataDefinition<typeof v1Types, \"CreatorAttribution\">;\n if (version === PremintConfigVersion.V2) {\n return {\n domain,\n types: v2Types,\n message: premintConfig as PremintConfigV2,\n primaryType: \"CreatorAttribution\",\n } satisfies TypedDataDefinition<typeof v2Types, \"CreatorAttribution\">;\n }\n\n throw new Error(`Invalid version ${version}`);\n};\n\nexport type IsValidSignatureReturn = {\n isAuthorized: boolean;\n recoveredAddress?: Address;\n};\n\nexport async function isAuthorizedToCreatePremint({\n collection,\n collectionAddress,\n publicClient,\n signer,\n}: {\n collection: ContractCreationConfig;\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremint\",\n args: [signer, collection.contractAdmin, collectionAddress],\n });\n}\n\nexport async function recoverPremintSigner<T extends PremintConfigVersion>({\n signature,\n ...rest\n}: {\n signature: Hex;\n chainId: number;\n verifyingContract: Address;\n} & PremintConfigWithVersion<T>): Promise<Address> {\n const typedData = premintTypedDataDefinition(rest);\n return await recoverTypedDataAddress({\n ...typedData,\n signature,\n });\n}\n\nexport async function tryRecoverPremintSigner(\n params: Parameters<typeof recoverPremintSigner>[0],\n) {\n try {\n return await recoverPremintSigner(params);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n}\n\n/**\n * Recovers the address from a typed data signature and then checks if the recovered address is authorized to create a premint\n *\n * @param params validationProperties\n * @param params.typedData typed data definition for premint config\n * @param params.signature signature to validate\n * @param params.publicClient public rpc read-only client\n * @param params.premintConfigContractAdmin the original contractAdmin on the ContractCreationConfig for the premint; this is usually the original creator of the premint\n * @param params.tokenContract the address of the 1155 contract\n * @returns\n */\nexport async function isValidSignature<T extends PremintConfigVersion>({\n signature,\n publicClient,\n collection,\n chainId,\n ...premintConfigAndVersion\n}: {\n collection: ContractCreationConfig;\n signature: Hex;\n chainId: number;\n publicClient: PublicClient;\n} & PremintConfigWithVersion<T>): Promise<IsValidSignatureReturn> {\n const tokenContract = await getPremintCollectionAddress({\n collection,\n publicClient,\n });\n const recoveredAddress = await tryRecoverPremintSigner({\n ...premintConfigAndVersion,\n signature,\n verifyingContract: tokenContract,\n chainId,\n });\n\n if (!recoverAddress) {\n return {\n isAuthorized: false,\n };\n }\n\n const isAuthorized = await isAuthorizedToCreatePremint({\n signer: recoveredAddress!,\n collection,\n collectionAddress: tokenContract,\n publicClient,\n });\n\n return {\n isAuthorized,\n recoveredAddress,\n };\n}\n\n/**\n * Converts a premint config from v1 to v2\n *\n * @param premintConfig premint config to convert\n * @param createReferral address that referred the creator, that will receive create referral rewards for the created token\n */\nexport function migratePremintConfigToV2({\n premintConfig,\n createReferral = zeroAddress,\n}: {\n premintConfig: PremintConfigV1;\n createReferral: Address;\n}): PremintConfigV2 {\n return {\n ...premintConfig,\n tokenConfig: {\n tokenURI: premintConfig.tokenConfig.tokenURI,\n maxSupply: premintConfig.tokenConfig.maxSupply,\n maxTokensPerAddress: premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premintConfig.tokenConfig.pricePerToken,\n mintStart: premintConfig.tokenConfig.mintStart,\n mintDuration: premintConfig.tokenConfig.mintDuration,\n payoutRecipient: premintConfig.tokenConfig.royaltyRecipient,\n royaltyBPS: premintConfig.tokenConfig.royaltyBPS,\n fixedPriceMinter: premintConfig.tokenConfig.fixedPriceMinter,\n createReferral,\n },\n };\n}\n\nexport type CreatorAttributionEventParams = GetEventArgs<\n typeof zoraCreator1155ImplABI,\n \"CreatorAttribution\",\n { EnableUnion: false }\n>;\n\n/**\n * Recovers the address from a CreatorAttribution event emitted from a ZoraCreator1155 contract\n * Useful for verifying that the creator of a token is the one who signed a premint for its creation.\n * \n\n * @param creatorAttribution parameters from the CreatorAttribution event\n * @param chainId the chain id of the current chain\n * @param tokenContract the address of the 1155 contract\n * @returns the address of the signer\n */\nexport const recoverCreatorFromCreatorAttribution = async ({\n creatorAttribution: { version, domainName, structHash, signature },\n chainId,\n tokenContract,\n}: {\n creatorAttribution: CreatorAttributionEventParams;\n tokenContract: Address;\n chainId: number;\n}) => {\n // hash the eip712 domain based on the parameters emitted from the event:\n const hashedDomain = hashDomain({\n domain: {\n chainId,\n name: domainName,\n verifyingContract: tokenContract,\n version,\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n },\n });\n\n // re-build the eip-712 typed data hash, consisting of the hashed domain and the structHash emitted from the event:\n const parts: Hex[] = [\"0x1901\", hashedDomain, structHash!];\n\n const hashedTypedData = keccak256(concat(parts));\n\n return await recoverAddress({\n hash: hashedTypedData,\n signature: signature!,\n });\n};\n\nexport const supportedPremintVersions = async ({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<readonly string[]> => {\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"supportedPremintSignatureVersions\",\n args: [tokenContract],\n });\n};\n/**\n * Checks if the 1155 contract at that address supports the given version of the premint config.\n */\nexport const supportsPremintVersion = async ({\n version,\n tokenContract,\n publicClient,\n}: {\n version: PremintConfigVersion;\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<boolean> => {\n return (\n await supportedPremintVersions({ tokenContract, publicClient })\n ).includes(version);\n};\n\nexport async function getPremintCollectionAddress({\n collection,\n publicClient,\n}: {\n collection: ContractCreationConfig;\n publicClient: PublicClient;\n}): Promise<Address> {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [collection],\n });\n}\n\nexport function markPremintDeleted<T extends PremintConfig>(\n premintConfig: T,\n): T {\n return {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n}\n\nexport function applyUpdateToPremint({\n uid,\n version,\n tokenConfig,\n tokenConfigUpdates,\n}: {\n tokenConfig: TokenCreationConfig;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n} & Pick<PremintConfig, \"uid\" | \"version\">): PremintConfig {\n const updatedTokenConfig: TokenCreationConfig = {\n ...tokenConfig,\n ...tokenConfigUpdates,\n } as const;\n\n const result = {\n deleted: false,\n uid,\n version: version + 1,\n tokenConfig: updatedTokenConfig,\n } as PremintConfig;\n\n return result;\n}\n\nexport function makeNewPremint<T extends TokenCreationConfig>({\n tokenConfig,\n uid,\n}: {\n tokenConfig: T;\n uid: number;\n}): PremintConfigForTokenCreationConfig<T> {\n return {\n deleted: false,\n uid,\n version: 0,\n tokenConfig,\n } as PremintConfigForTokenCreationConfig<T>;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint;\n publicClient: PublicClient;\n}): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n return {\n mintFee: mintFee * quantityToMint,\n tokenPurchaseCost: tokenPrice * quantityToMint,\n totalCost: (mintFee + tokenPrice) * quantityToMint,\n };\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport function getDefaultFixedPriceMinterAddress(chainId: number): Address {\n return zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ]!;\n}\n","import { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/1155-deployments\";\n\ntype PremintV1Inputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premintV1\"\n>[\"inputs\"];\n\ntype PremintV1HashDataTypes = AbiParametersToPrimitiveTypes<PremintV1Inputs>;\n\nexport type ContractCreationConfig = PremintV1HashDataTypes[0];\n\nexport type PremintConfigV1 = PremintV1HashDataTypes[1];\nexport type TokenCreationConfigV1 = PremintConfigV1[\"tokenConfig\"];\n\nexport type MintArguments = PremintV1HashDataTypes[4];\n\ntype PremintV2Inputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premintV2\"\n>[\"inputs\"];\n\ntype PremintV2HashDataTypes = AbiParametersToPrimitiveTypes<PremintV2Inputs>;\n\nexport type PremintConfigV2 = PremintV2HashDataTypes[1];\nexport type TokenCreationConfigV2 = PremintConfigV2[\"tokenConfig\"];\n\nexport const v1Types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n} as const;\n\nexport const v2Types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"payoutRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n { name: \"createReferral\", type: \"address\" },\n ],\n} as const;\n\nexport const PreminterDomain = \"Preminter\";\n\nexport enum PremintConfigVersion {\n V1 = \"1\",\n V2 = \"2\",\n}\n\nexport type PremintConfigForVersion<T extends PremintConfigVersion> =\n T extends PremintConfigVersion.V1 ? PremintConfigV1 : PremintConfigV2;\n\nexport type PremintConfigWithVersion<T extends PremintConfigVersion> = {\n premintConfig: PremintConfigForVersion<T>;\n premintConfigVersion: T;\n};\n\nexport type PremintConfigAndVersion =\n | PremintConfigWithVersion<PremintConfigVersion.V1>\n | PremintConfigWithVersion<PremintConfigVersion.V2>;\n\nexport type PremintConfig = PremintConfigV1 | PremintConfigV2;\nexport type TokenCreationConfig = TokenCreationConfigV1 | TokenCreationConfigV2;\n\nexport type PremintConfigForTokenCreationConfig<T extends TokenCreationConfig> =\n T extends TokenCreationConfigV1 ? PremintConfigV1 : PremintConfigV2;\n\nexport type TokenConfigForVersion<T extends PremintConfigVersion> =\n PremintConfigForVersion<T>[\"tokenConfig\"];\n\nexport type TokenConfigWithVersion<T extends PremintConfigVersion> = {\n tokenConfig: TokenConfigForVersion<T>;\n premintConfigVersion: T;\n};\n","export class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\nasync function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n atTry: number = 1,\n linearBackoffMS: number = 200,\n): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (err instanceof BadResponseError) {\n if (err.status >= 500) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retries(tryFn, maxTries, atTry + 1);\n }\n }\n }\n throw err;\n }\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraSepolia,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"gor\",\n zoraBackendChainName: \"ETHEREUM-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zoraTestnet.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"ogor\",\n zoraBackendChainName: \"OPTIMISM-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bgor\",\n zoraBackendChainName: \"BASE-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\ntype FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\ntype SaleStrategyResult = {\n fixedPrice: FixedPriceSaleStrategyResult;\n};\n\nexport type SalesConfigAndTokenInfo = {\n fixedPrice: FixedPriceSaleStrategyResult;\n mintFeePerQuantity: bigint;\n};\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n\nexport class MintAPIClient {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async getSalesConfigAndTokenInfo({\n tokenAddress,\n tokenId,\n }: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n }): Promise<SalesConfigAndTokenInfo> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: `\n fragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n }\n \n query ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n contract {\n mintFeePerQuantity\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n ...SaleStrategy\n }\n }\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n ...SaleStrategy\n }\n }\n }\n `,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n });\n\n const token = response.data?.zoraCreateToken;\n\n if (!token) {\n throw new Error(\"Cannot find a token to mint\");\n }\n\n const saleStrategies: SaleStrategyResult[] =\n tokenId !== undefined\n ? token.salesStrategies\n : token.contract.salesStrategies;\n\n const fixedPrice = saleStrategies\n ?.sort((a: SaleStrategyResult, b: SaleStrategyResult) =>\n BigInt(a.fixedPrice.saleEnd) > BigInt(b.fixedPrice.saleEnd) ? 1 : -1,\n )\n ?.find(() => true)?.fixedPrice;\n\n if (!fixedPrice) {\n throw new Error(\"Cannot find fixed price sale strategy\");\n }\n\n return {\n fixedPrice,\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n });\n }\n}\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"./contract-types\";\nimport { PremintSignatureGetResponse } from \"./premint-api-client\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n ...convertPremintFromApi(response.premint),\n collection: convertCollectionFromApi(response.collection),\n signature: response.signature as Hex,\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n collection,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n collection: ContractCreationConfig;\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T>): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig } from \"src/apis/chain-constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"./contract-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\ntype PremintNextUIDGetPathParameters =\n PremintNextUIDGetType[\"parameters\"][\"path\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\ntype PremintSignatureGetPathParameters =\n SignaturePremintGetType[\"parameters\"][\"path\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nconst getNextUID = async ({\n chain_name,\n collection_address,\n httpClient: { retries, get } = defaultHttpClient,\n}: PremintNextUIDGetPathParameters & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintNextUIDGetResponse> =>\n retries(() =>\n get<PremintNextUIDGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/next_uid`,\n ),\n );\n\nconst getSignature = async ({\n collection_address,\n uid,\n chain_name,\n httpClient: { retries, get } = defaultHttpClient,\n}: PremintSignatureGetPathParameters & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<\n PremintSignatureGetResponse & {\n premint_config_version?: PremintConfigVersion;\n }\n> => {\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\n return result;\n};\n\nclass PremintAPIClient {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n postSignature = async <T extends PremintConfigVersion>({\n collection,\n signature,\n ...premintConfigAndVersion\n }: {\n collection: ContractCreationConfig;\n signature: Hex;\n } & PremintConfigWithVersion<T>): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n collection,\n ...premintConfigAndVersion,\n chainId: this.networkConfig.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n getNextUID = async (collectionAddress: Address): Promise<number> =>\n (\n await getNextUID({\n collection_address: collectionAddress.toLowerCase(),\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n })\n ).next_uid;\n\n getSignature = async ({\n collectionAddress,\n uid,\n }: {\n collectionAddress: Address;\n uid: number;\n }): Promise<\n {\n signature: Hex;\n collection: ContractCreationConfig;\n } & PremintConfigAndVersion\n > => {\n const response = await getSignature({\n collection_address: collectionAddress.toLowerCase(),\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n return convertGetPremintApiResponse(response);\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, SalesConfigAndTokenInfo } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/1155-deployments\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { zora721Abi } from \"src/constants\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nasync function makePrepareMintTokenParams({\n publicClient,\n apiClient,\n tokenId,\n tokenAddress,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const salesConfigAndTokenInfo = await apiClient.getSalesConfigAndTokenInfo({\n tokenId,\n tokenAddress,\n });\n\n if (tokenId === undefined) {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n ...rest,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n tokenId,\n ...rest,\n });\n}\n\nasync function makePrepareMint721TokenParams({\n tokenAddress,\n salesConfigAndTokenInfo,\n minterAccount,\n mintArguments,\n}: {\n tokenAddress: Address;\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n }).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: tokenAddress,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport function getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n quantityToMint: bigint;\n}): MintCosts {\n const mintFeeForTokens =\n salesConfigAndTokenInfo.mintFeePerQuantity * quantityToMint;\n const tokenPurchaseCost =\n BigInt(salesConfigAndTokenInfo.fixedPrice.pricePerToken) * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n tokenAddress,\n mintArguments,\n}: {\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n tokenId: GenericTokenIdTypes;\n minterAccount: Address;\n tokenAddress: Address;\n mintArguments: MintArguments;\n}) {\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: mintQuantity,\n }).totalCost;\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenAddress,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (salesConfigAndTokenInfo?.fixedPrice.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(tokenId),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/1155-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 4n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n"],"mappings":"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","names":["import_viem","import_deployments","PremintConfigVersion","preminterAbi","import_viem","import_viem","httpClient","retries","post","post","retries","get","httpClient","httpClient","import_viem","import_deployments","httpClient","import_deployments","import_viem"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/premint/contract-types.ts","../src/apis/http-api-base.ts","../src/constants.ts","../src/apis/chain-constants.ts","../src/mint/mint-api-client.ts","../src/premint/conversions.ts","../src/premint/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/mints/mints-queries.ts"],"sourcesContent":["export * from \"./premint/premint-client\";\n\nexport * from \"./premint/preminter\";\n\nexport * from \"./premint/contract-types\";\n\nexport * from \"./premint/premint-api-client\";\n\nexport * from \"./premint/conversions\";\n\nexport * from \"./mint/mint-api-client\";\n\nexport * from \"./mint/mint-client\";\n\nexport * from \"./create/1155-create-helper\";\n\nexport * from \"./mints/mints-queries\";\n","import { createPublicClient, decodeEventLog, http, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport { zoraCreator1155PremintExecutorImplABI } from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n premintTypedDataDefinition,\n isValidSignature,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n markPremintDeleted,\n makeNewPremint,\n supportsPremintVersion,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenConfigForVersion,\n PremintConfigWithVersion,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigForVersion,\n MintArguments,\n} from \"./contract-types\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\nimport { MintCosts } from \"src/mint/mint-client\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n};\n\nexport const defaultTokenConfigV1MintArguments = (): Omit<\n TokenCreationConfigV1,\n \"fixedPriceMinter\" | \"tokenURI\" | \"royaltyRecipient\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: BigInt(60 * 60 * 24 * 7), // 1 week\n mintStart: 0n,\n royaltyMintSchedule: 0,\n royaltyBPS: 1000, // 10%,\n});\n\nexport const defaultTokenConfigV2MintArguments = (): Omit<\n TokenCreationConfigV2,\n \"fixedPriceMinter\" | \"tokenURI\" | \"payoutRecipient\" | \"createReferral\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: BigInt(60 * 60 * 24 * 7), // 1 week\n mintStart: 0n,\n royaltyBPS: 1000, // 10%,\n});\n\nconst makeTokenConfigWithDefaults = <T extends PremintConfigVersion>({\n chainId,\n premintConfigVersion,\n tokenCreationConfig,\n creatorAccount,\n}: {\n chainId: number;\n premintConfigVersion: PremintConfigVersion;\n tokenCreationConfig: Partial<TokenConfigForVersion<T>> & { tokenURI: string };\n creatorAccount: Address;\n}): TokenConfigForVersion<T> => {\n const fixedPriceMinter =\n tokenCreationConfig.fixedPriceMinter ||\n getDefaultFixedPriceMinterAddress(chainId);\n\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return {\n fixedPriceMinter,\n ...defaultTokenConfigV1MintArguments(),\n royaltyRecipient: creatorAccount,\n ...tokenCreationConfig,\n };\n } else if (premintConfigVersion === PremintConfigVersion.V2) {\n return {\n fixedPriceMinter,\n ...defaultTokenConfigV2MintArguments(),\n payoutRecipient: creatorAccount,\n createReferral: zeroAddress,\n ...tokenCreationConfig,\n };\n } else {\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n }\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nexport function getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n account,\n tokenConfigUpdates,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n }): Promise<SignedPremintResponse> {\n const {\n premintConfig,\n collection: collectionCreationConfig,\n premintConfigVersion,\n } = await this.apiClient.getSignature({\n collectionAddress: collection,\n uid: uid,\n });\n\n const updatedPremint = applyUpdateToPremint({\n uid: premintConfig.uid,\n version: premintConfig.version,\n tokenConfig: premintConfig.tokenConfig,\n tokenConfigUpdates: tokenConfigUpdates,\n });\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: true,\n verifyingContract: collection,\n collection: collectionCreationConfig,\n premintConfig: updatedPremint,\n premintConfigVersion: premintConfigVersion,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const {\n premintConfig,\n premintConfigVersion,\n collection: collectionCreationConfig,\n } = await this.apiClient.getSignature({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = markPremintDeleted(premintConfig);\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n collection: collectionCreationConfig,\n premintConfig: deletedPremint,\n premintConfigVersion,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint<T extends PremintConfigVersion>(\n params: SignAndSubmitPremintParams<T>,\n ): Promise<SignedPremintResponse> {\n const { verifyingContract } = await signAndSubmitPremint({\n ...params,\n chainId: this.chain.id,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n\n const uid = params.premintConfig.uid;\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.tokenCreationConfig Mint argument settings, optional settings are overridden with sensible defaults.\n * @param setings.premintConfigVersion Premint config version to use, defaults to V2\n * @param settings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint<\n T extends PremintConfigVersion = PremintConfigVersion.V1,\n >({\n creatorAccount,\n collection,\n tokenCreationConfig,\n premintConfigVersion,\n walletClient,\n uid,\n checkSignature = false,\n }: {\n creatorAccount: Address | Account;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: ContractCreationConfig;\n tokenCreationConfig: Partial<TokenConfigForVersion<T>> & {\n tokenURI: string;\n };\n premintConfigVersion?: T;\n uid?: number;\n }) {\n const newContractAddress = await getPremintCollectionAddress({\n publicClient: this.publicClient,\n collection,\n });\n\n let uidToUse = uid;\n\n if (typeof uidToUse !== \"number\") {\n uidToUse = await this.apiClient.getNextUID(newContractAddress);\n }\n\n const actualVersion = premintConfigVersion || PremintConfigVersion.V1;\n\n if (\n !(await supportsPremintVersion({\n version: actualVersion,\n publicClient: this.publicClient,\n tokenContract: newContractAddress,\n }))\n ) {\n throw new Error(\n `Premint version ${actualVersion} not supported by contract`,\n );\n }\n\n const premintConfig = makeNewPremint({\n tokenConfig: makeTokenConfigWithDefaults({\n premintConfigVersion: actualVersion,\n tokenCreationConfig,\n creatorAccount:\n typeof creatorAccount === \"string\"\n ? creatorAccount\n : creatorAccount.address,\n chainId: this.chain.id,\n }),\n uid: uidToUse,\n });\n\n return await this.signAndSubmitPremint({\n verifyingContract: newContractAddress,\n premintConfig,\n premintConfigVersion: actualVersion,\n checkSignature,\n account: creatorAccount,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintSignature({\n address,\n uid,\n }: {\n address: Address;\n uid: number;\n }) {\n return await this.apiClient.getSignature({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n collection,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Check user signature for v1\n *\n * @param data Signature data from the API\n * @returns isValid = signature is valid or not, recoveredSigner = signer from contract\n */\n async isValidSignature<T extends PremintConfigVersion>({\n signature,\n collection,\n premintConfig,\n premintConfigVersion,\n }: {\n signature: Hex;\n collection: ContractCreationConfig;\n premintConfig: PremintConfigForVersion<T>;\n premintConfigVersion?: T;\n }): Promise<{\n isValid: boolean;\n recoveredSigner: Address | undefined;\n }> {\n const { isAuthorized, recoveredAddress } = await isValidSignature({\n chainId: this.chain.id,\n signature: signature as Hex,\n collection: collection,\n publicClient: this.publicClient,\n premintConfig,\n premintConfigVersion: premintConfigVersion || PremintConfigVersion.V1,\n });\n\n return { isValid: isAuthorized, recoveredSigner: recoveredAddress };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n }): URLSReturnType {\n return makeUrls({\n uid,\n address,\n tokenId,\n chain: this.chain,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n uid,\n tokenContract,\n minterAccount,\n mintArguments,\n }: {\n uid: number;\n tokenContract: Address;\n minterAccount: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n platformReferral?: Address;\n mintRecipient?: Address;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n if (!minterAccount) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const { premintConfig, premintConfigVersion, collection, signature } =\n await this.getPremintSignature({\n address: tokenContract,\n uid,\n });\n\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n\n const value = (\n await getPremintMintCosts({\n tokenContract,\n quantityToMint: numberToMint,\n publicClient: this.publicClient,\n tokenPrice: premintConfig.tokenConfig.pricePerToken,\n })\n ).totalCost;\n\n const mintArgumentsContract: MintArguments = {\n mintComment: mintArguments?.mintComment || \"\",\n mintRecipient:\n mintArguments?.mintRecipient ||\n (typeof minterAccount === \"string\"\n ? minterAccount\n : minterAccount.address),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral: mintArguments?.mintReferral,\n platformReferral: mintArguments?.platformReferral,\n }),\n };\n\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return {\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premintV1\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collection,\n premintConfig,\n signature,\n numberToMint,\n mintArgumentsContract,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premintV1\"\n >;\n } else if (premintConfigVersion === PremintConfigVersion.V2) {\n return {\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premintV2\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collection,\n premintConfig,\n signature,\n numberToMint,\n mintArgumentsContract,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premintV2\"\n >;\n }\n\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n\nfunction makeUrls({\n uid,\n address,\n tokenId,\n chain,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chain: Chain;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chain.id);\n\n return {\n explorer: tokenId\n ? `https://${chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n\ntype SignAndSubmitPremintParams<T extends PremintConfigVersion> = {\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n collection: ContractCreationConfig;\n} & PremintConfigWithVersion<T>;\n\nasync function signAndSubmitPremint<T extends PremintConfigVersion>({\n walletClient,\n verifyingContract,\n account,\n checkSignature,\n collection,\n chainId,\n publicClient,\n apiClient,\n ...premintConfigAndVersion\n}: SignAndSubmitPremintParams<T> & {\n chainId: number;\n publicClient: PublicClient;\n apiClient: PremintAPIClient;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...premintTypedDataDefinition({\n verifyingContract,\n ...premintConfigAndVersion,\n chainId,\n }),\n });\n\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collection,\n publicClient,\n signer: typeof account === \"string\" ? account : account.address,\n collectionAddress: await getPremintCollectionAddress({\n collection,\n publicClient,\n }),\n });\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n const premint = await apiClient.postSignature({\n collection: collection,\n signature: signature,\n ...premintConfigAndVersion,\n });\n\n return { premint, verifyingContract };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155ImplABI,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n TypedDataDefinition,\n recoverTypedDataAddress,\n Hex,\n PublicClient,\n zeroAddress,\n hashDomain,\n keccak256,\n concat,\n recoverAddress,\n GetEventArgs,\n parseEther,\n} from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfig,\n PremintConfigForTokenCreationConfig,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n PreminterDomain,\n TokenCreationConfig,\n v1Types,\n v2Types,\n} from \"./contract-types\";\nimport { MintCosts } from \"src/mint/mint-client\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999];\n\n/**\n * Creates a typed data definition for a premint config. Works for all versions of the premint config by specifying the premintConfigVersion.\n *\n * @param params.verifyingContract the address of the 1155 contract\n * @param params.chainId the chain id the premint is signed for\n * @param params.premintConfigVersion the version of the premint config\n * @param params.premintConfig the premint config\n * @returns\n */\nexport const premintTypedDataDefinition = <T extends PremintConfigVersion>({\n verifyingContract,\n chainId,\n premintConfigVersion: version,\n premintConfig,\n}: {\n verifyingContract: Address;\n chainId: number;\n} & PremintConfigWithVersion<T>): TypedDataDefinition => {\n const domain = {\n chainId,\n name: PreminterDomain,\n version,\n verifyingContract: verifyingContract,\n };\n\n if (version === PremintConfigVersion.V1)\n return {\n domain,\n types: v1Types,\n message: premintConfig as PremintConfigV1,\n primaryType: \"CreatorAttribution\",\n } satisfies TypedDataDefinition<typeof v1Types, \"CreatorAttribution\">;\n if (version === PremintConfigVersion.V2) {\n return {\n domain,\n types: v2Types,\n message: premintConfig as PremintConfigV2,\n primaryType: \"CreatorAttribution\",\n } satisfies TypedDataDefinition<typeof v2Types, \"CreatorAttribution\">;\n }\n\n throw new Error(`Invalid version ${version}`);\n};\n\nexport type IsValidSignatureReturn = {\n isAuthorized: boolean;\n recoveredAddress?: Address;\n};\n\nexport async function isAuthorizedToCreatePremint({\n collection,\n collectionAddress,\n publicClient,\n signer,\n}: {\n collection: ContractCreationConfig;\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremint\",\n args: [signer, collection.contractAdmin, collectionAddress],\n });\n}\n\nexport async function recoverPremintSigner<T extends PremintConfigVersion>({\n signature,\n ...rest\n}: {\n signature: Hex;\n chainId: number;\n verifyingContract: Address;\n} & PremintConfigWithVersion<T>): Promise<Address> {\n const typedData = premintTypedDataDefinition(rest);\n return await recoverTypedDataAddress({\n ...typedData,\n signature,\n });\n}\n\nexport async function tryRecoverPremintSigner(\n params: Parameters<typeof recoverPremintSigner>[0],\n) {\n try {\n return await recoverPremintSigner(params);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n}\n\n/**\n * Recovers the address from a typed data signature and then checks if the recovered address is authorized to create a premint\n *\n * @param params validationProperties\n * @param params.typedData typed data definition for premint config\n * @param params.signature signature to validate\n * @param params.publicClient public rpc read-only client\n * @param params.premintConfigContractAdmin the original contractAdmin on the ContractCreationConfig for the premint; this is usually the original creator of the premint\n * @param params.tokenContract the address of the 1155 contract\n * @returns\n */\nexport async function isValidSignature<T extends PremintConfigVersion>({\n signature,\n publicClient,\n collection,\n chainId,\n ...premintConfigAndVersion\n}: {\n collection: ContractCreationConfig;\n signature: Hex;\n chainId: number;\n publicClient: PublicClient;\n} & PremintConfigWithVersion<T>): Promise<IsValidSignatureReturn> {\n const tokenContract = await getPremintCollectionAddress({\n collection,\n publicClient,\n });\n const recoveredAddress = await tryRecoverPremintSigner({\n ...premintConfigAndVersion,\n signature,\n verifyingContract: tokenContract,\n chainId,\n });\n\n if (!recoverAddress) {\n return {\n isAuthorized: false,\n };\n }\n\n const isAuthorized = await isAuthorizedToCreatePremint({\n signer: recoveredAddress!,\n collection,\n collectionAddress: tokenContract,\n publicClient,\n });\n\n return {\n isAuthorized,\n recoveredAddress,\n };\n}\n\n/**\n * Converts a premint config from v1 to v2\n *\n * @param premintConfig premint config to convert\n * @param createReferral address that referred the creator, that will receive create referral rewards for the created token\n */\nexport function migratePremintConfigToV2({\n premintConfig,\n createReferral = zeroAddress,\n}: {\n premintConfig: PremintConfigV1;\n createReferral: Address;\n}): PremintConfigV2 {\n return {\n ...premintConfig,\n tokenConfig: {\n tokenURI: premintConfig.tokenConfig.tokenURI,\n maxSupply: premintConfig.tokenConfig.maxSupply,\n maxTokensPerAddress: premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premintConfig.tokenConfig.pricePerToken,\n mintStart: premintConfig.tokenConfig.mintStart,\n mintDuration: premintConfig.tokenConfig.mintDuration,\n payoutRecipient: premintConfig.tokenConfig.royaltyRecipient,\n royaltyBPS: premintConfig.tokenConfig.royaltyBPS,\n fixedPriceMinter: premintConfig.tokenConfig.fixedPriceMinter,\n createReferral,\n },\n };\n}\n\nexport type CreatorAttributionEventParams = GetEventArgs<\n typeof zoraCreator1155ImplABI,\n \"CreatorAttribution\",\n { EnableUnion: false }\n>;\n\n/**\n * Recovers the address from a CreatorAttribution event emitted from a ZoraCreator1155 contract\n * Useful for verifying that the creator of a token is the one who signed a premint for its creation.\n * \n\n * @param creatorAttribution parameters from the CreatorAttribution event\n * @param chainId the chain id of the current chain\n * @param tokenContract the address of the 1155 contract\n * @returns the address of the signer\n */\nexport const recoverCreatorFromCreatorAttribution = async ({\n creatorAttribution: { version, domainName, structHash, signature },\n chainId,\n tokenContract,\n}: {\n creatorAttribution: CreatorAttributionEventParams;\n tokenContract: Address;\n chainId: number;\n}) => {\n // hash the eip712 domain based on the parameters emitted from the event:\n const hashedDomain = hashDomain({\n domain: {\n chainId,\n name: domainName,\n verifyingContract: tokenContract,\n version,\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n },\n });\n\n // re-build the eip-712 typed data hash, consisting of the hashed domain and the structHash emitted from the event:\n const parts: Hex[] = [\"0x1901\", hashedDomain, structHash!];\n\n const hashedTypedData = keccak256(concat(parts));\n\n return await recoverAddress({\n hash: hashedTypedData,\n signature: signature!,\n });\n};\n\nexport const supportedPremintVersions = async ({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<readonly string[]> => {\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"supportedPremintSignatureVersions\",\n args: [tokenContract],\n });\n};\n/**\n * Checks if the 1155 contract at that address supports the given version of the premint config.\n */\nexport const supportsPremintVersion = async ({\n version,\n tokenContract,\n publicClient,\n}: {\n version: PremintConfigVersion;\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<boolean> => {\n return (\n await supportedPremintVersions({ tokenContract, publicClient })\n ).includes(version);\n};\n\nexport async function getPremintCollectionAddress({\n collection,\n publicClient,\n}: {\n collection: ContractCreationConfig;\n publicClient: PublicClient;\n}): Promise<Address> {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [collection],\n });\n}\n\nexport function markPremintDeleted<T extends PremintConfig>(\n premintConfig: T,\n): T {\n return {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n}\n\nexport function applyUpdateToPremint({\n uid,\n version,\n tokenConfig,\n tokenConfigUpdates,\n}: {\n tokenConfig: TokenCreationConfig;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n} & Pick<PremintConfig, \"uid\" | \"version\">): PremintConfig {\n const updatedTokenConfig: TokenCreationConfig = {\n ...tokenConfig,\n ...tokenConfigUpdates,\n } as const;\n\n const result = {\n deleted: false,\n uid,\n version: version + 1,\n tokenConfig: updatedTokenConfig,\n } as PremintConfig;\n\n return result;\n}\n\nexport function makeNewPremint<T extends TokenCreationConfig>({\n tokenConfig,\n uid,\n}: {\n tokenConfig: T;\n uid: number;\n}): PremintConfigForTokenCreationConfig<T> {\n return {\n deleted: false,\n uid,\n version: 0,\n tokenConfig,\n } as PremintConfigForTokenCreationConfig<T>;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint;\n publicClient: PublicClient;\n}): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n return {\n mintFee: mintFee * quantityToMint,\n tokenPurchaseCost: tokenPrice * quantityToMint,\n totalCost: (mintFee + tokenPrice) * quantityToMint,\n };\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport function getDefaultFixedPriceMinterAddress(chainId: number): Address {\n return zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ]!;\n}\n","import { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/protocol-deployments\";\n\ntype PremintV1Inputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premintV1\"\n>[\"inputs\"];\n\ntype PremintV1HashDataTypes = AbiParametersToPrimitiveTypes<PremintV1Inputs>;\n\nexport type ContractCreationConfig = PremintV1HashDataTypes[0];\n\nexport type PremintConfigV1 = PremintV1HashDataTypes[1];\nexport type TokenCreationConfigV1 = PremintConfigV1[\"tokenConfig\"];\n\nexport type MintArguments = PremintV1HashDataTypes[4];\n\ntype PremintV2Inputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premintV2\"\n>[\"inputs\"];\n\ntype PremintV2HashDataTypes = AbiParametersToPrimitiveTypes<PremintV2Inputs>;\n\nexport type PremintConfigV2 = PremintV2HashDataTypes[1];\nexport type TokenCreationConfigV2 = PremintConfigV2[\"tokenConfig\"];\n\nexport const v1Types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n} as const;\n\nexport const v2Types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"payoutRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n { name: \"createReferral\", type: \"address\" },\n ],\n} as const;\n\nexport const PreminterDomain = \"Preminter\";\n\nexport enum PremintConfigVersion {\n V1 = \"1\",\n V2 = \"2\",\n}\n\nexport type PremintConfigForVersion<T extends PremintConfigVersion> =\n T extends PremintConfigVersion.V1 ? PremintConfigV1 : PremintConfigV2;\n\nexport type PremintConfigWithVersion<T extends PremintConfigVersion> = {\n premintConfig: PremintConfigForVersion<T>;\n premintConfigVersion: T;\n};\n\nexport type PremintConfigAndVersion =\n | PremintConfigWithVersion<PremintConfigVersion.V1>\n | PremintConfigWithVersion<PremintConfigVersion.V2>;\n\nexport type PremintConfig = PremintConfigV1 | PremintConfigV2;\nexport type TokenCreationConfig = TokenCreationConfigV1 | TokenCreationConfigV2;\n\nexport type PremintConfigForTokenCreationConfig<T extends TokenCreationConfig> =\n T extends TokenCreationConfigV1 ? PremintConfigV1 : PremintConfigV2;\n\nexport type TokenConfigForVersion<T extends PremintConfigVersion> =\n PremintConfigForVersion<T>[\"tokenConfig\"];\n\nexport type TokenConfigWithVersion<T extends PremintConfigVersion> = {\n tokenConfig: TokenConfigForVersion<T>;\n premintConfigVersion: T;\n};\n","export class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\nasync function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n atTry: number = 1,\n linearBackoffMS: number = 200,\n): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (err instanceof BadResponseError) {\n if (err.status >= 500) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retries(tryFn, maxTries, atTry + 1);\n }\n }\n }\n throw err;\n }\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraSepolia,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"gor\",\n zoraBackendChainName: \"ETHEREUM-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zoraTestnet.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"ogor\",\n zoraBackendChainName: \"OPTIMISM-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bgor\",\n zoraBackendChainName: \"BASE-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n\nexport const getSubgraphUrl = (chainId: number): string => {\n const networkConfig = networkConfigByChain[chainId];\n\n if (!networkConfig) {\n throw new Error(`Network not configured for chain id ${chainId}`);\n }\n\n return networkConfig.subgraphUrl;\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\ntype FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\ntype SaleStrategyResult = {\n fixedPrice: FixedPriceSaleStrategyResult;\n};\n\nexport type SalesConfigAndTokenInfo = {\n fixedPrice: FixedPriceSaleStrategyResult;\n mintFeePerQuantity: bigint;\n};\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n\nexport class MintAPIClient {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async getSalesConfigAndTokenInfo({\n tokenAddress,\n tokenId,\n }: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n }): Promise<SalesConfigAndTokenInfo> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: `\n fragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n }\n \n query ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n contract {\n mintFeePerQuantity\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n ...SaleStrategy\n }\n }\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n ...SaleStrategy\n }\n }\n }\n `,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n });\n\n const token = response.data?.zoraCreateToken;\n\n if (!token) {\n throw new Error(\"Cannot find a token to mint\");\n }\n\n const saleStrategies: SaleStrategyResult[] =\n tokenId !== undefined\n ? token.salesStrategies\n : token.contract.salesStrategies;\n\n const fixedPrice = saleStrategies\n ?.sort((a: SaleStrategyResult, b: SaleStrategyResult) =>\n BigInt(a.fixedPrice.saleEnd) > BigInt(b.fixedPrice.saleEnd) ? 1 : -1,\n )\n ?.find(() => true)?.fixedPrice;\n\n if (!fixedPrice) {\n throw new Error(\"Cannot find fixed price sale strategy\");\n }\n\n return {\n fixedPrice,\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n });\n }\n}\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"./contract-types\";\nimport { PremintSignatureGetResponse } from \"./premint-api-client\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n ...convertPremintFromApi(response.premint),\n collection: convertCollectionFromApi(response.collection),\n signature: response.signature as Hex,\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n collection,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n collection: ContractCreationConfig;\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T>): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig } from \"src/apis/chain-constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"./contract-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\ntype PremintNextUIDGetPathParameters =\n PremintNextUIDGetType[\"parameters\"][\"path\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\ntype PremintSignatureGetPathParameters =\n SignaturePremintGetType[\"parameters\"][\"path\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nconst getNextUID = async ({\n chain_name,\n collection_address,\n httpClient: { retries, get } = defaultHttpClient,\n}: PremintNextUIDGetPathParameters & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintNextUIDGetResponse> =>\n retries(() =>\n get<PremintNextUIDGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/next_uid`,\n ),\n );\n\nconst getSignature = async ({\n collection_address,\n uid,\n chain_name,\n httpClient: { retries, get } = defaultHttpClient,\n}: PremintSignatureGetPathParameters & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<\n PremintSignatureGetResponse & {\n premint_config_version?: PremintConfigVersion;\n }\n> => {\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\n return result;\n};\n\nclass PremintAPIClient {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n postSignature = async <T extends PremintConfigVersion>({\n collection,\n signature,\n ...premintConfigAndVersion\n }: {\n collection: ContractCreationConfig;\n signature: Hex;\n } & PremintConfigWithVersion<T>): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n collection,\n ...premintConfigAndVersion,\n chainId: this.networkConfig.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n getNextUID = async (collectionAddress: Address): Promise<number> =>\n (\n await getNextUID({\n collection_address: collectionAddress.toLowerCase(),\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n })\n ).next_uid;\n\n getSignature = async ({\n collectionAddress,\n uid,\n }: {\n collectionAddress: Address;\n uid: number;\n }): Promise<\n {\n signature: Hex;\n collection: ContractCreationConfig;\n } & PremintConfigAndVersion\n > => {\n const response = await getSignature({\n collection_address: collectionAddress.toLowerCase(),\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n return convertGetPremintApiResponse(response);\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, SalesConfigAndTokenInfo } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { zora721Abi } from \"src/constants\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nasync function makePrepareMintTokenParams({\n publicClient,\n apiClient,\n tokenId,\n tokenAddress,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const salesConfigAndTokenInfo = await apiClient.getSalesConfigAndTokenInfo({\n tokenId,\n tokenAddress,\n });\n\n if (tokenId === undefined) {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n ...rest,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n tokenId,\n ...rest,\n });\n}\n\nasync function makePrepareMint721TokenParams({\n tokenAddress,\n salesConfigAndTokenInfo,\n minterAccount,\n mintArguments,\n}: {\n tokenAddress: Address;\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n }).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: tokenAddress,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport function getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n quantityToMint: bigint;\n}): MintCosts {\n const mintFeeForTokens =\n salesConfigAndTokenInfo.mintFeePerQuantity * quantityToMint;\n const tokenPurchaseCost =\n BigInt(salesConfigAndTokenInfo.fixedPrice.pricePerToken) * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n tokenAddress,\n mintArguments,\n}: {\n salesConfigAndTokenInfo: SalesConfigAndTokenInfo;\n tokenId: GenericTokenIdTypes;\n minterAccount: Address;\n tokenAddress: Address;\n mintArguments: MintArguments;\n}) {\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: mintQuantity,\n }).totalCost;\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenAddress,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (salesConfigAndTokenInfo?.fixedPrice.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(tokenId),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 4n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n","import { getSubgraphUrl } from \"src/apis/chain-constants\";\nimport { Address } from \"viem\";\nimport { request, gql } from \"graphql-request\";\n\ntype CollectQueryResult = {\n tokenIds: bigint[];\n quantities: bigint[];\n};\n\nexport const getMintsAccountBalanceQuery = (account: Address) => {\n const query = gql`\n query GetMintAccountBalances($account: String!) {\n mintTokenBalances(where: { account: $account }) {\n balance\n mintToken {\n id\n pricePerToken\n }\n }\n }\n `;\n\n return {\n query,\n variables: { account },\n };\n};\n\nexport type MintAccountBalance = {\n balance: string;\n mintToken: {\n id: string;\n pricePerToken: string;\n };\n};\n\nexport type MintAccountBalancesQueryResult = {\n mintTokenBalances: MintAccountBalance[];\n};\n\n/**\n * Given the result of a mint token balances query, selects the best MINTs to use to collect with that will satisfy the quantity,\n * by selecting the lowest priced MINTs first. Throws an error if not enough mints to collect with.\n */\nexport const selectMintsToCollectWithFromQueryResult = (\n mintAccountBalances: MintAccountBalance[],\n quantityToCollect: bigint,\n) => {\n const parsed = mintAccountBalances.map((r) => {\n return {\n tokenId: BigInt(r.mintToken.id),\n quantity: BigInt(r.balance),\n pricePerToken: BigInt(r.mintToken.pricePerToken),\n };\n });\n\n // now we want to find the best tokens to collect with, sorted by lowest price ascending\n // given its a bigint, lets not do a straight subtraction but sort based on result of comparison gt/lt:\n const sorted = parsed.sort((a, b) => {\n if (a.pricePerToken < b.pricePerToken) {\n return -1;\n }\n return 1;\n });\n\n // we need to get array of tokenIds and quantities to collect with:\n let remainingQuantity = quantityToCollect;\n const tokenIds: bigint[] = [];\n const quantities: bigint[] = [];\n\n while (remainingQuantity > 0) {\n const next = sorted.shift();\n if (!next) {\n throw new Error(\"Not enough MINTs to collect with\");\n }\n\n const quantityToUse =\n remainingQuantity > next.quantity ? next.quantity : remainingQuantity;\n tokenIds.push(next.tokenId);\n quantities.push(quantityToUse);\n remainingQuantity -= quantityToUse;\n }\n\n return {\n tokenIds,\n quantities,\n };\n};\n\n/***\n * Given an account and quantity of MINTs to use to collect with, queries for MINTs\n * owned by an account, and selects the best MINTs to use to collect with that will satisfy that quantity.\n * @param account Account to query for MINTs\n * @param chainId\n * @param quantityToCollect How many MINTs to use to collect with\n * @returns\n */\nexport const getMINTsToCollectWith = async ({\n account,\n chainId,\n quantityToCollect,\n}: {\n account: Address;\n chainId: number;\n quantityToCollect: bigint;\n}): Promise<CollectQueryResult> => {\n const subgraphUrl = getSubgraphUrl(chainId);\n\n const { query, variables } = getMintsAccountBalanceQuery(account);\n\n const result = await request<MintAccountBalancesQueryResult>(\n subgraphUrl,\n query,\n variables,\n );\n\n return selectMintsToCollectWithFromQueryResult(\n result.mintTokenBalances,\n quantityToCollect,\n );\n};\n"],"mappings":"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","names":["import_viem","import_protocol_deployments","PremintConfigVersion","preminterAbi","import_viem","import_viem","httpClient","retries","post","post","retries","get","httpClient","httpClient","import_viem","import_protocol_deployments","httpClient","import_protocol_deployments","import_viem","request"]}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AAEzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AAEzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,uBAAuB,CAAC"}
|