@zoralabs/protocol-sdk 0.5.17 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +6 -6
- package/CHANGELOG.md +19 -0
- package/README.md +1 -416
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/create/1155-create-helper.d.ts +16 -55
- package/dist/create/1155-create-helper.d.ts.map +1 -1
- package/dist/create/contract-setup.d.ts +14 -0
- package/dist/create/contract-setup.d.ts.map +1 -0
- package/dist/create/token-setup.d.ts +27 -0
- package/dist/create/token-setup.d.ts.map +1 -0
- package/dist/create/types.d.ts +45 -0
- package/dist/create/types.d.ts.map +1 -0
- package/dist/index.cjs +1745 -891
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1698 -858
- package/dist/index.js.map +1 -1
- package/dist/mint/mint-client.d.ts +48 -51
- package/dist/mint/mint-client.d.ts.map +1 -1
- package/dist/mint/mint-queries.d.ts +38 -0
- package/dist/mint/mint-queries.d.ts.map +1 -0
- package/dist/mint/mint-transactions.d.ts +20 -0
- package/dist/mint/mint-transactions.d.ts.map +1 -0
- package/dist/mint/subgraph-mint-getter.d.ts +24 -0
- package/dist/mint/subgraph-mint-getter.d.ts.map +1 -0
- package/dist/mint/subgraph-queries.d.ts +55 -0
- package/dist/mint/subgraph-queries.d.ts.map +1 -0
- package/dist/mint/types.d.ts +177 -0
- package/dist/mint/types.d.ts.map +1 -0
- package/dist/mint/utils.d.ts +2 -0
- package/dist/mint/utils.d.ts.map +1 -0
- package/dist/mints/mints-contracts.d.ts +27 -4518
- package/dist/mints/mints-contracts.d.ts.map +1 -1
- package/dist/premint/contract-types.d.ts +4 -4
- package/dist/premint/contract-types.d.ts.map +1 -1
- package/dist/premint/conversions.d.ts +15 -16
- package/dist/premint/conversions.d.ts.map +1 -1
- package/dist/premint/premint-api-client.d.ts +32 -16
- package/dist/premint/premint-api-client.d.ts.map +1 -1
- package/dist/premint/premint-client.d.ts +76 -50
- package/dist/premint/premint-client.d.ts.map +1 -1
- package/dist/premint/preminter.d.ts +20 -8
- package/dist/premint/preminter.d.ts.map +1 -1
- package/dist/sdk.d.ts +45 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +24 -6869
- package/dist/utils.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/constants.ts +0 -36
- package/src/create/1155-create-helper.test.ts +236 -55
- package/src/create/1155-create-helper.ts +141 -309
- package/src/create/contract-setup.ts +88 -0
- package/src/create/token-setup.ts +379 -0
- package/src/create/types.ts +57 -0
- package/src/index.ts +5 -1
- package/src/mint/mint-client.test.ts +116 -78
- package/src/mint/mint-client.ts +130 -234
- package/src/mint/mint-queries.ts +320 -0
- package/src/mint/mint-transactions.ts +253 -0
- package/src/mint/subgraph-mint-getter.ts +247 -0
- package/src/mint/subgraph-queries.ts +170 -0
- package/src/mint/types.ts +239 -0
- package/src/mint/utils.ts +14 -0
- package/src/mints/mints-contracts.test.ts +1 -1
- package/src/mints/mints-contracts.ts +4 -4
- package/src/premint/contract-types.ts +4 -4
- package/src/premint/conversions.ts +38 -4
- package/src/premint/premint-api-client.ts +92 -48
- package/src/premint/premint-client.test.ts +100 -84
- package/src/premint/premint-client.ts +186 -185
- package/src/premint/preminter.test.ts +4 -5
- package/src/premint/preminter.ts +63 -14
- package/src/sdk.ts +101 -0
- package/src/types.ts +18 -0
- package/src/utils.ts +54 -46
- package/test-integration/setup-test-contracts.ts +96 -0
- package/dist/mint/mint-api-client.d.ts +0 -35
- package/dist/mint/mint-api-client.d.ts.map +0 -1
- package/src/mint/mint-api-client.ts +0 -177
- package/test-integration/premint-client.test.ts +0 -148
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/chain-constants.ts","../src/constants.ts","../src/premint/conversions.ts","../src/apis/http-api-base.ts","../src/mint/types.ts","../src/utils.ts","../src/mint/subgraph-queries.ts","../src/mint/subgraph-mint-getter.ts","../src/premint/contract-types.ts","../src/premint/premint-api-client.ts","../src/mint/mint-transactions.ts","../src/mint/utils.ts","../src/mint/mint-queries.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/create/contract-setup.ts","../src/create/token-setup.ts","../src/mints/mints-queries.ts","../src/mints/mints-contracts.ts","../src/mints/mints-eth-unwrapper-and-caller.ts","../src/sdk.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/subgraph-mint-getter\";\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\nexport * from \"./create/types\";\n\nexport * from \"./sdk\";\n","import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\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 isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n makeNewPremint,\n supportedPremintVersions,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n getPremintMintFee,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport { IPremintAPI, IPremintGetter } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n makeContractParameters,\n mintRecipientOrAccount,\n PublicClient,\n} from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n} from \"./contract-types\";\nimport {\n MakeMintParametersArgumentsBase,\n MakePremintMintParametersArguments,\n MintCosts,\n} from \"src/mint/types\";\nimport { PremintFromApi } from \"./conversions\";\nimport { SimulateContractParametersWithAccount } from \"src/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: 0n,\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: 0n,\n mintStart: 0n,\n royaltyBPS: 1000, // 10%,\n});\n\ntype TokenConfigInput = {\n /** Metadata URI of the token to create. */\n tokenURI: string;\n /** Account to receive creator rewards if it's a free mint, and token price value if its a paid mint. Defaults to the premint signing account. */\n payoutRecipient: Address;\n /** Optional: account to receive the create referral award. */\n createReferral?: Address;\n /** Optional: max supply of tokens that can be minted. Defaults to unlimited. */\n maxSupply?: bigint;\n /** Optional: max tokens that can be minted for an address, 0 if unlimited. Defaults to unlimited. */\n maxTokensPerAddress?: bigint;\n /** Optional: price per token, if this is a paid mint. 0 if a free mint. Defaults to 0, or a free mint. */\n pricePerToken?: bigint;\n /** Optional: duration of the mint, starting from the time the premint is brought onchain. 0 for infinite. Defaults to infinite. */\n mintDuration?: bigint;\n /** Optional: earliest time the premint can be brought onchain and minted. 0 for immediately. Defaults to immediately. */\n mintStart?: bigint;\n /** Optional: The royalty amount in basis points for secondary sales, in basis points. Defaults to 1000. */\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 */\nexport class PremintClient {\n readonly apiClient: IPremintAPI;\n readonly publicClient: PublicClient;\n readonly chainId: number;\n\n constructor({\n chainId,\n publicClient,\n premintApi,\n }: {\n chainId: number;\n publicClient: PublicClient;\n premintApi: IPremintAPI;\n }) {\n this.chainId = chainId;\n this.apiClient = premintApi;\n this.publicClient = publicClient;\n }\n\n getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n blockExplorerUrl?: string,\n ) {\n return getDataFromPremintReceipt(receipt, this.chainId, blockExplorerUrl);\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.chainId,\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.chainId,\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.chainId,\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 getPremint({ address, uid }: { address: Address; uid: number }) {\n return await this.apiClient.get({\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 contract: collection,\n publicClient: this.publicClient,\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({\n minterAccount,\n tokenContract,\n uid,\n mintArguments,\n firstMinter,\n }: MakeMintParametersArguments) {\n return await collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint: mintArguments?.quantityToMint || 1n,\n mintComment: mintArguments?.mintComment,\n mintReferral: mintArguments?.mintReferral,\n mintRecipient: mintArguments?.mintRecipient,\n firstMinter,\n premintGetter: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n chainId: number,\n blockExplorerUrl?: string,\n) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n tokenId: premintedLog?.tokenId,\n collectionAddres: premintedLog?.contractAddress,\n premintedLog,\n urls: makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n chainId,\n blockExplorerUrl,\n }),\n };\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: IPremintAPI;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\nexport type SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n} & CheckSignatureParams;\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 CheckSignatureParams =\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature: true;\n /** Account that signed the premint */\n account: Account | Address;\n }\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: false;\n account?: Account | Address;\n };\n\nexport type SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n} & CheckSignatureParams;\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) => Promise<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: 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 account: signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n account,\n }: SubmitParams) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: account,\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 token: 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 token: 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.contract,\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: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n } = await apiClient.get({\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: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.get({\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\nexport async function collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint,\n mintComment = \"\",\n mintReferral,\n mintRecipient,\n firstMinter,\n premintGetter,\n publicClient,\n}: Omit<MakePremintMintParametersArguments, \"mintType\"> & {\n premintGetter: IPremintGetter;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premint\",\n any,\n any,\n any,\n Account | Address\n >\n> {\n if (typeof quantityToMint !== \"undefined\" && quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid,\n });\n\n const mintFee = await getPremintMintFee({\n tokenContract,\n publicClient,\n });\n\n return buildPremintMintCall({\n mintArguments: {\n minterAccount,\n quantityToMint,\n firstMinter,\n mintComment,\n mintRecipient,\n mintReferral,\n },\n mintFee,\n premint,\n });\n}\n\nexport const buildPremintMintCall = ({\n mintArguments: {\n minterAccount,\n mintComment = \"\",\n mintRecipient,\n mintReferral,\n firstMinter,\n quantityToMint,\n },\n premint: { collection, collectionAddress, premint, signature },\n mintFee,\n}: {\n mintArguments: Omit<MakeMintParametersArgumentsBase, \"tokenContract\"> & {\n firstMinter?: Address;\n };\n premint: Pick<\n PremintFromApi,\n \"collection\" | \"collectionAddress\" | \"premint\" | \"signature\"\n >;\n mintFee: bigint;\n}): SimulateContractParametersWithAccount => {\n const mintArgumentsContract: PremintMintArguments = {\n mintComment: mintComment,\n mintRecipient: mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n }),\n mintRewardsRecipients: makeMintRewardsRecipient({\n 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 if (premint.premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value =\n (mintFee + premint.premintConfig.tokenConfig.pricePerToken) *\n BigInt(quantityToMint);\n\n return makeContractParameters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig(premint),\n signature,\n BigInt(quantityToMint),\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n};\n\nexport function makeUrls({\n uid,\n address,\n tokenId,\n chainId,\n blockExplorerUrl,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chainId: number;\n blockExplorerUrl?: string;\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(chainId);\n\n return {\n explorer: tokenId\n ? `https://${blockExplorerUrl}/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 { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\nimport { IPremintGetter } from \"./premint-api-client\";\nimport { isPremintConfigV1, isPremintConfigV2 } from \"./conversions\";\nimport { MintCosts } from \"src/mint/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 contract: collection,\n contractAddress: 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\ntype GetMintCostsParams = {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint | number;\n publicClient: PublicClient;\n};\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: GetMintCostsParams): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n const quantityToMintBigInt = BigInt(quantityToMint);\n\n return {\n mintFee: mintFee * quantityToMintBigInt,\n totalPurchaseCost: tokenPrice * quantityToMintBigInt,\n totalCostEth: (mintFee + tokenPrice) * quantityToMintBigInt,\n };\n}\nexport async function getPremintPricePerToken({\n collection,\n uid,\n premintGetter,\n}: {\n collection: Address;\n uid: number;\n premintGetter: IPremintGetter;\n}) {\n const { premint: premintConfigWithVersion } = await premintGetter.get({\n collectionAddress: collection,\n uid,\n });\n\n if (\n isPremintConfigV1(premintConfigWithVersion) ||\n isPremintConfigV2(premintConfigWithVersion)\n ) {\n return premintConfigWithVersion.premintConfig.tokenConfig.pricePerToken;\n }\n\n throw new Error(\"Premint version not supported to get price\");\n}\n\nexport async function getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n uid,\n ...rest\n}: Omit<GetMintCostsParams, \"tokenPrice\"> & {\n premintGetter: IPremintGetter;\n uid: number;\n}) {\n const pricePerToken = await getPremintPricePerToken({\n uid,\n premintGetter,\n collection: rest.tokenContract,\n });\n\n return await getPremintMintCosts({\n ...rest,\n tokenPrice: pricePerToken,\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 contract: collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n contractAddress: collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\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 { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n","import { 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 {\n PremintSignatureGetOfCollectionResponse,\n PremintSignatureGetResponse,\n} 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 type PremintFromApi = ReturnType<typeof convertGetPremintApiResponse>;\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n collection: convertCollectionFromApi(response.collection),\n collectionAddress: response.collection_address as Address,\n signature: response.signature as Hex,\n signer: response.signer as Address,\n premint: convertPremintFromApi(response.premint),\n});\n\nexport type PremintCollectionFromApi = ReturnType<\n typeof convertGetPremintOfCollectionApiResponse\n>;\n\nexport const convertGetPremintOfCollectionApiResponse = (\n response: PremintSignatureGetOfCollectionResponse,\n) => ({\n collection: convertCollectionFromApi({\n contractAdmin: response.contract_admin,\n contractName: response.contract_name,\n contractURI: response.contract_uri,\n }),\n premints: response.premints.map((premint) => ({\n premint: convertPremintFromApi(premint),\n signature: premint.signature as Hex,\n })),\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 contract: collection,\n contractAddress: 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\nexport const isPremintConfigV1 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V1> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V1;\n\nexport const isPremintConfigV2 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V2> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V2;\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 { Account, Address } from \"viem\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\n\nexport type MintParameters<MintType> = {\n /** Type of the collection to be minted. */\n mintType: MintType;\n};\n\nexport type Erc1155MintParameters = MintParameters<\"1155\"> & {\n /** Token id to mint */\n tokenId: GenericTokenIdTypes;\n};\n\nexport type Erc721MintParameters = MintParameters<\"721\">;\n\nexport type OnChainMintParameters =\n | Erc1155MintParameters\n | Erc721MintParameters;\n\nexport type PremintMintParameters = MintParameters<\"premint\"> & {\n /** uid of the Premint to mint */\n uid: number;\n};\n\nexport type MintType = \"1155\" | \"721\" | \"premint\";\n\nexport type MintTypes =\n | Erc1155MintParameters\n | Erc721MintParameters\n | PremintMintParameters;\n\nexport type GetMintParameters = MintTypes & {\n /** Address of the contract that the item belongs to */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport type GetMintsOfContractParameters = {\n /** Address of the contract to get the tokens of */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport const isOnChainMint = (mint: MintTypes): mint is OnChainMintParameters =>\n mint.mintType !== \"premint\";\n\nexport const is1155Mint = (mint: MintTypes): mint is Erc1155MintParameters =>\n mint.mintType === \"1155\";\n\nexport type MintParametersBase = {\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Quantity of tokens to mint. Defaults to 1 */\n quantityToMint: number | bigint;\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. Defaults to the minting account */\n mintRecipient?: Address;\n /** If this is a premint, the address to get the first minter reward */\n firstMinter?: Address;\n};\n\nexport type MakeMintParametersArgumentsBase = MintParametersBase & {\n /** Premint contract address */\n tokenContract: Address;\n};\n\nexport type Make1155MintArguments = MakeMintParametersArgumentsBase &\n Erc1155MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type Make721MintArguments = MakeMintParametersArgumentsBase &\n Erc721MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type MakePremintMintParametersArguments =\n MakeMintParametersArgumentsBase &\n PremintMintParameters & {\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n };\n\nexport type MakeMintParametersArguments =\n | Make1155MintArguments\n | Make721MintArguments\n | MakePremintMintParametersArguments;\n\nexport type GetMintCostsParameters = {\n /** Address of token contract/collection to get the mint costs for */\n collection: Address;\n /** Quantity of tokens that will be minted */\n quantityMinted: number | bigint;\n} & MintTypes;\n\nexport type SaleType = \"fixedPrice\" | \"erc20\" | \"premint\";\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n pricePerToken: bigint;\n maxTokensPerAddress: bigint;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n};\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n currency: Address;\n};\n\ntype PremintSaleStrategy = SaleStrategy<\"premint\"> & {\n duration: bigint;\n};\n\nexport type SaleStrategies =\n | FixedPriceSaleStrategy\n | ERC20SaleStrategy\n | PremintSaleStrategy;\n\nexport type OnchainSalesStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;\n\nexport function isErc20SaleStrategy(\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy | PremintSaleStrategy,\n): salesConfig is ERC20SaleStrategy {\n return salesConfig.saleType === \"erc20\";\n}\n\nexport type ContractInfo = {\n /** Address of the contract */\n address: Address;\n /** Contract metadata uri */\n URI: string;\n /** Contract name */\n name: string;\n};\n\nexport type MintableBase = {\n /** The contract the mintable belongs to */\n contract: ContractInfo;\n /** Token metadata URI */\n tokenURI: string;\n /** Price in eth to mint 1 item */\n mintFeePerQuantity: bigint;\n /** Creator of the mintable item */\n creator: Address;\n /** Maximum total number of items that can be minted */\n maxSupply: bigint;\n /** Total number of items minted so far */\n totalMinted: bigint;\n};\n\nexport type OnchainMintable = MintableBase & {\n mintType: \"721\" | \"1155\";\n tokenId?: bigint;\n contractVersion: string;\n};\n\nexport type PremintMintable = MintableBase & {\n mintType: \"premint\";\n uid: number;\n};\n\nexport type OnchainSalesConfigAndTokenInfo = {\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy;\n} & OnchainMintable;\n\nexport type PremintSalesConfigAndTokenInfo = {\n salesConfig: PremintSaleStrategy;\n} & PremintMintable;\n\nexport type SalesConfigAndTokenInfo =\n | OnchainSalesConfigAndTokenInfo\n | PremintMintable;\n\nexport interface IOnchainMintGetter {\n getMintable(params: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n }): Promise<OnchainSalesConfigAndTokenInfo>;\n\n getContractMintable(params: {\n tokenAddress: Address;\n }): Promise<OnchainSalesConfigAndTokenInfo[]>;\n\n getContractPremintTokenIds(params: {\n tokenAddress: Address;\n }): Promise<{ tokenId: BigInt; uid: number }[]>;\n}\n\nexport type MintCosts = {\n /** The total of the mint fee, in eth */\n mintFee: bigint;\n /** If it is a paid or erc20 mint, the total price of the paid or erc20 mint in eth or erc20 value correspondingly. */\n totalPurchaseCost: bigint;\n /** If it is an erc20 mint, the erc20 address */\n totalPurchaseCostCurrency?: Address;\n /** The total cost in eth (mint fee + purchase cost) to mint */\n totalCostEth: bigint;\n};\n\nexport type Erc20Approval = {\n /** ERC20 token address that must be approved */\n erc20: Address;\n /** Quantity of ERC20 that must be approved */\n quantity: bigint;\n /** Address that must be approved to transfer to */\n approveTo: Address;\n};\n\nexport type PrepareMintReturn = {\n /** Prepared parameters to execute the mint transaction */\n parameters: SimulateContractParametersWithAccount;\n /** If an erc20 approval is necessary, information for the erc20 approval */\n erc20Approval?: Erc20Approval;\n /** Cost breakdown to mint the quantity of tokens */\n costs: MintCosts;\n};\n\nexport type PrepareMint = (params: MintParametersBase) => PrepareMintReturn;\n\nexport type MintableReturn = {\n /** Token information */\n token: SalesConfigAndTokenInfo;\n /** Function that takes a quantity of items to mint and returns a prepared transaction and the costs to mint that quantity */\n prepareMint: PrepareMint;\n};\n","import { Account, Address, PublicClient as BasePublicClient } from \"viem\";\nimport { IHttpClient } from \"./apis/http-api-base\";\nimport { SimulateContractParametersWithAccount } from \"./types\";\n\nexport const makeContractParameters = (\n args: SimulateContractParametersWithAccount,\n) => args;\n\nexport type PublicClient = Pick<BasePublicClient, \"readContract\">;\n\nexport type ClientConfig = {\n /** The chain that the client is to run on. */\n chainId: number;\n /** Optional public client for the chain. If not provide, it is created. */\n publicClient: PublicClient;\n};\n\nexport function setupClient({ chainId, publicClient }: ClientConfig) {\n return {\n chainId,\n publicClient,\n };\n}\n\nexport function mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n}: {\n mintRecipient?: Address;\n minterAccount: Address | Account;\n}): Address {\n return (\n mintRecipient ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address)\n );\n}\n\nexport type Concrete<Type> = {\n [Property in keyof Type]-?: Type[Property];\n};\n\nexport async function querySubgraphWithRetries({\n httpClient,\n subgraphUrl,\n query,\n variables,\n}: {\n httpClient: IHttpClient;\n subgraphUrl: string;\n query: string;\n variables: any;\n}) {\n const { retries, post } = httpClient;\n\n const result = await retries(async () => {\n return await post<any>(subgraphUrl, {\n query,\n variables,\n });\n });\n\n return result?.data;\n}\n","import { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\nexport type FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\nexport type ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {\n currency: Address;\n};\n\nexport type SalesStrategyResult =\n | {\n type: \"FIXED_PRICE\";\n fixedPrice: FixedPriceSaleStrategyResult;\n }\n | {\n type: \"ERC_20_MINTER\";\n erc20Minter: ERC20SaleStrategyResult;\n };\n\nexport type TokenQueryResult = {\n tokenId?: string;\n creator: Address;\n uri: string;\n totalMinted: string;\n maxSupply: string;\n salesStrategies?: SalesStrategyResult[];\n tokenStandard: \"ERC1155\" | \"ERC721\";\n contract: {\n mintFeePerQuantity: \"string\";\n salesStrategies: SalesStrategyResult[];\n address: Address;\n contractVersion: string;\n contractURI: string;\n name: string;\n };\n};\n\nconst NFT_SALE_STRATEGY_FRAGMENT = `\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\nconst TOKEN_FRAGMENT = `\nfragment Token on ZoraCreateToken {\n creator\n tokenId\n uri\n totalMinted\n maxSupply\n tokenStandard\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n contract {\n address\n mintFeePerQuantity\n contractVersion\n contractURI\n name\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n}`;\n\nconst FRAGMENTS = `\n${NFT_SALE_STRATEGY_FRAGMENT}\n${TOKEN_FRAGMENT}\n`;\n\nexport function buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n}: {\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult> {\n return {\n query: `\n${FRAGMENTS}\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n ...Token \n }\n}\n`,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateToken,\n };\n}\n\nexport function buildContractTokensQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult[]> {\n return {\n query: `\n${FRAGMENTS}\nquery ($contract: Bytes!) {\n zoraCreateTokens(\n where: {address: $contract}\n ) {\n ...Token\n }\n}\n`,\n variables: {\n contract: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateTokens,\n };\n}\n\nexport type ISubgraphQuery<T> = {\n query: string;\n variables: Record<string, any>;\n parseResponseData: (data: any | undefined) => T | undefined;\n};\n\nexport function buildPremintsOfContractQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<{ uid: string; tokenId: string }[]> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n premints(where:{contractAddress:$contractAddress}) {\n uid\n tokenId\n }\n }\n `,\n variables: {\n contractAddress: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.premints,\n };\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 {\n IOnchainMintGetter,\n SaleType,\n OnchainMintable,\n OnchainSalesConfigAndTokenInfo,\n OnchainSalesStrategies,\n isErc20SaleStrategy,\n} from \"./types\";\nimport { querySubgraphWithRetries } from \"src/utils\";\nimport {\n buildContractTokensQuery,\n buildNftTokenSalesQuery,\n buildPremintsOfContractQuery,\n ISubgraphQuery,\n SalesStrategyResult,\n TokenQueryResult,\n} from \"./subgraph-queries\";\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\nfunction parseSalesConfig(\n targetStrategy: SalesStrategyResult,\n): OnchainSalesStrategies {\n if (targetStrategy.type === \"FIXED_PRICE\")\n return {\n saleType: \"fixedPrice\",\n ...targetStrategy.fixedPrice,\n maxTokensPerAddress: BigInt(\n targetStrategy.fixedPrice.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),\n };\n\n if (targetStrategy.type === \"ERC_20_MINTER\") {\n return {\n saleType: \"erc20\",\n ...targetStrategy.erc20Minter,\n maxTokensPerAddress: BigInt(\n targetStrategy.erc20Minter.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),\n };\n }\n\n throw new Error(\"Unknown saleType\");\n}\n\nfunction getSaleEnd(a: SalesStrategyResult) {\n return BigInt(\n a.type === \"ERC_20_MINTER\" ? a.erc20Minter.saleEnd : a.fixedPrice.saleEnd,\n );\n}\n\nfunction getTargetStrategy({\n tokenId,\n preferredSaleType,\n token,\n}: {\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n token: TokenQueryResult;\n}) {\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const saleStrategies = allStrategies.sort((a, b) =>\n getSaleEnd(a) > getSaleEnd(b) ? 1 : -1,\n );\n\n let targetStrategy: SalesStrategyResult | undefined;\n\n if (!preferredSaleType) {\n targetStrategy = saleStrategies[0];\n if (!targetStrategy) {\n throw new Error(\"Cannot find sale strategy\");\n }\n } else {\n const mappedSaleType =\n preferredSaleType === \"erc20\" ? \"ERC_20_MINTER\" : \"FIXED_PRICE\";\n targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,\n );\n if (!targetStrategy) {\n const targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) =>\n strategy.type === \"FIXED_PRICE\" || strategy.type === \"ERC_20_MINTER\",\n );\n if (!targetStrategy) throw new Error(\"Cannot find valid sale strategy\");\n return targetStrategy;\n }\n }\n\n return targetStrategy;\n}\nexport class SubgraphMintGetter implements IOnchainMintGetter {\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 querySubgraphWithRetries<T>({\n query,\n variables,\n parseResponseData,\n }: ISubgraphQuery<T>) {\n const responseData = await querySubgraphWithRetries({\n httpClient: this.httpClient,\n subgraphUrl: this.networkConfig.subgraphUrl,\n query,\n variables,\n });\n\n return parseResponseData(responseData);\n }\n\n getMintable: IOnchainMintGetter[\"getMintable\"] = async ({\n tokenAddress,\n tokenId,\n preferredSaleType: saleType,\n }) => {\n const token = await this.querySubgraphWithRetries(\n buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n }),\n );\n\n if (!token) {\n throw new Error(\"Cannot find token\");\n }\n\n return parseTokenQueryResult({\n token,\n tokenId,\n preferredSaleType: saleType,\n });\n };\n\n async getContractMintable({\n tokenAddress,\n preferredSaleType,\n }: {\n tokenAddress: Address;\n preferredSaleType?: SaleType;\n }) {\n const tokens = await this.querySubgraphWithRetries(\n buildContractTokensQuery({\n tokenAddress,\n }),\n );\n\n if (!tokens) return [];\n\n return tokens\n .filter((x) => x.tokenId !== \"0\")\n .map((token) =>\n parseTokenQueryResult({\n token,\n tokenId: token.tokenId,\n preferredSaleType,\n }),\n );\n }\n\n async getContractPremintTokenIds({\n tokenAddress,\n }: {\n tokenAddress: Address;\n }) {\n const premints = await this.querySubgraphWithRetries(\n buildPremintsOfContractQuery({\n tokenAddress,\n }),\n );\n\n return (\n premints?.map((premint) => ({\n tokenId: BigInt(premint.tokenId),\n uid: +premint.uid,\n })) || []\n );\n }\n}\n\nfunction parseTokenQueryResult({\n token,\n tokenId,\n preferredSaleType,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n}): OnchainSalesConfigAndTokenInfo {\n const targetStrategy = getTargetStrategy({\n tokenId,\n preferredSaleType: preferredSaleType,\n token,\n });\n\n const tokenInfo = parseTokenInfo(token);\n\n const salesConfig = parseSalesConfig(targetStrategy);\n\n if (isErc20SaleStrategy(salesConfig)) {\n tokenInfo.mintFeePerQuantity = 0n;\n }\n\n return {\n ...tokenInfo,\n salesConfig,\n };\n}\n\nfunction parseTokenInfo(token: TokenQueryResult): OnchainMintable {\n return {\n contract: {\n address: token.contract.address,\n name: token.contract.name,\n URI: token.contract.contractURI,\n },\n tokenURI: token.uri,\n tokenId: token.tokenId ? BigInt(token.tokenId) : undefined,\n mintType: token.tokenStandard === \"ERC721\" ? \"721\" : \"1155\",\n creator: token.creator,\n totalMinted: BigInt(token.totalMinted),\n maxSupply: BigInt(token.maxSupply),\n mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),\n contractVersion: token.contract.contractVersion,\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 contract: ContractCreationConfigWithOptionalAdditionalAdmins;\n contractAddress?: undefined;\n }\n | {\n contract?: undefined;\n /** Premint collection address */\n contractAddress: Address;\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 { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintCollectionFromApi,\n PremintFromApi,\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n convertGetPremintOfCollectionApiResponse,\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\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetOfCollectionType =\n paths[\"/signature/{chain_name}/{collection_address}\"][\"get\"];\nexport type PremintSignatureGetOfCollectionResponse =\n SignaturePremintGetOfCollectionType[\"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 chainId,\n collection_address,\n httpClient: { retries, get } = defaultHttpClient,\n}: Omit<PremintNextUIDGetPathParameters, \"chain_name\"> & {\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintNextUIDGetResponse> =>\n retries(() =>\n get<PremintNextUIDGetResponse>(\n `${ZORA_API_BASE}premint/signature/${\n getApiNetworkConfigForChain(chainId).zoraBackendChainName\n }/${collection_address}/next_uid`,\n ),\n );\n\nexport const getSignature = async ({\n collectionAddress,\n uid,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n uid: number;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintFromApi> => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}/${uid}`,\n ),\n );\n\n return convertGetPremintApiResponse(result);\n};\n\nconst getOfCollection = async ({\n collectionAddress,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}) => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetOfCollectionResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}`,\n ),\n );\n\n return convertGetPremintOfCollectionApiResponse(result);\n};\n\nexport interface IPremintGetter {\n get(params: {\n collectionAddress: Address;\n uid: number;\n }): Promise<PremintFromApi>;\n\n getOfCollection(params: {\n collectionAddress: Address;\n }): Promise<PremintCollectionFromApi>;\n}\n\nexport interface IPremintAPI {\n get: IPremintGetter[\"get\"];\n\n getOfCollection: IPremintGetter[\"getOfCollection\"];\n\n getNextUID(collectionAddress: Address): Promise<number>;\n\n postSignature<T extends PremintConfigVersion>(\n params: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress,\n ): Promise<PremintSignatureResponse>;\n}\n\nclass PremintAPIClient implements IPremintAPI {\n chainId: number;\n httpClient: IHttpClient;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.chainId = chainId;\n this.httpClient = httpClient || defaultHttpClient;\n }\n postSignature: IPremintAPI[\"postSignature\"] = ({\n signature,\n ...rest\n }): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\n chainId: this.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n getNextUID: IPremintAPI[\"getNextUID\"] = async (collectionAddress) =>\n (\n await getNextUID({\n collection_address: collectionAddress.toLowerCase(),\n chainId: this.chainId,\n httpClient: this.httpClient,\n })\n ).next_uid;\n\n get: IPremintAPI[\"get\"] = async ({ collectionAddress, uid }) => {\n return getSignature({\n collectionAddress,\n uid,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n\n getOfCollection: IPremintAPI[\"getOfCollection\"] = async ({\n collectionAddress,\n }) => {\n return getOfCollection({\n collectionAddress,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n} from \"viem\";\nimport {\n erc20MinterABI,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport { zora721Abi } from \"src/constants\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\nimport { makeContractParameters, mintRecipientOrAccount } from \"src/utils\";\nimport { MintCosts, SaleStrategies, isErc20SaleStrategy } from \"./types\";\nimport { MakeMintParametersArgumentsBase } from \"./types\";\n\nimport { contractSupportsNewMintFunction } from \"./utils\";\nimport { OnchainSalesConfigAndTokenInfo } from \"./types\";\n\nexport function makeOnchainMintCall({\n token,\n mintParams,\n}: {\n token: OnchainSalesConfigAndTokenInfo;\n mintParams: Omit<MakeMintParametersArgumentsBase, \"tokenContract\">;\n}): SimulateContractParametersWithAccount {\n if (token.mintType === \"721\") {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n ...mintParams,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n tokenId: token.tokenId!,\n ...mintParams,\n });\n}\n\nexport type MintableParameters = Pick<\n OnchainSalesConfigAndTokenInfo,\n \"contractVersion\" | \"mintFeePerQuantity\" | \"salesConfig\"\n>;\n\nexport function makePrepareMint1155TokenParams({\n tokenContract: tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParameters<any, any, any, any, any, Address | Account> {\n const mintQuantity = BigInt(quantityToMint || 1);\n\n const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n\n if (saleType === \"fixedPrice\") {\n return makeEthMintCall({\n mintComment,\n minterAccount,\n mintQuantity,\n mintReferral,\n mintTo,\n salesConfigAndTokenInfo,\n tokenContract,\n tokenId,\n });\n }\n\n if (saleType === \"erc20\") {\n return makeContractParameters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken * mintQuantity,\n salesConfigAndTokenInfo.salesConfig.currency,\n mintReferral || zeroAddress,\n mintComment || \"\",\n ],\n });\n }\n\n throw new Error(\"Unsupported sale type\");\n}\n\nfunction makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n minterAccount,\n tokenContract,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParametersWithAccount {\n const actualQuantityToMint = BigInt(quantityToMint || 1);\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: actualQuantityToMint,\n }).totalCostEth;\n\n return makeContractParameters({\n abi: zora721Abi,\n address: tokenContract,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintRecipientOrAccount({ mintRecipient, minterAccount }),\n actualQuantityToMint,\n mintComment || \"\",\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction makeEthMintCall({\n tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintQuantity,\n mintTo,\n}: {\n minterAccount: Account | Address;\n tokenContract: Address;\n mintTo: Address;\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n mintQuantity: bigint;\n mintComment?: string;\n mintReferral?: Address;\n}): SimulateContractParametersWithAccount {\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: mintQuantity,\n }).totalCostEth;\n\n const minterArguments = encodeAbiParameters(\n parseAbiParameters(\"address, string\"),\n [mintTo, mintComment || \"\"],\n );\n\n // if based on contract version it has the new mint function,\n // call the new mint function.\n if (\n contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)\n ) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mint\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n mintReferral ? [mintReferral] : [],\n minterArguments,\n ],\n });\n }\n\n // otherwise call the deprecated mint function\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n minterArguments,\n mintReferral || zeroAddress,\n ],\n });\n}\n\nexport function parseMintCosts({\n salesConfig,\n mintFeePerQuantity,\n quantityToMint,\n}: {\n salesConfig: SaleStrategies;\n mintFeePerQuantity: bigint;\n quantityToMint: bigint;\n}): MintCosts {\n const mintFeeForTokens = mintFeePerQuantity * quantityToMint;\n\n const tokenPurchaseCost = BigInt(salesConfig.pricePerToken) * quantityToMint;\n\n const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig)\n ? salesConfig.currency\n : undefined;\n\n const totalPurchaseCostEth = totalPurchaseCostCurrency\n ? 0n\n : tokenPurchaseCost;\n\n return {\n mintFee: mintFeeForTokens,\n totalPurchaseCost: tokenPurchaseCost,\n totalPurchaseCostCurrency,\n totalCostEth: mintFeeForTokens + totalPurchaseCostEth,\n };\n}\n","import * as semver from \"semver\";\nexport const contractSupportsNewMintFunction = (\n contractVersion?: string | null,\n) => {\n if (!contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n","import { IPremintGetter } from \"src/premint/premint-api-client\";\nimport {\n ContractInfo,\n Erc20Approval,\n GetMintCostsParameters,\n GetMintParameters,\n GetMintsOfContractParameters,\n IOnchainMintGetter,\n MintParametersBase,\n MintableReturn,\n OnchainSalesConfigAndTokenInfo,\n PremintSalesConfigAndTokenInfo,\n PrepareMint,\n is1155Mint,\n isOnChainMint,\n} from \"./types\";\nimport { Address, zeroAddress } from \"viem\";\nimport {\n getPremintMintCostsWithUnknownTokenPrice,\n getPremintMintFee,\n} from \"src/premint/preminter\";\nimport {\n PremintFromApi,\n isPremintConfigV1,\n isPremintConfigV2,\n} from \"src/premint/conversions\";\nimport { makeOnchainMintCall, parseMintCosts } from \"./mint-transactions\";\nimport { buildPremintMintCall } from \"src/premint/premint-client\";\nimport { IPublicClient } from \"src/types\";\n\nexport async function getMint({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<MintableReturn> {\n const { tokenContract } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const result = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: params.preferredSaleType,\n });\n\n return toMintableReturn(result);\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid: params.uid,\n });\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: tokenContract,\n });\n\n return toPremintMintReturn({ premint, mintFee });\n}\nexport async function getPremintsOfCollectionWithTokenIds({\n premintGetter,\n mintGetter,\n tokenContract,\n}: {\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n tokenContract: Address;\n}) {\n const { collection, premints } = await premintGetter.getOfCollection({\n collectionAddress: tokenContract,\n });\n\n const premintUidsAndTokenIds = await mintGetter.getContractPremintTokenIds({\n tokenAddress: tokenContract,\n });\n\n const premintsWithTokenId = premints.map((premint) => ({\n ...premint,\n tokenId: premintUidsAndTokenIds.find(\n ({ uid }) => uid === premint.premint.premintConfig.uid,\n )?.tokenId,\n }));\n\n return {\n collection: collection,\n premints: premintsWithTokenId,\n };\n}\n\nexport async function getMintsOfContract({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintsOfContractParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<{ contract?: ContractInfo; tokens: MintableReturn[] }> {\n const onchainMints = (\n await mintGetter.getContractMintable({\n tokenAddress: params.tokenContract,\n })\n ).map(toMintableReturn);\n\n const offchainMints = await getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params: {\n tokenContract: params.tokenContract,\n },\n });\n\n const tokens = [...onchainMints, ...offchainMints];\n\n return {\n tokens: tokens,\n contract: tokens[0]?.token.contract,\n };\n}\n\nexport async function getMintCosts({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintCostsParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}) {\n const { quantityMinted: quantityToMint, collection } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: collection,\n });\n\n return parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n return getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n publicClient: publicClient,\n quantityToMint: BigInt(quantityToMint),\n uid: params.uid,\n tokenContract: collection,\n });\n}\n\nasync function getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params,\n}: {\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n params: { tokenContract: Address };\n}): Promise<MintableReturn[]> {\n const { premints, collection } = await getPremintsOfCollectionWithTokenIds({\n mintGetter,\n premintGetter,\n tokenContract: params.tokenContract,\n });\n\n const offChainPremints = premints.filter(\n (premint) =>\n // if premint's uid is not in the list of uids from the subgraph, it is offchain\n typeof premint.tokenId === \"undefined\",\n );\n\n if (offChainPremints.length === 0) return [];\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return offChainPremints.map((premint) => {\n return toPremintMintReturn({\n premint: {\n premint: premint.premint,\n // todo: fix when api returns signer\n signer: zeroAddress,\n collection,\n collectionAddress: params.tokenContract,\n signature: premint.signature,\n },\n mintFee,\n });\n });\n}\n\n/** Parsing */\n\nfunction parsePremint({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\"\n >;\n mintFee: bigint;\n}): PremintSalesConfigAndTokenInfo {\n if (\n isPremintConfigV1(premint.premint) ||\n isPremintConfigV2(premint.premint)\n ) {\n return {\n creator: premint.signer,\n maxSupply: premint.premint.premintConfig.tokenConfig.maxSupply,\n mintFeePerQuantity: mintFee,\n mintType: \"premint\",\n uid: premint.premint.premintConfig.uid,\n contract: {\n address: premint.collectionAddress,\n name: premint.collection!.contractName,\n URI: premint.collection!.contractURI,\n },\n tokenURI: premint.premint.premintConfig.tokenConfig.tokenURI,\n totalMinted: 0n,\n salesConfig: {\n duration: premint.premint.premintConfig.tokenConfig.mintDuration,\n maxTokensPerAddress:\n premint.premint.premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premint.premint.premintConfig.tokenConfig.pricePerToken,\n saleType: \"premint\",\n },\n };\n }\n\n throw new Error(\"Invalid premint config version\");\n}\n\nconst makeOnchainPrepareMint =\n (result: OnchainSalesConfigAndTokenInfo): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: makeOnchainMintCall({ token: result, mintParams: params }),\n erc20Approval: getRequiredErc20Approvals(params, result),\n costs: parseMintCosts({\n salesConfig: result.salesConfig,\n quantityToMint: BigInt(params.quantityToMint),\n mintFeePerQuantity: result.mintFeePerQuantity,\n }),\n });\n\nfunction toMintableReturn(\n result: OnchainSalesConfigAndTokenInfo,\n): MintableReturn {\n return { token: result, prepareMint: makeOnchainPrepareMint(result) };\n}\n\nconst makePremintPrepareMint =\n (\n mintable: PremintSalesConfigAndTokenInfo,\n mintFee: bigint,\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >,\n ): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: buildPremintMintCall({\n mintArguments: params,\n mintFee,\n premint,\n }),\n costs: parseMintCosts({\n mintFeePerQuantity: mintFee,\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: mintable.salesConfig,\n }),\n });\n\nfunction toPremintMintReturn({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >;\n mintFee: bigint;\n}): MintableReturn {\n const mintable = parsePremint({ premint, mintFee });\n\n return {\n token: mintable,\n prepareMint: makePremintPrepareMint(mintable, mintFee, premint),\n };\n}\nfunction getRequiredErc20Approvals(\n params: MintParametersBase,\n result: OnchainSalesConfigAndTokenInfo,\n): Erc20Approval | undefined {\n if (result.salesConfig.saleType !== \"erc20\") return undefined;\n\n return {\n quantity: result.salesConfig.pricePerToken * BigInt(params.quantityToMint),\n approveTo: result.salesConfig.address,\n erc20: result.salesConfig.currency,\n };\n}\n","import { Address, Account, SimulateContractParameters } from \"viem\";\nimport { IPublicClient } from \"src/types\";\nimport {\n GetMintParameters,\n IOnchainMintGetter,\n MintCosts,\n PrepareMintReturn,\n SaleType,\n} from \"./types\";\nimport {\n MakeMintParametersArguments,\n Make1155MintArguments,\n Make721MintArguments,\n GetMintCostsParameters,\n is1155Mint,\n} from \"./types\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nimport { makeOnchainMintCall } from \"./mint-transactions\";\nimport { getMint, getMintCosts, getMintsOfContract } from \"./mint-queries\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\nexport class MintClient {\n private readonly publicClient: IPublicClient;\n private readonly mintGetter: IOnchainMintGetter;\n private readonly premintGetter: IPremintGetter;\n\n constructor({\n publicClient,\n premintGetter,\n mintGetter,\n }: {\n publicClient: IPublicClient;\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n }) {\n this.publicClient = publicClient;\n this.mintGetter = mintGetter;\n this.premintGetter = premintGetter;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParametersArguments}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\n async mint(\n parameters: MakeMintParametersArguments,\n ): Promise<PrepareMintReturn> {\n return mint({\n parameters,\n publicClient: this.publicClient,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n });\n }\n\n /**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParameters}\n * @Returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\n async get(parameters: GetMintParameters) {\n return getMint({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @Returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\n async getOfContract(params: {\n tokenContract: Address;\n preferredSaleType?: SaleType;\n }) {\n return getMintsOfContract({\n params,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameters}\n * @returns Costs to mint the quantity of tokens specified\n */\n async getMintCosts(parameters: GetMintCostsParameters): Promise<MintCosts> {\n return getMintCosts({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n}\n\nasync function mint({\n parameters,\n publicClient,\n mintGetter,\n premintGetter,\n}: {\n parameters: MakeMintParametersArguments;\n publicClient: IPublicClient;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n}): Promise<PrepareMintReturn> {\n const { prepareMint } = await getMint({\n params: parameters,\n mintGetter,\n premintGetter,\n publicClient,\n });\n\n return prepareMint({\n minterAccount: parameters.minterAccount,\n quantityToMint: parameters.quantityToMint,\n firstMinter: parameters.firstMinter,\n mintComment: parameters.mintComment,\n mintRecipient: parameters.mintRecipient,\n mintReferral: parameters.mintReferral,\n });\n}\n\nexport async function collectOnchain({\n chainId,\n mintGetter,\n ...parameters\n}: (Make1155MintArguments | Make721MintArguments) & {\n mintGetter: IOnchainMintGetter;\n chainId: number;\n}): Promise<\n SimulateContractParameters<any, any, any, any, any, Account | Address>\n> {\n const { tokenContract: tokenContract, preferredSaleType: saleType } =\n parameters;\n const tokenId = is1155Mint(parameters) ? parameters.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: saleType,\n });\n\n return makeOnchainMintCall({\n mintParams: parameters,\n token: salesConfigAndTokenInfo,\n });\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog } from \"viem\";\nimport { makeContractParameters } from \"src/utils\";\nimport { getContractInfo } from \"./contract-setup\";\nimport { ContractType, CreateNew1155Params, New1155Token } from \"./types\";\nimport { constructCreate1155TokenCalls } from \"./token-setup\";\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\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\ntype CreateNew1155TokenReturn = {\n parameters: SimulateContractParameters<\n any,\n any,\n any,\n any,\n any,\n Account | Address\n >;\n tokenSetupActions: Hex[];\n collectionAddress: Address;\n newTokenId: bigint;\n newToken: New1155Token;\n minter: Address;\n contractExists: boolean;\n};\n\nfunction makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n royaltyBPS,\n tokenSetupActions,\n fundsRecipient,\n}: {\n contractExists: boolean;\n contractAddress: Address;\n contract: ContractType;\n account: Address | Account;\n royaltyBPS?: number;\n fundsRecipient?: Address;\n tokenSetupActions: Hex[];\n}) {\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n\n if (!contractExists) {\n if (typeof contract === \"string\") {\n throw new Error(\"Invariant: expected contract object\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n return makeContractParameters({\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: royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: fundsRecipient || accountAddress,\n },\n contract.defaultAdmin || accountAddress,\n tokenSetupActions,\n ],\n });\n }\n\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n });\n}\n\nexport class Create1155Client {\n private readonly chainId: number;\n private readonly publicClient: Pick<PublicClient, \"readContract\">;\n\n constructor({\n chainId,\n publicClient,\n }: {\n chainId: number;\n publicClient: Pick<PublicClient, \"readContract\">;\n }) {\n this.chainId = chainId;\n this.publicClient = publicClient;\n }\n\n async createNew1155Token(props: CreateNew1155Params) {\n return createNew1155Token({\n ...props,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n}\n\nasync function createNew1155Token({\n contract,\n account,\n getAdditionalSetupActions,\n token: tokenConfig,\n publicClient,\n chainId,\n}: CreateNew1155Params & {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n}): Promise<CreateNew1155TokenReturn> {\n const { contractExists, contractAddress, nextTokenId, contractVersion } =\n await getContractInfo({\n publicClient,\n chainId: chainId,\n contract,\n account,\n });\n\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = constructCreate1155TokenCalls({\n chainId: chainId,\n ownerAddress: account,\n contractVersion,\n nextTokenId,\n ...tokenConfig,\n });\n\n const setupActions = getAdditionalSetupActions\n ? [\n ...getAdditionalSetupActions({\n tokenId: nextTokenId,\n contractAddress,\n }),\n ...tokenSetupActions,\n ]\n : tokenSetupActions;\n\n const request = makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n tokenSetupActions: setupActions,\n royaltyBPS: tokenConfig.royaltyBPS,\n fundsRecipient: tokenConfig.payoutRecipient,\n });\n\n return {\n parameters: request,\n tokenSetupActions,\n collectionAddress: contractAddress,\n contractExists,\n newTokenId: nextTokenId,\n newToken,\n minter,\n };\n}\n","import { Address, PublicClient } from \"viem\";\nimport { ContractType } from \"./types\";\nimport {\n contracts1155,\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\n\ntype contracts1155Address = keyof typeof contracts1155.addresses;\nfunction new1155ContractVersion(chainId: number): string {\n const address = contracts1155.addresses[chainId as contracts1155Address];\n if (!address) {\n throw new Error(`No contract address for chainId ${chainId}`);\n }\n\n return address.CONTRACT_1155_IMPL_VERSION;\n}\n\nexport async function getContractInfo({\n publicClient,\n chainId,\n contract,\n account,\n}: {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n contract: ContractType;\n // Account that is the creator of the contract\n account: Address;\n}): Promise<{\n contractExists: boolean;\n contractAddress: Address;\n contractVersion: string;\n nextTokenId: bigint;\n}> {\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 contractAddress =\n typeof contract === \"string\"\n ? contract\n : await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n let contractVersion: string;\n let contractExists: boolean;\n try {\n contractVersion = 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 contractVersion = new1155ContractVersion(chainId);\n contractExists = false;\n }\n\n const nextTokenId = contractExists\n ? await publicClient.readContract({\n address: contractAddress,\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n })\n : 1n;\n\n return {\n contractExists,\n contractAddress,\n contractVersion,\n nextTokenId,\n };\n}\n","import {\n erc20MinterABI,\n erc20MinterAddress as erc20MinterAddresses,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, zeroAddress, Hex } from \"viem\";\nimport * as semver from \"semver\";\nimport {\n ContractProps,\n CreateNew1155TokenProps,\n New1155Token,\n SalesConfigParamsType,\n} from \"./types\";\nimport { OPEN_EDITION_MINT_SIZE } from \"src/constants\";\nimport { Concrete } from \"src/utils\";\n\nexport const PERMISSION_BITS = {\n MINTER: 2n ** 2n,\n};\n\ntype SetupMintersProps = {\n tokenId: bigint;\n chainId: number;\n fundsRecipient: Address;\n salesConfig: Concrete<SalesConfigParamsType>;\n};\n\n// Sales end forever amount (uint64 max)\n\nconst saleSettingsOrDefault = (\n saleSettings?: SalesConfigParamsType,\n): Concrete<SalesConfigParamsType> => {\n const SALE_END_FOREVER = 18446744073709551615n;\n\n const DEFAULT_SALE_SETTINGS: Concrete<SalesConfigParamsType> = {\n currency: 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 return {\n ...DEFAULT_SALE_SETTINGS,\n ...saleSettings,\n };\n};\n\nfunction applyNew1155Defaults(\n props: CreateNew1155TokenProps,\n ownerAddress: Address,\n): New1155Token {\n const { payoutRecipient: fundsRecipient } = props;\n const fundsRecipientOrOwner =\n fundsRecipient && fundsRecipient !== zeroAddress\n ? fundsRecipient\n : ownerAddress;\n return {\n payoutRecipient: fundsRecipientOrOwner,\n createReferral: props.createReferral || zeroAddress,\n maxSupply:\n typeof props.maxSupply === \"undefined\"\n ? OPEN_EDITION_MINT_SIZE\n : BigInt(props.maxSupply),\n royaltyBPS: props.royaltyBPS || 1000,\n salesConfig: saleSettingsOrDefault(props.salesConfig),\n tokenMetadataURI: props.tokenMetadataURI,\n };\n}\n\ntype SetupErc20MinterProps = {\n chainId: number;\n tokenId: bigint;\n fundsRecipient: Address;\n} & Concrete<SalesConfigParamsType>;\n\nfunction setupErc20Minter({\n pricePerToken,\n chainId,\n tokenId: nextTokenId,\n currency,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupErc20MinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const erc20MinterAddress =\n erc20MinterAddresses[chainId as keyof typeof erc20MinterAddresses];\n if (!erc20MinterAddress)\n throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);\n\n const erc20MinterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: erc20MinterABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n pricePerToken: pricePerToken,\n fundsRecipient,\n currency: currency,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), erc20MinterAddress, saleData],\n });\n\n return {\n minter: erc20MinterAddress,\n setupActions: [erc20MinterApproval, callSale],\n };\n}\n\ntype SetupFixedPriceMinterProps = {\n fundsRecipient: Address;\n tokenId: bigint;\n chainId: number;\n} & Concrete<Omit<SalesConfigParamsType, \"currency\">>;\n\nfunction setupFixedPriceMinter({\n pricePerToken: price,\n tokenId: nextTokenId,\n chainId,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupFixedPriceMinterProps): { minter: Address; setupActions: Hex[] } {\n const fixedPriceStrategyAddress =\n zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ];\n const fixedPriceApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [\n BigInt(nextTokenId),\n fixedPriceStrategyAddress,\n PERMISSION_BITS.MINTER,\n ],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n pricePerToken: price,\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n fundsRecipient,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData],\n });\n\n return {\n minter: fixedPriceStrategyAddress,\n setupActions: [fixedPriceApproval, callSale],\n };\n}\n\nexport function setupMinters({ salesConfig, ...rest }: SetupMintersProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n if (!salesConfig) throw new Error(\"No sales config for token\");\n const { currency: currencyAddress } = salesConfig;\n\n if (currencyAddress === zeroAddress) {\n return setupFixedPriceMinter({\n ...salesConfig,\n ...rest,\n });\n } else {\n return setupErc20Minter({\n ...salesConfig,\n ...rest,\n });\n }\n}\n\nfunction buildSetupNewToken({\n tokenURI,\n maxSupply = OPEN_EDITION_MINT_SIZE,\n createReferral = zeroAddress,\n contractVersion,\n}: {\n tokenURI: string;\n maxSupply: bigint;\n createReferral: Address;\n contractVersion?: string;\n}): Hex {\n // If we're adding a new token to an existing contract which doesn't support\n // creator rewards, we won't have the 'setupNewTokenWithCreateReferral' method\n // available, so we need to check for that and use the fallback method instead.\n if (contractSupportsMintRewards(contractVersion, \"ERC1155\")) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenURI, BigInt(maxSupply), createReferral],\n });\n }\n\n if (createReferral !== zeroAddress) {\n throw new Error(\n \"Contract does not support create referral, but one was provided\",\n );\n }\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenURI, BigInt(maxSupply)],\n });\n}\n\nfunction setupRoyaltyConfig({\n royaltyBPS,\n royaltyRecipient,\n nextTokenId,\n}: {\n royaltyBPS: number;\n royaltyRecipient: Address;\n nextTokenId: bigint;\n}) {\n if (royaltyBPS > 0 && royaltyRecipient != zeroAddress) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyBPS,\n royaltyRecipient,\n royaltyMintSchedule: 0,\n },\n ],\n });\n }\n\n return null;\n}\n\nfunction makeAdminMintCall({\n ownerAddress,\n mintQuantity,\n nextTokenId,\n}: {\n ownerAddress: Address;\n mintQuantity?: number;\n nextTokenId: bigint;\n}) {\n if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {\n return null;\n }\n\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress],\n });\n}\n\nexport function constructCreate1155TokenCalls(\n props: CreateNew1155TokenProps &\n ContractProps & {\n ownerAddress: Address;\n chainId: number;\n },\n): {\n setupActions: `0x${string}`[];\n newToken: New1155Token;\n minter: Address;\n} {\n const {\n chainId,\n nextTokenId,\n mintToCreatorCount,\n ownerAddress,\n contractVersion,\n } = props;\n\n const new1155TokenPropsWithDefaults = applyNew1155Defaults(\n props,\n ownerAddress,\n );\n\n const verifyTokenIdExpected = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n });\n\n const setupNewToken = buildSetupNewToken({\n tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,\n maxSupply: new1155TokenPropsWithDefaults.maxSupply,\n createReferral: new1155TokenPropsWithDefaults.createReferral,\n contractVersion,\n });\n\n const royaltyConfig = setupRoyaltyConfig({\n royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,\n royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n nextTokenId,\n });\n\n const { minter, setupActions: mintersSetup } = setupMinters({\n tokenId: nextTokenId,\n chainId,\n fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n salesConfig: new1155TokenPropsWithDefaults.salesConfig,\n });\n\n const adminMintCall = makeAdminMintCall({\n ownerAddress,\n mintQuantity: mintToCreatorCount,\n nextTokenId,\n });\n\n const setupActions = [\n verifyTokenIdExpected,\n setupNewToken,\n ...mintersSetup,\n royaltyConfig,\n adminMintCall,\n ].filter((item) => item !== null) as `0x${string}`[];\n\n return {\n setupActions,\n minter,\n newToken: new1155TokenPropsWithDefaults,\n };\n}\n\nexport const contractSupportsMintRewards = (\n contractVersion?: string | null,\n contractStandard?: \"ERC721\" | \"ERC1155\",\n) => {\n if (!contractStandard || !contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n if (contractStandard === \"ERC1155\") {\n return semver.gte(semVerContractVersion, \"1.3.5\");\n } else {\n return semver.gte(semVerContractVersion, \"14.0.0\");\n }\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 { makeContractParameters } 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 makeContractParameters({\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 makeContractParameters({\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 makeContractParameters({\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","import {\n PremintClient,\n getDataFromPremintReceipt,\n} from \"./premint/premint-client\";\nimport { Create1155Client } from \"./create/1155-create-helper\";\nimport { MintClient } from \"./mint/mint-client\";\nimport { ClientConfig } from \"./utils\";\nimport { IPremintAPI, PremintAPIClient } from \"./premint/premint-api-client\";\nimport { SubgraphMintGetter } from \"./mint/subgraph-mint-getter\";\nimport { IOnchainMintGetter } from \"./mint/types\";\n\nexport type CreatorClient = {\n createPremint: PremintClient[\"createPremint\"];\n updatePremint: PremintClient[\"updatePremint\"];\n deletePremint: PremintClient[\"deletePremint\"];\n create1155: Create1155Client[\"createNew1155Token\"];\n};\n\nexport type CollectorClient = {\n getPremint: PremintClient[\"getPremint\"];\n getCollectDataFromPremintReceipt: PremintClient[\"getDataFromPremintReceipt\"];\n mint: MintClient[\"mint\"];\n getMintCosts: MintClient[\"getMintCosts\"];\n getToken: MintClient[\"get\"];\n getTokensOfContract: MintClient[\"getOfContract\"];\n};\n\nexport type CreatorClientConfig = ClientConfig & {\n /** API for submitting and getting premints. Defaults to the Zora Premint API */\n premintApi?: IPremintAPI;\n};\n\n/**\n * Builds the sdk for creating/managing 1155 contracts and tokens\n *\n * @param clientConfig - Configuration for the client {@link CreatorClientConfig}\n * @returns CreatorClient {@link CreatorClient}\n * */\nexport function createCreatorClient(\n clientConfig: CreatorClientConfig,\n): CreatorClient {\n const premintClient = new PremintClient({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n premintApi:\n clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId),\n });\n\n const create1155CreatorClient = new Create1155Client({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n });\n\n return {\n createPremint: (p) => premintClient.createPremint(p),\n updatePremint: (p) => premintClient.updatePremint(p),\n deletePremint: (p) => premintClient.deletePremint(p),\n create1155: (p) => create1155CreatorClient.createNew1155Token(p),\n };\n}\n\nexport type CollectorClientConfig = ClientConfig & {\n /** API for getting premints. Defaults to the Zora Premint API */\n premintGetter?: IPremintAPI;\n /** API for getting onchain mints. Defaults to the Zora Creator Subgraph */\n mintGetter?: IOnchainMintGetter;\n};\n\n/**\n * Builds the sdk for collecting Premints, 1155, and 721 tokens.\n *\n * @param clientConfig - Configuration for the client {@link CollectorClientConfig}\n * @returns CollectorClient {@link CollectorClient}\n */\nexport function createCollectorClient(\n params: CollectorClientConfig,\n): CollectorClient {\n const premintGetterToUse =\n params.premintGetter || new PremintAPIClient(params.chainId);\n const mintGetterToUse =\n params.mintGetter || new SubgraphMintGetter(params.chainId);\n const mintClient = new MintClient({\n publicClient: params.publicClient,\n premintGetter: premintGetterToUse,\n mintGetter: mintGetterToUse,\n });\n\n return {\n getPremint: (p) =>\n premintGetterToUse.get({\n collectionAddress: p.address,\n uid: p.uid,\n }),\n getCollectDataFromPremintReceipt: (p) =>\n getDataFromPremintReceipt(p, params.chainId),\n getToken: (p) => mintClient.get(p),\n getTokensOfContract: (p) => mintClient.getOfContract(p),\n mint: (p) => mintClient.mint(p),\n getMintCosts: (p) => mintClient.getMintCosts(p),\n };\n}\n"],"mappings":"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","names":["PremintConfigVersion","import_viem","import_protocol_deployments","import_protocol_deployments","import_viem","import_viem","preminterAbi","import_protocol_deployments","mint","httpClient","retries","post","targetStrategy","httpClient","supportedPremintVersions","import_protocol_deployments","PremintConfigVersion","PremintConfigVersionOrig","post","retries","get","httpClient","import_viem","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem","import_protocol_deployments","import_protocol_deployments","import_viem","semver","erc20MinterAddresses","import_protocol_deployments","import_viem","import_protocol_deployments","import_viem"]}
|