@zoralabs/protocol-sdk 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/CHANGELOG.md +12 -0
  3. package/dist/anvil.d.ts.map +1 -1
  4. package/dist/apis/http-api-base.d.ts +1 -1
  5. package/dist/apis/http-api-base.d.ts.map +1 -1
  6. package/dist/apis/subgraph-querier.d.ts +6 -0
  7. package/dist/apis/subgraph-querier.d.ts.map +1 -1
  8. package/dist/create/1155-create-helper.d.ts +4 -1
  9. package/dist/create/1155-create-helper.d.ts.map +1 -1
  10. package/dist/create/contract-getter.d.ts +30 -0
  11. package/dist/create/contract-getter.d.ts.map +1 -0
  12. package/dist/create/contract-setup.d.ts +4 -8
  13. package/dist/create/contract-setup.d.ts.map +1 -1
  14. package/dist/create/mint-from-create.d.ts +3 -3
  15. package/dist/create/mint-from-create.d.ts.map +1 -1
  16. package/dist/create/minter-defaults.d.ts +1 -1
  17. package/dist/create/minter-defaults.d.ts.map +1 -1
  18. package/dist/create/subgraph-queries.d.ts +13 -0
  19. package/dist/create/subgraph-queries.d.ts.map +1 -0
  20. package/dist/create/token-setup.d.ts +2 -0
  21. package/dist/create/token-setup.d.ts.map +1 -1
  22. package/dist/index.cjs +2166 -2099
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.js +2188 -2121
  25. package/dist/index.js.map +1 -1
  26. package/dist/mint/subgraph-mint-getter.d.ts +2 -2
  27. package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
  28. package/dist/mint/subgraph-queries.d.ts +1 -5
  29. package/dist/mint/subgraph-queries.d.ts.map +1 -1
  30. package/dist/retries.d.ts +7 -0
  31. package/dist/retries.d.ts.map +1 -0
  32. package/dist/sdk.d.ts +2 -0
  33. package/dist/sdk.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/src/apis/http-api-base.ts +12 -20
  36. package/src/apis/subgraph-querier.ts +7 -0
  37. package/src/create/1155-create-helper.test.ts +68 -3
  38. package/src/create/1155-create-helper.ts +23 -9
  39. package/src/create/contract-getter.ts +90 -0
  40. package/src/create/contract-setup.ts +17 -46
  41. package/src/create/mint-from-create.ts +7 -15
  42. package/src/create/minter-defaults.ts +11 -20
  43. package/src/create/subgraph-queries.ts +35 -0
  44. package/src/create/token-setup.ts +5 -1
  45. package/src/create/types.ts +1 -1
  46. package/src/mint/subgraph-mint-getter.ts +5 -2
  47. package/src/mint/subgraph-queries.ts +1 -7
  48. package/src/retries.ts +49 -0
  49. package/src/sdk.ts +8 -0
  50. package/test-integration/create-multiple-tokens-on-contract.ts +104 -0
package/dist/index.js CHANGED
@@ -2503,6 +2503,44 @@ import {
2503
2503
  premintTypedDataDefinition as premintTypedDataDefinition2
2504
2504
  } from "@zoralabs/protocol-deployments";
2505
2505
 
2506
+ // src/retries.ts
2507
+ async function wait(delayMs) {
2508
+ return new Promise((resolve) => {
2509
+ setTimeout(resolve, delayMs);
2510
+ });
2511
+ }
2512
+ var retryInternal = async ({
2513
+ tryFn,
2514
+ maxTries = 3,
2515
+ atTry,
2516
+ linearBackoffMS = 200,
2517
+ shouldRetryOnError = () => true
2518
+ }) => {
2519
+ try {
2520
+ return await tryFn();
2521
+ } catch (err) {
2522
+ if (shouldRetryOnError(err)) {
2523
+ if (atTry <= maxTries) {
2524
+ await wait(atTry * linearBackoffMS);
2525
+ return await retryInternal({
2526
+ tryFn,
2527
+ maxTries,
2528
+ atTry: atTry + 1,
2529
+ linearBackoffMS,
2530
+ shouldRetryOnError
2531
+ });
2532
+ }
2533
+ }
2534
+ throw err;
2535
+ }
2536
+ };
2537
+ var retriesGeneric = async (params) => {
2538
+ return retryInternal({
2539
+ ...params,
2540
+ atTry: 1
2541
+ });
2542
+ };
2543
+
2506
2544
  // src/apis/http-api-base.ts
