@zoralabs/protocol-sdk 0.3.3 → 0.3.4

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.
@@ -2,14 +2,14 @@ $ tsup
2
2
  CLI Building entry: src/index.ts
3
3
  CLI Using tsconfig: tsconfig.json
4
4
  CLI tsup v7.2.0
5
- CLI Using tsup config: /home/runner/work/zora-protocol/zora-protocol/packages/protocol-sdk/tsup.config.js
5
+ CLI Using tsup config: /home/runner/work/zora-protocol-private/zora-protocol-private/packages/protocol-sdk/tsup.config.js
6
6
  CLI Target: es2021
7
7
  CLI Cleaning output folder
8
8
  CJS Build start
9
9
  ESM Build start
10
- CJS dist/index.cjs 39.15 KB
11
- CJS dist/index.cjs.map 73.49 KB
12
- CJS ⚡️ Build success in 24ms
13
- ESM dist/index.js 36.55 KB
14
- ESM dist/index.js.map 73.48 KB
15
- ESM ⚡️ Build success in 23ms
10
+ ESM dist/index.js 37.02 KB
11
+ ESM dist/index.js.map 74.33 KB
12
+ ESM ⚡️ Build success in 34ms
13
+ CJS dist/index.cjs 39.62 KB
14
+ CJS dist/index.cjs.map 74.34 KB
15
+ CJS ⚡️ Build success in 35ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @zoralabs/protocol-sdk
2
2
 
3
+ ## 0.3.4
4
+
5
+ ### Patch Changes
6
+
7
+ - ea27f01: Fix reading the FIXED_PRICE_MINTER from the subgraph
8
+
3
9
  ## 0.3.3
4
10
 
