@zoralabs/protocol-sdk 0.5.15 → 0.5.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.turbo/turbo-build.log +6 -6
  2. package/CHANGELOG.md +19 -0
  3. package/dist/anvil.d.ts +4 -4
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/apis/generated/premint-api-types.d.ts +9 -2
  6. package/dist/apis/generated/premint-api-types.d.ts.map +1 -1
  7. package/dist/create/1155-create-helper.d.ts +3 -4
  8. package/dist/create/1155-create-helper.d.ts.map +1 -1
  9. package/dist/index.cjs +495 -371
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +478 -352
  14. package/dist/index.js.map +1 -1
  15. package/dist/mint/mint-client.d.ts +22 -17
  16. package/dist/mint/mint-client.d.ts.map +1 -1
  17. package/dist/mints/mints-contracts.d.ts +688 -3
  18. package/dist/mints/mints-contracts.d.ts.map +1 -1
  19. package/dist/premint/contract-types.d.ts +21 -0
  20. package/dist/premint/contract-types.d.ts.map +1 -1
  21. package/dist/premint/conversions.d.ts +10 -22
  22. package/dist/premint/conversions.d.ts.map +1 -1
  23. package/dist/premint/premint-api-client.d.ts +5 -4
  24. package/dist/premint/premint-api-client.d.ts.map +1 -1
  25. package/dist/premint/premint-client.d.ts +122 -1476
  26. package/dist/premint/premint-client.d.ts.map +1 -1
  27. package/dist/premint/preminter.d.ts +29 -16
  28. package/dist/premint/preminter.d.ts.map +1 -1
  29. package/dist/utils.d.ts +6872 -1
  30. package/dist/utils.d.ts.map +1 -1
  31. package/package.json +2 -2
  32. package/src/apis/generated/premint-api-types.ts +9 -2
  33. package/src/create/1155-create-helper.test.ts +10 -3
  34. package/src/create/1155-create-helper.ts +8 -7
  35. package/src/index.ts +6 -0
  36. package/src/mint/mint-client.ts +31 -30
  37. package/src/mints/mints-contracts.test.ts +2 -2
  38. package/src/premint/contract-types.ts +32 -1
  39. package/src/premint/conversions.ts +20 -8
  40. package/src/premint/premint-api-client.ts +7 -7
  41. package/src/premint/premint-client.test.ts +112 -88
  42. package/src/premint/premint-client.ts +614 -409
  43. package/src/premint/preminter.test.ts +154 -2
  44. package/src/premint/preminter.ts +87 -36
  45. package/src/utils.ts +25 -0
  46. package/test-integration/premint-client.test.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.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/utils.ts","../src/premint/contract-types.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/mints/mints-queries.ts","../src/mints/mints-contracts.ts","../src/mints/mints-eth-unwrapper-and-caller.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\nexport * from \"./mints/mints-contracts\";\n\nexport * from \"./mints/mints-eth-unwrapper-and-caller\";\n","import { createPublicClient, decodeEventLog, http, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport { zoraCreator1155PremintExecutorImplABI } from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isValidSignature,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n makeNewPremint,\n supportsPremintVersion,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenConfigForVersion,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigForVersion,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\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\";\nimport { makeSimulateContractParamaters } from \"src/utils\";\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: T;\n tokenCreationConfig: Partial<TokenConfigForVersion<T>> & { tokenURI: string };\n creatorAccount: Address;\n}): TokenConfigForVersion<T> => {\n if (premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in SDK\");\n }\n\n const fixedPriceMinter =\n (\n tokenCreationConfig as\n | Partial<TokenCreationConfigV1>\n | Partial<TokenCreationConfigV2>\n ).fixedPriceMinter || getDefaultFixedPriceMinterAddress(chainId);\n\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return {\n fixedPriceMinter,\n ...defaultTokenConfigV1MintArguments(),\n royaltyRecipient: creatorAccount,\n ...(tokenCreationConfig as Partial<TokenCreationConfigV1>),\n } as TokenCreationConfigV1;\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 = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\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.V2,\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 // @ts-ignore\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 }) {\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 if (premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\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: PremintMintArguments = {\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 makeSimulateContractParamaters({\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 });\n } else if (premintConfigVersion === PremintConfigVersion.V2) {\n return makeSimulateContractParamaters({\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 });\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 premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport {\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 TokenCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { MintCosts } from \"src/mint/mint-client\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\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 if (collection.additionalAdmins.length > 0)\n throw new Error(\"additionalAdmins not supported yet.\");\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: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n signer,\n collection.contractAdmin,\n collectionAddress,\n collection.additionalAdmins,\n ],\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 return await recoverTypedDataAddress({\n ...premintTypedDataDefinition(rest),\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 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","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\nexport const NFT_SALE_QUERY = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n}\n\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n contract {\n mintFeePerQuantity\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n}\n`;\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\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 [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"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 [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 [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"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 [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"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 { Address } from \"viem\";\nimport {\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 { NFT_SALE_QUERY } from \"src/constants\";\n\nexport type SaleType = \"fixedPrice\" | \"erc20\";\n\ntype FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\ntype ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {\n currency: Address;\n};\n\ntype SalesStrategyResult =\n | {\n type: \"FIXED_PRICE\";\n fixedPrice: FixedPriceSaleStrategyResult;\n }\n | {\n type: \"ERC_20_MINTER\";\n erc20Minter: ERC20SaleStrategyResult;\n };\n\ntype TokenQueryResult = {\n tokenId?: string;\n salesStrategies?: SalesStrategyResult[];\n contract: {\n mintFeePerQuantity: \"string\";\n salesStrategies: SalesStrategyResult[];\n };\n};\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n address: Address;\n pricePerToken: bigint;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: bigint;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\">;\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> & {\n currency: Address;\n};\n\ntype SaleStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;\n\nexport type SalesConfigAndTokenInfo = {\n salesConfig: SaleStrategies;\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 saleType,\n }: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n saleType?: SaleType;\n }): Promise<SalesConfigAndTokenInfo> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: NFT_SALE_QUERY,\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 as TokenQueryResult;\n\n if (!token) {\n throw new Error(\"Cannot find a token to mint\");\n }\n\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const saleStrategies = allStrategies.sort((a, b) =>\n BigInt(\n a.type === \"ERC_20_MINTER\"\n ? a.erc20Minter.saleEnd\n : a.fixedPrice.saleEnd,\n ) >\n BigInt(\n b.type === \"FIXED_PRICE\"\n ? b.fixedPrice.saleEnd\n : b.erc20Minter.saleEnd,\n )\n ? 1\n : -1,\n );\n\n let targetStrategy: SalesStrategyResult | undefined;\n\n if (!saleType) {\n targetStrategy = saleStrategies[0];\n if (!targetStrategy) {\n throw new Error(\"Cannot find sale strategy\");\n }\n } else {\n const mappedSaleType =\n saleType === \"erc20\" ? \"ERC_20_MINTER\" : \"FIXED_PRICE\";\n targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,\n );\n if (!targetStrategy) {\n throw new Error(`Cannot find sale strategy for ${mappedSaleType}`);\n }\n }\n\n if (targetStrategy.type === \"FIXED_PRICE\") {\n return {\n salesConfig: {\n saleType: \"fixedPrice\",\n ...targetStrategy.fixedPrice,\n maxTokensPerAddress: BigInt(\n targetStrategy.fixedPrice.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),\n },\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n }\n if (targetStrategy.type === \"ERC_20_MINTER\") {\n return {\n salesConfig: {\n saleType: \"erc20\",\n ...targetStrategy.erc20Minter,\n maxTokensPerAddress: BigInt(\n targetStrategy.erc20Minter.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),\n },\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n }\n\n throw new Error(\"Invalid saleType\");\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 \"@zoralabs/protocol-deployments\";\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 additionalAdmins: [],\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 \"@zoralabs/protocol-deployments\";\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 Abi,\n Account,\n Address,\n Chain,\n ContractFunctionArgs,\n ContractFunctionName,\n SimulateContractParameters,\n} from \"viem\";\n\nexport const makeSimulateContractParamaters = <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, \"nonpayable\" | \"payable\">,\n args extends ContractFunctionArgs<\n abi,\n \"nonpayable\" | \"payable\",\n functionName\n >,\n chainOverride extends Chain | undefined,\n accountOverride extends Account | Address | undefined = undefined,\n>(\n args: SimulateContractParameters<\n abi,\n functionName,\n args,\n Chain,\n chainOverride,\n accountOverride\n >,\n) => args;\n","import { PremintConfigVersion as PremintConfigVersionOrig } from \"@zoralabs/protocol-deployments\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n http,\n Account,\n SimulateContractParameters,\n} from \"viem\";\nimport {\n erc20MinterABI,\n erc20MinterAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { zora721Abi } from \"src/constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { makeSimulateContractParamaters } from \"src/utils\";\nimport {\n MintAPIClient,\n SalesConfigAndTokenInfo,\n SaleType,\n} from \"./mint-api-client\";\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 saleType?: SaleType;\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 | Account;\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n mintArguments: MintArguments;\n }) {\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 mintArguments,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address | Account;\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<\n SimulateContractParameters<any, any, any, any, any, Account | Address>\n> {\n const salesConfigAndTokenInfo = await apiClient.getSalesConfigAndTokenInfo({\n tokenId,\n tokenAddress,\n saleType: mintArguments.saleType,\n });\n\n if (tokenId === undefined) {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n mintArguments,\n ...rest,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n tokenId,\n mintArguments,\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 | Account;\n mintArguments: MintArguments;\n}) {\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n }).totalCost;\n\n return makeSimulateContractParamaters({\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 });\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.salesConfig.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 | Account;\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 switch (salesConfigAndTokenInfo.salesConfig.saleType) {\n case \"fixedPrice\":\n const fixedPriceArgs = mintArguments;\n\n return makeSimulateContractParamaters({\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.salesConfig.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999999999]) as Address,\n BigInt(tokenId),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n fixedPriceArgs.mintToAddress,\n fixedPriceArgs.mintComment || \"\",\n ]),\n fixedPriceArgs.mintReferral || zeroAddress,\n ],\n });\n\n case \"erc20\":\n const erc20Args = mintArguments;\n\n return makeSimulateContractParamaters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: (salesConfigAndTokenInfo?.salesConfig.address ||\n erc20MinterAddress[999999999]) as Address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintArguments.mintToAddress,\n mintQuantity,\n tokenAddress,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken,\n salesConfigAndTokenInfo.salesConfig.currency,\n erc20Args.mintReferral || zeroAddress,\n erc20Args.mintComment || \"\",\n ],\n });\n\n default:\n throw new MintError(\"Unsupported sale type\");\n }\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\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\";\nimport { makeSimulateContractParamaters } from \"src/utils\";\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 any,\n any,\n any,\n any,\n any,\n Account | Address\n >;\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 createReferral,\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 createReferral?: Address;\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 createReferral,\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 = makeSimulateContractParamaters({\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 = makeSimulateContractParamaters({\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 { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(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 array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeSimulateContractParamaters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\n\nconst addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeSimulateContractParamaters({\n abi: zoraMintsManagerImplConfig.abi,\n address: zoraMintsManagerImplConfig.address[chainId],\n functionName: \"mintWithEth\",\n args: [quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeSimulateContractParamaters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeSimulateContractParamaters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n iUnwrapAndForwardActionABI,\n mintsEthUnwrapperAndCallerAddress,\n zoraMints1155Config,\n} from \"@zoralabs/protocol-deployments\";\nimport { Account, Address, Hex, encodeFunctionData } from \"viem\";\nimport { makePermitTransferBatchAndTypeData } from \"./mints-contracts\";\n\ntype CallWithEthParams = {\n address: Address;\n call: Hex;\n value: bigint;\n};\n\n/**\n * Build safeTransferData for the eth unwrapper and caller to call another\n * contract with eth unwrapped from MINTs.\n * @param addressToCall - the address of the contract to call\n * @param functionToCall - the function to call on the contract\n * @param valueToSend - the value to send to the contract\n */\nexport const makeCallWithEthSafeTransferData = ({\n address: addressToCall,\n call: functionToCall,\n value: valueToSend,\n}: CallWithEthParams) =>\n encodeFunctionData({\n abi: iUnwrapAndForwardActionABI,\n functionName: \"callWithEth\",\n args: [addressToCall, functionToCall, valueToSend],\n });\n\n/**\n * Makes a permit and corresponding typed data definition for unwrapping the eth value\n * of mints and forwarding it to another contract with a call. Any eth that is not forwarded\n * is refunded to the owner of the MINTs.\n * @param chainId - the id of the chain that the mints are on.\n * @param tokenIds - the token ids of the MINTs to unwrap\n * @param quantities - the quantities of each token id of the MINTs to unwrap\n * @param from - the address that owns the MINTs - this must be the address to sign the permit.\n * @param addressToCall - the address of the contract to call with the unwrapped eth.\n * @param callWithEth - the target contract, function, and value to call with the unwrapped eth. Any eth not forwarded is refunded to the owner of the MINTs.\n * @param safeTransferData - the safeTransferData to use for the call. If not provided, it will be generated from callWithEth.\n * @returns a permit and corresponding typed data definition to sign.\n */\nexport const unwrapAndForwardEthPermitAndTypedDataDefinition = ({\n chainId,\n tokenIds,\n quantities,\n from,\n callWithEth,\n safeTransferData,\n deadline,\n nonce,\n}: {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n // mints will be transferred from this address; must match the callers address\n from: Address | Account;\n deadline: bigint;\n nonce: bigint;\n} & (\n | {\n callWithEth: CallWithEthParams;\n safeTransferData?: undefined;\n }\n | {\n callWithEth?: undefined;\n safeTransferData: Hex;\n }\n)) =>\n makePermitTransferBatchAndTypeData({\n mintsOwner: from,\n chainId,\n deadline,\n tokenIds,\n quantities,\n safeTransferData:\n safeTransferData || makeCallWithEthSafeTransferData(callWithEth),\n to: mintsEthUnwrapperAndCallerAddress[chainId],\n nonce,\n });\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,eAAsE;AAUtE,IAAAC,+BAAsD;;;ACTtD,kCAOO;AACP,kBAWO;AAaA,IAAM,4BAA4B,MACvC,sEAA0C,GAAG;AAO/C,eAAsB,4BAA4B;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,WAAW,iBAAiB,SAAS;AACvC,UAAM,IAAI,MAAM,qCAAqC;AAEvD,SAAO,MAAM,aAAa,aAAa;AAAA,IACrC,KAAK,4BAAAC;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,qBAAqD;AAAA,EACzE;AAAA,EACA,GAAG;AACL,GAImD;AACjD,SAAO,UAAM,qCAAwB;AAAA,IACnC,OAAG,wDAA2B,IAAI;AAAA,IAClC;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,wBACpB,QACA;AACA,MAAI;AACF,WAAO,MAAM,qBAAqB,MAAM;AAAA,EAC1C,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAaA,eAAsB,iBAAiD;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAKkE;AAChE,QAAM,gBAAgB,MAAM,4BAA4B;AAAA,IACtD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,mBAAmB,MAAM,wBAAwB;AAAA,IACrD,GAAG;AAAA,IACH;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,4BAAgB;AACnB,WAAO;AAAA,MACL,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,4BAA4B;AAAA,IACrD,QAAQ;AAAA,IACR;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAQO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA,iBAAiB;AACnB,GAGoB;AAClB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,UAAU,cAAc,YAAY;AAAA,MACpC,WAAW,cAAc,YAAY;AAAA,MACrC,qBAAqB,cAAc,YAAY;AAAA,MAC/C,eAAe,cAAc,YAAY;AAAA,MACzC,WAAW,cAAc,YAAY;AAAA,MACrC,cAAc,cAAc,YAAY;AAAA,MACxC,iBAAiB,cAAc,YAAY;AAAA,MAC3C,YAAY,cAAc,YAAY;AAAA,MACtC,kBAAkB,cAAc,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;AAkBO,IAAM,uCAAuC,OAAO;AAAA,EACzD,oBAAoB,EAAE,SAAS,YAAY,YAAY,UAAU;AAAA,EACjE;AAAA,EACA;AACF,MAIM;AAEJ,QAAM,mBAAe,wBAAW;AAAA,IAC9B,QAAQ;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,QAC/B,EAAE,MAAM,WAAW,MAAM,SAAS;AAAA,QAClC;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,QAAe,CAAC,UAAU,cAAc,UAAW;AAEzD,QAAM,sBAAkB,2BAAU,oBAAO,KAAK,CAAC;AAE/C,SAAO,UAAM,4BAAe;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACH;AAEO,IAAM,2BAA2B,OAAO;AAAA,EAC7C;AAAA,EACA;AACF,MAGkC;AAChC,SAAO,MAAM,aAAa,aAAa;AAAA,IACrC,KAAK,4BAAAA;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM,CAAC,aAAa;AAAA,EACtB,CAAC;AACH;AAIO,IAAM,yBAAyB,OAAO;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,MAIwB;AACtB,UACE,MAAM,yBAAyB,EAAE,eAAe,aAAa,CAAC,GAC9D,SAAS,OAAO;AACpB;AAEA,eAAsB,4BAA4B;AAAA,EAChD;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,aAAa,aAAa;AAAA,IAC/B,SAAS,0BAA0B;AAAA,IACnC,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,UAAU;AAAA,EACnB,CAAC;AACH;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAG2D;AACzD,QAAM,qBAA0C;AAAA,IAC9C,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,SAAS;AAAA,IACb,SAAS;AAAA,IACT;AAAA,IACA,SAAS,UAAU;AAAA,IACnB,aAAa;AAAA,EACf;AAEA,SAAO;AACT;AAEO,SAAS,eAA8C;AAAA,EAC5D;AAAA,EACA;AACF,GAG2C;AACzC,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AACF,GAGG;AAGD,MAAI;AACF,WAAO,MAAM,aAAa,aAAa;AAAA,MACrC,SAAS,0BAA0B;AAAA,MACnC,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,aAAa;AAAA,IACtB,CAAC;AAAA,EACH,SAAS,GAAG;AACV,YAAQ,MAAM,CAAC;AAEf,eAAO,wBAAW,UAAU;AAAA,EAC9B;AACF;AAEA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKuB;AACrB,QAAM,UAAU,MAAM,kBAAkB,EAAE,eAAe,aAAa,CAAC;AAEvE,SAAO;AAAA,IACL,SAAS,UAAU;AAAA,IACnB,mBAAmB,aAAa;AAAA,IAChC,YAAY,UAAU,cAAc;AAAA,EACtC;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC,eAAe;AAAA,EACf,mBAAmB;AACrB,GAGc;AACZ,SAAO,CAAC,cAAc,gBAAgB;AACxC;AAEO,SAAS,kCAAkC,SAA0B;AAC1E,SAAO,qEACL,OACF;AACF;;;ADnWA,IAAAC,+BAWO;;;AElCA,IAAM,mBAAN,cAAwC,MAAM;AAAA,EAGnD,YAAY,SAAiB,QAAgB,MAAW;AACtD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AACF;AAEA,eAAe,KAAK,SAAiB;AACnC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,OAAO;AAAA,EAC7B,CAAC;AACH;AAUO,IAAM,MAAM,OAAU,QAAgB;AAC3C,QAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC;AACnD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,4BAA4B,SAAS,MAAM;AAAA,MAC3C,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAWO,IAAM,OAAO,OAAU,KAAa,SAAc;AACvD,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AACD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,MAAM;AAAA,MAChC,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAEO,IAAM,UAAU,OACrB,OACA,WAAmB,GACnB,QAAgB,GAChB,kBAA0B,QACX;AACf,MAAI;AACF,WAAO,MAAM,MAAM;AAAA,EACrB,SAAS,KAAU;AACjB,QAAI,eAAe,kBAAkB;AACnC,UAAI,IAAI,UAAU,KAAK;AACrB,YAAI,SAAS,UAAU;AACrB,gBAAM,KAAK,QAAQ,eAAe;AAClC,iBAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,CAAC;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;AAQO,IAAM,aAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF;;;ACxGA,IAAAC,eAAyB;AAElB,IAAM,gBAAgB;AACtB,IAAM,yBAAyB,OAAO,sBAAsB;AAGnE,IAAM,uBACJ;AAEK,SAAS,YAAY,MAAc,SAAyB;AACjE,SAAO,GAAG,oBAAoB,IAAI,IAAI,IAAI,OAAO;AACnD;AAEO,IAAM,iBAAa,uBAAS;AAAA,EACjC;AAAA,EACA;AACF,CAAU;AAEH,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AClB9B,oBAUO;AAEP,IAAAC,eAA2B;AAapB,IAAM,uBAAmB,yBAAW,UAAU;AAE9C,IAAM,uBAAsD;AAAA,EACjE,CAAC,sBAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,sBAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,sBAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,sBAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,mBAAK,EAAE,GAAG;AAAA,IACT,SAAS,mBAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,0BAAY,EAAE,GAAG;AAAA,IAChB,SAAS,0BAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,uBAAS,EAAE,GAAG;AAAA,IACb,SAAS,uBAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,wBAAwB,QAAQ;AAAA,EAC3D;AAAA,EACA,CAAC,uBAAS,EAAE,GAAG;AAAA,IACb,SAAS,uBAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,mBAAK,EAAE,GAAG;AAAA,IACT,SAAS,mBAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,0BAAY,EAAE,GAAG;AAAA,IAChB,SAAS,0BAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,sBAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,sBAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AACF;;;AC3BO,IAAM,8BAA8B,CAAC,YAAmC;AAC7E,MAAI,CAAC,qBAAqB,OAAO,GAAG;AAClC,UAAM,IAAI,MAAM,YAAY,OAAO,0BAA0B;AAAA,EAC/D;AACA,SAAO,qBAAqB,OAAO;AACrC;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAIzB,YAAY,SAAiBC,aAA0B;AACrD,SAAK,aAAaA,eAAc;AAChC,SAAK,gBAAgB,4BAA4B,OAAO;AAAA,EAC1D;AAAA,EAEA,MAAM,2BAA2B;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIqC;AACnC,UAAM,EAAE,SAAAC,UAAS,MAAAC,MAAK,IAAI,KAAK;AAC/B,WAAOD,SAAQ,YAAY;AACzB,YAAM,WAAW,MAAMC,MAAU,KAAK,cAAc,aAAa;AAAA,QAC/D,OAAO;AAAA,QACP,WAAW;AAAA,UACT,IACE,YAAY;AAAA;AAAA,YAER,GAAG,aAAa,YAAY,CAAC,IAAI,OAAO;AAAA,cACxC,GAAG,aAAa,YAAY,CAAC;AAAA,QACrC;AAAA,MACF,CAAC;AAED,YAAM,QAAQ,SAAS,MAAM;AAE7B,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,YAAM,iBACH,OAAO,YAAY,cAChB,MAAM,kBACN,MAAM,SAAS,oBAAoB,CAAC;AAE1C,YAAM,iBAAiB,cAAc;AAAA,QAAK,CAAC,GAAG,MAC5C;AAAA,UACE,EAAE,SAAS,kBACP,EAAE,YAAY,UACd,EAAE,WAAW;AAAA,QACnB,IACA;AAAA,UACE,EAAE,SAAS,gBACP,EAAE,WAAW,UACb,EAAE,YAAY;AAAA,QACpB,IACI,IACA;AAAA,MACN;AAEA,UAAI;AAEJ,UAAI,CAAC,UAAU;AACb,yBAAiB,eAAe,CAAC;AACjC,YAAI,CAAC,gBAAgB;AACnB,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AAAA,MACF,OAAO;AACL,cAAM,iBACJ,aAAa,UAAU,kBAAkB;AAC3C,yBAAiB,eAAe;AAAA,UAC9B,CAAC,aAAkC,SAAS,SAAS;AAAA,QACvD;AACA,YAAI,CAAC,gBAAgB;AACnB,gBAAM,IAAI,MAAM,iCAAiC,cAAc,EAAE;AAAA,QACnE;AAAA,MACF;AAEA,UAAI,eAAe,SAAS,eAAe;AACzC,eAAO;AAAA,UACL,aAAa;AAAA,YACX,UAAU;AAAA,YACV,GAAG,eAAe;AAAA,YAClB,qBAAqB;AAAA,cACnB,eAAe,WAAW;AAAA,YAC5B;AAAA,YACA,eAAe,OAAO,eAAe,WAAW,aAAa;AAAA,UAC/D;AAAA,UACA,oBAAoB,OAAO,MAAM,SAAS,kBAAkB;AAAA,QAC9D;AAAA,MACF;AACA,UAAI,eAAe,SAAS,iBAAiB;AAC3C,eAAO;AAAA,UACL,aAAa;AAAA,YACX,UAAU;AAAA,YACV,GAAG,eAAe;AAAA,YAClB,qBAAqB;AAAA,cACnB,eAAe,YAAY;AAAA,YAC7B;AAAA,YACA,eAAe,OAAO,eAAe,YAAY,aAAa;AAAA,UAChE;AAAA,UACA,oBAAoB,OAAO,MAAM,SAAS,kBAAkB;AAAA,QAC9D;AAAA,MACF;AAEA,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC,CAAC;AAAA,EACH;AACF;;;AC7KA,IAAAC,+BAOO;AAGA,IAAM,2BAA2B,CACtC,gBAC4B;AAAA,EAC5B,GAAG;AAAA,EACH,eAAe,WAAW;AAAA,EAC1B,kBAAkB,CAAC;AACrB;AAQO,IAAM,wBAAwB,CACnC,YAC4B;AAC5B,MACE,QAAQ,mBAAmB,kDAAqB,MAChD,CAAC,QAAQ,gBACT;AACA,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,kDAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,kBAAkB,YAAY;AAAA,UAC9B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,kDAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,iBAAiB,YAAY;AAAA,UAC7B,gBAAgB,YAAY;AAAA,UAC5B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,+BAA+B,CAC1C,cACI;AAAA,EACJ,GAAG,sBAAsB,SAAS,OAAO;AAAA,EACzC,YAAY,yBAAyB,SAAS,UAAU;AAAA,EACxD,WAAW,SAAS;AACtB;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEO,IAAM,sBAAsB,CAAiC;AAAA,EAClE;AAAA,EACA;AACF,MAA2E;AACzE,MAAI,yBAAyB,kDAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,MAAI,yBAAyB,kDAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,QAAM,IAAI,MAAM,kCAAkC,oBAAoB,EAAE;AAC1E;AAaO,IAAM,2BAA2B,CAAiC;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAIkE;AAAA,EAChE,SAAS,oBAAoB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA,YAAY,qBAAqB,OAAO,EAAG;AAC7C;;;ACzHA,IAAM,gBAAgB,OAAO;AAAA,EAC3B,YAAY,EAAE,MAAAC,OAAM,SAAAC,SAAQ,IAAI;AAAA,EAChC,GAAG;AACL,MAGEA;AAAA,EAAQ,MACND,MAA+B,GAAG,aAAa,qBAAqB,IAAI;AAC1E;AAEF,IAAM,aAAa,OAAO;AAAA,EACxB;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAC,UAAS,KAAAC,KAAI,IAAI;AACjC,MAGED;AAAA,EAAQ,MACNC;AAAA,IACE,GAAG,aAAa,qBAAqB,UAAU,IAAI,kBAAkB;AAAA,EACvE;AACF;AAEF,IAAM,eAAe,OAAO;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAD,UAAS,KAAAC,KAAI,IAAI;AACjC,MAMK;AACH,QAAM,SAAS,MAAMD;AAAA,IAAQ,MAC3BC;AAAA,MACE,GAAG,aAAa,qBAAqB,UAAU,IAAI,kBAAkB,IAAI,GAAG;AAAA,IAC9E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,mBAAN,MAAuB;AAAA,EAIrB,YAAY,SAAiBC,aAA0B;AAIvD,yBAAgB,OAAuC;AAAA,MACrD;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAGuE;AACrE,YAAM,OAAO,yBAAyB;AAAA,QACpC;AAAA,QACA,GAAG;AAAA,QACH,SAAS,KAAK,cAAc;AAAA,QAC5B;AAAA,MACF,CAAC;AACD,aAAO,cAAc;AAAA,QACnB,GAAG;AAAA,QACH,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,sBAAa,OAAO,uBAEhB,MAAM,WAAW;AAAA,MACf,oBAAoB,kBAAkB,YAAY;AAAA,MAClD,YAAY,KAAK,cAAc;AAAA,MAC/B,YAAY,KAAK;AAAA,IACnB,CAAC,GACD;AAEJ,wBAAe,OAAO;AAAA,MACpB;AAAA,MACA;AAAA,IACF,MAQK;AACH,YAAM,WAAW,MAAM,aAAa;AAAA,QAClC,oBAAoB,kBAAkB,YAAY;AAAA,QAClD;AAAA,QACA,YAAY,KAAK,cAAc;AAAA,QAC/B,YAAY,KAAK;AAAA,MACnB,CAAC;AAED,aAAO,6BAA6B,QAAQ;AAAA,IAC9C;AApDE,SAAK,aAAaA,eAAc;AAChC,SAAK,gBAAgB,4BAA4B,OAAO;AAAA,EAC1D;AAmDF;;;ACpIO,IAAM,iCAAiC,CAW5C,SAQG;;;AR+BE,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc,OAAO,KAAK,KAAK,KAAK,CAAC;AAAA;AAAA,EACrC,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,YAAY;AAAA;AACd;AAEO,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc,OAAO,KAAK,KAAK,KAAK,CAAC;AAAA;AAAA,EACrC,WAAW;AAAA,EACX,YAAY;AAAA;AACd;AAEA,IAAM,8BAA8B,CAAiC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKgC;AAC9B,MAAI,yBAAyB,kDAAqB,IAAI;AACpD,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,QAAM,mBAEF,oBAGA,oBAAoB,kCAAkC,OAAO;AAEjE,MAAI,yBAAyB,kDAAqB,IAAI;AACpD,WAAO;AAAA,MACL;AAAA,MACA,GAAG,kCAAkC;AAAA,MACrC,kBAAkB;AAAA,MAClB,GAAI;AAAA,IACN;AAAA,EACF,WAAW,yBAAyB,kDAAqB,IAAI;AAC3D,WAAO;AAAA,MACL;AAAA,MACA,GAAG,kCAAkC;AAAA,MACrC,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,GAAG;AAAA,IACL;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,kCAAkC,oBAAoB,EAAE;AAAA,EAC1E;AACF;AAQO,SAAS,2BACd,SACgC;AAChC,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,iBAAa,6BAAe;AAAA,QAChC,KAAK;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,WAAW,cAAc,eAAe;AAC1C,eAAO,WAAW;AAAA,MACpB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAKA,IAAM,gBAAN,MAAoB;AAAA,EAKlB,YACE,OACA,cACAC,aACA;AACA,SAAK,QAAQ;AACb,SAAK,YAAY,IAAI,iBAAiB,MAAM,IAAIA,WAAU;AAC1D,SAAK,eACH,oBAAgB,iCAAmB,EAAE,OAAO,eAAW,mBAAK,EAAE,CAAC;AAAA,EACnE;AAAA,EAEA,0BAA0B,SAA6B;AACrD,UAAM,eAAe,2BAA2B,OAAO;AACvD,WAAO;AAAA,MACL;AAAA,MACA,MAAM,KAAK,SAAS;AAAA,QAClB,SAAS,cAAc;AAAA,QACvB,SAAS,cAAc;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMmC;AACjC,UAAM;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,MAAM,KAAK,UAAU,aAAa;AAAA,MACpC,mBAAmB;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,qBAAqB;AAAA,MAC1C,KAAK,cAAc;AAAA,MACnB,SAAS,cAAc;AAAA,MACvB,aAAa,cAAc;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,WAAO,MAAM,KAAK,qBAAqB;AAAA,MACrC;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKG;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,IAAI,MAAM,KAAK,UAAU,aAAa;AAAA,MACpC,mBAAmB;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB;AAAA,MACrB,GAAG;AAAA,MACH,SAAS,cAAc,UAAU;AAAA,MACjC,SAAS;AAAA,IACX;AAEA,WAAO,MAAM,KAAK,qBAAqB;AAAA,MACrC;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,qBACZ,QACgC;AAChC,UAAM,EAAE,kBAAkB,IAAI,MAAM,qBAAqB;AAAA,MACvD,GAAG;AAAA,MACH,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,IACrB,CAAC;AAED,UAAM,MAAM,OAAO,cAAc;AAEjC,WAAO;AAAA,MACL,MAAM,KAAK,SAAS,EAAE,SAAS,mBAAmB,IAAI,CAAC;AAAA,MACvD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,cAEJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,EACnB,GAUG;AACD,UAAM,qBAAqB,MAAM,4BAA4B;AAAA,MAC3D,cAAc,KAAK;AAAA,MACnB;AAAA,IACF,CAAC;AAED,QAAI,WAAW;AAEf,QAAI,OAAO,aAAa,UAAU;AAChC,iBAAW,MAAM,KAAK,UAAU,WAAW,kBAAkB;AAAA,IAC/D;AAEA,UAAM,gBAAgB,wBAAwB,kDAAqB;AAEnE,QACE,CAAE,MAAM,uBAAuB;AAAA,MAC7B,SAAS;AAAA,MACT,cAAc,KAAK;AAAA,MACnB,eAAe;AAAA,IACjB,CAAC,GACD;AACA,YAAM,IAAI;AAAA,QACR,mBAAmB,aAAa;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,gBAAgB,eAAe;AAAA,MACnC,aAAa,4BAA4B;AAAA;AAAA,QAEvC,sBAAsB;AAAA,QACtB;AAAA,QACA,gBACE,OAAO,mBAAmB,WACtB,iBACA,eAAe;AAAA,QACrB,SAAS,KAAK,MAAM;AAAA,MACtB,CAAC;AAAA,MACD,KAAK;AAAA,IACP,CAAC;AAED,WAAO,MAAM,KAAK,qBAAqB;AAAA,MACrC,mBAAmB;AAAA,MACnB;AAAA,MACA,sBAAsB;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,MAAM,KAAK,UAAU,aAAa;AAAA,MACvC,mBAAmB;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,qBAAqB,YAAoC;AAC7D,WAAO,MAAM,4BAA4B;AAAA,MACvC;AAAA,MACA,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiD;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQG;AACD,UAAM,EAAE,cAAc,iBAAiB,IAAI,MAAM,iBAAiB;AAAA,MAChE,SAAS,KAAK,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,MACA,sBAAsB,wBAAwB,kDAAqB;AAAA,IACrE,CAAC;AAED,WAAO,EAAE,SAAS,cAAc,iBAAiB,iBAAiB;AAAA,EACpE;AAAA,EAEU,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,WAAO,SAAS;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIuB;AACrB,WAAO,MAAM,oBAAoB;AAAA,MAC/B,cAAc,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAWG;AACD,QAAI,iBAAiB,eAAe,iBAAiB,GAAG;AACtD,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAEA,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,UAAM,EAAE,eAAe,sBAAsB,YAAY,UAAU,IACjE,MAAM,KAAK,oBAAoB;AAAA,MAC7B,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAEH,UAAM,eAAe,OAAO,eAAe,kBAAkB,CAAC;AAE9D,QAAI,yBAAyB,kDAAqB,IAAI;AACpD,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAEA,UAAM,SACJ,MAAM,oBAAoB;AAAA,MACxB;AAAA,MACA,gBAAgB;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,YAAY,cAAc,YAAY;AAAA,IACxC,CAAC,GACD;AAEF,UAAM,wBAA8C;AAAA,MAClD,aAAa,eAAe,eAAe;AAAA,MAC3C,eACE,eAAe,kBACd,OAAO,kBAAkB,WACtB,gBACA,cAAc;AAAA,MACpB,uBAAuB,yBAAyB;AAAA,QAC9C,cAAc,eAAe;AAAA,QAC7B,kBAAkB,eAAe;AAAA,MACnC,CAAC;AAAA,IACH;AAEA,QAAI,yBAAyB,kDAAqB,IAAI;AACpD,aAAO,+BAA+B;AAAA,QACpC,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd;AAAA,QACA,SAAS,0BAA0B;AAAA,QACnC,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,WAAW,yBAAyB,kDAAqB,IAAI;AAC3D,aAAO,+BAA+B;AAAA,QACpC,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd;AAAA,QACA,SAAS,0BAA0B;AAAA,QACnC,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,IAAI,MAAM,kCAAkC,oBAAoB,EAAE;AAAA,EAC1E;AACF;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA,YAAAA;AAAA,EACA;AACF,GAIG;AACD,SAAO,IAAI,cAAc,OAAO,cAAcA,WAAU;AAC1D;AAEA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmB;AACjB,OAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS;AAClC,WAAO,EAAE,UAAU,MAAM,aAAa,MAAM,YAAY,KAAK;AAAA,EAC/D;AAEA,QAAM,gBAAgB,MAAM,WAAW,GAAG,KAAK;AAE/C,QAAM,UAAU,4BAA4B,MAAM,EAAE;AAEpD,SAAO;AAAA,IACL,UAAU,UACN,WAAW,MAAM,gBAAgB,QAAQ,GAAG,UAAU,OAAO,aAAa,OAAO,KACjF;AAAA,IACJ,aAAa,WACX,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,IAC5B,YAAY,WACV,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,EAC9B;AACF;AAUA,eAAe,qBAAqD;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAIG;AACD,MAAI,CAAC,SAAS;AACZ,cAAU,aAAa;AAAA,EACzB;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,QAAM,YAAY,MAAM,aAAa,cAAc;AAAA,IACjD;AAAA,IACA,OAAG,yDAA2B;AAAA,MAC5B;AAAA,MACA,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,gBAAgB;AAClB,UAAM,eAAe,MAAM,4BAA4B;AAAA,MACrD;AAAA,MACA;AAAA,MACA,QAAQ,OAAO,YAAY,WAAW,UAAU,QAAQ;AAAA,MACxD,mBAAmB,MAAM,4BAA4B;AAAA,QACnD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,UAAU,cAAc;AAAA,IAC5C;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,SAAO,EAAE,SAAS,kBAAkB;AACtC;;;ASvsBA,IAAAC,+BAAiE;AAE1D,IAAKC,yBAAL,CAAKA,0BAAL;AACL,EAAAA,4CAAA,QAAK,6BAAAC,qBAAyB,MAA9B;AACA,EAAAD,4CAAA,QAAK,6BAAAC,qBAAyB,MAA9B;AACA,EAAAD,4CAAA,QAAK,6BAAAC,qBAAyB,MAA9B;AAHU,SAAAD;AAAA,4BAAA;;;ACFZ,IAAAE,eAWO;AACP,IAAAC,+BAKO;AAWP,IAAM,YAAN,cAAwB,MAAM;AAAC;AAC/B,IAAM,oBAAN,cAAgC,MAAM;AAAC;AAEhC,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AACF;AAUA,IAAM,aAAN,MAAiB;AAAA,EAIf,YACE,OACA,cACAC,aACA;AACA,SAAK,YAAY,IAAI,cAAc,MAAM,IAAIA,WAAU;AACvD,SAAK,eACH,oBAAgB,iCAAmB,EAAE,OAAO,eAAW,mBAAK,EAAE,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,2BAA2B;AAAA,IAC/B,GAAG;AAAA,EACL,GAKG;AACD,WAAO,2BAA2B;AAAA,MAChC,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AASO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,YAAAA;AACF,GAIG;AACD,SAAO,IAAI,WAAW,OAAO,cAAcA,WAAU;AACvD;AAIA,eAAe,2BAA2B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GASE;AACA,QAAM,0BAA0B,MAAM,UAAU,2BAA2B;AAAA,IACzE;AAAA,IACA;AAAA,IACA,UAAU,cAAc;AAAA,EAC1B,CAAC;AAED,MAAI,YAAY,QAAW;AACzB,WAAO,8BAA8B;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,SAAO,+BAA+B;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAEA,eAAe,8BAA8B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,YAAY,aAAa;AAAA,IAC7B;AAAA,IACA,gBAAgB,OAAO,cAAc,cAAc;AAAA,EACrD,CAAC,EAAE;AAEH,SAAO,+BAA+B;AAAA,IACpC,KAAK;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,cAAc;AAAA,MACd,OAAO,cAAc,cAAc;AAAA,MACnC,cAAc,eAAe;AAAA,MAC7B,cAAc,gBAAgB;AAAA,IAChC;AAAA,EACF,CAAC;AACH;AAQO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGc;AACZ,QAAM,mBACJ,wBAAwB,qBAAqB;AAC/C,QAAM,oBACJ,OAAO,wBAAwB,YAAY,aAAa,IAAI;AAE9D,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,WAAW,mBAAmB;AAAA,EAChC;AACF;AAEA,eAAe,+BAA+B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,eAAe,OAAO,cAAc,cAAc;AAExD,QAAM,YAAY,aAAa;AAAA,IAC7B;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC,EAAE;AAEH,UAAQ,wBAAwB,YAAY,UAAU;AAAA,IACpD,KAAK;AACH,YAAM,iBAAiB;AAEvB,aAAO,+BAA+B;AAAA,QACpC,KAAK;AAAA,QACL,cAAc;AAAA,QACd,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA;AAAA,QAET,MAAM;AAAA,UACH,wBAAwB,YAAY,WACnC,sEAAyC,SAAS;AAAA,UACpD,OAAO,OAAO;AAAA,UACd;AAAA,cACA,sCAAoB,iCAAmB,iBAAiB,GAAG;AAAA,YACzD,eAAe;AAAA,YACf,eAAe,eAAe;AAAA,UAChC,CAAC;AAAA,UACD,eAAe,gBAAgB;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IAEH,KAAK;AACH,YAAM,YAAY;AAElB,aAAO,+BAA+B;AAAA,QACpC,KAAK;AAAA,QACL,cAAc;AAAA,QACd,SAAS;AAAA,QACT,SAAU,yBAAyB,YAAY,WAC7C,gDAAmB,SAAS;AAAA;AAAA,QAE9B,MAAM;AAAA,UACJ,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA,OAAO,OAAO;AAAA,UACd,wBAAwB,YAAY;AAAA,UACpC,wBAAwB,YAAY;AAAA,UACpC,UAAU,gBAAgB;AAAA,UAC1B,UAAU,eAAe;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IAEH;AACE,YAAM,IAAI,UAAU,uBAAuB;AAAA,EAC/C;AACF;;;AC5QA,IAAAC,+BAKO;AASP,IAAAC,eAAgE;AAKhE,IAAM,mBAAmB;AAGzB,IAAM,sBAAsB;AAcrB,IAAM,wBAAwB;AAAA,EACnC,gBAAgB;AAAA;AAAA,EAEhB,eAAe;AAAA;AAAA,EAEf,WAAW;AAAA;AAAA,EAEX,SAAS;AAAA;AAAA,EAET,qBAAqB;AACvB;AAGA,IAAM,wBAAwB;AAevB,SAAS,yBAAyB;AAAA,EACvC;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,MAAI,CAAC,WAAW;AACd,gBAAY;AAAA,EACd;AACA,cAAY,OAAO,SAAS;AAC5B,uBAAqB,OAAO,kBAAkB;AAE9C,QAAM,0BAA0B;AAAA;AAAA,IAE9B,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA,EACL;AAEA,QAAM,eAAe;AAAA,QACnB,iCAAmB;AAAA,MACjB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,cAAc,EAAE;AAAA,IACzB,CAAC;AAAA,IACD,qBACI,iCAAmB;AAAA,MACjB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,kBAAkB,WAAW,cAAc;AAAA,IACpD,CAAC,QACD,iCAAmB;AAAA,MACjB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,kBAAkB,SAAS;AAAA,IACpC,CAAC;AAAA,QACL,iCAAmB;AAAA,MACjB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,IAAI,yBAAyB,qBAAqB;AAAA,IAC3D,CAAC;AAAA,QACD,iCAAmB;AAAA,MACjB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,YACA,iCAAmB;AAAA,UACjB,KAAK;AAAA,UACL,cAAc;AAAA,UACd,MAAM,CAAC,aAAa,uBAAuB;AAAA,QAC7C,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,oBAAoB;AACtB,iBAAa;AAAA,UACX,iCAAmB;AAAA,QACjB,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM,CAAC,SAAS,aAAa,oBAAoB,IAAI;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,iBAAiB;AACnB,iBAAa;AAAA,UACX,iCAAmB;AAAA,QACjB,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,qBAAqB;AAAA,YACrB,YAAY,iBAAiB,cAAc;AAAA,YAC3C,kBAAkB,iBAAiB,oBAAoB;AAAA,UACzD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,8BAA8B,CACzC,YACuB;AACvB,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,iBAAa,6BAAe;AAAA,QAChC,KAAK;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,cAAc,WAAW,cAAc,iBAAiB;AAC1D,eAAO,WAAW,KAAK;AAAA,MACzB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAEA,eAAe,kBACb,cACA,UAEA,SACA;AACA,MAAI;AACJ,MAAI,iBAAiB;AACrB,MAAI,OAAO,aAAa,UAAU;AAChC,sBAAkB,MAAM,aAAa,aAAa;AAAA,MAChD,KAAK;AAAA;AAAA,MAEL,SAAS,+DAAkC,GAAG;AAAA,MAC9C,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS,gBAAgB;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,QAAI;AACF,YAAM,aAAa,aAAa;AAAA,QAC9B,KAAK;AAAA,QACL,SAAS;AAAA,QACT,cAAc;AAAA,MAChB,CAAC;AACD,uBAAiB;AAAA,IACnB,SAAS,GAAQ;AAAA,IAGjB;AACA,WAAO,EAAE,iBAAiB,eAAe;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AACF;AAgBO,SAAS,wBAAwB;AAAA,EACtC;AACF,GAEG;AACD,iBAAe,mBAAmB;AAAA,IAChC;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,IACrB,cAAc,CAAC;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAcsC;AAGpC,UAAM,EAAE,gBAAgB,gBAAgB,IAAI,MAAM;AAAA,MAChD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,QAAI,cAAc;AAElB,QAAI,gBAAgB;AAClB,oBAAc,MAAM,aAAa,aAAa;AAAA,QAC5C,KAAK;AAAA,QACL,cAAc;AAAA,QACd,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAGA,UAAM,0BAA0B,MAAM,aAAa,aAAa;AAAA,MAC9D,KAAK;AAAA,MACL,SAAS,+DAAkC,GAAG;AAAA,MAC9C,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,oBAAoB,yBAAyB;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,2BAA2B;AAC7B,0BAAoB;AAAA,QAClB,GAAG,0BAA0B,EAAE,SAAS,aAAa,gBAAgB,CAAC;AAAA,QACtE,GAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAI,CAAC,mBAAmB,OAAO,aAAa,UAAU;AACpD,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AACA,QAAI,CAAC,kBAAkB,OAAO,aAAa,UAAU;AACnD,YAAM,UAAU,+BAA+B;AAAA,QAC7C,KAAK;AAAA,QACL,cAAc;AAAA,QACd;AAAA,QACA,SAAS,+DAAkC,GAAG;AAAA,QAC9C,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,SAAS;AAAA,UACT;AAAA;AAAA,YAEE,qBAAqB;AAAA,YACrB,YAAY,iBAAiB,cAAc;AAAA,YAC3C,kBAAkB,iBAAiB,oBAAoB;AAAA,UACzD;AAAA,UACA,SAAS,gBAAgB;AAAA,UACzB;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,WAAW,gBAAgB;AACzB,YAAM,UAAU,+BAA+B;AAAA,QAC7C,KAAK;AAAA,QACL,cAAc;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QACT,MAAM,CAAC,iBAAiB;AAAA,MAC1B,CAAC;AACD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,SAAO,EAAE,mBAAmB;AAC9B;;;AC1WO,IAAM,uCAAuC,CAAC,YAAqB;AACxE,QAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYd,SAAO;AAAA,IACL;AAAA,IACA,WAAW,EAAE,QAAQ;AAAA,EACvB;AACF;AAkBO,IAAM,0CAA0C,CACrD,qBACA,sBACG;AACH,QAAM,SAAS,oBAAoB,IAAI,CAAC,MAAM;AAC5C,WAAO;AAAA,MACL,SAAS,OAAO,EAAE,UAAU,EAAE;AAAA,MAC9B,UAAU,OAAO,EAAE,OAAO;AAAA,MAC1B,eAAe,OAAO,EAAE,UAAU,aAAa;AAAA,IACjD;AAAA,EACF,CAAC;AAID,QAAM,SAAS,OAAO,KAAK,CAAC,GAAG,MAAM;AACnC,QAAI,EAAE,gBAAgB,EAAE,eAAe;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,oBAAoB;AACxB,QAAM,WAAqB,CAAC;AAC5B,QAAM,aAAuB,CAAC;AAE9B,SAAO,oBAAoB,GAAG;AAC5B,UAAM,OAAO,OAAO,MAAM;AAC1B,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAEA,UAAM,gBACJ,oBAAoB,KAAK,WAAW,KAAK,WAAW;AACtD,aAAS,KAAK,KAAK,OAAO;AAC1B,eAAW,KAAK,aAAa;AAC7B,yBAAqB;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,cAAc,CACzB,wBACG;AACH,SAAO,oBAAoB,OAAO,CAAC,KAAK,SAAS;AAC/C,WAAO,MAAM,OAAO,KAAK,OAAO;AAAA,EAClC,GAAG,OAAO,CAAC,CAAC;AACd;;;AC7FA,IAAAC,+BAOO;AAQP,IAAAC,eAWO;AAEP,IAAM,0BAA0B,CAAC,YAC/B,OAAO,YAAY,WAAW,UAAU,QAAQ;AAa3C,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOE,+BAA+B;AAAA,EAC7B,KAAK,wDAA2B;AAAA,EAChC,SAAS,wDAA2B,QAAQ,OAAO;AAAA,EACnD,cAAc;AAAA,EACd,MAAM,CAAC,UAAU,aAAa,wBAAwB,OAAO,CAAC;AAAA,EAC9D,OAAO,eAAe;AAAA,EACtB;AACF,CAAC;AAEH,IAAM,mBAAmB,CAAC,YAAsB,iBAA0B;AACxE,MAAI,CAAC,gBAAgB,iBAAiB;AAAI;AAE1C,SAAO,WAAW,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,IAAI;AAClD;AAOO,IAAM,8BAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AACF,OAMM;AAAA,EACJ,KAAK,iDAAoB;AAAA,EACzB,SAAS,iDAAoB,QAAQ,OAAO;AAAA,EAC5C,cAAc;AAAA,EACd,MAAM,CAAC,OAAO;AAChB;AAWO,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,UACE,iCAAmB;AAAA,EACjB,KAAK,wDAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAcI,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,+BAA+B;AAAA,IACpC,KAAK,iDAAoB;AAAA,IACzB,SAAS,iDAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA;AAAA;AAAA,IAGjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AACF,GAEG;AACD,QAAM,UAAU,aAAa,OAAO;AAIpC,MAAI,CAAC,WAAW,CAAC,yDAA4B,OAAO,GAAG;AACrD,UAAM,IAAI,MAAM,YAAY,OAAO,gBAAgB;AAAA,EACrD;AAEA,SAAO,aAAa,aAAa;AAAA,IAC/B,KAAK;AAAA,IACL,SAAS,yDAA4B,OAAO;AAAA,IAC5C,cAAc;AAAA,EAChB,CAAC;AACH;AAcO,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,SAAkC;AAAA,IACtC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,OAAG,wEAA0C;AAAA,MAC3C;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAcO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASG;AACD,QAAM,SAA6B;AAAA,IACjC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,OAAG,mEAAqC;AAAA,MACtC;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAYA,IAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AACnB,UACE,iCAAmB;AAAA,EACjB,KAAK,wDAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAeI,IAAM,yCAAyC,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAUQ;AACN,MAAI;AAEJ,MAAI,SAAS;AACX,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,WAAW,SAAS;AAClB,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,OAAO;AACL,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,SAAO,mCAAmC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,wDAA2B,QAAQ,OAAO;AAAA,EAChD,CAAC;AACH;AAeO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAI4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC,GAAG;AAAA,EACL,CAAC;AAED,SAAO,+BAA+B;AAAA,IACpC,KAAK,iDAAoB;AAAA,IACzB,SAAS,iDAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA,IACjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAyBO,SAAS,sBAAsB,OAAsC;AAC1E,MAAI,MAAM,MAAM,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAM,oBAAoB,MAAM,MAAM,OAAO,CAAC;AAE9C,aAAO,gCAAkB;AAAA,IACvB,KAAK;AAAA,IACL,MAAM;AAAA,EACR,CAAC;AACH;;;AC7cA,IAAAC,+BAIO;AACP,IAAAC,eAA0D;AAgBnD,IAAM,kCAAkC,CAAC;AAAA,EAC9C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AACT,UACE,iCAAmB;AAAA,EACjB,KAAK;AAAA,EACL,cAAc;AAAA,EACd,MAAM,CAAC,eAAe,gBAAgB,WAAW;AACnD,CAAC;AAeI,IAAM,kDAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAkBE,mCAAmC;AAAA,EACjC,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBACE,oBAAoB,gCAAgC,WAAW;AAAA,EACjE,IAAI,+DAAkC,OAAO;AAAA,EAC7C;AACF,CAAC;","names":["PremintConfigVersion","import_viem","import_protocol_deployments","preminterAbi","import_protocol_deployments","import_viem","import_viem","httpClient","retries","post","import_protocol_deployments","post","retries","get","httpClient","httpClient","import_protocol_deployments","PremintConfigVersion","PremintConfigVersionOrig","import_viem","import_protocol_deployments","httpClient","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.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/utils.ts","../src/premint/contract-types.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/mints/mints-queries.ts","../src/mints/mints-contracts.ts","../src/mints/mints-eth-unwrapper-and-caller.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\nexport * from \"./mints/mints-contracts\";\n\nexport * from \"./mints/mints-eth-unwrapper-and-caller\";\n\nexport {\n type ContractCreationConfigWithOptionalAdditionalAdmins,\n type ContractCreationConfigOrAddress,\n type ContractCreationConfigAndAddress,\n} from \"./premint/contract-types\";\n","import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n TypedDataDefinition,\n WalletClient,\n} from \"viem\";\nimport {\n PremintConfigAndVersion,\n TokenConfigWithVersion,\n encodePremintConfig,\n zoraCreator1155PremintExecutorImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isValidSignature,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n makeNewPremint,\n supportedPremintVersions,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigForVersion,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\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\";\nimport {\n ClientConfig,\n makeSimulateContractParamaters,\n PublicClient,\n setupClient,\n} from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n} from \"./contract-types\";\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\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\nconst pickTokenConfigV1 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n royaltyRecipient: tokenConfig.payoutRecipient,\n});\n\nconst pickTokenConfigV2 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n payoutRecipient: tokenConfig.payoutRecipient,\n createReferral: tokenConfig.createReferral || zeroAddress,\n});\n\nconst tokenConfigV1WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV1 => ({\n ...pickTokenConfigV1(tokenConfig),\n ...defaultTokenConfigV1MintArguments(),\n fixedPriceMinter,\n});\n\nconst tokenConfigV2WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV2 => ({\n ...pickTokenConfigV2(tokenConfig),\n ...defaultTokenConfigV2MintArguments(),\n fixedPriceMinter,\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\ntype TokenConfigInput = {\n tokenURI: string;\n payoutRecipient: Address;\n createReferral?: Address;\n maxSupply?: bigint;\n maxTokensPerAddress?: bigint;\n pricePerToken?: bigint;\n mintDuration?: bigint;\n mintStart?: bigint;\n royaltyBPS?: number;\n};\n\nconst makeTokenConfigWithDefaults = ({\n chainId,\n tokenCreationConfig,\n supportedPremintVersions,\n}: {\n chainId: number;\n tokenCreationConfig: TokenConfigInput;\n supportedPremintVersions: PremintConfigVersion[];\n}): TokenConfigWithVersion<\n PremintConfigVersion.V1 | PremintConfigVersion.V2\n> => {\n const fixedPriceMinter = getDefaultFixedPriceMinterAddress(chainId);\n\n if (!supportedPremintVersions.includes(PremintConfigVersion.V2)) {\n // we need to return a token config v1\n if (tokenCreationConfig.createReferral) {\n throw new Error(\"Contract does not support create referral\");\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n tokenConfig: tokenConfigV1WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\n };\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n tokenConfig: tokenConfigV2WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\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 */\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 = publicClient;\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 * Prepares data for updating a premint\n *\n * @param parameters - Parameters for updating the premint {@link UpdatePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async updatePremint(args: UpdatePremintParams): Promise<PremintReturn<any>> {\n return await updatePremint({\n ...args,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chain.id,\n });\n }\n\n /**\n * Prepares data for deleting a premint\n *\n * @param parameters - Parameters for deleting the premint {@link DeletePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async deletePremint(\n params: DeletePremintParams,\n ): Promise<PremintReturn<any>> {\n return deletePremint({\n ...params,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chain.id,\n });\n }\n\n /**\n * Prepares data for creating a premint\n *\n * @param parameters - Parameters for creating the premint {@link CreatePremintParameters}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async createPremint(\n parameters: CreatePremintParameters,\n ): Promise<PremintReturn<any>> {\n return createPremint({\n ...parameters,\n publicClient: this.publicClient,\n apiClient: this.apiClient,\n chainId: this.chain.id,\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 premintConfig,\n premintConfigVersion,\n ...collectionAndOrAddress\n }: {\n signature: Hex;\n premintConfig: PremintConfigForVersion<T>;\n premintConfigVersion?: T;\n } & ContractCreationConfigOrAddress): Promise<{\n isValid: boolean;\n recoveredSigner: Address | undefined;\n }> {\n const collectionAddressToUse = await getPremintCollectionAddress({\n ...collectionAndOrAddress,\n publicClient: this.publicClient,\n });\n\n const { isAuthorized, recoveredAddress } = await isValidSignature({\n chainId: this.chain.id,\n signature: signature as Hex,\n publicClient: this.publicClient,\n premintConfig,\n premintConfigVersion: premintConfigVersion || PremintConfigVersion.V1,\n collectionAddress: collectionAddressToUse,\n collection: collectionAndOrAddress.collection,\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 * Prepares the parameters to collect a premint; it brings the contract and token onchain, then collects\n * tokens on that contract for the mint recipient.\n *\n * @param parameters - Parameters for collecting the Premint {@link MakeMintParametersArguments}\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters(parameters: MakeMintParametersArguments) {\n return await makeMintParameters({\n ...parameters,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function createPremintClient(clientConfig: ClientConfig) {\n const { chain, httpClient, publicClient } = setupClient(clientConfig);\n return new PremintClient(chain, publicClient, httpClient);\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: PremintAPIClient;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\nexport type SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** The account that is to sign the premint */\n account: Account | Address;\n /** If the signature should be checked before submitting it to the api */\n checkSignature?: boolean;\n};\n\nexport type SignAndSubmitReturn = {\n /** The signature of the Premint */\n signature: Hex;\n /** The account that signed the Premint */\n signerAccount: Account | Address;\n};\n\nexport type SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: boolean;\n /** The account that signed the premint */\n signerAccount: Account | Address;\n};\n\ntype PremintReturn<T extends PremintConfigVersion> = {\n /** The typedDataDefinition of the Premint which is to be signed the creator. */\n typedDataDefinition: TypedDataDefinition;\n /** The deterministic collection address of the Premint */\n collectionAddress: Address;\n /** Signs the Premint, and submits it and the signature to the Zora Premint API */\n signAndSubmit: (params: SignAndSubmitParams) => Promise<SignAndSubmitReturn>;\n /** For the case where the premint is signed externally, takes the signature for the Premint, and submits it and the Premint to the Zora Premint API */\n submit: (params: SubmitParams) => void;\n} & PremintConfigWithVersion<T>;\n\nfunction makePremintReturn<T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n publicClient,\n apiClient,\n chainId,\n ...collectionAndAddress\n}: PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress &\n PremintContext): PremintReturn<T> {\n const { collection, collectionAddress } = collectionAndAddress;\n const typedDataDefinition = premintTypedDataDefinition({\n verifyingContract: collectionAddress,\n premintConfig,\n premintConfigVersion,\n chainId,\n });\n\n const signAndSubmit = async ({\n walletClient,\n account,\n checkSignature,\n }: SignAndSubmitParams): Promise<SignAndSubmitReturn> => {\n const { signature, signerAccount } = await signPremint({\n account,\n walletClient,\n typedDataDefinition,\n });\n\n await submit({\n signature,\n checkSignature,\n signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n signerAccount,\n }: {\n signature: Hex;\n checkSignature?: boolean;\n signerAccount: Account | Address;\n }) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: signerAccount,\n });\n\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n await apiClient.postSignature({\n ...toContractCreationConfigOrAddress(collectionAndAddress),\n signature: signature,\n premintConfig,\n premintConfigVersion,\n });\n };\n\n return {\n premintConfig,\n premintConfigVersion,\n typedDataDefinition,\n collectionAddress,\n signAndSubmit,\n submit,\n };\n}\n\nasync function signPremint({\n account,\n walletClient,\n typedDataDefinition,\n}: {\n /** The account that is to sign the premint */\n account?: Address | Account;\n /** WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** Data */\n typedDataDefinition: TypedDataDefinition;\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 ...typedDataDefinition,\n });\n\n return {\n signature,\n signerAccount: account,\n };\n}\n\n/** CREATE */\n\ntype CreatePremintParameters = {\n /** tokenCreationConfig Token creation settings, optional settings are overridden with sensible defaults */\n tokenCreationConfig: TokenConfigInput;\n /** uid the UID to use – optional and retrieved as a fresh UID from ZORA by default. */\n uid?: number;\n} & ContractCreationConfigOrAddress;\n\nasync function createPremint({\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: CreatePremintParameters & PremintContext) {\n const {\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n } = await prepareCreatePremintConfig({\n ...collectionOrAddress,\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n });\n\n return makePremintReturn({\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n collection: collectionOrAddress.collection,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\ntype PreparePremintReturn = {\n collectionAddress: Address;\n} & PremintConfigAndVersion;\n\nasync function prepareCreatePremintConfig({\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: {\n tokenCreationConfig: TokenConfigInput;\n uid?: number;\n} & PremintContext &\n ContractCreationConfigOrAddress): Promise<PreparePremintReturn> {\n const newContractAddress = await getPremintCollectionAddress({\n publicClient,\n ...collectionOrAddress,\n });\n\n let uidToUse = uid;\n\n if (typeof uidToUse !== \"number\") {\n uidToUse = await apiClient.getNextUID(newContractAddress);\n }\n\n const supportedVersions = await supportedPremintVersions({\n tokenContract: newContractAddress,\n publicClient,\n });\n\n const tokenConfigAndVersion = makeTokenConfigWithDefaults({\n tokenCreationConfig,\n chainId,\n supportedPremintVersions: supportedVersions,\n });\n\n const premintConfig = makeNewPremint({\n ...tokenConfigAndVersion,\n uid: uidToUse,\n });\n\n const premintConfigAndVersion = {\n premintConfig,\n premintConfigVersion: tokenConfigAndVersion.premintConfigVersion,\n } as PremintConfigAndVersion;\n\n return {\n ...premintConfigAndVersion,\n collectionAddress: newContractAddress,\n };\n}\n\n/** UPDATE */\n\nexport type UpdatePremintParams = {\n /** uid of the Premint to update */\n uid: number;\n /** address of the Premint to update */\n collection: Address;\n /** update to apply to the Premint */\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n};\n\nasync function updatePremint({\n uid,\n collection,\n tokenConfigUpdates,\n apiClient,\n publicClient,\n chainId,\n}: UpdatePremintParams & {\n apiClient: PremintAPIClient;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premintConfig,\n collection: collectionCreationConfig,\n premintConfigVersion,\n } = await 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 makePremintReturn({\n premintConfig: updatedPremint,\n premintConfigVersion,\n collectionAddress: collection,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\n/** DELETE */\n\nexport type DeletePremintParams = {\n /** id of the premint to delete */\n uid: number;\n /** collection address of the Premint to delete */\n collection: Address;\n};\n\nasync function deletePremint({\n uid,\n collection,\n publicClient,\n apiClient,\n chainId,\n}: DeletePremintParams & {\n apiClient: PremintAPIClient;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premintConfig,\n premintConfigVersion,\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.getSignature({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n\n return makePremintReturn({\n premintConfig: deletedPremint,\n premintConfigVersion,\n collectionAddress,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\nexport type MakeMintParametersArguments = {\n /** uid of the Premint to mint */\n uid: number;\n /** Premint contract address */\n tokenContract: Address;\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Minting settings */\n mintArguments?: {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintRecipient?: Address;\n };\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n};\n\n/** ======== MINTING ======== */\n\nasync function makeMintParameters({\n uid,\n tokenContract,\n minterAccount,\n mintArguments,\n firstMinter,\n apiClient,\n publicClient,\n}: MakeMintParametersArguments & {\n apiClient: PremintAPIClient;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premintV1\" | \"premintV2\",\n any,\n any,\n any,\n Account | Address\n >\n> {\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 {\n premintConfig,\n premintConfigVersion,\n collection,\n collectionAddress,\n signature,\n } = await apiClient.getSignature({\n collectionAddress: tokenContract,\n uid,\n });\n\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n\n if (premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value = (\n await getPremintMintCosts({\n tokenContract,\n quantityToMint: numberToMint,\n publicClient,\n tokenPrice: premintConfig.tokenConfig.pricePerToken,\n })\n ).totalCost;\n\n const mintArgumentsContract: PremintMintArguments = {\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 }),\n };\n\n const collectionOrEmpty: ContractCreationConfig = collection\n ? defaultAdditionalAdmins(collection)\n : emptyContractCreationConfig();\n const collectionAddressToSubmit = collection\n ? zeroAddress\n : collectionAddress;\n\n const firstMinterToSubmit: Address =\n firstMinter ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address);\n\n return makeSimulateContractParamaters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n numberToMint,\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n}\n\nexport function 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","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155ImplABI,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n premintTypedDataDefinition,\n ContractCreationConfig,\n PremintConfigForVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n recoverTypedDataAddress,\n Hex,\n zeroAddress,\n hashDomain,\n keccak256,\n concat,\n recoverAddress,\n GetEventArgs,\n parseEther,\n Account,\n} from \"viem\";\nimport {\n PremintConfig,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n TokenCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { MintCosts } from \"src/mint/mint-client\";\nimport { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\n\nexport type IsValidSignatureReturn = {\n isAuthorized: boolean;\n recoveredAddress?: Address;\n};\n\nexport async function isAuthorizedToCreatePremint({\n contractAdmin = zeroAddress,\n additionalAdmins = [],\n collectionAddress,\n publicClient,\n signer,\n}: {\n contractAdmin?: Address;\n additionalAdmins?: Address[];\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address | Account;\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: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n typeof signer === \"string\" ? signer : signer.address,\n contractAdmin,\n collectionAddress,\n additionalAdmins,\n ],\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 return await recoverTypedDataAddress({\n ...premintTypedDataDefinition(rest),\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 collectionAddress,\n chainId,\n ...premintConfigAndVersion\n}: {\n signature: Hex;\n chainId: number;\n publicClient: PublicClient;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress): Promise<IsValidSignatureReturn> {\n const recoveredAddress = await tryRecoverPremintSigner({\n ...premintConfigAndVersion,\n signature,\n verifyingContract: collectionAddress,\n chainId,\n });\n\n if (!recoverAddress) {\n return {\n isAuthorized: false,\n };\n }\n\n const isAuthorized = await isAuthorizedToCreatePremint({\n signer: recoveredAddress!,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n collectionAddress: collectionAddress,\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<PremintConfigVersion[]> => {\n return (await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"supportedPremintSignatureVersions\",\n args: [tokenContract],\n })) as PremintConfigVersion[];\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 publicClient,\n collection,\n collectionAddress,\n}: {\n publicClient: PublicClient;\n} & ContractCreationConfigOrAddress): Promise<Address> {\n if (typeof collection !== \"undefined\") {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractWithAdditionalAdminsAddress\",\n args: [\n {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n },\n ],\n });\n }\n\n return collectionAddress;\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 PremintConfigVersion>({\n tokenConfig,\n uid,\n}: {\n tokenConfig: PremintConfigForVersion<T>[\"tokenConfig\"];\n uid: number;\n}): PremintConfigForVersion<T> {\n return {\n deleted: false,\n uid,\n version: 0,\n tokenConfig,\n } as PremintConfigForVersion<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\nexport const emptyContractCreationConfig = (): ContractCreationConfig => ({\n contractAdmin: zeroAddress,\n contractURI: \"\",\n contractName: \"\",\n additionalAdmins: [],\n});\n\nexport function defaultAdditionalAdmins(\n collection: ContractCreationConfigWithOptionalAdditionalAdmins,\n): ContractCreationConfig {\n return {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n };\n}\n\nexport const toContractCreationConfigOrAddress = ({\n collection,\n collectionAddress,\n}: {\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: Address;\n}) => {\n if (typeof collection !== \"undefined\") {\n return {\n collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\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\nexport const NFT_SALE_QUERY = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n}\n\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n contract {\n mintFeePerQuantity\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n}\n`;\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\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 [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"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 [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 [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"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 [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"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 { Address } from \"viem\";\nimport {\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 { NFT_SALE_QUERY } from \"src/constants\";\n\nexport type SaleType = \"fixedPrice\" | \"erc20\";\n\ntype FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\ntype ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {\n currency: Address;\n};\n\ntype SalesStrategyResult =\n | {\n type: \"FIXED_PRICE\";\n fixedPrice: FixedPriceSaleStrategyResult;\n }\n | {\n type: \"ERC_20_MINTER\";\n erc20Minter: ERC20SaleStrategyResult;\n };\n\ntype TokenQueryResult = {\n tokenId?: string;\n salesStrategies?: SalesStrategyResult[];\n contract: {\n mintFeePerQuantity: \"string\";\n salesStrategies: SalesStrategyResult[];\n };\n};\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n address: Address;\n pricePerToken: bigint;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: bigint;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\">;\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> & {\n currency: Address;\n};\n\ntype SaleStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;\n\nexport type SalesConfigAndTokenInfo = {\n salesConfig: SaleStrategies;\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 saleType,\n }: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n saleType?: SaleType;\n }): Promise<SalesConfigAndTokenInfo> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: NFT_SALE_QUERY,\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 as TokenQueryResult;\n\n if (!token) {\n throw new Error(\"Cannot find a token to mint\");\n }\n\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const saleStrategies = allStrategies.sort((a, b) =>\n BigInt(\n a.type === \"ERC_20_MINTER\"\n ? a.erc20Minter.saleEnd\n : a.fixedPrice.saleEnd,\n ) >\n BigInt(\n b.type === \"FIXED_PRICE\"\n ? b.fixedPrice.saleEnd\n : b.erc20Minter.saleEnd,\n )\n ? 1\n : -1,\n );\n\n let targetStrategy: SalesStrategyResult | undefined;\n\n if (!saleType) {\n targetStrategy = saleStrategies[0];\n if (!targetStrategy) {\n throw new Error(\"Cannot find sale strategy\");\n }\n } else {\n const mappedSaleType =\n saleType === \"erc20\" ? \"ERC_20_MINTER\" : \"FIXED_PRICE\";\n targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,\n );\n if (!targetStrategy) {\n throw new Error(`Cannot find sale strategy for ${mappedSaleType}`);\n }\n }\n\n if (targetStrategy.type === \"FIXED_PRICE\") {\n return {\n salesConfig: {\n saleType: \"fixedPrice\",\n ...targetStrategy.fixedPrice,\n maxTokensPerAddress: BigInt(\n targetStrategy.fixedPrice.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),\n },\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n }\n if (targetStrategy.type === \"ERC_20_MINTER\") {\n return {\n salesConfig: {\n saleType: \"erc20\",\n ...targetStrategy.erc20Minter,\n maxTokensPerAddress: BigInt(\n targetStrategy.erc20Minter.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),\n },\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n };\n }\n\n throw new Error(\"Invalid saleType\");\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 \"@zoralabs/protocol-deployments\";\nimport { PremintSignatureGetResponse } from \"./premint-api-client\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig | undefined => {\n if (!collection) return undefined;\n\n return {\n additionalAdmins:\n (collection.additionalAdmins as Address[] | undefined) || [],\n contractAdmin: collection.contractAdmin as Address,\n contractName: collection.contractName,\n contractURI: collection.contractURI,\n };\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 collectionAddress: response.collection_address as Address,\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 collectionAddress,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection: collection as\n | PremintSignatureRequestBody[\"collection\"]\n | undefined,\n collection_address: collectionAddress,\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 \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\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 signature,\n ...rest\n }: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\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 | undefined;\n collectionAddress: Address;\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 Abi,\n Account,\n Address,\n Chain,\n ContractFunctionArgs,\n ContractFunctionName,\n PublicClient as BasePublicClient,\n SimulateContractParameters,\n Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"./apis/http-api-base\";\n\nexport const makeSimulateContractParamaters = <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, \"nonpayable\" | \"payable\">,\n args extends ContractFunctionArgs<\n abi,\n \"nonpayable\" | \"payable\",\n functionName\n >,\n chainOverride extends Chain | undefined,\n accountOverride extends Account | Address | undefined = undefined,\n>(\n args: SimulateContractParameters<\n abi,\n functionName,\n args,\n Chain,\n chainOverride,\n accountOverride\n >,\n) => args;\n\nexport type PublicClient = BasePublicClient<Transport, Chain>;\n\nexport type ClientConfig = {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n};\n\nexport function setupClient({ chain, httpClient, publicClient }: ClientConfig) {\n return {\n chain,\n httpClient: httpClient || defaultHttpClient,\n publicClient:\n publicClient || createPublicClient({ chain, transport: http() }),\n };\n}\n","import {\n ContractCreationConfig,\n PremintConfigVersion as PremintConfigVersionOrig,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n\nexport type ContractCreationConfigWithOptionalAdditionalAdmins = Omit<\n ContractCreationConfig,\n \"additionalAdmins\"\n> & {\n /** Optional: if there are additional admins accounts that should be added as contract wide admins upon contract creation. */\n additionalAdmins?: Address[];\n};\n\nexport type ContractCreationConfigAndAddress = {\n /** Parameters for creating the contract for new premints. */\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n /** Premint collection address */\n collectionAddress: Address;\n};\n\nexport type ContractCreationConfigOrAddress =\n | {\n /** Parameters for creating the contract for new premints. */\n collection: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: undefined;\n }\n | {\n collection?: undefined;\n /** Premint collection address */\n collectionAddress: Address;\n };\n","import {\n Address,\n Chain,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n} from \"viem\";\nimport {\n erc20MinterABI,\n erc20MinterAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { zora721Abi } from \"src/constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport {\n MintAPIClient,\n SalesConfigAndTokenInfo,\n SaleType,\n} from \"./mint-api-client\";\nimport {\n makeSimulateContractParamaters,\n ClientConfig,\n setupClient,\n PublicClient,\n} from \"src/utils\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Optional address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintToAddress: Address;\n saleType?: SaleType;\n};\n\ntype MintTokenParams = {\n /** Account to execute the mint */\n minterAccount: Address | Account;\n /** Contract address of token to mint */\n tokenAddress: Address;\n /** Id of token to mint */\n tokenId?: GenericTokenIdTypes;\n /** Mint settings */\n mintArguments: MintArguments;\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 = publicClient;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n *\n * @param parameters - Parameters for collecting the token {@link MintTokenParams}\n * @returns Parameters for simulating/executing the mint transaction\n */\n async makePrepareMintTokenParams(parameters: MintTokenParams) {\n return makePrepareMintTokenParams({\n ...parameters,\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(clientConfig: ClientConfig) {\n const { chain, publicClient, httpClient } = setupClient(clientConfig);\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 mintArguments,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address | Account;\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<\n SimulateContractParameters<any, any, any, any, any, Account | Address>\n> {\n const salesConfigAndTokenInfo = await apiClient.getSalesConfigAndTokenInfo({\n tokenId,\n tokenAddress,\n saleType: mintArguments.saleType,\n });\n\n if (tokenId === undefined) {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n mintArguments,\n ...rest,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo,\n tokenAddress,\n tokenId,\n mintArguments,\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 | Account;\n mintArguments: MintArguments;\n}) {\n const mintValue = getMintCosts({\n salesConfigAndTokenInfo,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n }).totalCost;\n\n return makeSimulateContractParamaters({\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 });\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.salesConfig.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 | Account;\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 switch (salesConfigAndTokenInfo.salesConfig.saleType) {\n case \"fixedPrice\":\n const fixedPriceArgs = mintArguments;\n\n return makeSimulateContractParamaters({\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.salesConfig.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999999999]) as Address,\n BigInt(tokenId),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n fixedPriceArgs.mintToAddress,\n fixedPriceArgs.mintComment || \"\",\n ]),\n fixedPriceArgs.mintReferral || zeroAddress,\n ],\n });\n\n case \"erc20\":\n const erc20Args = mintArguments;\n\n return makeSimulateContractParamaters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: (salesConfigAndTokenInfo?.salesConfig.address ||\n erc20MinterAddress[999999999]) as Address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintArguments.mintToAddress,\n mintQuantity,\n tokenAddress,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken,\n salesConfigAndTokenInfo.salesConfig.currency,\n erc20Args.mintReferral || zeroAddress,\n erc20Args.mintComment || \"\",\n ],\n });\n\n default:\n throw new MintError(\"Unsupported sale type\");\n }\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport {\n makeSimulateContractParamaters,\n ClientConfig,\n PublicClient,\n setupClient,\n} from \"src/utils\";\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 any,\n any,\n any,\n any,\n any,\n Account | Address\n >;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient(clientConfig: ClientConfig) {\n const { publicClient } = setupClient(clientConfig);\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n createReferral,\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 createReferral?: Address;\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 createReferral,\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 = makeSimulateContractParamaters({\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 = makeSimulateContractParamaters({\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 { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(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 array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeSimulateContractParamaters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\n\nconst addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeSimulateContractParamaters({\n abi: zoraMintsManagerImplConfig.abi,\n address: zoraMintsManagerImplConfig.address[chainId],\n functionName: \"mintWithEth\",\n args: [quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeSimulateContractParamaters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeSimulateContractParamaters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n iUnwrapAndForwardActionABI,\n mintsEthUnwrapperAndCallerAddress,\n zoraMints1155Config,\n} from \"@zoralabs/protocol-deployments\";\nimport { Account, Address, Hex, encodeFunctionData } from \"viem\";\nimport { makePermitTransferBatchAndTypeData } from \"./mints-contracts\";\n\ntype CallWithEthParams = {\n address: Address;\n call: Hex;\n value: bigint;\n};\n\n/**\n * Build safeTransferData for the eth unwrapper and caller to call another\n * contract with eth unwrapped from MINTs.\n * @param addressToCall - the address of the contract to call\n * @param functionToCall - the function to call on the contract\n * @param valueToSend - the value to send to the contract\n */\nexport const makeCallWithEthSafeTransferData = ({\n address: addressToCall,\n call: functionToCall,\n value: valueToSend,\n}: CallWithEthParams) =>\n encodeFunctionData({\n abi: iUnwrapAndForwardActionABI,\n functionName: \"callWithEth\",\n args: [addressToCall, functionToCall, valueToSend],\n });\n\n/**\n * Makes a permit and corresponding typed data definition for unwrapping the eth value\n * of mints and forwarding it to another contract with a call. Any eth that is not forwarded\n * is refunded to the owner of the MINTs.\n * @param chainId - the id of the chain that the mints are on.\n * @param tokenIds - the token ids of the MINTs to unwrap\n * @param quantities - the quantities of each token id of the MINTs to unwrap\n * @param from - the address that owns the MINTs - this must be the address to sign the permit.\n * @param addressToCall - the address of the contract to call with the unwrapped eth.\n * @param callWithEth - the target contract, function, and value to call with the unwrapped eth. Any eth not forwarded is refunded to the owner of the MINTs.\n * @param safeTransferData - the safeTransferData to use for the call. If not provided, it will be generated from callWithEth.\n * @returns a permit and corresponding typed data definition to sign.\n */\nexport const unwrapAndForwardEthPermitAndTypedDataDefinition = ({\n chainId,\n tokenIds,\n quantities,\n from,\n callWithEth,\n safeTransferData,\n deadline,\n nonce,\n}: {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n // mints will be transferred from this address; must match the callers address\n from: Address | Account;\n deadline: bigint;\n nonce: bigint;\n} & (\n | {\n callWithEth: CallWithEthParams;\n safeTransferData?: undefined;\n }\n | {\n callWithEth?: undefined;\n safeTransferData: Hex;\n }\n)) =>\n makePermitTransferBatchAndTypeData({\n mintsOwner: from,\n chainId,\n deadline,\n tokenIds,\n quantities,\n safeTransferData:\n safeTransferData || makeCallWithEthSafeTransferData(callWithEth),\n to: mintsEthUnwrapperAndCallerAddress[chainId],\n nonce,\n });\n"],"mappings":"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","names":["PremintConfigVersion","import_viem","import_protocol_deployments","preminterAbi","import_protocol_deployments","import_viem","import_viem","httpClient","retries","post","import_protocol_deployments","post","retries","get","httpClient","import_viem","httpClient","supportedPremintVersions","httpClient","import_protocol_deployments","PremintConfigVersion","PremintConfigVersionOrig","import_viem","import_protocol_deployments","httpClient","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem"]}