2507
2545
  var BadResponseError = class extends Error {
2508
2546
  constructor(message, status, json) {
@@ -2512,11 +2550,6 @@ var BadResponseError = class extends Error {
2512
2550
  this.json = json;
2513
2551
  }
2514
2552
  };
2515
- async function wait(delayMs) {
2516
- return new Promise((resolve) => {
2517
- setTimeout(resolve, delayMs);
2518
- });
2519
- }
2520
2553
  var get = async (url) => {
2521
2554
  const response = await fetch(url, { method: "GET" });
2522
2555
  if (response.status !== 200) {
@@ -2562,20 +2595,16 @@ var post = async (url, data) => {
2562
2595
  }
2563
2596
  return await response.json();
2564
2597
  };
2565
- var retries = async (tryFn, maxTries = 3, atTry = 1, linearBackoffMS = 200) => {
2566
- try {
2567
- return await tryFn();
2568
- } catch (err) {
2569
- if (err instanceof BadResponseError) {
2570
- if (err.status >= 500) {
2571
- if (atTry <= maxTries) {
2572
- await wait(atTry * linearBackoffMS);
2573
- return await retries(tryFn, maxTries, atTry + 1);
2574
- }
2575
- }
2576
- }
2577
- throw err;
2578
- }
2598
+ var retries = async (tryFn, maxTries = 3, linearBackoffMS = 200) => {
2599
+ const shouldRetry = (err) => {
2600
+ return err instanceof BadResponseError && err.status >= 500;
2601
+ };
2602
+ return retriesGeneric({
2603
+ tryFn,
2604
+ maxTries,
2605
+ linearBackoffMS,
2606
+ shouldRetryOnError: shouldRetry
2607
+ });
2579
2608
  };
2580
2609
  var httpClient = {
2581
2610
  get,
@@ -4212,7 +4241,7 @@ async function mint({
4212
4241
  import {
4213
4242
  zoraCreator1155FactoryImplABI as zoraCreator1155FactoryImplABI2,
4214
4243
  zoraCreator1155FactoryImplAddress as zoraCreator1155FactoryImplAddress2,
4215
- zoraCreator1155ImplABI as zoraCreator1155ImplABI7
4244
+ zoraCreator1155ImplABI as zoraCreator1155ImplABI6
4216
4245
  } from "@zoralabs/protocol-deployments";
4217
4246
  import { decodeEventLog as decodeEventLog2 } from "viem";
4218
4247
 
@@ -4230,36 +4259,6 @@ function new1155ContractVersion(chainId) {
4230
4259
  }
4231
4260
  return address.CONTRACT_1155_IMPL_VERSION;
4232
4261
  }
4233
- async function getContractInfoExistingContract({
4234
- publicClient,
4235
- contractAddress
4236
- }) {
4237
- let contractVersion;
4238
- try {
4239
- contractVersion = await publicClient.readContract({
4240
- abi: zoraCreator1155ImplABI3,
4241
- address: contractAddress,
4242
- functionName: "contractVersion"
4243
- });
4244
- } catch (e) {
4245
- throw new Error(`Contract does not exist at ${contractAddress}`);
4246
- }
4247
- const nextTokenId = await publicClient.readContract({
4248
- address: contractAddress,
4249
- abi: zoraCreator1155ImplABI3,
4250
- functionName: "nextTokenId"
4251
- });
4252
- const contractName = await publicClient.readContract({
4253
- address: contractAddress,
4254
- abi: zoraCreator1155ImplABI3,
4255
- functionName: "name"
4256
- });
4257
- return {
4258
- contractVersion,
4259
- contractName,
4260
- nextTokenId
4261
- };
4262
- }
4263
4262
  async function getDeterministicContractAddress({
4264
4263
  publicClient,
4265
4264
  account,
@@ -4281,2216 +4280,2284 @@ async function getDeterministicContractAddress({
4281
4280
  });
4282
4281
  return contractAddress;
4283
4282
  }
4283
+ async function getNewContractMintFee({
4284
+ publicClient,
4285
+ chainId
4286
+ }) {
4287
+ const implAddress = contracts1155.addresses[chainId].CONTRACT_1155_IMPL;
4288
+ return await publicClient.readContract({
4289
+ abi: zoraCreator1155ImplABI3,
4290
+ address: implAddress,
4291
+ functionName: "mintFee"
4292
+ });
4293
+ }
4284
4294
 
4285
4295
  // src/create/token-setup.ts
4286
4296
  var semver2 = __toESM(require_semver2(), 1);
4287
4297
  import { zoraCreator1155ImplABI as zoraCreator1155ImplABI5 } from "@zoralabs/protocol-deployments";
4288
4298
  import { encodeFunctionData as encodeFunctionData2, zeroAddress as zeroAddress5 } from "viem";
4289
4299
 
4290
- // src/ipfs/arweave.ts
4291
- function isArweaveURL(url) {
4292
- return url && typeof url === "string" ? url.startsWith("ar://") : false;
4293
- }
4294
-
4295
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bytes.js
4296
- var empty = new Uint8Array(0);
4297
- function equals(aa, bb) {
4298
- if (aa === bb)
4299
- return true;
4300
- if (aa.byteLength !== bb.byteLength) {
4301
- return false;
4302
- }
4303
- for (let ii = 0; ii < aa.byteLength; ii++) {
4304
- if (aa[ii] !== bb[ii]) {
4305
- return false;
4306
- }
4300
+ // src/create/minter-defaults.ts
4301
+ var SALE_END_FOREVER = 18446744073709551615n;
4302
+ var DEFAULT_SALE_START_AND_END = {
4303
+ // Sale start time – defaults to beginning of unix time
4304
+ saleStart: 0n,
4305
+ // This is the end of uint64, plenty of time
4306
+ saleEnd: SALE_END_FOREVER
4307
+ };
4308
+ var DEFAULT_MAX_TOKENS_PER_ADDRESS = {
4309
+ maxTokensPerAddress: 0n
4310
+ };
4311
+ var erc20SaleSettingsWithDefaults = (params) => ({
4312
+ ...DEFAULT_SALE_START_AND_END,
4313
+ ...DEFAULT_MAX_TOKENS_PER_ADDRESS,
4314
+ ...params
4315
+ });
4316
+ var allowListWithDefaults = (allowlist) => {
4317
+ return {
4318
+ ...DEFAULT_SALE_START_AND_END,
4319
+ ...allowlist
4320
+ };
4321
+ };
4322
+ var fixedPriceSettingsWithDefaults = (params) => ({
4323
+ ...DEFAULT_SALE_START_AND_END,
4324
+ ...DEFAULT_MAX_TOKENS_PER_ADDRESS,
4325
+ type: "fixedPrice",
4326
+ ...params
4327
+ });
4328
+ var parseNameIntoSymbol = (name) => {
4329
+ if (name === "") {
4330
+ throw new Error("Name must be provided to generate a symbol");
4307
4331
  }
4308
- return true;
4309
- }
4310
- function coerce2(o) {
4311
- if (o instanceof Uint8Array && o.constructor.name === "Uint8Array")
4312
- return o;
4313
- if (o instanceof ArrayBuffer)
4314
- return new Uint8Array(o);
4315
- if (ArrayBuffer.isView(o)) {
4316
- return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
4332
+ const result = "$" + name.replace(/[^a-zA-Z0-9]/g, "").replace(/^\$+/, "").toUpperCase().replace(/[AEIOU\s]/g, "").slice(0, 4);
4333
+ if (result === "$") {
4334
+ throw new Error("Not enough valid characters to generate a symbol");
4317
4335
  }
4318
- throw new Error("Unknown type, must be binary type");
4319
- }
4320
-
4321
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/vendor/base-x.js
4322
- function base2(ALPHABET, name) {
4323
- if (ALPHABET.length >= 255) {
4324
- throw new TypeError("Alphabet too long");
4336
+ return result;
4337
+ };
4338
+ var timedSaleSettingsWithDefaults = async (params, contractName) => {
4339
+ const erc20Name = params.erc20Name || contractName;
4340
+ const symbol = params.erc20Symbol || parseNameIntoSymbol(erc20Name);
4341
+ return {
4342
+ type: "timed",
4343
+ ...DEFAULT_SALE_START_AND_END,
4344
+ ...params,
4345
+ erc20Name,
4346
+ erc20Symbol: symbol
4347
+ };
4348
+ };
4349
+ var isAllowList = (salesConfig) => salesConfig.type === "allowlistMint";
4350
+ var isErc20 = (salesConfig) => salesConfig.type === "erc20Mint";
4351
+ var isFixedPrice = (salesConfig) => {
4352
+ return salesConfig.type === "fixedPrice" || salesConfig.pricePerToken > 0n;
4353
+ };
4354
+ var getSalesConfigWithDefaults = async (salesConfig, contractName) => {
4355
+ if (!salesConfig)
4356
+ return timedSaleSettingsWithDefaults({}, contractName);
4357
+ if (isAllowList(salesConfig)) {
4358
+ return allowListWithDefaults(salesConfig);
4325
4359
  }
4326
- var BASE_MAP = new Uint8Array(256);
4327
- for (var j = 0; j < BASE_MAP.length; j++) {
4328
- BASE_MAP[j] = 255;
4360
+ if (isErc20(salesConfig)) {
4361
+ return erc20SaleSettingsWithDefaults(salesConfig);
4329
4362
  }
4330
- for (var i = 0; i < ALPHABET.length; i++) {
4331
- var x = ALPHABET.charAt(i);
4332
- var xc = x.charCodeAt(0);
4333
- if (BASE_MAP[xc] !== 255) {
4334
- throw new TypeError(x + " is ambiguous");
4335
- }
4336
- BASE_MAP[xc] = i;
4363
+ if (isFixedPrice(salesConfig)) {
4364
+ return fixedPriceSettingsWithDefaults(salesConfig);
4337
4365
  }
4338
- var BASE = ALPHABET.length;
4339
- var LEADER = ALPHABET.charAt(0);
4340
- var FACTOR = Math.log(BASE) / Math.log(256);
4341
- var iFACTOR = Math.log(256) / Math.log(BASE);
4342
- function encode3(source) {
4343
- if (source instanceof Uint8Array)
4344
- ;
4345
- else if (ArrayBuffer.isView(source)) {
4346
- source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
4347
- } else if (Array.isArray(source)) {
4348
- source = Uint8Array.from(source);
4349
- }
4350
- if (!(source instanceof Uint8Array)) {
4351
- throw new TypeError("Expected Uint8Array");
4352
- }
4353
- if (source.length === 0) {
4354
- return "";
4355
- }
4356
- var zeroes = 0;
4357
- var length2 = 0;
4358
- var pbegin = 0;
4359
- var pend = source.length;
4360
- while (pbegin !== pend && source[pbegin] === 0) {
4361
- pbegin++;
4362
- zeroes++;
4363
- }
4364
- var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
4365
- var b58 = new Uint8Array(size);
4366
- while (pbegin !== pend) {
4367
- var carry = source[pbegin];
4368
- var i2 = 0;
4369
- for (var it1 = size - 1; (carry !== 0 || i2 < length2) && it1 !== -1; it1--, i2++) {
4370
- carry += 256 * b58[it1] >>> 0;
4371
- b58[it1] = carry % BASE >>> 0;
4372
- carry = carry / BASE >>> 0;
4373
- }
4374
- if (carry !== 0) {
4375
- throw new Error("Non-zero carry");
4366
+ return timedSaleSettingsWithDefaults(salesConfig, contractName);
4367
+ };
4368
+
4369
+ // src/create/minter-setup.ts
4370
+ import {
4371
+ erc20MinterABI as erc20MinterABI2,
4372
+ erc20MinterAddress as erc20MinterAddresses,
4373
+ zoraCreator1155ImplABI as zoraCreator1155ImplABI4,
4374
+ zoraCreatorFixedPriceSaleStrategyABI,
4375
+ zoraCreatorFixedPriceSaleStrategyAddress as zoraCreatorFixedPriceSaleStrategyAddress2,
4376
+ zoraCreatorMerkleMinterStrategyABI,
4377
+ zoraCreatorMerkleMinterStrategyAddress,
4378
+ zoraTimedSaleStrategyABI as zoraTimedSaleStrategyABI2,
4379
+ zoraTimedSaleStrategyAddress
4380
+ } from "@zoralabs/protocol-deployments";
4381
+ import { encodeFunctionData } from "viem";
4382
+ var PERMISSION_BITS = {
4383
+ MINTER: 2n ** 2n
4384
+ };
4385
+ function setupErc20Minter({
4386
+ pricePerToken,
4387
+ chainId,
4388
+ tokenId: nextTokenId,
4389
+ currency,
4390
+ saleStart,
4391
+ saleEnd,
4392
+ maxTokensPerAddress: mintLimit,
4393
+ fundsRecipient
4394
+ }) {
4395
+ const erc20MinterAddress = erc20MinterAddresses[chainId];
4396
+ if (!erc20MinterAddress)
4397
+ throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);
4398
+ const erc20MinterApproval = encodeFunctionData({
4399
+ abi: zoraCreator1155ImplABI4,
4400
+ functionName: "addPermission",
4401
+ args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER]
4402
+ });
4403
+ const saleData = encodeFunctionData({
4404
+ abi: erc20MinterABI2,
4405
+ functionName: "setSale",
4406
+ args: [
4407
+ BigInt(nextTokenId),
4408
+ {
4409
+ saleStart: saleStart || BigInt(0),
4410
+ saleEnd: saleEnd || BigInt(0),
4411
+ maxTokensPerAddress: BigInt(mintLimit || 0),
4412
+ pricePerToken,
4413
+ fundsRecipient,
4414
+ currency
4376
4415
  }
4377
- length2 = i2;
4378
- pbegin++;
4379
- }
4380
- var it2 = size - length2;
4381
- while (it2 !== size && b58[it2] === 0) {
4382
- it2++;
4383
- }
4384
- var str = LEADER.repeat(zeroes);
4385
- for (; it2 < size; ++it2) {
4386
- str += ALPHABET.charAt(b58[it2]);
4387
- }
4388
- return str;
4389
- }
4390
- function decodeUnsafe(source) {
4391
- if (typeof source !== "string") {
4392
- throw new TypeError("Expected String");
4393
- }
4394
- if (source.length === 0) {
4395
- return new Uint8Array();
4396
- }
4397
- var psz = 0;
4398
- if (source[psz] === " ") {
4399
- return;
4400
- }
4401
- var zeroes = 0;
4402
- var length2 = 0;
4403
- while (source[psz] === LEADER) {
4404
- zeroes++;
4405
- psz++;
4406
- }
4407
- var size = (source.length - psz) * FACTOR + 1 >>> 0;
4408
- var b256 = new Uint8Array(size);
4409
- while (source[psz]) {
4410
- var carry = BASE_MAP[source.charCodeAt(psz)];
4411
- if (carry === 255) {
4412
- return;
4416
+ ]
4417
+ });
4418
+ const callSale = encodeFunctionData({
4419
+ abi: zoraCreator1155ImplABI4,
4420
+ functionName: "callSale",
4421
+ args: [BigInt(nextTokenId), erc20MinterAddress, saleData]
4422
+ });
4423
+ return {
4424
+ minter: erc20MinterAddress,
4425
+ setupActions: [erc20MinterApproval, callSale]
4426
+ };
4427
+ }
4428
+ function setupFixedPriceMinter({
4429
+ pricePerToken: price,
4430
+ tokenId: nextTokenId,
4431
+ chainId,
4432
+ saleStart,
4433
+ saleEnd,
4434
+ maxTokensPerAddress: mintLimit,
4435
+ fundsRecipient
4436
+ }) {
4437
+ const fixedPriceStrategyAddress = zoraCreatorFixedPriceSaleStrategyAddress2[chainId];
4438
+ const fixedPriceApproval = encodeFunctionData({
4439
+ abi: zoraCreator1155ImplABI4,
4440
+ functionName: "addPermission",
4441
+ args: [
4442
+ BigInt(nextTokenId),
4443
+ fixedPriceStrategyAddress,
4444
+ PERMISSION_BITS.MINTER
4445
+ ]
4446
+ });
4447
+ const saleData = encodeFunctionData({
4448
+ abi: zoraCreatorFixedPriceSaleStrategyABI,
4449
+ functionName: "setSale",
4450
+ args: [
4451
+ BigInt(nextTokenId),
4452
+ {
4453
+ pricePerToken: price,
4454
+ saleStart: saleStart || BigInt(0),
4455
+ saleEnd: saleEnd || BigInt(0),
4456
+ maxTokensPerAddress: BigInt(mintLimit || 0),
4457
+ fundsRecipient
4413
4458
  }
4414
- var i2 = 0;
4415
- for (var it3 = size - 1; (carry !== 0 || i2 < length2) && it3 !== -1; it3--, i2++) {
4416
- carry += BASE * b256[it3] >>> 0;
4417
- b256[it3] = carry % 256 >>> 0;
4418
- carry = carry / 256 >>> 0;
4459
+ ]
4460
+ });
4461
+ const callSale = encodeFunctionData({
4462
+ abi: zoraCreator1155ImplABI4,
4463
+ functionName: "callSale",
4464
+ args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData]
4465
+ });
4466
+ return {
4467
+ minter: fixedPriceStrategyAddress,
4468
+ setupActions: [fixedPriceApproval, callSale]
4469
+ };
4470
+ }
4471
+ function setupTimedSaleMinter({
4472
+ chainId,
4473
+ tokenId,
4474
+ erc20Name: erc20zName,
4475
+ erc20Symbol: erc20zSymbol,
4476
+ saleStart,
4477
+ saleEnd
4478
+ }) {
4479
+ const minterAddress = zoraTimedSaleStrategyAddress[chainId];
4480
+ const fixedPriceApproval = encodeFunctionData({
4481
+ abi: zoraCreator1155ImplABI4,
4482
+ functionName: "addPermission",
4483
+ args: [BigInt(tokenId), minterAddress, PERMISSION_BITS.MINTER]
4484
+ });
4485
+ const saleData = encodeFunctionData({
4486
+ abi: zoraTimedSaleStrategyABI2,
4487
+ functionName: "setSale",
4488
+ args: [
4489
+ BigInt(tokenId),
4490
+ {
4491
+ saleStart,
4492
+ saleEnd,
4493
+ name: erc20zName,
4494
+ symbol: erc20zSymbol
4419
4495
  }
4420
- if (carry !== 0) {
4421
- throw new Error("Non-zero carry");
4496
+ ]
4497
+ });
4498
+ const callSale = encodeFunctionData({
4499
+ abi: zoraCreator1155ImplABI4,
4500
+ functionName: "callSale",
4501
+ args: [BigInt(tokenId), minterAddress, saleData]
4502
+ });
4503
+ return {
4504
+ minter: minterAddress,
4505
+ setupActions: [fixedPriceApproval, callSale]
4506
+ };
4507
+ }
4508
+ function setupAllowListMinter({
4509
+ chainId,
4510
+ tokenId: nextTokenId,
4511
+ allowlist,
4512
+ fundsRecipient
4513
+ }) {
4514
+ const merkleSaleStrategyAddress = zoraCreatorMerkleMinterStrategyAddress[chainId];
4515
+ const merkleApproval = encodeFunctionData({
4516
+ abi: zoraCreator1155ImplABI4,
4517
+ functionName: "addPermission",
4518
+ args: [nextTokenId, merkleSaleStrategyAddress, PERMISSION_BITS.MINTER]
4519
+ });
4520
+ const merkleRoot = allowlist.presaleMerkleRoot.startsWith("0x") ? allowlist.presaleMerkleRoot : `0x${allowlist.presaleMerkleRoot}`;
4521
+ const saleData = encodeFunctionData({
4522
+ abi: zoraCreatorMerkleMinterStrategyABI,
4523
+ functionName: "setSale",
4524
+ args: [
4525
+ BigInt(nextTokenId),
4526
+ {
4527
+ presaleStart: allowlist.saleStart,
4528
+ presaleEnd: allowlist.saleEnd,
4529
+ merkleRoot,
4530
+ fundsRecipient
4422
4531
  }
4423
- length2 = i2;
4424
- psz++;
4425
- }
4426
- if (source[psz] === " ") {
4427
- return;
4428
- }
4429
- var it4 = size - length2;
4430
- while (it4 !== size && b256[it4] === 0) {
4431
- it4++;
4432
- }
4433
- var vch = new Uint8Array(zeroes + (size - it4));
4434
- var j2 = zeroes;
4435
- while (it4 !== size) {
4436
- vch[j2++] = b256[it4++];
4437
- }
4438
- return vch;
4532
+ ]
4533
+ });
4534
+ const callSaleMerkle = encodeFunctionData({
4535
+ abi: zoraCreator1155ImplABI4,
4536
+ functionName: "callSale",
4537
+ args: [BigInt(nextTokenId), merkleSaleStrategyAddress, saleData]
4538
+ });
4539
+ return {
4540
+ minter: merkleSaleStrategyAddress,
4541
+ setupActions: [merkleApproval, callSaleMerkle]
4542
+ };
4543
+ }
4544
+ var isAllowList2 = (salesConfig) => salesConfig.type === "allowlistMint";
4545
+ var isErc202 = (salesConfig) => salesConfig.type === "erc20Mint";
4546
+ var isFixedPrice2 = (salesConfig) => salesConfig.type === "fixedPrice" || salesConfig.pricePerToken > BigInt(0);
4547
+ function setupMinters({ salesConfig, ...rest }) {
4548
+ if (isErc202(salesConfig)) {
4549
+ return setupErc20Minter({
4550
+ ...salesConfig,
4551
+ ...rest
4552
+ });
4439
4553
  }
4440
- function decode5(string) {
4441
- var buffer = decodeUnsafe(string);
4442
- if (buffer) {
4443
- return buffer;
4444
- }
4445
- throw new Error(`Non-${name} character`);
4554
+ if (isAllowList2(salesConfig)) {
4555
+ return setupAllowListMinter({
4556
+ allowlist: salesConfig,
4557
+ ...rest
4558
+ });
4446
4559
  }
4560
+ if (isFixedPrice2(salesConfig))
4561
+ return setupFixedPriceMinter({
4562
+ ...salesConfig,
4563
+ ...rest
4564
+ });
4565
+ return setupTimedSaleMinter({
4566
+ ...salesConfig,
4567
+ ...rest
4568
+ });
4569
+ }
4570
+
4571
+ // src/create/token-setup.ts
4572
+ async function applyNew1155Defaults(props, ownerAddress, contractName) {
4573
+ const { payoutRecipient: fundsRecipient } = props;
4574
+ const fundsRecipientOrOwner = fundsRecipient && fundsRecipient !== zeroAddress5 ? fundsRecipient : ownerAddress;
4447
4575
  return {
4448
- encode: encode3,
4449
- decodeUnsafe,
4450
- decode: decode5
4576
+ payoutRecipient: fundsRecipientOrOwner,
4577
+ createReferral: props.createReferral || zeroAddress5,
4578
+ maxSupply: typeof props.maxSupply === "undefined" ? OPEN_EDITION_MINT_SIZE : BigInt(props.maxSupply),
4579
+ royaltyBPS: props.royaltyBPS || 1e3,
4580
+ tokenMetadataURI: props.tokenMetadataURI,
4581
+ salesConfig: await getSalesConfigWithDefaults(
4582
+ props.salesConfig,
4583
+ contractName
4584
+ )
4451
4585
  };
4452
4586
  }
4453
- var src = base2;
4454
- var _brrp__multiformats_scope_baseX = src;
4455
- var base_x_default = _brrp__multiformats_scope_baseX;
4456
-
4457
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base.js
4458
- var Encoder = class {
4459
- constructor(name, prefix, baseEncode) {
4460
- __publicField(this, "name");
4461
- __publicField(this, "prefix");
4462
- __publicField(this, "baseEncode");
4463
- this.name = name;
4464
- this.prefix = prefix;
4465
- this.baseEncode = baseEncode;
4587
+ function buildSetupNewToken({
4588
+ tokenURI,
4589
+ maxSupply = OPEN_EDITION_MINT_SIZE,
4590
+ createReferral = zeroAddress5,
4591
+ contractVersion
4592
+ }) {
4593
+ if (contractSupportsMintRewards(contractVersion, "ERC1155")) {
4594
+ return encodeFunctionData2({
4595
+ abi: zoraCreator1155ImplABI5,
4596
+ functionName: "setupNewTokenWithCreateReferral",
4597
+ args: [tokenURI, BigInt(maxSupply), createReferral]
4598
+ });
4466
4599
  }
4467
- encode(bytes) {
4468
- if (bytes instanceof Uint8Array) {
4469
- return `${this.prefix}${this.baseEncode(bytes)}`;
4470
- } else {
4471
- throw Error("Unknown type, must be binary type");
4472
- }
4600
+ if (createReferral !== zeroAddress5) {
4601
+ throw new Error(
4602
+ "Contract does not support create referral, but one was provided"
4603
+ );
4473
4604
  }
4474
- };
4475
- var Decoder = class {
4476
- constructor(name, prefix, baseDecode) {
4477
- __publicField(this, "name");
4478
- __publicField(this, "prefix");
4479
- __publicField(this, "baseDecode");
4480
- __publicField(this, "prefixCodePoint");
4481
- this.name = name;
4482
- this.prefix = prefix;
4483
- if (prefix.codePointAt(0) === void 0) {
4484
- throw new Error("Invalid prefix character");
4485
- }
4486
- this.prefixCodePoint = prefix.codePointAt(0);
4487
- this.baseDecode = baseDecode;
4488
- }
4489
- decode(text) {
4490
- if (typeof text === "string") {
4491
- if (text.codePointAt(0) !== this.prefixCodePoint) {
4492
- throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);
4493
- }
4494
- return this.baseDecode(text.slice(this.prefix.length));
4495
- } else {
4496
- throw Error("Can only multibase decode strings");
4497
- }
4498
- }
4499
- or(decoder) {
4500
- return or(this, decoder);
4501
- }
4502
- };
4503
- var ComposedDecoder = class {
4504
- constructor(decoders) {
4505
- __publicField(this, "decoders");
4506
- this.decoders = decoders;
4507
- }
4508
- or(decoder) {
4509
- return or(this, decoder);
4510
- }
4511
- decode(input) {
4512
- const prefix = input[0];
4513
- const decoder = this.decoders[prefix];
4514
- if (decoder != null) {
4515
- return decoder.decode(input);
4516
- } else {
4517
- throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`);
4518
- }
4519
- }
4520
- };
4521
- function or(left, right) {
4522
- return new ComposedDecoder({
4523
- ...left.decoders ?? { [left.prefix]: left },
4524
- ...right.decoders ?? { [right.prefix]: right }
4605
+ return encodeFunctionData2({
4606
+ abi: zoraCreator1155ImplABI5,
4607
+ functionName: "setupNewToken",
4608
+ args: [tokenURI, BigInt(maxSupply)]
4525
4609
  });
4526
4610
  }
4527
- var Codec = class {
4528
- constructor(name, prefix, baseEncode, baseDecode) {
4529
- __publicField(this, "name");
4530
- __publicField(this, "prefix");
4531
- __publicField(this, "baseEncode");
4532
- __publicField(this, "baseDecode");
4533
- __publicField(this, "encoder");
4534
- __publicField(this, "decoder");
4535
- this.name = name;
4536
- this.prefix = prefix;
4537
- this.baseEncode = baseEncode;
4538
- this.baseDecode = baseDecode;
4539
- this.encoder = new Encoder(name, prefix, baseEncode);
4540
- this.decoder = new Decoder(name, prefix, baseDecode);
4541
- }
4542
- encode(input) {
4543
- return this.encoder.encode(input);
4611
+ function setupRoyaltyConfig({
4612
+ royaltyBPS,
4613
+ royaltyRecipient,
4614
+ nextTokenId
4615
+ }) {
4616
+ if (royaltyBPS > 0 && royaltyRecipient != zeroAddress5) {
4617
+ return encodeFunctionData2({
4618
+ abi: zoraCreator1155ImplABI5,
4619
+ functionName: "updateRoyaltiesForToken",
4620
+ args: [
4621
+ nextTokenId,
4622
+ {
4623
+ royaltyBPS,
4624
+ royaltyRecipient,
4625
+ royaltyMintSchedule: 0
4626
+ }
4627
+ ]
4628
+ });
4544
4629
  }
4545
- decode(input) {
4546
- return this.decoder.decode(input);
4630
+ return null;
4631
+ }
4632
+ function makeAdminMintCall({
4633
+ ownerAddress,
4634
+ mintQuantity,
4635
+ nextTokenId
4636
+ }) {
4637
+ if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {
4638
+ return null;
4547
4639
  }
4548
- };
4549
- function from({ name, prefix, encode: encode3, decode: decode5 }) {
4550
- return new Codec(name, prefix, encode3, decode5);
4640
+ return encodeFunctionData2({
4641
+ abi: zoraCreator1155ImplABI5,
4642
+ functionName: "adminMint",
4643
+ args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress5]
4644
+ });
4551
4645
  }
4552
- function baseX({ name, prefix, alphabet }) {
4553
- const { encode: encode3, decode: decode5 } = base_x_default(alphabet, name);
4554
- return from({
4555
- prefix,
4556
- name,
4557
- encode: encode3,
4558
- decode: (text) => coerce2(decode5(text))
4646
+ async function constructCreate1155TokenCalls(props) {
4647
+ const {
4648
+ chainId,
4649
+ nextTokenId,
4650
+ mintToCreatorCount,
4651
+ ownerAddress,
4652
+ contractVersion
4653
+ } = props;
4654
+ const new1155TokenPropsWithDefaults = await applyNew1155Defaults(
4655
+ props,
4656
+ ownerAddress,
4657
+ props.contractName
4658
+ );
4659
+ const verifyTokenIdExpected = encodeFunctionData2({
4660
+ abi: zoraCreator1155ImplABI5,
4661
+ functionName: "assumeLastTokenIdMatches",
4662
+ args: [nextTokenId - 1n]
4663
+ });
4664
+ const setupNewToken = buildSetupNewToken({
4665
+ tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,
4666
+ maxSupply: new1155TokenPropsWithDefaults.maxSupply,
4667
+ createReferral: new1155TokenPropsWithDefaults.createReferral,
4668
+ contractVersion
4669
+ });
4670
+ const royaltyConfig = setupRoyaltyConfig({
4671
+ royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,
4672
+ royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,
4673
+ nextTokenId
4674
+ });
4675
+ const { minter, setupActions: mintersSetup } = setupMinters({
4676
+ tokenId: nextTokenId,
4677
+ chainId,
4678
+ fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,
4679
+ salesConfig: new1155TokenPropsWithDefaults.salesConfig
4680
+ });
4681
+ const adminMintCall = makeAdminMintCall({
4682
+ ownerAddress,
4683
+ mintQuantity: mintToCreatorCount,
4684
+ nextTokenId
4559
4685
  });
4686
+ const setupActions = [
4687
+ verifyTokenIdExpected,
4688
+ setupNewToken,
4689
+ ...mintersSetup,
4690
+ royaltyConfig,
4691
+ adminMintCall
4692
+ ].filter((item) => item !== null);
4693
+ return {
4694
+ setupActions,
4695
+ minter,
4696
+ newToken: new1155TokenPropsWithDefaults
4697
+ };
4560
4698
  }
4561
- function decode(string, alphabet, bitsPerChar, name) {
4562
- const codes = {};
4563
- for (let i = 0; i < alphabet.length; ++i) {
4564
- codes[alphabet[i]] = i;
4565
- }
4566
- let end = string.length;
4567
- while (string[end - 1] === "=") {
4568
- --end;
4699
+ var contractSupportsMintRewards = (contractVersion, contractStandard) => {
4700
+ if (!contractStandard || !contractVersion) {
4701
+ return false;
4569
4702
  }
4570
- const out = new Uint8Array(end * bitsPerChar / 8 | 0);
4571
- let bits = 0;
4572
- let buffer = 0;
4573
- let written = 0;
4574
- for (let i = 0; i < end; ++i) {
4575
- const value = codes[string[i]];
4576
- if (value === void 0) {
4577
- throw new SyntaxError(`Non-${name} character`);
4578
- }
4579
- buffer = buffer << bitsPerChar | value;
4580
- bits += bitsPerChar;
4581
- if (bits >= 8) {
4582
- bits -= 8;
4583
- out[written++] = 255 & buffer >> bits;
4584
- }
4703
+ const semVerContractVersion = semver2.coerce(contractVersion)?.raw;
4704
+ if (!semVerContractVersion)
4705
+ return false;
4706
+ if (contractStandard === "ERC1155") {
4707
+ return semver2.gte(semVerContractVersion, "1.3.5");
4708
+ } else {
4709
+ return semver2.gte(semVerContractVersion, "14.0.0");
4585
4710
  }
4586
- if (bits >= bitsPerChar || (255 & buffer << 8 - bits) !== 0) {
4587
- throw new SyntaxError("Unexpected end of data");
4711
+ };
4712
+
4713
+ // src/create/mint-from-create.ts
4714
+ import { parseEther as parseEther3, zeroAddress as zeroAddress6 } from "viem";
4715
+ async function toSalesStrategyFromSubgraph({
4716
+ minter,
4717
+ salesConfig,
4718
+ getContractMintFee
4719
+ }) {
4720
+ if (salesConfig.type === "timed") {
4721
+ return {
4722
+ saleType: "timed",
4723
+ address: minter,
4724
+ // for now we hardcode this
4725
+ mintFeePerQuantity: parseEther3("0.000111"),
4726
+ saleStart: salesConfig.saleStart.toString(),
4727
+ saleEnd: salesConfig.saleEnd.toString(),
4728
+ // the following are not needed for now but we wanna satisfy concrete
4729
+ erc20Z: zeroAddress6,
4730
+ mintFee: 0n,
4731
+ pool: zeroAddress6,
4732
+ secondaryActivated: false
4733
+ };
4588
4734
  }
4589
- return out;
4590
- }
4591
- function encode(data, alphabet, bitsPerChar) {
4592
- const pad = alphabet[alphabet.length - 1] === "=";
4593
- const mask = (1 << bitsPerChar) - 1;
4594
- let out = "";
4595
- let bits = 0;
4596
- let buffer = 0;
4597
- for (let i = 0; i < data.length; ++i) {
4598
- buffer = buffer << 8 | data[i];
4599
- bits += 8;
4600
- while (bits > bitsPerChar) {
4601
- bits -= bitsPerChar;
4602
- out += alphabet[mask & buffer >> bits];
4603
- }
4735
+ if (salesConfig.type === "erc20Mint") {
4736
+ return {
4737
+ saleType: "erc20",
4738
+ address: minter,
4739
+ mintFeePerQuantity: 0n,
4740
+ saleStart: salesConfig.saleStart.toString(),
4741
+ saleEnd: salesConfig.saleEnd.toString(),
4742
+ currency: salesConfig.currency,
4743
+ pricePerToken: salesConfig.pricePerToken,
4744
+ maxTokensPerAddress: salesConfig.maxTokensPerAddress
4745
+ };
4604
4746
  }
4605
- if (bits !== 0) {
4606
- out += alphabet[mask & buffer << bitsPerChar - bits];
4747
+ const contractMintFee = await getContractMintFee();
4748
+ if (salesConfig.type === "fixedPrice") {
4749
+ return {
4750
+ saleType: "fixedPrice",
4751
+ address: minter,
4752
+ maxTokensPerAddress: salesConfig.maxTokensPerAddress,
4753
+ mintFeePerQuantity: contractMintFee,
4754
+ pricePerToken: salesConfig.pricePerToken,
4755
+ saleStart: salesConfig.saleStart.toString(),
4756
+ saleEnd: salesConfig.saleEnd.toString()
4757
+ };
4607
4758
  }
4608
- if (pad) {
4609
- while ((out.length * bitsPerChar & 7) !== 0) {
4610
- out += "=";
4611
- }
4612
- }
4613
- return out;
4759
+ return {
4760
+ saleType: "allowlist",
4761
+ address: minter,
4762
+ saleStart: salesConfig.saleStart.toString(),
4763
+ saleEnd: salesConfig.saleEnd.toString(),
4764
+ merkleRoot: salesConfig.presaleMerkleRoot,
4765
+ mintFeePerQuantity: contractMintFee
4766
+ };
4614
4767
  }
4615
- function rfc4648({ name, prefix, bitsPerChar, alphabet }) {
4616
- return from({
4617
- prefix,
4618
- name,
4619
- encode(input) {
4620
- return encode(input, alphabet, bitsPerChar);
4621
- },
4622
- decode(input) {
4623
- return decode(input, alphabet, bitsPerChar, name);
4624
- }
4625
- });
4768
+ function makeOnchainPrepareMintFromCreate({
4769
+ contractAddress,
4770
+ tokenId,
4771
+ result,
4772
+ minter,
4773
+ getContractMintFee,
4774
+ contractVersion
4775
+ }) {
4776
+ return async (params) => {
4777
+ const subgraphSalesConfig = await toSalesStrategyFromSubgraph({
4778
+ minter,
4779
+ getContractMintFee,
4780
+ salesConfig: result
4781
+ });
4782
+ return {
4783
+ parameters: makePrepareMint1155TokenParams({
4784
+ salesConfigAndTokenInfo: {
4785
+ salesConfig: subgraphSalesConfig,
4786
+ contractVersion
4787
+ },
4788
+ ...params,
4789
+ tokenContract: contractAddress,
4790
+ tokenId
4791
+ }),
4792
+ costs: parseMintCosts({
4793
+ allowListEntry: params.allowListEntry,
4794
+ quantityToMint: BigInt(params.quantityToMint),
4795
+ salesConfig: subgraphSalesConfig
4796
+ }),
4797
+ erc20Approval: getRequiredErc20Approvals(params, subgraphSalesConfig)
4798
+ };
4799
+ };
4626
4800
  }
4627
4801
 
4628
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base32.js
4629
- var base32 = rfc4648({
4630
- prefix: "b",
4631
- name: "base32",
4632
- alphabet: "abcdefghijklmnopqrstuvwxyz234567",
4633
- bitsPerChar: 5
4634
- });
4635
- var base32upper = rfc4648({
4636
- prefix: "B",
4637
- name: "base32upper",
4638
- alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
4639
- bitsPerChar: 5
4640
- });
4641
- var base32pad = rfc4648({
4642
- prefix: "c",
4643
- name: "base32pad",
4644
- alphabet: "abcdefghijklmnopqrstuvwxyz234567=",
4645
- bitsPerChar: 5
4646
- });
4647
- var base32padupper = rfc4648({
4648
- prefix: "C",
4649
- name: "base32padupper",
4650
- alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",
4651
- bitsPerChar: 5
4652
- });
4653
- var base32hex = rfc4648({
4654
- prefix: "v",
4655
- name: "base32hex",
4656
- alphabet: "0123456789abcdefghijklmnopqrstuv",
4657
- bitsPerChar: 5
4658
- });
4659
- var base32hexupper = rfc4648({
4660
- prefix: "V",
4661
- name: "base32hexupper",
4662
- alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV",
4663
- bitsPerChar: 5
4664
- });
4665
- var base32hexpad = rfc4648({
4666
- prefix: "t",
4667
- name: "base32hexpad",
4668
- alphabet: "0123456789abcdefghijklmnopqrstuv=",
4669
- bitsPerChar: 5
4670
- });
4671
- var base32hexpadupper = rfc4648({
4672
- prefix: "T",
4673
- name: "base32hexpadupper",
4674
- alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV=",
4675
- bitsPerChar: 5
4676
- });
4677
- var base32z = rfc4648({
4678
- prefix: "h",
4679
- name: "base32z",
4680
- alphabet: "ybndrfg8ejkmcpqxot1uwisza345h769",
4681
- bitsPerChar: 5
4682
- });
4683
-
4684
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base58.js
4685
- var base58btc = baseX({
4686
- name: "base58btc",
4687
- prefix: "z",
4688
- alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
4689
- });
4690
- var base58flickr = baseX({
4691
- name: "base58flickr",
4692
- prefix: "Z",
4693
- alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
4694
- });
4695
-
4696
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/vendor/varint.js
4697
- var encode_1 = encode2;
4698
- var MSB = 128;
4699
- var REST = 127;
4700
- var MSBALL = ~REST;
4701
- var INT = Math.pow(2, 31);
4702
- function encode2(num, out, offset) {
4703
- out = out || [];
4704
- offset = offset || 0;
4705
- var oldOffset = offset;
4706
- while (num >= INT) {
4707
- out[offset++] = num & 255 | MSB;
4708
- num /= 128;
4709
- }
4710
- while (num & MSBALL) {
4711
- out[offset++] = num & 255 | MSB;
4712
- num >>>= 7;
4713
- }
4714
- out[offset] = num | 0;
4715
- encode2.bytes = offset - oldOffset + 1;
4716
- return out;
4717
- }
4718
- var decode2 = read;
4719
- var MSB$1 = 128;
4720
- var REST$1 = 127;
4721
- function read(buf, offset) {
4722
- var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;
4723
- do {
4724
- if (counter >= l) {
4725
- read.bytes = 0;
4726
- throw new RangeError("Could not decode varint");
4802
+ // src/create/1155-create-helper.ts
4803
+ var ROYALTY_BPS_DEFAULT = 1e3;
4804
+ var getTokenIdFromCreateReceipt = (receipt) => {
4805
+ for (const data of receipt.logs) {
4806
+ try {
4807
+ const decodedLog = decodeEventLog2({
4808
+ abi: zoraCreator1155ImplABI6,
4809
+ eventName: "SetupNewToken",
4810
+ ...data
4811
+ });
4812
+ if (decodedLog && decodedLog.eventName === "SetupNewToken") {
4813
+ return decodedLog.args.tokenId;
4814
+ }
4815
+ } catch (err) {
4727
4816
  }
4728
- b = buf[counter++];
4729
- res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);
4730
- shift += 7;
4731
- } while (b >= MSB$1);
4732
- read.bytes = counter - offset;
4733
- return res;
4734
- }
4735
- var N1 = Math.pow(2, 7);
4736
- var N2 = Math.pow(2, 14);
4737
- var N3 = Math.pow(2, 21);
4738
- var N4 = Math.pow(2, 28);
4739
- var N5 = Math.pow(2, 35);
4740
- var N6 = Math.pow(2, 42);
4741
- var N7 = Math.pow(2, 49);
4742
- var N8 = Math.pow(2, 56);
4743
- var N9 = Math.pow(2, 63);
4744
- var length = function(value) {
4745
- return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;
4817
+ }
4818
+ throw new Error(
4819
+ "No event found in receipt that could be used to get tokenId"
4820
+ );
4746
4821
  };
4747
- var varint = {
4748
- encode: encode_1,
4749
- decode: decode2,
4750
- encodingLength: length
4822
+ var getContractAddressFromReceipt = (receipt) => {
4823
+ for (const data of receipt.logs) {
4824
+ try {
4825
+ const decodedLog = decodeEventLog2({
4826
+ abi: zoraCreator1155FactoryImplABI2,
4827
+ eventName: "SetupNewContract",
4828
+ ...data
4829
+ });
4830
+ if (decodedLog && decodedLog.eventName === "SetupNewContract") {
4831
+ return decodedLog.args.newContract;
4832
+ }
4833
+ } catch (err) {
4834
+ }
4835
+ }
4836
+ throw new Error(
4837
+ "No event found in receipt that could be used to get contract address"
4838
+ );
4751
4839
  };
4752
- var _brrp_varint = varint;
4753
- var varint_default = _brrp_varint;
4754
-
4755
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/varint.js
4756
- function decode3(data, offset = 0) {
4757
- const code = varint_default.decode(data, offset);
4758
- return [code, varint_default.decode.bytes];
4759
- }
4760
- function encodeTo(int, target, offset = 0) {
4761
- varint_default.encode(int, target, offset);
4762
- return target;
4763
- }
4764
- function encodingLength(int) {
4765
- return varint_default.encodingLength(int);
4840
+ function makeCreateContractAndTokenCall({
4841
+ account,
4842
+ contract,
4843
+ royaltyBPS,
4844
+ fundsRecipient,
4845
+ tokenSetupActions,
4846
+ chainId
4847
+ }) {
4848
+ const accountAddress = typeof account === "string" ? account : account.address;
4849
+ return makeContractParameters({
4850
+ abi: zoraCreator1155FactoryImplABI2,
4851
+ functionName: "createContractDeterministic",
4852
+ account,
4853
+ address: zoraCreator1155FactoryImplAddress2[chainId],
4854
+ args: [
4855
+ contract.uri,
4856
+ contract.name,
4857
+ {
4858
+ // deprecated
4859
+ royaltyMintSchedule: 0,
4860
+ royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,
4861
+ royaltyRecipient: fundsRecipient || accountAddress
4862
+ },
4863
+ contract.defaultAdmin || accountAddress,
4864
+ tokenSetupActions
4865
+ ]
4866
+ });
4766
4867
  }
4767
-
4768
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/hashes/digest.js
4769
- function create(code, digest) {
4770
- const size = digest.byteLength;
4771
- const sizeOffset = encodingLength(code);
4772
- const digestOffset = sizeOffset + encodingLength(size);
4773
- const bytes = new Uint8Array(digestOffset + size);
4774
- encodeTo(code, bytes, 0);
4775
- encodeTo(size, bytes, sizeOffset);
4776
- bytes.set(digest, digestOffset);
4777
- return new Digest(code, size, digest, bytes);
4868
+ function makeCreateTokenCall({
4869
+ contractAddress,
4870
+ account,
4871
+ tokenSetupActions
4872
+ }) {
4873
+ return makeContractParameters({
4874
+ abi: zoraCreator1155ImplABI6,
4875
+ functionName: "multicall",
4876
+ account,
4877
+ address: contractAddress,
4878
+ args: [tokenSetupActions]
4879
+ });
4778
4880
  }
4779
- function decode4(multihash) {
4780
- const bytes = coerce2(multihash);
4781
- const [code, sizeOffset] = decode3(bytes);
4782
- const [size, digestOffset] = decode3(bytes.subarray(sizeOffset));
4783
- const digest = bytes.subarray(sizeOffset + digestOffset);
4784
- if (digest.byteLength !== size) {
4785
- throw new Error("Incorrect length");
4881
+ var Create1155Client = class {
4882
+ constructor({
4883
+ chainId,
4884
+ publicClient,
4885
+ contractGetter
4886
+ }) {
4887
+ this.chainId = chainId;
4888
+ this.publicClient = publicClient;
4889
+ this.contractGetter = contractGetter;
4786
4890
  }
4787
- return new Digest(code, size, digest, bytes);
4788
- }
4789
- function equals2(a, b) {
4790
- if (a === b) {
4791
- return true;
4792
- } else {
4793
- const data = b;
4794
- return a.code === data.code && a.size === data.size && data.bytes instanceof Uint8Array && equals(a.bytes, data.bytes);
4891
+ async createNew1155(props) {
4892
+ return createNew1155ContractAndToken({
4893
+ ...props,
4894
+ publicClient: this.publicClient,
4895
+ chainId: this.chainId
4896
+ });
4795
4897
  }
4796
- }
4797
- var Digest = class {
4798
- /**
4799
- * Creates a multihash digest.
4800
- */
4801
- constructor(code, size, digest, bytes) {
4802
- __publicField(this, "code");
4803
- __publicField(this, "size");
4804
- __publicField(this, "digest");
4805
- __publicField(this, "bytes");
4806
- this.code = code;
4807
- this.size = size;
4808
- this.digest = digest;
4809
- this.bytes = bytes;
4898
+ async createNew1155OnExistingContract({
4899
+ contractAddress: contract,
4900
+ account,
4901
+ token,
4902
+ getAdditionalSetupActions
4903
+ }) {
4904
+ return createNew1155Token({
4905
+ contractAddress: contract,
4906
+ account,
4907
+ token,
4908
+ getAdditionalSetupActions,
4909
+ publicClient: this.publicClient,
4910
+ chainId: this.chainId,
4911
+ contractGetter: this.contractGetter
4912
+ });
4810
4913
  }
4811
4914
  };
4812
-
4813
- // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/cid.js
4814
- function format(link, base3) {
4815
- const { bytes, version } = link;
4816
- switch (version) {
4817
- case 0:
4818
- return toStringV0(bytes, baseCache(link), base3 ?? base58btc.encoder);
4819
- default:
4820
- return toStringV1(bytes, baseCache(link), base3 ?? base32.encoder);
4821
- }
4915
+ async function createNew1155ContractAndToken({
4916
+ contract,
4917
+ account,
4918
+ chainId,
4919
+ token,
4920
+ publicClient,
4921
+ getAdditionalSetupActions
4922
+ }) {
4923
+ const nextTokenId = 1n;
4924
+ const contractVersion = new1155ContractVersion(chainId);
4925
+ const {
4926
+ minter,
4927
+ newToken,
4928
+ setupActions: tokenSetupActions
4929
+ } = await prepareSetupActions({
4930
+ chainId,
4931
+ account,
4932
+ contractVersion,
4933
+ nextTokenId,
4934
+ token,
4935
+ getAdditionalSetupActions,
4936
+ contractName: contract.name
4937
+ });
4938
+ const request = makeCreateContractAndTokenCall({
4939
+ contract,
4940
+ account,
4941
+ chainId,
4942
+ tokenSetupActions,
4943
+ fundsRecipient: token.payoutRecipient,
4944
+ royaltyBPS: token.royaltyBPS
4945
+ });
4946
+ const contractAddress = await getDeterministicContractAddress({
4947
+ account,
4948
+ publicClient,
4949
+ setupActions: tokenSetupActions,
4950
+ chainId,
4951
+ contract
4952
+ });
4953
+ const prepareMint = makeOnchainPrepareMintFromCreate({
4954
+ contractAddress,
4955
+ contractVersion,
4956
+ minter,
4957
+ result: newToken.salesConfig,
4958
+ tokenId: nextTokenId,
4959
+ // to get the contract wide mint fee, we get what it would be for a new contract
4960
+ getContractMintFee: async () => getNewContractMintFee({
4961
+ publicClient,
4962
+ chainId
4963
+ })
4964
+ });
4965
+ return {
4966
+ parameters: request,
4967
+ tokenSetupActions,
4968
+ newTokenId: nextTokenId,
4969
+ newToken,
4970
+ contractAddress,
4971
+ contractVersion,
4972
+ minter,
4973
+ prepareMint
4974
+ };
4822
4975
  }
4823
- var cache = /* @__PURE__ */ new WeakMap();
4824
- function baseCache(cid) {
4825
- const baseCache2 = cache.get(cid);
4826
- if (baseCache2 == null) {
4827
- const baseCache3 = /* @__PURE__ */ new Map();
4828
- cache.set(cid, baseCache3);
4829
- return baseCache3;
4830
- }
4831
- return baseCache2;
4976
+ async function createNew1155Token({
4977
+ contractAddress,
4978
+ account,
4979
+ getAdditionalSetupActions,
4980
+ token,
4981
+ chainId,
4982
+ contractGetter
4983
+ }) {
4984
+ const { nextTokenId, contractVersion, mintFee, name } = await contractGetter.getContractInfo({ contractAddress, retries: 5 });
4985
+ const {
4986
+ minter,
4987
+ newToken,
4988
+ setupActions: tokenSetupActions
4989
+ } = await prepareSetupActions({
4990
+ chainId,
4991
+ account,
4992
+ contractVersion,
4993
+ nextTokenId,
4994
+ token,
4995
+ getAdditionalSetupActions,
4996
+ contractName: name
4997
+ });
4998
+ const request = makeCreateTokenCall({
4999
+ contractAddress,
5000
+ account,
5001
+ tokenSetupActions
5002
+ });
5003
+ const prepareMint = makeOnchainPrepareMintFromCreate({
5004
+ contractAddress,
5005
+ contractVersion,
5006
+ minter,
5007
+ result: newToken.salesConfig,
5008
+ tokenId: nextTokenId,
5009
+ getContractMintFee: async () => mintFee
5010
+ });
5011
+ return {
5012
+ parameters: request,
5013
+ tokenSetupActions,
5014
+ newTokenId: nextTokenId,
5015
+ newToken,
5016
+ contractVersion,
5017
+ minter,
5018
+ prepareMint
5019
+ };
4832
5020
  }
4833
- var _a;
4834
- var CID = class _CID {
4835
- /**
4836
- * @param version - Version of the CID
4837
- * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
4838
- * @param multihash - (Multi)hash of the of the content.
4839
- */
4840
- constructor(version, code, multihash, bytes) {
4841
- __publicField(this, "code");
4842
- __publicField(this, "version");
4843
- __publicField(this, "multihash");
4844
- __publicField(this, "bytes");
4845
- __publicField(this, "/");
4846
- __publicField(this, _a, "CID");
4847
- this.code = code;
4848
- this.version = version;
4849
- this.multihash = multihash;
4850
- this.bytes = bytes;
4851
- this["/"] = bytes;
4852
- }
4853
- /**
4854
- * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`
4855
- * please either use `CID.asCID(cid)` or switch to new signalling mechanism
4856
- *
4857
- * @deprecated
4858
- */
4859
- get asCID() {
4860
- return this;
4861
- }
4862
- // ArrayBufferView
4863
- get byteOffset() {
4864
- return this.bytes.byteOffset;
4865
- }
4866
- // ArrayBufferView
4867
- get byteLength() {
4868
- return this.bytes.byteLength;
4869
- }
4870
- toV0() {
4871
- switch (this.version) {
4872
- case 0: {
4873
- return this;
4874
- }
4875
- case 1: {
4876
- const { code, multihash } = this;
4877
- if (code !== DAG_PB_CODE) {
4878
- throw new Error("Cannot convert a non dag-pb CID to CIDv0");
4879
- }
4880
- if (multihash.code !== SHA_256_CODE) {
4881
- throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");
4882
- }
4883
- return _CID.createV0(multihash);
4884
- }
4885
- default: {
4886
- throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`);
4887
- }
4888
- }
4889
- }
4890
- toV1() {
4891
- switch (this.version) {
4892
- case 0: {
4893
- const { code, digest } = this.multihash;
4894
- const multihash = create(code, digest);
4895
- return _CID.createV1(this.code, multihash);
4896
- }
4897
- case 1: {
4898
- return this;
4899
- }
4900
- default: {
4901
- throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`);
4902
- }
4903
- }
4904
- }
4905
- equals(other) {
4906
- return _CID.equals(this, other);
4907
- }
4908
- static equals(self, other) {
4909
- const unknown = other;
4910
- return unknown != null && self.code === unknown.code && self.version === unknown.version && equals2(self.multihash, unknown.multihash);
4911
- }
4912
- toString(base3) {
4913
- return format(this, base3);
4914
- }
4915
- toJSON() {
4916
- return { "/": format(this) };
4917
- }
4918
- link() {
4919
- return this;
4920
- }
4921
- // Legacy
4922
- [(_a = Symbol.toStringTag, Symbol.for("nodejs.util.inspect.custom"))]() {
4923
- return `CID(${this.toString()})`;
4924
- }
4925
- /**
4926
- * Takes any input `value` and returns a `CID` instance if it was
4927
- * a `CID` otherwise returns `null`. If `value` is instanceof `CID`
4928
- * it will return value back. If `value` is not instance of this CID
4929
- * class, but is compatible CID it will return new instance of this
4930
- * `CID` class. Otherwise returns null.
4931
- *
4932
- * This allows two different incompatible versions of CID library to
4933
- * co-exist and interop as long as binary interface is compatible.
4934
- */
4935
- static asCID(input) {
4936
- if (input == null) {
4937
- return null;
4938
- }
4939
- const value = input;
4940
- if (value instanceof _CID) {
4941
- return value;
4942
- } else if (value["/"] != null && value["/"] === value.bytes || value.asCID === value) {
4943
- const { version, code, multihash, bytes } = value;
4944
- return new _CID(version, code, multihash, bytes ?? encodeCID(version, code, multihash.bytes));
4945
- } else if (value[cidSymbol] === true) {
4946
- const { version, multihash, code } = value;
4947
- const digest = decode4(multihash);
4948
- return _CID.create(version, code, digest);
4949
- } else {
4950
- return null;
4951
- }
4952
- }
4953
- /**
4954
- * @param version - Version of the CID
4955
- * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
4956
- * @param digest - (Multi)hash of the of the content.
4957
- */
4958
- static create(version, code, digest) {
4959
- if (typeof code !== "number") {
4960
- throw new Error("String codecs are no longer supported");
4961
- }
4962
- if (!(digest.bytes instanceof Uint8Array)) {
4963
- throw new Error("Invalid digest");
4964
- }
4965
- switch (version) {
4966
- case 0: {
4967
- if (code !== DAG_PB_CODE) {
4968
- throw new Error(`Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`);
4969
- } else {
4970
- return new _CID(version, code, digest, digest.bytes);
5021
+ async function prepareSetupActions({
5022
+ chainId,
5023
+ account,
5024
+ contractVersion,
5025
+ nextTokenId,
5026
+ token,
5027
+ contractName,
5028
+ getAdditionalSetupActions
5029
+ }) {
5030
+ const {
5031
+ minter,
5032
+ newToken,
5033
+ setupActions: tokenSetupActions
5034
+ } = await constructCreate1155TokenCalls({
5035
+ chainId,
5036
+ ownerAddress: account,
5037
+ contractVersion,
5038
+ nextTokenId,
5039
+ ...token,
5040
+ contractName
5041
+ });
5042
+ const setupActions = getAdditionalSetupActions ? [
5043
+ ...getAdditionalSetupActions({
5044
+ tokenId: nextTokenId
5045
+ }),
5046
+ ...tokenSetupActions
5047
+ ] : tokenSetupActions;
5048
+ return { minter, newToken, setupActions };
5049
+ }
5050
+
5051
+ // src/sparks/mints-queries.ts
5052
+ var getMintsAccountBalanceWithPriceQuery = (account) => {
5053
+ const query = `
5054
+ query GetMintAccountBalances($account: String!) {
5055
+ mintAccountBalances(where: { account: $account }) {
5056
+ balance
5057
+ mintToken {
5058
+ id
5059
+ pricePerToken
4971
5060
  }
4972
5061
  }
4973
- case 1: {
4974
- const bytes = encodeCID(version, code, digest.bytes);
4975
- return new _CID(version, code, digest, bytes);
4976
- }
4977
- default: {
4978
- throw new Error("Invalid version");
4979
- }
4980
- }
4981
- }
4982
- /**
4983
- * Simplified version of `create` for CIDv0.
4984
- */
4985
- static createV0(digest) {
4986
- return _CID.create(0, DAG_PB_CODE, digest);
4987
- }
4988
- /**
4989
- * Simplified version of `create` for CIDv1.
4990
- *
4991
- * @param code - Content encoding format code.
4992
- * @param digest - Multihash of the content.
4993
- */
4994
- static createV1(code, digest) {
4995
- return _CID.create(1, code, digest);
4996
- }
4997
- /**
4998
- * Decoded a CID from its binary representation. The byte array must contain
4999
- * only the CID with no additional bytes.
5000
- *
5001
- * An error will be thrown if the bytes provided do not contain a valid
5002
- * binary representation of a CID.
5003
- */
5004
- static decode(bytes) {
5005
- const [cid, remainder] = _CID.decodeFirst(bytes);
5006
- if (remainder.length !== 0) {
5007
- throw new Error("Incorrect length");
5008
- }
5009
- return cid;
5010
- }
5011
- /**
5012
- * Decoded a CID from its binary representation at the beginning of a byte
5013
- * array.
5014
- *
5015
- * Returns an array with the first element containing the CID and the second
5016
- * element containing the remainder of the original byte array. The remainder
5017
- * will be a zero-length byte array if the provided bytes only contained a
5018
- * binary CID representation.
5019
- */
5020
- static decodeFirst(bytes) {
5021
- const specs = _CID.inspectBytes(bytes);
5022
- const prefixSize = specs.size - specs.multihashSize;
5023
- const multihashBytes = coerce2(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));
5024
- if (multihashBytes.byteLength !== specs.multihashSize) {
5025
- throw new Error("Incorrect length");
5026
5062
  }
5027
- const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);
5028
- const digest = new Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);
5029
- const cid = specs.version === 0 ? _CID.createV0(digest) : _CID.createV1(specs.codec, digest);
5030
- return [cid, bytes.subarray(specs.size)];
5031
- }
5032
- /**
5033
- * Inspect the initial bytes of a CID to determine its properties.
5034
- *
5035
- * Involves decoding up to 4 varints. Typically this will require only 4 to 6
5036
- * bytes but for larger multicodec code values and larger multihash digest
5037
- * lengths these varints can be quite large. It is recommended that at least
5038
- * 10 bytes be made available in the `initialBytes` argument for a complete
5039
- * inspection.
5040
- */
5041
- static inspectBytes(initialBytes) {
5042
- let offset = 0;
5043
- const next = () => {
5044
- const [i, length2] = decode3(initialBytes.subarray(offset));
5045
- offset += length2;
5046
- return i;
5063
+ `;
5064
+ return {
5065
+ query,
5066
+ variables: { account }
5067
+ };
5068
+ };
5069
+ var selectMintsToCollectWithFromQueryResult = (mintAccountBalances, quantityToCollect) => {
5070
+ const parsed = mintAccountBalances.map((r) => {
5071
+ return {
5072
+ tokenId: BigInt(r.mintToken.id),
5073
+ quantity: BigInt(r.balance),
5074
+ pricePerToken: BigInt(r.mintToken.pricePerToken)
5047
5075
  };
5048
- let version = next();
5049
- let codec = DAG_PB_CODE;
5050
- if (version === 18) {
5051
- version = 0;
5052
- offset = 0;
5053
- } else {
5054
- codec = next();
5055
- }
5056
- if (version !== 0 && version !== 1) {
5057
- throw new RangeError(`Invalid CID version ${version}`);
5076
+ });
5077
+ const sorted = parsed.sort((a, b) => {
5078
+ if (a.pricePerToken < b.pricePerToken) {
5079
+ return -1;
5058
5080
  }
5059
- const prefixSize = offset;
5060
- const multihashCode = next();
5061
- const digestSize = next();
5062
- const size = offset + digestSize;
5063
- const multihashSize = size - prefixSize;
5064
- return { version, codec, multihashCode, digestSize, multihashSize, size };
5065
- }
5066
- /**
5067
- * Takes cid in a string representation and creates an instance. If `base`
5068
- * decoder is not provided will use a default from the configuration. It will
5069
- * throw an error if encoding of the CID is not compatible with supplied (or
5070
- * a default decoder).
5071
- */
5072
- static parse(source, base3) {
5073
- const [prefix, bytes] = parseCIDtoBytes(source, base3);
5074
- const cid = _CID.decode(bytes);
5075
- if (cid.version === 0 && source[0] !== "Q") {
5076
- throw Error("Version 0 CID string must not include multibase prefix");
5081
+ return 1;
5082
+ });
5083
+ let remainingQuantity = quantityToCollect;
5084
+ const tokenIds = [];
5085
+ const quantities = [];
5086
+ while (remainingQuantity > 0) {
5087
+ const next = sorted.shift();
5088
+ if (!next) {
5089
+ throw new Error("Not enough MINTs to collect with");
5077
5090
  }
5078
- baseCache(cid).set(prefix, source);
5079
- return cid;
5091
+ const quantityToUse = remainingQuantity > next.quantity ? next.quantity : remainingQuantity;
5092
+ tokenIds.push(next.tokenId);
5093
+ quantities.push(quantityToUse);
5094
+ remainingQuantity -= quantityToUse;
5080
5095
  }
5096
+ return {
5097
+ tokenIds,
5098
+ quantities
5099
+ };
5100
+ };
5101
+ var sumBalances = (mintAccountBalances) => {
5102
+ return mintAccountBalances.reduce((acc, curr) => {
5103
+ return acc + BigInt(curr.balance);
5104
+ }, BigInt(0));
5081
5105
  };
5082
- function parseCIDtoBytes(source, base3) {
5083
- switch (source[0]) {
5084
- case "Q": {
5085
- const decoder = base3 ?? base58btc;
5086
- return [
5087
- base58btc.prefix,
5088
- decoder.decode(`${base58btc.prefix}${source}`)
5089
- ];
5090
- }
5091
- case base58btc.prefix: {
5092
- const decoder = base3 ?? base58btc;
5093
- return [base58btc.prefix, decoder.decode(source)];
5094
- }
5095
- case base32.prefix: {
5096
- const decoder = base3 ?? base32;
5097
- return [base32.prefix, decoder.decode(source)];
5098
- }
5099
- default: {
5100
- if (base3 == null) {
5101
- throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");
5102
- }
5103
- return [source[0], base3.decode(source)];
5104
- }
5105
- }
5106
- }
5107
- function toStringV0(bytes, cache2, base3) {
5108
- const { prefix } = base3;
5109
- if (prefix !== base58btc.prefix) {
5110
- throw Error(`Cannot string encode V0 in ${base3.name} encoding`);
5111
- }
5112
- const cid = cache2.get(prefix);
5113
- if (cid == null) {
5114
- const cid2 = base3.encode(bytes).slice(1);
5115
- cache2.set(prefix, cid2);
5116
- return cid2;
5117
- } else {
5118
- return cid;
5119
- }
5120
- }
5121
- function toStringV1(bytes, cache2, base3) {
5122
- const { prefix } = base3;
5123
- const cid = cache2.get(prefix);
5124
- if (cid == null) {
5125
- const cid2 = base3.encode(bytes);
5126
- cache2.set(prefix, cid2);
5127
- return cid2;
5128
- } else {
5129
- return cid;
5130
- }
5131
- }
5132
- var DAG_PB_CODE = 112;
5133
- var SHA_256_CODE = 18;
5134
- function encodeCID(version, code, multihash) {
5135
- const codeOffset = encodingLength(version);
5136
- const hashOffset = codeOffset + encodingLength(code);
5137
- const bytes = new Uint8Array(hashOffset + multihash.byteLength);
5138
- encodeTo(version, bytes, 0);
5139
- encodeTo(code, bytes, codeOffset);
5140
- bytes.set(multihash, hashOffset);
5141
- return bytes;
5142
- }
5143
- var cidSymbol = Symbol.for("@ipld/js-cid/CID");
5144
5106
 
5145
- // src/ipfs/ipfs.ts
5146
- function isCID(str) {
5147
- if (!str)
5148
- return false;
5149
- try {
5150
- CID.parse(str);
5151
- return true;
5152
- } catch (e) {
5153
- if (/^(bafy|Qm)/.test(str))
5154
- return true;
5155
- return false;
5156
- }
5157
- }
5158
- function normalizeIPFSUrl(url) {
5159
- if (!url || typeof url !== "string")
5160
- return null;
5161
- url = url.replace(/"/g, "");
5162
- if (isNormalizedIPFSURL(url))
5163
- return url;
5164
- if (isCID(url))
5165
- return `ipfs://${url}`;
5166
- if (!isIPFSUrl(url))
5167
- return null;
5168
- if (isGatewayIPFSUrl(url)) {
5169
- const parsed = new URL(url.replace(/^\/\//, "http://"));
5170
- parsed.pathname = parsed.pathname.replace(/^\/ipfs\//, "");
5171
- const cid = parsed.toString().replace(`${parsed.protocol}//${parsed.host}/`, "");
5172
- return `ipfs://${cid}`;
5173
- }
5174
- return null;
5175
- }
5176
- function isNormalizedIPFSURL(url) {
5177
- return url && typeof url === "string" ? url.startsWith("ipfs://") : false;
5107
+ // src/sparks/sparks-contracts.ts
5108
+ import {
5109
+ mintsSafeTransferBatchTypedDataDefinition,
5110
+ mintsSafeTransferTypedDataDefinition,
5111
+ zoraMints1155Config,
5112
+ zoraMintsManagerImplABI,
5113
+ zoraMintsManagerImplAddress,
5114
+ zoraMintsManagerImplConfig,
5115
+ zoraSparksManagerImplABI,
5116
+ zoraSparksManagerImplAddress
5117
+ } from "@zoralabs/protocol-deployments";
5118
+ import {
5119
+ decodeErrorResult,
5120
+ encodeFunctionData as encodeFunctionData3,
5121
+ zeroAddress as zeroAddress7
5122
+ } from "viem";
5123
+ var addressOrAccountAddress = (address) => typeof address === "string" ? address : address.address;
5124
+ var mintWithEthParams = ({
5125
+ tokenId,
5126
+ quantity,
5127
+ recipient,
5128
+ chainId,
5129
+ pricePerMint,
5130
+ account
5131
+ }) => makeContractParameters({
5132
+ abi: zoraSparksManagerImplABI,
5133
+ address: zoraSparksManagerImplAddress[chainId],
5134
+ functionName: "mintWithEth",
5135
+ args: [tokenId, quantity, recipient || addressOrAccountAddress(account)],
5136
+ value: pricePerMint * quantity,
5137
+ account
5138
+ });
5139
+ var getPaidMintValue = (quantities, pricePerMint) => {
5140
+ if (!pricePerMint || pricePerMint === 0n)
5141
+ return;
5142
+ return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;
5143
+ };
5144
+ var mintsBalanceOfAccountParams = ({
5145
+ account,
5146
+ chainId
5147
+ }) => ({
5148
+ abi: zoraMints1155Config.abi,
5149
+ address: zoraMints1155Config.address[chainId],
5150
+ functionName: "balanceOfAccount",
5151
+ args: [account]
5152
+ });
5153
+ var encodeCollectOnManager = ({
5154
+ zoraCreator1155Contract,
5155
+ minter,
5156
+ zoraCreator1155TokenId,
5157
+ mintArguments
5158
+ }) => encodeFunctionData3({
5159
+ abi: zoraMintsManagerImplConfig.abi,
5160
+ functionName: "collect",
5161
+ args: [
5162
+ zoraCreator1155Contract,
5163
+ minter,
5164
+ zoraCreator1155TokenId,
5165
+ mintArguments
5166
+ ]
5167
+ });
5168
+ function collectWithMintsParams({
5169
+ tokenIds,
5170
+ quantities,
5171
+ chainId,
5172
+ paidMintPricePerToken,
5173
+ account,
5174
+ mintArguments,
5175
+ minter,
5176
+ zoraCreator1155Contract,
5177
+ zoraCreator1155TokenId
5178
+ }) {
5179
+ const call = encodeCollectOnManager({
5180
+ tokenIds,
5181
+ quantities,
5182
+ zoraCreator1155Contract,
5183
+ zoraCreator1155TokenId,
5184
+ minter,
5185
+ mintArguments
5186
+ });
5187
+ return makeContractParameters({
5188
+ abi: zoraMints1155Config.abi,
5189
+ address: zoraMints1155Config.address[chainId],
5190
+ functionName: "transferBatchToManagerAndCall",
5191
+ args: [tokenIds, quantities, call],
5192
+ // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract
5193
+ // for the paid mint cost.
5194
+ value: getPaidMintValue(quantities, paidMintPricePerToken),
5195
+ account
5196
+ });
5178
5197
  }
5179
- function isGatewayIPFSUrl(url) {
5180
- if (url && typeof url === "string") {
5181
- try {
5182
- const parsed = new URL(url.replace(/^"|'(.*)"|'$/, "$1"));
5183
- return !isNormalizedIPFSURL(url) && parsed && parsed.pathname.startsWith("/ipfs/");
5184
- } catch {
5185
- return false;
5186
- }
5198
+ function getMintsEthPrice({
5199
+ publicClient
5200
+ }) {
5201
+ const chainId = publicClient.chain?.id;
5202
+ if (!chainId || !zoraMintsManagerImplAddress[chainId]) {
5203
+ throw new Error(`Chain id ${chainId} not supported`);
5187
5204
  }
5188
- return false;
5205
+ return publicClient.readContract({
5206
+ abi: zoraMintsManagerImplABI,
5207
+ address: zoraMintsManagerImplAddress[chainId],
5208
+ functionName: "getEthPrice"
5209
+ });
5189
5210
  }
5190
- function isIPFSUrl(url) {
5191
- return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;
5211
+ function makePermitTransferBatchAndTypeData({
5212
+ tokenIds,
5213
+ quantities,
5214
+ chainId,
5215
+ mintsOwner,
5216
+ to,
5217
+ nonce,
5218
+ deadline,
5219
+ safeTransferData
5220
+ }) {
5221
+ const permit = {
5222
+ owner: typeof mintsOwner === "string" ? mintsOwner : mintsOwner.address,
5223
+ to,
5224
+ tokenIds,
5225
+ quantities,
5226
+ deadline,
5227
+ nonce,
5228
+ safeTransferData
5229
+ };
5230
+ const typedData = {
5231
+ ...mintsSafeTransferBatchTypedDataDefinition({
5232
+ chainId,
5233
+ message: permit
5234
+ }),
5235
+ account: mintsOwner
5236
+ };
5237
+ return {
5238
+ permit,
5239
+ typedData
5240
+ };
5192
5241
  }
5193
- function isNormalizeableIPFSUrl(url) {
5194
- return url ? isIPFSUrl(url) || isCID(url) : false;
5242
+ function makePermitTransferTypeData({
5243
+ tokenId,
5244
+ quantity,
5245
+ chainId,
5246
+ mintsOwner,
5247
+ to,
5248
+ nonce,
5249
+ deadline,
5250
+ safeTransferData
5251
+ }) {
5252
+ const permit = {
5253
+ owner: typeof mintsOwner === "string" ? mintsOwner : mintsOwner.address,
5254
+ to,
5255
+ tokenId,
5256
+ quantity,
5257
+ deadline,
5258
+ nonce,
5259
+ safeTransferData
5260
+ };
5261
+ const typedData = {
5262
+ ...mintsSafeTransferTypedDataDefinition({
5263
+ chainId,
5264
+ message: permit
5265
+ }),
5266
+ account: mintsOwner
5267
+ };
5268
+ return {
5269
+ permit,
5270
+ typedData
5271
+ };
5195
5272
  }
5196
-
5197
- // src/ipfs/gateway.ts
5198
- var IPFS_GATEWAY = "https://magic.decentralized-content.com";
5199
- var ARWEAVE_GATEWAY = "https://arweave.net";
5200
- function arweaveGatewayUrl(normalizedArweaveUrl) {
5201
- if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== "string")
5202
- return null;
5203
- return normalizedArweaveUrl.replace("ar://", `${ARWEAVE_GATEWAY}/`);
5204
- }
5205
- function ipfsGatewayUrl(url) {
5206
- if (!url || typeof url !== "string")
5207
- return null;
5208
- const normalizedIPFSUrl = normalizeIPFSUrl(url);
5209
- if (normalizedIPFSUrl) {
5210
- return normalizedIPFSUrl.replace("ipfs://", `${IPFS_GATEWAY}/ipfs/`);
5211
- }
5212
- return null;
5213
- }
5214
- function getFetchableUrl(uri) {
5215
- if (!uri || typeof uri !== "string")
5216
- return null;
5217
- if (uri.startsWith("http://"))
5218
- return null;
5219
- if (isNormalizeableIPFSUrl(uri)) {
5220
- return ipfsGatewayUrl(uri);
5221
- }
5222
- if (isArweaveURL(uri)) {
5223
- return arweaveGatewayUrl(uri);
5224
- }
5225
- if (/^(https|data|blob):/.test(uri)) {
5226
- return uri;
5273
+ var encodePremintOnManager = ({
5274
+ contractCreationConfig,
5275
+ premintConfig,
5276
+ premintSignature,
5277
+ mintArguments,
5278
+ signerContract = zeroAddress7
5279
+ }) => encodeFunctionData3({
5280
+ abi: zoraMintsManagerImplConfig.abi,
5281
+ functionName: "collectPremintV2",
5282
+ args: [
5283
+ contractCreationConfig,
5284
+ premintConfig,
5285
+ premintSignature,
5286
+ mintArguments,
5287
+ signerContract
5288
+ ]
5289
+ });
5290
+ var makePermitToCollectPremintOrNonPremint = ({
5291
+ mintsOwner,
5292
+ chainId,
5293
+ deadline,
5294
+ tokenIds,
5295
+ // this quantity of MINTs will be used to collect premint
5296
+ // and will be burned. This same quantity is the quantity of
5297
+ // premint to collect.
5298
+ quantities,
5299
+ nonce,
5300
+ premint,
5301
+ collect
5302
+ }) => {
5303
+ let safeTransferData;
5304
+ if (premint) {
5305
+ safeTransferData = encodePremintOnManager(premint);
5306
+ } else if (collect) {
5307
+ safeTransferData = encodeCollectOnManager(collect);
5308
+ } else {
5309
+ throw new Error("Invalid operation");
5227
5310
  }
5228
- return null;
5229
- }
5230
-
5231
- // src/ipfs/mimeTypes.ts
5232
- var HTML = "text/html";
5233
- var MARKDOWN = "text/markdown";
5234
- var MARKDOWN_UTF8 = "text/markdown; charset=utf-8";
5235
- var TEXT_PLAIN_UTF8 = "text/plain; charset=utf-8";
5236
- var TEXT_PLAIN = "text/plain";
5237
- var CSV = "text/csv";
5238
- var NUMBERS = ".numbers";
5239
- var EXCEL = ".xlsx";
5240
- var PDF = "application/pdf";
5241
- var JPG = "image/jpg";
5242
- var JPEG = "image/jpeg";
5243
- var PNG = "image/png";
5244
- var WEBP = "image/webp";
5245
- var SVG = "image/svg+xml";
5246
- var TIFF = "image/tiff";
5247
- var GIF = "image/gif";
5248
- var isImage = (mimeType) => {
5249
- if (!mimeType)
5250
- return false;
5251
- return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);
5252
- };
5253
- var DEFAULT_THUMBNAIL_CID_HASHES = {
5254
- ["AUDIO" /* AUDIO */]: "bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4",
5255
- ["VIDEO" /* VIDEO */]: "bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu",
5256
- ["HTML" /* HTML */]: "bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq",
5257
- ["ZIP" /* ZIP */]: "bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq",
5258
- // assuming all zip files are html directories
5259
- ["TEXT" /* TEXT */]: "bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q",
5260
- default: "bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4"
5261
- };
5262
- var MP4 = "video/mp4";
5263
- var QUICKTIME = "video/quicktime";
5264
- var M4V = "video/x-m4v";
5265
- var WEBM = "video/webm";
5266
- var M4A = "audio/x-m4a";
5267
- var MPEG = "audio/mpeg";
5268
- var MP3 = "audio/mp3";
5269
- var WAV = "audio/wav";
5270
- var VND_WAV = "audio/vnd.wav";
5271
- var VND_WAVE = "audio/vnd.wave";
5272
- var WAVE = "audio/wave";
5273
- var X_WAV = "audio/x-wav";
5274
- var AIFF = "audio/aiff";
5275
- var GLTF = "model/gltf+json";
5276
- var GLB = "model/gltf-binary";
5277
- var GLTF_EXT = ".gltf";
5278
- var GLB_EXT = ".glb";
5279
- var JSON_MIME_TYPE = "application/json";
5280
- var ZIP = "application/zip";
5281
- var mimeToMediaType = {
5282
- [HTML]: "HTML" /* HTML */,
5283
- [JPG]: "IMAGE" /* IMAGE */,
5284
- [JPEG]: "IMAGE" /* IMAGE */,
5285
- [PNG]: "IMAGE" /* IMAGE */,
5286
- [WEBP]: "IMAGE" /* IMAGE */,
5287
- [SVG]: "IMAGE" /* IMAGE */,
5288
- [TIFF]: "TIFF" /* TIFF */,
5289
- [GIF]: "IMAGE" /* IMAGE */,
5290
- [MP4]: "VIDEO" /* VIDEO */,
5291
- [WEBM]: "VIDEO" /* VIDEO */,
5292
- [QUICKTIME]: "VIDEO" /* VIDEO */,
5293
- [M4V]: "VIDEO" /* VIDEO */,
5294
- [MPEG]: "AUDIO" /* AUDIO */,
5295
- [MP3]: "AUDIO" /* AUDIO */,
5296
- [M4A]: "AUDIO" /* AUDIO */,
5297
- [VND_WAV]: "AUDIO" /* AUDIO */,
5298
- [VND_WAVE]: "AUDIO" /* AUDIO */,
5299
- [WAV]: "AUDIO" /* AUDIO */,
5300
- [WAVE]: "AUDIO" /* AUDIO */,
5301
- [X_WAV]: "AUDIO" /* AUDIO */,
5302
- [AIFF]: "AUDIO" /* AUDIO */,
5303
- [TEXT_PLAIN]: "TEXT" /* TEXT */,
5304
- [TEXT_PLAIN_UTF8]: "TEXT" /* TEXT */,
5305
- [MARKDOWN]: "TEXT" /* TEXT */,
5306
- [MARKDOWN_UTF8]: "TEXT" /* TEXT */,
5307
- [CSV]: "CSV" /* CSV */,
5308
- [NUMBERS]: "NUMBERS" /* NUMBERS */,
5309
- [EXCEL]: "EXCEL" /* EXCEL */,
5310
- [PDF]: "PDF" /* PDF */,
5311
- [ZIP]: "ZIP" /* ZIP */,
5312
- [GLTF]: "MODEL" /* MODEL */,
5313
- [GLTF_EXT]: "MODEL" /* MODEL */,
5314
- [GLB]: "MODEL" /* MODEL */,
5315
- // GLTF returns 'application/json' as the mimetype,
5316
- // and as the only JSON-encoded media we currently support,
5317
- // we assume that if the mimetype is JSON, it's a GLTF
5318
- [JSON_MIME_TYPE]: "MODEL" /* MODEL */,
5319
- [GLB_EXT]: "MODEL" /* MODEL */
5311
+ return makePermitTransferBatchAndTypeData({
5312
+ tokenIds,
5313
+ quantities,
5314
+ chainId,
5315
+ mintsOwner,
5316
+ nonce,
5317
+ deadline,
5318
+ safeTransferData,
5319
+ to: zoraMintsManagerImplConfig.address[chainId]
5320
+ });
5320
5321
  };
5321
- function mimeTypeToMedia(mimeType) {
5322
- if (!mimeType)
5323
- return "UNKNOWN" /* UNKNOWN */;
5324
- return mimeToMediaType[mimeType] || "UNKNOWN" /* UNKNOWN */;
5322
+ function collectPremintV2WithMintsParams({
5323
+ tokenIds,
5324
+ quantities,
5325
+ paidMintPricePerToken,
5326
+ account,
5327
+ chainId,
5328
+ ...rest
5329
+ }) {
5330
+ const call = encodePremintOnManager({
5331
+ ...rest
5332
+ });
5333
+ return makeContractParameters({
5334
+ abi: zoraMints1155Config.abi,
5335
+ address: zoraMints1155Config.address[chainId],
5336
+ functionName: "transferBatchToManagerAndCall",
5337
+ args: [tokenIds, quantities, call],
5338
+ value: getPaidMintValue(quantities, paidMintPricePerToken),
5339
+ account
5340
+ });
5325
5341
  }
5326
- async function getMimeType(uri) {
5327
- if (!uri)
5328
- return uri;
5329
- const res = await fetch(uri, { method: "HEAD" });
5330
- let mimeType = res.headers.get("content-type");
5331
- return mimeType;
5342
+ function decodeCallFailedError(error) {
5343
+ if (error.data?.errorName !== "CallFailed")
5344
+ throw new Error("Not a CallFailed error");
5345
+ const internalErrorData = error.data?.args?.[0];
5346
+ return decodeErrorResult({
5347
+ abi: zoraMintsManagerImplABI,
5348
+ data: internalErrorData
5349
+ });
5332
5350
  }
5333
5351
 
5334
- // src/ipfs/token-metadata.ts
5335
- var makeTextTokenMetadata = (parameters) => {
5336
- const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;
5337
- const content = textFileUrl ? {
5338
- mime: TEXT_PLAIN,
5339
- uri: textFileUrl
5340
- } : null;
5341
- const image = thumbnailUrl;
5342
- const animation_url = textFileUrl;
5352
+ // src/create/subgraph-queries.ts
5353
+ function buildContractInfoQuery({
5354
+ contractAddress
5355
+ }) {
5343
5356
  return {
5344
- name,
5345
- image,
5346
- animation_url,
5347
- content,
5348
- attributes
5357
+ query: `
5358
+ query ($contractAddress: Bytes!) {
5359
+ zoraCreateContract(id: $contractAddress) {
5360
+ contractVersion
5361
+ name
5362
+ mintFeePerQuantity
5363
+ tokens(first: 1, orderBy: tokenId, orderDirection: desc) {
5364
+ tokenId
5365
+ }
5366
+ }
5367
+ }
5368
+ `,
5369
+ variables: {
5370
+ contractAddress: contractAddress.toLowerCase()
5371
+ },
5372
+ parseResponseData: (responseData) => responseData.zoraCreateContract
5349
5373
  };
5350
- };
5351
- var makeMediaTokenMetadata = async ({
5352
- name,
5353
- description,
5354
- attributes = [],
5355
- mediaUrl,
5356
- thumbnailUrl
5357
- }) => {
5358
- const contentUrl = mediaUrl;
5359
- const fetchableContentUrl = getFetchableUrl(contentUrl);
5360
- if (!fetchableContentUrl)
5361
- throw new Error(`Content url (${contentUrl}) is not fetchable`);
5362
- const mimeType = await getMimeType(fetchableContentUrl);
5363
- const mediaType = mimeTypeToMedia(mimeType);
5364
- let image = void 0;
5365
- let animation_url = null;
5366
- if (isImage(mimeType)) {
5367
- image = contentUrl;
5368
- } else {
5369
- image = thumbnailUrl;
5370
- animation_url = mediaUrl;
5374
+ }
5375
+
5376
+ // src/create/contract-getter.ts
5377
+ var SubgraphContractGetter = class {
5378
+ constructor(chainId, subgraphQuerier) {
5379
+ this.subgraphQuerier = subgraphQuerier || new SubgraphQuerier(httpClient);
5380
+ this.networkConfig = getApiNetworkConfigForChain(chainId);
5371
5381
  }
5372
- if (!image)
5373
- image = `ipfs://${DEFAULT_THUMBNAIL_CID_HASHES[mediaType] || DEFAULT_THUMBNAIL_CID_HASHES.default}`;
5374
- const content = contentUrl ? {
5375
- mime: mimeType || "application/octet-stream",
5376
- uri: contentUrl
5377
- } : null;
5378
- return {
5379
- name,
5380
- description,
5381
- image,
5382
- animation_url,
5383
- content,
5384
- attributes
5385
- };
5386
- };
5387
- async function fetchTokenMetadata(tokenMetadataURI) {
5388
- const fetchableUrl = getFetchableUrl(tokenMetadataURI);
5389
- if (!fetchableUrl) {
5390
- throw new Error(`Invalid token metadata URI: ${tokenMetadataURI}`);
5391
- }
5392
- const json = await (await fetch(fetchableUrl)).json();
5393
- if (!json) {
5394
- throw new Error(`Failed to fetch metadata from ${fetchableUrl}`);
5395
- }
5396
- return json;
5397
- }
5398
-
5399
- // src/create/minter-defaults.ts
5400
- var SALE_END_FOREVER = 18446744073709551615n;
5401
- var DEFAULT_SALE_START_AND_END = {
5402
- // Sale start time – defaults to beginning of unix time
5403
- saleStart: 0n,
5404
- // This is the end of uint64, plenty of time
5405
- saleEnd: SALE_END_FOREVER
5406
- };
5407
- var DEFAULT_MAX_TOKENS_PER_ADDRESS = {
5408
- maxTokensPerAddress: 0n
5409
- };
5410
- var erc20SaleSettingsWithDefaults = (params) => ({
5411
- ...DEFAULT_SALE_START_AND_END,
5412
- ...DEFAULT_MAX_TOKENS_PER_ADDRESS,
5413
- ...params
5414
- });
5415
- var allowListWithDefaults = (allowlist) => {
5416
- return {
5417
- ...DEFAULT_SALE_START_AND_END,
5418
- ...allowlist
5419
- };
5420
- };
5421
- var fixedPriceSettingsWithDefaults = (params) => ({
5422
- ...DEFAULT_SALE_START_AND_END,
5423
- ...DEFAULT_MAX_TOKENS_PER_ADDRESS,
5424
- type: "fixedPrice",
5425
- ...params
5426
- });
5427
- var parseNameIntoSymbol = (name) => {
5428
- if (name === "") {
5429
- throw new Error("Name must be provided to generate a symbol");
5430
- }
5431
- const result = "$" + name.replace(/[^a-zA-Z0-9]/g, "").replace(/^\$+/, "").toUpperCase().replace(/[AEIOU\s]/g, "").slice(0, 4);
5432
- if (result === "$") {
5433
- throw new Error("Not enough valid characters to generate a symbol");
5434
- }
5435
- return result;
5436
- };
5437
- async function fetchTokenNameFromMetadata(tokenMetadataURI) {
5438
- const tokenMetadata = await fetchTokenMetadata(tokenMetadataURI);
5439
- if (!tokenMetadata.name) {
5440
- throw new Error("No name found in token metadata");
5441
- }
5442
- return tokenMetadata.name;
5443
- }
5444
- var timedSaleSettingsWithDefaults = async (params, tokenMetadataURI) => {
5445
- const erc20Name = params.erc20Name || await fetchTokenNameFromMetadata(tokenMetadataURI);
5446
- const symbol = params.erc20Symbol || parseNameIntoSymbol(erc20Name);
5447
- return {
5448
- type: "timed",
5449
- ...DEFAULT_SALE_START_AND_END,
5450
- erc20Name,
5451
- erc20Symbol: symbol
5452
- };
5453
- };
5454
- var isAllowList = (salesConfig) => salesConfig.type === "allowlistMint";
5455
- var isErc20 = (salesConfig) => salesConfig.type === "erc20Mint";
5456
- var isFixedPrice = (salesConfig) => {
5457
- return salesConfig.pricePerToken > 0n;
5458
- };
5459
- var getSalesConfigWithDefaults = async (salesConfig, tokenMetadataURI) => {
5460
- if (!salesConfig)
5461
- return timedSaleSettingsWithDefaults({}, tokenMetadataURI);
5462
- if (isAllowList(salesConfig)) {
5463
- return allowListWithDefaults(salesConfig);
5464
- }
5465
- if (isErc20(salesConfig)) {
5466
- return erc20SaleSettingsWithDefaults(salesConfig);
5382
+ async querySubgraphWithRetries({
5383
+ query,
5384
+ variables,
5385
+ parseResponseData
5386
+ }) {
5387
+ const responseData = await this.subgraphQuerier.query({
5388
+ subgraphUrl: this.networkConfig.subgraphUrl,
5389
+ query,
5390
+ variables
5391
+ });
5392
+ return parseResponseData(responseData);
5467
5393
  }
5468
- if (isFixedPrice(salesConfig)) {
5469
- return fixedPriceSettingsWithDefaults(salesConfig);
5394
+ async getContractInfo({
5395
+ contractAddress,
5396
+ retries: retries2 = 1
5397
+ }) {
5398
+ const tryFn = async () => {
5399
+ const responseData2 = await this.querySubgraphWithRetries(
5400
+ buildContractInfoQuery({ contractAddress })
5401
+ );
5402
+ if (!responseData2) {
5403
+ console.log("could not find contract");
5404
+ throw new Error("Cannot find contract");
5405
+ }
5406
+ return responseData2;
5407
+ };
5408
+ const responseData = await retriesGeneric({
5409
+ tryFn,
5410
+ maxTries: retries2,
5411
+ linearBackoffMS: 1e3
5412
+ });
5413
+ const nextTokenId = responseData.tokens.length === 0 ? 1n : BigInt(responseData.tokens[0].tokenId) + 1n;
5414
+ return {
5415
+ name: responseData.name,
5416
+ contractVersion: responseData.contractVersion,
5417
+ mintFee: BigInt(responseData.mintFeePerQuantity),
5418
+ nextTokenId
5419
+ };
5470
5420
  }
5471
- return timedSaleSettingsWithDefaults(salesConfig, tokenMetadataURI);
5472
5421
  };
5473
5422
 
5474
- // src/create/minter-setup.ts
5475
- import {
5476
- erc20MinterABI as erc20MinterABI2,
5477
- erc20MinterAddress as erc20MinterAddresses,
5478
- zoraCreator1155ImplABI as zoraCreator1155ImplABI4,
5479
- zoraCreatorFixedPriceSaleStrategyABI,
5480
- zoraCreatorFixedPriceSaleStrategyAddress as zoraCreatorFixedPriceSaleStrategyAddress2,
5481
- zoraCreatorMerkleMinterStrategyABI,
5482
- zoraCreatorMerkleMinterStrategyAddress,
5483
- zoraTimedSaleStrategyABI as zoraTimedSaleStrategyABI2,
5484
- zoraTimedSaleStrategyAddress
5485
- } from "@zoralabs/protocol-deployments";
5486
- import { encodeFunctionData } from "viem";
5487
- var PERMISSION_BITS = {
5488
- MINTER: 2n ** 2n
5489
- };
5490
- function setupErc20Minter({
5491
- pricePerToken,
5492
- chainId,
5493
- tokenId: nextTokenId,
5494
- currency,
5495
- saleStart,
5496
- saleEnd,
5497
- maxTokensPerAddress: mintLimit,
5498
- fundsRecipient
5499
- }) {
5500
- const erc20MinterAddress = erc20MinterAddresses[chainId];
5501
- if (!erc20MinterAddress)
5502
- throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);
5503
- const erc20MinterApproval = encodeFunctionData({
5504
- abi: zoraCreator1155ImplABI4,
5505
- functionName: "addPermission",
5506
- args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER]
5507
- });
5508
- const saleData = encodeFunctionData({
5509
- abi: erc20MinterABI2,
5510
- functionName: "setSale",
5511
- args: [
5512
- BigInt(nextTokenId),
5513
- {
5514
- saleStart: saleStart || BigInt(0),
5515
- saleEnd: saleEnd || BigInt(0),
5516
- maxTokensPerAddress: BigInt(mintLimit || 0),
5517
- pricePerToken,
5518
- fundsRecipient,
5519
- currency
5520
- }
5521
- ]
5423
+ // src/sdk.ts
5424
+ function createCreatorClient(clientConfig) {
5425
+ const premintClient = new PremintClient({
5426
+ chainId: clientConfig.chainId,
5427
+ publicClient: clientConfig.publicClient,
5428
+ premintApi: clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId)
5522
5429
  });
5523
- const callSale = encodeFunctionData({
5524
- abi: zoraCreator1155ImplABI4,
5525
- functionName: "callSale",
5526
- args: [BigInt(nextTokenId), erc20MinterAddress, saleData]
5430
+ const create1155CreatorClient = new Create1155Client({
5431
+ chainId: clientConfig.chainId,
5432
+ publicClient: clientConfig.publicClient,
5433
+ contractGetter: clientConfig.contractGetter || new SubgraphContractGetter(clientConfig.chainId)
5527
5434
  });
5528
5435
  return {
5529
- minter: erc20MinterAddress,
5530
- setupActions: [erc20MinterApproval, callSale]
5436
+ createPremint: (p) => premintClient.createPremint(p),
5437
+ updatePremint: (p) => premintClient.updatePremint(p),
5438
+ deletePremint: (p) => premintClient.deletePremint(p),
5439
+ create1155: (p) => create1155CreatorClient.createNew1155(p),
5440
+ create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p)
5531
5441
  };
5532
5442
  }
5533
- function setupFixedPriceMinter({
5534
- pricePerToken: price,
5535
- tokenId: nextTokenId,
5536
- chainId,
5537
- saleStart,
5538
- saleEnd,
5539
- maxTokensPerAddress: mintLimit,
5540
- fundsRecipient
5541
- }) {
5542
- const fixedPriceStrategyAddress = zoraCreatorFixedPriceSaleStrategyAddress2[chainId];
5543
- const fixedPriceApproval = encodeFunctionData({
5544
- abi: zoraCreator1155ImplABI4,
5545
- functionName: "addPermission",
5546
- args: [
5547
- BigInt(nextTokenId),
5548
- fixedPriceStrategyAddress,
5549
- PERMISSION_BITS.MINTER
5550
- ]
5551
- });
5552
- const saleData = encodeFunctionData({
5553
- abi: zoraCreatorFixedPriceSaleStrategyABI,
5554
- functionName: "setSale",
5555
- args: [
5556
- BigInt(nextTokenId),
5557
- {
5558
- pricePerToken: price,
5559
- saleStart: saleStart || BigInt(0),
5560
- saleEnd: saleEnd || BigInt(0),
5561
- maxTokensPerAddress: BigInt(mintLimit || 0),
5562
- fundsRecipient
5563
- }
5564
- ]
5565
- });
5566
- const callSale = encodeFunctionData({
5567
- abi: zoraCreator1155ImplABI4,
5568
- functionName: "callSale",
5569
- args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData]
5443
+ function createCollectorClient(params) {
5444
+ const premintGetterToUse = params.premintGetter || new PremintAPIClient(params.chainId);
5445
+ const mintGetterToUse = params.mintGetter || new SubgraphMintGetter(params.chainId);
5446
+ const mintClient = new MintClient({
5447
+ publicClient: params.publicClient,
5448
+ premintGetter: premintGetterToUse,
5449
+ mintGetter: mintGetterToUse
5570
5450
  });
5571
5451
  return {
5572
- minter: fixedPriceStrategyAddress,
5573
- setupActions: [fixedPriceApproval, callSale]
5452
+ getPremint: (p) => premintGetterToUse.get({
5453
+ collectionAddress: p.address,
5454
+ uid: p.uid
5455
+ }),
5456
+ getCollectDataFromPremintReceipt: (p) => getDataFromPremintReceipt(p, params.chainId),
5457
+ getToken: (p) => mintClient.get(p),
5458
+ getTokensOfContract: (p) => mintClient.getOfContract(p),
5459
+ mint: (p) => mintClient.mint(p),
5460
+ getMintCosts: (p) => mintClient.getMintCosts(p)
5574
5461
  };
5575
5462
  }
5576
- function setupTimedSaleMinter({
5577
- chainId,
5578
- tokenId,
5579
- erc20Name: erc20zName,
5580
- erc20Symbol: erc20zSymbol,
5581
- saleStart,
5582
- saleEnd
5583
- }) {
5584
- const minterAddress = zoraTimedSaleStrategyAddress[chainId];
5585
- const fixedPriceApproval = encodeFunctionData({
5586
- abi: zoraCreator1155ImplABI4,
5587
- functionName: "addPermission",
5588
- args: [BigInt(tokenId), minterAddress, PERMISSION_BITS.MINTER]
5589
- });
5590
- const saleData = encodeFunctionData({
5591
- abi: zoraTimedSaleStrategyABI2,
5592
- functionName: "setSale",
5593
- args: [
5594
- BigInt(tokenId),
5595
- {
5596
- saleStart,
5597
- saleEnd,
5598
- name: erc20zName,
5599
- symbol: erc20zSymbol
5600
- }
5601
- ]
5602
- });
5603
- const callSale = encodeFunctionData({
5604
- abi: zoraCreator1155ImplABI4,
5605
- functionName: "callSale",
5606
- args: [BigInt(tokenId), minterAddress, saleData]
5607
- });
5608
- return {
5609
- minter: minterAddress,
5610
- setupActions: [fixedPriceApproval, callSale]
5611
- };
5612
- }
5613
- function setupAllowListMinter({
5614
- chainId,
5615
- tokenId: nextTokenId,
5616
- allowlist,
5617
- fundsRecipient
5618
- }) {
5619
- const merkleSaleStrategyAddress = zoraCreatorMerkleMinterStrategyAddress[chainId];
5620
- const merkleApproval = encodeFunctionData({
5621
- abi: zoraCreator1155ImplABI4,
5622
- functionName: "addPermission",
5623
- args: [nextTokenId, merkleSaleStrategyAddress, PERMISSION_BITS.MINTER]
5624
- });
5625
- const merkleRoot = allowlist.presaleMerkleRoot.startsWith("0x") ? allowlist.presaleMerkleRoot : `0x${allowlist.presaleMerkleRoot}`;
5626
- const saleData = encodeFunctionData({
5627
- abi: zoraCreatorMerkleMinterStrategyABI,
5628
- functionName: "setSale",
5629
- args: [
5630
- BigInt(nextTokenId),
5631
- {
5632
- presaleStart: allowlist.saleStart,
5633
- presaleEnd: allowlist.saleEnd,
5634
- merkleRoot,
5635
- fundsRecipient
5636
- }
5637
- ]
5638
- });
5639
- const callSaleMerkle = encodeFunctionData({
5640
- abi: zoraCreator1155ImplABI4,
5641
- functionName: "callSale",
5642
- args: [BigInt(nextTokenId), merkleSaleStrategyAddress, saleData]
5643
- });
5644
- return {
5645
- minter: merkleSaleStrategyAddress,
5646
- setupActions: [merkleApproval, callSaleMerkle]
5647
- };
5648
- }
5649
- var isAllowList2 = (salesConfig) => salesConfig.type === "allowlistMint";
5650
- var isErc202 = (salesConfig) => salesConfig.type === "erc20Mint";
5651
- var isFixedPrice2 = (salesConfig) => salesConfig.type === "fixedPrice" || salesConfig.pricePerToken > BigInt(0);
5652
- function setupMinters({ salesConfig, ...rest }) {
5653
- if (isErc202(salesConfig)) {
5654
- return setupErc20Minter({
5655
- ...salesConfig,
5656
- ...rest
5657
- });
5658
- }
5659
- if (isAllowList2(salesConfig)) {
5660
- return setupAllowListMinter({
5661
- allowlist: salesConfig,
5662
- ...rest
5663
- });
5664
- }
5665
- if (isFixedPrice2(salesConfig))
5666
- return setupFixedPriceMinter({
5667
- ...salesConfig,
5668
- ...rest
5669
- });
5670
- return setupTimedSaleMinter({
5671
- ...salesConfig,
5672
- ...rest
5673
- });
5674
- }
5675
5463
 
5676
- // src/create/token-setup.ts
5677
- async function applyNew1155Defaults(props, ownerAddress) {
5678
- const { payoutRecipient: fundsRecipient } = props;
5679
- const fundsRecipientOrOwner = fundsRecipient && fundsRecipient !== zeroAddress5 ? fundsRecipient : ownerAddress;
5680
- return {
5681
- payoutRecipient: fundsRecipientOrOwner,
5682
- createReferral: props.createReferral || zeroAddress5,
5683
- maxSupply: typeof props.maxSupply === "undefined" ? OPEN_EDITION_MINT_SIZE : BigInt(props.maxSupply),
5684
- royaltyBPS: props.royaltyBPS || 1e3,
5685
- tokenMetadataURI: props.tokenMetadataURI,
5686
- salesConfig: await getSalesConfigWithDefaults(
5687
- props.salesConfig,
5688
- props.tokenMetadataURI
5689
- )
5690
- };
5464
+ // src/ipfs/arweave.ts
5465
+ function isArweaveURL(url) {
5466
+ return url && typeof url === "string" ? url.startsWith("ar://") : false;
5691
5467
  }
5692
- function buildSetupNewToken({
5693
- tokenURI,
5694
- maxSupply = OPEN_EDITION_MINT_SIZE,
5695
- createReferral = zeroAddress5,
5696
- contractVersion
5697
- }) {
5698
- if (contractSupportsMintRewards(contractVersion, "ERC1155")) {
5699
- return encodeFunctionData2({
5700
- abi: zoraCreator1155ImplABI5,
5701
- functionName: "setupNewTokenWithCreateReferral",
5702
- args: [tokenURI, BigInt(maxSupply), createReferral]
5703
- });
5704
- }
5705
- if (createReferral !== zeroAddress5) {
5706
- throw new Error(
5707
- "Contract does not support create referral, but one was provided"
5708
- );
5468
+
5469
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bytes.js
5470
+ var empty = new Uint8Array(0);
5471
+ function equals(aa, bb) {
5472
+ if (aa === bb)
5473
+ return true;
5474
+ if (aa.byteLength !== bb.byteLength) {
5475
+ return false;
5709
5476
  }
5710
- return encodeFunctionData2({
5711
- abi: zoraCreator1155ImplABI5,
5712
- functionName: "setupNewToken",
5713
- args: [tokenURI, BigInt(maxSupply)]
5714
- });
5715
- }
5716
- function setupRoyaltyConfig({
5717
- royaltyBPS,
5718
- royaltyRecipient,
5719
- nextTokenId
5720
- }) {
5721
- if (royaltyBPS > 0 && royaltyRecipient != zeroAddress5) {
5722
- return encodeFunctionData2({
5723
- abi: zoraCreator1155ImplABI5,
5724
- functionName: "updateRoyaltiesForToken",
5725
- args: [
5726
- nextTokenId,
5727
- {
5728
- royaltyBPS,
5729
- royaltyRecipient,
5730
- royaltyMintSchedule: 0
5731
- }
5732
- ]
5733
- });
5477
+ for (let ii = 0; ii < aa.byteLength; ii++) {
5478
+ if (aa[ii] !== bb[ii]) {
5479
+ return false;
5480
+ }
5734
5481
  }
5735
- return null;
5482
+ return true;
5736
5483
  }
5737
- function makeAdminMintCall({
5738
- ownerAddress,
5739
- mintQuantity,
5740
- nextTokenId
5741
- }) {
5742
- if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {
5743
- return null;
5484
+ function coerce3(o) {
5485
+ if (o instanceof Uint8Array && o.constructor.name === "Uint8Array")
5486
+ return o;
5487
+ if (o instanceof ArrayBuffer)
5488
+ return new Uint8Array(o);
5489
+ if (ArrayBuffer.isView(o)) {
5490
+ return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
5744
5491
  }
5745
- return encodeFunctionData2({
5746
- abi: zoraCreator1155ImplABI5,
5747
- functionName: "adminMint",
5748
- args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress5]
5749
- });
5750
- }
5751
- async function constructCreate1155TokenCalls(props) {
5752
- const {
5753
- chainId,
5754
- nextTokenId,
5755
- mintToCreatorCount,
5756
- ownerAddress,
5757
- contractVersion
5758
- } = props;
5759
- const new1155TokenPropsWithDefaults = await applyNew1155Defaults(
5760
- props,
5761
- ownerAddress
5762
- );
5763
- const verifyTokenIdExpected = encodeFunctionData2({
5764
- abi: zoraCreator1155ImplABI5,
5765
- functionName: "assumeLastTokenIdMatches",
5766
- args: [nextTokenId - 1n]
5767
- });
5768
- const setupNewToken = buildSetupNewToken({
5769
- tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,
5770
- maxSupply: new1155TokenPropsWithDefaults.maxSupply,
5771
- createReferral: new1155TokenPropsWithDefaults.createReferral,
5772
- contractVersion
5773
- });
5774
- const royaltyConfig = setupRoyaltyConfig({
5775
- royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,
5776
- royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,
5777
- nextTokenId
5778
- });
5779
- const { minter, setupActions: mintersSetup } = setupMinters({
5780
- tokenId: nextTokenId,
5781
- chainId,
5782
- fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,
5783
- salesConfig: new1155TokenPropsWithDefaults.salesConfig
5784
- });
5785
- const adminMintCall = makeAdminMintCall({
5786
- ownerAddress,
5787
- mintQuantity: mintToCreatorCount,
5788
- nextTokenId
5789
- });
5790
- const setupActions = [
5791
- verifyTokenIdExpected,
5792
- setupNewToken,
5793
- ...mintersSetup,
5794
- royaltyConfig,
5795
- adminMintCall
5796
- ].filter((item) => item !== null);
5797
- return {
5798
- setupActions,
5799
- minter,
5800
- newToken: new1155TokenPropsWithDefaults
5801
- };
5492
+ throw new Error("Unknown type, must be binary type");
5802
5493
  }
5803
- var contractSupportsMintRewards = (contractVersion, contractStandard) => {
5804
- if (!contractStandard || !contractVersion) {
5805
- return false;
5494
+
5495
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/vendor/base-x.js
5496
+ function base2(ALPHABET, name) {
5497
+ if (ALPHABET.length >= 255) {
5498
+ throw new TypeError("Alphabet too long");
5806
5499
  }
5807
- const semVerContractVersion = semver2.coerce(contractVersion)?.raw;
5808
- if (!semVerContractVersion)
5809
- return false;
5810
- if (contractStandard === "ERC1155") {
5811
- return semver2.gte(semVerContractVersion, "1.3.5");
5812
- } else {
5813
- return semver2.gte(semVerContractVersion, "14.0.0");
5500
+ var BASE_MAP = new Uint8Array(256);
5501
+ for (var j = 0; j < BASE_MAP.length; j++) {
5502
+ BASE_MAP[j] = 255;
5814
5503
  }
5815
- };
5816
-
5817
- // src/create/mint-from-create.ts
5818
- import { parseEther as parseEther3, zeroAddress as zeroAddress6 } from "viem";
5819
- import { zoraCreator1155ImplABI as zoraCreator1155ImplABI6 } from "@zoralabs/protocol-deployments";
5820
- async function toSalesStrategyFromSubgraph({
5821
- minter,
5822
- salesConfig,
5823
- publicClient,
5824
- contractAddress
5825
- }) {
5826
- if (salesConfig.type === "timed") {
5827
- return {
5828
- saleType: "timed",
5829
- address: minter,
5830
- // for now we hardcode this
5831
- mintFeePerQuantity: parseEther3("0.000111"),
5832
- saleStart: salesConfig.saleStart.toString(),
5833
- saleEnd: salesConfig.saleEnd.toString(),
5834
- // the following are not needed for now but we wanna satisfy concrete
5835
- erc20Z: zeroAddress6,
5836
- mintFee: 0n,
5837
- pool: zeroAddress6,
5838
- secondaryActivated: false
5839
- };
5504
+ for (var i = 0; i < ALPHABET.length; i++) {
5505
+ var x = ALPHABET.charAt(i);
5506
+ var xc = x.charCodeAt(0);
5507
+ if (BASE_MAP[xc] !== 255) {
5508
+ throw new TypeError(x + " is ambiguous");
5509
+ }
5510
+ BASE_MAP[xc] = i;
5840
5511
  }
5841
- if (salesConfig.type === "erc20Mint") {
5842
- return {
5843
- saleType: "erc20",
5844
- address: minter,
5845
- mintFeePerQuantity: 0n,
5846
- saleStart: salesConfig.saleStart.toString(),
5847
- saleEnd: salesConfig.saleEnd.toString(),
5848
- currency: salesConfig.currency,
5849
- pricePerToken: salesConfig.pricePerToken,
5850
- maxTokensPerAddress: salesConfig.maxTokensPerAddress
5851
- };
5512
+ var BASE = ALPHABET.length;
5513
+ var LEADER = ALPHABET.charAt(0);
5514
+ var FACTOR = Math.log(BASE) / Math.log(256);
5515
+ var iFACTOR = Math.log(256) / Math.log(BASE);
5516
+ function encode3(source) {
5517
+ if (source instanceof Uint8Array)
5518
+ ;
5519
+ else if (ArrayBuffer.isView(source)) {
5520
+ source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
5521
+ } else if (Array.isArray(source)) {
5522
+ source = Uint8Array.from(source);
5523
+ }
5524
+ if (!(source instanceof Uint8Array)) {
5525
+ throw new TypeError("Expected Uint8Array");
5526
+ }
5527
+ if (source.length === 0) {
5528
+ return "";
5529
+ }
5530
+ var zeroes = 0;
5531
+ var length2 = 0;
5532
+ var pbegin = 0;
5533
+ var pend = source.length;
5534
+ while (pbegin !== pend && source[pbegin] === 0) {
5535
+ pbegin++;
5536
+ zeroes++;
5537
+ }
5538
+ var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
5539
+ var b58 = new Uint8Array(size);
5540
+ while (pbegin !== pend) {
5541
+ var carry = source[pbegin];
5542
+ var i2 = 0;
5543
+ for (var it1 = size - 1; (carry !== 0 || i2 < length2) && it1 !== -1; it1--, i2++) {
5544
+ carry += 256 * b58[it1] >>> 0;
5545
+ b58[it1] = carry % BASE >>> 0;
5546
+ carry = carry / BASE >>> 0;
5547
+ }
5548
+ if (carry !== 0) {
5549
+ throw new Error("Non-zero carry");
5550
+ }
5551
+ length2 = i2;
5552
+ pbegin++;
5553
+ }
5554
+ var it2 = size - length2;
5555
+ while (it2 !== size && b58[it2] === 0) {
5556
+ it2++;
5557
+ }
5558
+ var str = LEADER.repeat(zeroes);
5559
+ for (; it2 < size; ++it2) {
5560
+ str += ALPHABET.charAt(b58[it2]);
5561
+ }
5562
+ return str;
5852
5563
  }
5853
- const contractMintFee = await publicClient.readContract({
5854
- abi: zoraCreator1155ImplABI6,
5855
- address: contractAddress,
5856
- functionName: "mintFee"
5857
- });
5858
- if (salesConfig.type === "fixedPrice") {
5859
- return {
5860
- saleType: "fixedPrice",
5861
- address: minter,
5862
- maxTokensPerAddress: salesConfig.maxTokensPerAddress,
5863
- mintFeePerQuantity: contractMintFee,
5864
- pricePerToken: salesConfig.pricePerToken,
5865
- saleStart: salesConfig.saleStart.toString(),
5866
- saleEnd: salesConfig.saleEnd.toString()
5867
- };
5564
+ function decodeUnsafe(source) {
5565
+ if (typeof source !== "string") {
5566
+ throw new TypeError("Expected String");
5567
+ }
5568
+ if (source.length === 0) {
5569
+ return new Uint8Array();
5570
+ }
5571
+ var psz = 0;
5572
+ if (source[psz] === " ") {
5573
+ return;
5574
+ }
5575
+ var zeroes = 0;
5576
+ var length2 = 0;
5577
+ while (source[psz] === LEADER) {
5578
+ zeroes++;
5579
+ psz++;
5580
+ }
5581
+ var size = (source.length - psz) * FACTOR + 1 >>> 0;
5582
+ var b256 = new Uint8Array(size);
5583
+ while (source[psz]) {
5584
+ var carry = BASE_MAP[source.charCodeAt(psz)];
5585
+ if (carry === 255) {
5586
+ return;
5587
+ }
5588
+ var i2 = 0;
5589
+ for (var it3 = size - 1; (carry !== 0 || i2 < length2) && it3 !== -1; it3--, i2++) {
5590
+ carry += BASE * b256[it3] >>> 0;
5591
+ b256[it3] = carry % 256 >>> 0;
5592
+ carry = carry / 256 >>> 0;
5593
+ }
5594
+ if (carry !== 0) {
5595
+ throw new Error("Non-zero carry");
5596
+ }
5597
+ length2 = i2;
5598
+ psz++;
5599
+ }
5600
+ if (source[psz] === " ") {
5601
+ return;
5602
+ }
5603
+ var it4 = size - length2;
5604
+ while (it4 !== size && b256[it4] === 0) {
5605
+ it4++;
5606
+ }
5607
+ var vch = new Uint8Array(zeroes + (size - it4));
5608
+ var j2 = zeroes;
5609
+ while (it4 !== size) {
5610
+ vch[j2++] = b256[it4++];
5611
+ }
5612
+ return vch;
5613
+ }
5614
+ function decode5(string) {
5615
+ var buffer = decodeUnsafe(string);
5616
+ if (buffer) {
5617
+ return buffer;
5618
+ }
5619
+ throw new Error(`Non-${name} character`);
5868
5620
  }
5869
5621
  return {
5870
- saleType: "allowlist",
5871
- address: minter,
5872
- saleStart: salesConfig.saleStart.toString(),
5873
- saleEnd: salesConfig.saleEnd.toString(),
5874
- merkleRoot: salesConfig.presaleMerkleRoot,
5875
- mintFeePerQuantity: contractMintFee
5876
- };
5877
- }
5878
- function makeOnchainPrepareMintFromCreate({
5879
- contractAddress,
5880
- tokenId,
5881
- result,
5882
- minter,
5883
- publicClient,
5884
- contractVersion
5885
- }) {
5886
- return async (params) => {
5887
- const subgraphSalesConfig = await toSalesStrategyFromSubgraph({
5888
- minter,
5889
- contractAddress,
5890
- publicClient,
5891
- salesConfig: result
5892
- });
5893
- return {
5894
- parameters: makePrepareMint1155TokenParams({
5895
- salesConfigAndTokenInfo: {
5896
- salesConfig: subgraphSalesConfig,
5897
- contractVersion
5898
- },
5899
- ...params,
5900
- tokenContract: contractAddress,
5901
- tokenId
5902
- }),
5903
- costs: parseMintCosts({
5904
- allowListEntry: params.allowListEntry,
5905
- quantityToMint: BigInt(params.quantityToMint),
5906
- salesConfig: subgraphSalesConfig
5907
- }),
5908
- erc20Approval: getRequiredErc20Approvals(params, subgraphSalesConfig)
5909
- };
5622
+ encode: encode3,
5623
+ decodeUnsafe,
5624
+ decode: decode5
5910
5625
  };
5911
5626
  }
5627
+ var src = base2;
5628
+ var _brrp__multiformats_scope_baseX = src;
5629
+ var base_x_default = _brrp__multiformats_scope_baseX;
5912
5630
 
5913
- // src/create/1155-create-helper.ts
5914
- var ROYALTY_BPS_DEFAULT = 1e3;
5915
- var getTokenIdFromCreateReceipt = (receipt) => {
5916
- for (const data of receipt.logs) {
5917
- try {
5918
- const decodedLog = decodeEventLog2({
5919
- abi: zoraCreator1155ImplABI7,
5920
- eventName: "SetupNewToken",
5921
- ...data
5922
- });
5923
- if (decodedLog && decodedLog.eventName === "SetupNewToken") {
5924
- return decodedLog.args.tokenId;
5925
- }
5926
- } catch (err) {
5631
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base.js
5632
+ var Encoder = class {
5633
+ constructor(name, prefix, baseEncode) {
5634
+ __publicField(this, "name");
5635
+ __publicField(this, "prefix");
5636
+ __publicField(this, "baseEncode");
5637
+ this.name = name;
5638
+ this.prefix = prefix;
5639
+ this.baseEncode = baseEncode;
5640
+ }
5641
+ encode(bytes) {
5642
+ if (bytes instanceof Uint8Array) {
5643
+ return `${this.prefix}${this.baseEncode(bytes)}`;
5644
+ } else {
5645
+ throw Error("Unknown type, must be binary type");
5927
5646
  }
5928
5647
  }
5929
- throw new Error(
5930
- "No event found in receipt that could be used to get tokenId"
5931
- );
5932
5648
  };
5933
- var getContractAddressFromReceipt = (receipt) => {
5934
- for (const data of receipt.logs) {
5935
- try {
5936
- const decodedLog = decodeEventLog2({
5937
- abi: zoraCreator1155FactoryImplABI2,
5938
- eventName: "SetupNewContract",
5939
- ...data
5940
- });
5941
- if (decodedLog && decodedLog.eventName === "SetupNewContract") {
5942
- return decodedLog.args.newContract;
5649
+ var Decoder = class {
5650
+ constructor(name, prefix, baseDecode) {
5651
+ __publicField(this, "name");
5652
+ __publicField(this, "prefix");
5653
+ __publicField(this, "baseDecode");
5654
+ __publicField(this, "prefixCodePoint");
5655
+ this.name = name;
5656
+ this.prefix = prefix;
5657
+ if (prefix.codePointAt(0) === void 0) {
5658
+ throw new Error("Invalid prefix character");
5659
+ }
5660
+ this.prefixCodePoint = prefix.codePointAt(0);
5661
+ this.baseDecode = baseDecode;
5662
+ }
5663
+ decode(text) {
5664
+ if (typeof text === "string") {
5665
+ if (text.codePointAt(0) !== this.prefixCodePoint) {
5666
+ throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);
5943
5667
  }
5944
- } catch (err) {
5668
+ return this.baseDecode(text.slice(this.prefix.length));
5669
+ } else {
5670
+ throw Error("Can only multibase decode strings");
5945
5671
  }
5946
5672
  }
5947
- throw new Error(
5948
- "No event found in receipt that could be used to get contract address"
5949
- );
5673
+ or(decoder) {
5674
+ return or(this, decoder);
5675
+ }
5950
5676
  };
5951
- function makeCreateContractAndTokenCall({
5952
- account,
5953
- contract,
5954
- royaltyBPS,
5955
- fundsRecipient,
5956
- tokenSetupActions,
5957
- chainId
5958
- }) {
5959
- const accountAddress = typeof account === "string" ? account : account.address;
5960
- return makeContractParameters({
5961
- abi: zoraCreator1155FactoryImplABI2,
5962
- functionName: "createContractDeterministic",
5963
- account,
5964
- address: zoraCreator1155FactoryImplAddress2[chainId],
5965
- args: [
5966
- contract.uri,
5967
- contract.name,
5968
- {
5969
- // deprecated
5970
- royaltyMintSchedule: 0,
5971
- royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,
5972
- royaltyRecipient: fundsRecipient || accountAddress
5973
- },
5974
- contract.defaultAdmin || accountAddress,
5975
- tokenSetupActions
5976
- ]
5977
- });
5978
- }
5979
- function makeCreateTokenCall({
5980
- contractAddress,
5981
- account,
5982
- tokenSetupActions
5983
- }) {
5984
- return makeContractParameters({
5985
- abi: zoraCreator1155ImplABI7,
5986
- functionName: "multicall",
5987
- account,
5988
- address: contractAddress,
5989
- args: [tokenSetupActions]
5677
+ var ComposedDecoder = class {
5678
+ constructor(decoders) {
5679
+ __publicField(this, "decoders");
5680
+ this.decoders = decoders;
5681
+ }
5682
+ or(decoder) {
5683
+ return or(this, decoder);
5684
+ }
5685
+ decode(input) {
5686
+ const prefix = input[0];
5687
+ const decoder = this.decoders[prefix];
5688
+ if (decoder != null) {
5689
+ return decoder.decode(input);
5690
+ } else {
5691
+ throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`);
5692
+ }
5693
+ }
5694
+ };
5695
+ function or(left, right) {
5696
+ return new ComposedDecoder({
5697
+ ...left.decoders ?? { [left.prefix]: left },
5698
+ ...right.decoders ?? { [right.prefix]: right }
5990
5699
  });
5991
5700
  }
5992
- var Create1155Client = class {
5993
- constructor({
5994
- chainId,
5995
- publicClient
5996
- }) {
5997
- this.chainId = chainId;
5998
- this.publicClient = publicClient;
5701
+ var Codec = class {
5702
+ constructor(name, prefix, baseEncode, baseDecode) {
5703
+ __publicField(this, "name");
5704
+ __publicField(this, "prefix");
5705
+ __publicField(this, "baseEncode");
5706
+ __publicField(this, "baseDecode");
5707
+ __publicField(this, "encoder");
5708
+ __publicField(this, "decoder");
5709
+ this.name = name;
5710
+ this.prefix = prefix;
5711
+ this.baseEncode = baseEncode;
5712
+ this.baseDecode = baseDecode;
5713
+ this.encoder = new Encoder(name, prefix, baseEncode);
5714
+ this.decoder = new Decoder(name, prefix, baseDecode);
5999
5715
  }
6000
- async createNew1155(props) {
6001
- return createNew1155ContractAndToken({
6002
- ...props,
6003
- publicClient: this.publicClient,
6004
- chainId: this.chainId
6005
- });
5716
+ encode(input) {
5717
+ return this.encoder.encode(input);
6006
5718
  }
6007
- async createNew1155OnExistingContract({
6008
- contractAddress: contract,
6009
- account,
6010
- token,
6011
- getAdditionalSetupActions
6012
- }) {
6013
- return createNew1155Token({
6014
- contractAddress: contract,
6015
- account,
6016
- token,
6017
- getAdditionalSetupActions,
6018
- publicClient: this.publicClient,
6019
- chainId: this.chainId
6020
- });
5719
+ decode(input) {
5720
+ return this.decoder.decode(input);
6021
5721
  }
6022
5722
  };
6023
- async function createNew1155ContractAndToken({
6024
- contract,
6025
- account,
6026
- chainId,
6027
- token,
6028
- publicClient,
6029
- getAdditionalSetupActions
6030
- }) {
6031
- const nextTokenId = 1n;
6032
- const contractVersion = new1155ContractVersion(chainId);
6033
- const {
6034
- minter,
6035
- newToken,
6036
- setupActions: tokenSetupActions
6037
- } = await prepareSetupActions({
6038
- chainId,
6039
- account,
6040
- contractVersion,
6041
- nextTokenId,
6042
- token,
6043
- getAdditionalSetupActions
6044
- });
6045
- const request = makeCreateContractAndTokenCall({
6046
- contract,
6047
- account,
6048
- chainId,
6049
- tokenSetupActions,
6050
- fundsRecipient: token.payoutRecipient,
6051
- royaltyBPS: token.royaltyBPS
6052
- });
6053
- const contractAddress = await getDeterministicContractAddress({
6054
- account,
6055
- publicClient,
6056
- setupActions: tokenSetupActions,
6057
- chainId,
6058
- contract
6059
- });
6060
- const prepareMint = makeOnchainPrepareMintFromCreate({
6061
- contractAddress,
6062
- contractVersion,
6063
- minter,
6064
- publicClient,
6065
- result: newToken.salesConfig,
6066
- tokenId: nextTokenId
6067
- });
6068
- return {
6069
- parameters: request,
6070
- tokenSetupActions,
6071
- newTokenId: nextTokenId,
6072
- newToken,
6073
- contractAddress,
6074
- contractVersion,
6075
- minter,
6076
- prepareMint
6077
- };
5723
+ function from({ name, prefix, encode: encode3, decode: decode5 }) {
5724
+ return new Codec(name, prefix, encode3, decode5);
6078
5725
  }
6079
- async function createNew1155Token({
6080
- contractAddress,
6081
- account,
6082
- getAdditionalSetupActions,
6083
- token,
6084
- publicClient,
6085
- chainId
6086
- }) {
6087
- const { nextTokenId, contractVersion } = await getContractInfoExistingContract({
6088
- publicClient,
6089
- contractAddress
6090
- });
6091
- const {
6092
- minter,
6093
- newToken,
6094
- setupActions: tokenSetupActions
6095
- } = await prepareSetupActions({
6096
- chainId,
6097
- account,
6098
- contractVersion,
6099
- nextTokenId,
6100
- token,
6101
- getAdditionalSetupActions
6102
- });
6103
- const request = makeCreateTokenCall({
6104
- contractAddress,
6105
- account,
6106
- tokenSetupActions
6107
- });
6108
- const prepareMint = makeOnchainPrepareMintFromCreate({
6109
- contractAddress,
6110
- contractVersion,
6111
- minter,
6112
- publicClient,
6113
- result: newToken.salesConfig,
6114
- tokenId: nextTokenId
5726
+ function baseX({ name, prefix, alphabet }) {
5727
+ const { encode: encode3, decode: decode5 } = base_x_default(alphabet, name);
5728
+ return from({
5729
+ prefix,
5730
+ name,
5731
+ encode: encode3,
5732
+ decode: (text) => coerce3(decode5(text))
6115
5733
  });
6116
- return {
6117
- parameters: request,
6118
- tokenSetupActions,
6119
- newTokenId: nextTokenId,
6120
- newToken,
6121
- contractVersion,
6122
- minter,
6123
- prepareMint
6124
- };
6125
5734
  }
6126
- async function prepareSetupActions({
6127
- chainId,
6128
- account,
6129
- contractVersion,
6130
- nextTokenId,
6131
- token,
6132
- getAdditionalSetupActions
6133
- }) {
6134
- const {
6135
- minter,
6136
- newToken,
6137
- setupActions: tokenSetupActions
6138
- } = await constructCreate1155TokenCalls({
6139
- chainId,
6140
- ownerAddress: account,
6141
- contractVersion,
6142
- nextTokenId,
6143
- ...token
6144
- });
6145
- const setupActions = getAdditionalSetupActions ? [
6146
- ...getAdditionalSetupActions({
6147
- tokenId: nextTokenId
6148
- }),
6149
- ...tokenSetupActions
6150
- ] : tokenSetupActions;
6151
- return { minter, newToken, setupActions };
5735
+ function decode(string, alphabet, bitsPerChar, name) {
5736
+ const codes = {};
5737
+ for (let i = 0; i < alphabet.length; ++i) {
5738
+ codes[alphabet[i]] = i;
5739
+ }
5740
+ let end = string.length;
5741
+ while (string[end - 1] === "=") {
5742
+ --end;
5743
+ }
5744
+ const out = new Uint8Array(end * bitsPerChar / 8 | 0);
5745
+ let bits = 0;
5746
+ let buffer = 0;
5747
+ let written = 0;
5748
+ for (let i = 0; i < end; ++i) {
5749
+ const value = codes[string[i]];
5750
+ if (value === void 0) {
5751
+ throw new SyntaxError(`Non-${name} character`);
5752
+ }
5753
+ buffer = buffer << bitsPerChar | value;
5754
+ bits += bitsPerChar;
5755
+ if (bits >= 8) {
5756
+ bits -= 8;
5757
+ out[written++] = 255 & buffer >> bits;
5758
+ }
5759
+ }
5760
+ if (bits >= bitsPerChar || (255 & buffer << 8 - bits) !== 0) {
5761
+ throw new SyntaxError("Unexpected end of data");
5762
+ }
5763
+ return out;
6152
5764
  }
6153
-
6154
- // src/sparks/mints-queries.ts
6155
- var getMintsAccountBalanceWithPriceQuery = (account) => {
6156
- const query = `
6157
- query GetMintAccountBalances($account: String!) {
6158
- mintAccountBalances(where: { account: $account }) {
6159
- balance
6160
- mintToken {
6161
- id
6162
- pricePerToken
5765
+ function encode(data, alphabet, bitsPerChar) {
5766
+ const pad = alphabet[alphabet.length - 1] === "=";
5767
+ const mask = (1 << bitsPerChar) - 1;
5768
+ let out = "";
5769
+ let bits = 0;
5770
+ let buffer = 0;
5771
+ for (let i = 0; i < data.length; ++i) {
5772
+ buffer = buffer << 8 | data[i];
5773
+ bits += 8;
5774
+ while (bits > bitsPerChar) {
5775
+ bits -= bitsPerChar;
5776
+ out += alphabet[mask & buffer >> bits];
5777
+ }
5778
+ }
5779
+ if (bits !== 0) {
5780
+ out += alphabet[mask & buffer << bitsPerChar - bits];
5781
+ }
5782
+ if (pad) {
5783
+ while ((out.length * bitsPerChar & 7) !== 0) {
5784
+ out += "=";
5785
+ }
5786
+ }
5787
+ return out;
5788
+ }
5789
+ function rfc4648({ name, prefix, bitsPerChar, alphabet }) {
5790
+ return from({
5791
+ prefix,
5792
+ name,
5793
+ encode(input) {
5794
+ return encode(input, alphabet, bitsPerChar);
5795
+ },
5796
+ decode(input) {
5797
+ return decode(input, alphabet, bitsPerChar, name);
5798
+ }
5799
+ });
5800
+ }
5801
+
5802
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base32.js
5803
+ var base32 = rfc4648({
5804
+ prefix: "b",
5805
+ name: "base32",
5806
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567",
5807
+ bitsPerChar: 5
5808
+ });
5809
+ var base32upper = rfc4648({
5810
+ prefix: "B",
5811
+ name: "base32upper",
5812
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
5813
+ bitsPerChar: 5
5814
+ });
5815
+ var base32pad = rfc4648({
5816
+ prefix: "c",
5817
+ name: "base32pad",
5818
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567=",
5819
+ bitsPerChar: 5
5820
+ });
5821
+ var base32padupper = rfc4648({
5822
+ prefix: "C",
5823
+ name: "base32padupper",
5824
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",
5825
+ bitsPerChar: 5
5826
+ });
5827
+ var base32hex = rfc4648({
5828
+ prefix: "v",
5829
+ name: "base32hex",
5830
+ alphabet: "0123456789abcdefghijklmnopqrstuv",
5831
+ bitsPerChar: 5
5832
+ });
5833
+ var base32hexupper = rfc4648({
5834
+ prefix: "V",
5835
+ name: "base32hexupper",
5836
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV",
5837
+ bitsPerChar: 5
5838
+ });
5839
+ var base32hexpad = rfc4648({
5840
+ prefix: "t",
5841
+ name: "base32hexpad",
5842
+ alphabet: "0123456789abcdefghijklmnopqrstuv=",
5843
+ bitsPerChar: 5
5844
+ });
5845
+ var base32hexpadupper = rfc4648({
5846
+ prefix: "T",
5847
+ name: "base32hexpadupper",
5848
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV=",
5849
+ bitsPerChar: 5
5850
+ });
5851
+ var base32z = rfc4648({
5852
+ prefix: "h",
5853
+ name: "base32z",
5854
+ alphabet: "ybndrfg8ejkmcpqxot1uwisza345h769",
5855
+ bitsPerChar: 5
5856
+ });
5857
+
5858
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/bases/base58.js
5859
+ var base58btc = baseX({
5860
+ name: "base58btc",
5861
+ prefix: "z",
5862
+ alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
5863
+ });
5864
+ var base58flickr = baseX({
5865
+ name: "base58flickr",
5866
+ prefix: "Z",
5867
+ alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
5868
+ });
5869
+
5870
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/vendor/varint.js
5871
+ var encode_1 = encode2;
5872
+ var MSB = 128;
5873
+ var REST = 127;
5874
+ var MSBALL = ~REST;
5875
+ var INT = Math.pow(2, 31);
5876
+ function encode2(num, out, offset) {
5877
+ out = out || [];
5878
+ offset = offset || 0;
5879
+ var oldOffset = offset;
5880
+ while (num >= INT) {
5881
+ out[offset++] = num & 255 | MSB;
5882
+ num /= 128;
5883
+ }
5884
+ while (num & MSBALL) {
5885
+ out[offset++] = num & 255 | MSB;
5886
+ num >>>= 7;
5887
+ }
5888
+ out[offset] = num | 0;
5889
+ encode2.bytes = offset - oldOffset + 1;
5890
+ return out;
5891
+ }
5892
+ var decode2 = read;
5893
+ var MSB$1 = 128;
5894
+ var REST$1 = 127;
5895
+ function read(buf, offset) {
5896
+ var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;
5897
+ do {
5898
+ if (counter >= l) {
5899
+ read.bytes = 0;
5900
+ throw new RangeError("Could not decode varint");
5901
+ }
5902
+ b = buf[counter++];
5903
+ res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);
5904
+ shift += 7;
5905
+ } while (b >= MSB$1);
5906
+ read.bytes = counter - offset;
5907
+ return res;
5908
+ }
5909
+ var N1 = Math.pow(2, 7);
5910
+ var N2 = Math.pow(2, 14);
5911
+ var N3 = Math.pow(2, 21);
5912
+ var N4 = Math.pow(2, 28);
5913
+ var N5 = Math.pow(2, 35);
5914
+ var N6 = Math.pow(2, 42);
5915
+ var N7 = Math.pow(2, 49);
5916
+ var N8 = Math.pow(2, 56);
5917
+ var N9 = Math.pow(2, 63);
5918
+ var length = function(value) {
5919
+ return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;
5920
+ };
5921
+ var varint = {
5922
+ encode: encode_1,
5923
+ decode: decode2,
5924
+ encodingLength: length
5925
+ };
5926
+ var _brrp_varint = varint;
5927
+ var varint_default = _brrp_varint;
5928
+
5929
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/varint.js
5930
+ function decode3(data, offset = 0) {
5931
+ const code = varint_default.decode(data, offset);
5932
+ return [code, varint_default.decode.bytes];
5933
+ }
5934
+ function encodeTo(int, target, offset = 0) {
5935
+ varint_default.encode(int, target, offset);
5936
+ return target;
5937
+ }
5938
+ function encodingLength(int) {
5939
+ return varint_default.encodingLength(int);
5940
+ }
5941
+
5942
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/hashes/digest.js
5943
+ function create(code, digest) {
5944
+ const size = digest.byteLength;
5945
+ const sizeOffset = encodingLength(code);
5946
+ const digestOffset = sizeOffset + encodingLength(size);
5947
+ const bytes = new Uint8Array(digestOffset + size);
5948
+ encodeTo(code, bytes, 0);
5949
+ encodeTo(size, bytes, sizeOffset);
5950
+ bytes.set(digest, digestOffset);
5951
+ return new Digest(code, size, digest, bytes);
5952
+ }
5953
+ function decode4(multihash) {
5954
+ const bytes = coerce3(multihash);
5955
+ const [code, sizeOffset] = decode3(bytes);
5956
+ const [size, digestOffset] = decode3(bytes.subarray(sizeOffset));
5957
+ const digest = bytes.subarray(sizeOffset + digestOffset);
5958
+ if (digest.byteLength !== size) {
5959
+ throw new Error("Incorrect length");
5960
+ }
5961
+ return new Digest(code, size, digest, bytes);
5962
+ }
5963
+ function equals2(a, b) {
5964
+ if (a === b) {
5965
+ return true;
5966
+ } else {
5967
+ const data = b;
5968
+ return a.code === data.code && a.size === data.size && data.bytes instanceof Uint8Array && equals(a.bytes, data.bytes);
5969
+ }
5970
+ }
5971
+ var Digest = class {
5972
+ /**
5973
+ * Creates a multihash digest.
5974
+ */
5975
+ constructor(code, size, digest, bytes) {
5976
+ __publicField(this, "code");
5977
+ __publicField(this, "size");
5978
+ __publicField(this, "digest");
5979
+ __publicField(this, "bytes");
5980
+ this.code = code;
5981
+ this.size = size;
5982
+ this.digest = digest;
5983
+ this.bytes = bytes;
5984
+ }
5985
+ };
5986
+
5987
+ // ../../node_modules/.pnpm/multiformats@13.2.1/node_modules/multiformats/dist/src/cid.js
5988
+ function format(link, base3) {
5989
+ const { bytes, version } = link;
5990
+ switch (version) {
5991
+ case 0:
5992
+ return toStringV0(bytes, baseCache(link), base3 ?? base58btc.encoder);
5993
+ default:
5994
+ return toStringV1(bytes, baseCache(link), base3 ?? base32.encoder);
5995
+ }
5996
+ }
5997
+ var cache = /* @__PURE__ */ new WeakMap();
5998
+ function baseCache(cid) {
5999
+ const baseCache2 = cache.get(cid);
6000
+ if (baseCache2 == null) {
6001
+ const baseCache3 = /* @__PURE__ */ new Map();
6002
+ cache.set(cid, baseCache3);
6003
+ return baseCache3;
6004
+ }
6005
+ return baseCache2;
6006
+ }
6007
+ var _a;
6008
+ var CID = class _CID {
6009
+ /**
6010
+ * @param version - Version of the CID
6011
+ * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
6012
+ * @param multihash - (Multi)hash of the of the content.
6013
+ */
6014
+ constructor(version, code, multihash, bytes) {
6015
+ __publicField(this, "code");
6016
+ __publicField(this, "version");
6017
+ __publicField(this, "multihash");
6018
+ __publicField(this, "bytes");
6019
+ __publicField(this, "/");
6020
+ __publicField(this, _a, "CID");
6021
+ this.code = code;
6022
+ this.version = version;
6023
+ this.multihash = multihash;
6024
+ this.bytes = bytes;
6025
+ this["/"] = bytes;
6026
+ }
6027
+ /**
6028
+ * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`
6029
+ * please either use `CID.asCID(cid)` or switch to new signalling mechanism
6030
+ *
6031
+ * @deprecated
6032
+ */
6033
+ get asCID() {
6034
+ return this;
6035
+ }
6036
+ // ArrayBufferView
6037
+ get byteOffset() {
6038
+ return this.bytes.byteOffset;
6039
+ }
6040
+ // ArrayBufferView
6041
+ get byteLength() {
6042
+ return this.bytes.byteLength;
6043
+ }
6044
+ toV0() {
6045
+ switch (this.version) {
6046
+ case 0: {
6047
+ return this;
6048
+ }
6049
+ case 1: {
6050
+ const { code, multihash } = this;
6051
+ if (code !== DAG_PB_CODE) {
6052
+ throw new Error("Cannot convert a non dag-pb CID to CIDv0");
6053
+ }
6054
+ if (multihash.code !== SHA_256_CODE) {
6055
+ throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");
6056
+ }
6057
+ return _CID.createV0(multihash);
6058
+ }
6059
+ default: {
6060
+ throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`);
6061
+ }
6062
+ }
6063
+ }
6064
+ toV1() {
6065
+ switch (this.version) {
6066
+ case 0: {
6067
+ const { code, digest } = this.multihash;
6068
+ const multihash = create(code, digest);
6069
+ return _CID.createV1(this.code, multihash);
6070
+ }
6071
+ case 1: {
6072
+ return this;
6073
+ }
6074
+ default: {
6075
+ throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`);
6076
+ }
6077
+ }
6078
+ }
6079
+ equals(other) {
6080
+ return _CID.equals(this, other);
6081
+ }
6082
+ static equals(self, other) {
6083
+ const unknown = other;
6084
+ return unknown != null && self.code === unknown.code && self.version === unknown.version && equals2(self.multihash, unknown.multihash);
6085
+ }
6086
+ toString(base3) {
6087
+ return format(this, base3);
6088
+ }
6089
+ toJSON() {
6090
+ return { "/": format(this) };
6091
+ }
6092
+ link() {
6093
+ return this;
6094
+ }
6095
+ // Legacy
6096
+ [(_a = Symbol.toStringTag, Symbol.for("nodejs.util.inspect.custom"))]() {
6097
+ return `CID(${this.toString()})`;
6098
+ }
6099
+ /**
6100
+ * Takes any input `value` and returns a `CID` instance if it was
6101
+ * a `CID` otherwise returns `null`. If `value` is instanceof `CID`
6102
+ * it will return value back. If `value` is not instance of this CID
6103
+ * class, but is compatible CID it will return new instance of this
6104
+ * `CID` class. Otherwise returns null.
6105
+ *
6106
+ * This allows two different incompatible versions of CID library to
6107
+ * co-exist and interop as long as binary interface is compatible.
6108
+ */
6109
+ static asCID(input) {
6110
+ if (input == null) {
6111
+ return null;
6112
+ }
6113
+ const value = input;
6114
+ if (value instanceof _CID) {
6115
+ return value;
6116
+ } else if (value["/"] != null && value["/"] === value.bytes || value.asCID === value) {
6117
+ const { version, code, multihash, bytes } = value;
6118
+ return new _CID(version, code, multihash, bytes ?? encodeCID(version, code, multihash.bytes));
6119
+ } else if (value[cidSymbol] === true) {
6120
+ const { version, multihash, code } = value;
6121
+ const digest = decode4(multihash);
6122
+ return _CID.create(version, code, digest);
6123
+ } else {
6124
+ return null;
6125
+ }
6126
+ }
6127
+ /**
6128
+ * @param version - Version of the CID
6129
+ * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv
6130
+ * @param digest - (Multi)hash of the of the content.
6131
+ */
6132
+ static create(version, code, digest) {
6133
+ if (typeof code !== "number") {
6134
+ throw new Error("String codecs are no longer supported");
6135
+ }
6136
+ if (!(digest.bytes instanceof Uint8Array)) {
6137
+ throw new Error("Invalid digest");
6138
+ }
6139
+ switch (version) {
6140
+ case 0: {
6141
+ if (code !== DAG_PB_CODE) {
6142
+ throw new Error(`Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`);
6143
+ } else {
6144
+ return new _CID(version, code, digest, digest.bytes);
6163
6145
  }
6164
6146
  }
6147
+ case 1: {
6148
+ const bytes = encodeCID(version, code, digest.bytes);
6149
+ return new _CID(version, code, digest, bytes);
6150
+ }
6151
+ default: {
6152
+ throw new Error("Invalid version");
6153
+ }
6165
6154
  }
6166
- `;
6167
- return {
6168
- query,
6169
- variables: { account }
6170
- };
6171
- };
6172
- var selectMintsToCollectWithFromQueryResult = (mintAccountBalances, quantityToCollect) => {
6173
- const parsed = mintAccountBalances.map((r) => {
6174
- return {
6175
- tokenId: BigInt(r.mintToken.id),
6176
- quantity: BigInt(r.balance),
6177
- pricePerToken: BigInt(r.mintToken.pricePerToken)
6155
+ }
6156
+ /**
6157
+ * Simplified version of `create` for CIDv0.
6158
+ */
6159
+ static createV0(digest) {
6160
+ return _CID.create(0, DAG_PB_CODE, digest);
6161
+ }
6162
+ /**
6163
+ * Simplified version of `create` for CIDv1.
6164
+ *
6165
+ * @param code - Content encoding format code.
6166
+ * @param digest - Multihash of the content.
6167
+ */
6168
+ static createV1(code, digest) {
6169
+ return _CID.create(1, code, digest);
6170
+ }
6171
+ /**
6172
+ * Decoded a CID from its binary representation. The byte array must contain
6173
+ * only the CID with no additional bytes.
6174
+ *
6175
+ * An error will be thrown if the bytes provided do not contain a valid
6176
+ * binary representation of a CID.
6177
+ */
6178
+ static decode(bytes) {
6179
+ const [cid, remainder] = _CID.decodeFirst(bytes);
6180
+ if (remainder.length !== 0) {
6181
+ throw new Error("Incorrect length");
6182
+ }
6183
+ return cid;
6184
+ }
6185
+ /**
6186
+ * Decoded a CID from its binary representation at the beginning of a byte
6187
+ * array.
6188
+ *
6189
+ * Returns an array with the first element containing the CID and the second
6190
+ * element containing the remainder of the original byte array. The remainder
6191
+ * will be a zero-length byte array if the provided bytes only contained a
6192
+ * binary CID representation.
6193
+ */
6194
+ static decodeFirst(bytes) {
6195
+ const specs = _CID.inspectBytes(bytes);
6196
+ const prefixSize = specs.size - specs.multihashSize;
6197
+ const multihashBytes = coerce3(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));
6198
+ if (multihashBytes.byteLength !== specs.multihashSize) {
6199
+ throw new Error("Incorrect length");
6200
+ }
6201
+ const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);
6202
+ const digest = new Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);
6203
+ const cid = specs.version === 0 ? _CID.createV0(digest) : _CID.createV1(specs.codec, digest);
6204
+ return [cid, bytes.subarray(specs.size)];
6205
+ }
6206
+ /**
6207
+ * Inspect the initial bytes of a CID to determine its properties.
6208
+ *
6209
+ * Involves decoding up to 4 varints. Typically this will require only 4 to 6
6210
+ * bytes but for larger multicodec code values and larger multihash digest
6211
+ * lengths these varints can be quite large. It is recommended that at least
6212
+ * 10 bytes be made available in the `initialBytes` argument for a complete
6213
+ * inspection.
6214
+ */
6215
+ static inspectBytes(initialBytes) {
6216
+ let offset = 0;
6217
+ const next = () => {
6218
+ const [i, length2] = decode3(initialBytes.subarray(offset));
6219
+ offset += length2;
6220
+ return i;
6178
6221
  };
6179
- });
6180
- const sorted = parsed.sort((a, b) => {
6181
- if (a.pricePerToken < b.pricePerToken) {
6182
- return -1;
6222
+ let version = next();
6223
+ let codec = DAG_PB_CODE;
6224
+ if (version === 18) {
6225
+ version = 0;
6226
+ offset = 0;
6227
+ } else {
6228
+ codec = next();
6183
6229
  }
6184
- return 1;
6185
- });
6186
- let remainingQuantity = quantityToCollect;
6187
- const tokenIds = [];
6188
- const quantities = [];
6189
- while (remainingQuantity > 0) {
6190
- const next = sorted.shift();
6191
- if (!next) {
6192
- throw new Error("Not enough MINTs to collect with");
6230
+ if (version !== 0 && version !== 1) {
6231
+ throw new RangeError(`Invalid CID version ${version}`);
6193
6232
  }
6194
- const quantityToUse = remainingQuantity > next.quantity ? next.quantity : remainingQuantity;
6195
- tokenIds.push(next.tokenId);
6196
- quantities.push(quantityToUse);
6197
- remainingQuantity -= quantityToUse;
6233
+ const prefixSize = offset;
6234
+ const multihashCode = next();
6235
+ const digestSize = next();
6236
+ const size = offset + digestSize;
6237
+ const multihashSize = size - prefixSize;
6238
+ return { version, codec, multihashCode, digestSize, multihashSize, size };
6239
+ }
6240
+ /**
6241
+ * Takes cid in a string representation and creates an instance. If `base`
6242
+ * decoder is not provided will use a default from the configuration. It will
6243
+ * throw an error if encoding of the CID is not compatible with supplied (or
6244
+ * a default decoder).
6245
+ */
6246
+ static parse(source, base3) {
6247
+ const [prefix, bytes] = parseCIDtoBytes(source, base3);
6248
+ const cid = _CID.decode(bytes);
6249
+ if (cid.version === 0 && source[0] !== "Q") {
6250
+ throw Error("Version 0 CID string must not include multibase prefix");
6251
+ }
6252
+ baseCache(cid).set(prefix, source);
6253
+ return cid;
6198
6254
  }
6199
- return {
6200
- tokenIds,
6201
- quantities
6202
- };
6203
- };
6204
- var sumBalances = (mintAccountBalances) => {
6205
- return mintAccountBalances.reduce((acc, curr) => {
6206
- return acc + BigInt(curr.balance);
6207
- }, BigInt(0));
6208
6255
  };
6256
+ function parseCIDtoBytes(source, base3) {
6257
+ switch (source[0]) {
6258
+ case "Q": {
6259
+ const decoder = base3 ?? base58btc;
6260
+ return [
6261
+ base58btc.prefix,
6262
+ decoder.decode(`${base58btc.prefix}${source}`)
6263
+ ];
6264
+ }
6265
+ case base58btc.prefix: {
6266
+ const decoder = base3 ?? base58btc;
6267
+ return [base58btc.prefix, decoder.decode(source)];
6268
+ }
6269
+ case base32.prefix: {
6270
+ const decoder = base3 ?? base32;
6271
+ return [base32.prefix, decoder.decode(source)];
6272
+ }
6273
+ default: {
6274
+ if (base3 == null) {
6275
+ throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");
6276
+ }
6277
+ return [source[0], base3.decode(source)];
6278
+ }
6279
+ }
6280
+ }
6281
+ function toStringV0(bytes, cache2, base3) {
6282
+ const { prefix } = base3;
6283
+ if (prefix !== base58btc.prefix) {
6284
+ throw Error(`Cannot string encode V0 in ${base3.name} encoding`);
6285
+ }
6286
+ const cid = cache2.get(prefix);
6287
+ if (cid == null) {
6288
+ const cid2 = base3.encode(bytes).slice(1);
6289
+ cache2.set(prefix, cid2);
6290
+ return cid2;
6291
+ } else {
6292
+ return cid;
6293
+ }
6294
+ }
6295
+ function toStringV1(bytes, cache2, base3) {
6296
+ const { prefix } = base3;
6297
+ const cid = cache2.get(prefix);
6298
+ if (cid == null) {
6299
+ const cid2 = base3.encode(bytes);
6300
+ cache2.set(prefix, cid2);
6301
+ return cid2;
6302
+ } else {
6303
+ return cid;
6304
+ }
6305
+ }
6306
+ var DAG_PB_CODE = 112;
6307
+ var SHA_256_CODE = 18;
6308
+ function encodeCID(version, code, multihash) {
6309
+ const codeOffset = encodingLength(version);
6310
+ const hashOffset = codeOffset + encodingLength(code);
6311
+ const bytes = new Uint8Array(hashOffset + multihash.byteLength);
6312
+ encodeTo(version, bytes, 0);
6313
+ encodeTo(code, bytes, codeOffset);
6314
+ bytes.set(multihash, hashOffset);
6315
+ return bytes;
6316
+ }
6317
+ var cidSymbol = Symbol.for("@ipld/js-cid/CID");
6209
6318
 
6210
- // src/sparks/sparks-contracts.ts
6211
- import {
6212
- mintsSafeTransferBatchTypedDataDefinition,
6213
- mintsSafeTransferTypedDataDefinition,
6214
- zoraMints1155Config,
6215
- zoraMintsManagerImplABI,
6216
- zoraMintsManagerImplAddress,
6217
- zoraMintsManagerImplConfig,
6218
- zoraSparksManagerImplABI,
6219
- zoraSparksManagerImplAddress
6220
- } from "@zoralabs/protocol-deployments";
6221
- import {
6222
- decodeErrorResult,
6223
- encodeFunctionData as encodeFunctionData3,
6224
- zeroAddress as zeroAddress7
6225
- } from "viem";
6226
- var addressOrAccountAddress = (address) => typeof address === "string" ? address : address.address;
6227
- var mintWithEthParams = ({
6228
- tokenId,
6229
- quantity,
6230
- recipient,
6231
- chainId,
6232
- pricePerMint,
6233
- account
6234
- }) => makeContractParameters({
6235
- abi: zoraSparksManagerImplABI,
6236
- address: zoraSparksManagerImplAddress[chainId],
6237
- functionName: "mintWithEth",
6238
- args: [tokenId, quantity, recipient || addressOrAccountAddress(account)],
6239
- value: pricePerMint * quantity,
6240
- account
6241
- });
6242
- var getPaidMintValue = (quantities, pricePerMint) => {
6243
- if (!pricePerMint || pricePerMint === 0n)
6244
- return;
6245
- return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;
6246
- };
6247
- var mintsBalanceOfAccountParams = ({
6248
- account,
6249
- chainId
6250
- }) => ({
6251
- abi: zoraMints1155Config.abi,
6252
- address: zoraMints1155Config.address[chainId],
6253
- functionName: "balanceOfAccount",
6254
- args: [account]
6255
- });
6256
- var encodeCollectOnManager = ({
6257
- zoraCreator1155Contract,
6258
- minter,
6259
- zoraCreator1155TokenId,
6260
- mintArguments
6261
- }) => encodeFunctionData3({
6262
- abi: zoraMintsManagerImplConfig.abi,
6263
- functionName: "collect",
6264
- args: [
6265
- zoraCreator1155Contract,
6266
- minter,
6267
- zoraCreator1155TokenId,
6268
- mintArguments
6269
- ]
6270
- });
6271
- function collectWithMintsParams({
6272
- tokenIds,
6273
- quantities,
6274
- chainId,
6275
- paidMintPricePerToken,
6276
- account,
6277
- mintArguments,
6278
- minter,
6279
- zoraCreator1155Contract,
6280
- zoraCreator1155TokenId
6281
- }) {
6282
- const call = encodeCollectOnManager({
6283
- tokenIds,
6284
- quantities,
6285
- zoraCreator1155Contract,
6286
- zoraCreator1155TokenId,
6287
- minter,
6288
- mintArguments
6289
- });
6290
- return makeContractParameters({
6291
- abi: zoraMints1155Config.abi,
6292
- address: zoraMints1155Config.address[chainId],
6293
- functionName: "transferBatchToManagerAndCall",
6294
- args: [tokenIds, quantities, call],
6295
- // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract
6296
- // for the paid mint cost.
6297
- value: getPaidMintValue(quantities, paidMintPricePerToken),
6298
- account
6299
- });
6319
+ // src/ipfs/ipfs.ts
6320
+ function isCID(str) {
6321
+ if (!str)
6322
+ return false;
6323
+ try {
6324
+ CID.parse(str);
6325
+ return true;
6326
+ } catch (e) {
6327
+ if (/^(bafy|Qm)/.test(str))
6328
+ return true;
6329
+ return false;
6330
+ }
6300
6331
  }
6301
- function getMintsEthPrice({
6302
- publicClient
6303
- }) {
6304
- const chainId = publicClient.chain?.id;
6305
- if (!chainId || !zoraMintsManagerImplAddress[chainId]) {
6306
- throw new Error(`Chain id ${chainId} not supported`);
6332
+ function normalizeIPFSUrl(url) {
6333
+ if (!url || typeof url !== "string")
6334
+ return null;
6335
+ url = url.replace(/"/g, "");
6336
+ if (isNormalizedIPFSURL(url))
6337
+ return url;
6338
+ if (isCID(url))
6339
+ return `ipfs://${url}`;
6340
+ if (!isIPFSUrl(url))
6341
+ return null;
6342
+ if (isGatewayIPFSUrl(url)) {
6343
+ const parsed = new URL(url.replace(/^\/\//, "http://"));
6344
+ parsed.pathname = parsed.pathname.replace(/^\/ipfs\//, "");
6345
+ const cid = parsed.toString().replace(`${parsed.protocol}//${parsed.host}/`, "");
6346
+ return `ipfs://${cid}`;
6307
6347
  }
6308
- return publicClient.readContract({
6309
- abi: zoraMintsManagerImplABI,
6310
- address: zoraMintsManagerImplAddress[chainId],
6311
- functionName: "getEthPrice"
6312
- });
6348
+ return null;
6313
6349
  }
6314
- function makePermitTransferBatchAndTypeData({
6315
- tokenIds,
6316
- quantities,
6317
- chainId,
6318
- mintsOwner,
6319
- to,
6320
- nonce,
6321
- deadline,
6322
- safeTransferData
6323
- }) {
6324
- const permit = {
6325
- owner: typeof mintsOwner === "string" ? mintsOwner : mintsOwner.address,
6326
- to,
6327
- tokenIds,
6328
- quantities,
6329
- deadline,
6330
- nonce,
6331
- safeTransferData
6332
- };
6333
- const typedData = {
6334
- ...mintsSafeTransferBatchTypedDataDefinition({
6335
- chainId,
6336
- message: permit
6337
- }),
6338
- account: mintsOwner
6339
- };
6340
- return {
6341
- permit,
6342
- typedData
6343
- };
6350
+ function isNormalizedIPFSURL(url) {
6351
+ return url && typeof url === "string" ? url.startsWith("ipfs://") : false;
6344
6352
  }
6345
- function makePermitTransferTypeData({
6346
- tokenId,
6347
- quantity,
6348
- chainId,
6349
- mintsOwner,
6350
- to,
6351
- nonce,
6352
- deadline,
6353
- safeTransferData
6354
- }) {
6355
- const permit = {
6356
- owner: typeof mintsOwner === "string" ? mintsOwner : mintsOwner.address,
6357
- to,
6358
- tokenId,
6359
- quantity,
6360
- deadline,
6361
- nonce,
6362
- safeTransferData
6363
- };
6364
- const typedData = {
6365
- ...mintsSafeTransferTypedDataDefinition({
6366
- chainId,
6367
- message: permit
6368
- }),
6369
- account: mintsOwner
6370
- };
6371
- return {
6372
- permit,
6373
- typedData
6374
- };
6353
+ function isGatewayIPFSUrl(url) {
6354
+ if (url && typeof url === "string") {
6355
+ try {
6356
+ const parsed = new URL(url.replace(/^"|'(.*)"|'$/, "$1"));
6357
+ return !isNormalizedIPFSURL(url) && parsed && parsed.pathname.startsWith("/ipfs/");
6358
+ } catch {
6359
+ return false;
6360
+ }
6361
+ }
6362
+ return false;
6375
6363
  }
6376
- var encodePremintOnManager = ({
6377
- contractCreationConfig,
6378
- premintConfig,
6379
- premintSignature,
6380
- mintArguments,
6381
- signerContract = zeroAddress7
6382
- }) => encodeFunctionData3({
6383
- abi: zoraMintsManagerImplConfig.abi,
6384
- functionName: "collectPremintV2",
6385
- args: [
6386
- contractCreationConfig,
6387
- premintConfig,
6388
- premintSignature,
6389
- mintArguments,
6390
- signerContract
6391
- ]
6392
- });
6393
- var makePermitToCollectPremintOrNonPremint = ({
6394
- mintsOwner,
6395
- chainId,
6396
- deadline,
6397
- tokenIds,
6398
- // this quantity of MINTs will be used to collect premint
6399
- // and will be burned. This same quantity is the quantity of
6400
- // premint to collect.
6401
- quantities,
6402
- nonce,
6403
- premint,
6404
- collect
6405
- }) => {
6406
- let safeTransferData;
6407
- if (premint) {
6408
- safeTransferData = encodePremintOnManager(premint);
6409
- } else if (collect) {
6410
- safeTransferData = encodeCollectOnManager(collect);
6411
- } else {
6412
- throw new Error("Invalid operation");
6364
+ function isIPFSUrl(url) {
6365
+ return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;
6366
+ }
6367
+ function isNormalizeableIPFSUrl(url) {
6368
+ return url ? isIPFSUrl(url) || isCID(url) : false;
6369
+ }
6370
+
6371
+ // src/ipfs/gateway.ts
6372
+ var IPFS_GATEWAY = "https://magic.decentralized-content.com";
6373
+ var ARWEAVE_GATEWAY = "https://arweave.net";
6374
+ function arweaveGatewayUrl(normalizedArweaveUrl) {
6375
+ if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== "string")
6376
+ return null;
6377
+ return normalizedArweaveUrl.replace("ar://", `${ARWEAVE_GATEWAY}/`);
6378
+ }
6379
+ function ipfsGatewayUrl(url) {
6380
+ if (!url || typeof url !== "string")
6381
+ return null;
6382
+ const normalizedIPFSUrl = normalizeIPFSUrl(url);
6383
+ if (normalizedIPFSUrl) {
6384
+ return normalizedIPFSUrl.replace("ipfs://", `${IPFS_GATEWAY}/ipfs/`);
6413
6385
  }
6414
- return makePermitTransferBatchAndTypeData({
6415
- tokenIds,
6416
- quantities,
6417
- chainId,
6418
- mintsOwner,
6419
- nonce,
6420
- deadline,
6421
- safeTransferData,
6422
- to: zoraMintsManagerImplConfig.address[chainId]
6423
- });
6386
+ return null;
6387
+ }
6388
+ function getFetchableUrl(uri) {
6389
+ if (!uri || typeof uri !== "string")
6390
+ return null;
6391
+ if (uri.startsWith("http://"))
6392
+ return null;
6393
+ if (isNormalizeableIPFSUrl(uri)) {
6394
+ return ipfsGatewayUrl(uri);
6395
+ }
6396
+ if (isArweaveURL(uri)) {
6397
+ return arweaveGatewayUrl(uri);
6398
+ }
6399
+ if (/^(https|data|blob):/.test(uri)) {
6400
+ return uri;
6401
+ }
6402
+ return null;
6403
+ }
6404
+
6405
+ // src/ipfs/mimeTypes.ts
6406
+ var HTML = "text/html";
6407
+ var MARKDOWN = "text/markdown";
6408
+ var MARKDOWN_UTF8 = "text/markdown; charset=utf-8";
6409
+ var TEXT_PLAIN_UTF8 = "text/plain; charset=utf-8";
6410
+ var TEXT_PLAIN = "text/plain";
6411
+ var CSV = "text/csv";
6412
+ var NUMBERS = ".numbers";
6413
+ var EXCEL = ".xlsx";
6414
+ var PDF = "application/pdf";
6415
+ var JPG = "image/jpg";
6416
+ var JPEG = "image/jpeg";
6417
+ var PNG = "image/png";
6418
+ var WEBP = "image/webp";
6419
+ var SVG = "image/svg+xml";
6420
+ var TIFF = "image/tiff";
6421
+ var GIF = "image/gif";
6422
+ var isImage = (mimeType) => {
6423
+ if (!mimeType)
6424
+ return false;
6425
+ return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);
6424
6426
  };
6425
- function collectPremintV2WithMintsParams({
6426
- tokenIds,
6427
- quantities,
6428
- paidMintPricePerToken,
6429
- account,
6430
- chainId,
6431
- ...rest
6432
- }) {
6433
- const call = encodePremintOnManager({
6434
- ...rest
6435
- });
6436
- return makeContractParameters({
6437
- abi: zoraMints1155Config.abi,
6438
- address: zoraMints1155Config.address[chainId],
6439
- functionName: "transferBatchToManagerAndCall",
6440
- args: [tokenIds, quantities, call],
6441
- value: getPaidMintValue(quantities, paidMintPricePerToken),
6442
- account
6443
- });
6427
+ var DEFAULT_THUMBNAIL_CID_HASHES = {
6428
+ ["AUDIO" /* AUDIO */]: "bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4",
6429
+ ["VIDEO" /* VIDEO */]: "bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu",
6430
+ ["HTML" /* HTML */]: "bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq",
6431
+ ["ZIP" /* ZIP */]: "bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq",
6432
+ // assuming all zip files are html directories
6433
+ ["TEXT" /* TEXT */]: "bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q",
6434
+ default: "bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4"
6435
+ };
6436
+ var MP4 = "video/mp4";
6437
+ var QUICKTIME = "video/quicktime";
6438
+ var M4V = "video/x-m4v";
6439
+ var WEBM = "video/webm";
6440
+ var M4A = "audio/x-m4a";
6441
+ var MPEG = "audio/mpeg";
6442
+ var MP3 = "audio/mp3";
6443
+ var WAV = "audio/wav";
6444
+ var VND_WAV = "audio/vnd.wav";
6445
+ var VND_WAVE = "audio/vnd.wave";
6446
+ var WAVE = "audio/wave";
6447
+ var X_WAV = "audio/x-wav";
6448
+ var AIFF = "audio/aiff";
6449
+ var GLTF = "model/gltf+json";
6450
+ var GLB = "model/gltf-binary";
6451
+ var GLTF_EXT = ".gltf";
6452
+ var GLB_EXT = ".glb";
6453
+ var JSON_MIME_TYPE = "application/json";
6454
+ var ZIP = "application/zip";
6455
+ var mimeToMediaType = {
6456
+ [HTML]: "HTML" /* HTML */,
6457
+ [JPG]: "IMAGE" /* IMAGE */,
6458
+ [JPEG]: "IMAGE" /* IMAGE */,
6459
+ [PNG]: "IMAGE" /* IMAGE */,
6460
+ [WEBP]: "IMAGE" /* IMAGE */,
6461
+ [SVG]: "IMAGE" /* IMAGE */,
6462
+ [TIFF]: "TIFF" /* TIFF */,
6463
+ [GIF]: "IMAGE" /* IMAGE */,
6464
+ [MP4]: "VIDEO" /* VIDEO */,
6465
+ [WEBM]: "VIDEO" /* VIDEO */,
6466
+ [QUICKTIME]: "VIDEO" /* VIDEO */,
6467
+ [M4V]: "VIDEO" /* VIDEO */,
6468
+ [MPEG]: "AUDIO" /* AUDIO */,
6469
+ [MP3]: "AUDIO" /* AUDIO */,
6470
+ [M4A]: "AUDIO" /* AUDIO */,
6471
+ [VND_WAV]: "AUDIO" /* AUDIO */,
6472
+ [VND_WAVE]: "AUDIO" /* AUDIO */,
6473
+ [WAV]: "AUDIO" /* AUDIO */,
6474
+ [WAVE]: "AUDIO" /* AUDIO */,
6475
+ [X_WAV]: "AUDIO" /* AUDIO */,
6476
+ [AIFF]: "AUDIO" /* AUDIO */,
6477
+ [TEXT_PLAIN]: "TEXT" /* TEXT */,
6478
+ [TEXT_PLAIN_UTF8]: "TEXT" /* TEXT */,
6479
+ [MARKDOWN]: "TEXT" /* TEXT */,
6480
+ [MARKDOWN_UTF8]: "TEXT" /* TEXT */,
6481
+ [CSV]: "CSV" /* CSV */,
6482
+ [NUMBERS]: "NUMBERS" /* NUMBERS */,
6483
+ [EXCEL]: "EXCEL" /* EXCEL */,
6484
+ [PDF]: "PDF" /* PDF */,
6485
+ [ZIP]: "ZIP" /* ZIP */,
6486
+ [GLTF]: "MODEL" /* MODEL */,
6487
+ [GLTF_EXT]: "MODEL" /* MODEL */,
6488
+ [GLB]: "MODEL" /* MODEL */,
6489
+ // GLTF returns 'application/json' as the mimetype,
6490
+ // and as the only JSON-encoded media we currently support,
6491
+ // we assume that if the mimetype is JSON, it's a GLTF
6492
+ [JSON_MIME_TYPE]: "MODEL" /* MODEL */,
6493
+ [GLB_EXT]: "MODEL" /* MODEL */
6494
+ };
6495
+ function mimeTypeToMedia(mimeType) {
6496
+ if (!mimeType)
6497
+ return "UNKNOWN" /* UNKNOWN */;
6498
+ return mimeToMediaType[mimeType] || "UNKNOWN" /* UNKNOWN */;
6444
6499
  }
6445
- function decodeCallFailedError(error) {
6446
- if (error.data?.errorName !== "CallFailed")
6447
- throw new Error("Not a CallFailed error");
6448
- const internalErrorData = error.data?.args?.[0];
6449
- return decodeErrorResult({
6450
- abi: zoraMintsManagerImplABI,
6451
- data: internalErrorData
6452
- });
6500
+ async function getMimeType(uri) {
6501
+ if (!uri)
6502
+ return uri;
6503
+ const res = await fetch(uri, { method: "HEAD" });
6504
+ let mimeType = res.headers.get("content-type");
6505
+ return mimeType;
6453
6506
  }
6454
6507
 
6455
- // src/sdk.ts
6456
- function createCreatorClient(clientConfig) {
6457
- const premintClient = new PremintClient({
6458
- chainId: clientConfig.chainId,
6459
- publicClient: clientConfig.publicClient,
6460
- premintApi: clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId)
6461
- });
6462
- const create1155CreatorClient = new Create1155Client({
6463
- chainId: clientConfig.chainId,
6464
- publicClient: clientConfig.publicClient
6465
- });
6508
+ // src/ipfs/token-metadata.ts
6509
+ var makeTextTokenMetadata = (parameters) => {
6510
+ const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;
6511
+ const content = textFileUrl ? {
6512
+ mime: TEXT_PLAIN,
6513
+ uri: textFileUrl
6514
+ } : null;
6515
+ const image = thumbnailUrl;
6516
+ const animation_url = textFileUrl;
6466
6517
  return {
6467
- createPremint: (p) => premintClient.createPremint(p),
6468
- updatePremint: (p) => premintClient.updatePremint(p),
6469
- deletePremint: (p) => premintClient.deletePremint(p),
6470
- create1155: (p) => create1155CreatorClient.createNew1155(p),
6471
- create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p)
6518
+ name,
6519
+ image,
6520
+ animation_url,
6521
+ content,
6522
+ attributes
6472
6523
  };
6473
- }
6474
- function createCollectorClient(params) {
6475
- const premintGetterToUse = params.premintGetter || new PremintAPIClient(params.chainId);
6476
- const mintGetterToUse = params.mintGetter || new SubgraphMintGetter(params.chainId);
6477
- const mintClient = new MintClient({
6478
- publicClient: params.publicClient,
6479
- premintGetter: premintGetterToUse,
6480
- mintGetter: mintGetterToUse
6481
- });
6524
+ };
6525
+ var makeMediaTokenMetadata = async ({
6526
+ name,
6527
+ description,
6528
+ attributes = [],
6529
+ mediaUrl,
6530
+ thumbnailUrl
6531
+ }) => {
6532
+ const contentUrl = mediaUrl;
6533
+ const fetchableContentUrl = getFetchableUrl(contentUrl);
6534
+ if (!fetchableContentUrl)
6535
+ throw new Error(`Content url (${contentUrl}) is not fetchable`);
6536
+ const mimeType = await getMimeType(fetchableContentUrl);
6537
+ const mediaType = mimeTypeToMedia(mimeType);
6538
+ let image = void 0;
6539
+ let animation_url = null;
6540
+ if (isImage(mimeType)) {
6541
+ image = contentUrl;
6542
+ } else {
6543
+ image = thumbnailUrl;
6544
+ animation_url = mediaUrl;
6545
+ }
6546
+ if (!image)
6547
+ image = `ipfs://${DEFAULT_THUMBNAIL_CID_HASHES[mediaType] || DEFAULT_THUMBNAIL_CID_HASHES.default}`;
6548
+ const content = contentUrl ? {
6549
+ mime: mimeType || "application/octet-stream",
6550
+ uri: contentUrl
6551
+ } : null;
6482
6552
  return {
6483
- getPremint: (p) => premintGetterToUse.get({
6484
- collectionAddress: p.address,
6485
- uid: p.uid
6486
- }),
6487
- getCollectDataFromPremintReceipt: (p) => getDataFromPremintReceipt(p, params.chainId),
6488
- getToken: (p) => mintClient.get(p),
6489
- getTokensOfContract: (p) => mintClient.getOfContract(p),
6490
- mint: (p) => mintClient.mint(p),
6491
- getMintCosts: (p) => mintClient.getMintCosts(p)
6553
+ name,
6554
+ description,
6555
+ image,
6556
+ animation_url,
6557
+ content,
6558
+ attributes
6492
6559
  };
6493
- }
6560
+ };
6494
6561
 
6495
6562
  // src/ipfs/text-metadata.ts
6496
6563
  var CHAR_LIMIT = 1111;