5
11
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -287,12 +287,30 @@ var MintAPIClient = class {
287
287
  const { retries: retries2, post: post2 } = this.httpClient;
288
288
  return retries2(async () => {
289
289
  const response = await post2(this.networkConfig.subgraphUrl, {
290
- query: "query($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n salesStrategies{\n fixedPrice {\n address\n }\n }\n }\n}",
290
+ query: `query ($id: ID!) {
291
+ zoraCreateToken(id: $id) {
292
+ id
293
+ salesStrategies(where: {type: "FIXED_PRICE"}) {
294
+ type
295
+ fixedPrice {
296
+ address
297
+ pricePerToken
298
+ saleEnd
299
+ saleStart
300
+ maxTokensPerAddress
301
+ }
302
+ }
303
+ }
304
+ }`,
291
305
  variables: {
292
306
  id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`
293
307
  }
294
308
  });
295
- return response.zoraCreateToken?.salesStrategies?.find(() => true)?.fixedPriceMinterAddress;
309
+ const fixedPrice = response.data?.zoraCreateToken?.salesStrategies?.find(() => true)?.fixedPrice;
310
+ return {
311
+ address: fixedPrice.address,
312
+ pricePerToken: BigInt(fixedPrice.pricePerToken)
313
+ };
296
314
  });
297
315
  }
298
316
  async getMintableForToken({
@@ -834,6 +852,7 @@ var MintClient = class {
834
852
  if (mintContextType === "zora_create_1155") {
835
853
  return await get1155MintCosts({
836
854
  mintable,
855
+ price: BigInt(mintable.cost.native_price.raw),
837
856
  publicClient: this.publicClient,
838
857
  quantityToMint: BigInt(quantityToMint)
839
858
  });
@@ -966,6 +985,7 @@ async function get1155MintFee({
966
985
  }
967
986
  async function get1155MintCosts({
968
987
  mintable,
988
+ price,
969
989
  publicClient,
970
990
  quantityToMint
971
991
  }) {
@@ -975,7 +995,7 @@ async function get1155MintCosts({
975
995
  publicClient
976
996
  });
977
997
  const mintFeeForTokens = mintFee * quantityToMint;
978
- const tokenPurchaseCost = BigInt(mintable.cost.native_price.raw) * quantityToMint;
998
+ const tokenPurchaseCost = price * quantityToMint;
979
999
  return {
980
1000
  mintFee: mintFeeForTokens,
981
1001
  tokenPurchaseCost,
@@ -995,15 +1015,16 @@ async function makePrepareMint1155TokenParams({
995
1015
  }
996
1016
  const mintQuantity = BigInt(mintArguments.quantityToMint);
997
1017
  const address = mintable.collection.address;
1018
+ const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
1019
+ contractAddress: address,
1020
+ tokenId: BigInt(mintable.token_id)
1021
+ });
998
1022
  const mintValue = (await get1155MintCosts({
999
1023
  mintable,
1024
+ price: tokenFixedPriceMinter?.pricePerToken || BigInt(mintable.cost.native_price.raw),
1000
1025
  publicClient,
1001
1026
  quantityToMint: mintQuantity
1002
1027
  })).totalCost;
1003
- const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
1004
- contractAddress: address,
1005
- tokenId: BigInt(mintable.token_id)
1006
- });
1007
1028
  const result = {
1008
1029
  abi: import_protocol_deployments2.zoraCreator1155ImplABI,
1009
1030
  functionName: "mintWithRewards",
@@ -1012,7 +1033,7 @@ async function makePrepareMint1155TokenParams({
1012
1033
  address,
1013
1034
  /* args: minter, tokenId, quantity, minterArguments, mintReferral */
1014
1035
  args: [
1015
- tokenFixedPriceMinter || import_protocol_deployments2.zoraCreatorFixedPriceSaleStrategyAddress[999],
1036
+ tokenFixedPriceMinter?.address || import_protocol_deployments2.zoraCreatorFixedPriceSaleStrategyAddress[999],
1016
1037
  BigInt(mintable.token_id),
1017
1038
  mintQuantity,
1018
1039
  (0, import_viem3.encodeAbiParameters)((0, import_viem3.parseAbiParameters)("address, string"), [
@@ -1041,7 +1062,7 @@ var DEFAULT_SALE_SETTINGS = {
1041
1062
  // 0 Here means no limit
1042
1063
  maxTokensPerAddress: 0n
1043
1064
  };
1044
- var PERMISSION_BIT_MINTER = 2n ** 2n;
1065
+ var PERMISSION_BIT_MINTER = 4n;
1045
1066
  function create1155TokenSetupArgs({
1046
1067
  nextTokenId,
1047
1068
  // How many NFTs upon initialization to mint to the creator
@@ -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/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts"],"sourcesContent":["export * from \"./premint/premint-client\";\n\nexport * from \"./premint/preminter\";\n\nexport * from \"./premint/premint-api-client\";\n\nexport * from \"./mint/mint-api-client\";\n\nexport * from \"./mint/mint-client\";\n\nexport * from \"./create/1155-create-helper\";\n","import { createPublicClient, decodeEventLog, http } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport {\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { PremintConfig, preminterTypedDataDefinition } from \"./preminter\";\nimport type {\n PremintSignatureGetResponse,\n PremintSignatureResponse,\n} from \"./premint-api-client\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { REWARD_PER_TOKEN } from \"src/apis/chain-constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\n\ntype MintArgumentsSettings = {\n tokenURI: string;\n maxSupply?: bigint;\n maxTokensPerAddress?: bigint;\n pricePerToken?: bigint;\n mintStart?: bigint;\n mintDuration?: bigint;\n royaltyMintSchedule?: number;\n royaltyBPS?: number;\n royaltyRecipient?: Address;\n fixedPriceMinter?: Address;\n};\n\ntype PremintedLogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"Preminted\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n premint: PremintSignatureResponse;\n};\n\nexport const DefaultMintArguments = {\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\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): PremintedLogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"Preminted\",\n ...data,\n });\n if (decodedLog.eventName === \"Preminted\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\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 convertPremint = (\n premint: PremintSignatureGetResponse[\"premint\"],\n) => ({\n ...premint,\n tokenConfig: {\n ...premint.tokenConfig,\n fixedPriceMinter: premint.tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: premint.tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(premint.tokenConfig.maxSupply),\n pricePerToken: BigInt(premint.tokenConfig.pricePerToken),\n mintStart: BigInt(premint.tokenConfig.mintStart),\n mintDuration: BigInt(premint.tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(premint.tokenConfig.maxTokensPerAddress),\n },\n});\n\nexport const convertCollection = (\n collection: PremintSignatureGetResponse[\"collection\"],\n) => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert on-chain types for a premint to a server safe type\n *\n * @param premint Premint object from viem to convert to a JSON compatible type.\n * @returns JSON compatible premint\n */\nexport const encodePremintForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfig) => ({\n ...premint,\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\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * The premint executor address is deployed to the same address across all chains.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Executor address for premints\n */\n getExecutorAddress() {\n return zoraCreator1155PremintExecutorImplAddress[999];\n }\n\n /**\n * The fixed price minter address is the same across all chains for our current\n * deployer strategy.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Fixed price sale strategy\n */\n getFixedPriceMinterAddress() {\n return zoraCreatorFixedPriceSaleStrategyAddress[999];\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n token,\n account,\n }: {\n walletClient: WalletClient;\n uid: number;\n token: MintArgumentsSettings;\n account?: Account | Address;\n collection: Address;\n }): Promise<SignedPremintResponse> {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const convertedPremint = convertPremint(signatureResponse.premint);\n const signerData = {\n ...signatureResponse,\n premint: {\n ...convertedPremint,\n tokenConfig: {\n ...convertedPremint.tokenConfig,\n ...token,\n },\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: {\n ...signerData.collection,\n contractAdmin: signerData.collection.contractAdmin as Address,\n },\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const signerData = {\n ...signatureResponse,\n collection: convertCollection(signatureResponse.collection),\n premint: {\n ...convertPremint(signatureResponse.premint),\n deleted: true,\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: signerData.collection,\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint({\n walletClient,\n verifyingContract,\n premintConfig,\n uid,\n account,\n checkSignature,\n collection,\n }: {\n uid: number;\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n premintConfig: PremintConfig;\n collection: PremintSignatureGetResponse[\"collection\"];\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 ...preminterTypedDataDefinition({\n verifyingContract,\n premintConfig,\n chainId: this.chain.id,\n }),\n });\n\n if (checkSignature) {\n const [isValidSignature] = await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [convertCollection(collection), premintConfig, signature],\n });\n if (!isValidSignature) {\n throw new Error(\"Invalid signature\");\n }\n }\n\n const apiData = {\n collection,\n premint: encodePremintForAPI(premintConfig),\n signature: signature,\n };\n\n const premint = await this.apiClient.postSignature(apiData);\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n premint,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n * @param settings.publicClient Public client (optional) – instantiated if not passed in with defaults.\n * @param settings.walletClient Required wallet client for signing the premint message.\n * @param settings.executionSettings Execution settings for premint options\n * @param settings.executionSettings.deleted If this UID should be deleted. If omitted, set to false.\n * @param settings.executionSettings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint({\n account,\n collection,\n token,\n walletClient,\n executionSettings,\n checkSignature = false,\n }: {\n account: Address;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: PremintSignatureGetResponse[\"collection\"];\n token: MintArgumentsSettings;\n executionSettings?: {\n deleted?: boolean;\n uid?: number;\n };\n }) {\n const newContractAddress = await this.publicClient.readContract({\n address: this.getExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [convertCollection(collection)],\n });\n\n const tokenConfig = {\n ...DefaultMintArguments,\n fixedPriceMinter: this.getFixedPriceMinterAddress(),\n royaltyRecipient: account,\n ...token,\n };\n\n let uid = executionSettings?.uid;\n if (!uid) {\n const uidResponse = await this.apiClient.getNextUID({\n collection_address: newContractAddress.toLowerCase(),\n });\n uid = uidResponse.next_uid;\n }\n\n if (!uid) {\n throw new Error(\"UID is missing but required\");\n }\n\n let deleted = executionSettings?.deleted || false;\n\n const premintConfig = {\n tokenConfig: tokenConfig,\n uid,\n version: 1,\n deleted,\n };\n\n return await this.signAndSubmitPremint({\n uid,\n verifyingContract: newContractAddress,\n premintConfig,\n checkSignature,\n account,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintData({\n address,\n uid,\n }: {\n address: string;\n uid: number;\n }): Promise<PremintSignatureGetResponse> {\n return await this.apiClient.getSignature({\n collection_address: address,\n uid,\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, contractAddress = assumed contract address, recoveredSigner = signer from contract\n */\n async isValidSignature({\n data,\n }: {\n data: PremintSignatureGetResponse;\n }): Promise<{\n isValid: boolean;\n contractAddress: Address;\n recoveredSigner: Address;\n }> {\n const [isValid, contractAddress, recoveredSigner] =\n await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n ],\n });\n\n return { isValid, contractAddress, recoveredSigner };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\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(this.chain.id);\n\n return {\n explorer: tokenId\n ? `https://${this.chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n data,\n account,\n mintArguments,\n }: {\n data: PremintSignatureGetResponse;\n account: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const targetAddress = this.getExecutorAddress();\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n const args = [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n numberToMint,\n mintArguments?.mintComment || \"\",\n ] as const;\n\n if (!account) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const value = numberToMint * REWARD_PER_TOKEN;\n\n const request: SimulateContractParameters = {\n account,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: targetAddress,\n args,\n };\n\n return request;\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n","import { Address } from \"abitype\";\nimport { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/protocol-deployments\";\nimport { TypedDataDefinition } from \"viem\";\n\ntype PremintInputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premint\"\n>[\"inputs\"];\n\ntype PreminterHashDataTypes = AbiParametersToPrimitiveTypes<PremintInputs>;\n\nexport type ContractCreationConfig = PreminterHashDataTypes[0];\nexport type PremintConfig = PreminterHashDataTypes[1];\nexport type TokenCreationConfig = PremintConfig[\"tokenConfig\"];\n\n// Convenience method to create the structured typed data\n// needed to sign for a premint contract and token\nexport const preminterTypedDataDefinition = ({\n verifyingContract,\n premintConfig,\n chainId,\n}: {\n verifyingContract: Address;\n premintConfig: PremintConfig;\n chainId: number;\n}) => {\n const { tokenConfig, uid, version, deleted } = premintConfig;\n const types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n };\n\n const result: TypedDataDefinition<typeof types, \"CreatorAttribution\"> = {\n domain: {\n chainId,\n name: \"Preminter\",\n version: \"1\",\n verifyingContract: verifyingContract,\n },\n types,\n message: {\n tokenConfig,\n uid,\n version,\n deleted,\n },\n primaryType: \"CreatorAttribution\",\n };\n\n return result;\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","export 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","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\nexport type NetworkConfig = {\n chainId: number;\n zoraPathChainName: string;\n zoraBackendChainName: components[\"schemas\"][\"ChainName\"];\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const BackendChainNamesLookup = {\n ZORA_MAINNET: \"ZORA-MAINNET\",\n ZORA_GOERLI: \"ZORA-GOERLI\",\n OPTIMISM_MAINNET: \"OPTIMISM-MAINNET\",\n OPTIMISM_GOERLI: \"OPTIMISM-GOERLI\",\n ETHEREUM_MAINNET: \"ETHEREUM-MAINNET\",\n ETHEREUM_GOERLI: \"ETHEREUM-GOERLI\",\n BASE_MAINNET: \"BASE-MAINNET\",\n BASE_GOERLI: \"BASE-GOERLI\",\n} as const;\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraPathChainName: \"eth\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraPathChainName: \"gor\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraPathChainName: \"zora\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zora.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraPathChainName: \"opt\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"ogor\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraPathChainName: \"base\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"bgor\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { paths } from \"../apis/generated/discover-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { Address } from \"viem\";\n\nexport type MintableGetToken =\n paths[\"/mintables/{chain_name}/{collection_address}\"];\ntype MintableGetTokenPathParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"path\"];\ntype MintableGetTokenGetQueryParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"query\"];\nexport type MintableGetTokenResponse =\n MintableGetToken[\"get\"][\"responses\"][200][\"content\"][\"application/json\"];\n\nfunction encodeQueryParameters(params: Record<string, string>) {\n return new URLSearchParams(params).toString();\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 getMintable(\n path: MintableGetTokenPathParameters,\n query: MintableGetTokenGetQueryParameters,\n ): Promise<MintableGetTokenResponse> {\n const httpClient = this.httpClient;\n return httpClient.retries(() => {\n return httpClient.get<MintableGetTokenResponse>(\n `${ZORA_API_BASE}discover/mintables/${path.chain_name}/${\n path.collection_address\n }${query?.token_id ? `?${encodeQueryParameters(query)}` : \"\"}`,\n );\n });\n }\n\n async getSalesConfigFixedPrice({\n contractAddress,\n tokenId,\n }: {\n contractAddress: string;\n tokenId: bigint;\n }): Promise<undefined | string> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query:\n \"query($id: ID!) {\\n zoraCreateToken(id: $id) {\\n id\\n salesStrategies{\\n fixedPrice {\\n address\\n }\\n }\\n }\\n}\",\n variables: {\n id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`,\n },\n });\n return response.zoraCreateToken?.salesStrategies?.find(() => true)\n ?.fixedPriceMinterAddress;\n });\n }\n\n async getMintableForToken({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.getMintable(\n {\n chain_name: this.networkConfig.zoraBackendChainName,\n collection_address: tokenContract,\n },\n { token_id: tokenId?.toString() },\n );\n }\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\";\n\ntype SignaturePostType = paths[\"/signature\"][\"post\"];\ntype PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\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<PremintSignatureGetResponse> =>\n retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\ntype OmitChainName<T> = Omit<T, \"chain_name\">;\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 (\n data: OmitChainName<PremintSignatureRequestBody>,\n ): Promise<PremintSignatureResponse> =>\n postSignature({\n ...data,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getNextUID = async (\n path: OmitChainName<PremintNextUIDGetPathParameters>,\n ): Promise<PremintNextUIDGetResponse> =>\n getNextUID({\n ...path,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getSignature = async ({\n collection_address,\n uid,\n }: OmitChainName<PremintSignatureGetPathParameters>): Promise<PremintSignatureGetResponse> =>\n getSignature({\n collection_address,\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbi,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, MintableGetTokenResponse } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nconst 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\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Gets mintable information for a given token\n * @param param0.tokenContract The contract address of the token to mint.\n * @param param0.tokenId The token id to mint.\n * @returns\n */\n async getMintable({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.apiClient.getMintableForToken({\n tokenContract,\n tokenId: tokenId?.toString(),\n });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Returns the mintFee, sale fee, and total cost of minting x quantities of a token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.quantityToMint The quantity of tokens to mint.\n * @returns\n */\n async getMintCosts({\n mintable,\n quantityToMint,\n }: {\n mintable: Mintable;\n quantityToMint: number | bigint;\n }): Promise<MintCosts> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n if (mintContextType === \"zora_create_1155\") {\n return await get1155MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n if (mintContextType === \"zora_create\") {\n return await get721MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nfunction validateMintableAndGetContextType(\n mintable: MintableGetTokenResponse | undefined,\n) {\n if (!mintable) {\n throw new MintError(\"No mintable found\");\n }\n\n if (!mintable.is_active) {\n throw new MintInactiveError(\"Minting token is inactive\");\n }\n\n if (!mintable.mint_context) {\n throw new MintError(\"No minting context data from zora API\");\n }\n\n if (\n ![\"zora_create\", \"zora_create_1155\"].includes(\n mintable.mint_context?.mint_context_type!,\n )\n ) {\n throw new MintError(\n `Mintable type ${mintable.mint_context.mint_context_type} is currently unsupported.`,\n );\n }\n\n return mintable.mint_context.mint_context_type;\n}\n\nasync function makePrepareMintTokenParams({\n publicClient,\n mintable,\n apiClient,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n const thisPublicClient = publicClient;\n\n if (mintContextType === \"zora_create_1155\") {\n return makePrepareMint1155TokenParams({\n apiClient,\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n if (mintContextType === \"zora_create\") {\n return makePrepareMint721TokenParams({\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n}\n\nasync function get721MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const [_, mintFee] = await publicClient.readContract({\n abi: zora721Abi,\n address,\n functionName: \"zoraFeeForAmount\",\n args: [BigInt(quantityToMint)],\n });\n\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n return {\n mintFee,\n tokenPurchaseCost,\n totalCost: mintFee + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint721TokenParams({\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n publicClient: PublicClient;\n mintable: MintableGetTokenResponse;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n if (mintContextType !== \"zora_create\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintValue = (\n await get721MintCosts({\n mintable,\n publicClient,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n })\n ).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: mintable.contract_address as Address,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nasync function get1155MintFee({\n collectionAddress,\n publicClient,\n}: {\n collectionAddress: Address;\n publicClient: PublicClient;\n}) {\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"mintFee\",\n address: collectionAddress,\n });\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport async function get1155MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const mintFee = await get1155MintFee({\n collectionAddress: address,\n publicClient,\n });\n\n const mintFeeForTokens = mintFee * quantityToMint;\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n apiClient,\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n apiClient: Pick<MintAPIClient, \"getSalesConfigFixedPrice\">;\n publicClient: PublicClient;\n mintable: Mintable;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}) {\n if (mintContextType !== \"zora_create_1155\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const address = mintable.collection.address as Address;\n\n const mintValue = (\n await get1155MintCosts({\n mintable,\n publicClient,\n quantityToMint: mintQuantity,\n })\n ).totalCost;\n\n const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({\n contractAddress: address,\n tokenId: BigInt(mintable.token_id!),\n });\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (tokenFixedPriceMinter ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(mintable.token_id!),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n\nexport type Mintable = MintableGetTokenResponse;\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 2n ** 2n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n"],"mappings":"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","names":["import_viem","httpClient","retries","post","post","retries","get","httpClient","httpClient","import_viem","import_protocol_deployments","httpClient","import_protocol_deployments","import_viem"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/http-api-base.ts","../src/constants.ts","../src/apis/chain-constants.ts","../src/mint/mint-api-client.ts","../src/premint/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts"],"sourcesContent":["export * from \"./premint/premint-client\";\n\nexport * from \"./premint/preminter\";\n\nexport * from \"./premint/premint-api-client\";\n\nexport * from \"./mint/mint-api-client\";\n\nexport * from \"./mint/mint-client\";\n\nexport * from \"./create/1155-create-helper\";\n","import { createPublicClient, decodeEventLog, http } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport {\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { PremintConfig, preminterTypedDataDefinition } from \"./preminter\";\nimport type {\n PremintSignatureGetResponse,\n PremintSignatureResponse,\n} from \"./premint-api-client\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { REWARD_PER_TOKEN } from \"src/apis/chain-constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\n\ntype MintArgumentsSettings = {\n tokenURI: string;\n maxSupply?: bigint;\n maxTokensPerAddress?: bigint;\n pricePerToken?: bigint;\n mintStart?: bigint;\n mintDuration?: bigint;\n royaltyMintSchedule?: number;\n royaltyBPS?: number;\n royaltyRecipient?: Address;\n fixedPriceMinter?: Address;\n};\n\ntype PremintedLogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"Preminted\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n premint: PremintSignatureResponse;\n};\n\nexport const DefaultMintArguments = {\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\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): PremintedLogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"Preminted\",\n ...data,\n });\n if (decodedLog.eventName === \"Preminted\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\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 convertPremint = (\n premint: PremintSignatureGetResponse[\"premint\"],\n) => ({\n ...premint,\n tokenConfig: {\n ...premint.tokenConfig,\n fixedPriceMinter: premint.tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: premint.tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(premint.tokenConfig.maxSupply),\n pricePerToken: BigInt(premint.tokenConfig.pricePerToken),\n mintStart: BigInt(premint.tokenConfig.mintStart),\n mintDuration: BigInt(premint.tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(premint.tokenConfig.maxTokensPerAddress),\n },\n});\n\nexport const convertCollection = (\n collection: PremintSignatureGetResponse[\"collection\"],\n) => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert on-chain types for a premint to a server safe type\n *\n * @param premint Premint object from viem to convert to a JSON compatible type.\n * @returns JSON compatible premint\n */\nexport const encodePremintForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfig) => ({\n ...premint,\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\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * The premint executor address is deployed to the same address across all chains.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Executor address for premints\n */\n getExecutorAddress() {\n return zoraCreator1155PremintExecutorImplAddress[999];\n }\n\n /**\n * The fixed price minter address is the same across all chains for our current\n * deployer strategy.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Fixed price sale strategy\n */\n getFixedPriceMinterAddress() {\n return zoraCreatorFixedPriceSaleStrategyAddress[999];\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n token,\n account,\n }: {\n walletClient: WalletClient;\n uid: number;\n token: MintArgumentsSettings;\n account?: Account | Address;\n collection: Address;\n }): Promise<SignedPremintResponse> {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const convertedPremint = convertPremint(signatureResponse.premint);\n const signerData = {\n ...signatureResponse,\n premint: {\n ...convertedPremint,\n tokenConfig: {\n ...convertedPremint.tokenConfig,\n ...token,\n },\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: {\n ...signerData.collection,\n contractAdmin: signerData.collection.contractAdmin as Address,\n },\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const signerData = {\n ...signatureResponse,\n collection: convertCollection(signatureResponse.collection),\n premint: {\n ...convertPremint(signatureResponse.premint),\n deleted: true,\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: signerData.collection,\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint({\n walletClient,\n verifyingContract,\n premintConfig,\n uid,\n account,\n checkSignature,\n collection,\n }: {\n uid: number;\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n premintConfig: PremintConfig;\n collection: PremintSignatureGetResponse[\"collection\"];\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 ...preminterTypedDataDefinition({\n verifyingContract,\n premintConfig,\n chainId: this.chain.id,\n }),\n });\n\n if (checkSignature) {\n const [isValidSignature] = await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [convertCollection(collection), premintConfig, signature],\n });\n if (!isValidSignature) {\n throw new Error(\"Invalid signature\");\n }\n }\n\n const apiData = {\n collection,\n premint: encodePremintForAPI(premintConfig),\n signature: signature,\n };\n\n const premint = await this.apiClient.postSignature(apiData);\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n premint,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n * @param settings.publicClient Public client (optional) – instantiated if not passed in with defaults.\n * @param settings.walletClient Required wallet client for signing the premint message.\n * @param settings.executionSettings Execution settings for premint options\n * @param settings.executionSettings.deleted If this UID should be deleted. If omitted, set to false.\n * @param settings.executionSettings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint({\n account,\n collection,\n token,\n walletClient,\n executionSettings,\n checkSignature = false,\n }: {\n account: Address;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: PremintSignatureGetResponse[\"collection\"];\n token: MintArgumentsSettings;\n executionSettings?: {\n deleted?: boolean;\n uid?: number;\n };\n }) {\n const newContractAddress = await this.publicClient.readContract({\n address: this.getExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [convertCollection(collection)],\n });\n\n const tokenConfig = {\n ...DefaultMintArguments,\n fixedPriceMinter: this.getFixedPriceMinterAddress(),\n royaltyRecipient: account,\n ...token,\n };\n\n let uid = executionSettings?.uid;\n if (!uid) {\n const uidResponse = await this.apiClient.getNextUID({\n collection_address: newContractAddress.toLowerCase(),\n });\n uid = uidResponse.next_uid;\n }\n\n if (!uid) {\n throw new Error(\"UID is missing but required\");\n }\n\n let deleted = executionSettings?.deleted || false;\n\n const premintConfig = {\n tokenConfig: tokenConfig,\n uid,\n version: 1,\n deleted,\n };\n\n return await this.signAndSubmitPremint({\n uid,\n verifyingContract: newContractAddress,\n premintConfig,\n checkSignature,\n account,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintData({\n address,\n uid,\n }: {\n address: string;\n uid: number;\n }): Promise<PremintSignatureGetResponse> {\n return await this.apiClient.getSignature({\n collection_address: address,\n uid,\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, contractAddress = assumed contract address, recoveredSigner = signer from contract\n */\n async isValidSignature({\n data,\n }: {\n data: PremintSignatureGetResponse;\n }): Promise<{\n isValid: boolean;\n contractAddress: Address;\n recoveredSigner: Address;\n }> {\n const [isValid, contractAddress, recoveredSigner] =\n await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n ],\n });\n\n return { isValid, contractAddress, recoveredSigner };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\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(this.chain.id);\n\n return {\n explorer: tokenId\n ? `https://${this.chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n data,\n account,\n mintArguments,\n }: {\n data: PremintSignatureGetResponse;\n account: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const targetAddress = this.getExecutorAddress();\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n const args = [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n numberToMint,\n mintArguments?.mintComment || \"\",\n ] as const;\n\n if (!account) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const value = numberToMint * REWARD_PER_TOKEN;\n\n const request: SimulateContractParameters = {\n account,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: targetAddress,\n args,\n };\n\n return request;\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n","import { Address } from \"abitype\";\nimport { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/protocol-deployments\";\nimport { TypedDataDefinition } from \"viem\";\n\ntype PremintInputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premint\"\n>[\"inputs\"];\n\ntype PreminterHashDataTypes = AbiParametersToPrimitiveTypes<PremintInputs>;\n\nexport type ContractCreationConfig = PreminterHashDataTypes[0];\nexport type PremintConfig = PreminterHashDataTypes[1];\nexport type TokenCreationConfig = PremintConfig[\"tokenConfig\"];\n\n// Convenience method to create the structured typed data\n// needed to sign for a premint contract and token\nexport const preminterTypedDataDefinition = ({\n verifyingContract,\n premintConfig,\n chainId,\n}: {\n verifyingContract: Address;\n premintConfig: PremintConfig;\n chainId: number;\n}) => {\n const { tokenConfig, uid, version, deleted } = premintConfig;\n const types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n };\n\n const result: TypedDataDefinition<typeof types, \"CreatorAttribution\"> = {\n domain: {\n chainId,\n name: \"Preminter\",\n version: \"1\",\n verifyingContract: verifyingContract,\n },\n types,\n message: {\n tokenConfig,\n uid,\n version,\n deleted,\n },\n primaryType: \"CreatorAttribution\",\n };\n\n return result;\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","export 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","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\nexport type NetworkConfig = {\n chainId: number;\n zoraPathChainName: string;\n zoraBackendChainName: components[\"schemas\"][\"ChainName\"];\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const BackendChainNamesLookup = {\n ZORA_MAINNET: \"ZORA-MAINNET\",\n ZORA_GOERLI: \"ZORA-GOERLI\",\n OPTIMISM_MAINNET: \"OPTIMISM-MAINNET\",\n OPTIMISM_GOERLI: \"OPTIMISM-GOERLI\",\n ETHEREUM_MAINNET: \"ETHEREUM-MAINNET\",\n ETHEREUM_GOERLI: \"ETHEREUM-GOERLI\",\n BASE_MAINNET: \"BASE-MAINNET\",\n BASE_GOERLI: \"BASE-GOERLI\",\n} as const;\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraPathChainName: \"eth\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraPathChainName: \"gor\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraPathChainName: \"zora\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zora.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraPathChainName: \"opt\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"ogor\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraPathChainName: \"base\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"bgor\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { paths } from \"../apis/generated/discover-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { Address } from \"viem\";\n\nexport type MintableGetToken =\n paths[\"/mintables/{chain_name}/{collection_address}\"];\ntype MintableGetTokenPathParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"path\"];\ntype MintableGetTokenGetQueryParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"query\"];\nexport type MintableGetTokenResponse =\n MintableGetToken[\"get\"][\"responses\"][200][\"content\"][\"application/json\"];\n\nfunction encodeQueryParameters(params: Record<string, string>) {\n return new URLSearchParams(params).toString();\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 getMintable(\n path: MintableGetTokenPathParameters,\n query: MintableGetTokenGetQueryParameters,\n ): Promise<MintableGetTokenResponse> {\n const httpClient = this.httpClient;\n return httpClient.retries(() => {\n return httpClient.get<MintableGetTokenResponse>(\n `${ZORA_API_BASE}discover/mintables/${path.chain_name}/${\n path.collection_address\n }${query?.token_id ? `?${encodeQueryParameters(query)}` : \"\"}`,\n );\n });\n }\n\n async getSalesConfigFixedPrice({\n contractAddress,\n tokenId,\n }: {\n contractAddress: string;\n tokenId: bigint;\n }): Promise<undefined | { address: Address; pricePerToken: bigint }> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: `query ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n }\n }\n }`,\n variables: {\n id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`,\n },\n });\n\n const fixedPrice: {\n address: Address;\n pricePerToken: string;\n } = response.data?.zoraCreateToken?.salesStrategies?.find(() => true)\n ?.fixedPrice;\n\n return {\n address: fixedPrice.address as Address,\n pricePerToken: BigInt(fixedPrice.pricePerToken),\n };\n });\n }\n\n async getMintableForToken({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.getMintable(\n {\n chain_name: this.networkConfig.zoraBackendChainName,\n collection_address: tokenContract,\n },\n { token_id: tokenId?.toString() },\n );\n }\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\";\n\ntype SignaturePostType = paths[\"/signature\"][\"post\"];\ntype PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\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<PremintSignatureGetResponse> =>\n retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\ntype OmitChainName<T> = Omit<T, \"chain_name\">;\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 (\n data: OmitChainName<PremintSignatureRequestBody>,\n ): Promise<PremintSignatureResponse> =>\n postSignature({\n ...data,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getNextUID = async (\n path: OmitChainName<PremintNextUIDGetPathParameters>,\n ): Promise<PremintNextUIDGetResponse> =>\n getNextUID({\n ...path,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getSignature = async ({\n collection_address,\n uid,\n }: OmitChainName<PremintSignatureGetPathParameters>): Promise<PremintSignatureGetResponse> =>\n getSignature({\n collection_address,\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbi,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, MintableGetTokenResponse } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nconst 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\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Gets mintable information for a given token\n * @param param0.tokenContract The contract address of the token to mint.\n * @param param0.tokenId The token id to mint.\n * @returns\n */\n async getMintable({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.apiClient.getMintableForToken({\n tokenContract,\n tokenId: tokenId?.toString(),\n });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Returns the mintFee, sale fee, and total cost of minting x quantities of a token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.quantityToMint The quantity of tokens to mint.\n * @returns\n */\n async getMintCosts({\n mintable,\n quantityToMint,\n }: {\n mintable: Mintable;\n quantityToMint: number | bigint;\n }): Promise<MintCosts> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n if (mintContextType === \"zora_create_1155\") {\n return await get1155MintCosts({\n mintable,\n price: BigInt(mintable.cost.native_price.raw),\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n if (mintContextType === \"zora_create\") {\n return await get721MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nfunction validateMintableAndGetContextType(\n mintable: MintableGetTokenResponse | undefined,\n) {\n if (!mintable) {\n throw new MintError(\"No mintable found\");\n }\n\n if (!mintable.is_active) {\n throw new MintInactiveError(\"Minting token is inactive\");\n }\n\n if (!mintable.mint_context) {\n throw new MintError(\"No minting context data from zora API\");\n }\n\n if (\n ![\"zora_create\", \"zora_create_1155\"].includes(\n mintable.mint_context?.mint_context_type!,\n )\n ) {\n throw new MintError(\n `Mintable type ${mintable.mint_context.mint_context_type} is currently unsupported.`,\n );\n }\n\n return mintable.mint_context.mint_context_type;\n}\n\nasync function makePrepareMintTokenParams({\n publicClient,\n mintable,\n apiClient,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n const thisPublicClient = publicClient;\n\n if (mintContextType === \"zora_create_1155\") {\n return makePrepareMint1155TokenParams({\n apiClient,\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n if (mintContextType === \"zora_create\") {\n return makePrepareMint721TokenParams({\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n}\n\nasync function get721MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const [_, mintFee] = await publicClient.readContract({\n abi: zora721Abi,\n address,\n functionName: \"zoraFeeForAmount\",\n args: [BigInt(quantityToMint)],\n });\n\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n return {\n mintFee,\n tokenPurchaseCost,\n totalCost: mintFee + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint721TokenParams({\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n publicClient: PublicClient;\n mintable: MintableGetTokenResponse;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n if (mintContextType !== \"zora_create\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintValue = (\n await get721MintCosts({\n mintable,\n publicClient,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n })\n ).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: mintable.contract_address as Address,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nasync function get1155MintFee({\n collectionAddress,\n publicClient,\n}: {\n collectionAddress: Address;\n publicClient: PublicClient;\n}) {\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"mintFee\",\n address: collectionAddress,\n });\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport async function get1155MintCosts({\n mintable,\n price,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n price: bigint;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const mintFee = await get1155MintFee({\n collectionAddress: address,\n publicClient,\n });\n\n const mintFeeForTokens = mintFee * quantityToMint;\n const tokenPurchaseCost = price * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n apiClient,\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n apiClient: Pick<MintAPIClient, \"getSalesConfigFixedPrice\">;\n publicClient: PublicClient;\n mintable: Mintable;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}) {\n if (mintContextType !== \"zora_create_1155\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const address = mintable.collection.address as Address;\n\n const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({\n contractAddress: address,\n tokenId: BigInt(mintable.token_id!),\n });\n\n const mintValue = (\n await get1155MintCosts({\n mintable,\n price:\n tokenFixedPriceMinter?.pricePerToken ||\n BigInt(mintable.cost.native_price.raw),\n publicClient,\n quantityToMint: mintQuantity,\n })\n ).totalCost;\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (tokenFixedPriceMinter?.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(mintable.token_id!),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n\nexport type Mintable = MintableGetTokenResponse;\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 4n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n"],"mappings":"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","names":["import_viem","httpClient","retries","post","post","retries","get","httpClient","httpClient","import_viem","import_protocol_deployments","httpClient","import_protocol_deployments","import_viem"]}
package/dist/index.js CHANGED
@@ -258,12 +258,30 @@ var MintAPIClient = class {
258
258
  const { retries: retries2, post: post2 } = this.httpClient;
259
259
  return retries2(async () => {
260
260
  const response = await post2(this.networkConfig.subgraphUrl, {
261
- query: "query($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n salesStrategies{\n fixedPrice {\n address\n }\n }\n }\n}",
261
+ query: `query ($id: ID!) {
262
+ zoraCreateToken(id: $id) {
263
+ id
264
+ salesStrategies(where: {type: "FIXED_PRICE"}) {
265
+ type
266
+ fixedPrice {
267
+ address
268
+ pricePerToken
269
+ saleEnd
270
+ saleStart
271
+ maxTokensPerAddress
272
+ }
273
+ }
274
+ }
275
+ }`,
262
276
  variables: {
263
277
  id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`
264
278
  }
265
279
  });
266
- return response.zoraCreateToken?.salesStrategies?.find(() => true)?.fixedPriceMinterAddress;
280
+ const fixedPrice = response.data?.zoraCreateToken?.salesStrategies?.find(() => true)?.fixedPrice;
281
+ return {
282
+ address: fixedPrice.address,
283
+ pricePerToken: BigInt(fixedPrice.pricePerToken)
284
+ };
267
285
  });
268
286
  }
269
287
  async getMintableForToken({
@@ -815,6 +833,7 @@ var MintClient = class {
815
833
  if (mintContextType === "zora_create_1155") {
816
834
  return await get1155MintCosts({
817
835
  mintable,
836
+ price: BigInt(mintable.cost.native_price.raw),
818
837
  publicClient: this.publicClient,
819
838
  quantityToMint: BigInt(quantityToMint)
820
839
  });
@@ -947,6 +966,7 @@ async function get1155MintFee({
947
966
  }
948
967
  async function get1155MintCosts({
949
968
  mintable,
969
+ price,
950
970
  publicClient,
951
971
  quantityToMint
952
972
  }) {
@@ -956,7 +976,7 @@ async function get1155MintCosts({
956
976
  publicClient
957
977
  });
958
978
  const mintFeeForTokens = mintFee * quantityToMint;
959
- const tokenPurchaseCost = BigInt(mintable.cost.native_price.raw) * quantityToMint;
979
+ const tokenPurchaseCost = price * quantityToMint;
960
980
  return {
961
981
  mintFee: mintFeeForTokens,
962
982
  tokenPurchaseCost,
@@ -976,15 +996,16 @@ async function makePrepareMint1155TokenParams({
976
996
  }
977
997
  const mintQuantity = BigInt(mintArguments.quantityToMint);
978
998
  const address = mintable.collection.address;
999
+ const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
1000
+ contractAddress: address,
1001
+ tokenId: BigInt(mintable.token_id)
1002
+ });
979
1003
  const mintValue = (await get1155MintCosts({
980
1004
  mintable,
1005
+ price: tokenFixedPriceMinter?.pricePerToken || BigInt(mintable.cost.native_price.raw),
981
1006
  publicClient,
982
1007
  quantityToMint: mintQuantity
983
1008
  })).totalCost;
984
- const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
985
- contractAddress: address,
986
- tokenId: BigInt(mintable.token_id)
987
- });
988
1009
  const result = {
989
1010
  abi: zoraCreator1155ImplABI,
990
1011
  functionName: "mintWithRewards",
@@ -993,7 +1014,7 @@ async function makePrepareMint1155TokenParams({
993
1014
  address,
994
1015
  /* args: minter, tokenId, quantity, minterArguments, mintReferral */
995
1016
  args: [
996
- tokenFixedPriceMinter || zoraCreatorFixedPriceSaleStrategyAddress2[999],
1017
+ tokenFixedPriceMinter?.address || zoraCreatorFixedPriceSaleStrategyAddress2[999],
997
1018
  BigInt(mintable.token_id),
998
1019
  mintQuantity,
999
1020
  encodeAbiParameters(parseAbiParameters("address, string"), [
@@ -1027,7 +1048,7 @@ var DEFAULT_SALE_SETTINGS = {
1027
1048
  // 0 Here means no limit
1028
1049
  maxTokensPerAddress: 0n
1029
1050
  };
1030
- var PERMISSION_BIT_MINTER = 2n ** 2n;
1051
+ var PERMISSION_BIT_MINTER = 4n;
1031
1052
  function create1155TokenSetupArgs({
1032
1053
  nextTokenId,
1033
1054
  // How many NFTs upon initialization to mint to the creator
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts"],"sourcesContent":["import { createPublicClient, decodeEventLog, http } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport {\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { PremintConfig, preminterTypedDataDefinition } from \"./preminter\";\nimport type {\n PremintSignatureGetResponse,\n PremintSignatureResponse,\n} from \"./premint-api-client\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { REWARD_PER_TOKEN } from \"src/apis/chain-constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\n\ntype MintArgumentsSettings = {\n tokenURI: string;\n maxSupply?: bigint;\n maxTokensPerAddress?: bigint;\n pricePerToken?: bigint;\n mintStart?: bigint;\n mintDuration?: bigint;\n royaltyMintSchedule?: number;\n royaltyBPS?: number;\n royaltyRecipient?: Address;\n fixedPriceMinter?: Address;\n};\n\ntype PremintedLogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"Preminted\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n premint: PremintSignatureResponse;\n};\n\nexport const DefaultMintArguments = {\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\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): PremintedLogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"Preminted\",\n ...data,\n });\n if (decodedLog.eventName === \"Preminted\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\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 convertPremint = (\n premint: PremintSignatureGetResponse[\"premint\"],\n) => ({\n ...premint,\n tokenConfig: {\n ...premint.tokenConfig,\n fixedPriceMinter: premint.tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: premint.tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(premint.tokenConfig.maxSupply),\n pricePerToken: BigInt(premint.tokenConfig.pricePerToken),\n mintStart: BigInt(premint.tokenConfig.mintStart),\n mintDuration: BigInt(premint.tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(premint.tokenConfig.maxTokensPerAddress),\n },\n});\n\nexport const convertCollection = (\n collection: PremintSignatureGetResponse[\"collection\"],\n) => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert on-chain types for a premint to a server safe type\n *\n * @param premint Premint object from viem to convert to a JSON compatible type.\n * @returns JSON compatible premint\n */\nexport const encodePremintForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfig) => ({\n ...premint,\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\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * The premint executor address is deployed to the same address across all chains.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Executor address for premints\n */\n getExecutorAddress() {\n return zoraCreator1155PremintExecutorImplAddress[999];\n }\n\n /**\n * The fixed price minter address is the same across all chains for our current\n * deployer strategy.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Fixed price sale strategy\n */\n getFixedPriceMinterAddress() {\n return zoraCreatorFixedPriceSaleStrategyAddress[999];\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n token,\n account,\n }: {\n walletClient: WalletClient;\n uid: number;\n token: MintArgumentsSettings;\n account?: Account | Address;\n collection: Address;\n }): Promise<SignedPremintResponse> {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const convertedPremint = convertPremint(signatureResponse.premint);\n const signerData = {\n ...signatureResponse,\n premint: {\n ...convertedPremint,\n tokenConfig: {\n ...convertedPremint.tokenConfig,\n ...token,\n },\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: {\n ...signerData.collection,\n contractAdmin: signerData.collection.contractAdmin as Address,\n },\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const signerData = {\n ...signatureResponse,\n collection: convertCollection(signatureResponse.collection),\n premint: {\n ...convertPremint(signatureResponse.premint),\n deleted: true,\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: signerData.collection,\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint({\n walletClient,\n verifyingContract,\n premintConfig,\n uid,\n account,\n checkSignature,\n collection,\n }: {\n uid: number;\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n premintConfig: PremintConfig;\n collection: PremintSignatureGetResponse[\"collection\"];\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 ...preminterTypedDataDefinition({\n verifyingContract,\n premintConfig,\n chainId: this.chain.id,\n }),\n });\n\n if (checkSignature) {\n const [isValidSignature] = await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [convertCollection(collection), premintConfig, signature],\n });\n if (!isValidSignature) {\n throw new Error(\"Invalid signature\");\n }\n }\n\n const apiData = {\n collection,\n premint: encodePremintForAPI(premintConfig),\n signature: signature,\n };\n\n const premint = await this.apiClient.postSignature(apiData);\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n premint,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n * @param settings.publicClient Public client (optional) – instantiated if not passed in with defaults.\n * @param settings.walletClient Required wallet client for signing the premint message.\n * @param settings.executionSettings Execution settings for premint options\n * @param settings.executionSettings.deleted If this UID should be deleted. If omitted, set to false.\n * @param settings.executionSettings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint({\n account,\n collection,\n token,\n walletClient,\n executionSettings,\n checkSignature = false,\n }: {\n account: Address;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: PremintSignatureGetResponse[\"collection\"];\n token: MintArgumentsSettings;\n executionSettings?: {\n deleted?: boolean;\n uid?: number;\n };\n }) {\n const newContractAddress = await this.publicClient.readContract({\n address: this.getExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [convertCollection(collection)],\n });\n\n const tokenConfig = {\n ...DefaultMintArguments,\n fixedPriceMinter: this.getFixedPriceMinterAddress(),\n royaltyRecipient: account,\n ...token,\n };\n\n let uid = executionSettings?.uid;\n if (!uid) {\n const uidResponse = await this.apiClient.getNextUID({\n collection_address: newContractAddress.toLowerCase(),\n });\n uid = uidResponse.next_uid;\n }\n\n if (!uid) {\n throw new Error(\"UID is missing but required\");\n }\n\n let deleted = executionSettings?.deleted || false;\n\n const premintConfig = {\n tokenConfig: tokenConfig,\n uid,\n version: 1,\n deleted,\n };\n\n return await this.signAndSubmitPremint({\n uid,\n verifyingContract: newContractAddress,\n premintConfig,\n checkSignature,\n account,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintData({\n address,\n uid,\n }: {\n address: string;\n uid: number;\n }): Promise<PremintSignatureGetResponse> {\n return await this.apiClient.getSignature({\n collection_address: address,\n uid,\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, contractAddress = assumed contract address, recoveredSigner = signer from contract\n */\n async isValidSignature({\n data,\n }: {\n data: PremintSignatureGetResponse;\n }): Promise<{\n isValid: boolean;\n contractAddress: Address;\n recoveredSigner: Address;\n }> {\n const [isValid, contractAddress, recoveredSigner] =\n await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n ],\n });\n\n return { isValid, contractAddress, recoveredSigner };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\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(this.chain.id);\n\n return {\n explorer: tokenId\n ? `https://${this.chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n data,\n account,\n mintArguments,\n }: {\n data: PremintSignatureGetResponse;\n account: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const targetAddress = this.getExecutorAddress();\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n const args = [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n numberToMint,\n mintArguments?.mintComment || \"\",\n ] as const;\n\n if (!account) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const value = numberToMint * REWARD_PER_TOKEN;\n\n const request: SimulateContractParameters = {\n account,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: targetAddress,\n args,\n };\n\n return request;\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n","import { Address } from \"abitype\";\nimport { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/protocol-deployments\";\nimport { TypedDataDefinition } from \"viem\";\n\ntype PremintInputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premint\"\n>[\"inputs\"];\n\ntype PreminterHashDataTypes = AbiParametersToPrimitiveTypes<PremintInputs>;\n\nexport type ContractCreationConfig = PreminterHashDataTypes[0];\nexport type PremintConfig = PreminterHashDataTypes[1];\nexport type TokenCreationConfig = PremintConfig[\"tokenConfig\"];\n\n// Convenience method to create the structured typed data\n// needed to sign for a premint contract and token\nexport const preminterTypedDataDefinition = ({\n verifyingContract,\n premintConfig,\n chainId,\n}: {\n verifyingContract: Address;\n premintConfig: PremintConfig;\n chainId: number;\n}) => {\n const { tokenConfig, uid, version, deleted } = premintConfig;\n const types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n };\n\n const result: TypedDataDefinition<typeof types, \"CreatorAttribution\"> = {\n domain: {\n chainId,\n name: \"Preminter\",\n version: \"1\",\n verifyingContract: verifyingContract,\n },\n types,\n message: {\n tokenConfig,\n uid,\n version,\n deleted,\n },\n primaryType: \"CreatorAttribution\",\n };\n\n return result;\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","export 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","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\nexport type NetworkConfig = {\n chainId: number;\n zoraPathChainName: string;\n zoraBackendChainName: components[\"schemas\"][\"ChainName\"];\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const BackendChainNamesLookup = {\n ZORA_MAINNET: \"ZORA-MAINNET\",\n ZORA_GOERLI: \"ZORA-GOERLI\",\n OPTIMISM_MAINNET: \"OPTIMISM-MAINNET\",\n OPTIMISM_GOERLI: \"OPTIMISM-GOERLI\",\n ETHEREUM_MAINNET: \"ETHEREUM-MAINNET\",\n ETHEREUM_GOERLI: \"ETHEREUM-GOERLI\",\n BASE_MAINNET: \"BASE-MAINNET\",\n BASE_GOERLI: \"BASE-GOERLI\",\n} as const;\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraPathChainName: \"eth\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraPathChainName: \"gor\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraPathChainName: \"zora\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zora.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraPathChainName: \"opt\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"ogor\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraPathChainName: \"base\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"bgor\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { paths } from \"../apis/generated/discover-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { Address } from \"viem\";\n\nexport type MintableGetToken =\n paths[\"/mintables/{chain_name}/{collection_address}\"];\ntype MintableGetTokenPathParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"path\"];\ntype MintableGetTokenGetQueryParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"query\"];\nexport type MintableGetTokenResponse =\n MintableGetToken[\"get\"][\"responses\"][200][\"content\"][\"application/json\"];\n\nfunction encodeQueryParameters(params: Record<string, string>) {\n return new URLSearchParams(params).toString();\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 getMintable(\n path: MintableGetTokenPathParameters,\n query: MintableGetTokenGetQueryParameters,\n ): Promise<MintableGetTokenResponse> {\n const httpClient = this.httpClient;\n return httpClient.retries(() => {\n return httpClient.get<MintableGetTokenResponse>(\n `${ZORA_API_BASE}discover/mintables/${path.chain_name}/${\n path.collection_address\n }${query?.token_id ? `?${encodeQueryParameters(query)}` : \"\"}`,\n );\n });\n }\n\n async getSalesConfigFixedPrice({\n contractAddress,\n tokenId,\n }: {\n contractAddress: string;\n tokenId: bigint;\n }): Promise<undefined | string> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query:\n \"query($id: ID!) {\\n zoraCreateToken(id: $id) {\\n id\\n salesStrategies{\\n fixedPrice {\\n address\\n }\\n }\\n }\\n}\",\n variables: {\n id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`,\n },\n });\n return response.zoraCreateToken?.salesStrategies?.find(() => true)\n ?.fixedPriceMinterAddress;\n });\n }\n\n async getMintableForToken({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.getMintable(\n {\n chain_name: this.networkConfig.zoraBackendChainName,\n collection_address: tokenContract,\n },\n { token_id: tokenId?.toString() },\n );\n }\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\";\n\ntype SignaturePostType = paths[\"/signature\"][\"post\"];\ntype PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\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<PremintSignatureGetResponse> =>\n retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\ntype OmitChainName<T> = Omit<T, \"chain_name\">;\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 (\n data: OmitChainName<PremintSignatureRequestBody>,\n ): Promise<PremintSignatureResponse> =>\n postSignature({\n ...data,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getNextUID = async (\n path: OmitChainName<PremintNextUIDGetPathParameters>,\n ): Promise<PremintNextUIDGetResponse> =>\n getNextUID({\n ...path,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getSignature = async ({\n collection_address,\n uid,\n }: OmitChainName<PremintSignatureGetPathParameters>): Promise<PremintSignatureGetResponse> =>\n getSignature({\n collection_address,\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbi,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, MintableGetTokenResponse } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nconst 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\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Gets mintable information for a given token\n * @param param0.tokenContract The contract address of the token to mint.\n * @param param0.tokenId The token id to mint.\n * @returns\n */\n async getMintable({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.apiClient.getMintableForToken({\n tokenContract,\n tokenId: tokenId?.toString(),\n });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Returns the mintFee, sale fee, and total cost of minting x quantities of a token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.quantityToMint The quantity of tokens to mint.\n * @returns\n */\n async getMintCosts({\n mintable,\n quantityToMint,\n }: {\n mintable: Mintable;\n quantityToMint: number | bigint;\n }): Promise<MintCosts> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n if (mintContextType === \"zora_create_1155\") {\n return await get1155MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n if (mintContextType === \"zora_create\") {\n return await get721MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nfunction validateMintableAndGetContextType(\n mintable: MintableGetTokenResponse | undefined,\n) {\n if (!mintable) {\n throw new MintError(\"No mintable found\");\n }\n\n if (!mintable.is_active) {\n throw new MintInactiveError(\"Minting token is inactive\");\n }\n\n if (!mintable.mint_context) {\n throw new MintError(\"No minting context data from zora API\");\n }\n\n if (\n ![\"zora_create\", \"zora_create_1155\"].includes(\n mintable.mint_context?.mint_context_type!,\n )\n ) {\n throw new MintError(\n `Mintable type ${mintable.mint_context.mint_context_type} is currently unsupported.`,\n );\n }\n\n return mintable.mint_context.mint_context_type;\n}\n\nasync function makePrepareMintTokenParams({\n publicClient,\n mintable,\n apiClient,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n const thisPublicClient = publicClient;\n\n if (mintContextType === \"zora_create_1155\") {\n return makePrepareMint1155TokenParams({\n apiClient,\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n if (mintContextType === \"zora_create\") {\n return makePrepareMint721TokenParams({\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n}\n\nasync function get721MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const [_, mintFee] = await publicClient.readContract({\n abi: zora721Abi,\n address,\n functionName: \"zoraFeeForAmount\",\n args: [BigInt(quantityToMint)],\n });\n\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n return {\n mintFee,\n tokenPurchaseCost,\n totalCost: mintFee + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint721TokenParams({\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n publicClient: PublicClient;\n mintable: MintableGetTokenResponse;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n if (mintContextType !== \"zora_create\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintValue = (\n await get721MintCosts({\n mintable,\n publicClient,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n })\n ).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: mintable.contract_address as Address,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nasync function get1155MintFee({\n collectionAddress,\n publicClient,\n}: {\n collectionAddress: Address;\n publicClient: PublicClient;\n}) {\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"mintFee\",\n address: collectionAddress,\n });\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport async function get1155MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const mintFee = await get1155MintFee({\n collectionAddress: address,\n publicClient,\n });\n\n const mintFeeForTokens = mintFee * quantityToMint;\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n apiClient,\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n apiClient: Pick<MintAPIClient, \"getSalesConfigFixedPrice\">;\n publicClient: PublicClient;\n mintable: Mintable;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}) {\n if (mintContextType !== \"zora_create_1155\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const address = mintable.collection.address as Address;\n\n const mintValue = (\n await get1155MintCosts({\n mintable,\n publicClient,\n quantityToMint: mintQuantity,\n })\n ).totalCost;\n\n const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({\n contractAddress: address,\n tokenId: BigInt(mintable.token_id!),\n });\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (tokenFixedPriceMinter ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(mintable.token_id!),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n\nexport type Mintable = MintableGetTokenResponse;\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 2n ** 2n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n"],"mappings":"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","names":["httpClient","retries","post","post","retries","get","httpClient","httpClient","createPublicClient","http","zoraCreatorFixedPriceSaleStrategyAddress","httpClient","createPublicClient","http","zoraCreator1155ImplABI","decodeEventLog","zeroAddress","zeroAddress","zoraCreator1155ImplABI","decodeEventLog"]}
1
+ {"version":3,"sources":["../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/premint-api-client.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts"],"sourcesContent":["import { createPublicClient, decodeEventLog, http } from \"viem\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n WalletClient,\n} from \"viem\";\nimport {\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { PremintConfig, preminterTypedDataDefinition } from \"./preminter\";\nimport type {\n PremintSignatureGetResponse,\n PremintSignatureResponse,\n} from \"./premint-api-client\";\nimport { PremintAPIClient } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { REWARD_PER_TOKEN } from \"src/apis/chain-constants\";\nimport { IHttpClient } from \"src/apis/http-api-base\";\nimport { getApiNetworkConfigForChain } from \"src/mint/mint-api-client\";\n\ntype MintArgumentsSettings = {\n tokenURI: string;\n maxSupply?: bigint;\n maxTokensPerAddress?: bigint;\n pricePerToken?: bigint;\n mintStart?: bigint;\n mintDuration?: bigint;\n royaltyMintSchedule?: number;\n royaltyBPS?: number;\n royaltyRecipient?: Address;\n fixedPriceMinter?: Address;\n};\n\ntype PremintedLogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"Preminted\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\ntype SignedPremintResponse = {\n urls: URLSReturnType;\n uid: number;\n verifyingContract: Address;\n premint: PremintSignatureResponse;\n};\n\nexport const DefaultMintArguments = {\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\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): PremintedLogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"Preminted\",\n ...data,\n });\n if (decodedLog.eventName === \"Preminted\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\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 convertPremint = (\n premint: PremintSignatureGetResponse[\"premint\"],\n) => ({\n ...premint,\n tokenConfig: {\n ...premint.tokenConfig,\n fixedPriceMinter: premint.tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: premint.tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(premint.tokenConfig.maxSupply),\n pricePerToken: BigInt(premint.tokenConfig.pricePerToken),\n mintStart: BigInt(premint.tokenConfig.mintStart),\n mintDuration: BigInt(premint.tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(premint.tokenConfig.maxTokensPerAddress),\n },\n});\n\nexport const convertCollection = (\n collection: PremintSignatureGetResponse[\"collection\"],\n) => ({\n ...collection,\n contractAdmin: collection.contractAdmin as Address,\n});\n\n/**\n * Convert on-chain types for a premint to a server safe type\n *\n * @param premint Premint object from viem to convert to a JSON compatible type.\n * @returns JSON compatible premint\n */\nexport const encodePremintForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfig) => ({\n ...premint,\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\n/**\n * Preminter API to access ZORA Premint functionality.\n * Currently only supports V1 premints.\n */\nclass PremintClient {\n readonly apiClient: PremintAPIClient;\n readonly publicClient: PublicClient;\n readonly chain: Chain;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.chain = chain;\n this.apiClient = new PremintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * The premint executor address is deployed to the same address across all chains.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Executor address for premints\n */\n getExecutorAddress() {\n return zoraCreator1155PremintExecutorImplAddress[999];\n }\n\n /**\n * The fixed price minter address is the same across all chains for our current\n * deployer strategy.\n * Can be overridden as needed by making a parent class.\n *\n * @returns Fixed price sale strategy\n */\n getFixedPriceMinterAddress() {\n return zoraCreatorFixedPriceSaleStrategyAddress[999];\n }\n\n getDataFromPremintReceipt(receipt: TransactionReceipt) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n premintedLog,\n urls: this.makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n }),\n };\n }\n\n /**\n * Update existing premint given collection address and UID of existing premint.\n *\n * 1. Loads existing premint token\n * 2. Updates with settings passed into function\n * 3. Increments the version field\n * 4. Re-signs the premint\n * 5. Uploads the premint to the ZORA API\n *\n * Updates existing premint\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint update from. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.walletClient viem wallet client to use to sign\n * @param settings.uid UID\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n *\n */\n async updatePremint({\n walletClient,\n uid,\n collection,\n token,\n account,\n }: {\n walletClient: WalletClient;\n uid: number;\n token: MintArgumentsSettings;\n account?: Account | Address;\n collection: Address;\n }): Promise<SignedPremintResponse> {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const convertedPremint = convertPremint(signatureResponse.premint);\n const signerData = {\n ...signatureResponse,\n premint: {\n ...convertedPremint,\n tokenConfig: {\n ...convertedPremint.tokenConfig,\n ...token,\n },\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: {\n ...signerData.collection,\n contractAdmin: signerData.collection.contractAdmin as Address,\n },\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Delete premint.\n *\n * 1. Loads current premint from collection address with UID\n * 2. Increments version and marks as deleted\n * 3. Signs new premint version\n * 4. Sends to ZORA Premint API\n *\n * Deletes existing premint\n * @param settings.collection collection address\n * @param settings.uid UID\n * @param settings.walletClient viem wallet client to use to sign\n *\n */\n async deletePremint({\n walletClient,\n uid,\n account,\n collection,\n }: {\n walletClient: WalletClient;\n uid: number;\n account?: Account | Address;\n collection: Address;\n }) {\n const signatureResponse = await this.apiClient.getSignature({\n collection_address: collection.toLowerCase(),\n uid: uid,\n });\n\n const signerData = {\n ...signatureResponse,\n collection: convertCollection(signatureResponse.collection),\n premint: {\n ...convertPremint(signatureResponse.premint),\n deleted: true,\n },\n };\n\n return await this.signAndSubmitPremint({\n walletClient,\n account,\n checkSignature: false,\n verifyingContract: collection,\n uid: uid,\n collection: signerData.collection,\n premintConfig: signerData.premint,\n });\n }\n\n /**\n * Internal function to sign and submit a premint request.\n *\n * @param premintArguments Arguments to premint\n * @returns\n */\n private async signAndSubmitPremint({\n walletClient,\n verifyingContract,\n premintConfig,\n uid,\n account,\n checkSignature,\n collection,\n }: {\n uid: number;\n walletClient: WalletClient;\n verifyingContract: Address;\n checkSignature: boolean;\n account?: Address | Account;\n premintConfig: PremintConfig;\n collection: PremintSignatureGetResponse[\"collection\"];\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 ...preminterTypedDataDefinition({\n verifyingContract,\n premintConfig,\n chainId: this.chain.id,\n }),\n });\n\n if (checkSignature) {\n const [isValidSignature] = await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [convertCollection(collection), premintConfig, signature],\n });\n if (!isValidSignature) {\n throw new Error(\"Invalid signature\");\n }\n }\n\n const apiData = {\n collection,\n premint: encodePremintForAPI(premintConfig),\n signature: signature,\n };\n\n const premint = await this.apiClient.postSignature(apiData);\n\n return {\n urls: this.makeUrls({ address: verifyingContract, uid }),\n uid,\n verifyingContract,\n premint,\n };\n }\n\n /**\n * Create premint\n *\n * @param settings Settings for the new premint\n * @param settings.account Account to sign the premint with. Taken from walletClient if none passed in.\n * @param settings.collection Collection information for the mint\n * @param settings.token Mint argument settings, optional settings are overridden with sensible defaults.\n * @param settings.publicClient Public client (optional) – instantiated if not passed in with defaults.\n * @param settings.walletClient Required wallet client for signing the premint message.\n * @param settings.executionSettings Execution settings for premint options\n * @param settings.executionSettings.deleted If this UID should be deleted. If omitted, set to false.\n * @param settings.executionSettings.uid the UID to use – optional and retrieved as a fresh UID from ZORA by default.\n * @param settings.checkSignature if the signature should have a pre-flight check. Not required but helpful for debugging.\n * @returns premint url, uid, newContractAddress, and premint object\n */\n async createPremint({\n account,\n collection,\n token,\n walletClient,\n executionSettings,\n checkSignature = false,\n }: {\n account: Address;\n checkSignature?: boolean;\n walletClient: WalletClient;\n collection: PremintSignatureGetResponse[\"collection\"];\n token: MintArgumentsSettings;\n executionSettings?: {\n deleted?: boolean;\n uid?: number;\n };\n }) {\n const newContractAddress = await this.publicClient.readContract({\n address: this.getExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractAddress\",\n args: [convertCollection(collection)],\n });\n\n const tokenConfig = {\n ...DefaultMintArguments,\n fixedPriceMinter: this.getFixedPriceMinterAddress(),\n royaltyRecipient: account,\n ...token,\n };\n\n let uid = executionSettings?.uid;\n if (!uid) {\n const uidResponse = await this.apiClient.getNextUID({\n collection_address: newContractAddress.toLowerCase(),\n });\n uid = uidResponse.next_uid;\n }\n\n if (!uid) {\n throw new Error(\"UID is missing but required\");\n }\n\n let deleted = executionSettings?.deleted || false;\n\n const premintConfig = {\n tokenConfig: tokenConfig,\n uid,\n version: 1,\n deleted,\n };\n\n return await this.signAndSubmitPremint({\n uid,\n verifyingContract: newContractAddress,\n premintConfig,\n checkSignature,\n account,\n walletClient,\n collection,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremintData({\n address,\n uid,\n }: {\n address: string;\n uid: number;\n }): Promise<PremintSignatureGetResponse> {\n return await this.apiClient.getSignature({\n collection_address: address,\n uid,\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, contractAddress = assumed contract address, recoveredSigner = signer from contract\n */\n async isValidSignature({\n data,\n }: {\n data: PremintSignatureGetResponse;\n }): Promise<{\n isValid: boolean;\n contractAddress: Address;\n recoveredSigner: Address;\n }> {\n const [isValid, contractAddress, recoveredSigner] =\n await this.publicClient.readContract({\n abi: zoraCreator1155PremintExecutorImplABI,\n address: this.getExecutorAddress(),\n functionName: \"isValidSignature\",\n args: [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n ],\n });\n\n return { isValid, contractAddress, recoveredSigner };\n }\n\n protected makeUrls({\n uid,\n address,\n tokenId,\n }: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\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(this.chain.id);\n\n return {\n explorer: tokenId\n ? `https://${this.chain.blockExplorers?.default.url}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n }\n\n /**\n * Execute premint on-chain\n *\n * @param settings.data Data from the API for the mint\n * @param settings.account Optional account (if omitted taken from wallet client) for the account executing the premint.\n * @param settings.walletClient WalletClient to send execution from.\n * @param settings.mintArguments User minting arguments.\n * @param settings.mintArguments.quantityToMint Quantity to mint, optional, defaults to 1.\n * @param settings.mintArguments.mintComment Optional mint comment, optional, omits when not included.\n * @param settings.publicClient Optional public client for preflight checks.\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n data,\n account,\n mintArguments,\n }: {\n data: PremintSignatureGetResponse;\n account: Account | Address;\n mintArguments?: {\n quantityToMint: number;\n mintComment?: string;\n };\n }): Promise<SimulateContractParameters> {\n if (mintArguments && mintArguments?.quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const targetAddress = this.getExecutorAddress();\n const numberToMint = BigInt(mintArguments?.quantityToMint || 1);\n const args = [\n convertCollection(data.collection),\n convertPremint(data.premint),\n data.signature as Hex,\n numberToMint,\n mintArguments?.mintComment || \"\",\n ] as const;\n\n if (!account) {\n throw new Error(\"Wallet not passed in\");\n }\n\n const value = numberToMint * REWARD_PER_TOKEN;\n\n const request: SimulateContractParameters = {\n account,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: targetAddress,\n args,\n };\n\n return request;\n }\n}\n\nexport function createPremintClient({\n chain,\n httpClient,\n publicClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new PremintClient(chain, publicClient, httpClient);\n}\n","import { Address } from \"abitype\";\nimport { ExtractAbiFunction, AbiParametersToPrimitiveTypes } from \"abitype\";\nimport { zoraCreator1155PremintExecutorImplABI as preminterAbi } from \"@zoralabs/protocol-deployments\";\nimport { TypedDataDefinition } from \"viem\";\n\ntype PremintInputs = ExtractAbiFunction<\n typeof preminterAbi,\n \"premint\"\n>[\"inputs\"];\n\ntype PreminterHashDataTypes = AbiParametersToPrimitiveTypes<PremintInputs>;\n\nexport type ContractCreationConfig = PreminterHashDataTypes[0];\nexport type PremintConfig = PreminterHashDataTypes[1];\nexport type TokenCreationConfig = PremintConfig[\"tokenConfig\"];\n\n// Convenience method to create the structured typed data\n// needed to sign for a premint contract and token\nexport const preminterTypedDataDefinition = ({\n verifyingContract,\n premintConfig,\n chainId,\n}: {\n verifyingContract: Address;\n premintConfig: PremintConfig;\n chainId: number;\n}) => {\n const { tokenConfig, uid, version, deleted } = premintConfig;\n const types = {\n CreatorAttribution: [\n { name: \"tokenConfig\", type: \"TokenCreationConfig\" },\n // unique id scoped to the contract and token to create.\n // ensure that a signature can be replaced, as long as the replacement\n // has the same uid, and a newer version.\n { name: \"uid\", type: \"uint32\" },\n { name: \"version\", type: \"uint32\" },\n // if this update should result in the signature being deleted.\n { name: \"deleted\", type: \"bool\" },\n ],\n TokenCreationConfig: [\n { name: \"tokenURI\", type: \"string\" },\n { name: \"maxSupply\", type: \"uint256\" },\n { name: \"maxTokensPerAddress\", type: \"uint64\" },\n { name: \"pricePerToken\", type: \"uint96\" },\n { name: \"mintStart\", type: \"uint64\" },\n { name: \"mintDuration\", type: \"uint64\" },\n { name: \"royaltyMintSchedule\", type: \"uint32\" },\n { name: \"royaltyBPS\", type: \"uint32\" },\n { name: \"royaltyRecipient\", type: \"address\" },\n { name: \"fixedPriceMinter\", type: \"address\" },\n ],\n };\n\n const result: TypedDataDefinition<typeof types, \"CreatorAttribution\"> = {\n domain: {\n chainId,\n name: \"Preminter\",\n version: \"1\",\n verifyingContract: verifyingContract,\n },\n types,\n message: {\n tokenConfig,\n uid,\n version,\n deleted,\n },\n primaryType: \"CreatorAttribution\",\n };\n\n return result;\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","export 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","import {\n base,\n baseGoerli,\n foundry,\n goerli,\n mainnet,\n optimism,\n optimismGoerli,\n zora,\n zoraTestnet,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\nexport type NetworkConfig = {\n chainId: number;\n zoraPathChainName: string;\n zoraBackendChainName: components[\"schemas\"][\"ChainName\"];\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const BackendChainNamesLookup = {\n ZORA_MAINNET: \"ZORA-MAINNET\",\n ZORA_GOERLI: \"ZORA-GOERLI\",\n OPTIMISM_MAINNET: \"OPTIMISM-MAINNET\",\n OPTIMISM_GOERLI: \"OPTIMISM-GOERLI\",\n ETHEREUM_MAINNET: \"ETHEREUM-MAINNET\",\n ETHEREUM_GOERLI: \"ETHEREUM-GOERLI\",\n BASE_MAINNET: \"BASE-MAINNET\",\n BASE_GOERLI: \"BASE-GOERLI\",\n} as const;\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraPathChainName: \"eth\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [goerli.id]: {\n chainId: goerli.id,\n isTestnet: true,\n zoraPathChainName: \"gor\",\n zoraBackendChainName: BackendChainNamesLookup.ETHEREUM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-goerli\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraPathChainName: \"zora\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraTestnet.id]: {\n chainId: zora.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraPathChainName: \"opt\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [optimismGoerli.id]: {\n chainId: optimismGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"ogor\",\n zoraBackendChainName: BackendChainNamesLookup.OPTIMISM_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-optimism-goerli\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraPathChainName: \"base\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_MAINNET,\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseGoerli.id]: {\n chainId: baseGoerli.id,\n isTestnet: true,\n zoraPathChainName: \"bgor\",\n zoraBackendChainName: BackendChainNamesLookup.BASE_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-base-goerli\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraPathChainName: \"zgor\",\n zoraBackendChainName: BackendChainNamesLookup.ZORA_GOERLI,\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n","import {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { paths } from \"../apis/generated/discover-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { Address } from \"viem\";\n\nexport type MintableGetToken =\n paths[\"/mintables/{chain_name}/{collection_address}\"];\ntype MintableGetTokenPathParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"path\"];\ntype MintableGetTokenGetQueryParameters =\n MintableGetToken[\"get\"][\"parameters\"][\"query\"];\nexport type MintableGetTokenResponse =\n MintableGetToken[\"get\"][\"responses\"][200][\"content\"][\"application/json\"];\n\nfunction encodeQueryParameters(params: Record<string, string>) {\n return new URLSearchParams(params).toString();\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 getMintable(\n path: MintableGetTokenPathParameters,\n query: MintableGetTokenGetQueryParameters,\n ): Promise<MintableGetTokenResponse> {\n const httpClient = this.httpClient;\n return httpClient.retries(() => {\n return httpClient.get<MintableGetTokenResponse>(\n `${ZORA_API_BASE}discover/mintables/${path.chain_name}/${\n path.collection_address\n }${query?.token_id ? `?${encodeQueryParameters(query)}` : \"\"}`,\n );\n });\n }\n\n async getSalesConfigFixedPrice({\n contractAddress,\n tokenId,\n }: {\n contractAddress: string;\n tokenId: bigint;\n }): Promise<undefined | { address: Address; pricePerToken: bigint }> {\n const { retries, post } = this.httpClient;\n return retries(async () => {\n const response = await post<any>(this.networkConfig.subgraphUrl, {\n query: `query ($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n salesStrategies(where: {type: \"FIXED_PRICE\"}) {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n }\n }\n }`,\n variables: {\n id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`,\n },\n });\n\n const fixedPrice: {\n address: Address;\n pricePerToken: string;\n } = response.data?.zoraCreateToken?.salesStrategies?.find(() => true)\n ?.fixedPrice;\n\n return {\n address: fixedPrice.address as Address,\n pricePerToken: BigInt(fixedPrice.pricePerToken),\n };\n });\n }\n\n async getMintableForToken({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.getMintable(\n {\n chain_name: this.networkConfig.zoraBackendChainName,\n collection_address: tokenContract,\n },\n { token_id: tokenId?.toString() },\n );\n }\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\";\n\ntype SignaturePostType = paths[\"/signature\"][\"post\"];\ntype PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\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<PremintSignatureGetResponse> =>\n retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chain_name}/${collection_address}/${uid}`,\n ),\n );\n\ntype OmitChainName<T> = Omit<T, \"chain_name\">;\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 (\n data: OmitChainName<PremintSignatureRequestBody>,\n ): Promise<PremintSignatureResponse> =>\n postSignature({\n ...data,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getNextUID = async (\n path: OmitChainName<PremintNextUIDGetPathParameters>,\n ): Promise<PremintNextUIDGetResponse> =>\n getNextUID({\n ...path,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n\n getSignature = async ({\n collection_address,\n uid,\n }: OmitChainName<PremintSignatureGetPathParameters>): Promise<PremintSignatureGetResponse> =>\n getSignature({\n collection_address,\n uid,\n chain_name: this.networkConfig.zoraBackendChainName,\n httpClient: this.httpClient,\n });\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n Chain,\n PublicClient,\n createPublicClient,\n encodeAbiParameters,\n parseAbi,\n parseAbiParameters,\n zeroAddress,\n http,\n} from \"viem\";\nimport { IHttpClient } from \"../apis/http-api-base\";\nimport { MintAPIClient, MintableGetTokenResponse } from \"./mint-api-client\";\nimport { SimulateContractParameters } from \"viem\";\nimport {\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\ntype MintArguments = {\n quantityToMint: number;\n mintComment?: string;\n mintReferral?: Address;\n mintToAddress: Address;\n};\n\nconst 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\nclass MintClient {\n readonly apiClient: MintAPIClient;\n readonly publicClient: PublicClient;\n\n constructor(\n chain: Chain,\n publicClient?: PublicClient,\n httpClient?: IHttpClient,\n ) {\n this.apiClient = new MintAPIClient(chain.id, httpClient);\n this.publicClient =\n publicClient || createPublicClient({ chain, transport: http() });\n }\n\n /**\n * Gets mintable information for a given token\n * @param param0.tokenContract The contract address of the token to mint.\n * @param param0.tokenId The token id to mint.\n * @returns\n */\n async getMintable({\n tokenContract,\n tokenId,\n }: {\n tokenContract: Address;\n tokenId?: bigint | number | string;\n }) {\n return await this.apiClient.getMintableForToken({\n tokenContract,\n tokenId: tokenId?.toString(),\n });\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * @param param0.minterAccount The account that will mint the token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.mintArguments The arguments for the mint (mint recipient, comment, mint referral, quantity to mint)\n * @returns\n */\n async makePrepareMintTokenParams({\n ...rest\n }: {\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n }): Promise<SimulateContractParameters> {\n return makePrepareMintTokenParams({\n ...rest,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Returns the mintFee, sale fee, and total cost of minting x quantities of a token.\n * @param param0.mintable The mintable token to mint.\n * @param param0.quantityToMint The quantity of tokens to mint.\n * @returns\n */\n async getMintCosts({\n mintable,\n quantityToMint,\n }: {\n mintable: Mintable;\n quantityToMint: number | bigint;\n }): Promise<MintCosts> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n if (mintContextType === \"zora_create_1155\") {\n return await get1155MintCosts({\n mintable,\n price: BigInt(mintable.cost.native_price.raw),\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n if (mintContextType === \"zora_create\") {\n return await get721MintCosts({\n mintable,\n publicClient: this.publicClient,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n }\n}\n\n/**\n * Creates a new MintClient.\n * @param param0.chain The chain to use for the mint client.\n * @param param0.publicClient Optional viem public client\n * @param param0.httpClient Optional http client to override post, get, and retry methods\n * @returns\n */\nexport function createMintClient({\n chain,\n publicClient,\n httpClient,\n}: {\n chain: Chain;\n publicClient?: PublicClient;\n httpClient?: IHttpClient;\n}) {\n return new MintClient(chain, publicClient, httpClient);\n}\n\nexport type TMintClient = ReturnType<typeof createMintClient>;\n\nfunction validateMintableAndGetContextType(\n mintable: MintableGetTokenResponse | undefined,\n) {\n if (!mintable) {\n throw new MintError(\"No mintable found\");\n }\n\n if (!mintable.is_active) {\n throw new MintInactiveError(\"Minting token is inactive\");\n }\n\n if (!mintable.mint_context) {\n throw new MintError(\"No minting context data from zora API\");\n }\n\n if (\n ![\"zora_create\", \"zora_create_1155\"].includes(\n mintable.mint_context?.mint_context_type!,\n )\n ) {\n throw new MintError(\n `Mintable type ${mintable.mint_context.mint_context_type} is currently unsupported.`,\n );\n }\n\n return mintable.mint_context.mint_context_type;\n}\n\nasync function makePrepareMintTokenParams({\n publicClient,\n mintable,\n apiClient,\n ...rest\n}: {\n publicClient: PublicClient;\n minterAccount: Address;\n mintable: MintableGetTokenResponse;\n mintArguments: MintArguments;\n apiClient: MintAPIClient;\n}): Promise<SimulateContractParameters> {\n const mintContextType = validateMintableAndGetContextType(mintable);\n\n const thisPublicClient = publicClient;\n\n if (mintContextType === \"zora_create_1155\") {\n return makePrepareMint1155TokenParams({\n apiClient,\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n if (mintContextType === \"zora_create\") {\n return makePrepareMint721TokenParams({\n publicClient: thisPublicClient,\n mintable,\n mintContextType,\n ...rest,\n });\n }\n\n throw new MintError(\n `Mintable type ${mintContextType} is currently unsupported.`,\n );\n}\n\nasync function get721MintCosts({\n mintable,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const [_, mintFee] = await publicClient.readContract({\n abi: zora721Abi,\n address,\n functionName: \"zoraFeeForAmount\",\n args: [BigInt(quantityToMint)],\n });\n\n const tokenPurchaseCost =\n BigInt(mintable.cost.native_price.raw) * quantityToMint;\n return {\n mintFee,\n tokenPurchaseCost,\n totalCost: mintFee + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint721TokenParams({\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n publicClient: PublicClient;\n mintable: MintableGetTokenResponse;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}): Promise<SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">> {\n if (mintContextType !== \"zora_create\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintValue = (\n await get721MintCosts({\n mintable,\n publicClient,\n quantityToMint: BigInt(mintArguments.quantityToMint),\n })\n ).totalCost;\n\n const result = {\n abi: zora721Abi,\n address: mintable.contract_address as Address,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintArguments.mintToAddress,\n BigInt(mintArguments.quantityToMint),\n mintArguments.mintComment || \"\",\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<typeof zora721Abi, \"mintWithRewards\">;\n\n return result;\n}\n\nasync function get1155MintFee({\n collectionAddress,\n publicClient,\n}: {\n collectionAddress: Address;\n publicClient: PublicClient;\n}) {\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"mintFee\",\n address: collectionAddress,\n });\n}\n\nexport type MintCosts = {\n mintFee: bigint;\n tokenPurchaseCost: bigint;\n totalCost: bigint;\n};\n\nexport async function get1155MintCosts({\n mintable,\n price,\n publicClient,\n quantityToMint,\n}: {\n mintable: MintableGetTokenResponse;\n price: bigint;\n publicClient: PublicClient;\n quantityToMint: bigint;\n}): Promise<MintCosts> {\n const address = mintable.collection.address as Address;\n\n const mintFee = await get1155MintFee({\n collectionAddress: address,\n publicClient,\n });\n\n const mintFeeForTokens = mintFee * quantityToMint;\n const tokenPurchaseCost = price * quantityToMint;\n\n return {\n mintFee: mintFeeForTokens,\n tokenPurchaseCost,\n totalCost: mintFeeForTokens + tokenPurchaseCost,\n };\n}\n\nasync function makePrepareMint1155TokenParams({\n apiClient,\n publicClient,\n minterAccount,\n mintable,\n mintContextType,\n mintArguments,\n}: {\n apiClient: Pick<MintAPIClient, \"getSalesConfigFixedPrice\">;\n publicClient: PublicClient;\n mintable: Mintable;\n mintContextType: ReturnType<typeof validateMintableAndGetContextType>;\n minterAccount: Address;\n mintArguments: MintArguments;\n}) {\n if (mintContextType !== \"zora_create_1155\") {\n throw new Error(\"Minted token type must be for 1155\");\n }\n\n const mintQuantity = BigInt(mintArguments.quantityToMint);\n\n const address = mintable.collection.address as Address;\n\n const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({\n contractAddress: address,\n tokenId: BigInt(mintable.token_id!),\n });\n\n const mintValue = (\n await get1155MintCosts({\n mintable,\n price:\n tokenFixedPriceMinter?.pricePerToken ||\n BigInt(mintable.cost.native_price.raw),\n publicClient,\n quantityToMint: mintQuantity,\n })\n ).totalCost;\n\n const result = {\n abi: zoraCreator1155ImplABI,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n (tokenFixedPriceMinter?.address ||\n zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,\n BigInt(mintable.token_id!),\n mintQuantity,\n encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintArguments.mintToAddress,\n mintArguments.mintComment || \"\",\n ]),\n mintArguments.mintReferral || zeroAddress,\n ],\n } satisfies SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"mintWithRewards\"\n >;\n\n return result;\n}\n\nexport type Mintable = MintableGetTokenResponse;\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog, encodeFunctionData, zeroAddress } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\n\n// Sales end forever amount (uint64 max)\nconst SALE_END_FOREVER = 18446744073709551615n;\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\ntype SalesConfigParamsType = {\n // defaults to 0\n pricePerToken?: bigint;\n // defaults to 0, in seconds\n saleStart?: bigint;\n // defaults to forever, in seconds\n saleEnd?: bigint;\n // max tokens that can be minted per address\n maxTokensPerAddress?: bigint;\n fundsRecipient?: Address;\n};\n\nexport const DEFAULT_SALE_SETTINGS = {\n fundsRecipient: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n};\n\n// Hardcode the permission bit for the minter\nconst PERMISSION_BIT_MINTER = 4n;\n\ntype ContractType =\n | {\n name: string;\n uri: string;\n defaultAdmin?: Address;\n }\n | Address;\n\ntype RoyaltySettingsType = {\n royaltyBPS: number;\n royaltyRecipient: Address;\n};\n\nexport function create1155TokenSetupArgs({\n nextTokenId,\n // How many NFTs upon initialization to mint to the creator\n mintToCreatorCount,\n tokenMetadataURI,\n // Fixed price minter address – required minter\n fixedPriceMinterAddress,\n // Address to use as the create referral, optional.\n createReferral,\n // Optional max supply of the token. Default unlimited\n maxSupply,\n // wallet sending the transaction\n account,\n salesConfig,\n royaltySettings,\n}: {\n maxSupply?: bigint | number;\n createReferral?: Address;\n nextTokenId: bigint;\n mintToCreatorCount: bigint | number;\n // wallet sending the transaction\n account: Address;\n tokenMetadataURI: string;\n fixedPriceMinterAddress: Address;\n salesConfig: SalesConfigParamsType;\n royaltySettings?: RoyaltySettingsType;\n}) {\n if (!maxSupply) {\n maxSupply = OPEN_EDITION_MINT_SIZE;\n }\n maxSupply = BigInt(maxSupply);\n mintToCreatorCount = BigInt(mintToCreatorCount);\n\n const salesConfigWithDefaults = {\n // Set static sales default.\n ...DEFAULT_SALE_SETTINGS,\n // Override with user settings.\n ...salesConfig,\n };\n\n const setupActions = [\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n }),\n createReferral\n ? encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenMetadataURI, maxSupply, createReferral],\n })\n : encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenMetadataURI, maxSupply],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [0n, fixedPriceMinterAddress, PERMISSION_BIT_MINTER],\n }),\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [\n nextTokenId,\n fixedPriceMinterAddress,\n encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [nextTokenId, salesConfigWithDefaults],\n }),\n ],\n }),\n ];\n\n if (mintToCreatorCount) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [account, nextTokenId, mintToCreatorCount, \"0x\"],\n }),\n );\n }\n\n if (royaltySettings) {\n setupActions.push(\n encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n ],\n }),\n );\n }\n\n return setupActions;\n}\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\nasync function getContractExists(\n publicClient: PublicClient,\n contract: ContractType,\n // Account that is the creator of the contract\n account: Address,\n) {\n let contractAddress;\n let contractExists = false;\n if (typeof contract !== \"string\") {\n contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n try {\n await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n }\n return { contractAddress, contractExists };\n }\n\n return {\n contractExists: true,\n contractAddress: contract,\n };\n}\n\ntype CreateNew1155TokenReturn = {\n request: SimulateContractParameters;\n tokenSetupActions: Hex[];\n contractAddress: Address;\n contractExists: boolean;\n};\n\nexport function create1155CreatorClient({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n async function createNew1155Token({\n contract,\n tokenMetadataURI,\n mintToCreatorCount = 1,\n salesConfig = {},\n maxSupply,\n account,\n royaltySettings,\n getAdditionalSetupActions,\n }: {\n account: Address;\n maxSupply?: bigint | number;\n royaltySettings?: RoyaltySettingsType;\n royaltyBPS?: number;\n contract: ContractType;\n tokenMetadataURI: string;\n mintToCreatorCount?: bigint | number;\n salesConfig?: SalesConfigParamsType;\n getAdditionalSetupActions?: (args: {\n tokenId: bigint;\n contractAddress: Address;\n }) => Hex[];\n }): Promise<CreateNew1155TokenReturn> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const { contractExists, contractAddress } = await getContractExists(\n publicClient,\n contract,\n account,\n );\n\n // Assume the next token id is the first token available for a new contract.\n let nextTokenId = 1n;\n\n if (contractExists) {\n nextTokenId = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n address: contractAddress,\n });\n }\n\n // Get the fixed price minter to use within the new token to set the sales configuration.\n const fixedPriceMinterAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address: zoraCreator1155FactoryImplAddress[999],\n functionName: \"fixedPriceMinter\",\n });\n\n let tokenSetupActions = create1155TokenSetupArgs({\n tokenMetadataURI,\n nextTokenId,\n salesConfig,\n maxSupply,\n fixedPriceMinterAddress,\n account,\n mintToCreatorCount,\n royaltySettings,\n });\n if (getAdditionalSetupActions) {\n tokenSetupActions = [\n ...getAdditionalSetupActions({ tokenId: nextTokenId, contractAddress }),\n ...tokenSetupActions,\n ];\n }\n\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n if (!contractExists && typeof contract !== \"string\") {\n const request: SimulateContractParameters<\n typeof zoraCreator1155FactoryImplABI,\n \"createContractDeterministic\"\n > = {\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltySettings?.royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: royaltySettings?.royaltyRecipient || account,\n },\n contract.defaultAdmin || account,\n tokenSetupActions,\n ],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n } else if (contractExists) {\n const request: SimulateContractParameters<\n typeof zoraCreator1155ImplABI,\n \"multicall\"\n > = {\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n };\n return {\n request,\n tokenSetupActions,\n contractAddress,\n contractExists,\n };\n }\n throw new Error(\"Unsupported contract argument type\");\n }\n return { createNew1155Token };\n}\n"],"mappings":"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","names":["httpClient","retries","post","post","retries","get","httpClient","httpClient","createPublicClient","http","zoraCreatorFixedPriceSaleStrategyAddress","httpClient","createPublicClient","http","zoraCreator1155ImplABI","decodeEventLog","zeroAddress","zeroAddress","zoraCreator1155ImplABI","decodeEventLog"]}
@@ -15,7 +15,10 @@ export declare class MintAPIClient {
15
15
  getSalesConfigFixedPrice({ contractAddress, tokenId, }: {
16
16
  contractAddress: string;
17
17
  tokenId: bigint;
18
- }): Promise<undefined | string>;
18
+ }): Promise<undefined | {
19
+ address: Address;
20
+ pricePerToken: bigint;
21
+ }>;
19
22
  getMintableForToken({ tokenContract, tokenId, }: {
20
23
  tokenContract: Address;
21
24
  tokenId?: bigint | number | string;
@@ -1 +1 @@
1
- {"version":3,"file":"mint-api-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GAC1B,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACxD,KAAK,8BAA8B,GACjC,gBAAgB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,KAAK,kCAAkC,GACrC,gBAAgB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AACjD,MAAM,MAAM,wBAAwB,GAClC,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAM3E,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAEF,qBAAa,aAAa;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW;IAK/C,WAAW,CACf,IAAI,EAAE,8BAA8B,EACpC,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,wBAAwB,CAAC;IAW9B,wBAAwB,CAAC,EAC7B,eAAe,EACf,OAAO,GACR,EAAE;QACD,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IAezB,mBAAmB,CAAC,EACxB,aAAa,EACb,OAAO,GACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASF"}
1
+ {"version":3,"file":"mint-api-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GAC1B,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACxD,KAAK,8BAA8B,GACjC,gBAAgB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,KAAK,kCAAkC,GACrC,gBAAgB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AACjD,MAAM,MAAM,wBAAwB,GAClC,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAM3E,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAEF,qBAAa,aAAa;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW;IAK/C,WAAW,CACf,IAAI,EAAE,8BAA8B,EACpC,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,wBAAwB,CAAC;IAW9B,wBAAwB,CAAC,EAC7B,eAAe,EACf,OAAO,GACR,EAAE;QACD,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,SAAS,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAqC9D,mBAAmB,CAAC,EACxB,aAAa,EACb,OAAO,GACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASF"}
@@ -270,8 +270,9 @@ export type MintCosts = {
270
270
  tokenPurchaseCost: bigint;
271
271
  totalCost: bigint;
272
272
  };
273
- export declare function get1155MintCosts({ mintable, publicClient, quantityToMint, }: {
273
+ export declare function get1155MintCosts({ mintable, price, publicClient, quantityToMint, }: {
274
274
  mintable: MintableGetTokenResponse;
275
+ price: bigint;
275
276
  publicClient: PublicClient;
276
277
  quantityToMint: bigint;
277
278
  }): Promise<MintCosts>;
@@ -1 +1 @@
1
- {"version":3,"file":"mint-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EAOb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAMlD,cAAM,SAAU,SAAQ,KAAK;CAAG;AAChC,cAAM,iBAAkB,SAAQ,KAAK;CAAG;AAExC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAOF,cAAM,UAAU;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGlC,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,YAAY,EAC3B,UAAU,CAAC,EAAE,WAAW;IAO1B;;;;;OAKG;IACG,WAAW,CAAC,EAChB,aAAa,EACb,OAAO,GACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOD;;;;;;OAMG;IACG,0BAA0B,CAAC,EAC/B,GAAG,IAAI,EACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,wBAAwB,CAAC;QACnC,aAAa,EAAE,aAAa,CAAC;KAC9B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQvC;;;;;OAKG;IACG,YAAY,CAAC,EACjB,QAAQ,EACR,cAAc,GACf,EAAE;QACD,QAAQ,EAAE,QAAQ,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;KACjC,GAAG,OAAO,CAAC,SAAS,CAAC;CAsBvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,UAAU,GACX,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,cAEA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAwJ9D,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,EACrC,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,wBAAwB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,SAAS,CAAC,CAiBrB;AAgED,MAAM,MAAM,QAAQ,GAAG,wBAAwB,CAAC"}
1
+ {"version":3,"file":"mint-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EAOb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAMlD,cAAM,SAAU,SAAQ,KAAK;CAAG;AAChC,cAAM,iBAAkB,SAAQ,KAAK;CAAG;AAExC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAOF,cAAM,UAAU;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGlC,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,YAAY,EAC3B,UAAU,CAAC,EAAE,WAAW;IAO1B;;;;;OAKG;IACG,WAAW,CAAC,EAChB,aAAa,EACb,OAAO,GACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOD;;;;;;OAMG;IACG,0BAA0B,CAAC,EAC/B,GAAG,IAAI,EACR,EAAE;QACD,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,wBAAwB,CAAC;QACnC,aAAa,EAAE,aAAa,CAAC;KAC9B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQvC;;;;;OAKG;IACG,YAAY,CAAC,EACjB,QAAQ,EACR,cAAc,GACf,EAAE;QACD,QAAQ,EAAE,QAAQ,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;KACjC,GAAG,OAAO,CAAC,SAAS,CAAC;CAuBvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,UAAU,GACX,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,cAEA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAwJ9D,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,EACrC,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,wBAAwB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBrB;AAmED,MAAM,MAAM,QAAQ,GAAG,wBAAwB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -23,6 +23,7 @@
23
23
  "viem": "^1.16.6"
24
24
  },
25
25
  "devDependencies": {
26
+ "zoralabs-tsconfig": "*",
26
27
  "typescript": "^5.2.2",
27
28
  "vite": "4.5.0",
28
29
  "vitest": "0.34.6"
@@ -45,7 +45,7 @@ export const DEFAULT_SALE_SETTINGS = {
45
45
  };
46
46
 
47
47
  // Hardcode the permission bit for the minter
48
- const PERMISSION_BIT_MINTER = 2n ** 2n;
48
+ const PERMISSION_BIT_MINTER = 4n;
49
49
 
50
50
  type ContractType =
51
51
  | {
@@ -56,18 +56,40 @@ export class MintAPIClient {
56
56
  }: {
57
57
  contractAddress: string;
58
58
  tokenId: bigint;
59
- }): Promise<undefined | string> {
59
+ }): Promise<undefined | { address: Address; pricePerToken: bigint }> {
60
60
  const { retries, post } = this.httpClient;
61
61
  return retries(async () => {
62
62
  const response = await post<any>(this.networkConfig.subgraphUrl, {
63
- query:
64
- "query($id: ID!) {\n zoraCreateToken(id: $id) {\n id\n salesStrategies{\n fixedPrice {\n address\n }\n }\n }\n}",
63
+ query: `query ($id: ID!) {
64
+ zoraCreateToken(id: $id) {
65
+ id
66
+ salesStrategies(where: {type: "FIXED_PRICE"}) {
67
+ type
68
+ fixedPrice {
69
+ address
70
+ pricePerToken
71
+ saleEnd
72
+ saleStart
73
+ maxTokensPerAddress
74
+ }
75
+ }
76
+ }
77
+ }`,
65
78
  variables: {
66
79
  id: `${contractAddress.toLowerCase()}-${tokenId.toString()}`,
67
80
  },
68
81
  });
69
- return response.zoraCreateToken?.salesStrategies?.find(() => true)
70
- ?.fixedPriceMinterAddress;
82
+
83
+ const fixedPrice: {
84
+ address: Address;
85
+ pricePerToken: string;
86
+ } = response.data?.zoraCreateToken?.salesStrategies?.find(() => true)
87
+ ?.fixedPrice;
88
+
89
+ return {
90
+ address: fixedPrice.address as Address,
91
+ pricePerToken: BigInt(fixedPrice.pricePerToken),
92
+ };
71
93
  });
72
94
  }
73
95
 
@@ -109,6 +109,7 @@ class MintClient {
109
109
  if (mintContextType === "zora_create_1155") {
110
110
  return await get1155MintCosts({
111
111
  mintable,
112
+ price: BigInt(mintable.cost.native_price.raw),
112
113
  publicClient: this.publicClient,
113
114
  quantityToMint: BigInt(quantityToMint),
114
115
  });
@@ -306,10 +307,12 @@ export type MintCosts = {
306
307
 
307
308
  export async function get1155MintCosts({
308
309
  mintable,
310
+ price,
309
311
  publicClient,
310
312
  quantityToMint,
311
313
  }: {
312
314
  mintable: MintableGetTokenResponse;
315
+ price: bigint;
313
316
  publicClient: PublicClient;
314
317
  quantityToMint: bigint;
315
318
  }): Promise<MintCosts> {
@@ -321,8 +324,7 @@ export async function get1155MintCosts({
321
324
  });
322
325
 
323
326
  const mintFeeForTokens = mintFee * quantityToMint;
324
- const tokenPurchaseCost =
325
- BigInt(mintable.cost.native_price.raw) * quantityToMint;
327
+ const tokenPurchaseCost = price * quantityToMint;
326
328
 
327
329
  return {
328
330
  mintFee: mintFeeForTokens,
@@ -354,19 +356,22 @@ async function makePrepareMint1155TokenParams({
354
356
 
355
357
  const address = mintable.collection.address as Address;
356
358
 
359
+ const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
360
+ contractAddress: address,
361
+ tokenId: BigInt(mintable.token_id!),
362
+ });
363
+
357
364
  const mintValue = (
358
365
  await get1155MintCosts({
359
366
  mintable,
367
+ price:
368
+ tokenFixedPriceMinter?.pricePerToken ||
369
+ BigInt(mintable.cost.native_price.raw),
360
370
  publicClient,
361
371
  quantityToMint: mintQuantity,
362
372
  })
363
373
  ).totalCost;
364
374
 
365
- const tokenFixedPriceMinter = await apiClient.getSalesConfigFixedPrice({
366
- contractAddress: address,
367
- tokenId: BigInt(mintable.token_id!),
368
- });
369
-
370
375
  const result = {
371
376
  abi: zoraCreator1155ImplABI,
372
377
  functionName: "mintWithRewards",
@@ -375,7 +380,7 @@ async function makePrepareMint1155TokenParams({
375
380
  address,
376
381
  /* args: minter, tokenId, quantity, minterArguments, mintReferral */
377
382
  args: [
378
- (tokenFixedPriceMinter ||
383
+ (tokenFixedPriceMinter?.address ||
379
384
  zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,
380
385
  BigInt(mintable.token_id!),
381
386
  mintQuantity,
package/tsconfig.json CHANGED
@@ -1,23 +1,8 @@
1
1
  {
2
+ "extends": "zoralabs-tsconfig/tsconfig.json",
2
3
  "compilerOptions": {
3
- "allowJs": true,
4
- "baseUrl": ".",
5
- "downlevelIteration": true,
6
- "esModuleInterop": true,
7
- "isolatedModules": true,
8
4
  "lib": ["es2021", "DOM"],
9
- "module": "esnext",
10
- "moduleResolution": "node",
11
- "noImplicitAny": true,
12
- "noUncheckedIndexedAccess": true,
13
- "noUnusedLocals": true,
14
- "noUnusedParameters": true,
15
- "resolveJsonModule": true,
16
- "skipLibCheck": true,
17
- "strict": true,
18
- "strictNullChecks": true,
19
- "target": "es2021",
20
- "types": ["node"],
5
+ "baseUrl": ".",
21
6
  "outDir": "dist"
22
7
  },
23
8
  "exclude": ["node_modules/**", "dist/**"],