@zoralabs/protocol-sdk 0.7.0 → 0.7.2-ALLOWLIST.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/allow-list/allow-list-client.d.ts +25 -0
  3. package/dist/allow-list/allow-list-client.d.ts.map +1 -0
  4. package/dist/allow-list/types.d.ts +14 -0
  5. package/dist/allow-list/types.d.ts.map +1 -0
  6. package/dist/apis/generated/allow-list-api-types.d.ts +288 -0
  7. package/dist/apis/generated/allow-list-api-types.d.ts.map +1 -0
  8. package/dist/apis/http-api-base.d.ts.map +1 -1
  9. package/dist/create/1155-create-helper.d.ts +1 -0
  10. package/dist/create/1155-create-helper.d.ts.map +1 -1
  11. package/dist/create/token-setup.d.ts +3 -4
  12. package/dist/create/token-setup.d.ts.map +1 -1
  13. package/dist/create/types.d.ts +24 -4
  14. package/dist/create/types.d.ts.map +1 -1
  15. package/dist/index.cjs +1388 -54
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1382 -51
  20. package/dist/index.js.map +1 -1
  21. package/dist/ipfs/arweave.d.ts +3 -0
  22. package/dist/ipfs/arweave.d.ts.map +1 -0
  23. package/dist/ipfs/gateway.d.ts +4 -0
  24. package/dist/ipfs/gateway.d.ts.map +1 -0
  25. package/dist/ipfs/index.d.ts +4 -0
  26. package/dist/ipfs/index.d.ts.map +1 -0
  27. package/dist/ipfs/ipfs.d.ts +5 -0
  28. package/dist/ipfs/ipfs.d.ts.map +1 -0
  29. package/dist/ipfs/mimeTypes.d.ts +25 -0
  30. package/dist/ipfs/mimeTypes.d.ts.map +1 -0
  31. package/dist/ipfs/text-metadata.d.ts +5 -0
  32. package/dist/ipfs/text-metadata.d.ts.map +1 -0
  33. package/dist/ipfs/token-metadata.d.ts +14 -0
  34. package/dist/ipfs/token-metadata.d.ts.map +1 -0
  35. package/dist/ipfs/types.d.ts +49 -0
  36. package/dist/ipfs/types.d.ts.map +1 -0
  37. package/dist/mint/mint-queries.d.ts +3 -1
  38. package/dist/mint/mint-queries.d.ts.map +1 -1
  39. package/dist/mint/mint-transactions.d.ts +5 -3
  40. package/dist/mint/mint-transactions.d.ts.map +1 -1
  41. package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
  42. package/dist/mint/subgraph-queries.d.ts +27 -13
  43. package/dist/mint/subgraph-queries.d.ts.map +1 -1
  44. package/dist/mint/types.d.ts +22 -11
  45. package/dist/mint/types.d.ts.map +1 -1
  46. package/dist/premint/premint-client.d.ts +2 -1
  47. package/dist/premint/premint-client.d.ts.map +1 -1
  48. package/package.json +3 -1
  49. package/src/allow-list/allow-list-client.ts +102 -0
  50. package/src/allow-list/types.ts +15 -0
  51. package/src/apis/generated/allow-list-api-types.ts +288 -0
  52. package/src/apis/http-api-base.ts +12 -0
  53. package/src/create/1155-create-helper.ts +17 -0
  54. package/src/create/token-setup.ts +116 -19
  55. package/src/create/types.ts +32 -4
  56. package/src/index.ts +6 -0
  57. package/src/ipfs/arweave.ts +5 -0
  58. package/src/ipfs/gateway.ts +48 -0
  59. package/src/ipfs/index.ts +7 -0
  60. package/src/ipfs/ipfs.ts +82 -0
  61. package/src/ipfs/mimeTypes.ts +141 -0
  62. package/src/ipfs/text-metadata.ts +128 -0
  63. package/src/ipfs/token-metadata.ts +99 -0
  64. package/src/ipfs/types.ts +54 -0
  65. package/src/mint/mint-queries.ts +6 -0
  66. package/src/mint/mint-transactions.ts +72 -6
  67. package/src/mint/subgraph-mint-getter.ts +12 -3
  68. package/src/mint/subgraph-queries.ts +39 -17
  69. package/src/mint/types.ts +38 -12
  70. package/src/premint/premint-client.ts +9 -1
  71. package/yarn-error.log +8602 -0
  72. package/.turbo/turbo-build.log +0 -15
  73. package/src/create/1155-create-helper.test.ts +0 -325
  74. package/src/mint/mint-client.test.ts +0 -263
  75. package/src/mints/mints-contracts.test.ts +0 -529
  76. package/src/mints/mints-eth-unwrapper-and-caller.test.ts +0 -467
  77. package/src/mints/mints-queries.test.ts +0 -105
  78. package/src/premint/premint-client.test.ts +0 -290
  79. package/src/premint/preminter.test.ts +0 -866
  80. package/test-integration/setup-test-contracts.ts +0 -96
  81. package/tsconfig.build.json +0 -10
  82. package/tsup.config.ts +0 -12
package/dist/index.cjs CHANGED
@@ -9,11 +9,11 @@ var __export = (target, all) => {
9
9
  for (var name in all)
10
10
  __defProp(target, name, { get: all[name], enumerable: true });
11
11
  };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
12
+ var __copyProps = (to, from2, except, desc) => {
13
+ if (from2 && typeof from2 === "object" || typeof from2 === "function") {
14
+ for (let key of __getOwnPropNames(from2))
15
15
  if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ __defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
17
17
  }
18
18
  return to;
19
19
  };
@@ -48,6 +48,7 @@ __export(src_exports, {
48
48
  convertGetPremintApiResponse: () => convertGetPremintApiResponse,
49
49
  convertGetPremintOfCollectionApiResponse: () => convertGetPremintOfCollectionApiResponse,
50
50
  convertPremintFromApi: () => convertPremintFromApi,
51
+ createAllowList: () => createAllowList,
51
52
  createCollectorClient: () => createCollectorClient,
52
53
  createCreatorClient: () => createCreatorClient,
53
54
  decodeCallFailedError: () => decodeCallFailedError,
@@ -58,7 +59,9 @@ __export(src_exports, {
58
59
  encodeCollectOnManager: () => encodeCollectOnManager,
59
60
  encodePostSignatureInput: () => encodePostSignatureInput,
60
61
  encodePremintForAPI: () => encodePremintForAPI,
62
+ generateTextNftMetadataFiles: () => generateTextNftMetadataFiles,
61
63
  getApiNetworkConfigForChain: () => getApiNetworkConfigForChain,
64
+ getContractAddressFromCreateReceipt: () => getContractAddressFromCreateReceipt,
62
65
  getDataFromPremintReceipt: () => getDataFromPremintReceipt,
63
66
  getDefaultFixedPriceMinterAddress: () => getDefaultFixedPriceMinterAddress,
64
67
  getMintsAccountBalanceWithPriceQuery: () => getMintsAccountBalanceWithPriceQuery,
@@ -77,11 +80,13 @@ __export(src_exports, {
77
80
  isPremintConfigV2: () => isPremintConfigV2,
78
81
  isValidSignature: () => isValidSignature,
79
82
  makeCallWithEthSafeTransferData: () => makeCallWithEthSafeTransferData,
83
+ makeMediaTokenMetadata: () => makeMediaTokenMetadata,
80
84
  makeMintRewardsRecipient: () => makeMintRewardsRecipient,
81
85
  makeNewPremint: () => makeNewPremint,
82
86
  makePermitToCollectPremintOrNonPremint: () => makePermitToCollectPremintOrNonPremint,
83
87
  makePermitTransferBatchAndTypeData: () => makePermitTransferBatchAndTypeData,
84
88
  makePermitTransferTypeData: () => makePermitTransferTypeData,
89
+ makeTextTokenMetadata: () => makeTextTokenMetadata,
85
90
  makeUrls: () => makeUrls,
86
91
  migratePremintConfigToV2: () => migratePremintConfigToV2,
87
92
  mintWithEthParams: () => mintWithEthParams,
@@ -115,8 +120,8 @@ var import_viem = require("viem");
115
120
  var ZORA_API_BASE = "https://api.zora.co/";
116
121
  var OPEN_EDITION_MINT_SIZE = BigInt("18446744073709551615");
117
122
  var SUBGRAPH_CONFIG_BASE = "https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs";
118
- function getSubgraph(name, version) {
119
- return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;
123
+ function getSubgraph(name, version2) {
124
+ return `${SUBGRAPH_CONFIG_BASE}/${name}/${version2}/gn`;
120
125
  }
121
126
  var zora721Abi = (0, import_viem.parseAbi)([
122
127
  "function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable",
@@ -417,7 +422,7 @@ function migratePremintConfigToV2({
417
422
  };
418
423
  }
419
424
  var recoverCreatorFromCreatorAttribution = async ({
420
- creatorAttribution: { version, domainName, structHash, signature },
425
+ creatorAttribution: { version: version2, domainName, structHash, signature },
421
426
  chainId,
422
427
  tokenContract
423
428
  }) => {
@@ -426,7 +431,7 @@ var recoverCreatorFromCreatorAttribution = async ({
426
431
  chainId,
427
432
  name: domainName,
428
433
  verifyingContract: tokenContract,
429
- version
434
+ version: version2
430
435
  },
431
436
  types: {
432
437
  EIP712Domain: [
@@ -462,11 +467,11 @@ var supportedPremintVersions = async ({
462
467
  });
463
468
  };
464
469
  var supportsPremintVersion = async ({
465
- version,
470
+ version: version2,
466
471
  tokenContract,
467
472
  publicClient
468
473
  }) => {
469
- return (await supportedPremintVersions({ tokenContract, publicClient })).includes(version);
474
+ return (await supportedPremintVersions({ tokenContract, publicClient })).includes(version2);
470
475
  };
471
476
  async function getPremintCollectionAddress({
472
477
  publicClient,
@@ -490,7 +495,7 @@ async function getPremintCollectionAddress({
490
495
  }
491
496
  function applyUpdateToPremint({
492
497
  uid,
493
- version,
498
+ version: version2,
494
499
  tokenConfig,
495
500
  tokenConfigUpdates
496
501
  }) {
@@ -501,7 +506,7 @@ function applyUpdateToPremint({
501
506
  const result = {
502
507
  deleted: false,
503
508
  uid,
504
- version: version + 1,
509
+ version: version2 + 1,
505
510
  tokenConfig: updatedTokenConfig
506
511
  };
507
512
  return result;
@@ -648,14 +653,20 @@ var get = async (url) => {
648
653
  return await response.json();
649
654
  };
650
655
  var post = async (url, data) => {
656
+ const controller = new AbortController();
657
+ const { signal } = controller;
658
+ const timeout = 30 * 60 * 1e3;
659
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
651
660
  const response = await fetch(url, {
652
661
  method: "POST",
653
662
  headers: {
654
663
  "content-type": "application/json",
655
664
  accept: "application/json"
656
665
  },
657
- body: JSON.stringify(data)
666
+ body: JSON.stringify(data),
667
+ signal
658
668
  });
669
+ clearTimeout(timeoutId);
659
670
  if (response.status !== 200) {
660
671
  let json;
661
672
  try {
@@ -741,6 +752,12 @@ fragment SaleStrategy on SalesStrategyConfig {
741
752
  saleStart
742
753
  maxTokensPerAddress
743
754
  }
755
+ presale {
756
+ address
757
+ presaleStart
758
+ presaleEnd
759
+ merkleRoot
760
+ }
744
761
  }`;
745
762
  var TOKEN_FRAGMENT = `
746
763
  fragment Token on ZoraCreateToken {
@@ -750,7 +767,7 @@ fragment Token on ZoraCreateToken {
750
767
  totalMinted
751
768
  maxSupply
752
769
  tokenStandard
753
- salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER"]}) {
770
+ salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER", "PRESALE"]}) {
754
771
  ...SaleStrategy
755
772
  }
756
773
  contract {
@@ -759,7 +776,7 @@ fragment Token on ZoraCreateToken {
759
776
  contractVersion
760
777
  contractURI
761
778
  name
762
- salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER"]}) {
779
+ salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER", "PRESALE"]}) {
763
780
  ...SaleStrategy
764
781
  }
765
782
  }
@@ -856,12 +873,23 @@ function parseSalesConfig(targetStrategy) {
856
873
  pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken)
857
874
  };
858
875
  }
876
+ if (targetStrategy.type === "PRESALE") {
877
+ return {
878
+ saleType: "allowlist",
879
+ address: targetStrategy.presale.address,
880
+ merkleRoot: targetStrategy.presale.merkleRoot,
881
+ saleStart: targetStrategy.presale.presaleStart,
882
+ saleEnd: targetStrategy.presale.presaleEnd
883
+ };
884
+ }
859
885
  throw new Error("Unknown saleType");
860
886
  }
861
887
  function getSaleEnd(a) {
862
- return BigInt(
863
- a.type === "ERC_20_MINTER" ? a.erc20Minter.saleEnd : a.fixedPrice.saleEnd
864
- );
888
+ if (a.type === "FIXED_PRICE")
889
+ return BigInt(a.fixedPrice.saleEnd);
890
+ if (a.type === "ERC_20_MINTER")
891
+ return BigInt(a.erc20Minter.saleEnd);
892
+ return BigInt(a.presale.presaleEnd);
865
893
  }
866
894
  function getTargetStrategy({
867
895
  tokenId,
@@ -1287,13 +1315,19 @@ function makePremintReturn({
1287
1315
  premintConfigVersion
1288
1316
  });
1289
1317
  };
1318
+ const urls = makeUrls({
1319
+ chainId,
1320
+ address: collectionAddress,
1321
+ uid: premintConfig.uid
1322
+ });
1290
1323
  return {
1291
1324
  premintConfig,
1292
1325
  premintConfigVersion,
1293
1326
  typedDataDefinition,
1294
1327
  collectionAddress,
1295
1328
  signAndSubmit,
1296
- submit
1329
+ submit,
1330
+ urls
1297
1331
  };
1298
1332
  }
1299
1333
  async function signPremint({
@@ -1685,12 +1719,13 @@ function makePrepareMint1155TokenParams({
1685
1719
  mintComment,
1686
1720
  mintReferral,
1687
1721
  mintRecipient,
1688
- quantityToMint
1722
+ quantityToMint,
1723
+ allowListEntry
1689
1724
  }) {
1690
1725
  const mintQuantity = BigInt(quantityToMint || 1);
1691
1726
  const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });
1692
1727
  const saleType = salesConfigAndTokenInfo.salesConfig.saleType;
1693
- if (saleType === "fixedPrice") {
1728
+ if (saleType === "fixedPrice" || saleType === "allowlist") {
1694
1729
  return makeEthMintCall({
1695
1730
  mintComment,
1696
1731
  minterAccount,
@@ -1699,7 +1734,8 @@ function makePrepareMint1155TokenParams({
1699
1734
  mintTo,
1700
1735
  salesConfigAndTokenInfo,
1701
1736
  tokenContract,
1702
- tokenId
1737
+ tokenId,
1738
+ allowListEntry
1703
1739
  });
1704
1740
  }
1705
1741
  if (saleType === "erc20") {
@@ -1736,7 +1772,8 @@ function makePrepareMint721TokenParams({
1736
1772
  const mintValue = parseMintCosts({
1737
1773
  mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,
1738
1774
  salesConfig: salesConfigAndTokenInfo.salesConfig,
1739
- quantityToMint: actualQuantityToMint
1775
+ quantityToMint: actualQuantityToMint,
1776
+ allowListEntry: void 0
1740
1777
  }).totalCostEth;
1741
1778
  return makeContractParameters({
1742
1779
  abi: zora721Abi,
@@ -1752,6 +1789,29 @@ function makePrepareMint721TokenParams({
1752
1789
  ]
1753
1790
  });
1754
1791
  }
1792
+ function makeFixedPriceMinterArguments({
1793
+ mintTo,
1794
+ mintComment
1795
+ }) {
1796
+ return (0, import_viem5.encodeAbiParameters)((0, import_viem5.parseAbiParameters)("address, string"), [
1797
+ mintTo,
1798
+ mintComment || ""
1799
+ ]);
1800
+ }
1801
+ function makeAllowListMinterArguments({
1802
+ mintTo,
1803
+ allowListEntry
1804
+ }) {
1805
+ return (0, import_viem5.encodeAbiParameters)(
1806
+ (0, import_viem5.parseAbiParameters)("address, uint256, uint256, bytes32[]"),
1807
+ [
1808
+ mintTo,
1809
+ BigInt(allowListEntry.maxCanMint),
1810
+ allowListEntry.price,
1811
+ allowListEntry.proof
1812
+ ]
1813
+ );
1814
+ }
1755
1815
  function makeEthMintCall({
1756
1816
  tokenContract,
1757
1817
  tokenId,
@@ -1760,17 +1820,26 @@ function makeEthMintCall({
1760
1820
  mintComment,
1761
1821
  mintReferral,
1762
1822
  mintQuantity,
1763
- mintTo
1823
+ mintTo,
1824
+ allowListEntry
1764
1825
  }) {
1765
1826
  const mintValue = parseMintCosts({
1766
1827
  mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,
1767
1828
  salesConfig: salesConfigAndTokenInfo.salesConfig,
1768
- quantityToMint: mintQuantity
1829
+ quantityToMint: mintQuantity,
1830
+ allowListEntry
1769
1831
  }).totalCostEth;
1770
- const minterArguments = (0, import_viem5.encodeAbiParameters)(
1771
- (0, import_viem5.parseAbiParameters)("address, string"),
1772
- [mintTo, mintComment || ""]
1773
- );
1832
+ const saleType = salesConfigAndTokenInfo.salesConfig.saleType;
1833
+ let minterArguments;
1834
+ if (saleType === "fixedPrice") {
1835
+ minterArguments = makeFixedPriceMinterArguments({ mintTo, mintComment });
1836
+ } else if (saleType === "allowlist") {
1837
+ if (!allowListEntry)
1838
+ throw new Error("Missing allowListEntry");
1839
+ minterArguments = makeAllowListMinterArguments({ mintTo, allowListEntry });
1840
+ } else {
1841
+ throw new Error("Unsupported sale type");
1842
+ }
1774
1843
  if (contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)) {
1775
1844
  return makeContractParameters({
1776
1845
  abi: import_protocol_deployments6.zoraCreator1155ImplABI,
@@ -1803,13 +1872,22 @@ function makeEthMintCall({
1803
1872
  ]
1804
1873
  });
1805
1874
  }
1875
+ function paidMintCost(salesConfig, allowListEntry) {
1876
+ if (salesConfig.saleType === "erc20" || salesConfig.saleType === "fixedPrice") {
1877
+ return salesConfig.pricePerToken;
1878
+ }
1879
+ if (allowListEntry)
1880
+ return allowListEntry.price;
1881
+ return 0n;
1882
+ }
1806
1883
  function parseMintCosts({
1807
1884
  salesConfig,
1808
1885
  mintFeePerQuantity,
1809
- quantityToMint
1886
+ quantityToMint,
1887
+ allowListEntry
1810
1888
  }) {
1811
1889
  const mintFeeForTokens = mintFeePerQuantity * quantityToMint;
1812
- const tokenPurchaseCost = BigInt(salesConfig.pricePerToken) * quantityToMint;
1890
+ const tokenPurchaseCost = paidMintCost(salesConfig, allowListEntry) * quantityToMint;
1813
1891
  const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig) ? salesConfig.currency : void 0;
1814
1892
  const totalPurchaseCostEth = totalPurchaseCostCurrency ? 0n : tokenPurchaseCost;
1815
1893
  return {
@@ -1895,6 +1973,7 @@ async function getMintsOfContract({
1895
1973
  }
1896
1974
  async function getMintCosts({
1897
1975
  params,
1976
+ allowListEntry,
1898
1977
  mintGetter,
1899
1978
  premintGetter,
1900
1979
  publicClient
@@ -1909,7 +1988,8 @@ async function getMintCosts({
1909
1988
  return parseMintCosts({
1910
1989
  mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,
1911
1990
  salesConfig: salesConfigAndTokenInfo.salesConfig,
1912
- quantityToMint: BigInt(quantityToMint)
1991
+ quantityToMint: BigInt(quantityToMint),
1992
+ allowListEntry
1913
1993
  });
1914
1994
  }
1915
1995
  return getPremintMintCostsWithUnknownTokenPrice({
@@ -1991,7 +2071,8 @@ var makeOnchainPrepareMint = (result) => (params) => ({
1991
2071
  costs: parseMintCosts({
1992
2072
  salesConfig: result.salesConfig,
1993
2073
  quantityToMint: BigInt(params.quantityToMint),
1994
- mintFeePerQuantity: result.mintFeePerQuantity
2074
+ mintFeePerQuantity: result.mintFeePerQuantity,
2075
+ allowListEntry: params.allowListEntry
1995
2076
  })
1996
2077
  });
1997
2078
  function toMintableReturn(result) {
@@ -2006,7 +2087,8 @@ var makePremintPrepareMint = (mintable, mintFee, premint) => (params) => ({
2006
2087
  costs: parseMintCosts({
2007
2088
  mintFeePerQuantity: mintFee,
2008
2089
  quantityToMint: BigInt(params.quantityToMint),
2009
- salesConfig: mintable.salesConfig
2090
+ salesConfig: mintable.salesConfig,
2091
+ allowListEntry: params.allowListEntry
2010
2092
  })
2011
2093
  });
2012
2094
  function toPremintMintReturn({
@@ -2208,8 +2290,8 @@ var semver2 = __toESM(require("semver"), 1);
2208
2290
  var PERMISSION_BITS = {
2209
2291
  MINTER: 2n ** 2n
2210
2292
  };
2293
+ var SALE_END_FOREVER = 18446744073709551615n;
2211
2294
  var saleSettingsOrDefault = (saleSettings) => {
2212
- const SALE_END_FOREVER = 18446744073709551615n;
2213
2295
  const DEFAULT_SALE_SETTINGS = {
2214
2296
  currency: import_viem7.zeroAddress,
2215
2297
  // Free Mint
@@ -2226,6 +2308,31 @@ var saleSettingsOrDefault = (saleSettings) => {
2226
2308
  ...saleSettings
2227
2309
  };
2228
2310
  };
2311
+ var allowListWithDefaults = (allowlist) => {
2312
+ const defaultAllowListSettings = {
2313
+ // Sale start time – defaults to beginning of unix time
2314
+ saleStart: 0n,
2315
+ // This is the end of uint64, plenty of time
2316
+ saleEnd: SALE_END_FOREVER
2317
+ };
2318
+ return {
2319
+ ...defaultAllowListSettings,
2320
+ ...allowlist
2321
+ };
2322
+ };
2323
+ var getSalesConfigOrAllowListWithDefaults = ({
2324
+ salesConfig,
2325
+ allowlist
2326
+ }) => {
2327
+ if (!allowlist) {
2328
+ return {
2329
+ salesConfig: saleSettingsOrDefault(salesConfig)
2330
+ };
2331
+ }
2332
+ return {
2333
+ allowlist: allowListWithDefaults(allowlist)
2334
+ };
2335
+ };
2229
2336
  function applyNew1155Defaults(props, ownerAddress) {
2230
2337
  const { payoutRecipient: fundsRecipient } = props;
2231
2338
  const fundsRecipientOrOwner = fundsRecipient && fundsRecipient !== import_viem7.zeroAddress ? fundsRecipient : ownerAddress;
@@ -2234,8 +2341,11 @@ function applyNew1155Defaults(props, ownerAddress) {
2234
2341
  createReferral: props.createReferral || import_viem7.zeroAddress,
2235
2342
  maxSupply: typeof props.maxSupply === "undefined" ? OPEN_EDITION_MINT_SIZE : BigInt(props.maxSupply),
2236
2343
  royaltyBPS: props.royaltyBPS || 1e3,
2237
- salesConfig: saleSettingsOrDefault(props.salesConfig),
2238
- tokenMetadataURI: props.tokenMetadataURI
2344
+ tokenMetadataURI: props.tokenMetadataURI,
2345
+ salesConfigOrAllowList: getSalesConfigOrAllowListWithDefaults({
2346
+ salesConfig: props.salesConfig,
2347
+ allowlist: props.allowlist
2348
+ })
2239
2349
  };
2240
2350
  }
2241
2351
  function setupErc20Minter({
@@ -2324,21 +2434,64 @@ function setupFixedPriceMinter({
2324
2434
  setupActions: [fixedPriceApproval, callSale]
2325
2435
  };
2326
2436
  }
2327
- function setupMinters({ salesConfig, ...rest }) {
2328
- if (!salesConfig)
2329
- throw new Error("No sales config for token");
2330
- const { currency: currencyAddress } = salesConfig;
2331
- if (currencyAddress === import_viem7.zeroAddress) {
2332
- return setupFixedPriceMinter({
2333
- ...salesConfig,
2334
- ...rest
2335
- });
2336
- } else {
2337
- return setupErc20Minter({
2338
- ...salesConfig,
2339
- ...rest
2340
- });
2437
+ function setupAllowListMinter({
2438
+ chainId,
2439
+ tokenId: nextTokenId,
2440
+ allowlist,
2441
+ fundsRecipient
2442
+ }) {
2443
+ const merkleSaleStrategyAddress = import_protocol_deployments8.zoraCreatorMerkleMinterStrategyAddress[chainId];
2444
+ const merkleApproval = (0, import_viem7.encodeFunctionData)({
2445
+ abi: import_protocol_deployments8.zoraCreator1155ImplABI,
2446
+ functionName: "addPermission",
2447
+ args: [nextTokenId, merkleSaleStrategyAddress, PERMISSION_BITS.MINTER]
2448
+ });
2449
+ const merkleRoot = allowlist.presaleMerkleRoot.startsWith("0x") ? allowlist.presaleMerkleRoot : `0x${allowlist.presaleMerkleRoot}`;
2450
+ const saleData = (0, import_viem7.encodeFunctionData)({
2451
+ abi: import_protocol_deployments8.zoraCreatorMerkleMinterStrategyABI,
2452
+ functionName: "setSale",
2453
+ args: [
2454
+ BigInt(nextTokenId),
2455
+ {
2456
+ presaleStart: allowlist.saleStart,
2457
+ presaleEnd: allowlist.saleEnd,
2458
+ merkleRoot,
2459
+ fundsRecipient
2460
+ }
2461
+ ]
2462
+ });
2463
+ const callSaleMerkle = (0, import_viem7.encodeFunctionData)({
2464
+ abi: import_protocol_deployments8.zoraCreator1155ImplABI,
2465
+ functionName: "callSale",
2466
+ args: [BigInt(nextTokenId), merkleSaleStrategyAddress, saleData]
2467
+ });
2468
+ return {
2469
+ minter: merkleSaleStrategyAddress,
2470
+ setupActions: [merkleApproval, callSaleMerkle]
2471
+ };
2472
+ }
2473
+ function setupMinters({
2474
+ salesConfigOrAllowList: { salesConfig, allowlist },
2475
+ ...rest
2476
+ }) {
2477
+ if (salesConfig) {
2478
+ const { currency: currencyAddress } = salesConfig;
2479
+ if (currencyAddress === import_viem7.zeroAddress) {
2480
+ return setupFixedPriceMinter({
2481
+ ...salesConfig,
2482
+ ...rest
2483
+ });
2484
+ } else {
2485
+ return setupErc20Minter({
2486
+ ...salesConfig,
2487
+ ...rest
2488
+ });
2489
+ }
2341
2490
  }
2491
+ return setupAllowListMinter({
2492
+ allowlist,
2493
+ ...rest
2494
+ });
2342
2495
  }
2343
2496
  function buildSetupNewToken({
2344
2497
  tokenURI,
@@ -2431,7 +2584,7 @@ function constructCreate1155TokenCalls(props) {
2431
2584
  tokenId: nextTokenId,
2432
2585
  chainId,
2433
2586
  fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,
2434
- salesConfig: new1155TokenPropsWithDefaults.salesConfig
2587
+ salesConfigOrAllowList: new1155TokenPropsWithDefaults.salesConfigOrAllowList
2435
2588
  });
2436
2589
  const adminMintCall = makeAdminMintCall({
2437
2590
  ownerAddress,
@@ -2482,6 +2635,21 @@ var getTokenIdFromCreateReceipt = (receipt) => {
2482
2635
  }
2483
2636
  }
2484
2637
  };
2638
+ var getContractAddressFromCreateReceipt = (receipt) => {
2639
+ for (const data of receipt.logs) {
2640
+ try {
2641
+ const decodedLog = (0, import_viem8.decodeEventLog)({
2642
+ abi: import_protocol_deployments9.zoraCreator1155FactoryImplABI,
2643
+ eventName: "SetupNewContract",
2644
+ ...data
2645
+ });
2646
+ if (decodedLog && decodedLog.eventName === "SetupNewContract") {
2647
+ return decodedLog.args.newContract;
2648
+ }
2649
+ } catch (err) {
2650
+ }
2651
+ }
2652
+ };
2485
2653
  function makeCreateContractAndTokenCall({
2486
2654
  contractExists,
2487
2655
  contractAddress,
@@ -2897,13 +3065,13 @@ var unwrapAndForwardEthPermitAndTypedDataDefinition = ({
2897
3065
  chainId,
2898
3066
  tokenIds,
2899
3067
  quantities,
2900
- from,
3068
+ from: from2,
2901
3069
  callWithEth,
2902
3070
  safeTransferData,
2903
3071
  deadline,
2904
3072
  nonce
2905
3073
  }) => makePermitTransferBatchAndTypeData({
2906
- mintsOwner: from,
3074
+ mintsOwner: from2,
2907
3075
  chainId,
2908
3076
  deadline,
2909
3077
  tokenIds,
@@ -2951,6 +3119,1167 @@ function createCollectorClient(params) {
2951
3119
  getMintCosts: (p) => mintClient.getMintCosts(p)
2952
3120
  };
2953
3121
  }
3122
+
3123
+ // src/ipfs/arweave.ts
3124
+ function isArweaveURL(url) {
3125
+ return url && typeof url === "string" ? url.startsWith("ar://") : false;
3126
+ }
3127
+
3128
+ // ../../node_modules/multiformats/esm/vendor/varint.js
3129
+ var encode_1 = encode;
3130
+ var MSB = 128;
3131
+ var REST = 127;
3132
+ var MSBALL = ~REST;
3133
+ var INT = Math.pow(2, 31);
3134
+ function encode(num, out, offset) {
3135
+ out = out || [];
3136
+ offset = offset || 0;
3137
+ var oldOffset = offset;
3138
+ while (num >= INT) {
3139
+ out[offset++] = num & 255 | MSB;
3140
+ num /= 128;
3141
+ }
3142
+ while (num & MSBALL) {
3143
+ out[offset++] = num & 255 | MSB;
3144
+ num >>>= 7;
3145
+ }
3146
+ out[offset] = num | 0;
3147
+ encode.bytes = offset - oldOffset + 1;
3148
+ return out;
3149
+ }
3150
+ var decode = read;
3151
+ var MSB$1 = 128;
3152
+ var REST$1 = 127;
3153
+ function read(buf, offset) {
3154
+ var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;
3155
+ do {
3156
+ if (counter >= l) {
3157
+ read.bytes = 0;
3158
+ throw new RangeError("Could not decode varint");
3159
+ }
3160
+ b = buf[counter++];
3161
+ res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);
3162
+ shift += 7;
3163
+ } while (b >= MSB$1);
3164
+ read.bytes = counter - offset;
3165
+ return res;
3166
+ }
3167
+ var N1 = Math.pow(2, 7);
3168
+ var N2 = Math.pow(2, 14);
3169
+ var N3 = Math.pow(2, 21);
3170
+ var N4 = Math.pow(2, 28);
3171
+ var N5 = Math.pow(2, 35);
3172
+ var N6 = Math.pow(2, 42);
3173
+ var N7 = Math.pow(2, 49);
3174
+ var N8 = Math.pow(2, 56);
3175
+ var N9 = Math.pow(2, 63);
3176
+ var length = function(value) {
3177
+ 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;
3178
+ };
3179
+ var varint = {
3180
+ encode: encode_1,
3181
+ decode,
3182
+ encodingLength: length
3183
+ };
3184
+ var _brrp_varint = varint;
3185
+ var varint_default = _brrp_varint;
3186
+
3187
+ // ../../node_modules/multiformats/esm/src/varint.js
3188
+ var decode2 = (data, offset = 0) => {
3189
+ const code = varint_default.decode(data, offset);
3190
+ return [
3191
+ code,
3192
+ varint_default.decode.bytes
3193
+ ];
3194
+ };
3195
+ var encodeTo = (int, target, offset = 0) => {
3196
+ varint_default.encode(int, target, offset);
3197
+ return target;
3198
+ };
3199
+ var encodingLength = (int) => {
3200
+ return varint_default.encodingLength(int);
3201
+ };
3202
+
3203
+ // ../../node_modules/multiformats/esm/src/bytes.js
3204
+ var empty = new Uint8Array(0);
3205
+ var equals = (aa, bb) => {
3206
+ if (aa === bb)
3207
+ return true;
3208
+ if (aa.byteLength !== bb.byteLength) {
3209
+ return false;
3210
+ }
3211
+ for (let ii = 0; ii < aa.byteLength; ii++) {
3212
+ if (aa[ii] !== bb[ii]) {
3213
+ return false;
3214
+ }
3215
+ }
3216
+ return true;
3217
+ };
3218
+ var coerce3 = (o) => {
3219
+ if (o instanceof Uint8Array && o.constructor.name === "Uint8Array")
3220
+ return o;
3221
+ if (o instanceof ArrayBuffer)
3222
+ return new Uint8Array(o);
3223
+ if (ArrayBuffer.isView(o)) {
3224
+ return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
3225
+ }
3226
+ throw new Error("Unknown type, must be binary type");
3227
+ };
3228
+
3229
+ // ../../node_modules/multiformats/esm/src/hashes/digest.js
3230
+ var create = (code, digest) => {
3231
+ const size = digest.byteLength;
3232
+ const sizeOffset = encodingLength(code);
3233
+ const digestOffset = sizeOffset + encodingLength(size);
3234
+ const bytes = new Uint8Array(digestOffset + size);
3235
+ encodeTo(code, bytes, 0);
3236
+ encodeTo(size, bytes, sizeOffset);
3237
+ bytes.set(digest, digestOffset);
3238
+ return new Digest(code, size, digest, bytes);
3239
+ };
3240
+ var decode3 = (multihash) => {
3241
+ const bytes = coerce3(multihash);
3242
+ const [code, sizeOffset] = decode2(bytes);
3243
+ const [size, digestOffset] = decode2(bytes.subarray(sizeOffset));
3244
+ const digest = bytes.subarray(sizeOffset + digestOffset);
3245
+ if (digest.byteLength !== size) {
3246
+ throw new Error("Incorrect length");
3247
+ }
3248
+ return new Digest(code, size, digest, bytes);
3249
+ };
3250
+ var equals2 = (a, b) => {
3251
+ if (a === b) {
3252
+ return true;
3253
+ } else {
3254
+ return a.code === b.code && a.size === b.size && equals(a.bytes, b.bytes);
3255
+ }
3256
+ };
3257
+ var Digest = class {
3258
+ constructor(code, size, digest, bytes) {
3259
+ this.code = code;
3260
+ this.size = size;
3261
+ this.digest = digest;
3262
+ this.bytes = bytes;
3263
+ }
3264
+ };
3265
+
3266
+ // ../../node_modules/multiformats/esm/vendor/base-x.js
3267
+ function base2(ALPHABET, name) {
3268
+ if (ALPHABET.length >= 255) {
3269
+ throw new TypeError("Alphabet too long");
3270
+ }
3271
+ var BASE_MAP = new Uint8Array(256);
3272
+ for (var j = 0; j < BASE_MAP.length; j++) {
3273
+ BASE_MAP[j] = 255;
3274
+ }
3275
+ for (var i = 0; i < ALPHABET.length; i++) {
3276
+ var x = ALPHABET.charAt(i);
3277
+ var xc = x.charCodeAt(0);
3278
+ if (BASE_MAP[xc] !== 255) {
3279
+ throw new TypeError(x + " is ambiguous");
3280
+ }
3281
+ BASE_MAP[xc] = i;
3282
+ }
3283
+ var BASE = ALPHABET.length;
3284
+ var LEADER = ALPHABET.charAt(0);
3285
+ var FACTOR = Math.log(BASE) / Math.log(256);
3286
+ var iFACTOR = Math.log(256) / Math.log(BASE);
3287
+ function encode3(source) {
3288
+ if (source instanceof Uint8Array)
3289
+ ;
3290
+ else if (ArrayBuffer.isView(source)) {
3291
+ source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
3292
+ } else if (Array.isArray(source)) {
3293
+ source = Uint8Array.from(source);
3294
+ }
3295
+ if (!(source instanceof Uint8Array)) {
3296
+ throw new TypeError("Expected Uint8Array");
3297
+ }
3298
+ if (source.length === 0) {
3299
+ return "";
3300
+ }
3301
+ var zeroes = 0;
3302
+ var length2 = 0;
3303
+ var pbegin = 0;
3304
+ var pend = source.length;
3305
+ while (pbegin !== pend && source[pbegin] === 0) {
3306
+ pbegin++;
3307
+ zeroes++;
3308
+ }
3309
+ var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
3310
+ var b58 = new Uint8Array(size);
3311
+ while (pbegin !== pend) {
3312
+ var carry = source[pbegin];
3313
+ var i2 = 0;
3314
+ for (var it1 = size - 1; (carry !== 0 || i2 < length2) && it1 !== -1; it1--, i2++) {
3315
+ carry += 256 * b58[it1] >>> 0;
3316
+ b58[it1] = carry % BASE >>> 0;
3317
+ carry = carry / BASE >>> 0;
3318
+ }
3319
+ if (carry !== 0) {
3320
+ throw new Error("Non-zero carry");
3321
+ }
3322
+ length2 = i2;
3323
+ pbegin++;
3324
+ }
3325
+ var it2 = size - length2;
3326
+ while (it2 !== size && b58[it2] === 0) {
3327
+ it2++;
3328
+ }
3329
+ var str = LEADER.repeat(zeroes);
3330
+ for (; it2 < size; ++it2) {
3331
+ str += ALPHABET.charAt(b58[it2]);
3332
+ }
3333
+ return str;
3334
+ }
3335
+ function decodeUnsafe(source) {
3336
+ if (typeof source !== "string") {
3337
+ throw new TypeError("Expected String");
3338
+ }
3339
+ if (source.length === 0) {
3340
+ return new Uint8Array();
3341
+ }
3342
+ var psz = 0;
3343
+ if (source[psz] === " ") {
3344
+ return;
3345
+ }
3346
+ var zeroes = 0;
3347
+ var length2 = 0;
3348
+ while (source[psz] === LEADER) {
3349
+ zeroes++;
3350
+ psz++;
3351
+ }
3352
+ var size = (source.length - psz) * FACTOR + 1 >>> 0;
3353
+ var b256 = new Uint8Array(size);
3354
+ while (source[psz]) {
3355
+ var carry = BASE_MAP[source.charCodeAt(psz)];
3356
+ if (carry === 255) {
3357
+ return;
3358
+ }
3359
+ var i2 = 0;
3360
+ for (var it3 = size - 1; (carry !== 0 || i2 < length2) && it3 !== -1; it3--, i2++) {
3361
+ carry += BASE * b256[it3] >>> 0;
3362
+ b256[it3] = carry % 256 >>> 0;
3363
+ carry = carry / 256 >>> 0;
3364
+ }
3365
+ if (carry !== 0) {
3366
+ throw new Error("Non-zero carry");
3367
+ }
3368
+ length2 = i2;
3369
+ psz++;
3370
+ }
3371
+ if (source[psz] === " ") {
3372
+ return;
3373
+ }
3374
+ var it4 = size - length2;
3375
+ while (it4 !== size && b256[it4] === 0) {
3376
+ it4++;
3377
+ }
3378
+ var vch = new Uint8Array(zeroes + (size - it4));
3379
+ var j2 = zeroes;
3380
+ while (it4 !== size) {
3381
+ vch[j2++] = b256[it4++];
3382
+ }
3383
+ return vch;
3384
+ }
3385
+ function decode5(string) {
3386
+ var buffer = decodeUnsafe(string);
3387
+ if (buffer) {
3388
+ return buffer;
3389
+ }
3390
+ throw new Error(`Non-${name} character`);
3391
+ }
3392
+ return {
3393
+ encode: encode3,
3394
+ decodeUnsafe,
3395
+ decode: decode5
3396
+ };
3397
+ }
3398
+ var src = base2;
3399
+ var _brrp__multiformats_scope_baseX = src;
3400
+ var base_x_default = _brrp__multiformats_scope_baseX;
3401
+
3402
+ // ../../node_modules/multiformats/esm/src/bases/base.js
3403
+ var Encoder = class {
3404
+ constructor(name, prefix, baseEncode) {
3405
+ this.name = name;
3406
+ this.prefix = prefix;
3407
+ this.baseEncode = baseEncode;
3408
+ }
3409
+ encode(bytes) {
3410
+ if (bytes instanceof Uint8Array) {
3411
+ return `${this.prefix}${this.baseEncode(bytes)}`;
3412
+ } else {
3413
+ throw Error("Unknown type, must be binary type");
3414
+ }
3415
+ }
3416
+ };
3417
+ var Decoder = class {
3418
+ constructor(name, prefix, baseDecode) {
3419
+ this.name = name;
3420
+ this.prefix = prefix;
3421
+ if (prefix.codePointAt(0) === void 0) {
3422
+ throw new Error("Invalid prefix character");
3423
+ }
3424
+ this.prefixCodePoint = prefix.codePointAt(0);
3425
+ this.baseDecode = baseDecode;
3426
+ }
3427
+ decode(text) {
3428
+ if (typeof text === "string") {
3429
+ if (text.codePointAt(0) !== this.prefixCodePoint) {
3430
+ throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);
3431
+ }
3432
+ return this.baseDecode(text.slice(this.prefix.length));
3433
+ } else {
3434
+ throw Error("Can only multibase decode strings");
3435
+ }
3436
+ }
3437
+ or(decoder) {
3438
+ return or(this, decoder);
3439
+ }
3440
+ };
3441
+ var ComposedDecoder = class {
3442
+ constructor(decoders) {
3443
+ this.decoders = decoders;
3444
+ }
3445
+ or(decoder) {
3446
+ return or(this, decoder);
3447
+ }
3448
+ decode(input) {
3449
+ const prefix = input[0];
3450
+ const decoder = this.decoders[prefix];
3451
+ if (decoder) {
3452
+ return decoder.decode(input);
3453
+ } else {
3454
+ throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`);
3455
+ }
3456
+ }
3457
+ };
3458
+ var or = (left, right) => new ComposedDecoder({
3459
+ ...left.decoders || { [left.prefix]: left },
3460
+ ...right.decoders || { [right.prefix]: right }
3461
+ });
3462
+ var Codec = class {
3463
+ constructor(name, prefix, baseEncode, baseDecode) {
3464
+ this.name = name;
3465
+ this.prefix = prefix;
3466
+ this.baseEncode = baseEncode;
3467
+ this.baseDecode = baseDecode;
3468
+ this.encoder = new Encoder(name, prefix, baseEncode);
3469
+ this.decoder = new Decoder(name, prefix, baseDecode);
3470
+ }
3471
+ encode(input) {
3472
+ return this.encoder.encode(input);
3473
+ }
3474
+ decode(input) {
3475
+ return this.decoder.decode(input);
3476
+ }
3477
+ };
3478
+ var from = ({ name, prefix, encode: encode3, decode: decode5 }) => new Codec(name, prefix, encode3, decode5);
3479
+ var baseX = ({ prefix, name, alphabet }) => {
3480
+ const { encode: encode3, decode: decode5 } = base_x_default(alphabet, name);
3481
+ return from({
3482
+ prefix,
3483
+ name,
3484
+ encode: encode3,
3485
+ decode: (text) => coerce3(decode5(text))
3486
+ });
3487
+ };
3488
+ var decode4 = (string, alphabet, bitsPerChar, name) => {
3489
+ const codes = {};
3490
+ for (let i = 0; i < alphabet.length; ++i) {
3491
+ codes[alphabet[i]] = i;
3492
+ }
3493
+ let end = string.length;
3494
+ while (string[end - 1] === "=") {
3495
+ --end;
3496
+ }
3497
+ const out = new Uint8Array(end * bitsPerChar / 8 | 0);
3498
+ let bits = 0;
3499
+ let buffer = 0;
3500
+ let written = 0;
3501
+ for (let i = 0; i < end; ++i) {
3502
+ const value = codes[string[i]];
3503
+ if (value === void 0) {
3504
+ throw new SyntaxError(`Non-${name} character`);
3505
+ }
3506
+ buffer = buffer << bitsPerChar | value;
3507
+ bits += bitsPerChar;
3508
+ if (bits >= 8) {
3509
+ bits -= 8;
3510
+ out[written++] = 255 & buffer >> bits;
3511
+ }
3512
+ }
3513
+ if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {
3514
+ throw new SyntaxError("Unexpected end of data");
3515
+ }
3516
+ return out;
3517
+ };
3518
+ var encode2 = (data, alphabet, bitsPerChar) => {
3519
+ const pad = alphabet[alphabet.length - 1] === "=";
3520
+ const mask = (1 << bitsPerChar) - 1;
3521
+ let out = "";
3522
+ let bits = 0;
3523
+ let buffer = 0;
3524
+ for (let i = 0; i < data.length; ++i) {
3525
+ buffer = buffer << 8 | data[i];
3526
+ bits += 8;
3527
+ while (bits > bitsPerChar) {
3528
+ bits -= bitsPerChar;
3529
+ out += alphabet[mask & buffer >> bits];
3530
+ }
3531
+ }
3532
+ if (bits) {
3533
+ out += alphabet[mask & buffer << bitsPerChar - bits];
3534
+ }
3535
+ if (pad) {
3536
+ while (out.length * bitsPerChar & 7) {
3537
+ out += "=";
3538
+ }
3539
+ }
3540
+ return out;
3541
+ };
3542
+ var rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {
3543
+ return from({
3544
+ prefix,
3545
+ name,
3546
+ encode(input) {
3547
+ return encode2(input, alphabet, bitsPerChar);
3548
+ },
3549
+ decode(input) {
3550
+ return decode4(input, alphabet, bitsPerChar, name);
3551
+ }
3552
+ });
3553
+ };
3554
+
3555
+ // ../../node_modules/multiformats/esm/src/bases/base58.js
3556
+ var base58btc = baseX({
3557
+ name: "base58btc",
3558
+ prefix: "z",
3559
+ alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
3560
+ });
3561
+ var base58flickr = baseX({
3562
+ name: "base58flickr",
3563
+ prefix: "Z",
3564
+ alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
3565
+ });
3566
+
3567
+ // ../../node_modules/multiformats/esm/src/bases/base32.js
3568
+ var base32 = rfc4648({
3569
+ prefix: "b",
3570
+ name: "base32",
3571
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567",
3572
+ bitsPerChar: 5
3573
+ });
3574
+ var base32upper = rfc4648({
3575
+ prefix: "B",
3576
+ name: "base32upper",
3577
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
3578
+ bitsPerChar: 5
3579
+ });
3580
+ var base32pad = rfc4648({
3581
+ prefix: "c",
3582
+ name: "base32pad",
3583
+ alphabet: "abcdefghijklmnopqrstuvwxyz234567=",
3584
+ bitsPerChar: 5
3585
+ });
3586
+ var base32padupper = rfc4648({
3587
+ prefix: "C",
3588
+ name: "base32padupper",
3589
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",
3590
+ bitsPerChar: 5
3591
+ });
3592
+ var base32hex = rfc4648({
3593
+ prefix: "v",
3594
+ name: "base32hex",
3595
+ alphabet: "0123456789abcdefghijklmnopqrstuv",
3596
+ bitsPerChar: 5
3597
+ });
3598
+ var base32hexupper = rfc4648({
3599
+ prefix: "V",
3600
+ name: "base32hexupper",
3601
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV",
3602
+ bitsPerChar: 5
3603
+ });
3604
+ var base32hexpad = rfc4648({
3605
+ prefix: "t",
3606
+ name: "base32hexpad",
3607
+ alphabet: "0123456789abcdefghijklmnopqrstuv=",
3608
+ bitsPerChar: 5
3609
+ });
3610
+ var base32hexpadupper = rfc4648({
3611
+ prefix: "T",
3612
+ name: "base32hexpadupper",
3613
+ alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUV=",
3614
+ bitsPerChar: 5
3615
+ });
3616
+ var base32z = rfc4648({
3617
+ prefix: "h",
3618
+ name: "base32z",
3619
+ alphabet: "ybndrfg8ejkmcpqxot1uwisza345h769",
3620
+ bitsPerChar: 5
3621
+ });
3622
+
3623
+ // ../../node_modules/multiformats/esm/src/cid.js
3624
+ var CID = class _CID {
3625
+ constructor(version2, code, multihash, bytes) {
3626
+ this.code = code;
3627
+ this.version = version2;
3628
+ this.multihash = multihash;
3629
+ this.bytes = bytes;
3630
+ this.byteOffset = bytes.byteOffset;
3631
+ this.byteLength = bytes.byteLength;
3632
+ this.asCID = this;
3633
+ this._baseCache = /* @__PURE__ */ new Map();
3634
+ Object.defineProperties(this, {
3635
+ byteOffset: hidden,
3636
+ byteLength: hidden,
3637
+ code: readonly,
3638
+ version: readonly,
3639
+ multihash: readonly,
3640
+ bytes: readonly,
3641
+ _baseCache: hidden,
3642
+ asCID: hidden
3643
+ });
3644
+ }
3645
+ toV0() {
3646
+ switch (this.version) {
3647
+ case 0: {
3648
+ return this;
3649
+ }
3650
+ default: {
3651
+ const { code, multihash } = this;
3652
+ if (code !== DAG_PB_CODE) {
3653
+ throw new Error("Cannot convert a non dag-pb CID to CIDv0");
3654
+ }
3655
+ if (multihash.code !== SHA_256_CODE) {
3656
+ throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");
3657
+ }
3658
+ return _CID.createV0(multihash);
3659
+ }
3660
+ }
3661
+ }
3662
+ toV1() {
3663
+ switch (this.version) {
3664
+ case 0: {
3665
+ const { code, digest } = this.multihash;
3666
+ const multihash = create(code, digest);
3667
+ return _CID.createV1(this.code, multihash);
3668
+ }
3669
+ case 1: {
3670
+ return this;
3671
+ }
3672
+ default: {
3673
+ throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`);
3674
+ }
3675
+ }
3676
+ }
3677
+ equals(other) {
3678
+ return other && this.code === other.code && this.version === other.version && equals2(this.multihash, other.multihash);
3679
+ }
3680
+ toString(base3) {
3681
+ const { bytes, version: version2, _baseCache } = this;
3682
+ switch (version2) {
3683
+ case 0:
3684
+ return toStringV0(bytes, _baseCache, base3 || base58btc.encoder);
3685
+ default:
3686
+ return toStringV1(bytes, _baseCache, base3 || base32.encoder);
3687
+ }
3688
+ }
3689
+ toJSON() {
3690
+ return {
3691
+ code: this.code,
3692
+ version: this.version,
3693
+ hash: this.multihash.bytes
3694
+ };
3695
+ }
3696
+ get [Symbol.toStringTag]() {
3697
+ return "CID";
3698
+ }
3699
+ [Symbol.for("nodejs.util.inspect.custom")]() {
3700
+ return "CID(" + this.toString() + ")";
3701
+ }
3702
+ static isCID(value) {
3703
+ deprecate(/^0\.0/, IS_CID_DEPRECATION);
3704
+ return !!(value && (value[cidSymbol] || value.asCID === value));
3705
+ }
3706
+ get toBaseEncodedString() {
3707
+ throw new Error("Deprecated, use .toString()");
3708
+ }
3709
+ get codec() {
3710
+ throw new Error('"codec" property is deprecated, use integer "code" property instead');
3711
+ }
3712
+ get buffer() {
3713
+ throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead");
3714
+ }
3715
+ get multibaseName() {
3716
+ throw new Error('"multibaseName" property is deprecated');
3717
+ }
3718
+ get prefix() {
3719
+ throw new Error('"prefix" property is deprecated');
3720
+ }
3721
+ static asCID(value) {
3722
+ if (value instanceof _CID) {
3723
+ return value;
3724
+ } else if (value != null && value.asCID === value) {
3725
+ const { version: version2, code, multihash, bytes } = value;
3726
+ return new _CID(version2, code, multihash, bytes || encodeCID(version2, code, multihash.bytes));
3727
+ } else if (value != null && value[cidSymbol] === true) {
3728
+ const { version: version2, multihash, code } = value;
3729
+ const digest = decode3(multihash);
3730
+ return _CID.create(version2, code, digest);
3731
+ } else {
3732
+ return null;
3733
+ }
3734
+ }
3735
+ static create(version2, code, digest) {
3736
+ if (typeof code !== "number") {
3737
+ throw new Error("String codecs are no longer supported");
3738
+ }
3739
+ switch (version2) {
3740
+ case 0: {
3741
+ if (code !== DAG_PB_CODE) {
3742
+ throw new Error(`Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`);
3743
+ } else {
3744
+ return new _CID(version2, code, digest, digest.bytes);
3745
+ }
3746
+ }
3747
+ case 1: {
3748
+ const bytes = encodeCID(version2, code, digest.bytes);
3749
+ return new _CID(version2, code, digest, bytes);
3750
+ }
3751
+ default: {
3752
+ throw new Error("Invalid version");
3753
+ }
3754
+ }
3755
+ }
3756
+ static createV0(digest) {
3757
+ return _CID.create(0, DAG_PB_CODE, digest);
3758
+ }
3759
+ static createV1(code, digest) {
3760
+ return _CID.create(1, code, digest);
3761
+ }
3762
+ static decode(bytes) {
3763
+ const [cid, remainder] = _CID.decodeFirst(bytes);
3764
+ if (remainder.length) {
3765
+ throw new Error("Incorrect length");
3766
+ }
3767
+ return cid;
3768
+ }
3769
+ static decodeFirst(bytes) {
3770
+ const specs = _CID.inspectBytes(bytes);
3771
+ const prefixSize = specs.size - specs.multihashSize;
3772
+ const multihashBytes = coerce3(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));
3773
+ if (multihashBytes.byteLength !== specs.multihashSize) {
3774
+ throw new Error("Incorrect length");
3775
+ }
3776
+ const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);
3777
+ const digest = new Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);
3778
+ const cid = specs.version === 0 ? _CID.createV0(digest) : _CID.createV1(specs.codec, digest);
3779
+ return [
3780
+ cid,
3781
+ bytes.subarray(specs.size)
3782
+ ];
3783
+ }
3784
+ static inspectBytes(initialBytes) {
3785
+ let offset = 0;
3786
+ const next = () => {
3787
+ const [i, length2] = decode2(initialBytes.subarray(offset));
3788
+ offset += length2;
3789
+ return i;
3790
+ };
3791
+ let version2 = next();
3792
+ let codec = DAG_PB_CODE;
3793
+ if (version2 === 18) {
3794
+ version2 = 0;
3795
+ offset = 0;
3796
+ } else if (version2 === 1) {
3797
+ codec = next();
3798
+ }
3799
+ if (version2 !== 0 && version2 !== 1) {
3800
+ throw new RangeError(`Invalid CID version ${version2}`);
3801
+ }
3802
+ const prefixSize = offset;
3803
+ const multihashCode = next();
3804
+ const digestSize = next();
3805
+ const size = offset + digestSize;
3806
+ const multihashSize = size - prefixSize;
3807
+ return {
3808
+ version: version2,
3809
+ codec,
3810
+ multihashCode,
3811
+ digestSize,
3812
+ multihashSize,
3813
+ size
3814
+ };
3815
+ }
3816
+ static parse(source, base3) {
3817
+ const [prefix, bytes] = parseCIDtoBytes(source, base3);
3818
+ const cid = _CID.decode(bytes);
3819
+ cid._baseCache.set(prefix, source);
3820
+ return cid;
3821
+ }
3822
+ };
3823
+ var parseCIDtoBytes = (source, base3) => {
3824
+ switch (source[0]) {
3825
+ case "Q": {
3826
+ const decoder = base3 || base58btc;
3827
+ return [
3828
+ base58btc.prefix,
3829
+ decoder.decode(`${base58btc.prefix}${source}`)
3830
+ ];
3831
+ }
3832
+ case base58btc.prefix: {
3833
+ const decoder = base3 || base58btc;
3834
+ return [
3835
+ base58btc.prefix,
3836
+ decoder.decode(source)
3837
+ ];
3838
+ }
3839
+ case base32.prefix: {
3840
+ const decoder = base3 || base32;
3841
+ return [
3842
+ base32.prefix,
3843
+ decoder.decode(source)
3844
+ ];
3845
+ }
3846
+ default: {
3847
+ if (base3 == null) {
3848
+ throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");
3849
+ }
3850
+ return [
3851
+ source[0],
3852
+ base3.decode(source)
3853
+ ];
3854
+ }
3855
+ }
3856
+ };
3857
+ var toStringV0 = (bytes, cache, base3) => {
3858
+ const { prefix } = base3;
3859
+ if (prefix !== base58btc.prefix) {
3860
+ throw Error(`Cannot string encode V0 in ${base3.name} encoding`);
3861
+ }
3862
+ const cid = cache.get(prefix);
3863
+ if (cid == null) {
3864
+ const cid2 = base3.encode(bytes).slice(1);
3865
+ cache.set(prefix, cid2);
3866
+ return cid2;
3867
+ } else {
3868
+ return cid;
3869
+ }
3870
+ };
3871
+ var toStringV1 = (bytes, cache, base3) => {
3872
+ const { prefix } = base3;
3873
+ const cid = cache.get(prefix);
3874
+ if (cid == null) {
3875
+ const cid2 = base3.encode(bytes);
3876
+ cache.set(prefix, cid2);
3877
+ return cid2;
3878
+ } else {
3879
+ return cid;
3880
+ }
3881
+ };
3882
+ var DAG_PB_CODE = 112;
3883
+ var SHA_256_CODE = 18;
3884
+ var encodeCID = (version2, code, multihash) => {
3885
+ const codeOffset = encodingLength(version2);
3886
+ const hashOffset = codeOffset + encodingLength(code);
3887
+ const bytes = new Uint8Array(hashOffset + multihash.byteLength);
3888
+ encodeTo(version2, bytes, 0);
3889
+ encodeTo(code, bytes, codeOffset);
3890
+ bytes.set(multihash, hashOffset);
3891
+ return bytes;
3892
+ };
3893
+ var cidSymbol = Symbol.for("@ipld/js-cid/CID");
3894
+ var readonly = {
3895
+ writable: false,
3896
+ configurable: false,
3897
+ enumerable: true
3898
+ };
3899
+ var hidden = {
3900
+ writable: false,
3901
+ enumerable: false,
3902
+ configurable: false
3903
+ };
3904
+ var version = "0.0.0-dev";
3905
+ var deprecate = (range, message) => {
3906
+ if (range.test(version)) {
3907
+ console.warn(message);
3908
+ } else {
3909
+ throw new Error(message);
3910
+ }
3911
+ };
3912
+ var IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.
3913
+ Following code pattern:
3914
+
3915
+ if (CID.isCID(value)) {
3916
+ doSomethingWithCID(value)
3917
+ }
3918
+
3919
+ Is replaced with:
3920
+
3921
+ const cid = CID.asCID(value)
3922
+ if (cid) {
3923
+ // Make sure to use cid instead of value
3924
+ doSomethingWithCID(cid)
3925
+ }
3926
+ `;
3927
+
3928
+ // src/ipfs/ipfs.ts
3929
+ function isCID(str) {
3930
+ if (!str)
3931
+ return false;
3932
+ try {
3933
+ CID.parse(str);
3934
+ return true;
3935
+ } catch (e) {
3936
+ if (/^(bafy|Qm)/.test(str))
3937
+ return true;
3938
+ return false;
3939
+ }
3940
+ }
3941
+ function normalizeIPFSUrl(url) {
3942
+ if (!url || typeof url !== "string")
3943
+ return null;
3944
+ url = url.replace(/"/g, "");
3945
+ if (isNormalizedIPFSURL(url))
3946
+ return url;
3947
+ if (isCID(url))
3948
+ return `ipfs://${url}`;
3949
+ if (!isIPFSUrl(url))
3950
+ return null;
3951
+ if (isGatewayIPFSUrl(url)) {
3952
+ const parsed = new URL(url.replace(/^\/\//, "http://"));
3953
+ parsed.pathname = parsed.pathname.replace(/^\/ipfs\//, "");
3954
+ const cid = parsed.toString().replace(`${parsed.protocol}//${parsed.host}/`, "");
3955
+ return `ipfs://${cid}`;
3956
+ }
3957
+ return null;
3958
+ }
3959
+ function isNormalizedIPFSURL(url) {
3960
+ return url && typeof url === "string" ? url.startsWith("ipfs://") : false;
3961
+ }
3962
+ function isGatewayIPFSUrl(url) {
3963
+ if (url && typeof url === "string") {
3964
+ try {
3965
+ const parsed = new URL(url.replace(/^"|'(.*)"|'$/, "$1"));
3966
+ return !isNormalizedIPFSURL(url) && parsed && parsed.pathname.startsWith("/ipfs/");
3967
+ } catch {
3968
+ return false;
3969
+ }
3970
+ }
3971
+ return false;
3972
+ }
3973
+ function isIPFSUrl(url) {
3974
+ return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;
3975
+ }
3976
+ function isNormalizeableIPFSUrl(url) {
3977
+ return url ? isIPFSUrl(url) || isCID(url) : false;
3978
+ }
3979
+
3980
+ // src/ipfs/gateway.ts
3981
+ var IPFS_GATEWAY = "https://magic.decentralized-content.com";
3982
+ var ARWEAVE_GATEWAY = "https://arweave.net";
3983
+ function arweaveGatewayUrl(normalizedArweaveUrl) {
3984
+ if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== "string")
3985
+ return null;
3986
+ return normalizedArweaveUrl.replace("ar://", `${ARWEAVE_GATEWAY}/`);
3987
+ }
3988
+ function ipfsGatewayUrl(url) {
3989
+ if (!url || typeof url !== "string")
3990
+ return null;
3991
+ const normalizedIPFSUrl = normalizeIPFSUrl(url);
3992
+ if (normalizedIPFSUrl) {
3993
+ return normalizedIPFSUrl.replace("ipfs://", `${IPFS_GATEWAY}/ipfs/`);
3994
+ }
3995
+ return null;
3996
+ }
3997
+ function getFetchableUrl(uri) {
3998
+ if (!uri || typeof uri !== "string")
3999
+ return null;
4000
+ if (uri.startsWith("http://"))
4001
+ return null;
4002
+ if (isNormalizeableIPFSUrl(uri)) {
4003
+ return ipfsGatewayUrl(uri);
4004
+ }
4005
+ if (isArweaveURL(uri)) {
4006
+ return arweaveGatewayUrl(uri);
4007
+ }
4008
+ if (/^(https|data|blob):/.test(uri)) {
4009
+ return uri;
4010
+ }
4011
+ return null;
4012
+ }
4013
+
4014
+ // src/ipfs/mimeTypes.ts
4015
+ var HTML = "text/html";
4016
+ var MARKDOWN = "text/markdown";
4017
+ var MARKDOWN_UTF8 = "text/markdown; charset=utf-8";
4018
+ var TEXT_PLAIN_UTF8 = "text/plain; charset=utf-8";
4019
+ var TEXT_PLAIN = "text/plain";
4020
+ var CSV = "text/csv";
4021
+ var NUMBERS = ".numbers";
4022
+ var EXCEL = ".xlsx";
4023
+ var PDF = "application/pdf";
4024
+ var JPG = "image/jpg";
4025
+ var JPEG = "image/jpeg";
4026
+ var PNG = "image/png";
4027
+ var WEBP = "image/webp";
4028
+ var SVG = "image/svg+xml";
4029
+ var TIFF = "image/tiff";
4030
+ var GIF = "image/gif";
4031
+ var isImage = (mimeType) => {
4032
+ if (!mimeType)
4033
+ return false;
4034
+ return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);
4035
+ };
4036
+ var DEFAULT_THUMBNAIL_CID_HASHES = {
4037
+ ["AUDIO" /* AUDIO */]: "bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4",
4038
+ ["VIDEO" /* VIDEO */]: "bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu",
4039
+ ["HTML" /* HTML */]: "bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq",
4040
+ ["ZIP" /* ZIP */]: "bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq",
4041
+ // assuming all zip files are html directories
4042
+ ["TEXT" /* TEXT */]: "bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q",
4043
+ default: "bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4"
4044
+ };
4045
+ var MP4 = "video/mp4";
4046
+ var QUICKTIME = "video/quicktime";
4047
+ var M4V = "video/x-m4v";
4048
+ var WEBM = "video/webm";
4049
+ var M4A = "audio/x-m4a";
4050
+ var MPEG = "audio/mpeg";
4051
+ var MP3 = "audio/mp3";
4052
+ var WAV = "audio/wav";
4053
+ var VND_WAV = "audio/vnd.wav";
4054
+ var VND_WAVE = "audio/vnd.wave";
4055
+ var WAVE = "audio/wave";
4056
+ var X_WAV = "audio/x-wav";
4057
+ var AIFF = "audio/aiff";
4058
+ var GLTF = "model/gltf+json";
4059
+ var GLB = "model/gltf-binary";
4060
+ var GLTF_EXT = ".gltf";
4061
+ var GLB_EXT = ".glb";
4062
+ var JSON_MIME_TYPE = "application/json";
4063
+ var ZIP = "application/zip";
4064
+ var mimeToMediaType = {
4065
+ [HTML]: "HTML" /* HTML */,
4066
+ [JPG]: "IMAGE" /* IMAGE */,
4067
+ [JPEG]: "IMAGE" /* IMAGE */,
4068
+ [PNG]: "IMAGE" /* IMAGE */,
4069
+ [WEBP]: "IMAGE" /* IMAGE */,
4070
+ [SVG]: "IMAGE" /* IMAGE */,
4071
+ [TIFF]: "TIFF" /* TIFF */,
4072
+ [GIF]: "IMAGE" /* IMAGE */,
4073
+ [MP4]: "VIDEO" /* VIDEO */,
4074
+ [WEBM]: "VIDEO" /* VIDEO */,
4075
+ [QUICKTIME]: "VIDEO" /* VIDEO */,
4076
+ [M4V]: "VIDEO" /* VIDEO */,
4077
+ [MPEG]: "AUDIO" /* AUDIO */,
4078
+ [MP3]: "AUDIO" /* AUDIO */,
4079
+ [M4A]: "AUDIO" /* AUDIO */,
4080
+ [VND_WAV]: "AUDIO" /* AUDIO */,
4081
+ [VND_WAVE]: "AUDIO" /* AUDIO */,
4082
+ [WAV]: "AUDIO" /* AUDIO */,
4083
+ [WAVE]: "AUDIO" /* AUDIO */,
4084
+ [X_WAV]: "AUDIO" /* AUDIO */,
4085
+ [AIFF]: "AUDIO" /* AUDIO */,
4086
+ [TEXT_PLAIN]: "TEXT" /* TEXT */,
4087
+ [TEXT_PLAIN_UTF8]: "TEXT" /* TEXT */,
4088
+ [MARKDOWN]: "TEXT" /* TEXT */,
4089
+ [MARKDOWN_UTF8]: "TEXT" /* TEXT */,
4090
+ [CSV]: "CSV" /* CSV */,
4091
+ [NUMBERS]: "NUMBERS" /* NUMBERS */,
4092
+ [EXCEL]: "EXCEL" /* EXCEL */,
4093
+ [PDF]: "PDF" /* PDF */,
4094
+ [ZIP]: "ZIP" /* ZIP */,
4095
+ [GLTF]: "MODEL" /* MODEL */,
4096
+ [GLTF_EXT]: "MODEL" /* MODEL */,
4097
+ [GLB]: "MODEL" /* MODEL */,
4098
+ // GLTF returns 'application/json' as the mimetype,
4099
+ // and as the only JSON-encoded media we currently support,
4100
+ // we assume that if the mimetype is JSON, it's a GLTF
4101
+ [JSON_MIME_TYPE]: "MODEL" /* MODEL */,
4102
+ [GLB_EXT]: "MODEL" /* MODEL */
4103
+ };
4104
+ function mimeTypeToMedia(mimeType) {
4105
+ if (!mimeType)
4106
+ return "UNKNOWN" /* UNKNOWN */;
4107
+ return mimeToMediaType[mimeType] || "UNKNOWN" /* UNKNOWN */;
4108
+ }
4109
+ async function getMimeType(uri) {
4110
+ if (!uri)
4111
+ return uri;
4112
+ const res = await fetch(uri, { method: "HEAD" });
4113
+ let mimeType = res.headers.get("content-type");
4114
+ return mimeType;
4115
+ }
4116
+
4117
+ // src/ipfs/token-metadata.ts
4118
+ var makeTextTokenMetadata = (parameters) => {
4119
+ const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;
4120
+ const content = textFileUrl ? {
4121
+ mime: TEXT_PLAIN,
4122
+ uri: textFileUrl
4123
+ } : null;
4124
+ const image = thumbnailUrl;
4125
+ const animation_url = textFileUrl;
4126
+ return {
4127
+ name,
4128
+ image,
4129
+ animation_url,
4130
+ content,
4131
+ attributes
4132
+ };
4133
+ };
4134
+ var makeMediaTokenMetadata = async ({
4135
+ name,
4136
+ description,
4137
+ attributes = [],
4138
+ mediaUrl,
4139
+ thumbnailUrl
4140
+ }) => {
4141
+ const contentUrl = mediaUrl;
4142
+ const fetchableContentUrl = getFetchableUrl(contentUrl);
4143
+ if (!fetchableContentUrl)
4144
+ throw new Error(`Content url (${contentUrl}) is not fetchable`);
4145
+ const mimeType = await getMimeType(fetchableContentUrl);
4146
+ const mediaType = mimeTypeToMedia(mimeType);
4147
+ let image = void 0;
4148
+ let animation_url = null;
4149
+ if (isImage(mimeType)) {
4150
+ image = contentUrl;
4151
+ } else {
4152
+ image = thumbnailUrl;
4153
+ animation_url = mediaUrl;
4154
+ }
4155
+ if (!image)
4156
+ image = `ipfs://${DEFAULT_THUMBNAIL_CID_HASHES[mediaType] || DEFAULT_THUMBNAIL_CID_HASHES.default}`;
4157
+ const content = contentUrl ? {
4158
+ mime: mimeType || "application/octet-stream",
4159
+ uri: contentUrl
4160
+ } : null;
4161
+ return {
4162
+ name,
4163
+ description,
4164
+ image,
4165
+ animation_url,
4166
+ content,
4167
+ attributes
4168
+ };
4169
+ };
4170
+
4171
+ // src/ipfs/text-metadata.ts
4172
+ var CHAR_LIMIT = 1111;
4173
+ var wrapText = ({
4174
+ ctx,
4175
+ text,
4176
+ x,
4177
+ y,
4178
+ maxWidth,
4179
+ lineHeight
4180
+ }) => {
4181
+ let words = text.replaceAll("\n", " \n ").split(/ +/);
4182
+ let line = "";
4183
+ let testLine = "";
4184
+ let lineArray = [];
4185
+ for (var n = 0; n < words.length; n++) {
4186
+ testLine += `${words[n]} `;
4187
+ let metrics = ctx.measureText(testLine);
4188
+ let testWidth = metrics.width;
4189
+ if (words[n]?.includes("\n") || testWidth > maxWidth && n > 0) {
4190
+ lineArray.push({ text: line, x, y });
4191
+ y += lineHeight;
4192
+ if (words[n]?.includes("\n")) {
4193
+ line = ``;
4194
+ testLine = ``;
4195
+ } else {
4196
+ line = `${words[n]} `;
4197
+ testLine = `${words[n]} `;
4198
+ }
4199
+ } else {
4200
+ line += `${words[n]} `;
4201
+ }
4202
+ if (n === words.length - 1) {
4203
+ lineArray.push({ text: line, x, y });
4204
+ }
4205
+ }
4206
+ return lineArray;
4207
+ };
4208
+ async function generateTextPreview(text) {
4209
+ const trimmedText = text.trim().slice(0, CHAR_LIMIT);
4210
+ const [width, height] = [500, 500];
4211
+ const padding = 20;
4212
+ const dpr = 2;
4213
+ const fontFamily = "Inter";
4214
+ const [fontSize, lineHeight] = [16, 24];
4215
+ const [textColor, backgroundColor] = ["black", "white"];
4216
+ return new Promise((resolve, reject) => {
4217
+ const canvas = document.createElement("canvas");
4218
+ canvas.width = width * dpr;
4219
+ canvas.height = height * dpr;
4220
+ const ctx = canvas.getContext("2d");
4221
+ if (!ctx) {
4222
+ return reject(new Error("Could not create canvas context"));
4223
+ }
4224
+ ctx.fillStyle = backgroundColor;
4225
+ ctx.fillRect(0, 0, width * dpr, width * dpr);
4226
+ ctx.fillStyle = textColor;
4227
+ ctx.font = `${fontSize * dpr}px ${fontFamily}`;
4228
+ const wrapped = wrapText({
4229
+ ctx,
4230
+ text: trimmedText,
4231
+ x: padding * dpr,
4232
+ y: fontSize * dpr + padding * dpr,
4233
+ maxWidth: width * dpr - padding * 2 * dpr,
4234
+ lineHeight: lineHeight * dpr
4235
+ });
4236
+ wrapped.forEach((line) => ctx.fillText(line.text, line.x, line.y));
4237
+ canvas.toBlob((blob) => {
4238
+ if (!blob) {
4239
+ return reject(new Error("Could not create blob"));
4240
+ }
4241
+ resolve(new File([blob], "thumbnail.png", { type: "image/png" }));
4242
+ });
4243
+ });
4244
+ }
4245
+ function generateTextTitle(text) {
4246
+ const firstLine = text.split("\n")[0];
4247
+ const firstSentence = firstLine?.split(". ")[0];
4248
+ if (firstSentence.length > 50) {
4249
+ return firstSentence.slice(0, 50) + "...";
4250
+ }
4251
+ return firstSentence;
4252
+ }
4253
+ var toTextFile = (text) => new File([text], "Untitled.txt", { type: "text/plain" });
4254
+ async function generateTextNftMetadataFiles(text) {
4255
+ const name = generateTextTitle(text);
4256
+ const textFile = toTextFile(text);
4257
+ const thumbnailFile = await generateTextPreview(text);
4258
+ return {
4259
+ name,
4260
+ mediaUrlFile: textFile,
4261
+ thumbnailFile
4262
+ };
4263
+ }
4264
+
4265
+ // src/allow-list/allow-list-client.ts
4266
+ var ALLOW_LIST_API_BASE = "http://allowlist.zora.co/";
4267
+ var createAllowList = async ({
4268
+ allowList,
4269
+ httpClient: httpClient2 = httpClient
4270
+ }) => {
4271
+ const { post: post2, retries: retries2 } = httpClient2;
4272
+ const data = {
4273
+ entries: allowList.entries.map((entry) => ({
4274
+ user: entry.user,
4275
+ maxCanMint: entry.maxCanMint,
4276
+ price: entry.price.toString()
4277
+ }))
4278
+ };
4279
+ return (await retries2(
4280
+ () => post2(`${ALLOW_LIST_API_BASE}allowlist`, data)
4281
+ )).root;
4282
+ };
2954
4283
  // Annotate the CommonJS export names for ESM import in node:
2955
4284
  0 && (module.exports = {
2956
4285
  Create1155Client,
@@ -2971,6 +4300,7 @@ function createCollectorClient(params) {
2971
4300
  convertGetPremintApiResponse,
2972
4301
  convertGetPremintOfCollectionApiResponse,
2973
4302
  convertPremintFromApi,
4303
+ createAllowList,
2974
4304
  createCollectorClient,
2975
4305
  createCreatorClient,
2976
4306
  decodeCallFailedError,
@@ -2981,7 +4311,9 @@ function createCollectorClient(params) {
2981
4311
  encodeCollectOnManager,
2982
4312
  encodePostSignatureInput,
2983
4313
  encodePremintForAPI,
4314
+ generateTextNftMetadataFiles,
2984
4315
  getApiNetworkConfigForChain,
4316
+ getContractAddressFromCreateReceipt,
2985
4317
  getDataFromPremintReceipt,
2986
4318
  getDefaultFixedPriceMinterAddress,
2987
4319
  getMintsAccountBalanceWithPriceQuery,
@@ -3000,11 +4332,13 @@ function createCollectorClient(params) {
3000
4332
  isPremintConfigV2,
3001
4333
  isValidSignature,
3002
4334
  makeCallWithEthSafeTransferData,
4335
+ makeMediaTokenMetadata,
3003
4336
  makeMintRewardsRecipient,
3004
4337
  makeNewPremint,
3005
4338
  makePermitToCollectPremintOrNonPremint,
3006
4339
  makePermitTransferBatchAndTypeData,
3007
4340
  makePermitTransferTypeData,
4341
+ makeTextTokenMetadata,
3008
4342
  makeUrls,
3009
4343
  migratePremintConfigToV2,
3010
4344
  mintWithEthParams,