@zoralabs/protocol-sdk 0.13.5 → 0.13.7

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 (34) hide show
  1. package/.turbo/turbo-build.log +15 -15
  2. package/CHANGELOG.md +19 -0
  3. package/dist/allow-list/allow-list-client.d.ts.map +1 -1
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/apis/chain-constants.d.ts.map +1 -1
  6. package/dist/apis/http-api-base.d.ts.map +1 -1
  7. package/dist/apis/network-config.d.ts.map +1 -1
  8. package/dist/create/create-client.d.ts.map +1 -1
  9. package/dist/create/minter-defaults.d.ts.map +1 -1
  10. package/dist/create/token-setup.d.ts.map +1 -1
  11. package/dist/fixtures/mint-query-results.d.ts.map +1 -1
  12. package/dist/fixtures/rewards-query-results.d.ts.map +1 -1
  13. package/dist/index.cjs +46 -68
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.js +43 -65
  16. package/dist/index.js.map +1 -1
  17. package/dist/ipfs/mimeTypes.d.ts.map +1 -1
  18. package/dist/ipfs/token-metadata.d.ts.map +1 -1
  19. package/dist/mint/mint-queries.d.ts.map +1 -1
  20. package/dist/mint/types.d.ts.map +1 -1
  21. package/dist/mint/utils.d.ts.map +1 -1
  22. package/dist/premint/conversions.d.ts.map +1 -1
  23. package/dist/premint/premint-api-client.d.ts.map +1 -1
  24. package/dist/premint/premint-client.d.ts.map +1 -1
  25. package/dist/premint/preminter.d.ts.map +1 -1
  26. package/dist/preminter.d.ts.map +1 -1
  27. package/dist/retries.d.ts.map +1 -1
  28. package/dist/rewards/rewards-queries.d.ts.map +1 -1
  29. package/dist/sparks/mints-queries.d.ts.map +1 -1
  30. package/dist/sparks/sparks-contracts.d.ts.map +1 -1
  31. package/dist/test-utils.d.ts.map +1 -1
  32. package/dist/utils.d.ts.map +1 -1
  33. package/dist/waitForSuccess.d.ts.map +1 -1
  34. package/package.json +2 -2
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/index.js","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/chain-constants.ts","../src/constants.ts","../src/premint/conversions.ts","../src/utils.ts","../src/apis/network-config.ts","../src/premint/contract-types.ts","../src/retries.ts","../src/apis/http-api-base.ts","../src/premint/premint-api-client.ts","../src/mint/subgraph-queries.ts","../src/apis/subgraph-querier.ts","../src/apis/subgraph-getter.ts","../src/mint/strategies-parsing.ts","../src/mint/subgraph-mint-getter.ts","../src/mint/types.ts","../src/mint/mint-queries.ts","../src/mint/mint-transactions.ts","../src/mint/utils.ts","../src/mint/mint-client.ts","../src/create/create-client.ts","../src/create/contract-setup.ts","../src/create/token-setup.ts","../src/create/minter-defaults.ts","../src/create/minter-setup.ts","../src/create/mint-from-create.ts","../src/create/subgraph-queries.ts","../src/create/contract-getter.ts","../src/sparks/mints-queries.ts","../src/sparks/sparks-contracts.ts","../src/rewards/rewards-queries.ts","../src/apis/multicall3.ts","../src/rewards/subgraph-queries.ts","../src/rewards/subgraph-rewards-getter.ts","../src/rewards/rewards-client.ts","../src/secondary/secondary-client.ts","../src/secondary/uniswap/uniswapQuote.ts","../src/secondary/uniswap/uniswapReserves.ts","../src/secondary/uniswap/abis.ts","../src/secondary/conversions.ts","../src/secondary/uniswap/uniswapQuoteExact.ts","../src/secondary/slippage.ts","../src/secondary/utils.ts","../src/sdk.ts","../src/ipfs/arweave.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bytes.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base32.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base36.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base58.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/vendor/varint.js","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/varint.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/cid.ts","../src/ipfs/ipfs.ts","../src/ipfs/gateway.ts","../src/ipfs/mimeTypes.ts","../src/ipfs/token-metadata.ts","../src/ipfs/text-metadata.ts","../src/allow-list/allow-list-client.ts"],"sourcesContent":["// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n TypedDataDefinition,\n WalletClient,\n} from \"viem\";\nimport {\n encodePremintConfig,\n zoraCreator1155PremintExecutorImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n getPremintMintFee,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport { IPremintAPI, IPremintGetter } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport {\n makeContractParameters,\n mintRecipientOrAccount,\n PublicClient,\n} from \"src/utils\";\nimport { ContractCreationConfigAndAddress } from \"./contract-types\";\nimport {\n MakeMintParametersArgumentsBase,\n MakePremintMintParametersArguments,\n MintCosts,\n} from \"src/mint/types\";\nimport { PremintFromApi } from \"./conversions\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\nimport { getApiNetworkConfigForChain } from \"src/apis/network-config\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nfunction getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n */\nexport class PremintClient {\n readonly apiClient: IPremintAPI;\n readonly publicClient: PublicClient;\n readonly chainId: number;\n\n constructor({\n chainId,\n publicClient,\n premintApi,\n }: {\n chainId: number;\n publicClient: PublicClient;\n premintApi: IPremintAPI;\n }) {\n this.chainId = chainId;\n this.apiClient = premintApi;\n this.publicClient = publicClient;\n }\n\n getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n blockExplorerUrl?: string,\n ) {\n return getDataFromPremintReceipt(receipt, this.chainId, blockExplorerUrl);\n }\n\n /**\n * Prepares data for deleting a premint\n *\n * @param parameters - Parameters for deleting the premint {@link DeletePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async deletePremint(\n params: DeletePremintParams,\n ): Promise<PremintReturn<any>> {\n return deletePremint({\n ...params,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremint({ address, uid }: { address: Address; uid: number }) {\n return await this.apiClient.get({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n contract: collection,\n publicClient: this.publicClient,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Prepares the parameters to collect a premint; it brings the contract and token onchain, then collects\n * tokens on that contract for the mint recipient.\n *\n * @param parameters - Parameters for collecting the Premint {@link MakeMintParametersArguments}\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n minterAccount,\n tokenContract,\n uid,\n mintArguments,\n firstMinter,\n }: MakeMintParametersArguments) {\n return await collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint: mintArguments?.quantityToMint || 1n,\n mintComment: mintArguments?.mintComment,\n mintReferral: mintArguments?.mintReferral,\n mintRecipient: mintArguments?.mintRecipient,\n firstMinter,\n premintGetter: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n chainId: number,\n blockExplorerUrl?: string,\n) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n tokenId: premintedLog?.tokenId,\n collectionAddres: premintedLog?.contractAddress,\n premintedLog,\n urls: makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n chainId,\n blockExplorerUrl,\n }),\n };\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: IPremintAPI;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\ntype SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n} & CheckSignatureParams;\n\ntype SignAndSubmitReturn = {\n /** The signature of the Premint */\n signature: Hex;\n /** The account that signed the Premint */\n signerAccount: Account | Address;\n};\n\ntype CheckSignatureParams =\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature: true;\n /** Account that signed the premint */\n account: Account | Address;\n }\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: false;\n account?: Account | Address;\n };\n\ntype SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n} & CheckSignatureParams;\n\ntype PremintReturn<T extends PremintConfigVersion> = {\n /** The typedDataDefinition of the Premint which is to be signed the creator. */\n typedDataDefinition: TypedDataDefinition;\n /** The deterministic collection address of the Premint */\n collectionAddress: Address;\n /** Signs the Premint, and submits it and the signature to the Zora Premint API */\n signAndSubmit: (params: SignAndSubmitParams) => Promise<SignAndSubmitReturn>;\n /** For the case where the premint is signed externally, takes the signature for the Premint, and submits it and the Premint to the Zora Premint API */\n submit: (params: SubmitParams) => Promise<void>;\n urls: URLSReturnType;\n} & PremintConfigWithVersion<T>;\n\nfunction makePremintReturn<T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n publicClient,\n apiClient,\n chainId,\n ...collectionAndAddress\n}: PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress &\n PremintContext): PremintReturn<T> {\n const { collection, collectionAddress } = collectionAndAddress;\n const typedDataDefinition = premintTypedDataDefinition({\n verifyingContract: collectionAddress,\n premintConfig,\n premintConfigVersion,\n chainId,\n });\n\n const signAndSubmit = async ({\n walletClient,\n account: account,\n checkSignature,\n }: SignAndSubmitParams): Promise<SignAndSubmitReturn> => {\n const { signature, signerAccount } = await signPremint({\n account,\n walletClient,\n typedDataDefinition,\n });\n\n await submit({\n signature,\n checkSignature,\n account: signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n account,\n }: SubmitParams) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: account,\n });\n\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n await apiClient.postSignature({\n ...toContractCreationConfigOrAddress(collectionAndAddress),\n signature: signature,\n premintConfig,\n premintConfigVersion,\n });\n };\n\n const urls = makeUrls({\n chainId,\n address: collectionAddress,\n uid: premintConfig.uid,\n });\n\n return {\n premintConfig,\n premintConfigVersion,\n typedDataDefinition,\n collectionAddress,\n signAndSubmit,\n submit,\n urls,\n };\n}\n\nasync function signPremint({\n account,\n walletClient,\n typedDataDefinition,\n}: {\n /** The account that is to sign the premint */\n account?: Address | Account;\n /** WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** Data */\n typedDataDefinition: TypedDataDefinition;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...typedDataDefinition,\n });\n\n return {\n signature,\n signerAccount: account,\n };\n}\n\n/** DELETE */\n\ntype DeletePremintParams = {\n /** id of the premint to delete */\n uid: number;\n /** collection address of the Premint to delete */\n collection: Address;\n};\n\nasync function deletePremint({\n uid,\n collection,\n publicClient,\n apiClient,\n chainId,\n}: DeletePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n\n return makePremintReturn({\n premintConfig: deletedPremint,\n premintConfigVersion,\n collectionAddress,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\ntype MakeMintParametersArguments = {\n /** uid of the Premint to mint */\n uid: number;\n /** Premint contract address */\n tokenContract: Address;\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Minting settings */\n mintArguments?: {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintRecipient?: Address;\n };\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n};\n\n/** ======== MINTING ======== */\n\nasync function collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint,\n mintComment = \"\",\n mintReferral,\n mintRecipient,\n firstMinter,\n premintGetter,\n publicClient,\n}: Omit<MakePremintMintParametersArguments, \"mintType\"> & {\n premintGetter: IPremintGetter;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premint\",\n any,\n any,\n any,\n Account | Address\n >\n> {\n if (typeof quantityToMint !== \"undefined\" && quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid,\n });\n\n const mintFee = await getPremintMintFee({\n tokenContract,\n publicClient,\n });\n\n return buildPremintMintCall({\n mintArguments: {\n minterAccount,\n quantityToMint,\n firstMinter,\n mintComment,\n mintRecipient,\n mintReferral,\n },\n mintFee,\n premint,\n });\n}\n\nexport const buildPremintMintCall = ({\n mintArguments: {\n minterAccount,\n mintComment = \"\",\n mintRecipient,\n mintReferral,\n firstMinter,\n quantityToMint,\n },\n premint: { collection, collectionAddress, premint, signature },\n mintFee,\n}: {\n mintArguments: Omit<MakeMintParametersArgumentsBase, \"tokenContract\"> & {\n firstMinter?: Address;\n };\n premint: Pick<\n PremintFromApi,\n \"collection\" | \"collectionAddress\" | \"premint\" | \"signature\"\n >;\n mintFee: bigint;\n}): SimulateContractParametersWithAccount => {\n const mintArgumentsContract: PremintMintArguments = {\n mintComment: mintComment,\n mintRecipient: mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n }),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral,\n }),\n };\n\n const collectionOrEmpty: ContractCreationConfig = collection\n ? defaultAdditionalAdmins(collection)\n : emptyContractCreationConfig();\n const collectionAddressToSubmit = collection\n ? zeroAddress\n : collectionAddress;\n\n const firstMinterToSubmit: Address =\n firstMinter ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address);\n\n if (premint.premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value =\n (mintFee + premint.premintConfig.tokenConfig.pricePerToken) *\n BigInt(quantityToMint);\n\n return makeContractParameters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig(premint),\n signature,\n BigInt(quantityToMint),\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n};\n\nfunction makeUrls({\n uid,\n address,\n tokenId,\n chainId,\n blockExplorerUrl,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chainId: number;\n blockExplorerUrl?: string;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chainId);\n\n return {\n explorer: tokenId\n ? `https://${blockExplorerUrl}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n ContractCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { zeroAddress, parseEther, Account } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\nimport { IPremintGetter } from \"./premint-api-client\";\nimport { isPremintConfigV1, isPremintConfigV2 } from \"./conversions\";\nimport { MintCosts } from \"src/mint/types\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\n\nexport async function isAuthorizedToCreatePremint({\n contractAdmin = zeroAddress,\n additionalAdmins = [],\n collectionAddress,\n publicClient,\n signer,\n}: {\n contractAdmin?: Address;\n additionalAdmins?: Address[];\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address | Account;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n typeof signer === \"string\" ? signer : signer.address,\n contractAdmin,\n collectionAddress,\n additionalAdmins,\n ],\n });\n}\n\nexport async function getPremintCollectionAddress({\n publicClient,\n contract: collection,\n contractAddress: collectionAddress,\n}: {\n publicClient: PublicClient;\n} & ContractCreationConfigOrAddress): Promise<Address> {\n if (typeof collection !== \"undefined\") {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractWithAdditionalAdminsAddress\",\n args: [\n {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n },\n ],\n });\n }\n\n return collectionAddress;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\ntype GetMintCostsParams = {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint | number;\n publicClient: PublicClient;\n};\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: GetMintCostsParams): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n const quantityToMintBigInt = BigInt(quantityToMint);\n\n return {\n mintFee: mintFee * quantityToMintBigInt,\n totalPurchaseCost: tokenPrice * quantityToMintBigInt,\n totalCostEth: (mintFee + tokenPrice) * quantityToMintBigInt,\n };\n}\nasync function getPremintPricePerToken({\n collection,\n uid,\n premintGetter,\n}: {\n collection: Address;\n uid: number;\n premintGetter: IPremintGetter;\n}) {\n const { premint: premintConfigWithVersion } = await premintGetter.get({\n collectionAddress: collection,\n uid,\n });\n\n if (\n isPremintConfigV1(premintConfigWithVersion) ||\n isPremintConfigV2(premintConfigWithVersion)\n ) {\n return premintConfigWithVersion.premintConfig.tokenConfig.pricePerToken;\n }\n\n throw new Error(\"Premint version not supported to get price\");\n}\n\nexport async function getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n uid,\n ...rest\n}: Omit<GetMintCostsParams, \"tokenPrice\"> & {\n premintGetter: IPremintGetter;\n uid: number;\n}) {\n const pricePerToken = await getPremintPricePerToken({\n uid,\n premintGetter,\n collection: rest.tokenContract,\n });\n\n return await getPremintMintCosts({\n ...rest,\n tokenPrice: pricePerToken,\n });\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport const emptyContractCreationConfig = (): ContractCreationConfig => ({\n contractAdmin: zeroAddress,\n contractURI: \"\",\n contractName: \"\",\n additionalAdmins: [],\n});\n\nexport function defaultAdditionalAdmins(\n collection: ContractCreationConfigWithOptionalAdditionalAdmins,\n): ContractCreationConfig {\n return {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n };\n}\n\nexport const toContractCreationConfigOrAddress = ({\n collection,\n collectionAddress,\n}: {\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: Address;\n}) => {\n if (typeof collection !== \"undefined\") {\n return {\n contract: collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n contractAddress: collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\n};\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n\nexport const getSubgraphUrl = (chainId: number): string => {\n const networkConfig = networkConfigByChain[chainId];\n\n if (!networkConfig) {\n throw new Error(`Network not configured for chain id ${chainId}`);\n }\n\n return networkConfig.subgraphUrl;\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n\nexport const zora1155LegacyAbi = [\n {\n type: \"function\",\n name: \"mintWithRewards\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n internalType: \"contract IMinter1155\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"minterArguments\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"mintReferral\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n] as const;\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n PremintSignatureGetOfCollectionResponse,\n PremintSignatureGetResponse,\n} from \"./premint-api-client\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig | undefined => {\n if (!collection) return undefined;\n\n return {\n additionalAdmins:\n (collection.additionalAdmins as Address[] | undefined) || [],\n contractAdmin: collection.contractAdmin as Address,\n contractName: collection.contractName,\n contractURI: collection.contractURI,\n };\n};\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport type PremintFromApi = ReturnType<typeof convertGetPremintApiResponse>;\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n collection: convertCollectionFromApi(response.collection),\n collectionAddress: response.collection_address as Address,\n signature: response.signature as Hex,\n signer: response.signer as Address,\n premint: convertPremintFromApi(response.premint),\n});\n\nexport type PremintCollectionFromApi = ReturnType<\n typeof convertGetPremintOfCollectionApiResponse\n>;\n\nexport const convertGetPremintOfCollectionApiResponse = (\n response: PremintSignatureGetOfCollectionResponse,\n) => ({\n collection: convertCollectionFromApi({\n contractAdmin: response.contract_admin,\n contractName: response.contract_name,\n contractURI: response.contract_uri,\n }),\n premints: response.premints.map((premint) => ({\n premint: convertPremintFromApi(premint),\n signature: premint.signature as Hex,\n })),\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n contract: collection,\n contractAddress: collectionAddress,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection: collection as\n | PremintSignatureRequestBody[\"collection\"]\n | undefined,\n collection_address: collectionAddress,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n\nexport const isPremintConfigV1 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V1> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V1;\n\nexport const isPremintConfigV2 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V2> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V2;\n","import {\n Account,\n Address,\n PublicClient as BasePublicClient,\n Transport,\n Chain,\n} from \"viem\";\nimport { SimulateContractParametersWithAccount } from \"./types\";\n\nexport const makeContractParameters = (\n args: SimulateContractParametersWithAccount,\n) => args;\n\nexport type PublicClient = Pick<\n BasePublicClient<Transport, Chain>,\n \"readContract\" | \"getBlock\" | \"simulateContract\" | \"getBalance\" | \"chain\"\n>;\n\nexport type ClientConfig = {\n /** The chain that the client is to run on. */\n chainId: number;\n /** Optional public client for the chain. If not provide, it is created. */\n publicClient: PublicClient;\n};\n\nexport function setupClient({ chainId, publicClient }: ClientConfig) {\n return {\n chainId,\n publicClient,\n };\n}\n\nexport function mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n}: {\n mintRecipient?: Address;\n minterAccount: Address | Account;\n}): Address {\n return (\n mintRecipient ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address)\n );\n}\n\nexport type Concrete<Type> = {\n [Property in keyof Type]-?: Type[Property];\n};\n\nexport const addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n","import { NetworkConfig, networkConfigByChain } from \"./chain-constants\";\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n","import {\n ContractCreationConfig,\n PremintConfigVersion as PremintConfigVersionOrig,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n\nexport type ContractCreationConfigWithOptionalAdditionalAdmins = Omit<\n ContractCreationConfig,\n \"additionalAdmins\"\n> & {\n /** Optional: if there are additional admins accounts that should be added as contract wide admins upon contract creation. */\n additionalAdmins?: Address[];\n};\n\nexport type ContractCreationConfigAndAddress = {\n /** Parameters for creating the contract for new premints. */\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n /** Premint collection address */\n collectionAddress: Address;\n};\n\nexport type ContractCreationConfigOrAddress =\n | {\n /** Parameters for creating the contract for new premints. */\n contract: ContractCreationConfigWithOptionalAdditionalAdmins;\n contractAddress?: undefined;\n }\n | {\n contract?: undefined;\n /** Premint collection address */\n contractAddress: Address;\n };\n","async function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\nconst retryInternal = async <T>({\n tryFn,\n maxTries = 3,\n atTry,\n linearBackoffMS = 200,\n shouldRetryOnError = () => true,\n}: {\n tryFn: () => T;\n maxTries?: number;\n atTry: number;\n linearBackoffMS?: number;\n shouldRetryOnError?: (err: any) => boolean;\n}): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (shouldRetryOnError(err)) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retryInternal({\n tryFn,\n maxTries,\n atTry: atTry + 1,\n linearBackoffMS,\n shouldRetryOnError,\n });\n }\n }\n throw err;\n }\n};\n\nexport const retriesGeneric = async <T>(params: {\n tryFn: () => T;\n maxTries?: number;\n linearBackoffMS?: number;\n shouldRetryOnError?: (err: any) => boolean;\n}) => {\n return retryInternal({\n ...params,\n atTry: 1,\n });\n};\n","import { retriesGeneric } from \"src/retries\";\n\nexport class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const controller = new AbortController();\n const { signal } = controller;\n\n // 30 minute timeout:\n const timeout = 30 * 60 * 1000;\n\n // Set a timeout to automatically abort the request\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n signal,\n });\n\n clearTimeout(timeoutId);\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nconst defaultShouldRetry = (err: any) => {\n return err instanceof BadResponseError && err.status >= 500;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n linearBackoffMS: number = 200,\n shouldRetry: (err: any) => boolean = defaultShouldRetry,\n): Promise<T> => {\n return retriesGeneric({\n tryFn,\n maxTries,\n linearBackoffMS,\n shouldRetryOnError: shouldRetry,\n });\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport {\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintCollectionFromApi,\n PremintFromApi,\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n convertGetPremintOfCollectionApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\nimport { getApiNetworkConfigForChain } from \"src/apis/network-config\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetOfCollectionType =\n paths[\"/signature/{chain_name}/{collection_address}\"][\"get\"];\nexport type PremintSignatureGetOfCollectionResponse =\n SignaturePremintGetOfCollectionType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nexport const getSignature = async ({\n collectionAddress,\n uid,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n uid: number;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintFromApi> => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}/${uid}`,\n ),\n );\n\n return convertGetPremintApiResponse(result);\n};\n\nconst getOfCollection = async ({\n collectionAddress,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}) => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetOfCollectionResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}`,\n ),\n );\n\n return convertGetPremintOfCollectionApiResponse(result);\n};\n\nexport interface IPremintGetter {\n get(params: {\n collectionAddress: Address;\n uid: number;\n }): Promise<PremintFromApi>;\n\n getOfCollection(params: {\n collectionAddress: Address;\n }): Promise<PremintCollectionFromApi>;\n}\n\nexport interface IPremintAPI {\n get: IPremintGetter[\"get\"];\n\n getOfCollection: IPremintGetter[\"getOfCollection\"];\n\n postSignature<T extends PremintConfigVersion>(\n params: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress,\n ): Promise<PremintSignatureResponse>;\n}\n\nclass PremintAPIClient implements IPremintAPI {\n chainId: number;\n httpClient: IHttpClient;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.chainId = chainId;\n this.httpClient = httpClient || defaultHttpClient;\n }\n postSignature: IPremintAPI[\"postSignature\"] = ({\n signature,\n ...rest\n }): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\n chainId: this.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n get: IPremintAPI[\"get\"] = async ({ collectionAddress, uid }) => {\n return getSignature({\n collectionAddress,\n uid,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n\n getOfCollection: IPremintAPI[\"getOfCollection\"] = async ({\n collectionAddress,\n }) => {\n return getOfCollection({\n collectionAddress,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\nexport type FixedPriceSaleStrategyResult = {\n type: \"FIXED_PRICE\";\n fixedPrice: {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n };\n};\n\nexport type ERC20SaleStrategyResult = {\n type: \"ERC_20_MINTER\";\n erc20Minter: {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n currency: Address;\n };\n};\n\nexport type PresaleSalesStrategyResult = {\n type: \"PRESALE\";\n presale: {\n address: Address;\n presaleStart: string;\n presaleEnd: string;\n merkleRoot: string;\n };\n};\n\nexport type ZoraTimedMinterSaleStrategyResult = {\n type: \"ZORA_TIMED\";\n zoraTimedMinter: {\n address: Address;\n mintFee: string;\n saleStart: string;\n saleEnd: string;\n erc20Z: {\n id: Address;\n pool: Address;\n };\n secondaryActivated: boolean;\n marketCountdown?: string;\n minimumMarketEth?: string;\n };\n};\n\nexport type SalesStrategyResult =\n | FixedPriceSaleStrategyResult\n | ERC20SaleStrategyResult\n | PresaleSalesStrategyResult\n | ZoraTimedMinterSaleStrategyResult;\n\nexport type TokenQueryResult = {\n tokenId?: string;\n creator: Address;\n uri: string;\n totalMinted: string;\n maxSupply: string;\n salesStrategies?: SalesStrategyResult[];\n tokenStandard: \"ERC1155\" | \"ERC721\";\n contract: {\n mintFeePerQuantity: string;\n salesStrategies: SalesStrategyResult[];\n address: Address;\n contractVersion: string;\n contractURI: string;\n name: string;\n };\n};\n\nconst NFT_SALE_STRATEGY_FRAGMENT = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n presale {\n address\n presaleStart\n presaleEnd\n merkleRoot\n }\n zoraTimedMinter {\n address\n mintFee\n saleStart\n saleEnd\n erc20Z {\n id \n pool\n }\n secondaryActivated\n marketCountdown\n minimumMarketEth\n }\n}`;\n\nconst TOKEN_FRAGMENT = `\nfragment Token on ZoraCreateToken {\n creator\n tokenId\n uri\n totalMinted\n maxSupply\n tokenStandard\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\", \"PRESALE\", \"ZORA_TIMED\"]}) {\n ...SaleStrategy\n }\n contract {\n address\n mintFeePerQuantity\n contractVersion\n contractURI\n name\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\", \"PRESALE\", \"ZORA_TIMED\"]}) {\n ...SaleStrategy\n }\n }\n}`;\n\nconst FRAGMENTS = `\n${NFT_SALE_STRATEGY_FRAGMENT}\n${TOKEN_FRAGMENT}\n`;\n\nexport function buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n}: {\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult> {\n return {\n query: `\n${FRAGMENTS}\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n ...Token \n }\n}\n`,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateToken,\n };\n}\n\nexport function buildContractTokensQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult[]> {\n return {\n query: `\n${FRAGMENTS}\nquery ($contract: Bytes!) {\n zoraCreateTokens(\n where: {address: $contract}\n ) {\n ...Token\n }\n}\n`,\n variables: {\n contract: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateTokens,\n };\n}\nexport function buildPremintsOfContractQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<{ uid: string; tokenId: string }[]> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n premints(where:{contractAddress:$contractAddress}) {\n uid\n tokenId\n }\n }\n `,\n variables: {\n contractAddress: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.premints,\n };\n}\n","import { IHttpClient } from \"./http-api-base\";\n\nexport type ISubgraphQuery<T> = {\n query: string;\n variables: Record<string, any>;\n parseResponseData: (data: any | undefined) => T | undefined;\n};\n\nexport interface ISubgraphQuerier {\n query: (params: {\n subgraphUrl: string;\n query: string;\n variables?: Record<string, any>;\n maxRetries?: number;\n }) => Promise<object | undefined>;\n}\n\nexport class SubgraphQuerier implements ISubgraphQuerier {\n httpClient: IHttpClient;\n\n constructor(httpClient: IHttpClient) {\n this.httpClient = httpClient;\n }\n\n async query({\n subgraphUrl,\n query,\n variables,\n }: {\n subgraphUrl: string;\n query: string;\n variables?: Record<string, any>;\n }) {\n const { retries, post } = this.httpClient;\n\n const result = await retries(async () => {\n return await post<any>(subgraphUrl, {\n query,\n variables,\n });\n });\n\n return result?.data;\n }\n}\n","import { getApiNetworkConfigForChain } from \"./network-config\";\nimport { NetworkConfig } from \"./chain-constants\";\nimport {\n ISubgraphQuerier,\n ISubgraphQuery,\n SubgraphQuerier,\n} from \"./subgraph-querier\";\nimport { httpClient as defaultHttpClient } from \"../apis/http-api-base\";\n\nexport class SubgraphGetter {\n public readonly subgraphQuerier: ISubgraphQuerier;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n this.subgraphQuerier =\n subgraphQuerier || new SubgraphQuerier(defaultHttpClient);\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async querySubgraphWithRetries<T>({\n query,\n variables,\n parseResponseData,\n }: ISubgraphQuery<T>) {\n const responseData = await this.subgraphQuerier.query({\n subgraphUrl: this.networkConfig.subgraphUrl,\n query,\n variables,\n });\n\n return parseResponseData(responseData);\n }\n}\n","import { GenericTokenIdTypes } from \"src/types\";\nimport {\n SaleType,\n OnchainMintable,\n OnchainSalesStrategies,\n GetMintableReturn,\n ZoraTimedSaleStrategy,\n} from \"./types\";\nimport {\n ERC20SaleStrategyResult,\n FixedPriceSaleStrategyResult,\n PresaleSalesStrategyResult,\n SalesStrategyResult,\n TokenQueryResult,\n ZoraTimedMinterSaleStrategyResult,\n} from \"./subgraph-queries\";\n\ntype ParsedSalesConfig = {\n salesStrategy: OnchainSalesStrategies;\n // saleActive: boolean;\n saleEnd: bigint | undefined;\n saleStart: bigint;\n};\n\nfunction parseFixedPriceSalesConfig(\n fixedPrice: FixedPriceSaleStrategyResult[\"fixedPrice\"],\n contractMintFee: bigint,\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(fixedPrice.saleEnd);\n return {\n salesStrategy: {\n saleType: \"fixedPrice\",\n ...fixedPrice,\n maxTokensPerAddress: BigInt(fixedPrice.maxTokensPerAddress),\n pricePerToken: BigInt(fixedPrice.pricePerToken),\n mintFeePerQuantity: contractMintFee,\n },\n saleEnd: BigInt(fixedPrice.saleEnd),\n saleStart: BigInt(fixedPrice.saleStart),\n // saleActive:\n // BigInt(fixedPrice.saleStart) <= blockTime && BigInt(saleEnd) > blockTime,\n };\n}\n\nfunction parseERC20SalesConfig(\n erc20Minter: ERC20SaleStrategyResult[\"erc20Minter\"],\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(erc20Minter.saleEnd);\n return {\n salesStrategy: {\n saleType: \"erc20\",\n ...erc20Minter,\n maxTokensPerAddress: BigInt(erc20Minter.maxTokensPerAddress),\n pricePerToken: BigInt(erc20Minter.pricePerToken),\n mintFeePerQuantity: 0n,\n },\n saleEnd: BigInt(erc20Minter.saleEnd),\n saleStart: BigInt(erc20Minter.saleStart),\n // saleActive:\n // BigInt(erc20Minter.saleStart) <= blockTime && saleEnd > blockTime,\n };\n}\n\nfunction parsePresaleSalesConfig(\n presale: PresaleSalesStrategyResult[\"presale\"],\n contractMintFee: bigint,\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(presale.presaleEnd);\n return {\n salesStrategy: {\n saleType: \"allowlist\",\n address: presale.address,\n merkleRoot: presale.merkleRoot,\n saleStart: presale.presaleStart,\n saleEnd: presale.presaleEnd,\n mintFeePerQuantity: contractMintFee,\n },\n saleEnd: BigInt(presale.presaleEnd),\n saleStart: BigInt(presale.presaleStart),\n // saleActive:\n // BigInt(presale.presaleStart) <= blockTime && saleEnd > blockTime,\n };\n}\n\nfunction parseZoraTimedSalesConfig(\n zoraTimedMinter: ZoraTimedMinterSaleStrategyResult[\"zoraTimedMinter\"],\n // blockTime: bigint,\n): ParsedSalesConfig {\n const saleEnd = BigInt(zoraTimedMinter.saleEnd);\n return {\n salesStrategy: {\n saleType: \"timed\",\n address: zoraTimedMinter.address,\n mintFee: BigInt(zoraTimedMinter.mintFee),\n saleStart: zoraTimedMinter.saleStart,\n saleEnd: zoraTimedMinter.saleEnd,\n erc20Z: zoraTimedMinter.erc20Z.id,\n pool: zoraTimedMinter.erc20Z.pool,\n secondaryActivated: zoraTimedMinter.secondaryActivated,\n mintFeePerQuantity: BigInt(zoraTimedMinter.mintFee),\n marketCountdown: zoraTimedMinter.marketCountdown\n ? BigInt(zoraTimedMinter.marketCountdown)\n : undefined,\n minimumMarketEth: zoraTimedMinter.minimumMarketEth\n ? BigInt(zoraTimedMinter.minimumMarketEth)\n : undefined,\n },\n saleEnd: saleEnd > 0n ? saleEnd : undefined,\n saleStart: BigInt(zoraTimedMinter.saleStart),\n // saleActive:\n // BigInt(zoraTimedMinter.saleStart) <= blockTime &&\n // (hasSaleEnd ? saleEnd > blockTime : true),\n };\n}\n\nfunction parseSalesConfig(\n targetStrategy: SalesStrategyResult,\n contractMintFee: bigint,\n): ParsedSalesConfig {\n switch (targetStrategy.type) {\n case \"FIXED_PRICE\":\n return parseFixedPriceSalesConfig(\n targetStrategy.fixedPrice,\n contractMintFee,\n // blockTime,\n );\n case \"ERC_20_MINTER\":\n return parseERC20SalesConfig(targetStrategy.erc20Minter);\n case \"PRESALE\":\n return parsePresaleSalesConfig(\n targetStrategy.presale,\n contractMintFee,\n // blockTime,\n );\n case \"ZORA_TIMED\":\n return parseZoraTimedSalesConfig(\n targetStrategy.zoraTimedMinter,\n // blockTime,\n );\n default:\n throw new Error(\"Unknown saleType\");\n }\n}\n\nfunction isPrimaryMintActive(sale: ParsedSalesConfig, blockTime: bigint) {\n if (sale.saleStart > blockTime) return false;\n if (!sale.saleEnd) return true;\n\n return sale.saleEnd > blockTime;\n}\n\nfunction isSecondaryMinter(\n result: OnchainSalesStrategies,\n): result is ZoraTimedSaleStrategy {\n return result.saleType === \"timed\";\n}\n\nfunction isSecondaryMarketActive(sale: ParsedSalesConfig) {\n const salesStrategy = sale.salesStrategy;\n if (isSecondaryMinter(salesStrategy)) {\n return salesStrategy.secondaryActivated;\n }\n return false;\n}\n\ntype WithPrimaryAndSecondaryMintActive = {\n strategy: ParsedSalesConfig;\n primaryMintActive: boolean;\n secondaryMarketActive: boolean;\n};\n\nfunction getTargetStrategy({\n preferredSaleType,\n blockTime,\n parsedStrategies,\n}: {\n preferredSaleType?: SaleType;\n blockTime: bigint;\n parsedStrategies: ParsedSalesConfig[];\n}): WithPrimaryAndSecondaryMintActive | undefined {\n const withPrimaryAndSecondaryMintActive = parsedStrategies.map(\n (strategy) => ({\n strategy,\n primaryMintActive: isPrimaryMintActive(strategy, blockTime),\n secondaryMarketActive: isSecondaryMarketActive(strategy),\n }),\n );\n const stillValidSalesStrategies = withPrimaryAndSecondaryMintActive.filter(\n ({ primaryMintActive, secondaryMarketActive }) =>\n primaryMintActive || secondaryMarketActive,\n );\n\n const saleStrategies = stillValidSalesStrategies.sort((a, b) =>\n (a.strategy.saleEnd ?? 0n) > (b.strategy.saleEnd ?? 0n) ? 1 : -1,\n );\n\n let targetStrategy: WithPrimaryAndSecondaryMintActive | undefined;\n\n if (!preferredSaleType) {\n return saleStrategies[0];\n } else {\n targetStrategy = saleStrategies.find(\n ({ strategy: { salesStrategy } }) =>\n salesStrategy.saleType === preferredSaleType,\n );\n if (!targetStrategy) {\n targetStrategy = saleStrategies.find(\n ({ strategy: { salesStrategy } }) =>\n salesStrategy.saleType === \"timed\" ||\n salesStrategy.saleType === \"fixedPrice\" ||\n salesStrategy.saleType === \"erc20\",\n );\n if (!targetStrategy) throw new Error(\"Cannot find valid sale strategy\");\n return targetStrategy;\n }\n }\n\n return targetStrategy;\n}\n\nexport function findTargetStrategyWithPrimaryOrSecondarySaleActive({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n blockTime,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n defaultMintFee: bigint;\n blockTime: bigint;\n}) {\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const parsedStrategies = allStrategies.map((strategy) =>\n parseSalesConfig(strategy, defaultMintFee),\n );\n\n const targetStrategy = getTargetStrategy({\n preferredSaleType: preferredSaleType,\n blockTime,\n parsedStrategies,\n });\n\n return targetStrategy;\n}\n\nexport function parseAndFilterTokenQueryResult({\n token,\n tokenId,\n preferredSaleType,\n blockTime,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n blockTime: bigint;\n}): GetMintableReturn {\n const defaultMintFee = BigInt(token.contract.mintFeePerQuantity);\n const salesStrategyAndMintInfo =\n findTargetStrategyWithPrimaryOrSecondarySaleActive({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n blockTime,\n });\n\n const tokenInfo = parseTokenInfo({\n token,\n });\n\n return {\n salesConfigAndTokenInfo: {\n ...tokenInfo,\n salesConfig: salesStrategyAndMintInfo?.strategy.salesStrategy,\n },\n primaryMintActive: salesStrategyAndMintInfo?.primaryMintActive ?? false,\n primaryMintEnd: salesStrategyAndMintInfo?.strategy.saleEnd,\n secondaryMarketActive:\n salesStrategyAndMintInfo?.secondaryMarketActive ?? false,\n };\n}\n\nfunction parseTokenInfo({\n token,\n}: {\n token: TokenQueryResult;\n}): Omit<OnchainMintable, \"primaryMintActive\" | \"primaryMintEnd\"> {\n return {\n contract: {\n address: token.contract.address,\n name: token.contract.name,\n URI: token.contract.contractURI,\n },\n tokenURI: token.uri,\n tokenId: token.tokenId ? BigInt(token.tokenId) : undefined,\n mintType: token.tokenStandard === \"ERC721\" ? \"721\" : \"1155\",\n creator: token.creator,\n totalMinted: BigInt(token.totalMinted),\n maxSupply: BigInt(token.maxSupply),\n contractVersion: token.contract.contractVersion,\n };\n}\n","import { Address } from \"viem\";\nimport { ISubgraphQuerier } from \"../apis/subgraph-querier\";\nimport { IOnchainMintGetter, SaleType } from \"./types\";\nimport {\n buildContractTokensQuery,\n buildNftTokenSalesQuery,\n buildPremintsOfContractQuery,\n} from \"./subgraph-queries\";\nimport { SubgraphGetter } from \"src/apis/subgraph-getter\";\nimport { parseAndFilterTokenQueryResult } from \"./strategies-parsing\";\n\nexport class SubgraphMintGetter\n extends SubgraphGetter\n implements IOnchainMintGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n getMintable: IOnchainMintGetter[\"getMintable\"] = async ({\n tokenAddress,\n tokenId,\n }) => {\n const token = await this.querySubgraphWithRetries(\n buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n }),\n );\n\n if (!token) {\n throw new Error(\"Cannot find token\");\n }\n\n return token;\n };\n\n async getContractMintable({\n tokenAddress,\n preferredSaleType,\n blockTime,\n }: {\n tokenAddress: Address;\n preferredSaleType?: SaleType;\n blockTime: bigint;\n }) {\n const tokens = await this.querySubgraphWithRetries(\n buildContractTokensQuery({\n tokenAddress,\n }),\n );\n\n if (!tokens || tokens.length === 0) return [];\n\n return tokens\n .filter((x) => x.tokenId !== \"0\")\n .map((token) =>\n parseAndFilterTokenQueryResult({\n token,\n tokenId: token.tokenId,\n preferredSaleType,\n blockTime,\n }),\n );\n }\n\n async getContractPremintTokenIds({\n tokenAddress,\n }: {\n tokenAddress: Address;\n }) {\n const premints = await this.querySubgraphWithRetries(\n buildPremintsOfContractQuery({\n tokenAddress,\n }),\n );\n\n return (\n premints?.map((premint) => ({\n tokenId: BigInt(premint.tokenId),\n uid: +premint.uid,\n })) || []\n );\n }\n}\n","import { Account, Address } from \"viem\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n WithPublicClient,\n} from \"src/types\";\nimport { AllowListEntry } from \"src/allow-list/types\";\nimport { TokenQueryResult } from \"./subgraph-queries\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nexport type MintParameters<MintType> = {\n /** Type of the collection to be minted. */\n mintType: MintType;\n};\n\nexport type Erc1155MintParameters = MintParameters<\"1155\"> & {\n /** Token id to mint */\n tokenId: GenericTokenIdTypes;\n};\n\nexport type Erc721MintParameters = MintParameters<\"721\">;\n\nexport type OnChainMintParameters =\n | Erc1155MintParameters\n | Erc721MintParameters;\n\nexport type PremintMintParameters = MintParameters<\"premint\"> & {\n /** uid of the Premint to mint */\n uid: number;\n};\n\nexport type MintType = \"1155\" | \"721\" | \"allowlist\" | \"premint\";\n\nexport type MintTypes =\n | Erc1155MintParameters\n | Erc721MintParameters\n | PremintMintParameters;\n\nexport type GetMintParametersArguments = MintTypes & {\n /** Address of the contract that the item belongs to */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\ntype WithOptionalGetters<T> = T & {\n /** Optional override for getting onchain mints using indexed events */\n mintGetter?: IOnchainMintGetter;\n /** Optional override for getting premints */\n premintGetter?: IPremintGetter;\n};\n\nexport type WithPublicClientAndOptionalGetters<T> = WithOptionalGetters<\n WithPublicClient<T>\n>;\n\nexport type WithPublicClientAndRequiredGetters<T> = WithPublicClient<T> & {\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n};\n\nexport type GetMintParameters =\n WithPublicClientAndOptionalGetters<GetMintParametersArguments>;\n\nexport type GetMintsOfContractParametersArguments = {\n /** Address of the contract to get the tokens of */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport type GetMintsOfContractParameters =\n WithPublicClientAndOptionalGetters<GetMintsOfContractParametersArguments>;\n\nexport const isOnChainMint = (mint: MintTypes): mint is OnChainMintParameters =>\n mint.mintType !== \"premint\";\n\nexport const is1155Mint = (mint: MintTypes): mint is Erc1155MintParameters =>\n mint.mintType === \"1155\";\n\nexport type MintParametersBase = {\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Quantity of tokens to mint. Defaults to 1 */\n quantityToMint: number | bigint;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens. Defaults to the minting account */\n mintRecipient?: Address;\n /** If this is a premint, the address to get the first minter reward */\n firstMinter?: Address;\n /** If this is an allow list mint, the info for the allow list entry */\n allowListEntry?: AllowListEntry;\n};\n\nexport type MakeMintParametersArgumentsBase = MintParametersBase & {\n /** Premint contract address */\n tokenContract: Address;\n};\n\nexport type Make1155MintArguments = MakeMintParametersArgumentsBase &\n Erc1155MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type Make721MintArguments = MakeMintParametersArgumentsBase &\n Erc721MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type MakePremintMintParametersArguments =\n MakeMintParametersArgumentsBase &\n PremintMintParameters & {\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n };\n\nexport type MakeMintParametersArguments =\n | Make1155MintArguments\n | Make721MintArguments\n | MakePremintMintParametersArguments;\n\nexport type MakeMintParameters =\n WithPublicClient<MakeMintParametersArguments> & {\n mintGetter?: IOnchainMintGetter;\n premintGetter?: IPremintGetter;\n };\n\nexport type GetMintCostsParameterArguments = {\n /** Address of token contract/collection to get the mint costs for */\n collection: Address;\n /** Quantity of tokens that will be minted */\n quantityMinted: number | bigint;\n} & MintTypes;\n\nexport type SaleType =\n | \"fixedPrice\"\n | \"erc20\"\n | \"allowlist\"\n | \"premint\"\n | \"timed\";\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n mintFeePerQuantity: bigint;\n};\n\ntype PricedSaleStrategy = {\n pricePerToken: bigint;\n maxTokensPerAddress: bigint;\n};\n\nexport type StartAndEnd = {\n saleStart: string;\n saleEnd: string;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\"> &\n PricedSaleStrategy &\n StartAndEnd & {\n address: Address;\n };\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> &\n PricedSaleStrategy &\n StartAndEnd & {\n address: Address;\n currency: Address;\n };\n\ntype AllowListSaleStrategy = SaleStrategy<\"allowlist\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n merkleRoot: string;\n};\n\nexport type ZoraTimedSaleStrategy = SaleStrategy<\"timed\"> & {\n mintFee: bigint;\n erc20Z: Address;\n pool: Address;\n secondaryActivated: boolean;\n address: Address;\n saleStart: string;\n saleEnd?: string;\n minimumMarketEth?: bigint;\n marketCountdown?: bigint;\n};\n\ntype PremintSaleStrategy = SaleStrategy<\"premint\"> &\n PricedSaleStrategy & {\n duration: bigint;\n };\n\nexport type OnchainSalesStrategies =\n | FixedPriceSaleStrategy\n | ERC20SaleStrategy\n | AllowListSaleStrategy\n | ZoraTimedSaleStrategy;\n\nexport type SaleStrategies = OnchainSalesStrategies | PremintSaleStrategy;\n\nexport function isErc20SaleStrategy(\n salesConfig: SaleStrategies,\n): salesConfig is ERC20SaleStrategy {\n return salesConfig.saleType === \"erc20\";\n}\n\nexport function isTimedSaleStrategy(\n salesConfig: SaleStrategies,\n): salesConfig is ZoraTimedSaleStrategy {\n return salesConfig.saleType === \"timed\";\n}\n\nexport type ContractInfo = {\n /** Address of the contract */\n address: Address;\n /** Contract metadata uri */\n URI: string;\n /** Contract name */\n name: string;\n};\n\nexport type MintableBase = {\n /** The contract the mintable belongs to */\n contract: ContractInfo;\n /** Token metadata URI */\n tokenURI: string;\n /** Creator of the mintable item */\n creator: Address;\n /** Maximum total number of items that can be minted */\n maxSupply: bigint;\n /** Total number of items minted so far */\n totalMinted: bigint;\n};\n\nexport type OnchainMintable = MintableBase & {\n mintType: \"721\" | \"1155\";\n tokenId?: bigint;\n contractVersion: string;\n};\n\nexport type PremintMintable = MintableBase & {\n mintType: \"premint\";\n uid: number;\n};\n\nexport type OnchainSalesConfigAndTokenInfo = {\n salesConfig?: OnchainSalesStrategies;\n} & OnchainMintable;\n\nexport type PremintSalesConfigAndTokenInfo = {\n salesConfig: PremintSaleStrategy;\n} & PremintMintable;\n\nexport type SalesConfigAndTokenInfo =\n | OnchainSalesConfigAndTokenInfo\n | PremintMintable;\n\nexport type GetMintableReturn = {\n salesConfigAndTokenInfo: OnchainSalesConfigAndTokenInfo;\n secondaryMarketActive: boolean;\n primaryMintActive: boolean;\n primaryMintEnd?: bigint;\n};\n\nexport interface IOnchainMintGetter {\n getMintable(params: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n }): Promise<TokenQueryResult>;\n\n getContractMintable(params: {\n tokenAddress: Address;\n }): Promise<GetMintableReturn[]>;\n\n getContractPremintTokenIds(params: {\n tokenAddress: Address;\n }): Promise<{ tokenId: BigInt; uid: number }[]>;\n}\n\nexport type MintCosts = {\n /** The total of the mint fee, in eth */\n mintFee: bigint;\n /** If it is a paid or erc20 mint, the total price of the paid or erc20 mint in eth or erc20 value correspondingly. */\n totalPurchaseCost: bigint;\n /** If it is an erc20 mint, the erc20 address */\n totalPurchaseCostCurrency?: Address;\n /** The total cost in eth (mint fee + purchase cost) to mint */\n totalCostEth: bigint;\n};\n\nexport type Erc20Approval = {\n /** ERC20 token address that must be approved */\n erc20: Address;\n /** Quantity of ERC20 that must be approved */\n quantity: bigint;\n /** Address that must be approved to transfer to */\n approveTo: Address;\n};\n\nexport type PrepareMintReturn = {\n /** Prepared parameters to execute the mint transaction */\n parameters: SimulateContractParametersWithAccount;\n /** If an erc20 approval is necessary, information for the erc20 approval */\n erc20Approval?: Erc20Approval;\n /** Cost breakdown to mint the quantity of tokens */\n costs: MintCosts;\n};\n\nexport type PrepareMint = (params: MintParametersBase) => PrepareMintReturn;\nexport type AsyncPrepareMint = (\n params: MintParametersBase,\n) => Promise<PrepareMintReturn>;\n\nexport type MintableReturn = {\n /** Token information */\n token: SalesConfigAndTokenInfo;\n /** If the primary mint is active, the end time of the primary mint, if there is an end time */\n primaryMintEnd?: bigint;\n secondaryMarketActive: boolean;\n} & (\n | {\n primaryMintActive: true;\n /** Function that takes a quantity of items to mint and returns a prepared transaction and the costs to mint that quantity. If the primary mint is not active, it will be undefined. */\n prepareMint: PrepareMint;\n }\n | {\n primaryMintActive: false;\n prepareMint?: undefined;\n }\n);\n","import {\n IPremintGetter,\n PremintAPIClient,\n} from \"src/premint/premint-api-client\";\nimport {\n ContractInfo,\n Erc20Approval,\n GetMintCostsParameterArguments,\n GetMintParameters,\n IOnchainMintGetter,\n MintParametersBase,\n MintableReturn,\n OnchainSalesConfigAndTokenInfo,\n PremintSalesConfigAndTokenInfo,\n PrepareMint,\n is1155Mint,\n isOnChainMint,\n GetMintableReturn,\n GetMintsOfContractParameters,\n WithPublicClientAndRequiredGetters,\n} from \"./types\";\nimport { Address, zeroAddress } from \"viem\";\nimport {\n getPremintMintCostsWithUnknownTokenPrice,\n getPremintMintFee,\n} from \"src/premint/preminter\";\nimport {\n PremintFromApi,\n isPremintConfigV1,\n isPremintConfigV2,\n} from \"src/premint/conversions\";\nimport { makeOnchainMintCall, parseMintCosts } from \"./mint-transactions\";\nimport { buildPremintMintCall } from \"src/premint/premint-client\";\nimport { AllowListEntry } from \"src/allow-list/types\";\nimport { Concrete } from \"src/utils\";\nimport { parseAndFilterTokenQueryResult } from \"./strategies-parsing\";\nimport { SubgraphMintGetter } from \"./subgraph-mint-getter\";\n\n/**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParameters}\n * @returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\nexport async function getToken(\n params: GetMintParameters,\n): Promise<MintableReturn> {\n const { premintGetter, publicClient } = params;\n const chainId = publicClient.chain.id;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const blockTime = (await publicClient.getBlock()).timestamp;\n const mintGetterOrDefault =\n params.mintGetter ?? new SubgraphMintGetter(chainId);\n const result = await mintGetterOrDefault.getMintable({\n tokenId,\n tokenAddress: params.tokenContract,\n });\n\n const token = parseAndFilterTokenQueryResult({\n token: result,\n tokenId,\n preferredSaleType: params.preferredSaleType,\n blockTime,\n });\n\n return toMintableReturn(token, chainId);\n }\n\n const premintGetterOrDefault = premintGetter ?? new PremintAPIClient(chainId);\n const premint = await premintGetterOrDefault.get({\n collectionAddress: params.tokenContract,\n uid: params.uid,\n });\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return toPremintMintReturn({ premint, mintFee });\n}\nexport async function getPremintsOfCollectionWithTokenIds({\n premintGetter,\n mintGetter,\n tokenContract,\n}: {\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n tokenContract: Address;\n}) {\n const { collection, premints } = await premintGetter.getOfCollection({\n collectionAddress: tokenContract,\n });\n\n const premintUidsAndTokenIds = await mintGetter.getContractPremintTokenIds({\n tokenAddress: tokenContract,\n });\n\n const premintsWithTokenId = premints.map((premint) => ({\n ...premint,\n tokenId: premintUidsAndTokenIds.find(\n ({ uid }) => uid === premint.premint.premintConfig.uid,\n )?.tokenId,\n }));\n\n return {\n collection: collection,\n premints: premintsWithTokenId,\n };\n}\n\n/**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\nexport async function getTokensOfContract({\n mintGetter,\n premintGetter,\n publicClient,\n ...params\n}: GetMintsOfContractParameters): Promise<{\n contract?: ContractInfo;\n tokens: MintableReturn[];\n}> {\n const chainId = publicClient.chain.id;\n const mintGetterOrDefault: IOnchainMintGetter =\n mintGetter ?? new SubgraphMintGetter(chainId);\n const onchainMints = (\n await mintGetterOrDefault.getContractMintable({\n tokenAddress: params.tokenContract,\n })\n ).map((result) => toMintableReturn(result, chainId));\n\n const offchainMints = await getPremintsOfContractMintable({\n mintGetter: mintGetterOrDefault,\n premintGetter: premintGetter ?? new PremintAPIClient(chainId),\n publicClient,\n params: {\n tokenContract: params.tokenContract,\n },\n });\n\n const tokens = [...onchainMints, ...offchainMints];\n\n return {\n tokens: tokens,\n contract: tokens[0]?.token.contract,\n };\n}\n\n/**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameterArguments}\n * @returns Costs to mint the quantity of tokens specified\n */\nexport async function getMintCosts({\n params,\n allowListEntry,\n mintGetter,\n premintGetter,\n publicClient,\n}: WithPublicClientAndRequiredGetters<{\n params: GetMintCostsParameterArguments;\n allowListEntry?: Pick<AllowListEntry, \"price\">;\n}>) {\n const { quantityMinted: quantityToMint, collection } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const blockTime = (await publicClient.getBlock()).timestamp;\n const result = await mintGetter.getMintable({\n tokenId,\n tokenAddress: collection,\n });\n\n const token = parseAndFilterTokenQueryResult({\n token: result,\n tokenId,\n blockTime,\n });\n\n if (!token.salesConfigAndTokenInfo.salesConfig) {\n throw new Error(\"No valid sales config found for token\");\n }\n\n return parseMintCosts({\n salesConfig: token.salesConfigAndTokenInfo.salesConfig,\n quantityToMint: BigInt(quantityToMint),\n allowListEntry,\n });\n }\n\n return getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n publicClient: publicClient,\n quantityToMint: BigInt(quantityToMint),\n uid: params.uid,\n tokenContract: collection,\n });\n}\n\nasync function getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params,\n}: WithPublicClientAndRequiredGetters<{\n params: { tokenContract: Address };\n}>): Promise<MintableReturn[]> {\n const { premints, collection } = await getPremintsOfCollectionWithTokenIds({\n mintGetter,\n premintGetter,\n tokenContract: params.tokenContract,\n });\n\n const offChainPremints = premints.filter(\n (premint) =>\n // if premint's uid is not in the list of uids from the subgraph, it is offchain\n typeof premint.tokenId === \"undefined\",\n );\n\n if (offChainPremints.length === 0) return [];\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return offChainPremints.map((premint) => {\n return toPremintMintReturn({\n premint: {\n premint: premint.premint,\n // todo: fix when api returns signer\n signer: zeroAddress,\n collection,\n collectionAddress: params.tokenContract,\n signature: premint.signature,\n },\n mintFee,\n });\n });\n}\n\nexport function isPrimaryMintActive(\n premint: Pick<PremintFromApi, \"premint\">[\"premint\"],\n) {\n const currentTime = new Date().getTime() / 1000;\n\n return premint.premintConfig.tokenConfig.mintStart < currentTime;\n}\n/** Parsing */\n\nfunction parsePremint({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\"\n >;\n mintFee: bigint;\n}): PremintSalesConfigAndTokenInfo {\n if (\n isPremintConfigV1(premint.premint) ||\n isPremintConfigV2(premint.premint)\n ) {\n return {\n creator: premint.signer,\n maxSupply: premint.premint.premintConfig.tokenConfig.maxSupply,\n mintType: \"premint\",\n uid: premint.premint.premintConfig.uid,\n contract: {\n address: premint.collectionAddress,\n name: premint.collection!.contractName,\n URI: premint.collection!.contractURI,\n },\n tokenURI: premint.premint.premintConfig.tokenConfig.tokenURI,\n totalMinted: 0n,\n salesConfig: {\n duration: premint.premint.premintConfig.tokenConfig.mintDuration,\n maxTokensPerAddress:\n premint.premint.premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premint.premint.premintConfig.tokenConfig.pricePerToken,\n saleType: \"premint\",\n mintFeePerQuantity: mintFee,\n },\n };\n }\n\n throw new Error(\"Invalid premint config version\");\n}\n\nexport const makeOnchainPrepareMint =\n (result: OnchainSalesConfigAndTokenInfo, chainId: number): PrepareMint =>\n (params: MintParametersBase) => {\n if (!result.salesConfig) {\n throw new Error(\"No valid sales config found for token\");\n }\n\n return {\n parameters: makeOnchainMintCall({\n token: result as Concrete<OnchainSalesConfigAndTokenInfo>,\n mintParams: params,\n chainId,\n }),\n erc20Approval: getRequiredErc20Approvals(params, result.salesConfig),\n costs: parseMintCosts({\n salesConfig: result.salesConfig,\n quantityToMint: BigInt(params.quantityToMint),\n allowListEntry: params.allowListEntry,\n }),\n };\n };\n\nexport function toMintableReturn(\n result: GetMintableReturn,\n chainId: number,\n): MintableReturn {\n const primaryMintActive = result.primaryMintActive;\n if (!primaryMintActive) {\n return {\n token: result.salesConfigAndTokenInfo,\n primaryMintActive,\n primaryMintEnd: result.primaryMintEnd,\n secondaryMarketActive: result.secondaryMarketActive,\n prepareMint: undefined,\n };\n }\n return {\n token: result.salesConfigAndTokenInfo,\n primaryMintActive,\n primaryMintEnd: result.primaryMintEnd,\n secondaryMarketActive: result.secondaryMarketActive,\n prepareMint: makeOnchainPrepareMint(\n result.salesConfigAndTokenInfo,\n chainId,\n ),\n };\n}\n\nconst makePremintPrepareMint = (\n mintable: PremintSalesConfigAndTokenInfo,\n mintFee: bigint,\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >,\n): PrepareMint => {\n return (params: MintParametersBase) => {\n return {\n parameters: buildPremintMintCall({\n mintArguments: params,\n mintFee,\n premint,\n }),\n costs: parseMintCosts({\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: mintable.salesConfig,\n allowListEntry: params.allowListEntry,\n }),\n };\n };\n};\n\nfunction toPremintMintReturn({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >;\n mintFee: bigint;\n}): MintableReturn {\n const mintable = parsePremint({ premint, mintFee });\n\n const primaryMintActive = isPrimaryMintActive(premint.premint);\n\n if (!primaryMintActive) {\n return {\n token: mintable,\n primaryMintActive,\n prepareMint: undefined,\n secondaryMarketActive: false,\n };\n }\n return {\n token: mintable,\n primaryMintActive,\n secondaryMarketActive: false,\n prepareMint: makePremintPrepareMint(mintable, mintFee, premint),\n };\n}\n\nexport function getRequiredErc20Approvals(\n params: MintParametersBase,\n salesConfig: OnchainSalesConfigAndTokenInfo[\"salesConfig\"],\n): Erc20Approval | undefined {\n if (salesConfig?.saleType !== \"erc20\") return undefined;\n\n return {\n quantity: salesConfig.pricePerToken * BigInt(params.quantityToMint),\n approveTo: salesConfig.address,\n erc20: salesConfig.currency,\n };\n}\n","import {\n Address,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n Hex,\n} from \"viem\";\nimport {\n erc20MinterABI,\n zoraCreator1155ImplABI,\n zoraTimedSaleStrategyABI,\n callerAndCommenterABI,\n callerAndCommenterAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { zora721Abi, zora1155LegacyAbi } from \"src/constants\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\nimport {\n Concrete,\n makeContractParameters,\n mintRecipientOrAccount,\n} from \"src/utils\";\nimport { MintCosts, SaleStrategies, isErc20SaleStrategy } from \"./types\";\nimport { MakeMintParametersArgumentsBase } from \"./types\";\n\nimport { contractSupportsNewMintFunction } from \"./utils\";\nimport { OnchainSalesConfigAndTokenInfo } from \"./types\";\nimport { AllowListEntry } from \"src/allow-list/types\";\n\nexport function makeOnchainMintCall({\n token,\n mintParams,\n chainId,\n}: {\n token: Concrete<OnchainSalesConfigAndTokenInfo>;\n mintParams: Omit<MakeMintParametersArgumentsBase, \"tokenContract\">;\n chainId: number;\n}): SimulateContractParametersWithAccount {\n if (token.mintType === \"721\") {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n ...mintParams,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n tokenId: token.tokenId!,\n chainId,\n ...mintParams,\n });\n}\n\nexport type MintableParameters = Pick<\n OnchainSalesConfigAndTokenInfo,\n \"contractVersion\" | \"salesConfig\"\n>;\n\nfunction makeZoraTimedSaleStrategyMintCall({\n minterAccount,\n salesConfigAndTokenInfo,\n mintQuantity,\n mintTo,\n tokenContract,\n tokenId,\n mintReferral,\n mintComment,\n chainId,\n}: {\n minterAccount: Address | Account;\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n mintQuantity: bigint;\n mintTo: Address;\n tokenContract: Address;\n tokenId: GenericTokenIdTypes;\n mintReferral?: Address;\n mintComment?: string;\n chainId: number;\n}) {\n // if there is a mint comment, use the caller and commenter\n if (mintComment && mintComment !== \"\") {\n return makeContractParameters({\n abi: callerAndCommenterABI,\n address:\n callerAndCommenterAddress[\n chainId as keyof typeof callerAndCommenterAddress\n ],\n functionName: \"timedSaleMintAndComment\",\n account: minterAccount,\n value:\n salesConfigAndTokenInfo.salesConfig.mintFeePerQuantity * mintQuantity,\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n tokenId,\n mintReferral || zeroAddress,\n mintComment,\n ],\n });\n }\n\n return makeContractParameters({\n abi: zoraTimedSaleStrategyABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n value:\n salesConfigAndTokenInfo.salesConfig.mintFeePerQuantity * mintQuantity,\n /* args: mintTo, quantity, collection, tokenId, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n mintReferral || zeroAddress,\n \"\",\n ],\n });\n}\n\nexport function makePrepareMint1155TokenParams({\n tokenContract: tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n allowListEntry,\n chainId,\n}: {\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n tokenId: GenericTokenIdTypes;\n chainId: number;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n | \"allowListEntry\"\n>): SimulateContractParameters<any, any, any, any, any, Address | Account> {\n const mintQuantity = BigInt(quantityToMint || 1);\n\n const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n\n if (saleType === \"fixedPrice\" || saleType === \"allowlist\") {\n return makeEthMintCall({\n mintComment,\n minterAccount,\n mintQuantity,\n mintReferral,\n mintTo,\n salesConfigAndTokenInfo,\n tokenContract,\n tokenId,\n allowListEntry,\n });\n }\n\n if (saleType === \"timed\") {\n return makeZoraTimedSaleStrategyMintCall({\n minterAccount,\n salesConfigAndTokenInfo,\n mintQuantity,\n mintTo,\n tokenContract,\n tokenId,\n mintReferral,\n mintComment,\n chainId,\n });\n }\n\n if (saleType === \"erc20\") {\n return makeContractParameters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken * mintQuantity,\n salesConfigAndTokenInfo.salesConfig.currency,\n mintReferral || zeroAddress,\n mintComment || \"\",\n ],\n });\n }\n\n throw new Error(\"Unsupported sale type\");\n}\n\nfunction makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n minterAccount,\n tokenContract,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParametersWithAccount {\n const actualQuantityToMint = BigInt(quantityToMint || 1);\n const mintValue = parseMintCosts({\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: actualQuantityToMint,\n allowListEntry: undefined,\n }).totalCostEth;\n\n return makeContractParameters({\n abi: zora721Abi,\n address: tokenContract,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintRecipientOrAccount({ mintRecipient, minterAccount }),\n actualQuantityToMint,\n mintComment || \"\",\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction makeFixedPriceMinterArguments({\n mintTo,\n mintComment,\n}: {\n mintTo: Address;\n mintComment?: string;\n}) {\n return encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintTo,\n mintComment || \"\",\n ]);\n}\n\nfunction makeAllowListMinterArguments({\n mintTo,\n allowListEntry,\n}: {\n mintTo: Address;\n allowListEntry: AllowListEntry;\n}) {\n return encodeAbiParameters(\n parseAbiParameters(\"address, uint256, uint256, bytes32[]\"),\n [\n mintTo,\n BigInt(allowListEntry.maxCanMint),\n allowListEntry.price,\n allowListEntry.proof,\n ],\n );\n}\n\nfunction makeEthMintCall({\n tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintQuantity,\n mintTo,\n allowListEntry,\n}: {\n minterAccount: Account | Address;\n tokenContract: Address;\n mintTo: Address;\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n tokenId: GenericTokenIdTypes;\n mintQuantity: bigint;\n mintComment?: string;\n mintReferral?: Address;\n allowListEntry?: AllowListEntry;\n}): SimulateContractParametersWithAccount {\n const mintValue = parseMintCosts({\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: mintQuantity,\n allowListEntry,\n }).totalCostEth;\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n let minterArguments: Hex;\n\n if (saleType === \"fixedPrice\") {\n minterArguments = makeFixedPriceMinterArguments({ mintTo, mintComment });\n } else if (saleType === \"allowlist\") {\n if (!allowListEntry) throw new Error(\"Missing allowListEntry\");\n minterArguments = makeAllowListMinterArguments({ mintTo, allowListEntry });\n } else {\n throw new Error(\"Unsupported sale type\");\n }\n\n // if based on contract version it has the new mint function,\n // call the new mint function.\n if (\n contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)\n ) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mint\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n mintReferral ? [mintReferral] : [],\n minterArguments,\n ],\n });\n }\n\n // otherwise call the deprecated mint function\n return makeContractParameters({\n abi: zora1155LegacyAbi,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n minterArguments,\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction paidMintCost(\n salesConfig: SaleStrategies,\n allowListEntry?: Pick<AllowListEntry, \"price\">,\n) {\n if (\n salesConfig.saleType === \"erc20\" ||\n salesConfig.saleType === \"fixedPrice\"\n ) {\n return salesConfig.pricePerToken;\n }\n\n if (allowListEntry) return allowListEntry.price;\n\n return 0n;\n}\n\nexport function parseMintCosts({\n salesConfig,\n quantityToMint,\n allowListEntry,\n}: {\n salesConfig: SaleStrategies;\n quantityToMint: bigint;\n allowListEntry: Pick<AllowListEntry, \"price\"> | undefined;\n}): MintCosts {\n const mintFeeForTokens = salesConfig.mintFeePerQuantity * quantityToMint;\n\n const tokenPurchaseCost =\n paidMintCost(salesConfig, allowListEntry) * quantityToMint;\n\n const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig)\n ? salesConfig.currency\n : undefined;\n\n const totalPurchaseCostEth = totalPurchaseCostCurrency\n ? 0n\n : tokenPurchaseCost;\n\n return {\n mintFee: mintFeeForTokens,\n totalPurchaseCost: tokenPurchaseCost,\n totalPurchaseCostCurrency,\n totalCostEth: mintFeeForTokens + totalPurchaseCostEth,\n };\n}\n","import * as semver from \"semver\";\nexport const contractSupportsNewMintFunction = (\n contractVersion?: string | null,\n) => {\n if (!contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n","import { Address } from \"viem\";\nimport { IPublicClient } from \"src/types\";\nimport {\n GetMintParametersArguments,\n IOnchainMintGetter,\n MakeMintParameters,\n MintCosts,\n PrepareMintReturn,\n SaleType,\n} from \"./types\";\nimport {\n MakeMintParametersArguments,\n GetMintCostsParameterArguments,\n} from \"./types\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nimport { getToken, getMintCosts, getTokensOfContract } from \"./mint-queries\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new MintClient().mint()`, use `mint()`\n * Import the functions you need directly from their respective modules:\n * import { mint, getToken, getTokensOfContract, getMintCosts } from '@zoralabs/protocol-sdk'\n */\nexport class MintClient {\n private readonly publicClient: IPublicClient;\n private readonly mintGetter: IOnchainMintGetter;\n private readonly premintGetter: IPremintGetter;\n constructor({\n publicClient,\n premintGetter,\n mintGetter,\n }: {\n publicClient: IPublicClient;\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n }) {\n this.publicClient = publicClient;\n this.mintGetter = mintGetter;\n this.premintGetter = premintGetter;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParametersArguments}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\n async mint(\n parameters: MakeMintParametersArguments,\n ): Promise<PrepareMintReturn> {\n return mint({\n ...parameters,\n publicClient: this.publicClient,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n });\n }\n\n /**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParametersArguments}\n * @Returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\n async get(parameters: GetMintParametersArguments) {\n return getToken({\n ...parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @Returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\n async getOfContract(params: {\n tokenContract: Address;\n preferredSaleType?: SaleType;\n }) {\n return getTokensOfContract({\n ...params,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameterArguments}\n * @returns Costs to mint the quantity of tokens specified\n */\n async getMintCosts(\n parameters: GetMintCostsParameterArguments,\n ): Promise<MintCosts> {\n return getMintCosts({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n}\n\n/**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParameters}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\nexport async function mint({\n publicClient,\n mintGetter,\n premintGetter,\n ...parameters\n}: MakeMintParameters): Promise<PrepareMintReturn> {\n const { prepareMint, primaryMintActive } = await getToken({\n ...parameters,\n mintGetter,\n premintGetter,\n publicClient,\n });\n\n if (!primaryMintActive) {\n throw new Error(\"Primary mint is not active\");\n }\n\n return prepareMint!({\n minterAccount: parameters.minterAccount,\n quantityToMint: parameters.quantityToMint,\n firstMinter: parameters.firstMinter,\n mintComment: parameters.mintComment,\n mintRecipient: parameters.mintRecipient,\n mintReferral: parameters.mintReferral,\n });\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n Transport,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog } from \"viem\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n getDeterministicContractAddress,\n getNewContractMintFee,\n new1155ContractVersion,\n} from \"./contract-setup\";\nimport {\n CreateNew1155ContractAndTokenReturn,\n CreateNew1155ContractParams,\n CreateNew1155ParamsBase,\n CreateNew1155TokenParams,\n CreateNew1155TokenReturn,\n PrepareCreateReturn,\n NewContractParams,\n} from \"./types\";\nimport { constructCreate1155TokenCalls } from \"./token-setup\";\nimport { makeOnchainPrepareMintFromCreate } from \"./mint-from-create\";\nimport { IContractGetter, SubgraphContractGetter } from \"./contract-getter\";\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n\n throw new Error(\n \"No event found in receipt that could be used to get tokenId\",\n );\n};\n\nexport const getContractAddressFromReceipt = (\n receipt: TransactionReceipt,\n): Address => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155FactoryImplABI,\n eventName: \"SetupNewContract\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewContract\") {\n return decodedLog.args.newContract;\n }\n } catch (err: any) {}\n }\n\n throw new Error(\n \"No event found in receipt that could be used to get contract address\",\n );\n};\n\ntype MakeContractParametersBase = {\n account: Address | Account;\n\n tokenSetupActions: Hex[];\n};\n\nexport function makeCreateContractAndTokenCall({\n account,\n contract,\n royaltyBPS,\n fundsRecipient,\n tokenSetupActions,\n chainId,\n}: {\n chainId: number;\n contract: NewContractParams;\n royaltyBPS?: number;\n fundsRecipient?: Address;\n} & MakeContractParametersBase) {\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n return makeContractParameters({\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: fundsRecipient || accountAddress,\n },\n contract.defaultAdmin || accountAddress,\n tokenSetupActions,\n ],\n });\n}\n\nexport function makeCreateTokenCall({\n contractAddress,\n account,\n tokenSetupActions,\n}: {\n contractAddress: Address;\n} & MakeContractParametersBase) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n });\n}\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new Create1155Client().createNew1155()`, use `createNew1155()`\n * Import the functions you need directly from their respective modules:\n * import { createNew1155, createNew1155OnExistingContract } from '@zoralabs/protocol-sdk'\n */\nexport class Create1155Client {\n private readonly publicClient: Pick<\n PublicClient<Transport, Chain>,\n \"readContract\" | \"chain\"\n >;\n public readonly contractGetter: IContractGetter;\n\n constructor({\n publicClient,\n contractGetter,\n }: {\n publicClient: Pick<\n PublicClient<Transport, Chain>,\n \"readContract\" | \"chain\"\n >;\n contractGetter: IContractGetter;\n }) {\n this.publicClient = publicClient;\n this.contractGetter = contractGetter;\n }\n\n async createNew1155(\n props: CreateNew1155ContractParams,\n ): Promise<CreateNew1155ContractAndTokenReturn> {\n return create1155({\n ...props,\n publicClient: this.publicClient,\n });\n }\n\n async createNew1155OnExistingContract({\n contractAddress: contract,\n account,\n token,\n getAdditionalSetupActions,\n }: CreateNew1155TokenParams): Promise<CreateNew1155TokenReturn> {\n return createNew1155Token({\n contractAddress: contract,\n account,\n token,\n getAdditionalSetupActions,\n contractGetter: this.contractGetter,\n chainId: this.publicClient.chain.id,\n });\n }\n}\n\nexport async function create1155({\n contract,\n account,\n token,\n publicClient,\n getAdditionalSetupActions,\n}: CreateNew1155ContractParams & {\n publicClient: Pick<PublicClient<Transport, Chain>, \"readContract\" | \"chain\">;\n}): Promise<CreateNew1155ContractAndTokenReturn> {\n const nextTokenId = 1n;\n const chainId = publicClient.chain.id;\n const contractVersion = new1155ContractVersion(chainId);\n\n const result = prepareNew1155ContractAndToken({\n contract,\n account,\n chainId,\n token,\n getAdditionalSetupActions,\n nextTokenId,\n contractVersion,\n });\n\n const contractAddress = await getDeterministicContractAddress({\n account: typeof account === \"string\" ? account : account.address,\n publicClient,\n setupActions: result.setupActions,\n contract,\n });\n\n const prepareMint = makeOnchainPrepareMintFromCreate({\n contractAddress,\n contractVersion,\n minter: result.minter,\n result: result.newToken.salesConfig,\n tokenId: nextTokenId,\n chainId,\n // to get the contract wide mint fee, we get what it would be for a new contract\n getContractMintFee: async () =>\n getNewContractMintFee({\n publicClient,\n chainId,\n }),\n });\n\n return {\n ...result,\n prepareMint,\n contractAddress,\n contractVersion,\n tokenId: nextTokenId,\n };\n}\n\nfunction prepareNew1155ContractAndToken({\n account,\n chainId,\n token,\n getAdditionalSetupActions,\n nextTokenId,\n contractVersion,\n contract,\n}: CreateNew1155ContractParams & {\n chainId: number;\n nextTokenId: bigint;\n contractVersion: string;\n}): PrepareCreateReturn {\n const { minter, newToken, setupActions } = prepareSetupActions({\n chainId,\n account,\n contractVersion: contractVersion,\n nextTokenId: nextTokenId,\n token,\n getAdditionalSetupActions,\n contractName: contract.name,\n });\n\n const request = makeCreateContractAndTokenCall({\n contract,\n account,\n chainId,\n tokenSetupActions: setupActions,\n fundsRecipient: token.payoutRecipient,\n royaltyBPS: token.royaltyBPS,\n });\n\n return {\n parameters: request,\n setupActions,\n newToken,\n minter,\n };\n}\n\nfunction prepareNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n nextTokenId,\n contractVersion,\n contractName,\n}: Omit<CreateNew1155TokenParams, \"contractGetter\"> & {\n chainId: number;\n nextTokenId: bigint;\n contractVersion: string;\n contractName: string;\n}): PrepareCreateReturn {\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = prepareSetupActions({\n chainId,\n account,\n contractVersion,\n nextTokenId,\n token,\n getAdditionalSetupActions,\n contractName,\n });\n\n const request = makeCreateTokenCall({\n contractAddress,\n account,\n tokenSetupActions,\n });\n\n return {\n parameters: request,\n setupActions: tokenSetupActions,\n newToken,\n minter,\n };\n}\n\nexport async function createNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n contractGetter,\n}: CreateNew1155TokenParams & {\n chainId: number;\n contractGetter?: IContractGetter;\n}): Promise<CreateNew1155TokenReturn> {\n const contractGetterOrDefault =\n contractGetter ?? new SubgraphContractGetter(chainId);\n const { nextTokenId, contractVersion, mintFee, name } =\n await contractGetterOrDefault.getContractInfo({\n contractAddress,\n retries: 5,\n });\n\n const preparedToken = prepareNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n nextTokenId,\n contractVersion,\n contractName: name,\n });\n\n const prepareMint = makeOnchainPrepareMintFromCreate({\n contractAddress: contractAddress,\n contractVersion,\n minter: preparedToken.minter,\n result: preparedToken.newToken.salesConfig,\n tokenId: nextTokenId,\n getContractMintFee: async () => mintFee,\n chainId,\n });\n\n return {\n ...preparedToken,\n prepareMint,\n tokenId: nextTokenId,\n contractVersion,\n };\n}\n\nexport function prepareSetupActions({\n chainId,\n account,\n contractVersion,\n nextTokenId,\n token,\n contractName,\n getAdditionalSetupActions,\n}: {\n chainId: number;\n contractVersion: string;\n nextTokenId: bigint;\n contractName: string;\n} & CreateNew1155ParamsBase) {\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = constructCreate1155TokenCalls({\n chainId: chainId,\n ownerAddress: typeof account === \"string\" ? account : account.address,\n contractVersion,\n nextTokenId,\n ...token,\n contractName,\n });\n\n const setupActions = getAdditionalSetupActions\n ? [\n ...getAdditionalSetupActions({\n tokenId: nextTokenId,\n }),\n ...tokenSetupActions,\n ]\n : tokenSetupActions;\n\n return { minter, newToken, setupActions };\n}\n","import { Address, Hex, PublicClient, Transport, Chain } from \"viem\";\nimport {\n contracts1155,\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport { NewContractParams } from \"./types\";\n\ntype contracts1155Address = keyof typeof contracts1155.addresses;\nexport function new1155ContractVersion(chainId: number): string {\n // todo: get from subgraph\n const address = contracts1155.addresses[chainId as contracts1155Address];\n if (!address) {\n throw new Error(`No contract address for chainId ${chainId}`);\n }\n\n return address.CONTRACT_1155_IMPL_VERSION;\n}\n\nexport async function getDeterministicContractAddress({\n publicClient,\n account,\n setupActions,\n contract,\n}: {\n account: Address;\n publicClient: Pick<PublicClient<Transport, Chain>, \"readContract\" | \"chain\">;\n setupActions: Hex[];\n contract: NewContractParams;\n // Account that is the creator of the contract\n}): Promise<Address> {\n const chainId = publicClient.chain.id;\n const contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n functionName: \"deterministicContractAddressWithSetupActions\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n setupActions,\n ],\n });\n\n return contractAddress;\n}\n\nexport async function getNewContractMintFee({\n publicClient,\n chainId,\n}: {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n}) {\n const implAddress = contracts1155.addresses[chainId as contracts1155Address]\n .CONTRACT_1155_IMPL as Address;\n\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: implAddress,\n functionName: \"mintFee\",\n });\n}\n","import { zoraCreator1155ImplABI } from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, zeroAddress, Hex } from \"viem\";\nimport * as semver from \"semver\";\nimport { ContractProps, CreateNew1155TokenProps, New1155Token } from \"./types\";\nimport { OPEN_EDITION_MINT_SIZE } from \"src/constants\";\nimport { getSalesConfigWithDefaults } from \"./minter-defaults\";\nimport { setupMinters } from \"./minter-setup\";\n\nfunction applyNew1155Defaults(\n props: CreateNew1155TokenProps,\n ownerAddress: Address,\n contractName: string,\n): New1155Token {\n const { payoutRecipient: fundsRecipient } = props;\n const fundsRecipientOrOwner =\n fundsRecipient && fundsRecipient !== zeroAddress\n ? fundsRecipient\n : ownerAddress;\n return {\n payoutRecipient: fundsRecipientOrOwner,\n createReferral: props.createReferral || zeroAddress,\n maxSupply:\n typeof props.maxSupply === \"undefined\"\n ? OPEN_EDITION_MINT_SIZE\n : BigInt(props.maxSupply),\n royaltyBPS: props.royaltyBPS || 1000,\n tokenMetadataURI: props.tokenMetadataURI,\n salesConfig: getSalesConfigWithDefaults(props.salesConfig, contractName),\n };\n}\n\nfunction buildSetupNewToken({\n tokenURI,\n maxSupply = OPEN_EDITION_MINT_SIZE,\n createReferral = zeroAddress,\n contractVersion,\n}: {\n tokenURI: string;\n maxSupply: bigint;\n createReferral: Address;\n contractVersion?: string;\n}): Hex {\n // If we're adding a new token to an existing contract which doesn't support\n // creator rewards, we won't have the 'setupNewTokenWithCreateReferral' method\n // available, so we need to check for that and use the fallback method instead.\n if (contractSupportsMintRewards(contractVersion, \"ERC1155\")) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenURI, BigInt(maxSupply), createReferral],\n });\n }\n\n if (createReferral !== zeroAddress) {\n throw new Error(\n \"Contract does not support create referral, but one was provided\",\n );\n }\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenURI, BigInt(maxSupply)],\n });\n}\n\nfunction setupRoyaltyConfig({\n royaltyBPS,\n royaltyRecipient,\n nextTokenId,\n}: {\n royaltyBPS: number;\n royaltyRecipient: Address;\n nextTokenId: bigint;\n}) {\n if (royaltyBPS > 0 && royaltyRecipient != zeroAddress) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyBPS,\n royaltyRecipient,\n royaltyMintSchedule: 0,\n },\n ],\n });\n }\n\n return null;\n}\n\nfunction makeAdminMintCall({\n ownerAddress,\n mintQuantity,\n nextTokenId,\n}: {\n ownerAddress: Address;\n mintQuantity?: number;\n nextTokenId: bigint;\n}) {\n if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {\n return null;\n }\n\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress],\n });\n}\n\nexport function constructCreate1155TokenCalls(\n props: CreateNew1155TokenProps &\n ContractProps & {\n ownerAddress: Address;\n chainId: number;\n } & {\n contractName: string;\n },\n): {\n setupActions: `0x${string}`[];\n newToken: New1155Token;\n minter: Address;\n} {\n const {\n chainId,\n nextTokenId,\n mintToCreatorCount,\n ownerAddress,\n contractVersion,\n } = props;\n\n const new1155TokenPropsWithDefaults = applyNew1155Defaults(\n props,\n ownerAddress,\n props.contractName,\n );\n\n const verifyTokenIdExpected = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n });\n\n const setupNewToken = buildSetupNewToken({\n tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,\n maxSupply: new1155TokenPropsWithDefaults.maxSupply,\n createReferral: new1155TokenPropsWithDefaults.createReferral,\n contractVersion,\n });\n\n const royaltyConfig = setupRoyaltyConfig({\n royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,\n royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n nextTokenId,\n });\n\n const { minter, setupActions: mintersSetup } = setupMinters({\n tokenId: nextTokenId,\n chainId,\n fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n salesConfig: new1155TokenPropsWithDefaults.salesConfig,\n });\n\n const adminMintCall = makeAdminMintCall({\n ownerAddress,\n mintQuantity: mintToCreatorCount,\n nextTokenId,\n });\n\n const setupActions = [\n verifyTokenIdExpected,\n setupNewToken,\n ...mintersSetup,\n royaltyConfig,\n adminMintCall,\n ].filter((item) => item !== null) as `0x${string}`[];\n\n return {\n setupActions,\n minter,\n newToken: new1155TokenPropsWithDefaults,\n };\n}\n\nexport const contractSupportsMintRewards = (\n contractVersion?: string | null,\n contractStandard?: \"ERC721\" | \"ERC1155\",\n) => {\n if (!contractStandard || !contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n if (contractStandard === \"ERC1155\") {\n return semver.gte(semVerContractVersion, \"1.3.5\");\n } else {\n return semver.gte(semVerContractVersion, \"14.0.0\");\n }\n};\n","import { Concrete } from \"src/utils\";\nimport {\n SalesConfigParamsType,\n AllowListParamType,\n Erc20ParamsType,\n FixedPriceParamsType,\n SaleStartAndEnd,\n MaxTokensPerAddress,\n ConcreteSalesConfig,\n TimedSaleParamsType,\n} from \"./types\";\nimport { parseEther } from \"viem\";\n\n// The amount of eth per mint for the secondary market\nexport const MARKET_REWARD_V2 = parseEther(\"0.0000222\");\n// 1111 mints worth of market reward eth - 0.0000222 eth * 1,111 = 0.0246642 eth\nexport const DEFAULT_MINIMUM_MARKET_ETH = parseEther(\"0.0246642\");\n// 24 hour countdown\nexport const DEFAULT_MARKET_COUNTDOWN = BigInt(24 * 60 * 60);\n\n// Sales end forever amount (uint64 max)\nexport const SALE_END_FOREVER = 18446744073709551615n;\n\nconst DEFAULT_SALE_START_AND_END = (): Concrete<SaleStartAndEnd> => ({\n // Sale start time – defaults to current time in seconds\n saleStart: BigInt(Math.floor(new Date().getTime() / 1000)),\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n});\n\nconst DEFAULT_MAX_TOKENS_PER_ADDRESS: Concrete<MaxTokensPerAddress> = {\n maxTokensPerAddress: 0n,\n};\n\nconst erc20SaleSettingsWithDefaults = (\n params: Erc20ParamsType,\n): Concrete<Erc20ParamsType> => ({\n ...DEFAULT_SALE_START_AND_END(),\n ...DEFAULT_MAX_TOKENS_PER_ADDRESS,\n ...params,\n});\n\nconst allowListWithDefaults = (\n allowlist: AllowListParamType,\n): Concrete<AllowListParamType> => {\n return {\n ...DEFAULT_SALE_START_AND_END(),\n ...allowlist,\n };\n};\n\nconst fixedPriceSettingsWithDefaults = (\n params: FixedPriceParamsType,\n): Concrete<FixedPriceParamsType> => ({\n ...DEFAULT_SALE_START_AND_END(),\n ...DEFAULT_MAX_TOKENS_PER_ADDRESS,\n type: \"fixedPrice\",\n ...params,\n});\n\nexport const parseNameIntoSymbol = (name: string) => {\n if (name === \"\") {\n throw new Error(\"Name must be provided to generate a symbol\");\n }\n const result =\n \"$\" +\n name\n // Remove all non-alphanumeric characters\n .replace(/[^a-zA-Z0-9]/g, \"\")\n // and leading dollar signs\n .replace(/^\\$+/, \"\")\n .toUpperCase()\n // Remove all vowels and spaces\n .replace(/[AEIOU\\s]/g, \"\")\n // Strip down to 4 characters\n .slice(0, 4);\n\n if (result === \"$\") {\n throw new Error(\"Not enough valid characters to generate a symbol\");\n }\n\n return result;\n};\n\nconst getMinimumMarketEth = (\n params: Pick<\n TimedSaleParamsType,\n \"minimumMarketEth\" | \"minimumMintsForCountdown\"\n >,\n) => {\n if (params.minimumMintsForCountdown) {\n return params.minimumMintsForCountdown * MARKET_REWARD_V2;\n }\n return params.minimumMarketEth || DEFAULT_MINIMUM_MARKET_ETH;\n};\n\nconst timedSaleSettingsWithDefaults = (\n params: TimedSaleParamsType,\n contractName: string,\n): Concrete<TimedSaleParamsType> => {\n // If the name is not provided, try to fetch it from the metadata\n const erc20Name = params.erc20Name || contractName;\n const minimumMarketEth = getMinimumMarketEth({\n minimumMarketEth: params.minimumMarketEth,\n minimumMintsForCountdown: params.minimumMintsForCountdown,\n });\n const minimumMintsForCountdown = minimumMarketEth / MARKET_REWARD_V2;\n\n return {\n type: \"timed\",\n erc20Name: erc20Name,\n erc20Symbol: params.erc20Symbol || parseNameIntoSymbol(erc20Name),\n saleStart: params.saleStart || 0n,\n marketCountdown: params.marketCountdown || DEFAULT_MARKET_COUNTDOWN,\n minimumMarketEth,\n minimumMintsForCountdown,\n };\n};\n\nconst isAllowList = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is AllowListParamType => salesConfig.type === \"allowlistMint\";\nconst isErc20 = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is Erc20ParamsType => salesConfig.type === \"erc20Mint\";\nconst isFixedPrice = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is FixedPriceParamsType => {\n return (\n salesConfig.type === \"fixedPrice\" ||\n (salesConfig as FixedPriceParamsType).pricePerToken > 0n\n );\n};\n\nexport const getSalesConfigWithDefaults = (\n salesConfig: SalesConfigParamsType | undefined,\n contractName: string,\n): ConcreteSalesConfig => {\n if (!salesConfig) return timedSaleSettingsWithDefaults({}, contractName);\n if (isAllowList(salesConfig)) {\n return allowListWithDefaults(salesConfig);\n }\n if (isErc20(salesConfig)) {\n return erc20SaleSettingsWithDefaults(salesConfig);\n }\n if (isFixedPrice(salesConfig)) {\n return fixedPriceSettingsWithDefaults(salesConfig);\n }\n\n return timedSaleSettingsWithDefaults(salesConfig, contractName);\n};\n","import {\n erc20MinterABI,\n erc20MinterAddress as erc20MinterAddresses,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n zoraCreatorMerkleMinterStrategyABI,\n zoraCreatorMerkleMinterStrategyAddress,\n zoraTimedSaleStrategyABI,\n zoraTimedSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, Hex } from \"viem\";\nimport {\n AllowlistData,\n ConcreteSalesConfig,\n AllowListParamType,\n Erc20ParamsType,\n FixedPriceParamsType,\n TimedSaleParamsType,\n} from \"./types\";\nimport { Concrete } from \"src/utils\";\n\nconst PERMISSION_BITS = {\n MINTER: 2n ** 2n,\n};\n\ntype SetupErc20MinterProps = {\n chainId: number;\n tokenId: bigint;\n fundsRecipient: Address;\n} & Concrete<Erc20ParamsType>;\n\ntype SetupMintersProps = {\n tokenId: bigint;\n chainId: number;\n fundsRecipient: Address;\n salesConfig: ConcreteSalesConfig;\n};\n\nfunction setupErc20Minter({\n pricePerToken,\n chainId,\n tokenId: nextTokenId,\n currency,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupErc20MinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const erc20MinterAddress =\n erc20MinterAddresses[chainId as keyof typeof erc20MinterAddresses];\n if (!erc20MinterAddress)\n throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);\n\n const erc20MinterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: erc20MinterABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n pricePerToken: pricePerToken,\n fundsRecipient,\n currency: currency,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), erc20MinterAddress, saleData],\n });\n\n return {\n minter: erc20MinterAddress,\n setupActions: [erc20MinterApproval, callSale],\n };\n}\n\ntype SetupFixedPriceMinterProps = {\n fundsRecipient: Address;\n tokenId: bigint;\n chainId: number;\n} & Concrete<FixedPriceParamsType>;\n\nfunction setupFixedPriceMinter({\n pricePerToken: price,\n tokenId: nextTokenId,\n chainId,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupFixedPriceMinterProps): { minter: Address; setupActions: Hex[] } {\n const fixedPriceStrategyAddress =\n zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ];\n const fixedPriceApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [\n BigInt(nextTokenId),\n fixedPriceStrategyAddress,\n PERMISSION_BITS.MINTER,\n ],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n pricePerToken: price,\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n fundsRecipient,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData],\n });\n\n return {\n minter: fixedPriceStrategyAddress,\n setupActions: [fixedPriceApproval, callSale],\n };\n}\n\ntype SetupTimedMinterProps = {\n tokenId: bigint;\n chainId: number;\n} & Concrete<TimedSaleParamsType>;\n\nfunction setupTimedSaleMinter({\n chainId,\n tokenId,\n erc20Name: erc20zName,\n erc20Symbol: erc20zSymbol,\n saleStart,\n marketCountdown,\n minimumMarketEth,\n}: SetupTimedMinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const minterAddress =\n zoraTimedSaleStrategyAddress[\n chainId as keyof typeof zoraTimedSaleStrategyAddress\n ];\n const minterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(tokenId), minterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraTimedSaleStrategyABI,\n functionName: \"setSaleV2\",\n args: [\n BigInt(tokenId),\n {\n saleStart,\n marketCountdown,\n minimumMarketEth,\n name: erc20zName,\n symbol: erc20zSymbol,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(tokenId), minterAddress, saleData],\n });\n\n return {\n minter: minterAddress,\n setupActions: [minterApproval, callSale],\n };\n}\n\nfunction setupAllowListMinter({\n chainId,\n tokenId: nextTokenId,\n allowlist,\n fundsRecipient,\n}: {\n chainId: number;\n tokenId: bigint;\n allowlist: Concrete<AllowlistData>;\n fundsRecipient: Address;\n}) {\n const merkleSaleStrategyAddress =\n zoraCreatorMerkleMinterStrategyAddress[\n chainId as keyof typeof zoraCreatorMerkleMinterStrategyAddress\n ];\n\n const merkleApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [nextTokenId, merkleSaleStrategyAddress, PERMISSION_BITS.MINTER],\n });\n\n const merkleRoot = allowlist.presaleMerkleRoot.startsWith(\"0x\")\n ? allowlist.presaleMerkleRoot\n : (`0x${allowlist.presaleMerkleRoot}` as Hex);\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorMerkleMinterStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n presaleStart: allowlist.saleStart,\n presaleEnd: allowlist.saleEnd,\n merkleRoot,\n fundsRecipient: fundsRecipient,\n },\n ],\n });\n\n const callSaleMerkle = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), merkleSaleStrategyAddress, saleData],\n });\n\n return {\n minter: merkleSaleStrategyAddress,\n setupActions: [merkleApproval, callSaleMerkle],\n };\n}\n\nconst isAllowList = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<AllowListParamType> =>\n salesConfig.type === \"allowlistMint\";\nconst isErc20 = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<Erc20ParamsType> => salesConfig.type === \"erc20Mint\";\nconst isFixedPrice = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<FixedPriceParamsType> =>\n salesConfig.type === \"fixedPrice\" ||\n (salesConfig as unknown as Concrete<FixedPriceParamsType>).pricePerToken >\n BigInt(0);\n\nexport function setupMinters({ salesConfig, ...rest }: SetupMintersProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n if (isErc20(salesConfig)) {\n return setupErc20Minter({\n ...salesConfig,\n ...rest,\n });\n }\n if (isAllowList(salesConfig)) {\n return setupAllowListMinter({\n allowlist: salesConfig,\n ...rest,\n });\n }\n\n if (isFixedPrice(salesConfig))\n return setupFixedPriceMinter({\n ...salesConfig,\n ...rest,\n });\n\n return setupTimedSaleMinter({\n ...salesConfig,\n ...rest,\n });\n}\n","import { Address, parseEther, zeroAddress } from \"viem\";\nimport { ConcreteSalesConfig } from \"./types\";\nimport {\n AsyncPrepareMint,\n MintParametersBase,\n OnchainSalesStrategies,\n PrepareMintReturn,\n} from \"src/mint/types\";\nimport {\n makePrepareMint1155TokenParams,\n parseMintCosts,\n} from \"src/mint/mint-transactions\";\nimport { getRequiredErc20Approvals } from \"src/mint/mint-queries\";\n\nasync function toSalesStrategyFromSubgraph({\n minter,\n salesConfig,\n getContractMintFee,\n}: {\n minter: Address;\n salesConfig: ConcreteSalesConfig;\n getContractMintFee: () => Promise<bigint>;\n}): Promise<OnchainSalesStrategies> {\n if (salesConfig.type === \"timed\") {\n return {\n saleType: \"timed\",\n address: minter,\n // for now we hardcode this\n mintFeePerQuantity: parseEther(\"0.000111\"),\n saleStart: salesConfig.saleStart.toString(),\n // the following are not needed for now but we wanna satisfy concrete\n erc20Z: zeroAddress,\n mintFee: 0n,\n pool: zeroAddress,\n secondaryActivated: false,\n };\n }\n if (salesConfig.type === \"erc20Mint\") {\n return {\n saleType: \"erc20\",\n address: minter,\n mintFeePerQuantity: 0n,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n currency: salesConfig.currency,\n pricePerToken: salesConfig.pricePerToken,\n maxTokensPerAddress: salesConfig.maxTokensPerAddress,\n };\n }\n const contractMintFee = await getContractMintFee();\n if (salesConfig.type === \"fixedPrice\") {\n return {\n saleType: \"fixedPrice\",\n address: minter,\n maxTokensPerAddress: salesConfig.maxTokensPerAddress,\n mintFeePerQuantity: contractMintFee,\n pricePerToken: salesConfig.pricePerToken,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n };\n }\n return {\n saleType: \"allowlist\",\n address: minter,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n merkleRoot: salesConfig.presaleMerkleRoot,\n mintFeePerQuantity: contractMintFee,\n };\n}\nexport function makeOnchainPrepareMintFromCreate({\n contractAddress,\n tokenId,\n result,\n minter,\n getContractMintFee,\n contractVersion,\n chainId,\n}: {\n contractAddress: Address;\n tokenId: bigint;\n result: ConcreteSalesConfig;\n minter: Address;\n getContractMintFee: () => Promise<bigint>;\n contractVersion: string;\n chainId: number;\n}): AsyncPrepareMint {\n return async (params: MintParametersBase): Promise<PrepareMintReturn> => {\n const subgraphSalesConfig = await toSalesStrategyFromSubgraph({\n minter,\n getContractMintFee,\n salesConfig: result,\n });\n return {\n parameters: makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: {\n salesConfig: subgraphSalesConfig,\n contractVersion,\n },\n ...params,\n tokenContract: contractAddress,\n tokenId,\n chainId,\n }),\n costs: parseMintCosts({\n allowListEntry: params.allowListEntry,\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: subgraphSalesConfig,\n }),\n erc20Approval: getRequiredErc20Approvals(params, subgraphSalesConfig),\n };\n };\n}\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\n\nexport function buildContractInfoQuery({\n contractAddress,\n}: {\n contractAddress: Address;\n}): ISubgraphQuery<{\n name: string;\n contractVersion: string;\n mintFeePerQuantity: string;\n tokens: {\n tokenId: Address;\n }[];\n}> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n zoraCreateContract(id: $contractAddress) {\n contractVersion\n name\n mintFeePerQuantity\n tokens(first: 1, orderBy: tokenId, orderDirection: desc) {\n tokenId\n }\n }\n }\n `,\n variables: {\n contractAddress: contractAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData.zoraCreateContract,\n };\n}\n","import { ISubgraphQuerier } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\nimport { buildContractInfoQuery } from \"./subgraph-queries\";\nimport { retriesGeneric } from \"src/retries\";\nimport { SubgraphGetter } from \"src/apis/subgraph-getter\";\n\nexport interface IContractGetter {\n getContractInfo: (params: {\n contractAddress: Address;\n retries?: number;\n }) => Promise<{\n name: string;\n contractVersion: string;\n nextTokenId: bigint;\n mintFee: bigint;\n }>;\n}\n\nexport class SubgraphContractGetter\n extends SubgraphGetter\n implements IContractGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n async getContractInfo({\n contractAddress,\n retries = 1,\n }: {\n contractAddress: Address;\n retries?: number;\n }): Promise<{\n name: string;\n contractVersion: string;\n nextTokenId: bigint;\n mintFee: bigint;\n }> {\n const tryFn = async () => {\n const responseData = await this.querySubgraphWithRetries(\n buildContractInfoQuery({ contractAddress }),\n );\n if (!responseData) {\n console.log(\"could not find contract\");\n throw new Error(\"Cannot find contract\");\n }\n return responseData;\n };\n\n const responseData = await retriesGeneric({\n tryFn,\n maxTries: retries,\n linearBackoffMS: 1000,\n });\n\n const nextTokenId =\n responseData.tokens.length === 0\n ? 1n\n : BigInt(responseData.tokens[0]!.tokenId) + 1n;\n\n return {\n name: responseData.name,\n contractVersion: responseData.contractVersion,\n mintFee: BigInt(responseData.mintFeePerQuantity),\n nextTokenId,\n };\n }\n}\n","import { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(where: { account: $account }) {\n balance\n mintToken {\n id\n pricePerToken\n }\n }\n }\n `;\n\n return {\n query,\n variables: { account },\n };\n};\n\nexport type MintAccountBalance = {\n balance: string;\n mintToken: {\n id: string;\n pricePerToken: string;\n };\n};\n\nexport type MintAccountBalancesQueryResult = {\n mintTokenBalances: MintAccountBalance[];\n};\n\n/**\n * Given the result of a mint token balances query, selects the best MINTs to use to collect with that will satisfy the quantity,\n * by selecting the lowest priced MINTs first. Throws an error if not enough mints to collect with.\n */\nexport const selectMintsToCollectWithFromQueryResult = (\n mintAccountBalances: MintAccountBalance[],\n quantityToCollect: bigint,\n) => {\n const parsed = mintAccountBalances.map((r) => {\n return {\n tokenId: BigInt(r.mintToken.id),\n quantity: BigInt(r.balance),\n pricePerToken: BigInt(r.mintToken.pricePerToken),\n };\n });\n\n // now we want to find the best tokens to collect with, sorted by lowest price ascending\n // given its a bigint, lets not do a straight subtraction but sort based on result of comparison gt/lt:\n const sorted = parsed.sort((a, b) => {\n if (a.pricePerToken < b.pricePerToken) {\n return -1;\n }\n return 1;\n });\n\n // we need to get array of tokenIds and quantities to collect with:\n let remainingQuantity = quantityToCollect;\n const tokenIds: bigint[] = [];\n const quantities: bigint[] = [];\n\n while (remainingQuantity > 0) {\n const next = sorted.shift();\n if (!next) {\n throw new Error(\"Not enough MINTs to collect with\");\n }\n\n const quantityToUse =\n remainingQuantity > next.quantity ? next.quantity : remainingQuantity;\n tokenIds.push(next.tokenId);\n quantities.push(quantityToUse);\n remainingQuantity -= quantityToUse;\n }\n\n return {\n tokenIds,\n quantities,\n };\n};\n\n/**\n * Given an array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n zoraSparksManagerImplABI,\n zoraSparksManagerImplAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\nimport { addressOrAccountAddress } from \"src/utils\";\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n tokenId,\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n tokenId: bigint;\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeContractParameters({\n abi: zoraSparksManagerImplABI,\n address: zoraSparksManagerImplAddress[chainId],\n functionName: \"mintWithEth\",\n args: [tokenId, quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n protocolRewardsABI,\n protocolRewardsAddress,\n erc20ZRoyaltiesABI,\n erc20ZRoyaltiesAddress,\n wethAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { makeContractParameters, PublicClient } from \"src/utils\";\nimport { PublicClient as PublicClientWithMulticall } from \"viem\";\nimport { Account, Address, encodeFunctionData, parseAbi } from \"viem\";\nimport { IRewardsGetter } from \"./subgraph-rewards-getter\";\nimport {\n multicall3Abi,\n multicall3Address,\n Multicall3Call3,\n} from \"src/apis/multicall3\";\nimport { SubgraphRewardsGetter } from \"./subgraph-rewards-getter\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\n// Aggregates unclaimed fees and separates ETH from other ERC20 tokens\nfunction aggregateUnclaimedFees(\n unclaimedFees: readonly {\n token0: `0x${string}`;\n token1: `0x${string}`;\n token0Amount: bigint;\n token1Amount: bigint;\n }[],\n wethAddress: Address,\n) {\n let ethBalance = 0n;\n // Aggregate unclaimed fees by token address\n const unclaimedFeesAggregate = unclaimedFees.reduce(\n (acc, fee) => {\n const addFee = (token: `0x${string}`, amount: bigint) => {\n if (token === wethAddress) {\n ethBalance += amount;\n } else if (acc[token]) {\n acc[token] += amount;\n } else {\n acc[token] = amount;\n }\n };\n // Apply 75% fee to each token amount\n addFee(fee.token0, (fee.token0Amount * 75n) / 100n);\n addFee(fee.token1, (fee.token1Amount * 75n) / 100n);\n return acc;\n },\n {} as Record<string, bigint>,\n );\n\n return {\n eth: (ethBalance * 75n) / 100n, // Apply 75% fee to ETH balance\n erc20: unclaimedFeesAggregate,\n };\n}\n\n// Define the return type for getRewardsBalance\ntype RewardsBalance = {\n // The total balance, in eth of protocol rewards\n protocolRewards: bigint;\n // The secondary royalties balance.\n secondaryRoyalties: {\n // The balance, in eth, of secondary royalties\n eth: bigint;\n // The balance, aggregated by erc20 address, of secondary royalties\n erc20: Record<Address, bigint>;\n };\n};\n\nconst getErc20zsWithPositions = async ({\n address,\n publicClient,\n rewardsGetter,\n}: {\n address: Address;\n publicClient: PublicClient;\n rewardsGetter?: IRewardsGetter;\n}): Promise<Address[]> => {\n const chainId = publicClient.chain.id;\n const rewardsGetterOrDefault =\n rewardsGetter ?? new SubgraphRewardsGetter(chainId);\n\n const erc20zsForCreator = await rewardsGetterOrDefault.getErc20ZzForCreator({\n address,\n });\n\n const royaltiesAddress =\n erc20ZRoyaltiesAddress[chainId as keyof typeof erc20ZRoyaltiesAddress];\n\n const positionsByErc20z = await (\n publicClient as PublicClientWithMulticall\n ).multicall({\n contracts: erc20zsForCreator.map((erc20z) => ({\n address: royaltiesAddress,\n abi: erc20ZRoyaltiesABI,\n functionName: \"positionsByErc20z\",\n args: [erc20z],\n })),\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n const erc20zsWithPositions = erc20zsForCreator.filter(\n (_, i) => positionsByErc20z[i] !== 0n,\n );\n\n return erc20zsWithPositions;\n};\n\nexport const getRewardsBalances = async ({\n account, // The account to check rewards for (Address or Account object)\n publicClient, // The public client for making blockchain queries\n rewardsGetter, // Interface for getting ERC20Z tokens for a creator\n}: {\n account: Account | Address;\n publicClient: PublicClient;\n rewardsGetter?: IRewardsGetter;\n}): Promise<RewardsBalance> => {\n const chainId = publicClient.chain.id;\n const address = typeof account === \"string\" ? account : account.address;\n\n // get erc20z that have positions in the royalties contract\n const erc20zsWithPositions = await getErc20zsWithPositions({\n address,\n publicClient,\n rewardsGetter,\n });\n\n // Perform multicall to get protocol rewards balance and unclaimed fees\n const result = await (publicClient as PublicClientWithMulticall).multicall({\n contracts: [\n {\n address:\n protocolRewardsAddress[\n chainId as keyof typeof protocolRewardsAddress\n ],\n abi: protocolRewardsABI,\n functionName: \"balanceOf\",\n args: [address],\n },\n {\n address:\n erc20ZRoyaltiesAddress[\n chainId as keyof typeof erc20ZRoyaltiesAddress\n ],\n abi: erc20ZRoyaltiesABI,\n functionName: \"getUnclaimedFeesBatch\",\n args: [erc20zsWithPositions],\n },\n ],\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n const protocolRewardsBalance = result[0];\n\n const wethAddressForChain = wethAddress[chainId as keyof typeof wethAddress];\n\n // Aggregate unclaimed fees\n const unclaimedFeesAggregate = aggregateUnclaimedFees(\n result[1],\n wethAddressForChain,\n );\n\n return {\n protocolRewards: protocolRewardsBalance,\n secondaryRoyalties: unclaimedFeesAggregate,\n };\n};\n\nexport const withdrawProtocolRewards = ({\n withdrawFor,\n chainId,\n}: {\n // Account to execute the transaction\n withdrawFor: Address;\n chainId: number;\n}) => {\n return makeContractParameters({\n abi: protocolRewardsABI,\n functionName: \"withdrawFor\",\n address:\n protocolRewardsAddress[chainId as keyof typeof protocolRewardsAddress],\n args: [withdrawFor, 0n],\n });\n};\n\nconst makeClaimSecondaryRoyaltiesCalls = async ({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n}: {\n claimFor: Address;\n chainId: number;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) => {\n const erc20z = await getErc20zsWithPositions({\n address: claimFor,\n publicClient,\n rewardsGetter,\n });\n\n const royaltiesAddress =\n erc20ZRoyaltiesAddress[chainId as keyof typeof erc20ZRoyaltiesAddress];\n\n if (erc20z.length === 0) {\n return [];\n }\n\n return erc20z.map((erc20z) => ({\n target: royaltiesAddress,\n callData: encodeFunctionData({\n abi: erc20ZRoyaltiesABI,\n functionName: \"claimFor\",\n args: [erc20z],\n }),\n allowFailure: false,\n }));\n};\n\nexport async function withdrawSecondaryRoyalties({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n}: {\n claimFor: Address;\n chainId: number;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) {\n const calls = await makeClaimSecondaryRoyaltiesCalls({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n });\n\n return makeContractParameters({\n abi: multicall3Abi,\n functionName: \"aggregate3\",\n address: multicall3Address,\n args: [calls],\n });\n}\n\n// Extract protocol rewards withdrawal call creation\nconst createProtocolRewardsCall = (\n chainId: number,\n withdrawFor: Address,\n): Multicall3Call3 => ({\n target:\n protocolRewardsAddress[chainId as keyof typeof protocolRewardsAddress],\n callData: encodeFunctionData({\n abi: protocolRewardsABI,\n functionName: \"withdrawFor\",\n args: [withdrawFor, 0n],\n }),\n allowFailure: false,\n});\n\n// Extract multicall parameters creation\nconst createMulticallParameters = (\n calls: Multicall3Call3[],\n account: Address | Account,\n) =>\n makeContractParameters({\n abi: parseAbi(multicall3Abi),\n functionName: \"aggregate3\",\n address: multicall3Address,\n args: [calls],\n account,\n });\n\n// Handle the simple case of protocol rewards only\nconst handleProtocolRewardsOnly = ({\n chainId,\n withdrawFor,\n account,\n}: {\n chainId: number;\n withdrawFor: Address;\n account: Address | Account;\n}) => ({\n ...withdrawProtocolRewards({ chainId, withdrawFor }),\n account,\n});\n\n// Handle both protocol and secondary rewards\nconst handleAllRewards = async ({\n withdrawFor,\n account,\n rewardsGetter,\n publicClient,\n}: {\n withdrawFor: Address;\n account: Address | Account;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) => {\n const chainId = publicClient.chain.id;\n const protocolRewardsCall = createProtocolRewardsCall(chainId, withdrawFor);\n const secondaryRoyaltiesCalls = await makeClaimSecondaryRoyaltiesCalls({\n chainId,\n claimFor: withdrawFor,\n rewardsGetter,\n publicClient,\n });\n\n const allCalls = [protocolRewardsCall, ...secondaryRoyaltiesCalls];\n return createMulticallParameters(allCalls, account);\n};\n\n// Main withdrawRewards function now acts as a router\nexport const withdrawRewards = async ({\n account,\n withdrawFor,\n claimSecondaryRoyalties = true,\n rewardsGetter,\n publicClient,\n}: {\n account: Address | Account;\n withdrawFor: Address;\n claimSecondaryRoyalties?: boolean;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}): Promise<{ parameters: SimulateContractParametersWithAccount }> => {\n const parameters = claimSecondaryRoyalties\n ? await handleAllRewards({\n withdrawFor,\n account,\n rewardsGetter,\n publicClient,\n })\n : await handleProtocolRewardsOnly({\n chainId: publicClient.chain.id,\n withdrawFor,\n account,\n });\n\n return { parameters };\n};\n","import { Address, Hex } from \"viem\";\n\nexport const multicall3Abi = [\n \"struct Call { address target; bytes callData; }\",\n \"struct Call3 { address target; bool allowFailure; bytes callData; }\",\n \"struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; }\",\n \"struct Result { bool success; bytes returnData; }\",\n \"function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData)\",\n \"function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData)\",\n \"function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData)\",\n];\n\nexport const multicall3Address = \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\nexport type Multicall3Call3 = {\n target: Address;\n allowFailure: boolean;\n callData: Hex;\n};\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\n\nexport type RewardsToken = {\n salesStrategies: [\n {\n zoraTimedMinter?: {\n erc20Z: {\n id: Address;\n };\n };\n },\n ];\n};\n\nexport type CreatorERC20zQueryResult = {\n zoraCreateTokens: RewardsToken[];\n};\n\nexport function buildCreatorERC20zs({\n address,\n}: {\n address: Address;\n}): ISubgraphQuery<CreatorERC20zQueryResult[\"zoraCreateTokens\"]> {\n return {\n query: `\n query ($address: Bytes!) {\n zoraCreateTokens(\n where: { royalties_: { royaltyRecipient: $address }, salesStrategies_: { type: \"ZORA_TIMED\" } }\n ) {\n royalties {\n user\n }\n salesStrategies {\n zoraTimedMinter {\n erc20Z {\n id\n }\n }\n }\n }\n }\n `,\n variables: { address },\n parseResponseData: (responseData: any | undefined) => {\n return responseData?.zoraCreateTokens;\n },\n };\n}\n","import { SubgraphGetter } from \"src/apis/subgraph-getter\";\nimport { ISubgraphQuerier } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\nimport { buildCreatorERC20zs } from \"./subgraph-queries\";\n\nexport interface IRewardsGetter {\n getErc20ZzForCreator: (params: { address: Address }) => Promise<Address[]>;\n}\n\nexport class SubgraphRewardsGetter\n extends SubgraphGetter\n implements IRewardsGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n async getErc20ZzForCreator({ address }: { address: Address }) {\n const queryResults = await this.querySubgraphWithRetries(\n buildCreatorERC20zs({ address }),\n );\n\n const results = (\n queryResults?.map((result) => {\n const timedMinter = result.salesStrategies[0].zoraTimedMinter;\n\n if (!timedMinter) {\n return null;\n }\n\n return timedMinter.erc20Z.id;\n }) || []\n ).filter((id): id is Address => !!id);\n\n return results;\n }\n}\n","import { IPublicClient } from \"src/types\";\nimport { IRewardsGetter } from \"./subgraph-rewards-getter\";\nimport { Account, Address } from \"viem\";\nimport { getRewardsBalances, withdrawRewards } from \"./rewards-queries\";\n\nexport type WithdrawRewardsParams = {\n // account is the address that is withdrawing the rewards\n account: Address | Account;\n // withdrawFor is the address that is receiving the rewards\n withdrawFor: Address;\n // claimSecondaryRoyalties is an optional flag to claim secondary royalties. Defaults to `true`.\n claimSecondaryRoyalties?: boolean;\n};\n\nexport type GetRewardsBalancesParams = {\n // The address or account to get the rewards balance for\n account: Address | Account;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new RewardsClient().withdrawRewards()`, use `withdrawRewards()`\n * Import the functions you need directly from their respective modules:\n * import { withdrawRewards, getRewardsBalances } from '@zoralabs/protocol-sdk'\n */\nexport class RewardsClient {\n // Private properties to store chain ID, public client, and rewards getter\n private readonly publicClient: IPublicClient;\n private readonly rewardsGetter: IRewardsGetter;\n\n constructor({\n publicClient,\n rewardsGetter,\n }: {\n publicClient: IPublicClient;\n rewardsGetter: IRewardsGetter;\n }) {\n // Initialize the private properties\n this.publicClient = publicClient;\n this.rewardsGetter = rewardsGetter;\n }\n\n /** Withdraws rewards for a given account */\n async withdrawRewards({\n account,\n withdrawFor,\n claimSecondaryRoyalties,\n }: WithdrawRewardsParams) {\n return await withdrawRewards({\n rewardsGetter: this.rewardsGetter,\n withdrawFor,\n claimSecondaryRoyalties,\n account,\n publicClient: this.publicClient,\n });\n }\n\n /** Retrieves the rewards balances for a given account */\n async getRewardsBalances(params: GetRewardsBalancesParams) {\n return getRewardsBalances({\n account: params.account,\n publicClient: this.publicClient,\n rewardsGetter: this.rewardsGetter,\n });\n }\n}\n","import { Account, Address, encodeAbiParameters } from \"viem\";\nimport {\n secondarySwapAddress,\n zoraCreator1155ImplABI,\n safeTransferSwapAbiParameters,\n secondarySwapABI,\n callerAndCommenterABI,\n callerAndCommenterAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { makeContractParameters, PublicClient } from \"src/utils\";\nimport { getUniswapQuote } from \"./uniswap/uniswapQuote\";\nimport { calculateSlippageUp, calculateSlippageDown } from \"./slippage\";\nimport { getSecondaryInfo } from \"./utils\";\nimport { addressOrAccountAddress } from \"src/utils\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\nimport {\n QuotePrice,\n BuyWithSlippageInput,\n SellWithSlippageInput,\n SecondaryInfo,\n} from \"./types\";\n\n// uniswap's auto slippage for L2s is 0.5% -> 0.005\nconst UNISWAP_SLIPPAGE = 0.005;\n\n// Error constants\nconst ERROR_INSUFFICIENT_WALLET_FUNDS = \"Insufficient wallet funds\";\nconst ERROR_INSUFFICIENT_POOL_SUPPLY = \"Insufficient pool supply\";\nconst ERROR_SECONDARY_NOT_CONFIGURED =\n \"Secondary not configured for given contract and token\";\nexport const ERROR_SECONDARY_NOT_STARTED = \"Secondary market has not started\";\nexport const ERROR_RECIPIENT_MISMATCH =\n \"Recipient must be the same as the caller if there is a comment\";\n\n// Helper function to create error objects\nfunction makeError(errorMessage: string) {\n return { error: errorMessage };\n}\n\ntype Call =\n | {\n // Parameters for the buy or sell transaction\n parameters: SimulateContractParametersWithAccount;\n error?: undefined;\n }\n | {\n parameters?: undefined;\n // Error message if the buy or sell operation cannot be performed\n error: string;\n };\n\nasync function makeBuy({\n contract,\n tokenId,\n erc20z,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n comment,\n}: {\n erc20z: Address;\n contract: Address;\n tokenId: bigint;\n poolBalance: { erc20z: bigint };\n amount: bigint;\n quantity: bigint;\n account: Address | Account;\n recipient?: Address;\n slippage: number;\n comment: string | undefined;\n publicClient: PublicClient;\n}): Promise<Call> {\n const costWithSlippage = calculateSlippageUp(amount, slippage);\n const accountAddress = addressOrAccountAddress(account);\n\n const validationResult = await validateBuyConditions({\n poolBalance,\n quantity,\n costWithSlippage,\n accountAddress,\n publicClient,\n });\n\n if (validationResult.error) {\n return makeError(validationResult.error);\n }\n\n if (comment && comment !== \"\") {\n return handleBuyWithComment({\n accountAddress,\n recipient,\n chainId: publicClient.chain.id,\n quantity,\n contract,\n tokenId,\n costWithSlippage,\n comment,\n account,\n });\n }\n\n return handleBuyWithoutComment({\n erc20z,\n quantity,\n recipient,\n accountAddress,\n costWithSlippage,\n chainId: publicClient.chain.id,\n account,\n });\n}\n\nasync function validateBuyConditions({\n poolBalance,\n quantity,\n costWithSlippage,\n accountAddress,\n publicClient,\n}: {\n poolBalance: { erc20z: bigint };\n quantity: bigint;\n costWithSlippage: bigint;\n accountAddress: Address;\n publicClient: PublicClient;\n}): Promise<{ error?: string }> {\n const availableToBuy = poolBalance.erc20z / BigInt(1e18) - 1n;\n const availableToSpend = await publicClient.getBalance({\n address: accountAddress,\n });\n\n if (costWithSlippage > availableToSpend) {\n return { error: ERROR_INSUFFICIENT_WALLET_FUNDS };\n }\n\n if (availableToBuy < BigInt(quantity)) {\n return { error: ERROR_INSUFFICIENT_POOL_SUPPLY };\n }\n\n return {};\n}\n\nfunction handleBuyWithComment({\n accountAddress,\n recipient,\n chainId,\n quantity,\n contract,\n tokenId,\n costWithSlippage,\n comment,\n account,\n}: {\n accountAddress: Address;\n recipient?: Address;\n chainId: number;\n quantity: bigint;\n contract: Address;\n tokenId: bigint;\n costWithSlippage: bigint;\n comment: string;\n account: Address | Account;\n}): Call {\n if (recipient && recipient !== accountAddress) {\n return makeError(ERROR_RECIPIENT_MISMATCH);\n }\n\n return {\n parameters: makeContractParameters({\n abi: callerAndCommenterABI,\n address:\n callerAndCommenterAddress[\n chainId as keyof typeof callerAndCommenterAddress\n ],\n functionName: \"buyOnSecondaryAndComment\",\n args: [\n accountAddress,\n quantity,\n contract,\n tokenId,\n accountAddress,\n costWithSlippage,\n 0n,\n comment,\n ],\n account,\n value: costWithSlippage,\n }),\n };\n}\n\nfunction handleBuyWithoutComment({\n erc20z,\n quantity,\n recipient,\n accountAddress,\n costWithSlippage,\n chainId,\n account,\n}: {\n erc20z: Address;\n quantity: bigint;\n recipient?: Address;\n accountAddress: Address;\n costWithSlippage: bigint;\n chainId: number;\n account: Address | Account;\n}): Call {\n return {\n parameters: makeContractParameters({\n abi: secondarySwapABI,\n address:\n secondarySwapAddress[chainId as keyof typeof secondarySwapAddress],\n functionName: \"buy1155\",\n args: [\n erc20z,\n quantity,\n recipient || accountAddress,\n accountAddress,\n costWithSlippage,\n 0n,\n ],\n account,\n value: costWithSlippage,\n }),\n };\n}\n\ntype BuyOrSellWithSlippageResult =\n | ({\n // Price to buy or sell the quantity of 1155s\n price: QuotePrice;\n } & Call)\n | {\n error: string;\n price?: undefined;\n parameters?: undefined;\n };\n\nexport async function buy1155OnSecondary({\n contract,\n tokenId,\n publicClient,\n quantity,\n account,\n slippage = UNISWAP_SLIPPAGE,\n recipient,\n comment,\n}: BuyWithSlippageInput & {\n publicClient: PublicClient;\n}): Promise<BuyOrSellWithSlippageResult> {\n const secondaryInfo = await getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n });\n\n if (!secondaryInfo) {\n return makeError(ERROR_SECONDARY_NOT_CONFIGURED);\n }\n\n const { erc20z, pool, secondaryActivated } = secondaryInfo;\n\n if (!secondaryActivated) {\n return makeError(ERROR_SECONDARY_NOT_STARTED);\n }\n\n const { poolBalance, amount, price } = await getUniswapQuote(\n {\n type: \"buy\",\n quantity,\n poolAddress: pool,\n erc20z,\n },\n publicClient,\n );\n\n const call = await makeBuy({\n erc20z,\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n comment,\n publicClient,\n });\n\n return {\n ...call,\n price,\n };\n}\n\nasync function makeSell({\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n}: {\n contract: Address;\n tokenId: bigint;\n poolBalance: { weth: bigint };\n amount: bigint;\n quantity: bigint;\n account: Address | Account;\n recipient?: Address;\n slippage: number;\n publicClient: PublicClient;\n}): Promise<Call> {\n const accountAddress = addressOrAccountAddress(account);\n\n const tokenCount = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contract,\n functionName: \"balanceOf\",\n args: [accountAddress, tokenId],\n });\n\n const availableToSell = tokenCount ?? 0n;\n const availableToReceive = poolBalance.weth;\n\n if (quantity > availableToSell) {\n return makeError(ERROR_INSUFFICIENT_WALLET_FUNDS);\n }\n\n if (amount > availableToReceive) {\n return makeError(ERROR_INSUFFICIENT_POOL_SUPPLY);\n }\n\n const receivedWithSlippage = calculateSlippageDown(amount, slippage);\n\n const data = encodeAbiParameters(safeTransferSwapAbiParameters, [\n recipient || accountAddress,\n receivedWithSlippage,\n 0n,\n ]);\n\n const chainId = publicClient.chain.id;\n\n return {\n parameters: makeContractParameters({\n abi: zoraCreator1155ImplABI,\n address: contract,\n functionName: \"safeTransferFrom\",\n account,\n args: [\n accountAddress,\n secondarySwapAddress[chainId as keyof typeof secondarySwapAddress],\n tokenId,\n quantity,\n data,\n ],\n }),\n };\n}\n\nexport async function sell1155OnSecondary({\n contract,\n tokenId,\n publicClient,\n quantity,\n account,\n slippage = UNISWAP_SLIPPAGE,\n recipient,\n}: SellWithSlippageInput & {\n publicClient: PublicClient;\n}): Promise<BuyOrSellWithSlippageResult> {\n const secondaryInfo = await getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n });\n\n if (!secondaryInfo) {\n return makeError(ERROR_SECONDARY_NOT_CONFIGURED);\n }\n\n const { pool, secondaryActivated, erc20z } = secondaryInfo;\n\n if (!secondaryActivated) {\n return makeError(ERROR_SECONDARY_NOT_STARTED);\n }\n\n const { poolBalance, amount, price } = await getUniswapQuote(\n { type: \"sell\", quantity, poolAddress: pool, erc20z },\n publicClient,\n );\n\n const call = await makeSell({\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n });\n\n return {\n ...call,\n price,\n };\n}\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new SecondaryClient().buy1155OnSecondary()`, use `buy1155OnSecondary()`\n * Import the functions you need directly from their respective modules:\n * import { buy1155OnSecondary, sell1155OnSecondary, getSecondaryInfo } from '@zoralabs/protocol-sdk'\n */\nexport class SecondaryClient {\n private publicClient: PublicClient;\n\n /**\n * Creates a new SecondaryClient instance.\n * @param publicClient - The public client for interacting with the blockchain.\n * @param chainId - The ID of the blockchain network.\n */\n constructor({ publicClient }: { publicClient: PublicClient }) {\n this.publicClient = publicClient;\n }\n\n /**\n * Get the secondary info for a given contract and token ID.\n * @param contract - The address of the contract.\n * @param tokenId - The ID of the token.\n * @returns A promise that resolves to the secondary info.\n */\n async getSecondaryInfo({\n contract,\n tokenId,\n }: {\n contract: Address;\n tokenId: bigint;\n }): Promise<SecondaryInfo | undefined> {\n return getSecondaryInfo({\n contract,\n tokenId,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Prepares a buy operation with slippage protection for purchasing a quantity of ERC1155 tokens with ETH on the secondary market.\n * @param input - The input parameters for the buy operation.\n * @returns A promise that resolves to the result of the buy operation, including price breakdown and transaction parameters.\n */\n async buy1155OnSecondary(\n input: BuyWithSlippageInput,\n ): Promise<BuyOrSellWithSlippageResult> {\n // Call the buyWithSlippage function with the provided input and client details\n return buy1155OnSecondary({\n ...input,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Prepares a sell operation with slippage protection for selling a quantity of ERC1155 tokens for ETH on the secondary market.\n * @param input - The input parameters for the sell operation.\n * @returns A promise that resolves to the result of the sell operation, including price breakdown and transaction parameters.\n */\n async sell1155OnSecondary(\n input: SellWithSlippageInput,\n ): Promise<BuyOrSellWithSlippageResult> {\n // Call the sellWithSlippage function with the provided input and client details\n return sell1155OnSecondary({\n ...input,\n publicClient: this.publicClient,\n });\n }\n}\n","import { Address, erc20Abi } from \"viem\";\nimport { PublicClient as PublicClientWithMulticall } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport { getEthPriceInUSDC } from \"./uniswapReserves\";\nimport { convertWeiToSparks, convertWeiToUSD } from \"../conversions\";\n\nimport { uniswapV3PoolAbi } from \"./abis\";\nimport { wethAddress as wethAddresses } from \"@zoralabs/protocol-deployments\";\n\nimport { GetQuoteOutput } from \"../types\";\nimport {\n quoteExactInputSingle,\n quoteExactOutputSingle,\n} from \"./uniswapQuoteExact\";\nimport { multicall3Address } from \"src/apis/multicall3\";\n\nasync function getPoolInfo({\n poolAddress,\n client,\n WETH,\n erc20z,\n}: {\n poolAddress: Address;\n WETH: Address;\n erc20z: Address;\n client: PublicClient;\n}) {\n const [fee, wethBalance, erc20zBalance] = await (\n client as PublicClientWithMulticall\n ).multicall({\n contracts: [\n {\n abi: uniswapV3PoolAbi,\n address: poolAddress,\n functionName: \"fee\",\n },\n // get WETH and erc20z balance for pool\n {\n abi: erc20Abi,\n address: WETH,\n functionName: \"balanceOf\",\n args: [poolAddress],\n },\n {\n abi: erc20Abi,\n address: erc20z,\n functionName: \"balanceOf\",\n args: [poolAddress],\n },\n ],\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n return {\n wethBalance,\n erc20zBalance,\n fee,\n };\n}\n\ntype GetQuoteInput = {\n // Indicates whether the quote is for buying or selling\n type: \"buy\" | \"sell\";\n // The amount of tokens to buy or sell\n quantity: bigint;\n poolAddress: Address;\n erc20z: Address;\n};\nexport async function getUniswapQuote(\n input: GetQuoteInput,\n client: PublicClient,\n): Promise<GetQuoteOutput> {\n const { type, quantity, poolAddress, erc20z } = input;\n\n const chainId = client.chain.id;\n\n const WETH = wethAddresses[chainId as keyof typeof wethAddresses];\n\n const pool = await getPoolInfo({ poolAddress, WETH, erc20z, client });\n\n const { fee, wethBalance, erc20zBalance } = pool;\n\n // 1 unit always comes to 1e18 erc20 equivalent\n const amountWithDecimals = input.quantity * 10n ** 18n;\n\n const amount =\n type === \"buy\"\n ? await quoteExactOutputSingle({\n tokenIn: WETH,\n tokenOut: erc20z,\n amountOut: amountWithDecimals,\n fee,\n chainId,\n client,\n })\n : await quoteExactInputSingle({\n tokenIn: erc20z,\n tokenOut: WETH,\n amountIn: amountWithDecimals,\n fee,\n chainId,\n client,\n });\n\n const price = amount;\n const pricePerToken = amount / BigInt(quantity);\n\n const getUsdPrice = async () => {\n const ethPriceInUSD = await getEthPriceInUSDC();\n return {\n perToken: convertWeiToUSD({ amount: pricePerToken, ethPriceInUSD }),\n total: convertWeiToUSD({ amount: price, ethPriceInUSD }),\n };\n };\n\n return {\n amount,\n poolBalance: {\n erc20z: erc20zBalance,\n weth: wethBalance,\n },\n price: {\n wei: {\n perToken: pricePerToken,\n total: price,\n },\n sparks: {\n perToken: convertWeiToSparks(pricePerToken),\n total: convertWeiToSparks(price),\n },\n usdc: getUsdPrice,\n },\n };\n}\n","import { createPublicClient, http } from \"viem\";\nimport { mainnet } from \"viem/chains\";\nimport { uniswapV2USDCAbi } from \"./abis\";\n\nconst uniswapV2USDCMainnetAddress =\n \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\";\n\nexport function getUniswapV2USDCReserves() {\n const mainnetClient = createPublicClient({\n chain: mainnet,\n transport: http(),\n });\n return mainnetClient.readContract({\n address: uniswapV2USDCMainnetAddress,\n abi: uniswapV2USDCAbi,\n functionName: \"getReserves\",\n });\n}\n\nfunction toEthPriceInUSDC({\n reserve0,\n reserve1,\n}: {\n reserve0: bigint;\n reserve1: bigint;\n}) {\n return Number((reserve0 * BigInt(1e14)) / reserve1) / 1e2;\n}\n\n// returns the ETH price in USDC\nexport async function getEthPriceInUSDC() {\n const reserves = await getUniswapV2USDCReserves();\n return toEthPriceInUSDC({ reserve0: reserves[0], reserve1: reserves[1] });\n}\n","import { parseAbi } from \"viem\";\n\nexport const uniswapQuoterABI = parseAbi([\n \"struct QuoteExactInputSingleParams { address tokenIn; address tokenOut; uint256 amountIn; uint24 fee; uint160 sqrtPriceLimitX96; }\",\n \"struct QuoteExactOutputSingleParams { address tokenIn; address tokenOut; uint256 amount; uint24 fee; uint160 sqrtPriceLimitX96; }\",\n \"function quoteExactInputSingle(QuoteExactInputSingleParams calldata params) external returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\",\n \"function quoteExactOutputSingle(QuoteExactOutputSingleParams calldata params) external returns (uint256 amountIn, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\",\n]);\n\nexport const uniswapV3PoolAbi = parseAbi([\n \"function fee() external view returns (uint24)\",\n \"function liquidity() external view returns (uint128)\",\n \"function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)\",\n \"function token0() external view returns (address)\",\n \"function token1() external view returns (address)\",\n]);\n\nexport const uniswapV2USDCAbi = parseAbi([\n \"function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)\",\n]);\n","import { formatEther } from \"viem\";\n\nexport const WEI_PER_SPARK = 1_000_000_000_000n;\n\nexport function convertWeiToSparks(wei: string | number | bigint) {\n return BigInt(wei) / WEI_PER_SPARK;\n}\n\n// Returns the price in USDC given an amount in WEI\nexport function convertWeiToUSD({\n amount,\n ethPriceInUSD,\n}: {\n amount: bigint;\n ethPriceInUSD: number;\n}) {\n const amountInEth = formatEther(amount);\n\n return parseFloat(amountInEth) * ethPriceInUSD;\n}\n","import { Address } from \"viem\";\nimport {\n mainnet,\n sepolia,\n zora,\n zoraSepolia,\n base,\n baseSepolia,\n optimism,\n arbitrum,\n blast,\n} from \"viem/chains\";\nimport { uniswapQuoterABI } from \"./abis\";\nimport { PublicClient } from \"../../utils\";\n\nconst UniswapQuoterAddress: Record<number, Address> = {\n [mainnet.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [sepolia.id]: \"0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3\",\n [zora.id]: \"0x11867e1b3348F3ce4FcC170BC5af3d23E07E64Df\",\n [zoraSepolia.id]: \"0xC195976fEF0985886E37036E2DF62bF371E12Df0\",\n [base.id]: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\",\n [baseSepolia.id]: \"0xC5290058841028F1614F3A6F0F5816cAd0df5E27\",\n [optimism.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [arbitrum.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [blast.id]: \"0x6Cdcd65e03c1CEc3730AeeCd45bc140D57A25C77\",\n};\n\n/**\n * Fetches a quote for buying an exact amount of erc20z from the uniswap pool\n *\n * @param tokenIn - the token to sell (will be weth)\n * @param tokenOut - the token to purchase (will be an erc20z)\n * @param amount - the exact amount of erc20z to purchase\n * @param fee - the fee of the pool\n * @param chainId - the chain id\n */\nexport async function quoteExactOutputSingle({\n tokenIn,\n tokenOut,\n amountOut,\n fee,\n chainId,\n client,\n}: {\n tokenIn: Address;\n tokenOut: Address;\n amountOut: bigint;\n fee: number;\n chainId: number;\n client: PublicClient;\n}): Promise<bigint> {\n const quote = await client.simulateContract({\n abi: uniswapQuoterABI,\n address: UniswapQuoterAddress[\n chainId as keyof typeof UniswapQuoterAddress\n ] as Address,\n functionName: \"quoteExactOutputSingle\",\n args: [\n {\n tokenIn,\n tokenOut,\n amount: amountOut,\n fee,\n sqrtPriceLimitX96: 0n,\n },\n ],\n });\n\n return quote.result[0];\n}\n\n/**\n * Fetches a quote for selling an exact amount of erc20z to the uniswap pool\n *\n * @param tokenIn - the token to sell (will be erc20z)\n * @param tokenOut - the token to purchase (will be weth)\n * @param amount - the exact amount of erc20z to sell\n * @param fee - the fee of the pool\n * @param chainId - the chain id\n */\nexport async function quoteExactInputSingle({\n tokenIn,\n tokenOut,\n amountIn,\n fee,\n chainId,\n client,\n}: {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n fee: number;\n chainId: number;\n client: PublicClient;\n}): Promise<bigint> {\n const quote = await client.simulateContract({\n abi: uniswapQuoterABI,\n address: UniswapQuoterAddress[\n chainId as keyof typeof UniswapQuoterAddress\n ] as Address,\n functionName: \"quoteExactInputSingle\",\n args: [\n {\n tokenIn,\n tokenOut,\n amountIn,\n fee,\n sqrtPriceLimitX96: 0n,\n },\n ],\n });\n\n return quote.result[0];\n}\n","const SCALE = 1e18;\nconst ONE_SCALED = BigInt(SCALE);\n\n/**\n * Increase a base amount by a slippage percentage\n *\n * @remarks\n * This is useful when trying to calculate how much a user would at maximum pay,\n * when allowing for the specified amount of slippage (i.e. when buying 1155s).\n *\n * @param amount - the amount to calculate with slippage (if a bigint is passed we assume wei, otherwise we assume ether/usd/etc)\n * @param slippage - the slippage percantage as a fraction (i.e. 5% -> 0.05)\n * @returns the amount increased by the slippage\n */\nexport function calculateSlippageUp<\n T extends bigint | number | string,\n R = T extends bigint ? bigint : number,\n>(amount: T, slippage: number): R {\n return typeof amount === \"bigint\"\n ? (((amount * (ONE_SCALED + BigInt(slippage * SCALE))) / ONE_SCALED) as R)\n : ((parseFloat(String(amount)) * (1 + slippage)) as R);\n}\n\n/**\n * Decrease a base amount by a slippage percentage\n *\n * @remarks\n * This is useful when trying to calculate how much a user would at minimum receive,\n * when allowing for the specified amount of slippage (i.e. when selling 1155s).\n *\n * @param amount - the amount to calculate with slippage (if a bigint is passed we assume wei, otherwise we assume ether/usd/etc)\n * @param slippage - the slippage percantage as a fraction (i.e. 5% -> 0.05)\n * @returns the amount decreased by the slippage\n */\nexport function calculateSlippageDown<\n T extends bigint | number | string,\n R = T extends bigint ? bigint : number,\n>(amount: T, slippage: number): R {\n return typeof amount === \"bigint\"\n ? (((amount * (ONE_SCALED - BigInt(slippage * SCALE))) / ONE_SCALED) as R)\n : ((parseFloat(String(amount)) * (1 - slippage)) as R);\n}\n","import { Address, parseEther } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport {\n zoraTimedSaleStrategyABI,\n zoraTimedSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { SecondaryInfo } from \"./types\";\n\nconst LEGACY_MINIMUM_MARKET_ETH = parseEther(\"0.0123321\");\nconst LEGACY_MARKET_REWARD = parseEther(\"0.0000111\");\nconst MARKET_REWARD = parseEther(\"0.0000222\");\n\nexport async function getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n}: {\n contract: Address;\n tokenId: bigint;\n publicClient: PublicClient;\n}): Promise<SecondaryInfo | undefined> {\n let result;\n\n const chainId = publicClient.chain.id;\n\n try {\n result = await publicClient.readContract({\n abi: zoraTimedSaleStrategyABI,\n address:\n zoraTimedSaleStrategyAddress[\n chainId as keyof typeof zoraTimedSaleStrategyAddress\n ],\n functionName: \"saleV2\",\n args: [contract, tokenId],\n });\n } catch (e) {\n console.error(e);\n return undefined;\n }\n\n // if there is no erc20zAddress, we can assume that secondary market has not been configured for this contract and token.\n if (!result.erc20zAddress) {\n return undefined;\n }\n\n const usesLegacyMarketReward =\n result.minimumMarketEth === LEGACY_MINIMUM_MARKET_ETH;\n const erc20zBalance = await publicClient.getBalance({\n address: result.erc20zAddress,\n });\n\n return {\n erc20z: result.erc20zAddress,\n pool: result.poolAddress,\n secondaryActivated: result.secondaryActivated,\n saleEnd: result.saleEnd === 0n ? undefined : result.saleEnd,\n saleStart: result.saleStart,\n name: result.name,\n symbol: result.symbol,\n marketCountdown:\n result.marketCountdown === 0n ? undefined : result.marketCountdown,\n minimumMintsForCountdown:\n result.minimumMarketEth === 0n\n ? undefined\n : usesLegacyMarketReward\n ? result.minimumMarketEth / LEGACY_MARKET_REWARD\n : result.minimumMarketEth / MARKET_REWARD,\n mintCount: usesLegacyMarketReward\n ? erc20zBalance / LEGACY_MARKET_REWARD\n : erc20zBalance / MARKET_REWARD,\n };\n}\n","import {\n PremintClient,\n getDataFromPremintReceipt,\n} from \"./premint/premint-client\";\nimport { Create1155Client } from \"./create/create-client\";\nimport { MintClient } from \"./mint/mint-client\";\nimport { ClientConfig } from \"./utils\";\nimport { IPremintAPI, PremintAPIClient } from \"./premint/premint-api-client\";\nimport { SubgraphMintGetter } from \"./mint/subgraph-mint-getter\";\nimport { IOnchainMintGetter } from \"./mint/types\";\nimport {\n IContractGetter,\n SubgraphContractGetter,\n} from \"./create/contract-getter\";\nimport { RewardsClient } from \"./rewards/rewards-client\";\nimport {\n IRewardsGetter,\n SubgraphRewardsGetter,\n} from \"./rewards/subgraph-rewards-getter\";\nimport { SecondaryClient } from \"./secondary/secondary-client\";\n\nexport type CreatorClient = {\n deletePremint: PremintClient[\"deletePremint\"];\n create1155: Create1155Client[\"createNew1155\"];\n create1155OnExistingContract: Create1155Client[\"createNew1155OnExistingContract\"];\n withdrawRewards: RewardsClient[\"withdrawRewards\"];\n getRewardsBalances: RewardsClient[\"getRewardsBalances\"];\n};\n\nexport type CollectorClient = {\n getPremint: PremintClient[\"getPremint\"];\n getCollectDataFromPremintReceipt: PremintClient[\"getDataFromPremintReceipt\"];\n mint: MintClient[\"mint\"];\n getMintCosts: MintClient[\"getMintCosts\"];\n getToken: MintClient[\"get\"];\n getTokensOfContract: MintClient[\"getOfContract\"];\n buy1155OnSecondary: SecondaryClient[\"buy1155OnSecondary\"];\n sell1155OnSecondary: SecondaryClient[\"sell1155OnSecondary\"];\n getSecondaryInfo: SecondaryClient[\"getSecondaryInfo\"];\n};\n\nexport type CreatorClientConfig = ClientConfig & {\n /** API for submitting and getting premints. Defaults to the Zora Premint API */\n premintApi?: IPremintAPI;\n contractGetter?: IContractGetter;\n rewardsGetter?: IRewardsGetter;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `createCreatorClient().create1155()`, use `create1155()`\n * Import the functions you need directly from their respective modules:\n * import { create1155 } from '@zoralabs/protocol-sdk'\n *\n * @param clientConfig - Configuration for the client {@link CreatorClientConfig}\n * @returns CreatorClient {@link CreatorClient}\n * */\nexport function createCreatorClient(\n clientConfig: CreatorClientConfig,\n): CreatorClient {\n const premintClient = new PremintClient({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n premintApi:\n clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId),\n });\n\n const create1155CreatorClient = new Create1155Client({\n publicClient: clientConfig.publicClient,\n contractGetter:\n clientConfig.contractGetter ||\n new SubgraphContractGetter(clientConfig.chainId),\n });\n\n const rewardsClient = new RewardsClient({\n publicClient: clientConfig.publicClient,\n rewardsGetter:\n clientConfig.rewardsGetter ||\n new SubgraphRewardsGetter(clientConfig.chainId),\n });\n\n return {\n deletePremint: (p) => premintClient.deletePremint(p),\n create1155: (p) => create1155CreatorClient.createNew1155(p),\n create1155OnExistingContract: (p) =>\n create1155CreatorClient.createNew1155OnExistingContract(p),\n getRewardsBalances: (p) => rewardsClient.getRewardsBalances(p),\n withdrawRewards: (p) => rewardsClient.withdrawRewards(p),\n };\n}\n\nexport type CollectorClientConfig = ClientConfig & {\n /** API for getting premints. Defaults to the Zora Premint API */\n premintGetter?: IPremintAPI;\n /** API for getting onchain mints. Defaults to the Zora Creator Subgraph */\n mintGetter?: IOnchainMintGetter;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `createCollectorClient().mint()`, use `mint()`\n * Import the functions you need directly from their respective modules:\n * import { mint } from '@zoralabs/protocol-sdk'\n *\n * @param clientConfig - Configuration for the client {@link CollectorClientConfig}\n * @returns CollectorClient {@link CollectorClient}\n */\nexport function createCollectorClient(\n params: CollectorClientConfig,\n): CollectorClient {\n const premintGetterToUse =\n params.premintGetter || new PremintAPIClient(params.chainId);\n const mintGetterToUse =\n params.mintGetter || new SubgraphMintGetter(params.chainId);\n const mintClient = new MintClient({\n publicClient: params.publicClient,\n premintGetter: premintGetterToUse,\n mintGetter: mintGetterToUse,\n });\n const secondaryClient = new SecondaryClient({\n publicClient: params.publicClient,\n });\n\n return {\n getPremint: (p) =>\n premintGetterToUse.get({\n collectionAddress: p.address,\n uid: p.uid,\n }),\n getCollectDataFromPremintReceipt: (p) =>\n getDataFromPremintReceipt(p, params.chainId),\n getToken: (p) => mintClient.get(p),\n getTokensOfContract: (p) => mintClient.getOfContract(p),\n mint: (p) => mintClient.mint(p),\n getMintCosts: (p) => mintClient.getMintCosts(p),\n buy1155OnSecondary: (p) => secondaryClient.buy1155OnSecondary(p),\n sell1155OnSecondary: (p) => secondaryClient.sell1155OnSecondary(p),\n getSecondaryInfo: (p) => secondaryClient.getSecondaryInfo(p),\n };\n}\n","export type ArweaveURL = `ar://${string}`;\n\nexport function isArweaveURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ar://\") : false;\n}\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n // Build the character lookup table:\n const codes: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { CID } from \"multiformats/cid\";\n\nexport type IPFSUrl = `ipfs://${string}`;\n\nexport function isCID(str: string | null | undefined): boolean {\n if (!str) return false;\n\n try {\n CID.parse(str);\n return true;\n } catch (e) {\n if (/^(bafy|Qm)/.test(str)) return true;\n return false;\n }\n}\n\nexport function normalizeIPFSUrl(\n url: string | null | undefined,\n): IPFSUrl | null {\n if (!url || typeof url !== \"string\") return null;\n\n // Handle urls wrapped in quotes\n url = url.replace(/\"/g, \"\");\n\n // Check if already a normalized IPFS url\n if (isNormalizedIPFSURL(url)) return url as IPFSUrl;\n\n // Check if url is a CID string\n if (isCID(url)) return `ipfs://${url}`;\n\n // If url is not either an ipfs gateway or protocol url\n if (!isIPFSUrl(url)) return null;\n\n // If url is already a gateway url, parse and normalize\n if (isGatewayIPFSUrl(url)) {\n // Replace leading double-slashes and parse URL\n const parsed = new URL(url.replace(/^\\/\\//, \"http://\"));\n // Remove IPFS from the URL\n // http://gateway/ipfs/<CID>?x=y#z -> http://gateway/<CID>?x=y#z\n parsed.pathname = parsed.pathname.replace(/^\\/ipfs\\//, \"\");\n // Remove the protocol and host from the URL\n // http://gateway/<CID>?x=y#z -> <CID>?x=y#z\n const cid = parsed\n .toString()\n .replace(`${parsed.protocol}//${parsed.host}/`, \"\");\n // Prepend ipfs protocol\n return `ipfs://${cid}`;\n }\n\n return null;\n}\n\nfunction isNormalizedIPFSURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ipfs://\") : false;\n}\n\nfunction isGatewayIPFSUrl(url: string | null | undefined): boolean {\n if (url && typeof url === \"string\") {\n try {\n const parsed = new URL(url.replace(/^\"|'(.*)\"|'$/, \"$1\"));\n return (\n !isNormalizedIPFSURL(url) &&\n parsed &&\n parsed.pathname.startsWith(\"/ipfs/\")\n );\n } catch {\n return false;\n }\n }\n\n return false;\n}\n\nfunction isIPFSUrl(url: string | null | undefined): boolean {\n return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;\n}\n\nexport function isNormalizeableIPFSUrl(\n url: string | null | undefined,\n): boolean {\n return url ? isIPFSUrl(url) || isCID(url) : false;\n}\n","import { isArweaveURL } from \"./arweave\";\nimport { isNormalizeableIPFSUrl, normalizeIPFSUrl } from \"./ipfs\";\n\nconst IPFS_GATEWAY = \"https://magic.decentralized-content.com\";\n\nconst ARWEAVE_GATEWAY = \"https://arweave.net\";\n\nexport function arweaveGatewayUrl(normalizedArweaveUrl: string | null) {\n if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== \"string\")\n return null;\n return normalizedArweaveUrl.replace(\"ar://\", `${ARWEAVE_GATEWAY}/`);\n}\n\nexport function ipfsGatewayUrl(url: string | null) {\n if (!url || typeof url !== \"string\") return null;\n const normalizedIPFSUrl = normalizeIPFSUrl(url);\n if (normalizedIPFSUrl) {\n return normalizedIPFSUrl.replace(\"ipfs://\", `${IPFS_GATEWAY}/ipfs/`);\n }\n return null;\n}\n\nexport function getFetchableUrl(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== \"string\") return null;\n\n // Prevent fetching from insecure URLs\n if (uri.startsWith(\"http://\")) return null;\n\n // If it is an IPFS HTTP or ipfs:// url\n if (isNormalizeableIPFSUrl(uri)) {\n // Return a fetchable gateway url\n return ipfsGatewayUrl(uri);\n }\n\n // If it is a ar:// url\n if (isArweaveURL(uri)) {\n // Return a fetchable gateway url\n return arweaveGatewayUrl(uri);\n }\n\n // If it is already a url (or blob or data-uri)\n if (/^(https|data|blob):/.test(uri)) {\n // Return the URI\n return uri;\n }\n\n return null;\n}\n","// text\nconst HTML = \"text/html\";\nconst MARKDOWN = \"text/markdown\";\nconst MARKDOWN_UTF8 = \"text/markdown; charset=utf-8\";\nconst TEXT_PLAIN_UTF8 = \"text/plain; charset=utf-8\";\nexport const TEXT_PLAIN = \"text/plain\";\nconst CSV = \"text/csv\";\nconst NUMBERS = \".numbers\";\nconst EXCEL = \".xlsx\";\nconst PDF = \"application/pdf\";\n\n// image\nconst JPG = \"image/jpg\";\nconst JPEG = \"image/jpeg\";\nconst PNG = \"image/png\";\nconst WEBP = \"image/webp\";\nconst SVG = \"image/svg+xml\";\nconst TIFF = \"image/tiff\";\nconst GIF = \"image/gif\";\n\nexport const isImage = (mimeType: string | null | undefined) => {\n if (!mimeType) return false;\n return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);\n};\n\nexport enum MediaType {\n CSV = \"CSV\",\n NUMBERS = \"NUMBERS\",\n EXCEL = \"EXCEL\",\n IMAGE = \"IMAGE\",\n VIDEO = \"VIDEO\",\n AUDIO = \"AUDIO\",\n TIFF = \"TIFF\",\n TEXT = \"TEXT\",\n PDF = \"PDF\",\n MODEL = \"MODEL\",\n HTML = \"HTML\",\n ZIP = \"ZIP\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const DEFAULT_THUMBNAIL_CID_HASHES: { [key: string]: string } = {\n [MediaType.AUDIO]:\n \"bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4\",\n [MediaType.VIDEO]:\n \"bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu\",\n [MediaType.HTML]:\n \"bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq\",\n [MediaType.ZIP]:\n \"bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq\", // assuming all zip files are html directories\n [MediaType.TEXT]:\n \"bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q\",\n default: \"bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4\",\n};\n\n// video\nconst MP4 = \"video/mp4\";\nconst QUICKTIME = \"video/quicktime\";\nconst M4V = \"video/x-m4v\";\nconst WEBM = \"video/webm\";\n\n// audio\nconst M4A = \"audio/x-m4a\";\nconst MPEG = \"audio/mpeg\";\nconst MP3 = \"audio/mp3\";\nconst WAV = \"audio/wav\";\nconst VND_WAV = \"audio/vnd.wav\";\nconst VND_WAVE = \"audio/vnd.wave\";\nconst WAVE = \"audio/wave\";\nconst X_WAV = \"audio/x-wav\";\nconst AIFF = \"audio/aiff\";\n\n// 3D\nconst GLTF = \"model/gltf+json\";\nconst GLB = \"model/gltf-binary\";\n// File extensions, as some files return '' as the mimetype\nconst GLTF_EXT = \".gltf\";\nconst GLB_EXT = \".glb\";\n\n// application\nexport const JSON_MIME_TYPE = \"application/json\";\nconst ZIP = \"application/zip\";\n\nconst mimeToMediaType = {\n [HTML]: MediaType.HTML,\n [JPG]: MediaType.IMAGE,\n [JPEG]: MediaType.IMAGE,\n [PNG]: MediaType.IMAGE,\n [WEBP]: MediaType.IMAGE,\n [SVG]: MediaType.IMAGE,\n [TIFF]: MediaType.TIFF,\n [GIF]: MediaType.IMAGE,\n [MP4]: MediaType.VIDEO,\n [WEBM]: MediaType.VIDEO,\n [QUICKTIME]: MediaType.VIDEO,\n [M4V]: MediaType.VIDEO,\n [MPEG]: MediaType.AUDIO,\n [MP3]: MediaType.AUDIO,\n [M4A]: MediaType.AUDIO,\n [VND_WAV]: MediaType.AUDIO,\n [VND_WAVE]: MediaType.AUDIO,\n [WAV]: MediaType.AUDIO,\n [WAVE]: MediaType.AUDIO,\n [X_WAV]: MediaType.AUDIO,\n [AIFF]: MediaType.AUDIO,\n [TEXT_PLAIN]: MediaType.TEXT,\n [TEXT_PLAIN_UTF8]: MediaType.TEXT,\n [MARKDOWN]: MediaType.TEXT,\n [MARKDOWN_UTF8]: MediaType.TEXT,\n [CSV]: MediaType.CSV,\n [NUMBERS]: MediaType.NUMBERS,\n [EXCEL]: MediaType.EXCEL,\n [PDF]: MediaType.PDF,\n [ZIP]: MediaType.ZIP,\n [GLTF]: MediaType.MODEL,\n [GLTF_EXT]: MediaType.MODEL,\n [GLB]: MediaType.MODEL,\n // GLTF returns 'application/json' as the mimetype,\n // and as the only JSON-encoded media we currently support,\n // we assume that if the mimetype is JSON, it's a GLTF\n [JSON_MIME_TYPE]: MediaType.MODEL,\n [GLB_EXT]: MediaType.MODEL,\n} as const;\n\n/** Return a MediaType for the given mime type. If mime type is unknown you can provide a filename as a fallback, where the type will be guessed based on extension. */\nexport function mimeTypeToMedia(mimeType?: string | null) {\n if (!mimeType) return MediaType.UNKNOWN;\n\n return (\n mimeToMediaType[mimeType as keyof typeof mimeToMediaType] ||\n MediaType.UNKNOWN\n );\n}\n\nexport async function getMimeType(uri?: string) {\n if (!uri) return uri;\n\n const res = await fetch(uri, { method: \"HEAD\" });\n let mimeType = res.headers.get(\"content-type\");\n return mimeType;\n}\n","import { getFetchableUrl } from \"./gateway\";\nimport {\n DEFAULT_THUMBNAIL_CID_HASHES,\n TEXT_PLAIN,\n getMimeType,\n isImage,\n mimeTypeToMedia,\n} from \"./mimeTypes\";\nimport {\n MakeMediaMetadataParams,\n MakeTextMetadataParams,\n TokenMetadataJson,\n} from \"./types\";\n\n/**\n * Takes properties for a text based nft and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeTextMetadataParams}\n */\nexport const makeTextTokenMetadata = (\n parameters: MakeTextMetadataParams,\n): TokenMetadataJson => {\n const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;\n\n const content = textFileUrl\n ? {\n mime: TEXT_PLAIN,\n uri: textFileUrl,\n }\n : null;\n\n const image = thumbnailUrl;\n const animation_url = textFileUrl;\n\n return {\n name,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\n/**\n * Takes properties for a media based nft (video, image, etc) and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeMediaMetadataParams}\n */\nexport const makeMediaTokenMetadata = async ({\n name,\n description,\n attributes = [],\n mediaUrl,\n thumbnailUrl,\n}: MakeMediaMetadataParams): Promise<TokenMetadataJson> => {\n const contentUrl = mediaUrl;\n const fetchableContentUrl = getFetchableUrl(contentUrl);\n\n if (!fetchableContentUrl)\n throw new Error(`Content url (${contentUrl}) is not fetchable`);\n\n const mimeType = await getMimeType(fetchableContentUrl);\n const mediaType = mimeTypeToMedia(mimeType);\n\n let image: string | undefined = undefined;\n let animation_url: string | null = null;\n\n // If the media is an image, just set the image field\n // Otherwise we require a thumbnail, set image and animation_url\n if (isImage(mimeType)) {\n image = contentUrl;\n } else {\n image = thumbnailUrl;\n animation_url = mediaUrl;\n }\n\n // If no image determined, use a fallback placeholder\n if (!image)\n image = `ipfs://${\n DEFAULT_THUMBNAIL_CID_HASHES[mediaType] ||\n DEFAULT_THUMBNAIL_CID_HASHES.default\n }`;\n\n const content = contentUrl\n ? {\n mime: mimeType || \"application/octet-stream\",\n uri: contentUrl,\n }\n : null;\n\n return {\n name,\n description,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\nexport async function fetchTokenMetadata(tokenMetadataURI: string) {\n const fetchableUrl = getFetchableUrl(tokenMetadataURI);\n\n if (!fetchableUrl) {\n throw new Error(`Invalid token metadata URI: ${tokenMetadataURI}`);\n }\n\n const json = (await (await fetch(fetchableUrl)).json()) as\n | TokenMetadataJson\n | undefined;\n\n if (!json) {\n throw new Error(`Failed to fetch metadata from ${fetchableUrl}`);\n }\n\n return json;\n}\n","import { TextMetadataFiles } from \"./types\";\n\nconst CHAR_LIMIT = 1111;\n\nconst wrapText = ({\n ctx,\n text,\n x,\n y,\n maxWidth,\n lineHeight,\n}: {\n ctx: CanvasRenderingContext2D;\n text: string;\n x: number;\n y: number;\n maxWidth: number;\n lineHeight: number;\n}) => {\n // Split text into words\n let words = text.replaceAll(\"\\n\", \" \\n \").split(/ +/);\n let line = \"\"; // This will store the text of the current line\n let testLine = \"\"; // This will store the text when we add a word, to test if it's too long\n let lineArray = []; // This is an array of lines, which the function will return\n\n for (var n = 0; n < words.length; n++) {\n // Measure text sizing\n testLine += `${words[n]} `;\n let metrics = ctx.measureText(testLine);\n let testWidth = metrics.width;\n // If the width of this test line is more than the max width\n if (words[n]?.includes(\"\\n\") || (testWidth > maxWidth && n > 0)) {\n // Then the line is finished, push the current line into \"lineArray\"\n lineArray.push({ text: line, x, y });\n // Start a new line\n y += lineHeight;\n // Update line and test line to use this word as the first word on the next line\n // If it's a newline, then don't add a space\n if (words[n]?.includes(\"\\n\")) {\n line = ``;\n testLine = ``;\n } else {\n line = `${words[n]} `;\n testLine = `${words[n]} `;\n }\n } else {\n // Test line is less than the max width, add the word to the current line\n line += `${words[n]} `;\n }\n // Handle a single line...\n if (n === words.length - 1) {\n lineArray.push({ text: line, x, y });\n }\n }\n return lineArray;\n};\n\nasync function generateTextPreview(text: string): Promise<File> {\n // Trim the text to a reasonable max length. Prevent crashes if the user pastes a gigantic string\n const trimmedText = text.trim().slice(0, CHAR_LIMIT);\n\n const [width, height] = [500, 500];\n const padding = 20;\n const dpr = 2;\n\n const fontFamily = \"Inter\";\n const [fontSize, lineHeight] = [16, 24];\n const [textColor, backgroundColor] = [\"black\", \"white\"];\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return reject(new Error(\"Could not create canvas context\"));\n }\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width * dpr, width * dpr);\n ctx.fillStyle = textColor;\n ctx.font = `${fontSize * dpr}px ${fontFamily}`;\n const wrapped = wrapText({\n ctx,\n text: trimmedText,\n x: padding * dpr,\n y: fontSize * dpr + padding * dpr,\n maxWidth: width * dpr - padding * 2 * dpr,\n lineHeight: lineHeight * dpr,\n });\n wrapped.forEach((line) => ctx.fillText(line.text, line.x, line.y));\n canvas.toBlob((blob) => {\n if (!blob) {\n return reject(new Error(\"Could not create blob\"));\n }\n resolve(new File([blob], \"thumbnail.png\", { type: \"image/png\" }));\n });\n });\n}\n\nfunction generateTextTitle(text: string) {\n const firstLine = text.split(\"\\n\")[0]!;\n const firstSentence = firstLine?.split(\". \")[0]!;\n\n if (firstSentence.length > 50) {\n return firstSentence.slice(0, 50) + \"...\";\n }\n\n return firstSentence;\n}\n\nconst toTextFile = (text: string) =>\n new File([text], \"Untitled.txt\", { type: \"text/plain\" });\n\n/** For text nfts, this will generate files that are needed for the metadata json, including the txt.file containing the text, and a thumbnail image containing a preview of the text\n */\nexport async function generateTextNftMetadataFiles(\n text: string,\n): Promise<TextMetadataFiles> {\n const name = generateTextTitle(text);\n const textFile = toTextFile(text);\n const thumbnailFile = await generateTextPreview(text);\n\n return {\n name,\n mediaUrlFile: textFile,\n thumbnailFile,\n };\n}\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"src/apis/http-api-base\";\nimport { Address, decodeAbiParameters, encodeAbiParameters, Hex } from \"viem\";\nimport { AllowList } from \"./types\";\n\ntype AllowListCreateParameters = {\n unhashedLeaves: Hex[];\n leafTypeDescriptor: string[];\n packedEncoding: boolean;\n};\n\ntype AllowListCreateResponse = {\n merkleRoot: Hex;\n};\n\ntype LanyardResponse = {\n proof: Hex[];\n unhashedLeaf: Hex;\n};\n\nconst ALLOWLIST_ABI_PARAMETERS = [\n { type: \"address\", name: \"user\" },\n { type: \"uint256\", name: \"maxCanMint\" },\n { type: \"uint256\", name: \"price\" },\n];\n\nconst ALLOW_LIST_API_BASE = \"https://lanyard.org/api/v1/\";\ntype AllowlistEntry = {\n user: Address;\n maxCanMint: number;\n price: bigint;\n priceDecimal: number;\n proof: Hex[];\n};\n\nfunction getZoraEntry(\n lanyardResponse: LanyardResponse | undefined,\n root: string | undefined,\n): AllowlistEntry | undefined {\n if (!lanyardResponse || !root) {\n return;\n }\n\n try {\n const [user, maxCanMint, price] = decodeAbiParameters(\n ALLOWLIST_ABI_PARAMETERS,\n lanyardResponse.unhashedLeaf,\n );\n\n return {\n user: user as Address,\n maxCanMint: Number(maxCanMint),\n price: price as bigint,\n // This won't realistically overflow.\n priceDecimal: Number(price),\n proof: lanyardResponse.proof,\n };\n } catch (e: any) {\n console.error(e);\n // Silently error here because the format is unexpected\n return;\n }\n}\n\nexport const createAllowList = async ({\n allowList,\n httpClient = defaultHttpClient,\n baseUrl = ALLOW_LIST_API_BASE,\n}: {\n allowList: AllowList;\n httpClient?: IHttpClient;\n baseUrl?: string;\n}) => {\n const { post, retries } = httpClient;\n\n const data: AllowListCreateParameters = {\n unhashedLeaves: allowList.entries.map((entry) =>\n encodeAbiParameters(ALLOWLIST_ABI_PARAMETERS, [\n entry.user,\n entry.maxCanMint,\n entry.price,\n ]),\n ),\n leafTypeDescriptor: [\"address\", \"uint256\", \"uint256\"],\n packedEncoding: false,\n };\n\n return (\n await retries(() => post<AllowListCreateResponse>(`${baseUrl}tree`, data))\n ).merkleRoot;\n};\n\nexport const getAllowListEntry = async ({\n merkleRoot,\n address,\n httpClient = defaultHttpClient,\n baseUrl = ALLOW_LIST_API_BASE,\n}: {\n merkleRoot: string;\n httpClient?: IHttpClient;\n address: string;\n baseUrl?: string;\n}) => {\n const { retries, get } = httpClient;\n\n const response = await retries(() =>\n get<LanyardResponse>(\n `${baseUrl}proof?address=${address}&root=${merkleRoot}`,\n ),\n );\n\n const allowListEntry = getZoraEntry(response, merkleRoot);\n\n return {\n accessAllowed: allowListEntry && allowListEntry?.proof?.length,\n allowListEntry,\n };\n};\n\nexport interface IAllowListClient {\n createAllowList: typeof createAllowList;\n getAllowListEntry: typeof getAllowListEntry;\n}\n\nexport const defaultAllowListClient = (): IAllowListClient => ({\n createAllowList,\n getAllowListEntry,\n});\n"],"mappings":"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","names":["src","base","gte","gte","coerce","cache","from","require_valid","gte","require_semver","gte","coerce","zeroAddress","zoraCreator1155PremintExecutorImplABI","parseEther","parseEther","PremintConfigVersion","zoraCreator1155PremintExecutorImplABI","zeroAddress","PremintConfigVersion","PremintConfigVersion","post","retries","get","httpClient","httpClient","retries","post","mint","zeroAddress","zeroAddress","zeroAddress","zeroAddress","isPrimaryMintActive","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","zoraCreator1155ImplABI","decodeEventLog","zoraCreator1155ImplABI","semver","zoraCreator1155ImplABI","encodeFunctionData","zeroAddress","parseEther","erc20MinterABI","zoraCreator1155ImplABI","zoraTimedSaleStrategyABI","isAllowList","isErc20","isFixedPrice","zeroAddress","encodeFunctionData","zoraCreator1155ImplABI","parseEther","zeroAddress","parseEther","zeroAddress","retries","responseData","decodeEventLog","zoraCreator1155ImplABI","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","encodeFunctionData","zeroAddress","encodeFunctionData","zeroAddress","encodeFunctionData","parseAbi","wethAddress","erc20z","encodeFunctionData","encodeFunctionData","parseAbi","encodeAbiParameters","zoraCreator1155ImplABI","callerAndCommenterABI","callerAndCommenterAddress","mainnet","parseAbi","mainnet","mainnet","sepolia","zora","zoraSepolia","base","baseSepolia","optimism","arbitrum","mainnet","sepolia","zora","zoraSepolia","base","baseSepolia","optimism","arbitrum","parseEther","zoraTimedSaleStrategyABI","zoraTimedSaleStrategyAddress","callerAndCommenterABI","callerAndCommenterAddress","zoraCreator1155ImplABI","encodeAbiParameters","coerce","base","encode","length","i","j","decode","encode","decode","coerce","encode","decode","decode","decode","coerce","equals","base","baseCache","equals","base","decode","coerce","length","cache","cid","encodeAbiParameters","httpClient","post","retries","encodeAbiParameters"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/index.js","../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/chain-constants.ts","../src/constants.ts","../src/premint/conversions.ts","../src/utils.ts","../src/apis/network-config.ts","../src/premint/contract-types.ts","../src/retries.ts","../src/apis/http-api-base.ts","../src/premint/premint-api-client.ts","../src/mint/subgraph-queries.ts","../src/apis/subgraph-querier.ts","../src/apis/subgraph-getter.ts","../src/mint/strategies-parsing.ts","../src/mint/subgraph-mint-getter.ts","../src/mint/types.ts","../src/mint/mint-queries.ts","../src/mint/mint-transactions.ts","../src/mint/utils.ts","../src/mint/mint-client.ts","../src/create/create-client.ts","../src/create/contract-setup.ts","../src/create/token-setup.ts","../src/create/minter-defaults.ts","../src/create/minter-setup.ts","../src/create/mint-from-create.ts","../src/create/subgraph-queries.ts","../src/create/contract-getter.ts","../src/sparks/mints-queries.ts","../src/sparks/sparks-contracts.ts","../src/rewards/rewards-queries.ts","../src/apis/multicall3.ts","../src/rewards/subgraph-queries.ts","../src/rewards/subgraph-rewards-getter.ts","../src/rewards/rewards-client.ts","../src/secondary/secondary-client.ts","../src/secondary/uniswap/uniswapQuote.ts","../src/secondary/uniswap/uniswapReserves.ts","../src/secondary/uniswap/abis.ts","../src/secondary/conversions.ts","../src/secondary/uniswap/uniswapQuoteExact.ts","../src/secondary/slippage.ts","../src/secondary/utils.ts","../src/sdk.ts","../src/ipfs/arweave.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bytes.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base32.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base36.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/bases/base58.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/vendor/varint.js","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/varint.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/.pnpm/multiformats@13.3.1/node_modules/multiformats/src/cid.ts","../src/ipfs/ipfs.ts","../src/ipfs/gateway.ts","../src/ipfs/mimeTypes.ts","../src/ipfs/token-metadata.ts","../src/ipfs/text-metadata.ts","../src/allow-list/allow-list-client.ts"],"sourcesContent":["// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n TypedDataDefinition,\n WalletClient,\n} from \"viem\";\nimport {\n encodePremintConfig,\n zoraCreator1155PremintExecutorImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n getPremintMintFee,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport { IPremintAPI, IPremintGetter } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport {\n makeContractParameters,\n mintRecipientOrAccount,\n PublicClient,\n} from \"src/utils\";\nimport { ContractCreationConfigAndAddress } from \"./contract-types\";\nimport {\n MakeMintParametersArgumentsBase,\n MakePremintMintParametersArguments,\n MintCosts,\n} from \"src/mint/types\";\nimport { PremintFromApi } from \"./conversions\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\nimport { getApiNetworkConfigForChain } from \"src/apis/network-config\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\ntype URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nfunction getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n */\nexport class PremintClient {\n readonly apiClient: IPremintAPI;\n readonly publicClient: PublicClient;\n readonly chainId: number;\n\n constructor({\n chainId,\n publicClient,\n premintApi,\n }: {\n chainId: number;\n publicClient: PublicClient;\n premintApi: IPremintAPI;\n }) {\n this.chainId = chainId;\n this.apiClient = premintApi;\n this.publicClient = publicClient;\n }\n\n getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n blockExplorerUrl?: string,\n ) {\n return getDataFromPremintReceipt(receipt, this.chainId, blockExplorerUrl);\n }\n\n /**\n * Prepares data for deleting a premint\n *\n * @param parameters - Parameters for deleting the premint {@link DeletePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async deletePremint(\n params: DeletePremintParams,\n ): Promise<PremintReturn<any>> {\n return deletePremint({\n ...params,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremint({ address, uid }: { address: Address; uid: number }) {\n return await this.apiClient.get({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n contract: collection,\n publicClient: this.publicClient,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Prepares the parameters to collect a premint; it brings the contract and token onchain, then collects\n * tokens on that contract for the mint recipient.\n *\n * @param parameters - Parameters for collecting the Premint {@link MakeMintParametersArguments}\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n minterAccount,\n tokenContract,\n uid,\n mintArguments,\n firstMinter,\n }: MakeMintParametersArguments) {\n return await collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint: mintArguments?.quantityToMint || 1n,\n mintComment: mintArguments?.mintComment,\n mintReferral: mintArguments?.mintReferral,\n mintRecipient: mintArguments?.mintRecipient,\n firstMinter,\n premintGetter: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n chainId: number,\n blockExplorerUrl?: string,\n) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n tokenId: premintedLog?.tokenId,\n collectionAddres: premintedLog?.contractAddress,\n premintedLog,\n urls: makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n chainId,\n blockExplorerUrl,\n }),\n };\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: IPremintAPI;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\ntype SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n} & CheckSignatureParams;\n\ntype SignAndSubmitReturn = {\n /** The signature of the Premint */\n signature: Hex;\n /** The account that signed the Premint */\n signerAccount: Account | Address;\n};\n\ntype CheckSignatureParams =\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature: true;\n /** Account that signed the premint */\n account: Account | Address;\n }\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: false;\n account?: Account | Address;\n };\n\ntype SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n} & CheckSignatureParams;\n\ntype PremintReturn<T extends PremintConfigVersion> = {\n /** The typedDataDefinition of the Premint which is to be signed the creator. */\n typedDataDefinition: TypedDataDefinition;\n /** The deterministic collection address of the Premint */\n collectionAddress: Address;\n /** Signs the Premint, and submits it and the signature to the Zora Premint API */\n signAndSubmit: (params: SignAndSubmitParams) => Promise<SignAndSubmitReturn>;\n /** For the case where the premint is signed externally, takes the signature for the Premint, and submits it and the Premint to the Zora Premint API */\n submit: (params: SubmitParams) => Promise<void>;\n urls: URLSReturnType;\n} & PremintConfigWithVersion<T>;\n\nfunction makePremintReturn<T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n publicClient,\n apiClient,\n chainId,\n ...collectionAndAddress\n}: PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress &\n PremintContext): PremintReturn<T> {\n const { collection, collectionAddress } = collectionAndAddress;\n const typedDataDefinition = premintTypedDataDefinition({\n verifyingContract: collectionAddress,\n premintConfig,\n premintConfigVersion,\n chainId,\n });\n\n const signAndSubmit = async ({\n walletClient,\n account: account,\n checkSignature,\n }: SignAndSubmitParams): Promise<SignAndSubmitReturn> => {\n const { signature, signerAccount } = await signPremint({\n account,\n walletClient,\n typedDataDefinition,\n });\n\n await submit({\n signature,\n checkSignature,\n account: signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n account,\n }: SubmitParams) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: account,\n });\n\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n await apiClient.postSignature({\n ...toContractCreationConfigOrAddress(collectionAndAddress),\n signature: signature,\n premintConfig,\n premintConfigVersion,\n });\n };\n\n const urls = makeUrls({\n chainId,\n address: collectionAddress,\n uid: premintConfig.uid,\n });\n\n return {\n premintConfig,\n premintConfigVersion,\n typedDataDefinition,\n collectionAddress,\n signAndSubmit,\n submit,\n urls,\n };\n}\n\nasync function signPremint({\n account,\n walletClient,\n typedDataDefinition,\n}: {\n /** The account that is to sign the premint */\n account?: Address | Account;\n /** WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** Data */\n typedDataDefinition: TypedDataDefinition;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...typedDataDefinition,\n });\n\n return {\n signature,\n signerAccount: account,\n };\n}\n\n/** DELETE */\n\ntype DeletePremintParams = {\n /** id of the premint to delete */\n uid: number;\n /** collection address of the Premint to delete */\n collection: Address;\n};\n\nasync function deletePremint({\n uid,\n collection,\n publicClient,\n apiClient,\n chainId,\n}: DeletePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n\n return makePremintReturn({\n premintConfig: deletedPremint,\n premintConfigVersion,\n collectionAddress,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\ntype MakeMintParametersArguments = {\n /** uid of the Premint to mint */\n uid: number;\n /** Premint contract address */\n tokenContract: Address;\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Minting settings */\n mintArguments?: {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintRecipient?: Address;\n };\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n};\n\n/** ======== MINTING ======== */\n\nasync function collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint,\n mintComment = \"\",\n mintReferral,\n mintRecipient,\n firstMinter,\n premintGetter,\n publicClient,\n}: Omit<MakePremintMintParametersArguments, \"mintType\"> & {\n premintGetter: IPremintGetter;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premint\",\n any,\n any,\n any,\n Account | Address\n >\n> {\n if (typeof quantityToMint !== \"undefined\" && quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid,\n });\n\n const mintFee = await getPremintMintFee({\n tokenContract,\n publicClient,\n });\n\n return buildPremintMintCall({\n mintArguments: {\n minterAccount,\n quantityToMint,\n firstMinter,\n mintComment,\n mintRecipient,\n mintReferral,\n },\n mintFee,\n premint,\n });\n}\n\nexport const buildPremintMintCall = ({\n mintArguments: {\n minterAccount,\n mintComment = \"\",\n mintRecipient,\n mintReferral,\n firstMinter,\n quantityToMint,\n },\n premint: { collection, collectionAddress, premint, signature },\n mintFee,\n}: {\n mintArguments: Omit<MakeMintParametersArgumentsBase, \"tokenContract\"> & {\n firstMinter?: Address;\n };\n premint: Pick<\n PremintFromApi,\n \"collection\" | \"collectionAddress\" | \"premint\" | \"signature\"\n >;\n mintFee: bigint;\n}): SimulateContractParametersWithAccount => {\n const mintArgumentsContract: PremintMintArguments = {\n mintComment: mintComment,\n mintRecipient: mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n }),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral,\n }),\n };\n\n const collectionOrEmpty: ContractCreationConfig = collection\n ? defaultAdditionalAdmins(collection)\n : emptyContractCreationConfig();\n const collectionAddressToSubmit = collection\n ? zeroAddress\n : collectionAddress;\n\n const firstMinterToSubmit: Address =\n firstMinter ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address);\n\n if (premint.premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value =\n (mintFee + premint.premintConfig.tokenConfig.pricePerToken) *\n BigInt(quantityToMint);\n\n return makeContractParameters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig(premint),\n signature,\n BigInt(quantityToMint),\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n};\n\nfunction makeUrls({\n uid,\n address,\n tokenId,\n chainId,\n blockExplorerUrl,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chainId: number;\n blockExplorerUrl?: string;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chainId);\n\n return {\n explorer: tokenId\n ? `https://${blockExplorerUrl}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n ContractCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { zeroAddress, parseEther, Account } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\nimport { IPremintGetter } from \"./premint-api-client\";\nimport { isPremintConfigV1, isPremintConfigV2 } from \"./conversions\";\nimport { MintCosts } from \"src/mint/types\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\n\nexport async function isAuthorizedToCreatePremint({\n contractAdmin = zeroAddress,\n additionalAdmins = [],\n collectionAddress,\n publicClient,\n signer,\n}: {\n contractAdmin?: Address;\n additionalAdmins?: Address[];\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address | Account;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n typeof signer === \"string\" ? signer : signer.address,\n contractAdmin,\n collectionAddress,\n additionalAdmins,\n ],\n });\n}\n\nexport async function getPremintCollectionAddress({\n publicClient,\n contract: collection,\n contractAddress: collectionAddress,\n}: {\n publicClient: PublicClient;\n} & ContractCreationConfigOrAddress): Promise<Address> {\n if (typeof collection !== \"undefined\") {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractWithAdditionalAdminsAddress\",\n args: [\n {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n },\n ],\n });\n }\n\n return collectionAddress;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\ntype GetMintCostsParams = {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint | number;\n publicClient: PublicClient;\n};\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: GetMintCostsParams): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n const quantityToMintBigInt = BigInt(quantityToMint);\n\n return {\n mintFee: mintFee * quantityToMintBigInt,\n totalPurchaseCost: tokenPrice * quantityToMintBigInt,\n totalCostEth: (mintFee + tokenPrice) * quantityToMintBigInt,\n };\n}\nasync function getPremintPricePerToken({\n collection,\n uid,\n premintGetter,\n}: {\n collection: Address;\n uid: number;\n premintGetter: IPremintGetter;\n}) {\n const { premint: premintConfigWithVersion } = await premintGetter.get({\n collectionAddress: collection,\n uid,\n });\n\n if (\n isPremintConfigV1(premintConfigWithVersion) ||\n isPremintConfigV2(premintConfigWithVersion)\n ) {\n return premintConfigWithVersion.premintConfig.tokenConfig.pricePerToken;\n }\n\n throw new Error(\"Premint version not supported to get price\");\n}\n\nexport async function getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n uid,\n ...rest\n}: Omit<GetMintCostsParams, \"tokenPrice\"> & {\n premintGetter: IPremintGetter;\n uid: number;\n}) {\n const pricePerToken = await getPremintPricePerToken({\n uid,\n premintGetter,\n collection: rest.tokenContract,\n });\n\n return await getPremintMintCosts({\n ...rest,\n tokenPrice: pricePerToken,\n });\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport const emptyContractCreationConfig = (): ContractCreationConfig => ({\n contractAdmin: zeroAddress,\n contractURI: \"\",\n contractName: \"\",\n additionalAdmins: [],\n});\n\nexport function defaultAdditionalAdmins(\n collection: ContractCreationConfigWithOptionalAdditionalAdmins,\n): ContractCreationConfig {\n return {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n };\n}\n\nexport const toContractCreationConfigOrAddress = ({\n collection,\n collectionAddress,\n}: {\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: Address;\n}) => {\n if (typeof collection !== \"undefined\") {\n return {\n contract: collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n contractAddress: collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\n};\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n\nexport const getSubgraphUrl = (chainId: number): string => {\n const networkConfig = networkConfigByChain[chainId];\n\n if (!networkConfig) {\n throw new Error(`Network not configured for chain id ${chainId}`);\n }\n\n return networkConfig.subgraphUrl;\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n\nexport const zora1155LegacyAbi = [\n {\n type: \"function\",\n name: \"mintWithRewards\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n internalType: \"contract IMinter1155\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"minterArguments\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"mintReferral\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n] as const;\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n PremintSignatureGetOfCollectionResponse,\n PremintSignatureGetResponse,\n} from \"./premint-api-client\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig | undefined => {\n if (!collection) return undefined;\n\n return {\n additionalAdmins:\n (collection.additionalAdmins as Address[] | undefined) || [],\n contractAdmin: collection.contractAdmin as Address,\n contractName: collection.contractName,\n contractURI: collection.contractURI,\n };\n};\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport type PremintFromApi = ReturnType<typeof convertGetPremintApiResponse>;\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n collection: convertCollectionFromApi(response.collection),\n collectionAddress: response.collection_address as Address,\n signature: response.signature as Hex,\n signer: response.signer as Address,\n premint: convertPremintFromApi(response.premint),\n});\n\nexport type PremintCollectionFromApi = ReturnType<\n typeof convertGetPremintOfCollectionApiResponse\n>;\n\nexport const convertGetPremintOfCollectionApiResponse = (\n response: PremintSignatureGetOfCollectionResponse,\n) => ({\n collection: convertCollectionFromApi({\n contractAdmin: response.contract_admin,\n contractName: response.contract_name,\n contractURI: response.contract_uri,\n }),\n premints: response.premints.map((premint) => ({\n premint: convertPremintFromApi(premint),\n signature: premint.signature as Hex,\n })),\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n contract: collection,\n contractAddress: collectionAddress,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection: collection as\n | PremintSignatureRequestBody[\"collection\"]\n | undefined,\n collection_address: collectionAddress,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n\nexport const isPremintConfigV1 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V1> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V1;\n\nexport const isPremintConfigV2 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V2> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V2;\n","import {\n Account,\n Address,\n PublicClient as BasePublicClient,\n Transport,\n Chain,\n} from \"viem\";\nimport { SimulateContractParametersWithAccount } from \"./types\";\n\nexport const makeContractParameters = (\n args: SimulateContractParametersWithAccount,\n) => args;\n\nexport type PublicClient = Pick<\n BasePublicClient<Transport, Chain>,\n \"readContract\" | \"getBlock\" | \"simulateContract\" | \"getBalance\" | \"chain\"\n>;\n\nexport type ClientConfig = {\n /** The chain that the client is to run on. */\n chainId: number;\n /** Optional public client for the chain. If not provide, it is created. */\n publicClient: PublicClient;\n};\n\nexport function setupClient({ chainId, publicClient }: ClientConfig) {\n return {\n chainId,\n publicClient,\n };\n}\n\nexport function mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n}: {\n mintRecipient?: Address;\n minterAccount: Address | Account;\n}): Address {\n return (\n mintRecipient ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address)\n );\n}\n\nexport type Concrete<Type> = {\n [Property in keyof Type]-?: Type[Property];\n};\n\nexport const addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n","import { NetworkConfig, networkConfigByChain } from \"./chain-constants\";\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n","import {\n ContractCreationConfig,\n PremintConfigVersion as PremintConfigVersionOrig,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n\nexport type ContractCreationConfigWithOptionalAdditionalAdmins = Omit<\n ContractCreationConfig,\n \"additionalAdmins\"\n> & {\n /** Optional: if there are additional admins accounts that should be added as contract wide admins upon contract creation. */\n additionalAdmins?: Address[];\n};\n\nexport type ContractCreationConfigAndAddress = {\n /** Parameters for creating the contract for new premints. */\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n /** Premint collection address */\n collectionAddress: Address;\n};\n\nexport type ContractCreationConfigOrAddress =\n | {\n /** Parameters for creating the contract for new premints. */\n contract: ContractCreationConfigWithOptionalAdditionalAdmins;\n contractAddress?: undefined;\n }\n | {\n contract?: undefined;\n /** Premint collection address */\n contractAddress: Address;\n };\n","async function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\nconst retryInternal = async <T>({\n tryFn,\n maxTries = 3,\n atTry,\n linearBackoffMS = 200,\n shouldRetryOnError = () => true,\n}: {\n tryFn: () => T;\n maxTries?: number;\n atTry: number;\n linearBackoffMS?: number;\n shouldRetryOnError?: (err: any) => boolean;\n}): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (shouldRetryOnError(err)) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retryInternal({\n tryFn,\n maxTries,\n atTry: atTry + 1,\n linearBackoffMS,\n shouldRetryOnError,\n });\n }\n }\n throw err;\n }\n};\n\nexport const retriesGeneric = async <T>(params: {\n tryFn: () => T;\n maxTries?: number;\n linearBackoffMS?: number;\n shouldRetryOnError?: (err: any) => boolean;\n}) => {\n return retryInternal({\n ...params,\n atTry: 1,\n });\n};\n","import { retriesGeneric } from \"src/retries\";\n\nexport class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const controller = new AbortController();\n const { signal } = controller;\n\n // 30 minute timeout:\n const timeout = 30 * 60 * 1000;\n\n // Set a timeout to automatically abort the request\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n signal,\n });\n\n clearTimeout(timeoutId);\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nconst defaultShouldRetry = (err: any) => {\n return err instanceof BadResponseError && err.status >= 500;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n linearBackoffMS: number = 200,\n shouldRetry: (err: any) => boolean = defaultShouldRetry,\n): Promise<T> => {\n return retriesGeneric({\n tryFn,\n maxTries,\n linearBackoffMS,\n shouldRetryOnError: shouldRetry,\n });\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport {\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintCollectionFromApi,\n PremintFromApi,\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n convertGetPremintOfCollectionApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\nimport { getApiNetworkConfigForChain } from \"src/apis/network-config\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetOfCollectionType =\n paths[\"/signature/{chain_name}/{collection_address}\"][\"get\"];\nexport type PremintSignatureGetOfCollectionResponse =\n SignaturePremintGetOfCollectionType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nexport const getSignature = async ({\n collectionAddress,\n uid,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n uid: number;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintFromApi> => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}/${uid}`,\n ),\n );\n\n return convertGetPremintApiResponse(result);\n};\n\nconst getOfCollection = async ({\n collectionAddress,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}) => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetOfCollectionResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}`,\n ),\n );\n\n return convertGetPremintOfCollectionApiResponse(result);\n};\n\nexport interface IPremintGetter {\n get(params: {\n collectionAddress: Address;\n uid: number;\n }): Promise<PremintFromApi>;\n\n getOfCollection(params: {\n collectionAddress: Address;\n }): Promise<PremintCollectionFromApi>;\n}\n\nexport interface IPremintAPI {\n get: IPremintGetter[\"get\"];\n\n getOfCollection: IPremintGetter[\"getOfCollection\"];\n\n postSignature<T extends PremintConfigVersion>(\n params: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress,\n ): Promise<PremintSignatureResponse>;\n}\n\nclass PremintAPIClient implements IPremintAPI {\n chainId: number;\n httpClient: IHttpClient;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.chainId = chainId;\n this.httpClient = httpClient || defaultHttpClient;\n }\n postSignature: IPremintAPI[\"postSignature\"] = ({\n signature,\n ...rest\n }): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\n chainId: this.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n get: IPremintAPI[\"get\"] = async ({ collectionAddress, uid }) => {\n return getSignature({\n collectionAddress,\n uid,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n\n getOfCollection: IPremintAPI[\"getOfCollection\"] = async ({\n collectionAddress,\n }) => {\n return getOfCollection({\n collectionAddress,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\nexport type FixedPriceSaleStrategyResult = {\n type: \"FIXED_PRICE\";\n fixedPrice: {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n };\n};\n\nexport type ERC20SaleStrategyResult = {\n type: \"ERC_20_MINTER\";\n erc20Minter: {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n currency: Address;\n };\n};\n\nexport type PresaleSalesStrategyResult = {\n type: \"PRESALE\";\n presale: {\n address: Address;\n presaleStart: string;\n presaleEnd: string;\n merkleRoot: string;\n };\n};\n\nexport type ZoraTimedMinterSaleStrategyResult = {\n type: \"ZORA_TIMED\";\n zoraTimedMinter: {\n address: Address;\n mintFee: string;\n saleStart: string;\n saleEnd: string;\n erc20Z: {\n id: Address;\n pool: Address;\n };\n secondaryActivated: boolean;\n marketCountdown?: string;\n minimumMarketEth?: string;\n };\n};\n\nexport type SalesStrategyResult =\n | FixedPriceSaleStrategyResult\n | ERC20SaleStrategyResult\n | PresaleSalesStrategyResult\n | ZoraTimedMinterSaleStrategyResult;\n\nexport type TokenQueryResult = {\n tokenId?: string;\n creator: Address;\n uri: string;\n totalMinted: string;\n maxSupply: string;\n salesStrategies?: SalesStrategyResult[];\n tokenStandard: \"ERC1155\" | \"ERC721\";\n contract: {\n mintFeePerQuantity: string;\n salesStrategies: SalesStrategyResult[];\n address: Address;\n contractVersion: string;\n contractURI: string;\n name: string;\n };\n};\n\nconst NFT_SALE_STRATEGY_FRAGMENT = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n presale {\n address\n presaleStart\n presaleEnd\n merkleRoot\n }\n zoraTimedMinter {\n address\n mintFee\n saleStart\n saleEnd\n erc20Z {\n id \n pool\n }\n secondaryActivated\n marketCountdown\n minimumMarketEth\n }\n}`;\n\nconst TOKEN_FRAGMENT = `\nfragment Token on ZoraCreateToken {\n creator\n tokenId\n uri\n totalMinted\n maxSupply\n tokenStandard\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\", \"PRESALE\", \"ZORA_TIMED\"]}) {\n ...SaleStrategy\n }\n contract {\n address\n mintFeePerQuantity\n contractVersion\n contractURI\n name\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\", \"PRESALE\", \"ZORA_TIMED\"]}) {\n ...SaleStrategy\n }\n }\n}`;\n\nconst FRAGMENTS = `\n${NFT_SALE_STRATEGY_FRAGMENT}\n${TOKEN_FRAGMENT}\n`;\n\nexport function buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n}: {\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult> {\n return {\n query: `\n${FRAGMENTS}\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n ...Token \n }\n}\n`,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateToken,\n };\n}\n\nexport function buildContractTokensQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult[]> {\n return {\n query: `\n${FRAGMENTS}\nquery ($contract: Bytes!) {\n zoraCreateTokens(\n where: {address: $contract}\n ) {\n ...Token\n }\n}\n`,\n variables: {\n contract: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateTokens,\n };\n}\nexport function buildPremintsOfContractQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<{ uid: string; tokenId: string }[]> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n premints(where:{contractAddress:$contractAddress}) {\n uid\n tokenId\n }\n }\n `,\n variables: {\n contractAddress: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.premints,\n };\n}\n","import { IHttpClient } from \"./http-api-base\";\n\nexport type ISubgraphQuery<T> = {\n query: string;\n variables: Record<string, any>;\n parseResponseData: (data: any | undefined) => T | undefined;\n};\n\nexport interface ISubgraphQuerier {\n query: (params: {\n subgraphUrl: string;\n query: string;\n variables?: Record<string, any>;\n maxRetries?: number;\n }) => Promise<object | undefined>;\n}\n\nexport class SubgraphQuerier implements ISubgraphQuerier {\n httpClient: IHttpClient;\n\n constructor(httpClient: IHttpClient) {\n this.httpClient = httpClient;\n }\n\n async query({\n subgraphUrl,\n query,\n variables,\n }: {\n subgraphUrl: string;\n query: string;\n variables?: Record<string, any>;\n }) {\n const { retries, post } = this.httpClient;\n\n const result = await retries(async () => {\n return await post<any>(subgraphUrl, {\n query,\n variables,\n });\n });\n\n return result?.data;\n }\n}\n","import { getApiNetworkConfigForChain } from \"./network-config\";\nimport { NetworkConfig } from \"./chain-constants\";\nimport {\n ISubgraphQuerier,\n ISubgraphQuery,\n SubgraphQuerier,\n} from \"./subgraph-querier\";\nimport { httpClient as defaultHttpClient } from \"../apis/http-api-base\";\n\nexport class SubgraphGetter {\n public readonly subgraphQuerier: ISubgraphQuerier;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n this.subgraphQuerier =\n subgraphQuerier || new SubgraphQuerier(defaultHttpClient);\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async querySubgraphWithRetries<T>({\n query,\n variables,\n parseResponseData,\n }: ISubgraphQuery<T>) {\n const responseData = await this.subgraphQuerier.query({\n subgraphUrl: this.networkConfig.subgraphUrl,\n query,\n variables,\n });\n\n return parseResponseData(responseData);\n }\n}\n","import { GenericTokenIdTypes } from \"src/types\";\nimport {\n SaleType,\n OnchainMintable,\n OnchainSalesStrategies,\n GetMintableReturn,\n ZoraTimedSaleStrategy,\n} from \"./types\";\nimport {\n ERC20SaleStrategyResult,\n FixedPriceSaleStrategyResult,\n PresaleSalesStrategyResult,\n SalesStrategyResult,\n TokenQueryResult,\n ZoraTimedMinterSaleStrategyResult,\n} from \"./subgraph-queries\";\n\ntype ParsedSalesConfig = {\n salesStrategy: OnchainSalesStrategies;\n // saleActive: boolean;\n saleEnd: bigint | undefined;\n saleStart: bigint;\n};\n\nfunction parseFixedPriceSalesConfig(\n fixedPrice: FixedPriceSaleStrategyResult[\"fixedPrice\"],\n contractMintFee: bigint,\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(fixedPrice.saleEnd);\n return {\n salesStrategy: {\n saleType: \"fixedPrice\",\n ...fixedPrice,\n maxTokensPerAddress: BigInt(fixedPrice.maxTokensPerAddress),\n pricePerToken: BigInt(fixedPrice.pricePerToken),\n mintFeePerQuantity: contractMintFee,\n },\n saleEnd: BigInt(fixedPrice.saleEnd),\n saleStart: BigInt(fixedPrice.saleStart),\n // saleActive:\n // BigInt(fixedPrice.saleStart) <= blockTime && BigInt(saleEnd) > blockTime,\n };\n}\n\nfunction parseERC20SalesConfig(\n erc20Minter: ERC20SaleStrategyResult[\"erc20Minter\"],\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(erc20Minter.saleEnd);\n return {\n salesStrategy: {\n saleType: \"erc20\",\n ...erc20Minter,\n maxTokensPerAddress: BigInt(erc20Minter.maxTokensPerAddress),\n pricePerToken: BigInt(erc20Minter.pricePerToken),\n mintFeePerQuantity: 0n,\n },\n saleEnd: BigInt(erc20Minter.saleEnd),\n saleStart: BigInt(erc20Minter.saleStart),\n // saleActive:\n // BigInt(erc20Minter.saleStart) <= blockTime && saleEnd > blockTime,\n };\n}\n\nfunction parsePresaleSalesConfig(\n presale: PresaleSalesStrategyResult[\"presale\"],\n contractMintFee: bigint,\n // blockTime: bigint,\n): ParsedSalesConfig {\n // const saleEnd = BigInt(presale.presaleEnd);\n return {\n salesStrategy: {\n saleType: \"allowlist\",\n address: presale.address,\n merkleRoot: presale.merkleRoot,\n saleStart: presale.presaleStart,\n saleEnd: presale.presaleEnd,\n mintFeePerQuantity: contractMintFee,\n },\n saleEnd: BigInt(presale.presaleEnd),\n saleStart: BigInt(presale.presaleStart),\n // saleActive:\n // BigInt(presale.presaleStart) <= blockTime && saleEnd > blockTime,\n };\n}\n\nfunction parseZoraTimedSalesConfig(\n zoraTimedMinter: ZoraTimedMinterSaleStrategyResult[\"zoraTimedMinter\"],\n // blockTime: bigint,\n): ParsedSalesConfig {\n const saleEnd = BigInt(zoraTimedMinter.saleEnd);\n return {\n salesStrategy: {\n saleType: \"timed\",\n address: zoraTimedMinter.address,\n mintFee: BigInt(zoraTimedMinter.mintFee),\n saleStart: zoraTimedMinter.saleStart,\n saleEnd: zoraTimedMinter.saleEnd,\n erc20Z: zoraTimedMinter.erc20Z.id,\n pool: zoraTimedMinter.erc20Z.pool,\n secondaryActivated: zoraTimedMinter.secondaryActivated,\n mintFeePerQuantity: BigInt(zoraTimedMinter.mintFee),\n marketCountdown: zoraTimedMinter.marketCountdown\n ? BigInt(zoraTimedMinter.marketCountdown)\n : undefined,\n minimumMarketEth: zoraTimedMinter.minimumMarketEth\n ? BigInt(zoraTimedMinter.minimumMarketEth)\n : undefined,\n },\n saleEnd: saleEnd > 0n ? saleEnd : undefined,\n saleStart: BigInt(zoraTimedMinter.saleStart),\n // saleActive:\n // BigInt(zoraTimedMinter.saleStart) <= blockTime &&\n // (hasSaleEnd ? saleEnd > blockTime : true),\n };\n}\n\nfunction parseSalesConfig(\n targetStrategy: SalesStrategyResult,\n contractMintFee: bigint,\n): ParsedSalesConfig {\n switch (targetStrategy.type) {\n case \"FIXED_PRICE\":\n return parseFixedPriceSalesConfig(\n targetStrategy.fixedPrice,\n contractMintFee,\n // blockTime,\n );\n case \"ERC_20_MINTER\":\n return parseERC20SalesConfig(targetStrategy.erc20Minter);\n case \"PRESALE\":\n return parsePresaleSalesConfig(\n targetStrategy.presale,\n contractMintFee,\n // blockTime,\n );\n case \"ZORA_TIMED\":\n return parseZoraTimedSalesConfig(\n targetStrategy.zoraTimedMinter,\n // blockTime,\n );\n default:\n throw new Error(\"Unknown saleType\");\n }\n}\n\nfunction isPrimaryMintActive(sale: ParsedSalesConfig, blockTime: bigint) {\n if (sale.saleStart > blockTime) return false;\n if (!sale.saleEnd) return true;\n\n return sale.saleEnd > blockTime;\n}\n\nfunction isSecondaryMinter(\n result: OnchainSalesStrategies,\n): result is ZoraTimedSaleStrategy {\n return result.saleType === \"timed\";\n}\n\nfunction isSecondaryMarketActive(sale: ParsedSalesConfig) {\n const salesStrategy = sale.salesStrategy;\n if (isSecondaryMinter(salesStrategy)) {\n return salesStrategy.secondaryActivated;\n }\n return false;\n}\n\ntype WithPrimaryAndSecondaryMintActive = {\n strategy: ParsedSalesConfig;\n primaryMintActive: boolean;\n secondaryMarketActive: boolean;\n};\n\nfunction getTargetStrategy({\n preferredSaleType,\n blockTime,\n parsedStrategies,\n}: {\n preferredSaleType?: SaleType;\n blockTime: bigint;\n parsedStrategies: ParsedSalesConfig[];\n}): WithPrimaryAndSecondaryMintActive | undefined {\n const withPrimaryAndSecondaryMintActive = parsedStrategies.map(\n (strategy) => ({\n strategy,\n primaryMintActive: isPrimaryMintActive(strategy, blockTime),\n secondaryMarketActive: isSecondaryMarketActive(strategy),\n }),\n );\n const stillValidSalesStrategies = withPrimaryAndSecondaryMintActive.filter(\n ({ primaryMintActive, secondaryMarketActive }) =>\n primaryMintActive || secondaryMarketActive,\n );\n\n const saleStrategies = stillValidSalesStrategies.sort((a, b) =>\n (a.strategy.saleEnd ?? 0n) > (b.strategy.saleEnd ?? 0n) ? 1 : -1,\n );\n\n let targetStrategy: WithPrimaryAndSecondaryMintActive | undefined;\n\n if (!preferredSaleType) {\n return saleStrategies[0];\n } else {\n targetStrategy = saleStrategies.find(\n ({ strategy: { salesStrategy } }) =>\n salesStrategy.saleType === preferredSaleType,\n );\n if (!targetStrategy) {\n targetStrategy = saleStrategies.find(\n ({ strategy: { salesStrategy } }) =>\n salesStrategy.saleType === \"timed\" ||\n salesStrategy.saleType === \"fixedPrice\" ||\n salesStrategy.saleType === \"erc20\",\n );\n if (!targetStrategy) throw new Error(\"Cannot find valid sale strategy\");\n return targetStrategy;\n }\n }\n\n return targetStrategy;\n}\n\nexport function findTargetStrategyWithPrimaryOrSecondarySaleActive({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n blockTime,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n defaultMintFee: bigint;\n blockTime: bigint;\n}) {\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const parsedStrategies = allStrategies.map((strategy) =>\n parseSalesConfig(strategy, defaultMintFee),\n );\n\n const targetStrategy = getTargetStrategy({\n preferredSaleType: preferredSaleType,\n blockTime,\n parsedStrategies,\n });\n\n return targetStrategy;\n}\n\nexport function parseAndFilterTokenQueryResult({\n token,\n tokenId,\n preferredSaleType,\n blockTime,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n blockTime: bigint;\n}): GetMintableReturn {\n const defaultMintFee = BigInt(token.contract.mintFeePerQuantity);\n const salesStrategyAndMintInfo =\n findTargetStrategyWithPrimaryOrSecondarySaleActive({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n blockTime,\n });\n\n const tokenInfo = parseTokenInfo({\n token,\n });\n\n return {\n salesConfigAndTokenInfo: {\n ...tokenInfo,\n salesConfig: salesStrategyAndMintInfo?.strategy.salesStrategy,\n },\n primaryMintActive: salesStrategyAndMintInfo?.primaryMintActive ?? false,\n primaryMintEnd: salesStrategyAndMintInfo?.strategy.saleEnd,\n secondaryMarketActive:\n salesStrategyAndMintInfo?.secondaryMarketActive ?? false,\n };\n}\n\nfunction parseTokenInfo({\n token,\n}: {\n token: TokenQueryResult;\n}): Omit<OnchainMintable, \"primaryMintActive\" | \"primaryMintEnd\"> {\n return {\n contract: {\n address: token.contract.address,\n name: token.contract.name,\n URI: token.contract.contractURI,\n },\n tokenURI: token.uri,\n tokenId: token.tokenId ? BigInt(token.tokenId) : undefined,\n mintType: token.tokenStandard === \"ERC721\" ? \"721\" : \"1155\",\n creator: token.creator,\n totalMinted: BigInt(token.totalMinted),\n maxSupply: BigInt(token.maxSupply),\n contractVersion: token.contract.contractVersion,\n };\n}\n","import { Address } from \"viem\";\nimport { ISubgraphQuerier } from \"../apis/subgraph-querier\";\nimport { IOnchainMintGetter, SaleType } from \"./types\";\nimport {\n buildContractTokensQuery,\n buildNftTokenSalesQuery,\n buildPremintsOfContractQuery,\n} from \"./subgraph-queries\";\nimport { SubgraphGetter } from \"src/apis/subgraph-getter\";\nimport { parseAndFilterTokenQueryResult } from \"./strategies-parsing\";\n\nexport class SubgraphMintGetter\n extends SubgraphGetter\n implements IOnchainMintGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n getMintable: IOnchainMintGetter[\"getMintable\"] = async ({\n tokenAddress,\n tokenId,\n }) => {\n const token = await this.querySubgraphWithRetries(\n buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n }),\n );\n\n if (!token) {\n throw new Error(\"Cannot find token\");\n }\n\n return token;\n };\n\n async getContractMintable({\n tokenAddress,\n preferredSaleType,\n blockTime,\n }: {\n tokenAddress: Address;\n preferredSaleType?: SaleType;\n blockTime: bigint;\n }) {\n const tokens = await this.querySubgraphWithRetries(\n buildContractTokensQuery({\n tokenAddress,\n }),\n );\n\n if (!tokens || tokens.length === 0) return [];\n\n return tokens\n .filter((x) => x.tokenId !== \"0\")\n .map((token) =>\n parseAndFilterTokenQueryResult({\n token,\n tokenId: token.tokenId,\n preferredSaleType,\n blockTime,\n }),\n );\n }\n\n async getContractPremintTokenIds({\n tokenAddress,\n }: {\n tokenAddress: Address;\n }) {\n const premints = await this.querySubgraphWithRetries(\n buildPremintsOfContractQuery({\n tokenAddress,\n }),\n );\n\n return (\n premints?.map((premint) => ({\n tokenId: BigInt(premint.tokenId),\n uid: +premint.uid,\n })) || []\n );\n }\n}\n","import { Account, Address } from \"viem\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n WithPublicClient,\n} from \"src/types\";\nimport { AllowListEntry } from \"src/allow-list/types\";\nimport { TokenQueryResult } from \"./subgraph-queries\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nexport type MintParameters<MintType> = {\n /** Type of the collection to be minted. */\n mintType: MintType;\n};\n\nexport type Erc1155MintParameters = MintParameters<\"1155\"> & {\n /** Token id to mint */\n tokenId: GenericTokenIdTypes;\n};\n\nexport type Erc721MintParameters = MintParameters<\"721\">;\n\nexport type OnChainMintParameters =\n | Erc1155MintParameters\n | Erc721MintParameters;\n\nexport type PremintMintParameters = MintParameters<\"premint\"> & {\n /** uid of the Premint to mint */\n uid: number;\n};\n\nexport type MintType = \"1155\" | \"721\" | \"allowlist\" | \"premint\";\n\nexport type MintTypes =\n | Erc1155MintParameters\n | Erc721MintParameters\n | PremintMintParameters;\n\nexport type GetMintParametersArguments = MintTypes & {\n /** Address of the contract that the item belongs to */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\ntype WithOptionalGetters<T> = T & {\n /** Optional override for getting onchain mints using indexed events */\n mintGetter?: IOnchainMintGetter;\n /** Optional override for getting premints */\n premintGetter?: IPremintGetter;\n};\n\nexport type WithPublicClientAndOptionalGetters<T> = WithOptionalGetters<\n WithPublicClient<T>\n>;\n\nexport type WithPublicClientAndRequiredGetters<T> = WithPublicClient<T> & {\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n};\n\nexport type GetMintParameters =\n WithPublicClientAndOptionalGetters<GetMintParametersArguments>;\n\nexport type GetMintsOfContractParametersArguments = {\n /** Address of the contract to get the tokens of */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport type GetMintsOfContractParameters =\n WithPublicClientAndOptionalGetters<GetMintsOfContractParametersArguments>;\n\nexport const isOnChainMint = (mint: MintTypes): mint is OnChainMintParameters =>\n mint.mintType !== \"premint\";\n\nexport const is1155Mint = (mint: MintTypes): mint is Erc1155MintParameters =>\n mint.mintType === \"1155\";\n\nexport type MintParametersBase = {\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Quantity of tokens to mint. Defaults to 1 */\n quantityToMint: number | bigint;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens. Defaults to the minting account */\n mintRecipient?: Address;\n /** If this is a premint, the address to get the first minter reward */\n firstMinter?: Address;\n /** If this is an allow list mint, the info for the allow list entry */\n allowListEntry?: AllowListEntry;\n};\n\nexport type MakeMintParametersArgumentsBase = MintParametersBase & {\n /** Premint contract address */\n tokenContract: Address;\n};\n\nexport type Make1155MintArguments = MakeMintParametersArgumentsBase &\n Erc1155MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type Make721MintArguments = MakeMintParametersArgumentsBase &\n Erc721MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type MakePremintMintParametersArguments =\n MakeMintParametersArgumentsBase &\n PremintMintParameters & {\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n };\n\nexport type MakeMintParametersArguments =\n | Make1155MintArguments\n | Make721MintArguments\n | MakePremintMintParametersArguments;\n\nexport type MakeMintParameters =\n WithPublicClient<MakeMintParametersArguments> & {\n mintGetter?: IOnchainMintGetter;\n premintGetter?: IPremintGetter;\n };\n\nexport type GetMintCostsParameterArguments = {\n /** Address of token contract/collection to get the mint costs for */\n collection: Address;\n /** Quantity of tokens that will be minted */\n quantityMinted: number | bigint;\n} & MintTypes;\n\nexport type SaleType =\n | \"fixedPrice\"\n | \"erc20\"\n | \"allowlist\"\n | \"premint\"\n | \"timed\";\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n mintFeePerQuantity: bigint;\n};\n\ntype PricedSaleStrategy = {\n pricePerToken: bigint;\n maxTokensPerAddress: bigint;\n};\n\nexport type StartAndEnd = {\n saleStart: string;\n saleEnd: string;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\"> &\n PricedSaleStrategy &\n StartAndEnd & {\n address: Address;\n };\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> &\n PricedSaleStrategy &\n StartAndEnd & {\n address: Address;\n currency: Address;\n };\n\ntype AllowListSaleStrategy = SaleStrategy<\"allowlist\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n merkleRoot: string;\n};\n\nexport type ZoraTimedSaleStrategy = SaleStrategy<\"timed\"> & {\n mintFee: bigint;\n erc20Z: Address;\n pool: Address;\n secondaryActivated: boolean;\n address: Address;\n saleStart: string;\n saleEnd?: string;\n minimumMarketEth?: bigint;\n marketCountdown?: bigint;\n};\n\ntype PremintSaleStrategy = SaleStrategy<\"premint\"> &\n PricedSaleStrategy & {\n duration: bigint;\n };\n\nexport type OnchainSalesStrategies =\n | FixedPriceSaleStrategy\n | ERC20SaleStrategy\n | AllowListSaleStrategy\n | ZoraTimedSaleStrategy;\n\nexport type SaleStrategies = OnchainSalesStrategies | PremintSaleStrategy;\n\nexport function isErc20SaleStrategy(\n salesConfig: SaleStrategies,\n): salesConfig is ERC20SaleStrategy {\n return salesConfig.saleType === \"erc20\";\n}\n\nexport function isTimedSaleStrategy(\n salesConfig: SaleStrategies,\n): salesConfig is ZoraTimedSaleStrategy {\n return salesConfig.saleType === \"timed\";\n}\n\nexport type ContractInfo = {\n /** Address of the contract */\n address: Address;\n /** Contract metadata uri */\n URI: string;\n /** Contract name */\n name: string;\n};\n\nexport type MintableBase = {\n /** The contract the mintable belongs to */\n contract: ContractInfo;\n /** Token metadata URI */\n tokenURI: string;\n /** Creator of the mintable item */\n creator: Address;\n /** Maximum total number of items that can be minted */\n maxSupply: bigint;\n /** Total number of items minted so far */\n totalMinted: bigint;\n};\n\nexport type OnchainMintable = MintableBase & {\n mintType: \"721\" | \"1155\";\n tokenId?: bigint;\n contractVersion: string;\n};\n\nexport type PremintMintable = MintableBase & {\n mintType: \"premint\";\n uid: number;\n};\n\nexport type OnchainSalesConfigAndTokenInfo = {\n salesConfig?: OnchainSalesStrategies;\n} & OnchainMintable;\n\nexport type PremintSalesConfigAndTokenInfo = {\n salesConfig: PremintSaleStrategy;\n} & PremintMintable;\n\nexport type SalesConfigAndTokenInfo =\n | OnchainSalesConfigAndTokenInfo\n | PremintMintable;\n\nexport type GetMintableReturn = {\n salesConfigAndTokenInfo: OnchainSalesConfigAndTokenInfo;\n secondaryMarketActive: boolean;\n primaryMintActive: boolean;\n primaryMintEnd?: bigint;\n};\n\nexport interface IOnchainMintGetter {\n getMintable(params: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n }): Promise<TokenQueryResult>;\n\n getContractMintable(params: {\n tokenAddress: Address;\n }): Promise<GetMintableReturn[]>;\n\n getContractPremintTokenIds(params: {\n tokenAddress: Address;\n }): Promise<{ tokenId: BigInt; uid: number }[]>;\n}\n\nexport type MintCosts = {\n /** The total of the mint fee, in eth */\n mintFee: bigint;\n /** If it is a paid or erc20 mint, the total price of the paid or erc20 mint in eth or erc20 value correspondingly. */\n totalPurchaseCost: bigint;\n /** If it is an erc20 mint, the erc20 address */\n totalPurchaseCostCurrency?: Address;\n /** The total cost in eth (mint fee + purchase cost) to mint */\n totalCostEth: bigint;\n};\n\nexport type Erc20Approval = {\n /** ERC20 token address that must be approved */\n erc20: Address;\n /** Quantity of ERC20 that must be approved */\n quantity: bigint;\n /** Address that must be approved to transfer to */\n approveTo: Address;\n};\n\nexport type PrepareMintReturn = {\n /** Prepared parameters to execute the mint transaction */\n parameters: SimulateContractParametersWithAccount;\n /** If an erc20 approval is necessary, information for the erc20 approval */\n erc20Approval?: Erc20Approval;\n /** Cost breakdown to mint the quantity of tokens */\n costs: MintCosts;\n};\n\nexport type PrepareMint = (params: MintParametersBase) => PrepareMintReturn;\nexport type AsyncPrepareMint = (\n params: MintParametersBase,\n) => Promise<PrepareMintReturn>;\n\nexport type MintableReturn = {\n /** Token information */\n token: SalesConfigAndTokenInfo;\n /** If the primary mint is active, the end time of the primary mint, if there is an end time */\n primaryMintEnd?: bigint;\n secondaryMarketActive: boolean;\n} & (\n | {\n primaryMintActive: true;\n /** Function that takes a quantity of items to mint and returns a prepared transaction and the costs to mint that quantity. If the primary mint is not active, it will be undefined. */\n prepareMint: PrepareMint;\n }\n | {\n primaryMintActive: false;\n prepareMint?: undefined;\n }\n);\n","import {\n IPremintGetter,\n PremintAPIClient,\n} from \"src/premint/premint-api-client\";\nimport {\n ContractInfo,\n Erc20Approval,\n GetMintCostsParameterArguments,\n GetMintParameters,\n IOnchainMintGetter,\n MintParametersBase,\n MintableReturn,\n OnchainSalesConfigAndTokenInfo,\n PremintSalesConfigAndTokenInfo,\n PrepareMint,\n is1155Mint,\n isOnChainMint,\n GetMintableReturn,\n GetMintsOfContractParameters,\n WithPublicClientAndRequiredGetters,\n} from \"./types\";\nimport { Address, zeroAddress } from \"viem\";\nimport {\n getPremintMintCostsWithUnknownTokenPrice,\n getPremintMintFee,\n} from \"src/premint/preminter\";\nimport {\n PremintFromApi,\n isPremintConfigV1,\n isPremintConfigV2,\n} from \"src/premint/conversions\";\nimport { makeOnchainMintCall, parseMintCosts } from \"./mint-transactions\";\nimport { buildPremintMintCall } from \"src/premint/premint-client\";\nimport { AllowListEntry } from \"src/allow-list/types\";\nimport { Concrete } from \"src/utils\";\nimport { parseAndFilterTokenQueryResult } from \"./strategies-parsing\";\nimport { SubgraphMintGetter } from \"./subgraph-mint-getter\";\n\n/**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParameters}\n * @returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\nexport async function getToken(\n params: GetMintParameters,\n): Promise<MintableReturn> {\n const { premintGetter, publicClient } = params;\n const chainId = publicClient.chain.id;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const blockTime = (await publicClient.getBlock()).timestamp;\n const mintGetterOrDefault =\n params.mintGetter ?? new SubgraphMintGetter(chainId);\n const result = await mintGetterOrDefault.getMintable({\n tokenId,\n tokenAddress: params.tokenContract,\n });\n\n const token = parseAndFilterTokenQueryResult({\n token: result,\n tokenId,\n preferredSaleType: params.preferredSaleType,\n blockTime,\n });\n\n return toMintableReturn(token, chainId);\n }\n\n const premintGetterOrDefault = premintGetter ?? new PremintAPIClient(chainId);\n const premint = await premintGetterOrDefault.get({\n collectionAddress: params.tokenContract,\n uid: params.uid,\n });\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return toPremintMintReturn({ premint, mintFee });\n}\nexport async function getPremintsOfCollectionWithTokenIds({\n premintGetter,\n mintGetter,\n tokenContract,\n}: {\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n tokenContract: Address;\n}) {\n const { collection, premints } = await premintGetter.getOfCollection({\n collectionAddress: tokenContract,\n });\n\n const premintUidsAndTokenIds = await mintGetter.getContractPremintTokenIds({\n tokenAddress: tokenContract,\n });\n\n const premintsWithTokenId = premints.map((premint) => ({\n ...premint,\n tokenId: premintUidsAndTokenIds.find(\n ({ uid }) => uid === premint.premint.premintConfig.uid,\n )?.tokenId,\n }));\n\n return {\n collection: collection,\n premints: premintsWithTokenId,\n };\n}\n\n/**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\nexport async function getTokensOfContract({\n mintGetter,\n premintGetter,\n publicClient,\n ...params\n}: GetMintsOfContractParameters): Promise<{\n contract?: ContractInfo;\n tokens: MintableReturn[];\n}> {\n const chainId = publicClient.chain.id;\n const mintGetterOrDefault: IOnchainMintGetter =\n mintGetter ?? new SubgraphMintGetter(chainId);\n const onchainMints = (\n await mintGetterOrDefault.getContractMintable({\n tokenAddress: params.tokenContract,\n })\n ).map((result) => toMintableReturn(result, chainId));\n\n const offchainMints = await getPremintsOfContractMintable({\n mintGetter: mintGetterOrDefault,\n premintGetter: premintGetter ?? new PremintAPIClient(chainId),\n publicClient,\n params: {\n tokenContract: params.tokenContract,\n },\n });\n\n const tokens = [...onchainMints, ...offchainMints];\n\n return {\n tokens: tokens,\n contract: tokens[0]?.token.contract,\n };\n}\n\n/**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameterArguments}\n * @returns Costs to mint the quantity of tokens specified\n */\nexport async function getMintCosts({\n params,\n allowListEntry,\n mintGetter,\n premintGetter,\n publicClient,\n}: WithPublicClientAndRequiredGetters<{\n params: GetMintCostsParameterArguments;\n allowListEntry?: Pick<AllowListEntry, \"price\">;\n}>) {\n const { quantityMinted: quantityToMint, collection } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const blockTime = (await publicClient.getBlock()).timestamp;\n const result = await mintGetter.getMintable({\n tokenId,\n tokenAddress: collection,\n });\n\n const token = parseAndFilterTokenQueryResult({\n token: result,\n tokenId,\n blockTime,\n });\n\n if (!token.salesConfigAndTokenInfo.salesConfig) {\n throw new Error(\"No valid sales config found for token\");\n }\n\n return parseMintCosts({\n salesConfig: token.salesConfigAndTokenInfo.salesConfig,\n quantityToMint: BigInt(quantityToMint),\n allowListEntry,\n });\n }\n\n return getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n publicClient: publicClient,\n quantityToMint: BigInt(quantityToMint),\n uid: params.uid,\n tokenContract: collection,\n });\n}\n\nasync function getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params,\n}: WithPublicClientAndRequiredGetters<{\n params: { tokenContract: Address };\n}>): Promise<MintableReturn[]> {\n const { premints, collection } = await getPremintsOfCollectionWithTokenIds({\n mintGetter,\n premintGetter,\n tokenContract: params.tokenContract,\n });\n\n const offChainPremints = premints.filter(\n (premint) =>\n // if premint's uid is not in the list of uids from the subgraph, it is offchain\n typeof premint.tokenId === \"undefined\",\n );\n\n if (offChainPremints.length === 0) return [];\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return offChainPremints.map((premint) => {\n return toPremintMintReturn({\n premint: {\n premint: premint.premint,\n // todo: fix when api returns signer\n signer: zeroAddress,\n collection,\n collectionAddress: params.tokenContract,\n signature: premint.signature,\n },\n mintFee,\n });\n });\n}\n\nexport function isPrimaryMintActive(\n premint: Pick<PremintFromApi, \"premint\">[\"premint\"],\n) {\n const currentTime = new Date().getTime() / 1000;\n\n return premint.premintConfig.tokenConfig.mintStart < currentTime;\n}\n/** Parsing */\n\nfunction parsePremint({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\"\n >;\n mintFee: bigint;\n}): PremintSalesConfigAndTokenInfo {\n if (\n isPremintConfigV1(premint.premint) ||\n isPremintConfigV2(premint.premint)\n ) {\n return {\n creator: premint.signer,\n maxSupply: premint.premint.premintConfig.tokenConfig.maxSupply,\n mintType: \"premint\",\n uid: premint.premint.premintConfig.uid,\n contract: {\n address: premint.collectionAddress,\n name: premint.collection!.contractName,\n URI: premint.collection!.contractURI,\n },\n tokenURI: premint.premint.premintConfig.tokenConfig.tokenURI,\n totalMinted: 0n,\n salesConfig: {\n duration: premint.premint.premintConfig.tokenConfig.mintDuration,\n maxTokensPerAddress:\n premint.premint.premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premint.premint.premintConfig.tokenConfig.pricePerToken,\n saleType: \"premint\",\n mintFeePerQuantity: mintFee,\n },\n };\n }\n\n throw new Error(\"Invalid premint config version\");\n}\n\nexport const makeOnchainPrepareMint =\n (result: OnchainSalesConfigAndTokenInfo, chainId: number): PrepareMint =>\n (params: MintParametersBase) => {\n if (!result.salesConfig) {\n throw new Error(\"No valid sales config found for token\");\n }\n\n return {\n parameters: makeOnchainMintCall({\n token: result as Concrete<OnchainSalesConfigAndTokenInfo>,\n mintParams: params,\n chainId,\n }),\n erc20Approval: getRequiredErc20Approvals(params, result.salesConfig),\n costs: parseMintCosts({\n salesConfig: result.salesConfig,\n quantityToMint: BigInt(params.quantityToMint),\n allowListEntry: params.allowListEntry,\n }),\n };\n };\n\nexport function toMintableReturn(\n result: GetMintableReturn,\n chainId: number,\n): MintableReturn {\n const primaryMintActive = result.primaryMintActive;\n if (!primaryMintActive) {\n return {\n token: result.salesConfigAndTokenInfo,\n primaryMintActive,\n primaryMintEnd: result.primaryMintEnd,\n secondaryMarketActive: result.secondaryMarketActive,\n prepareMint: undefined,\n };\n }\n return {\n token: result.salesConfigAndTokenInfo,\n primaryMintActive,\n primaryMintEnd: result.primaryMintEnd,\n secondaryMarketActive: result.secondaryMarketActive,\n prepareMint: makeOnchainPrepareMint(\n result.salesConfigAndTokenInfo,\n chainId,\n ),\n };\n}\n\nconst makePremintPrepareMint = (\n mintable: PremintSalesConfigAndTokenInfo,\n mintFee: bigint,\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >,\n): PrepareMint => {\n return (params: MintParametersBase) => {\n return {\n parameters: buildPremintMintCall({\n mintArguments: params,\n mintFee,\n premint,\n }),\n costs: parseMintCosts({\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: mintable.salesConfig,\n allowListEntry: params.allowListEntry,\n }),\n };\n };\n};\n\nfunction toPremintMintReturn({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >;\n mintFee: bigint;\n}): MintableReturn {\n const mintable = parsePremint({ premint, mintFee });\n\n const primaryMintActive = isPrimaryMintActive(premint.premint);\n\n if (!primaryMintActive) {\n return {\n token: mintable,\n primaryMintActive,\n prepareMint: undefined,\n secondaryMarketActive: false,\n };\n }\n return {\n token: mintable,\n primaryMintActive,\n secondaryMarketActive: false,\n prepareMint: makePremintPrepareMint(mintable, mintFee, premint),\n };\n}\n\nexport function getRequiredErc20Approvals(\n params: MintParametersBase,\n salesConfig: OnchainSalesConfigAndTokenInfo[\"salesConfig\"],\n): Erc20Approval | undefined {\n if (salesConfig?.saleType !== \"erc20\") return undefined;\n\n return {\n quantity: salesConfig.pricePerToken * BigInt(params.quantityToMint),\n approveTo: salesConfig.address,\n erc20: salesConfig.currency,\n };\n}\n","import {\n Address,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n Hex,\n} from \"viem\";\nimport {\n erc20MinterABI,\n zoraCreator1155ImplABI,\n zoraTimedSaleStrategyABI,\n callerAndCommenterABI,\n callerAndCommenterAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { zora721Abi, zora1155LegacyAbi } from \"src/constants\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\nimport {\n Concrete,\n makeContractParameters,\n mintRecipientOrAccount,\n} from \"src/utils\";\nimport { MintCosts, SaleStrategies, isErc20SaleStrategy } from \"./types\";\nimport { MakeMintParametersArgumentsBase } from \"./types\";\n\nimport { contractSupportsNewMintFunction } from \"./utils\";\nimport { OnchainSalesConfigAndTokenInfo } from \"./types\";\nimport { AllowListEntry } from \"src/allow-list/types\";\n\nexport function makeOnchainMintCall({\n token,\n mintParams,\n chainId,\n}: {\n token: Concrete<OnchainSalesConfigAndTokenInfo>;\n mintParams: Omit<MakeMintParametersArgumentsBase, \"tokenContract\">;\n chainId: number;\n}): SimulateContractParametersWithAccount {\n if (token.mintType === \"721\") {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n ...mintParams,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n tokenId: token.tokenId!,\n chainId,\n ...mintParams,\n });\n}\n\nexport type MintableParameters = Pick<\n OnchainSalesConfigAndTokenInfo,\n \"contractVersion\" | \"salesConfig\"\n>;\n\nfunction makeZoraTimedSaleStrategyMintCall({\n minterAccount,\n salesConfigAndTokenInfo,\n mintQuantity,\n mintTo,\n tokenContract,\n tokenId,\n mintReferral,\n mintComment,\n chainId,\n}: {\n minterAccount: Address | Account;\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n mintQuantity: bigint;\n mintTo: Address;\n tokenContract: Address;\n tokenId: GenericTokenIdTypes;\n mintReferral?: Address;\n mintComment?: string;\n chainId: number;\n}) {\n // if there is a mint comment, use the caller and commenter\n if (mintComment && mintComment !== \"\") {\n return makeContractParameters({\n abi: callerAndCommenterABI,\n address:\n callerAndCommenterAddress[\n chainId as keyof typeof callerAndCommenterAddress\n ],\n functionName: \"timedSaleMintAndComment\",\n account: minterAccount,\n value:\n salesConfigAndTokenInfo.salesConfig.mintFeePerQuantity * mintQuantity,\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n tokenId,\n mintReferral || zeroAddress,\n mintComment,\n ],\n });\n }\n\n return makeContractParameters({\n abi: zoraTimedSaleStrategyABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n value:\n salesConfigAndTokenInfo.salesConfig.mintFeePerQuantity * mintQuantity,\n /* args: mintTo, quantity, collection, tokenId, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n mintReferral || zeroAddress,\n \"\",\n ],\n });\n}\n\nexport function makePrepareMint1155TokenParams({\n tokenContract: tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n allowListEntry,\n chainId,\n}: {\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n tokenId: GenericTokenIdTypes;\n chainId: number;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n | \"allowListEntry\"\n>): SimulateContractParameters<any, any, any, any, any, Address | Account> {\n const mintQuantity = BigInt(quantityToMint || 1);\n\n const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n\n if (saleType === \"fixedPrice\" || saleType === \"allowlist\") {\n return makeEthMintCall({\n mintComment,\n minterAccount,\n mintQuantity,\n mintReferral,\n mintTo,\n salesConfigAndTokenInfo,\n tokenContract,\n tokenId,\n allowListEntry,\n });\n }\n\n if (saleType === \"timed\") {\n return makeZoraTimedSaleStrategyMintCall({\n minterAccount,\n salesConfigAndTokenInfo,\n mintQuantity,\n mintTo,\n tokenContract,\n tokenId,\n mintReferral,\n mintComment,\n chainId,\n });\n }\n\n if (saleType === \"erc20\") {\n return makeContractParameters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken * mintQuantity,\n salesConfigAndTokenInfo.salesConfig.currency,\n mintReferral || zeroAddress,\n mintComment || \"\",\n ],\n });\n }\n\n throw new Error(\"Unsupported sale type\");\n}\n\nfunction makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n minterAccount,\n tokenContract,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParametersWithAccount {\n const actualQuantityToMint = BigInt(quantityToMint || 1);\n const mintValue = parseMintCosts({\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: actualQuantityToMint,\n allowListEntry: undefined,\n }).totalCostEth;\n\n return makeContractParameters({\n abi: zora721Abi,\n address: tokenContract,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintRecipientOrAccount({ mintRecipient, minterAccount }),\n actualQuantityToMint,\n mintComment || \"\",\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction makeFixedPriceMinterArguments({\n mintTo,\n mintComment,\n}: {\n mintTo: Address;\n mintComment?: string;\n}) {\n return encodeAbiParameters(parseAbiParameters(\"address, string\"), [\n mintTo,\n mintComment || \"\",\n ]);\n}\n\nfunction makeAllowListMinterArguments({\n mintTo,\n allowListEntry,\n}: {\n mintTo: Address;\n allowListEntry: AllowListEntry;\n}) {\n return encodeAbiParameters(\n parseAbiParameters(\"address, uint256, uint256, bytes32[]\"),\n [\n mintTo,\n BigInt(allowListEntry.maxCanMint),\n allowListEntry.price,\n allowListEntry.proof,\n ],\n );\n}\n\nfunction makeEthMintCall({\n tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintQuantity,\n mintTo,\n allowListEntry,\n}: {\n minterAccount: Account | Address;\n tokenContract: Address;\n mintTo: Address;\n salesConfigAndTokenInfo: Concrete<MintableParameters>;\n tokenId: GenericTokenIdTypes;\n mintQuantity: bigint;\n mintComment?: string;\n mintReferral?: Address;\n allowListEntry?: AllowListEntry;\n}): SimulateContractParametersWithAccount {\n const mintValue = parseMintCosts({\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: mintQuantity,\n allowListEntry,\n }).totalCostEth;\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n let minterArguments: Hex;\n\n if (saleType === \"fixedPrice\") {\n minterArguments = makeFixedPriceMinterArguments({ mintTo, mintComment });\n } else if (saleType === \"allowlist\") {\n if (!allowListEntry) throw new Error(\"Missing allowListEntry\");\n minterArguments = makeAllowListMinterArguments({ mintTo, allowListEntry });\n } else {\n throw new Error(\"Unsupported sale type\");\n }\n\n // if based on contract version it has the new mint function,\n // call the new mint function.\n if (\n contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)\n ) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mint\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n mintReferral ? [mintReferral] : [],\n minterArguments,\n ],\n });\n }\n\n // otherwise call the deprecated mint function\n return makeContractParameters({\n abi: zora1155LegacyAbi,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n minterArguments,\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction paidMintCost(\n salesConfig: SaleStrategies,\n allowListEntry?: Pick<AllowListEntry, \"price\">,\n) {\n if (\n salesConfig.saleType === \"erc20\" ||\n salesConfig.saleType === \"fixedPrice\"\n ) {\n return salesConfig.pricePerToken;\n }\n\n if (allowListEntry) return allowListEntry.price;\n\n return 0n;\n}\n\nexport function parseMintCosts({\n salesConfig,\n quantityToMint,\n allowListEntry,\n}: {\n salesConfig: SaleStrategies;\n quantityToMint: bigint;\n allowListEntry: Pick<AllowListEntry, \"price\"> | undefined;\n}): MintCosts {\n const mintFeeForTokens = salesConfig.mintFeePerQuantity * quantityToMint;\n\n const tokenPurchaseCost =\n paidMintCost(salesConfig, allowListEntry) * quantityToMint;\n\n const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig)\n ? salesConfig.currency\n : undefined;\n\n const totalPurchaseCostEth = totalPurchaseCostCurrency\n ? 0n\n : tokenPurchaseCost;\n\n return {\n mintFee: mintFeeForTokens,\n totalPurchaseCost: tokenPurchaseCost,\n totalPurchaseCostCurrency,\n totalCostEth: mintFeeForTokens + totalPurchaseCostEth,\n };\n}\n","import * as semver from \"semver\";\nexport const contractSupportsNewMintFunction = (\n contractVersion?: string | null,\n) => {\n if (!contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n","import { Address } from \"viem\";\nimport { IPublicClient } from \"src/types\";\nimport {\n GetMintParametersArguments,\n IOnchainMintGetter,\n MakeMintParameters,\n MintCosts,\n PrepareMintReturn,\n SaleType,\n} from \"./types\";\nimport {\n MakeMintParametersArguments,\n GetMintCostsParameterArguments,\n} from \"./types\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nimport { getToken, getMintCosts, getTokensOfContract } from \"./mint-queries\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new MintClient().mint()`, use `mint()`\n * Import the functions you need directly from their respective modules:\n * import { mint, getToken, getTokensOfContract, getMintCosts } from '@zoralabs/protocol-sdk'\n */\nexport class MintClient {\n private readonly publicClient: IPublicClient;\n private readonly mintGetter: IOnchainMintGetter;\n private readonly premintGetter: IPremintGetter;\n constructor({\n publicClient,\n premintGetter,\n mintGetter,\n }: {\n publicClient: IPublicClient;\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n }) {\n this.publicClient = publicClient;\n this.mintGetter = mintGetter;\n this.premintGetter = premintGetter;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParametersArguments}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\n async mint(\n parameters: MakeMintParametersArguments,\n ): Promise<PrepareMintReturn> {\n return mint({\n ...parameters,\n publicClient: this.publicClient,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n });\n }\n\n /**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParametersArguments}\n * @Returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\n async get(parameters: GetMintParametersArguments) {\n return getToken({\n ...parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @Returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\n async getOfContract(params: {\n tokenContract: Address;\n preferredSaleType?: SaleType;\n }) {\n return getTokensOfContract({\n ...params,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameterArguments}\n * @returns Costs to mint the quantity of tokens specified\n */\n async getMintCosts(\n parameters: GetMintCostsParameterArguments,\n ): Promise<MintCosts> {\n return getMintCosts({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n}\n\n/**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParameters}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\nexport async function mint({\n publicClient,\n mintGetter,\n premintGetter,\n ...parameters\n}: MakeMintParameters): Promise<PrepareMintReturn> {\n const { prepareMint, primaryMintActive } = await getToken({\n ...parameters,\n mintGetter,\n premintGetter,\n publicClient,\n });\n\n if (!primaryMintActive) {\n throw new Error(\"Primary mint is not active\");\n }\n\n return prepareMint!({\n minterAccount: parameters.minterAccount,\n quantityToMint: parameters.quantityToMint,\n firstMinter: parameters.firstMinter,\n mintComment: parameters.mintComment,\n mintRecipient: parameters.mintRecipient,\n mintReferral: parameters.mintReferral,\n });\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Chain,\n Hex,\n PublicClient,\n Transport,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog } from \"viem\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n getDeterministicContractAddress,\n getNewContractMintFee,\n new1155ContractVersion,\n} from \"./contract-setup\";\nimport {\n CreateNew1155ContractAndTokenReturn,\n CreateNew1155ContractParams,\n CreateNew1155ParamsBase,\n CreateNew1155TokenParams,\n CreateNew1155TokenReturn,\n PrepareCreateReturn,\n NewContractParams,\n} from \"./types\";\nimport { constructCreate1155TokenCalls } from \"./token-setup\";\nimport { makeOnchainPrepareMintFromCreate } from \"./mint-from-create\";\nimport { IContractGetter, SubgraphContractGetter } from \"./contract-getter\";\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n\n throw new Error(\n \"No event found in receipt that could be used to get tokenId\",\n );\n};\n\nexport const getContractAddressFromReceipt = (\n receipt: TransactionReceipt,\n): Address => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155FactoryImplABI,\n eventName: \"SetupNewContract\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewContract\") {\n return decodedLog.args.newContract;\n }\n } catch (err: any) {}\n }\n\n throw new Error(\n \"No event found in receipt that could be used to get contract address\",\n );\n};\n\ntype MakeContractParametersBase = {\n account: Address | Account;\n\n tokenSetupActions: Hex[];\n};\n\nexport function makeCreateContractAndTokenCall({\n account,\n contract,\n royaltyBPS,\n fundsRecipient,\n tokenSetupActions,\n chainId,\n}: {\n chainId: number;\n contract: NewContractParams;\n royaltyBPS?: number;\n fundsRecipient?: Address;\n} & MakeContractParametersBase) {\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n return makeContractParameters({\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: fundsRecipient || accountAddress,\n },\n contract.defaultAdmin || accountAddress,\n tokenSetupActions,\n ],\n });\n}\n\nexport function makeCreateTokenCall({\n contractAddress,\n account,\n tokenSetupActions,\n}: {\n contractAddress: Address;\n} & MakeContractParametersBase) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n });\n}\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new Create1155Client().createNew1155()`, use `createNew1155()`\n * Import the functions you need directly from their respective modules:\n * import { createNew1155, createNew1155OnExistingContract } from '@zoralabs/protocol-sdk'\n */\nexport class Create1155Client {\n private readonly publicClient: Pick<\n PublicClient<Transport, Chain>,\n \"readContract\" | \"chain\"\n >;\n public readonly contractGetter: IContractGetter;\n\n constructor({\n publicClient,\n contractGetter,\n }: {\n publicClient: Pick<\n PublicClient<Transport, Chain>,\n \"readContract\" | \"chain\"\n >;\n contractGetter: IContractGetter;\n }) {\n this.publicClient = publicClient;\n this.contractGetter = contractGetter;\n }\n\n async createNew1155(\n props: CreateNew1155ContractParams,\n ): Promise<CreateNew1155ContractAndTokenReturn> {\n return create1155({\n ...props,\n publicClient: this.publicClient,\n });\n }\n\n async createNew1155OnExistingContract({\n contractAddress: contract,\n account,\n token,\n getAdditionalSetupActions,\n }: CreateNew1155TokenParams): Promise<CreateNew1155TokenReturn> {\n return createNew1155Token({\n contractAddress: contract,\n account,\n token,\n getAdditionalSetupActions,\n contractGetter: this.contractGetter,\n chainId: this.publicClient.chain.id,\n });\n }\n}\n\nexport async function create1155({\n contract,\n account,\n token,\n publicClient,\n getAdditionalSetupActions,\n}: CreateNew1155ContractParams & {\n publicClient: Pick<PublicClient<Transport, Chain>, \"readContract\" | \"chain\">;\n}): Promise<CreateNew1155ContractAndTokenReturn> {\n const nextTokenId = 1n;\n const chainId = publicClient.chain.id;\n const contractVersion = new1155ContractVersion(chainId);\n\n const result = prepareNew1155ContractAndToken({\n contract,\n account,\n chainId,\n token,\n getAdditionalSetupActions,\n nextTokenId,\n contractVersion,\n });\n\n const contractAddress = await getDeterministicContractAddress({\n account: typeof account === \"string\" ? account : account.address,\n publicClient,\n setupActions: result.setupActions,\n contract,\n });\n\n const prepareMint = makeOnchainPrepareMintFromCreate({\n contractAddress,\n contractVersion,\n minter: result.minter,\n result: result.newToken.salesConfig,\n tokenId: nextTokenId,\n chainId,\n // to get the contract wide mint fee, we get what it would be for a new contract\n getContractMintFee: async () =>\n getNewContractMintFee({\n publicClient,\n chainId,\n }),\n });\n\n return {\n ...result,\n prepareMint,\n contractAddress,\n contractVersion,\n tokenId: nextTokenId,\n };\n}\n\nfunction prepareNew1155ContractAndToken({\n account,\n chainId,\n token,\n getAdditionalSetupActions,\n nextTokenId,\n contractVersion,\n contract,\n}: CreateNew1155ContractParams & {\n chainId: number;\n nextTokenId: bigint;\n contractVersion: string;\n}): PrepareCreateReturn {\n const { minter, newToken, setupActions } = prepareSetupActions({\n chainId,\n account,\n contractVersion: contractVersion,\n nextTokenId: nextTokenId,\n token,\n getAdditionalSetupActions,\n contractName: contract.name,\n });\n\n const request = makeCreateContractAndTokenCall({\n contract,\n account,\n chainId,\n tokenSetupActions: setupActions,\n fundsRecipient: token.payoutRecipient,\n royaltyBPS: token.royaltyBPS,\n });\n\n return {\n parameters: request,\n setupActions,\n newToken,\n minter,\n };\n}\n\nfunction prepareNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n nextTokenId,\n contractVersion,\n contractName,\n}: Omit<CreateNew1155TokenParams, \"contractGetter\"> & {\n chainId: number;\n nextTokenId: bigint;\n contractVersion: string;\n contractName: string;\n}): PrepareCreateReturn {\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = prepareSetupActions({\n chainId,\n account,\n contractVersion,\n nextTokenId,\n token,\n getAdditionalSetupActions,\n contractName,\n });\n\n const request = makeCreateTokenCall({\n contractAddress,\n account,\n tokenSetupActions,\n });\n\n return {\n parameters: request,\n setupActions: tokenSetupActions,\n newToken,\n minter,\n };\n}\n\nexport async function createNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n contractGetter,\n}: CreateNew1155TokenParams & {\n chainId: number;\n contractGetter?: IContractGetter;\n}): Promise<CreateNew1155TokenReturn> {\n const contractGetterOrDefault =\n contractGetter ?? new SubgraphContractGetter(chainId);\n const { nextTokenId, contractVersion, mintFee, name } =\n await contractGetterOrDefault.getContractInfo({\n contractAddress,\n retries: 5,\n });\n\n const preparedToken = prepareNew1155Token({\n contractAddress,\n account,\n getAdditionalSetupActions,\n token,\n chainId,\n nextTokenId,\n contractVersion,\n contractName: name,\n });\n\n const prepareMint = makeOnchainPrepareMintFromCreate({\n contractAddress: contractAddress,\n contractVersion,\n minter: preparedToken.minter,\n result: preparedToken.newToken.salesConfig,\n tokenId: nextTokenId,\n getContractMintFee: async () => mintFee,\n chainId,\n });\n\n return {\n ...preparedToken,\n prepareMint,\n tokenId: nextTokenId,\n contractVersion,\n };\n}\n\nexport function prepareSetupActions({\n chainId,\n account,\n contractVersion,\n nextTokenId,\n token,\n contractName,\n getAdditionalSetupActions,\n}: {\n chainId: number;\n contractVersion: string;\n nextTokenId: bigint;\n contractName: string;\n} & CreateNew1155ParamsBase) {\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = constructCreate1155TokenCalls({\n chainId: chainId,\n ownerAddress: typeof account === \"string\" ? account : account.address,\n contractVersion,\n nextTokenId,\n ...token,\n contractName,\n });\n\n const setupActions = getAdditionalSetupActions\n ? [\n ...getAdditionalSetupActions({\n tokenId: nextTokenId,\n }),\n ...tokenSetupActions,\n ]\n : tokenSetupActions;\n\n return { minter, newToken, setupActions };\n}\n","import { Address, Hex, PublicClient, Transport, Chain } from \"viem\";\nimport {\n contracts1155,\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport { NewContractParams } from \"./types\";\n\ntype contracts1155Address = keyof typeof contracts1155.addresses;\nexport function new1155ContractVersion(chainId: number): string {\n // todo: get from subgraph\n const address = contracts1155.addresses[chainId as contracts1155Address];\n if (!address) {\n throw new Error(`No contract address for chainId ${chainId}`);\n }\n\n return address.CONTRACT_1155_IMPL_VERSION;\n}\n\nexport async function getDeterministicContractAddress({\n publicClient,\n account,\n setupActions,\n contract,\n}: {\n account: Address;\n publicClient: Pick<PublicClient<Transport, Chain>, \"readContract\" | \"chain\">;\n setupActions: Hex[];\n contract: NewContractParams;\n // Account that is the creator of the contract\n}): Promise<Address> {\n const chainId = publicClient.chain.id;\n const contractAddress = await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n functionName: \"deterministicContractAddressWithSetupActions\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n setupActions,\n ],\n });\n\n return contractAddress;\n}\n\nexport async function getNewContractMintFee({\n publicClient,\n chainId,\n}: {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n}) {\n const implAddress = contracts1155.addresses[chainId as contracts1155Address]\n .CONTRACT_1155_IMPL as Address;\n\n return await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: implAddress,\n functionName: \"mintFee\",\n });\n}\n","import { zoraCreator1155ImplABI } from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, zeroAddress, Hex } from \"viem\";\nimport * as semver from \"semver\";\nimport { ContractProps, CreateNew1155TokenProps, New1155Token } from \"./types\";\nimport { OPEN_EDITION_MINT_SIZE } from \"src/constants\";\nimport { getSalesConfigWithDefaults } from \"./minter-defaults\";\nimport { setupMinters } from \"./minter-setup\";\n\nfunction applyNew1155Defaults(\n props: CreateNew1155TokenProps,\n ownerAddress: Address,\n contractName: string,\n): New1155Token {\n const { payoutRecipient: fundsRecipient } = props;\n const fundsRecipientOrOwner =\n fundsRecipient && fundsRecipient !== zeroAddress\n ? fundsRecipient\n : ownerAddress;\n return {\n payoutRecipient: fundsRecipientOrOwner,\n createReferral: props.createReferral || zeroAddress,\n maxSupply:\n typeof props.maxSupply === \"undefined\"\n ? OPEN_EDITION_MINT_SIZE\n : BigInt(props.maxSupply),\n royaltyBPS: props.royaltyBPS || 1000,\n tokenMetadataURI: props.tokenMetadataURI,\n salesConfig: getSalesConfigWithDefaults(props.salesConfig, contractName),\n };\n}\n\nfunction buildSetupNewToken({\n tokenURI,\n maxSupply = OPEN_EDITION_MINT_SIZE,\n createReferral = zeroAddress,\n contractVersion,\n}: {\n tokenURI: string;\n maxSupply: bigint;\n createReferral: Address;\n contractVersion?: string;\n}): Hex {\n // If we're adding a new token to an existing contract which doesn't support\n // creator rewards, we won't have the 'setupNewTokenWithCreateReferral' method\n // available, so we need to check for that and use the fallback method instead.\n if (contractSupportsMintRewards(contractVersion, \"ERC1155\")) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenURI, BigInt(maxSupply), createReferral],\n });\n }\n\n if (createReferral !== zeroAddress) {\n throw new Error(\n \"Contract does not support create referral, but one was provided\",\n );\n }\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenURI, BigInt(maxSupply)],\n });\n}\n\nfunction setupRoyaltyConfig({\n royaltyBPS,\n royaltyRecipient,\n nextTokenId,\n}: {\n royaltyBPS: number;\n royaltyRecipient: Address;\n nextTokenId: bigint;\n}) {\n if (royaltyBPS > 0 && royaltyRecipient != zeroAddress) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyBPS,\n royaltyRecipient,\n royaltyMintSchedule: 0,\n },\n ],\n });\n }\n\n return null;\n}\n\nfunction makeAdminMintCall({\n ownerAddress,\n mintQuantity,\n nextTokenId,\n}: {\n ownerAddress: Address;\n mintQuantity?: number;\n nextTokenId: bigint;\n}) {\n if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {\n return null;\n }\n\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress],\n });\n}\n\nexport function constructCreate1155TokenCalls(\n props: CreateNew1155TokenProps &\n ContractProps & {\n ownerAddress: Address;\n chainId: number;\n } & {\n contractName: string;\n },\n): {\n setupActions: `0x${string}`[];\n newToken: New1155Token;\n minter: Address;\n} {\n const {\n chainId,\n nextTokenId,\n mintToCreatorCount,\n ownerAddress,\n contractVersion,\n } = props;\n\n const new1155TokenPropsWithDefaults = applyNew1155Defaults(\n props,\n ownerAddress,\n props.contractName,\n );\n\n const verifyTokenIdExpected = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n });\n\n const setupNewToken = buildSetupNewToken({\n tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,\n maxSupply: new1155TokenPropsWithDefaults.maxSupply,\n createReferral: new1155TokenPropsWithDefaults.createReferral,\n contractVersion,\n });\n\n const royaltyConfig = setupRoyaltyConfig({\n royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,\n royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n nextTokenId,\n });\n\n const { minter, setupActions: mintersSetup } = setupMinters({\n tokenId: nextTokenId,\n chainId,\n fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n salesConfig: new1155TokenPropsWithDefaults.salesConfig,\n });\n\n const adminMintCall = makeAdminMintCall({\n ownerAddress,\n mintQuantity: mintToCreatorCount,\n nextTokenId,\n });\n\n const setupActions = [\n verifyTokenIdExpected,\n setupNewToken,\n ...mintersSetup,\n royaltyConfig,\n adminMintCall,\n ].filter((item) => item !== null) as `0x${string}`[];\n\n return {\n setupActions,\n minter,\n newToken: new1155TokenPropsWithDefaults,\n };\n}\n\nexport const contractSupportsMintRewards = (\n contractVersion?: string | null,\n contractStandard?: \"ERC721\" | \"ERC1155\",\n) => {\n if (!contractStandard || !contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n if (contractStandard === \"ERC1155\") {\n return semver.gte(semVerContractVersion, \"1.3.5\");\n } else {\n return semver.gte(semVerContractVersion, \"14.0.0\");\n }\n};\n","import { Concrete } from \"src/utils\";\nimport {\n SalesConfigParamsType,\n AllowListParamType,\n Erc20ParamsType,\n FixedPriceParamsType,\n SaleStartAndEnd,\n MaxTokensPerAddress,\n ConcreteSalesConfig,\n TimedSaleParamsType,\n} from \"./types\";\nimport { parseEther } from \"viem\";\n\n// The amount of eth per mint for the secondary market\nexport const MARKET_REWARD_V2 = parseEther(\"0.0000222\");\n// 1111 mints worth of market reward eth - 0.0000222 eth * 1,111 = 0.0246642 eth\nexport const DEFAULT_MINIMUM_MARKET_ETH = parseEther(\"0.0246642\");\n// 24 hour countdown\nexport const DEFAULT_MARKET_COUNTDOWN = BigInt(24 * 60 * 60);\n\n// Sales end forever amount (uint64 max)\nexport const SALE_END_FOREVER = 18446744073709551615n;\n\nconst DEFAULT_SALE_START_AND_END = (): Concrete<SaleStartAndEnd> => ({\n // Sale start time – defaults to current time in seconds\n saleStart: BigInt(Math.floor(new Date().getTime() / 1000)),\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n});\n\nconst DEFAULT_MAX_TOKENS_PER_ADDRESS: Concrete<MaxTokensPerAddress> = {\n maxTokensPerAddress: 0n,\n};\n\nconst erc20SaleSettingsWithDefaults = (\n params: Erc20ParamsType,\n): Concrete<Erc20ParamsType> => ({\n ...DEFAULT_SALE_START_AND_END(),\n ...DEFAULT_MAX_TOKENS_PER_ADDRESS,\n ...params,\n});\n\nconst allowListWithDefaults = (\n allowlist: AllowListParamType,\n): Concrete<AllowListParamType> => {\n return {\n ...DEFAULT_SALE_START_AND_END(),\n ...allowlist,\n };\n};\n\nconst fixedPriceSettingsWithDefaults = (\n params: FixedPriceParamsType,\n): Concrete<FixedPriceParamsType> => ({\n ...DEFAULT_SALE_START_AND_END(),\n ...DEFAULT_MAX_TOKENS_PER_ADDRESS,\n type: \"fixedPrice\",\n ...params,\n});\n\nexport const parseNameIntoSymbol = (name: string) => {\n if (name === \"\") {\n throw new Error(\"Name must be provided to generate a symbol\");\n }\n const result =\n \"$\" +\n name\n // Remove all non-alphanumeric characters\n .replace(/[^a-zA-Z0-9]/g, \"\")\n // and leading dollar signs\n .replace(/^\\$+/, \"\")\n .toUpperCase()\n // Remove all vowels and spaces\n .replace(/[AEIOU\\s]/g, \"\")\n // Strip down to 4 characters\n .slice(0, 4);\n\n if (result === \"$\") {\n throw new Error(\"Not enough valid characters to generate a symbol\");\n }\n\n return result;\n};\n\nconst getMinimumMarketEth = (\n params: Pick<\n TimedSaleParamsType,\n \"minimumMarketEth\" | \"minimumMintsForCountdown\"\n >,\n) => {\n if (params.minimumMintsForCountdown) {\n return params.minimumMintsForCountdown * MARKET_REWARD_V2;\n }\n return params.minimumMarketEth || DEFAULT_MINIMUM_MARKET_ETH;\n};\n\nconst timedSaleSettingsWithDefaults = (\n params: TimedSaleParamsType,\n contractName: string,\n): Concrete<TimedSaleParamsType> => {\n // If the name is not provided, try to fetch it from the metadata\n const erc20Name = params.erc20Name || contractName;\n const minimumMarketEth = getMinimumMarketEth({\n minimumMarketEth: params.minimumMarketEth,\n minimumMintsForCountdown: params.minimumMintsForCountdown,\n });\n const minimumMintsForCountdown = minimumMarketEth / MARKET_REWARD_V2;\n\n return {\n type: \"timed\",\n erc20Name: erc20Name,\n erc20Symbol: params.erc20Symbol || parseNameIntoSymbol(erc20Name),\n saleStart: params.saleStart || 0n,\n marketCountdown: params.marketCountdown || DEFAULT_MARKET_COUNTDOWN,\n minimumMarketEth,\n minimumMintsForCountdown,\n };\n};\n\nconst isAllowList = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is AllowListParamType => salesConfig.type === \"allowlistMint\";\nconst isErc20 = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is Erc20ParamsType => salesConfig.type === \"erc20Mint\";\nconst isFixedPrice = (\n salesConfig: SalesConfigParamsType,\n): salesConfig is FixedPriceParamsType => {\n return (\n salesConfig.type === \"fixedPrice\" ||\n (salesConfig as FixedPriceParamsType).pricePerToken > 0n\n );\n};\n\nexport const getSalesConfigWithDefaults = (\n salesConfig: SalesConfigParamsType | undefined,\n contractName: string,\n): ConcreteSalesConfig => {\n if (!salesConfig) return timedSaleSettingsWithDefaults({}, contractName);\n if (isAllowList(salesConfig)) {\n return allowListWithDefaults(salesConfig);\n }\n if (isErc20(salesConfig)) {\n return erc20SaleSettingsWithDefaults(salesConfig);\n }\n if (isFixedPrice(salesConfig)) {\n return fixedPriceSettingsWithDefaults(salesConfig);\n }\n\n return timedSaleSettingsWithDefaults(salesConfig, contractName);\n};\n","import {\n erc20MinterABI,\n erc20MinterAddress as erc20MinterAddresses,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n zoraCreatorMerkleMinterStrategyABI,\n zoraCreatorMerkleMinterStrategyAddress,\n zoraTimedSaleStrategyABI,\n zoraTimedSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, Hex } from \"viem\";\nimport {\n AllowlistData,\n ConcreteSalesConfig,\n AllowListParamType,\n Erc20ParamsType,\n FixedPriceParamsType,\n TimedSaleParamsType,\n} from \"./types\";\nimport { Concrete } from \"src/utils\";\n\nconst PERMISSION_BITS = {\n MINTER: 2n ** 2n,\n};\n\ntype SetupErc20MinterProps = {\n chainId: number;\n tokenId: bigint;\n fundsRecipient: Address;\n} & Concrete<Erc20ParamsType>;\n\ntype SetupMintersProps = {\n tokenId: bigint;\n chainId: number;\n fundsRecipient: Address;\n salesConfig: ConcreteSalesConfig;\n};\n\nfunction setupErc20Minter({\n pricePerToken,\n chainId,\n tokenId: nextTokenId,\n currency,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupErc20MinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const erc20MinterAddress =\n erc20MinterAddresses[chainId as keyof typeof erc20MinterAddresses];\n if (!erc20MinterAddress)\n throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);\n\n const erc20MinterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: erc20MinterABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n pricePerToken: pricePerToken,\n fundsRecipient,\n currency: currency,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), erc20MinterAddress, saleData],\n });\n\n return {\n minter: erc20MinterAddress,\n setupActions: [erc20MinterApproval, callSale],\n };\n}\n\ntype SetupFixedPriceMinterProps = {\n fundsRecipient: Address;\n tokenId: bigint;\n chainId: number;\n} & Concrete<FixedPriceParamsType>;\n\nfunction setupFixedPriceMinter({\n pricePerToken: price,\n tokenId: nextTokenId,\n chainId,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupFixedPriceMinterProps): { minter: Address; setupActions: Hex[] } {\n const fixedPriceStrategyAddress =\n zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ];\n const fixedPriceApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [\n BigInt(nextTokenId),\n fixedPriceStrategyAddress,\n PERMISSION_BITS.MINTER,\n ],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n pricePerToken: price,\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n fundsRecipient,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData],\n });\n\n return {\n minter: fixedPriceStrategyAddress,\n setupActions: [fixedPriceApproval, callSale],\n };\n}\n\ntype SetupTimedMinterProps = {\n tokenId: bigint;\n chainId: number;\n} & Concrete<TimedSaleParamsType>;\n\nfunction setupTimedSaleMinter({\n chainId,\n tokenId,\n erc20Name: erc20zName,\n erc20Symbol: erc20zSymbol,\n saleStart,\n marketCountdown,\n minimumMarketEth,\n}: SetupTimedMinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const minterAddress =\n zoraTimedSaleStrategyAddress[\n chainId as keyof typeof zoraTimedSaleStrategyAddress\n ];\n const minterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(tokenId), minterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraTimedSaleStrategyABI,\n functionName: \"setSaleV2\",\n args: [\n BigInt(tokenId),\n {\n saleStart,\n marketCountdown,\n minimumMarketEth,\n name: erc20zName,\n symbol: erc20zSymbol,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(tokenId), minterAddress, saleData],\n });\n\n return {\n minter: minterAddress,\n setupActions: [minterApproval, callSale],\n };\n}\n\nfunction setupAllowListMinter({\n chainId,\n tokenId: nextTokenId,\n allowlist,\n fundsRecipient,\n}: {\n chainId: number;\n tokenId: bigint;\n allowlist: Concrete<AllowlistData>;\n fundsRecipient: Address;\n}) {\n const merkleSaleStrategyAddress =\n zoraCreatorMerkleMinterStrategyAddress[\n chainId as keyof typeof zoraCreatorMerkleMinterStrategyAddress\n ];\n\n const merkleApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [nextTokenId, merkleSaleStrategyAddress, PERMISSION_BITS.MINTER],\n });\n\n const merkleRoot = allowlist.presaleMerkleRoot.startsWith(\"0x\")\n ? allowlist.presaleMerkleRoot\n : (`0x${allowlist.presaleMerkleRoot}` as Hex);\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorMerkleMinterStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n presaleStart: allowlist.saleStart,\n presaleEnd: allowlist.saleEnd,\n merkleRoot,\n fundsRecipient: fundsRecipient,\n },\n ],\n });\n\n const callSaleMerkle = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), merkleSaleStrategyAddress, saleData],\n });\n\n return {\n minter: merkleSaleStrategyAddress,\n setupActions: [merkleApproval, callSaleMerkle],\n };\n}\n\nconst isAllowList = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<AllowListParamType> =>\n salesConfig.type === \"allowlistMint\";\nconst isErc20 = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<Erc20ParamsType> => salesConfig.type === \"erc20Mint\";\nconst isFixedPrice = (\n salesConfig: ConcreteSalesConfig,\n): salesConfig is Concrete<FixedPriceParamsType> =>\n salesConfig.type === \"fixedPrice\" ||\n (salesConfig as unknown as Concrete<FixedPriceParamsType>).pricePerToken >\n BigInt(0);\n\nexport function setupMinters({ salesConfig, ...rest }: SetupMintersProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n if (isErc20(salesConfig)) {\n return setupErc20Minter({\n ...salesConfig,\n ...rest,\n });\n }\n if (isAllowList(salesConfig)) {\n return setupAllowListMinter({\n allowlist: salesConfig,\n ...rest,\n });\n }\n\n if (isFixedPrice(salesConfig))\n return setupFixedPriceMinter({\n ...salesConfig,\n ...rest,\n });\n\n return setupTimedSaleMinter({\n ...salesConfig,\n ...rest,\n });\n}\n","import { Address, parseEther, zeroAddress } from \"viem\";\nimport { ConcreteSalesConfig } from \"./types\";\nimport {\n AsyncPrepareMint,\n MintParametersBase,\n OnchainSalesStrategies,\n PrepareMintReturn,\n} from \"src/mint/types\";\nimport {\n makePrepareMint1155TokenParams,\n parseMintCosts,\n} from \"src/mint/mint-transactions\";\nimport { getRequiredErc20Approvals } from \"src/mint/mint-queries\";\n\nasync function toSalesStrategyFromSubgraph({\n minter,\n salesConfig,\n getContractMintFee,\n}: {\n minter: Address;\n salesConfig: ConcreteSalesConfig;\n getContractMintFee: () => Promise<bigint>;\n}): Promise<OnchainSalesStrategies> {\n if (salesConfig.type === \"timed\") {\n return {\n saleType: \"timed\",\n address: minter,\n // for now we hardcode this\n mintFeePerQuantity: parseEther(\"0.000111\"),\n saleStart: salesConfig.saleStart.toString(),\n // the following are not needed for now but we wanna satisfy concrete\n erc20Z: zeroAddress,\n mintFee: 0n,\n pool: zeroAddress,\n secondaryActivated: false,\n };\n }\n if (salesConfig.type === \"erc20Mint\") {\n return {\n saleType: \"erc20\",\n address: minter,\n mintFeePerQuantity: 0n,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n currency: salesConfig.currency,\n pricePerToken: salesConfig.pricePerToken,\n maxTokensPerAddress: salesConfig.maxTokensPerAddress,\n };\n }\n const contractMintFee = await getContractMintFee();\n if (salesConfig.type === \"fixedPrice\") {\n return {\n saleType: \"fixedPrice\",\n address: minter,\n maxTokensPerAddress: salesConfig.maxTokensPerAddress,\n mintFeePerQuantity: contractMintFee,\n pricePerToken: salesConfig.pricePerToken,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n };\n }\n return {\n saleType: \"allowlist\",\n address: minter,\n saleStart: salesConfig.saleStart.toString(),\n saleEnd: salesConfig.saleEnd.toString(),\n merkleRoot: salesConfig.presaleMerkleRoot,\n mintFeePerQuantity: contractMintFee,\n };\n}\nexport function makeOnchainPrepareMintFromCreate({\n contractAddress,\n tokenId,\n result,\n minter,\n getContractMintFee,\n contractVersion,\n chainId,\n}: {\n contractAddress: Address;\n tokenId: bigint;\n result: ConcreteSalesConfig;\n minter: Address;\n getContractMintFee: () => Promise<bigint>;\n contractVersion: string;\n chainId: number;\n}): AsyncPrepareMint {\n return async (params: MintParametersBase): Promise<PrepareMintReturn> => {\n const subgraphSalesConfig = await toSalesStrategyFromSubgraph({\n minter,\n getContractMintFee,\n salesConfig: result,\n });\n return {\n parameters: makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: {\n salesConfig: subgraphSalesConfig,\n contractVersion,\n },\n ...params,\n tokenContract: contractAddress,\n tokenId,\n chainId,\n }),\n costs: parseMintCosts({\n allowListEntry: params.allowListEntry,\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: subgraphSalesConfig,\n }),\n erc20Approval: getRequiredErc20Approvals(params, subgraphSalesConfig),\n };\n };\n}\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\n\nexport function buildContractInfoQuery({\n contractAddress,\n}: {\n contractAddress: Address;\n}): ISubgraphQuery<{\n name: string;\n contractVersion: string;\n mintFeePerQuantity: string;\n tokens: {\n tokenId: Address;\n }[];\n}> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n zoraCreateContract(id: $contractAddress) {\n contractVersion\n name\n mintFeePerQuantity\n tokens(first: 1, orderBy: tokenId, orderDirection: desc) {\n tokenId\n }\n }\n }\n `,\n variables: {\n contractAddress: contractAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData.zoraCreateContract,\n };\n}\n","import { ISubgraphQuerier } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\nimport { buildContractInfoQuery } from \"./subgraph-queries\";\nimport { retriesGeneric } from \"src/retries\";\nimport { SubgraphGetter } from \"src/apis/subgraph-getter\";\n\nexport interface IContractGetter {\n getContractInfo: (params: {\n contractAddress: Address;\n retries?: number;\n }) => Promise<{\n name: string;\n contractVersion: string;\n nextTokenId: bigint;\n mintFee: bigint;\n }>;\n}\n\nexport class SubgraphContractGetter\n extends SubgraphGetter\n implements IContractGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n async getContractInfo({\n contractAddress,\n retries = 1,\n }: {\n contractAddress: Address;\n retries?: number;\n }): Promise<{\n name: string;\n contractVersion: string;\n nextTokenId: bigint;\n mintFee: bigint;\n }> {\n const tryFn = async () => {\n const responseData = await this.querySubgraphWithRetries(\n buildContractInfoQuery({ contractAddress }),\n );\n if (!responseData) {\n console.log(\"could not find contract\");\n throw new Error(\"Cannot find contract\");\n }\n return responseData;\n };\n\n const responseData = await retriesGeneric({\n tryFn,\n maxTries: retries,\n linearBackoffMS: 1000,\n });\n\n const nextTokenId =\n responseData.tokens.length === 0\n ? 1n\n : BigInt(responseData.tokens[0]!.tokenId) + 1n;\n\n return {\n name: responseData.name,\n contractVersion: responseData.contractVersion,\n mintFee: BigInt(responseData.mintFeePerQuantity),\n nextTokenId,\n };\n }\n}\n","import { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(where: { account: $account }) {\n balance\n mintToken {\n id\n pricePerToken\n }\n }\n }\n `;\n\n return {\n query,\n variables: { account },\n };\n};\n\nexport type MintAccountBalance = {\n balance: string;\n mintToken: {\n id: string;\n pricePerToken: string;\n };\n};\n\nexport type MintAccountBalancesQueryResult = {\n mintTokenBalances: MintAccountBalance[];\n};\n\n/**\n * Given the result of a mint token balances query, selects the best MINTs to use to collect with that will satisfy the quantity,\n * by selecting the lowest priced MINTs first. Throws an error if not enough mints to collect with.\n */\nexport const selectMintsToCollectWithFromQueryResult = (\n mintAccountBalances: MintAccountBalance[],\n quantityToCollect: bigint,\n) => {\n const parsed = mintAccountBalances.map((r) => {\n return {\n tokenId: BigInt(r.mintToken.id),\n quantity: BigInt(r.balance),\n pricePerToken: BigInt(r.mintToken.pricePerToken),\n };\n });\n\n // now we want to find the best tokens to collect with, sorted by lowest price ascending\n // given its a bigint, lets not do a straight subtraction but sort based on result of comparison gt/lt:\n const sorted = parsed.sort((a, b) => {\n if (a.pricePerToken < b.pricePerToken) {\n return -1;\n }\n return 1;\n });\n\n // we need to get array of tokenIds and quantities to collect with:\n let remainingQuantity = quantityToCollect;\n const tokenIds: bigint[] = [];\n const quantities: bigint[] = [];\n\n while (remainingQuantity > 0) {\n const next = sorted.shift();\n if (!next) {\n throw new Error(\"Not enough MINTs to collect with\");\n }\n\n const quantityToUse =\n remainingQuantity > next.quantity ? next.quantity : remainingQuantity;\n tokenIds.push(next.tokenId);\n quantities.push(quantityToUse);\n remainingQuantity -= quantityToUse;\n }\n\n return {\n tokenIds,\n quantities,\n };\n};\n\n/**\n * Given an array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n zoraSparksManagerImplABI,\n zoraSparksManagerImplAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\nimport { addressOrAccountAddress } from \"src/utils\";\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n tokenId,\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n tokenId: bigint;\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeContractParameters({\n abi: zoraSparksManagerImplABI,\n address: zoraSparksManagerImplAddress[chainId],\n functionName: \"mintWithEth\",\n args: [tokenId, quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n protocolRewardsABI,\n protocolRewardsAddress,\n erc20ZRoyaltiesABI,\n erc20ZRoyaltiesAddress,\n wethAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { makeContractParameters, PublicClient } from \"src/utils\";\nimport { PublicClient as PublicClientWithMulticall } from \"viem\";\nimport { Account, Address, encodeFunctionData, parseAbi } from \"viem\";\nimport { IRewardsGetter } from \"./subgraph-rewards-getter\";\nimport {\n multicall3Abi,\n multicall3Address,\n Multicall3Call3,\n} from \"src/apis/multicall3\";\nimport { SubgraphRewardsGetter } from \"./subgraph-rewards-getter\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\n// Aggregates unclaimed fees and separates ETH from other ERC20 tokens\nfunction aggregateUnclaimedFees(\n unclaimedFees: readonly {\n token0: `0x${string}`;\n token1: `0x${string}`;\n token0Amount: bigint;\n token1Amount: bigint;\n }[],\n wethAddress: Address,\n) {\n let ethBalance = 0n;\n // Aggregate unclaimed fees by token address\n const unclaimedFeesAggregate = unclaimedFees.reduce(\n (acc, fee) => {\n const addFee = (token: `0x${string}`, amount: bigint) => {\n if (token === wethAddress) {\n ethBalance += amount;\n } else if (acc[token]) {\n acc[token] += amount;\n } else {\n acc[token] = amount;\n }\n };\n // Apply 75% fee to each token amount\n addFee(fee.token0, (fee.token0Amount * 75n) / 100n);\n addFee(fee.token1, (fee.token1Amount * 75n) / 100n);\n return acc;\n },\n {} as Record<string, bigint>,\n );\n\n return {\n eth: (ethBalance * 75n) / 100n, // Apply 75% fee to ETH balance\n erc20: unclaimedFeesAggregate,\n };\n}\n\n// Define the return type for getRewardsBalance\ntype RewardsBalance = {\n // The total balance, in eth of protocol rewards\n protocolRewards: bigint;\n // The secondary royalties balance.\n secondaryRoyalties: {\n // The balance, in eth, of secondary royalties\n eth: bigint;\n // The balance, aggregated by erc20 address, of secondary royalties\n erc20: Record<Address, bigint>;\n };\n};\n\nconst getErc20zsWithPositions = async ({\n address,\n publicClient,\n rewardsGetter,\n}: {\n address: Address;\n publicClient: PublicClient;\n rewardsGetter?: IRewardsGetter;\n}): Promise<Address[]> => {\n const chainId = publicClient.chain.id;\n const rewardsGetterOrDefault =\n rewardsGetter ?? new SubgraphRewardsGetter(chainId);\n\n const erc20zsForCreator = await rewardsGetterOrDefault.getErc20ZzForCreator({\n address,\n });\n\n const royaltiesAddress =\n erc20ZRoyaltiesAddress[chainId as keyof typeof erc20ZRoyaltiesAddress];\n\n const positionsByErc20z = await (\n publicClient as PublicClientWithMulticall\n ).multicall({\n contracts: erc20zsForCreator.map((erc20z) => ({\n address: royaltiesAddress,\n abi: erc20ZRoyaltiesABI,\n functionName: \"positionsByErc20z\",\n args: [erc20z],\n })),\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n const erc20zsWithPositions = erc20zsForCreator.filter(\n (_, i) => positionsByErc20z[i] !== 0n,\n );\n\n return erc20zsWithPositions;\n};\n\nexport const getRewardsBalances = async ({\n account, // The account to check rewards for (Address or Account object)\n publicClient, // The public client for making blockchain queries\n rewardsGetter, // Interface for getting ERC20Z tokens for a creator\n}: {\n account: Account | Address;\n publicClient: PublicClient;\n rewardsGetter?: IRewardsGetter;\n}): Promise<RewardsBalance> => {\n const chainId = publicClient.chain.id;\n const address = typeof account === \"string\" ? account : account.address;\n\n // get erc20z that have positions in the royalties contract\n const erc20zsWithPositions = await getErc20zsWithPositions({\n address,\n publicClient,\n rewardsGetter,\n });\n\n // Perform multicall to get protocol rewards balance and unclaimed fees\n const result = await (publicClient as PublicClientWithMulticall).multicall({\n contracts: [\n {\n address:\n protocolRewardsAddress[\n chainId as keyof typeof protocolRewardsAddress\n ],\n abi: protocolRewardsABI,\n functionName: \"balanceOf\",\n args: [address],\n },\n {\n address:\n erc20ZRoyaltiesAddress[\n chainId as keyof typeof erc20ZRoyaltiesAddress\n ],\n abi: erc20ZRoyaltiesABI,\n functionName: \"getUnclaimedFeesBatch\",\n args: [erc20zsWithPositions],\n },\n ],\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n const protocolRewardsBalance = result[0];\n\n const wethAddressForChain = wethAddress[chainId as keyof typeof wethAddress];\n\n // Aggregate unclaimed fees\n const unclaimedFeesAggregate = aggregateUnclaimedFees(\n result[1],\n wethAddressForChain,\n );\n\n return {\n protocolRewards: protocolRewardsBalance,\n secondaryRoyalties: unclaimedFeesAggregate,\n };\n};\n\nexport const withdrawProtocolRewards = ({\n withdrawFor,\n chainId,\n}: {\n // Account to execute the transaction\n withdrawFor: Address;\n chainId: number;\n}) => {\n return makeContractParameters({\n abi: protocolRewardsABI,\n functionName: \"withdrawFor\",\n address:\n protocolRewardsAddress[chainId as keyof typeof protocolRewardsAddress],\n args: [withdrawFor, 0n],\n });\n};\n\nconst makeClaimSecondaryRoyaltiesCalls = async ({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n}: {\n claimFor: Address;\n chainId: number;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) => {\n const erc20z = await getErc20zsWithPositions({\n address: claimFor,\n publicClient,\n rewardsGetter,\n });\n\n const royaltiesAddress =\n erc20ZRoyaltiesAddress[chainId as keyof typeof erc20ZRoyaltiesAddress];\n\n if (erc20z.length === 0) {\n return [];\n }\n\n return erc20z.map((erc20z) => ({\n target: royaltiesAddress,\n callData: encodeFunctionData({\n abi: erc20ZRoyaltiesABI,\n functionName: \"claimFor\",\n args: [erc20z],\n }),\n allowFailure: false,\n }));\n};\n\nexport async function withdrawSecondaryRoyalties({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n}: {\n claimFor: Address;\n chainId: number;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) {\n const calls = await makeClaimSecondaryRoyaltiesCalls({\n claimFor,\n chainId,\n rewardsGetter,\n publicClient,\n });\n\n return makeContractParameters({\n abi: multicall3Abi,\n functionName: \"aggregate3\",\n address: multicall3Address,\n args: [calls],\n });\n}\n\n// Extract protocol rewards withdrawal call creation\nconst createProtocolRewardsCall = (\n chainId: number,\n withdrawFor: Address,\n): Multicall3Call3 => ({\n target:\n protocolRewardsAddress[chainId as keyof typeof protocolRewardsAddress],\n callData: encodeFunctionData({\n abi: protocolRewardsABI,\n functionName: \"withdrawFor\",\n args: [withdrawFor, 0n],\n }),\n allowFailure: false,\n});\n\n// Extract multicall parameters creation\nconst createMulticallParameters = (\n calls: Multicall3Call3[],\n account: Address | Account,\n) =>\n makeContractParameters({\n abi: parseAbi(multicall3Abi),\n functionName: \"aggregate3\",\n address: multicall3Address,\n args: [calls],\n account,\n });\n\n// Handle the simple case of protocol rewards only\nconst handleProtocolRewardsOnly = ({\n chainId,\n withdrawFor,\n account,\n}: {\n chainId: number;\n withdrawFor: Address;\n account: Address | Account;\n}) => ({\n ...withdrawProtocolRewards({ chainId, withdrawFor }),\n account,\n});\n\n// Handle both protocol and secondary rewards\nconst handleAllRewards = async ({\n withdrawFor,\n account,\n rewardsGetter,\n publicClient,\n}: {\n withdrawFor: Address;\n account: Address | Account;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}) => {\n const chainId = publicClient.chain.id;\n const protocolRewardsCall = createProtocolRewardsCall(chainId, withdrawFor);\n const secondaryRoyaltiesCalls = await makeClaimSecondaryRoyaltiesCalls({\n chainId,\n claimFor: withdrawFor,\n rewardsGetter,\n publicClient,\n });\n\n const allCalls = [protocolRewardsCall, ...secondaryRoyaltiesCalls];\n return createMulticallParameters(allCalls, account);\n};\n\n// Main withdrawRewards function now acts as a router\nexport const withdrawRewards = async ({\n account,\n withdrawFor,\n claimSecondaryRoyalties = true,\n rewardsGetter,\n publicClient,\n}: {\n account: Address | Account;\n withdrawFor: Address;\n claimSecondaryRoyalties?: boolean;\n rewardsGetter?: IRewardsGetter;\n publicClient: PublicClient;\n}): Promise<{ parameters: SimulateContractParametersWithAccount }> => {\n const parameters = claimSecondaryRoyalties\n ? await handleAllRewards({\n withdrawFor,\n account,\n rewardsGetter,\n publicClient,\n })\n : await handleProtocolRewardsOnly({\n chainId: publicClient.chain.id,\n withdrawFor,\n account,\n });\n\n return { parameters };\n};\n","import { Address, Hex } from \"viem\";\n\nexport const multicall3Abi = [\n \"struct Call { address target; bytes callData; }\",\n \"struct Call3 { address target; bool allowFailure; bytes callData; }\",\n \"struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; }\",\n \"struct Result { bool success; bytes returnData; }\",\n \"function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData)\",\n \"function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData)\",\n \"function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData)\",\n];\n\nexport const multicall3Address = \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\nexport type Multicall3Call3 = {\n target: Address;\n allowFailure: boolean;\n callData: Hex;\n};\n","import { ISubgraphQuery } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\n\nexport type RewardsToken = {\n salesStrategies: [\n {\n zoraTimedMinter?: {\n erc20Z: {\n id: Address;\n };\n };\n },\n ];\n};\n\nexport type CreatorERC20zQueryResult = {\n zoraCreateTokens: RewardsToken[];\n};\n\nexport function buildCreatorERC20zs({\n address,\n}: {\n address: Address;\n}): ISubgraphQuery<CreatorERC20zQueryResult[\"zoraCreateTokens\"]> {\n return {\n query: `\n query ($address: Bytes!) {\n zoraCreateTokens(\n where: { royalties_: { royaltyRecipient: $address }, salesStrategies_: { type: \"ZORA_TIMED\" } }\n ) {\n royalties {\n user\n }\n salesStrategies {\n zoraTimedMinter {\n erc20Z {\n id\n }\n }\n }\n }\n }\n `,\n variables: { address },\n parseResponseData: (responseData: any | undefined) => {\n return responseData?.zoraCreateTokens;\n },\n };\n}\n","import { SubgraphGetter } from \"src/apis/subgraph-getter\";\nimport { ISubgraphQuerier } from \"src/apis/subgraph-querier\";\nimport { Address } from \"viem\";\nimport { buildCreatorERC20zs } from \"./subgraph-queries\";\n\nexport interface IRewardsGetter {\n getErc20ZzForCreator: (params: { address: Address }) => Promise<Address[]>;\n}\n\nexport class SubgraphRewardsGetter\n extends SubgraphGetter\n implements IRewardsGetter\n{\n constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {\n super(chainId, subgraphQuerier);\n }\n\n async getErc20ZzForCreator({ address }: { address: Address }) {\n const queryResults = await this.querySubgraphWithRetries(\n buildCreatorERC20zs({ address }),\n );\n\n const results = (\n queryResults?.map((result) => {\n const timedMinter = result.salesStrategies[0].zoraTimedMinter;\n\n if (!timedMinter) {\n return null;\n }\n\n return timedMinter.erc20Z.id;\n }) || []\n ).filter((id): id is Address => !!id);\n\n return results;\n }\n}\n","import { IPublicClient } from \"src/types\";\nimport { IRewardsGetter } from \"./subgraph-rewards-getter\";\nimport { Account, Address } from \"viem\";\nimport { getRewardsBalances, withdrawRewards } from \"./rewards-queries\";\n\nexport type WithdrawRewardsParams = {\n // account is the address that is withdrawing the rewards\n account: Address | Account;\n // withdrawFor is the address that is receiving the rewards\n withdrawFor: Address;\n // claimSecondaryRoyalties is an optional flag to claim secondary royalties. Defaults to `true`.\n claimSecondaryRoyalties?: boolean;\n};\n\nexport type GetRewardsBalancesParams = {\n // The address or account to get the rewards balance for\n account: Address | Account;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new RewardsClient().withdrawRewards()`, use `withdrawRewards()`\n * Import the functions you need directly from their respective modules:\n * import { withdrawRewards, getRewardsBalances } from '@zoralabs/protocol-sdk'\n */\nexport class RewardsClient {\n // Private properties to store chain ID, public client, and rewards getter\n private readonly publicClient: IPublicClient;\n private readonly rewardsGetter: IRewardsGetter;\n\n constructor({\n publicClient,\n rewardsGetter,\n }: {\n publicClient: IPublicClient;\n rewardsGetter: IRewardsGetter;\n }) {\n // Initialize the private properties\n this.publicClient = publicClient;\n this.rewardsGetter = rewardsGetter;\n }\n\n /** Withdraws rewards for a given account */\n async withdrawRewards({\n account,\n withdrawFor,\n claimSecondaryRoyalties,\n }: WithdrawRewardsParams) {\n return await withdrawRewards({\n rewardsGetter: this.rewardsGetter,\n withdrawFor,\n claimSecondaryRoyalties,\n account,\n publicClient: this.publicClient,\n });\n }\n\n /** Retrieves the rewards balances for a given account */\n async getRewardsBalances(params: GetRewardsBalancesParams) {\n return getRewardsBalances({\n account: params.account,\n publicClient: this.publicClient,\n rewardsGetter: this.rewardsGetter,\n });\n }\n}\n","import { Account, Address, encodeAbiParameters } from \"viem\";\nimport {\n secondarySwapAddress,\n zoraCreator1155ImplABI,\n safeTransferSwapAbiParameters,\n secondarySwapABI,\n callerAndCommenterABI,\n callerAndCommenterAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { makeContractParameters, PublicClient } from \"src/utils\";\nimport { getUniswapQuote } from \"./uniswap/uniswapQuote\";\nimport { calculateSlippageUp, calculateSlippageDown } from \"./slippage\";\nimport { getSecondaryInfo } from \"./utils\";\nimport { addressOrAccountAddress } from \"src/utils\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\nimport {\n QuotePrice,\n BuyWithSlippageInput,\n SellWithSlippageInput,\n SecondaryInfo,\n} from \"./types\";\n\n// uniswap's auto slippage for L2s is 0.5% -> 0.005\nconst UNISWAP_SLIPPAGE = 0.005;\n\n// Error constants\nconst ERROR_INSUFFICIENT_WALLET_FUNDS = \"Insufficient wallet funds\";\nconst ERROR_INSUFFICIENT_POOL_SUPPLY = \"Insufficient pool supply\";\nconst ERROR_SECONDARY_NOT_CONFIGURED =\n \"Secondary not configured for given contract and token\";\nexport const ERROR_SECONDARY_NOT_STARTED = \"Secondary market has not started\";\nexport const ERROR_RECIPIENT_MISMATCH =\n \"Recipient must be the same as the caller if there is a comment\";\n\n// Helper function to create error objects\nfunction makeError(errorMessage: string) {\n return { error: errorMessage };\n}\n\ntype Call =\n | {\n // Parameters for the buy or sell transaction\n parameters: SimulateContractParametersWithAccount;\n error?: undefined;\n }\n | {\n parameters?: undefined;\n // Error message if the buy or sell operation cannot be performed\n error: string;\n };\n\nasync function makeBuy({\n contract,\n tokenId,\n erc20z,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n comment,\n}: {\n erc20z: Address;\n contract: Address;\n tokenId: bigint;\n poolBalance: { erc20z: bigint };\n amount: bigint;\n quantity: bigint;\n account: Address | Account;\n recipient?: Address;\n slippage: number;\n comment: string | undefined;\n publicClient: PublicClient;\n}): Promise<Call> {\n const costWithSlippage = calculateSlippageUp(amount, slippage);\n const accountAddress = addressOrAccountAddress(account);\n\n const validationResult = await validateBuyConditions({\n poolBalance,\n quantity,\n costWithSlippage,\n accountAddress,\n publicClient,\n });\n\n if (validationResult.error) {\n return makeError(validationResult.error);\n }\n\n if (comment && comment !== \"\") {\n return handleBuyWithComment({\n accountAddress,\n recipient,\n chainId: publicClient.chain.id,\n quantity,\n contract,\n tokenId,\n costWithSlippage,\n comment,\n account,\n });\n }\n\n return handleBuyWithoutComment({\n erc20z,\n quantity,\n recipient,\n accountAddress,\n costWithSlippage,\n chainId: publicClient.chain.id,\n account,\n });\n}\n\nasync function validateBuyConditions({\n poolBalance,\n quantity,\n costWithSlippage,\n accountAddress,\n publicClient,\n}: {\n poolBalance: { erc20z: bigint };\n quantity: bigint;\n costWithSlippage: bigint;\n accountAddress: Address;\n publicClient: PublicClient;\n}): Promise<{ error?: string }> {\n const availableToBuy = poolBalance.erc20z / BigInt(1e18) - 1n;\n const availableToSpend = await publicClient.getBalance({\n address: accountAddress,\n });\n\n if (costWithSlippage > availableToSpend) {\n return { error: ERROR_INSUFFICIENT_WALLET_FUNDS };\n }\n\n if (availableToBuy < BigInt(quantity)) {\n return { error: ERROR_INSUFFICIENT_POOL_SUPPLY };\n }\n\n return {};\n}\n\nfunction handleBuyWithComment({\n accountAddress,\n recipient,\n chainId,\n quantity,\n contract,\n tokenId,\n costWithSlippage,\n comment,\n account,\n}: {\n accountAddress: Address;\n recipient?: Address;\n chainId: number;\n quantity: bigint;\n contract: Address;\n tokenId: bigint;\n costWithSlippage: bigint;\n comment: string;\n account: Address | Account;\n}): Call {\n if (recipient && recipient !== accountAddress) {\n return makeError(ERROR_RECIPIENT_MISMATCH);\n }\n\n return {\n parameters: makeContractParameters({\n abi: callerAndCommenterABI,\n address:\n callerAndCommenterAddress[\n chainId as keyof typeof callerAndCommenterAddress\n ],\n functionName: \"buyOnSecondaryAndComment\",\n args: [\n accountAddress,\n quantity,\n contract,\n tokenId,\n accountAddress,\n costWithSlippage,\n 0n,\n comment,\n ],\n account,\n value: costWithSlippage,\n }),\n };\n}\n\nfunction handleBuyWithoutComment({\n erc20z,\n quantity,\n recipient,\n accountAddress,\n costWithSlippage,\n chainId,\n account,\n}: {\n erc20z: Address;\n quantity: bigint;\n recipient?: Address;\n accountAddress: Address;\n costWithSlippage: bigint;\n chainId: number;\n account: Address | Account;\n}): Call {\n return {\n parameters: makeContractParameters({\n abi: secondarySwapABI,\n address:\n secondarySwapAddress[chainId as keyof typeof secondarySwapAddress],\n functionName: \"buy1155\",\n args: [\n erc20z,\n quantity,\n recipient || accountAddress,\n accountAddress,\n costWithSlippage,\n 0n,\n ],\n account,\n value: costWithSlippage,\n }),\n };\n}\n\ntype BuyOrSellWithSlippageResult =\n | ({\n // Price to buy or sell the quantity of 1155s\n price: QuotePrice;\n } & Call)\n | {\n error: string;\n price?: undefined;\n parameters?: undefined;\n };\n\nexport async function buy1155OnSecondary({\n contract,\n tokenId,\n publicClient,\n quantity,\n account,\n slippage = UNISWAP_SLIPPAGE,\n recipient,\n comment,\n}: BuyWithSlippageInput & {\n publicClient: PublicClient;\n}): Promise<BuyOrSellWithSlippageResult> {\n const secondaryInfo = await getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n });\n\n if (!secondaryInfo) {\n return makeError(ERROR_SECONDARY_NOT_CONFIGURED);\n }\n\n const { erc20z, pool, secondaryActivated } = secondaryInfo;\n\n if (!secondaryActivated) {\n return makeError(ERROR_SECONDARY_NOT_STARTED);\n }\n\n const { poolBalance, amount, price } = await getUniswapQuote(\n {\n type: \"buy\",\n quantity,\n poolAddress: pool,\n erc20z,\n },\n publicClient,\n );\n\n const call = await makeBuy({\n erc20z,\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n comment,\n publicClient,\n });\n\n return {\n ...call,\n price,\n };\n}\n\nasync function makeSell({\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n}: {\n contract: Address;\n tokenId: bigint;\n poolBalance: { weth: bigint };\n amount: bigint;\n quantity: bigint;\n account: Address | Account;\n recipient?: Address;\n slippage: number;\n publicClient: PublicClient;\n}): Promise<Call> {\n const accountAddress = addressOrAccountAddress(account);\n\n const tokenCount = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contract,\n functionName: \"balanceOf\",\n args: [accountAddress, tokenId],\n });\n\n const availableToSell = tokenCount ?? 0n;\n const availableToReceive = poolBalance.weth;\n\n if (quantity > availableToSell) {\n return makeError(ERROR_INSUFFICIENT_WALLET_FUNDS);\n }\n\n if (amount > availableToReceive) {\n return makeError(ERROR_INSUFFICIENT_POOL_SUPPLY);\n }\n\n const receivedWithSlippage = calculateSlippageDown(amount, slippage);\n\n const data = encodeAbiParameters(safeTransferSwapAbiParameters, [\n recipient || accountAddress,\n receivedWithSlippage,\n 0n,\n ]);\n\n const chainId = publicClient.chain.id;\n\n return {\n parameters: makeContractParameters({\n abi: zoraCreator1155ImplABI,\n address: contract,\n functionName: \"safeTransferFrom\",\n account,\n args: [\n accountAddress,\n secondarySwapAddress[chainId as keyof typeof secondarySwapAddress],\n tokenId,\n quantity,\n data,\n ],\n }),\n };\n}\n\nexport async function sell1155OnSecondary({\n contract,\n tokenId,\n publicClient,\n quantity,\n account,\n slippage = UNISWAP_SLIPPAGE,\n recipient,\n}: SellWithSlippageInput & {\n publicClient: PublicClient;\n}): Promise<BuyOrSellWithSlippageResult> {\n const secondaryInfo = await getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n });\n\n if (!secondaryInfo) {\n return makeError(ERROR_SECONDARY_NOT_CONFIGURED);\n }\n\n const { pool, secondaryActivated, erc20z } = secondaryInfo;\n\n if (!secondaryActivated) {\n return makeError(ERROR_SECONDARY_NOT_STARTED);\n }\n\n const { poolBalance, amount, price } = await getUniswapQuote(\n { type: \"sell\", quantity, poolAddress: pool, erc20z },\n publicClient,\n );\n\n const call = await makeSell({\n contract,\n tokenId,\n poolBalance,\n amount,\n quantity,\n account,\n recipient,\n slippage,\n publicClient,\n });\n\n return {\n ...call,\n price,\n };\n}\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `new SecondaryClient().buy1155OnSecondary()`, use `buy1155OnSecondary()`\n * Import the functions you need directly from their respective modules:\n * import { buy1155OnSecondary, sell1155OnSecondary, getSecondaryInfo } from '@zoralabs/protocol-sdk'\n */\nexport class SecondaryClient {\n private publicClient: PublicClient;\n\n /**\n * Creates a new SecondaryClient instance.\n * @param publicClient - The public client for interacting with the blockchain.\n * @param chainId - The ID of the blockchain network.\n */\n constructor({ publicClient }: { publicClient: PublicClient }) {\n this.publicClient = publicClient;\n }\n\n /**\n * Get the secondary info for a given contract and token ID.\n * @param contract - The address of the contract.\n * @param tokenId - The ID of the token.\n * @returns A promise that resolves to the secondary info.\n */\n async getSecondaryInfo({\n contract,\n tokenId,\n }: {\n contract: Address;\n tokenId: bigint;\n }): Promise<SecondaryInfo | undefined> {\n return getSecondaryInfo({\n contract,\n tokenId,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Prepares a buy operation with slippage protection for purchasing a quantity of ERC1155 tokens with ETH on the secondary market.\n * @param input - The input parameters for the buy operation.\n * @returns A promise that resolves to the result of the buy operation, including price breakdown and transaction parameters.\n */\n async buy1155OnSecondary(\n input: BuyWithSlippageInput,\n ): Promise<BuyOrSellWithSlippageResult> {\n // Call the buyWithSlippage function with the provided input and client details\n return buy1155OnSecondary({\n ...input,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Prepares a sell operation with slippage protection for selling a quantity of ERC1155 tokens for ETH on the secondary market.\n * @param input - The input parameters for the sell operation.\n * @returns A promise that resolves to the result of the sell operation, including price breakdown and transaction parameters.\n */\n async sell1155OnSecondary(\n input: SellWithSlippageInput,\n ): Promise<BuyOrSellWithSlippageResult> {\n // Call the sellWithSlippage function with the provided input and client details\n return sell1155OnSecondary({\n ...input,\n publicClient: this.publicClient,\n });\n }\n}\n","import { Address, erc20Abi } from \"viem\";\nimport { PublicClient as PublicClientWithMulticall } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport { getEthPriceInUSDC } from \"./uniswapReserves\";\nimport { convertWeiToSparks, convertWeiToUSD } from \"../conversions\";\n\nimport { uniswapV3PoolAbi } from \"./abis\";\nimport { wethAddress as wethAddresses } from \"@zoralabs/protocol-deployments\";\n\nimport { GetQuoteOutput } from \"../types\";\nimport {\n quoteExactInputSingle,\n quoteExactOutputSingle,\n} from \"./uniswapQuoteExact\";\nimport { multicall3Address } from \"src/apis/multicall3\";\n\nasync function getPoolInfo({\n poolAddress,\n client,\n WETH,\n erc20z,\n}: {\n poolAddress: Address;\n WETH: Address;\n erc20z: Address;\n client: PublicClient;\n}) {\n const [fee, wethBalance, erc20zBalance] = await (\n client as PublicClientWithMulticall\n ).multicall({\n contracts: [\n {\n abi: uniswapV3PoolAbi,\n address: poolAddress,\n functionName: \"fee\",\n },\n // get WETH and erc20z balance for pool\n {\n abi: erc20Abi,\n address: WETH,\n functionName: \"balanceOf\",\n args: [poolAddress],\n },\n {\n abi: erc20Abi,\n address: erc20z,\n functionName: \"balanceOf\",\n args: [poolAddress],\n },\n ],\n multicallAddress: multicall3Address,\n allowFailure: false,\n });\n\n return {\n wethBalance,\n erc20zBalance,\n fee,\n };\n}\n\ntype GetQuoteInput = {\n // Indicates whether the quote is for buying or selling\n type: \"buy\" | \"sell\";\n // The amount of tokens to buy or sell\n quantity: bigint;\n poolAddress: Address;\n erc20z: Address;\n};\nexport async function getUniswapQuote(\n input: GetQuoteInput,\n client: PublicClient,\n): Promise<GetQuoteOutput> {\n const { type, quantity, poolAddress, erc20z } = input;\n\n const chainId = client.chain.id;\n\n const WETH = wethAddresses[chainId as keyof typeof wethAddresses];\n\n const pool = await getPoolInfo({ poolAddress, WETH, erc20z, client });\n\n const { fee, wethBalance, erc20zBalance } = pool;\n\n // 1 unit always comes to 1e18 erc20 equivalent\n const amountWithDecimals = input.quantity * 10n ** 18n;\n\n const amount =\n type === \"buy\"\n ? await quoteExactOutputSingle({\n tokenIn: WETH,\n tokenOut: erc20z,\n amountOut: amountWithDecimals,\n fee,\n chainId,\n client,\n })\n : await quoteExactInputSingle({\n tokenIn: erc20z,\n tokenOut: WETH,\n amountIn: amountWithDecimals,\n fee,\n chainId,\n client,\n });\n\n const price = amount;\n const pricePerToken = amount / BigInt(quantity);\n\n const getUsdPrice = async () => {\n const ethPriceInUSD = await getEthPriceInUSDC();\n return {\n perToken: convertWeiToUSD({ amount: pricePerToken, ethPriceInUSD }),\n total: convertWeiToUSD({ amount: price, ethPriceInUSD }),\n };\n };\n\n return {\n amount,\n poolBalance: {\n erc20z: erc20zBalance,\n weth: wethBalance,\n },\n price: {\n wei: {\n perToken: pricePerToken,\n total: price,\n },\n sparks: {\n perToken: convertWeiToSparks(pricePerToken),\n total: convertWeiToSparks(price),\n },\n usdc: getUsdPrice,\n },\n };\n}\n","import { createPublicClient, http } from \"viem\";\nimport { mainnet } from \"viem/chains\";\nimport { uniswapV2USDCAbi } from \"./abis\";\n\nconst uniswapV2USDCMainnetAddress =\n \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\";\n\nexport function getUniswapV2USDCReserves() {\n const mainnetClient = createPublicClient({\n chain: mainnet,\n transport: http(),\n });\n return mainnetClient.readContract({\n address: uniswapV2USDCMainnetAddress,\n abi: uniswapV2USDCAbi,\n functionName: \"getReserves\",\n });\n}\n\nfunction toEthPriceInUSDC({\n reserve0,\n reserve1,\n}: {\n reserve0: bigint;\n reserve1: bigint;\n}) {\n return Number((reserve0 * BigInt(1e14)) / reserve1) / 1e2;\n}\n\n// returns the ETH price in USDC\nexport async function getEthPriceInUSDC() {\n const reserves = await getUniswapV2USDCReserves();\n return toEthPriceInUSDC({ reserve0: reserves[0], reserve1: reserves[1] });\n}\n","import { parseAbi } from \"viem\";\n\nexport const uniswapQuoterABI = parseAbi([\n \"struct QuoteExactInputSingleParams { address tokenIn; address tokenOut; uint256 amountIn; uint24 fee; uint160 sqrtPriceLimitX96; }\",\n \"struct QuoteExactOutputSingleParams { address tokenIn; address tokenOut; uint256 amount; uint24 fee; uint160 sqrtPriceLimitX96; }\",\n \"function quoteExactInputSingle(QuoteExactInputSingleParams calldata params) external returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\",\n \"function quoteExactOutputSingle(QuoteExactOutputSingleParams calldata params) external returns (uint256 amountIn, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\",\n]);\n\nexport const uniswapV3PoolAbi = parseAbi([\n \"function fee() external view returns (uint24)\",\n \"function liquidity() external view returns (uint128)\",\n \"function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)\",\n \"function token0() external view returns (address)\",\n \"function token1() external view returns (address)\",\n]);\n\nexport const uniswapV2USDCAbi = parseAbi([\n \"function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)\",\n]);\n","import { formatEther } from \"viem\";\n\nexport const WEI_PER_SPARK = 1_000_000_000_000n;\n\nexport function convertWeiToSparks(wei: string | number | bigint) {\n return BigInt(wei) / WEI_PER_SPARK;\n}\n\n// Returns the price in USDC given an amount in WEI\nexport function convertWeiToUSD({\n amount,\n ethPriceInUSD,\n}: {\n amount: bigint;\n ethPriceInUSD: number;\n}) {\n const amountInEth = formatEther(amount);\n\n return parseFloat(amountInEth) * ethPriceInUSD;\n}\n","import { Address } from \"viem\";\nimport {\n mainnet,\n sepolia,\n zora,\n zoraSepolia,\n base,\n baseSepolia,\n optimism,\n arbitrum,\n blast,\n} from \"viem/chains\";\nimport { uniswapQuoterABI } from \"./abis\";\nimport { PublicClient } from \"../../utils\";\n\nconst UniswapQuoterAddress: Record<number, Address> = {\n [mainnet.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [sepolia.id]: \"0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3\",\n [zora.id]: \"0x11867e1b3348F3ce4FcC170BC5af3d23E07E64Df\",\n [zoraSepolia.id]: \"0xC195976fEF0985886E37036E2DF62bF371E12Df0\",\n [base.id]: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\",\n [baseSepolia.id]: \"0xC5290058841028F1614F3A6F0F5816cAd0df5E27\",\n [optimism.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [arbitrum.id]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n [blast.id]: \"0x6Cdcd65e03c1CEc3730AeeCd45bc140D57A25C77\",\n};\n\n/**\n * Fetches a quote for buying an exact amount of erc20z from the uniswap pool\n *\n * @param tokenIn - the token to sell (will be weth)\n * @param tokenOut - the token to purchase (will be an erc20z)\n * @param amount - the exact amount of erc20z to purchase\n * @param fee - the fee of the pool\n * @param chainId - the chain id\n */\nexport async function quoteExactOutputSingle({\n tokenIn,\n tokenOut,\n amountOut,\n fee,\n chainId,\n client,\n}: {\n tokenIn: Address;\n tokenOut: Address;\n amountOut: bigint;\n fee: number;\n chainId: number;\n client: PublicClient;\n}): Promise<bigint> {\n const quote = await client.simulateContract({\n abi: uniswapQuoterABI,\n address: UniswapQuoterAddress[\n chainId as keyof typeof UniswapQuoterAddress\n ] as Address,\n functionName: \"quoteExactOutputSingle\",\n args: [\n {\n tokenIn,\n tokenOut,\n amount: amountOut,\n fee,\n sqrtPriceLimitX96: 0n,\n },\n ],\n });\n\n return quote.result[0];\n}\n\n/**\n * Fetches a quote for selling an exact amount of erc20z to the uniswap pool\n *\n * @param tokenIn - the token to sell (will be erc20z)\n * @param tokenOut - the token to purchase (will be weth)\n * @param amount - the exact amount of erc20z to sell\n * @param fee - the fee of the pool\n * @param chainId - the chain id\n */\nexport async function quoteExactInputSingle({\n tokenIn,\n tokenOut,\n amountIn,\n fee,\n chainId,\n client,\n}: {\n tokenIn: Address;\n tokenOut: Address;\n amountIn: bigint;\n fee: number;\n chainId: number;\n client: PublicClient;\n}): Promise<bigint> {\n const quote = await client.simulateContract({\n abi: uniswapQuoterABI,\n address: UniswapQuoterAddress[\n chainId as keyof typeof UniswapQuoterAddress\n ] as Address,\n functionName: \"quoteExactInputSingle\",\n args: [\n {\n tokenIn,\n tokenOut,\n amountIn,\n fee,\n sqrtPriceLimitX96: 0n,\n },\n ],\n });\n\n return quote.result[0];\n}\n","const SCALE = 1e18;\nconst ONE_SCALED = BigInt(SCALE);\n\n/**\n * Increase a base amount by a slippage percentage\n *\n * @remarks\n * This is useful when trying to calculate how much a user would at maximum pay,\n * when allowing for the specified amount of slippage (i.e. when buying 1155s).\n *\n * @param amount - the amount to calculate with slippage (if a bigint is passed we assume wei, otherwise we assume ether/usd/etc)\n * @param slippage - the slippage percantage as a fraction (i.e. 5% -> 0.05)\n * @returns the amount increased by the slippage\n */\nexport function calculateSlippageUp<\n T extends bigint | number | string,\n R = T extends bigint ? bigint : number,\n>(amount: T, slippage: number): R {\n return typeof amount === \"bigint\"\n ? (((amount * (ONE_SCALED + BigInt(slippage * SCALE))) / ONE_SCALED) as R)\n : ((parseFloat(String(amount)) * (1 + slippage)) as R);\n}\n\n/**\n * Decrease a base amount by a slippage percentage\n *\n * @remarks\n * This is useful when trying to calculate how much a user would at minimum receive,\n * when allowing for the specified amount of slippage (i.e. when selling 1155s).\n *\n * @param amount - the amount to calculate with slippage (if a bigint is passed we assume wei, otherwise we assume ether/usd/etc)\n * @param slippage - the slippage percantage as a fraction (i.e. 5% -> 0.05)\n * @returns the amount decreased by the slippage\n */\nexport function calculateSlippageDown<\n T extends bigint | number | string,\n R = T extends bigint ? bigint : number,\n>(amount: T, slippage: number): R {\n return typeof amount === \"bigint\"\n ? (((amount * (ONE_SCALED - BigInt(slippage * SCALE))) / ONE_SCALED) as R)\n : ((parseFloat(String(amount)) * (1 - slippage)) as R);\n}\n","import { Address, parseEther } from \"viem\";\nimport { PublicClient } from \"src/utils\";\nimport {\n zoraTimedSaleStrategyABI,\n zoraTimedSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { SecondaryInfo } from \"./types\";\n\nconst LEGACY_MINIMUM_MARKET_ETH = parseEther(\"0.0123321\");\nconst LEGACY_MARKET_REWARD = parseEther(\"0.0000111\");\nconst MARKET_REWARD = parseEther(\"0.0000222\");\n\nexport async function getSecondaryInfo({\n contract,\n tokenId,\n publicClient,\n}: {\n contract: Address;\n tokenId: bigint;\n publicClient: PublicClient;\n}): Promise<SecondaryInfo | undefined> {\n let result;\n\n const chainId = publicClient.chain.id;\n\n try {\n result = await publicClient.readContract({\n abi: zoraTimedSaleStrategyABI,\n address:\n zoraTimedSaleStrategyAddress[\n chainId as keyof typeof zoraTimedSaleStrategyAddress\n ],\n functionName: \"saleV2\",\n args: [contract, tokenId],\n });\n } catch (e) {\n console.error(e);\n return undefined;\n }\n\n // if there is no erc20zAddress, we can assume that secondary market has not been configured for this contract and token.\n if (!result.erc20zAddress) {\n return undefined;\n }\n\n const usesLegacyMarketReward =\n result.minimumMarketEth === LEGACY_MINIMUM_MARKET_ETH;\n const erc20zBalance = await publicClient.getBalance({\n address: result.erc20zAddress,\n });\n\n return {\n erc20z: result.erc20zAddress,\n pool: result.poolAddress,\n secondaryActivated: result.secondaryActivated,\n saleEnd: result.saleEnd === 0n ? undefined : result.saleEnd,\n saleStart: result.saleStart,\n name: result.name,\n symbol: result.symbol,\n marketCountdown:\n result.marketCountdown === 0n ? undefined : result.marketCountdown,\n minimumMintsForCountdown:\n result.minimumMarketEth === 0n\n ? undefined\n : usesLegacyMarketReward\n ? result.minimumMarketEth / LEGACY_MARKET_REWARD\n : result.minimumMarketEth / MARKET_REWARD,\n mintCount: usesLegacyMarketReward\n ? erc20zBalance / LEGACY_MARKET_REWARD\n : erc20zBalance / MARKET_REWARD,\n };\n}\n","import {\n PremintClient,\n getDataFromPremintReceipt,\n} from \"./premint/premint-client\";\nimport { Create1155Client } from \"./create/create-client\";\nimport { MintClient } from \"./mint/mint-client\";\nimport { ClientConfig } from \"./utils\";\nimport { IPremintAPI, PremintAPIClient } from \"./premint/premint-api-client\";\nimport { SubgraphMintGetter } from \"./mint/subgraph-mint-getter\";\nimport { IOnchainMintGetter } from \"./mint/types\";\nimport {\n IContractGetter,\n SubgraphContractGetter,\n} from \"./create/contract-getter\";\nimport { RewardsClient } from \"./rewards/rewards-client\";\nimport {\n IRewardsGetter,\n SubgraphRewardsGetter,\n} from \"./rewards/subgraph-rewards-getter\";\nimport { SecondaryClient } from \"./secondary/secondary-client\";\n\nexport type CreatorClient = {\n deletePremint: PremintClient[\"deletePremint\"];\n create1155: Create1155Client[\"createNew1155\"];\n create1155OnExistingContract: Create1155Client[\"createNew1155OnExistingContract\"];\n withdrawRewards: RewardsClient[\"withdrawRewards\"];\n getRewardsBalances: RewardsClient[\"getRewardsBalances\"];\n};\n\nexport type CollectorClient = {\n getPremint: PremintClient[\"getPremint\"];\n getCollectDataFromPremintReceipt: PremintClient[\"getDataFromPremintReceipt\"];\n mint: MintClient[\"mint\"];\n getMintCosts: MintClient[\"getMintCosts\"];\n getToken: MintClient[\"get\"];\n getTokensOfContract: MintClient[\"getOfContract\"];\n buy1155OnSecondary: SecondaryClient[\"buy1155OnSecondary\"];\n sell1155OnSecondary: SecondaryClient[\"sell1155OnSecondary\"];\n getSecondaryInfo: SecondaryClient[\"getSecondaryInfo\"];\n};\n\nexport type CreatorClientConfig = ClientConfig & {\n /** API for submitting and getting premints. Defaults to the Zora Premint API */\n premintApi?: IPremintAPI;\n contractGetter?: IContractGetter;\n rewardsGetter?: IRewardsGetter;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `createCreatorClient().create1155()`, use `create1155()`\n * Import the functions you need directly from their respective modules:\n * import { create1155 } from '@zoralabs/protocol-sdk'\n *\n * @param clientConfig - Configuration for the client {@link CreatorClientConfig}\n * @returns CreatorClient {@link CreatorClient}\n * */\nexport function createCreatorClient(\n clientConfig: CreatorClientConfig,\n): CreatorClient {\n const premintClient = new PremintClient({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n premintApi:\n clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId),\n });\n\n const create1155CreatorClient = new Create1155Client({\n publicClient: clientConfig.publicClient,\n contractGetter:\n clientConfig.contractGetter ||\n new SubgraphContractGetter(clientConfig.chainId),\n });\n\n const rewardsClient = new RewardsClient({\n publicClient: clientConfig.publicClient,\n rewardsGetter:\n clientConfig.rewardsGetter ||\n new SubgraphRewardsGetter(clientConfig.chainId),\n });\n\n return {\n deletePremint: (p) => premintClient.deletePremint(p),\n create1155: (p) => create1155CreatorClient.createNew1155(p),\n create1155OnExistingContract: (p) =>\n create1155CreatorClient.createNew1155OnExistingContract(p),\n getRewardsBalances: (p) => rewardsClient.getRewardsBalances(p),\n withdrawRewards: (p) => rewardsClient.withdrawRewards(p),\n };\n}\n\nexport type CollectorClientConfig = ClientConfig & {\n /** API for getting premints. Defaults to the Zora Premint API */\n premintGetter?: IPremintAPI;\n /** API for getting onchain mints. Defaults to the Zora Creator Subgraph */\n mintGetter?: IOnchainMintGetter;\n};\n\n/**\n * @deprecated Please use functions directly without creating a client.\n * Example: Instead of `createCollectorClient().mint()`, use `mint()`\n * Import the functions you need directly from their respective modules:\n * import { mint } from '@zoralabs/protocol-sdk'\n *\n * @param clientConfig - Configuration for the client {@link CollectorClientConfig}\n * @returns CollectorClient {@link CollectorClient}\n */\nexport function createCollectorClient(\n params: CollectorClientConfig,\n): CollectorClient {\n const premintGetterToUse =\n params.premintGetter || new PremintAPIClient(params.chainId);\n const mintGetterToUse =\n params.mintGetter || new SubgraphMintGetter(params.chainId);\n const mintClient = new MintClient({\n publicClient: params.publicClient,\n premintGetter: premintGetterToUse,\n mintGetter: mintGetterToUse,\n });\n const secondaryClient = new SecondaryClient({\n publicClient: params.publicClient,\n });\n\n return {\n getPremint: (p) =>\n premintGetterToUse.get({\n collectionAddress: p.address,\n uid: p.uid,\n }),\n getCollectDataFromPremintReceipt: (p) =>\n getDataFromPremintReceipt(p, params.chainId),\n getToken: (p) => mintClient.get(p),\n getTokensOfContract: (p) => mintClient.getOfContract(p),\n mint: (p) => mintClient.mint(p),\n getMintCosts: (p) => mintClient.getMintCosts(p),\n buy1155OnSecondary: (p) => secondaryClient.buy1155OnSecondary(p),\n sell1155OnSecondary: (p) => secondaryClient.sell1155OnSecondary(p),\n getSecondaryInfo: (p) => secondaryClient.getSecondaryInfo(p),\n };\n}\n","export type ArweaveURL = `ar://${string}`;\n\nexport function isArweaveURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ar://\") : false;\n}\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n // Build the character lookup table:\n const codes: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import { CID } from \"multiformats/cid\";\n\nexport type IPFSUrl = `ipfs://${string}`;\n\nexport function isCID(str: string | null | undefined): boolean {\n if (!str) return false;\n\n try {\n CID.parse(str);\n return true;\n } catch (e) {\n if (/^(bafy|Qm)/.test(str)) return true;\n return false;\n }\n}\n\nexport function normalizeIPFSUrl(\n url: string | null | undefined,\n): IPFSUrl | null {\n if (!url || typeof url !== \"string\") return null;\n\n // Handle urls wrapped in quotes\n url = url.replace(/\"/g, \"\");\n\n // Check if already a normalized IPFS url\n if (isNormalizedIPFSURL(url)) return url as IPFSUrl;\n\n // Check if url is a CID string\n if (isCID(url)) return `ipfs://${url}`;\n\n // If url is not either an ipfs gateway or protocol url\n if (!isIPFSUrl(url)) return null;\n\n // If url is already a gateway url, parse and normalize\n if (isGatewayIPFSUrl(url)) {\n // Replace leading double-slashes and parse URL\n const parsed = new URL(url.replace(/^\\/\\//, \"http://\"));\n // Remove IPFS from the URL\n // http://gateway/ipfs/<CID>?x=y#z -> http://gateway/<CID>?x=y#z\n parsed.pathname = parsed.pathname.replace(/^\\/ipfs\\//, \"\");\n // Remove the protocol and host from the URL\n // http://gateway/<CID>?x=y#z -> <CID>?x=y#z\n const cid = parsed\n .toString()\n .replace(`${parsed.protocol}//${parsed.host}/`, \"\");\n // Prepend ipfs protocol\n return `ipfs://${cid}`;\n }\n\n return null;\n}\n\nfunction isNormalizedIPFSURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ipfs://\") : false;\n}\n\nfunction isGatewayIPFSUrl(url: string | null | undefined): boolean {\n if (url && typeof url === \"string\") {\n try {\n const parsed = new URL(url.replace(/^\"|'(.*)\"|'$/, \"$1\"));\n return (\n !isNormalizedIPFSURL(url) &&\n parsed &&\n parsed.pathname.startsWith(\"/ipfs/\")\n );\n } catch {\n return false;\n }\n }\n\n return false;\n}\n\nfunction isIPFSUrl(url: string | null | undefined): boolean {\n return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;\n}\n\nexport function isNormalizeableIPFSUrl(\n url: string | null | undefined,\n): boolean {\n return url ? isIPFSUrl(url) || isCID(url) : false;\n}\n","import { isArweaveURL } from \"./arweave\";\nimport { isNormalizeableIPFSUrl, normalizeIPFSUrl } from \"./ipfs\";\n\nconst IPFS_GATEWAY = \"https://magic.decentralized-content.com\";\n\nconst ARWEAVE_GATEWAY = \"https://arweave.net\";\n\nexport function arweaveGatewayUrl(normalizedArweaveUrl: string | null) {\n if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== \"string\")\n return null;\n return normalizedArweaveUrl.replace(\"ar://\", `${ARWEAVE_GATEWAY}/`);\n}\n\nexport function ipfsGatewayUrl(url: string | null) {\n if (!url || typeof url !== \"string\") return null;\n const normalizedIPFSUrl = normalizeIPFSUrl(url);\n if (normalizedIPFSUrl) {\n return normalizedIPFSUrl.replace(\"ipfs://\", `${IPFS_GATEWAY}/ipfs/`);\n }\n return null;\n}\n\nexport function getFetchableUrl(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== \"string\") return null;\n\n // Prevent fetching from insecure URLs\n if (uri.startsWith(\"http://\")) return null;\n\n // If it is an IPFS HTTP or ipfs:// url\n if (isNormalizeableIPFSUrl(uri)) {\n // Return a fetchable gateway url\n return ipfsGatewayUrl(uri);\n }\n\n // If it is a ar:// url\n if (isArweaveURL(uri)) {\n // Return a fetchable gateway url\n return arweaveGatewayUrl(uri);\n }\n\n // If it is already a url (or blob or data-uri)\n if (/^(https|data|blob):/.test(uri)) {\n // Return the URI\n return uri;\n }\n\n return null;\n}\n","// text\nconst HTML = \"text/html\";\nconst MARKDOWN = \"text/markdown\";\nconst MARKDOWN_UTF8 = \"text/markdown; charset=utf-8\";\nconst TEXT_PLAIN_UTF8 = \"text/plain; charset=utf-8\";\nexport const TEXT_PLAIN = \"text/plain\";\nconst CSV = \"text/csv\";\nconst NUMBERS = \".numbers\";\nconst EXCEL = \".xlsx\";\nconst PDF = \"application/pdf\";\n\n// image\nconst JPG = \"image/jpg\";\nconst JPEG = \"image/jpeg\";\nconst PNG = \"image/png\";\nconst WEBP = \"image/webp\";\nconst SVG = \"image/svg+xml\";\nconst TIFF = \"image/tiff\";\nconst GIF = \"image/gif\";\n\nexport const isImage = (mimeType: string | null | undefined) => {\n if (!mimeType) return false;\n return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);\n};\n\nexport enum MediaType {\n CSV = \"CSV\",\n NUMBERS = \"NUMBERS\",\n EXCEL = \"EXCEL\",\n IMAGE = \"IMAGE\",\n VIDEO = \"VIDEO\",\n AUDIO = \"AUDIO\",\n TIFF = \"TIFF\",\n TEXT = \"TEXT\",\n PDF = \"PDF\",\n MODEL = \"MODEL\",\n HTML = \"HTML\",\n ZIP = \"ZIP\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const DEFAULT_THUMBNAIL_CID_HASHES: { [key: string]: string } = {\n [MediaType.AUDIO]:\n \"bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4\",\n [MediaType.VIDEO]:\n \"bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu\",\n [MediaType.HTML]:\n \"bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq\",\n [MediaType.ZIP]:\n \"bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq\", // assuming all zip files are html directories\n [MediaType.TEXT]:\n \"bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q\",\n default: \"bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4\",\n};\n\n// video\nconst MP4 = \"video/mp4\";\nconst QUICKTIME = \"video/quicktime\";\nconst M4V = \"video/x-m4v\";\nconst WEBM = \"video/webm\";\n\n// audio\nconst M4A = \"audio/x-m4a\";\nconst MPEG = \"audio/mpeg\";\nconst MP3 = \"audio/mp3\";\nconst WAV = \"audio/wav\";\nconst VND_WAV = \"audio/vnd.wav\";\nconst VND_WAVE = \"audio/vnd.wave\";\nconst WAVE = \"audio/wave\";\nconst X_WAV = \"audio/x-wav\";\nconst AIFF = \"audio/aiff\";\n\n// 3D\nconst GLTF = \"model/gltf+json\";\nconst GLB = \"model/gltf-binary\";\n// File extensions, as some files return '' as the mimetype\nconst GLTF_EXT = \".gltf\";\nconst GLB_EXT = \".glb\";\n\n// application\nexport const JSON_MIME_TYPE = \"application/json\";\nconst ZIP = \"application/zip\";\n\nconst mimeToMediaType = {\n [HTML]: MediaType.HTML,\n [JPG]: MediaType.IMAGE,\n [JPEG]: MediaType.IMAGE,\n [PNG]: MediaType.IMAGE,\n [WEBP]: MediaType.IMAGE,\n [SVG]: MediaType.IMAGE,\n [TIFF]: MediaType.TIFF,\n [GIF]: MediaType.IMAGE,\n [MP4]: MediaType.VIDEO,\n [WEBM]: MediaType.VIDEO,\n [QUICKTIME]: MediaType.VIDEO,\n [M4V]: MediaType.VIDEO,\n [MPEG]: MediaType.AUDIO,\n [MP3]: MediaType.AUDIO,\n [M4A]: MediaType.AUDIO,\n [VND_WAV]: MediaType.AUDIO,\n [VND_WAVE]: MediaType.AUDIO,\n [WAV]: MediaType.AUDIO,\n [WAVE]: MediaType.AUDIO,\n [X_WAV]: MediaType.AUDIO,\n [AIFF]: MediaType.AUDIO,\n [TEXT_PLAIN]: MediaType.TEXT,\n [TEXT_PLAIN_UTF8]: MediaType.TEXT,\n [MARKDOWN]: MediaType.TEXT,\n [MARKDOWN_UTF8]: MediaType.TEXT,\n [CSV]: MediaType.CSV,\n [NUMBERS]: MediaType.NUMBERS,\n [EXCEL]: MediaType.EXCEL,\n [PDF]: MediaType.PDF,\n [ZIP]: MediaType.ZIP,\n [GLTF]: MediaType.MODEL,\n [GLTF_EXT]: MediaType.MODEL,\n [GLB]: MediaType.MODEL,\n // GLTF returns 'application/json' as the mimetype,\n // and as the only JSON-encoded media we currently support,\n // we assume that if the mimetype is JSON, it's a GLTF\n [JSON_MIME_TYPE]: MediaType.MODEL,\n [GLB_EXT]: MediaType.MODEL,\n} as const;\n\n/** Return a MediaType for the given mime type. If mime type is unknown you can provide a filename as a fallback, where the type will be guessed based on extension. */\nexport function mimeTypeToMedia(mimeType?: string | null) {\n if (!mimeType) return MediaType.UNKNOWN;\n\n return (\n mimeToMediaType[mimeType as keyof typeof mimeToMediaType] ||\n MediaType.UNKNOWN\n );\n}\n\nexport async function getMimeType(uri?: string) {\n if (!uri) return uri;\n\n const res = await fetch(uri, { method: \"HEAD\" });\n let mimeType = res.headers.get(\"content-type\");\n return mimeType;\n}\n","import { getFetchableUrl } from \"./gateway\";\nimport {\n DEFAULT_THUMBNAIL_CID_HASHES,\n TEXT_PLAIN,\n getMimeType,\n isImage,\n mimeTypeToMedia,\n} from \"./mimeTypes\";\nimport {\n MakeMediaMetadataParams,\n MakeTextMetadataParams,\n TokenMetadataJson,\n} from \"./types\";\n\n/**\n * Takes properties for a text based nft and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeTextMetadataParams}\n */\nexport const makeTextTokenMetadata = (\n parameters: MakeTextMetadataParams,\n): TokenMetadataJson => {\n const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;\n\n const content = textFileUrl\n ? {\n mime: TEXT_PLAIN,\n uri: textFileUrl,\n }\n : null;\n\n const image = thumbnailUrl;\n const animation_url = textFileUrl;\n\n return {\n name,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\n/**\n * Takes properties for a media based nft (video, image, etc) and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeMediaMetadataParams}\n */\nexport const makeMediaTokenMetadata = async ({\n name,\n description,\n attributes = [],\n mediaUrl,\n thumbnailUrl,\n}: MakeMediaMetadataParams): Promise<TokenMetadataJson> => {\n const contentUrl = mediaUrl;\n const fetchableContentUrl = getFetchableUrl(contentUrl);\n\n if (!fetchableContentUrl)\n throw new Error(`Content url (${contentUrl}) is not fetchable`);\n\n const mimeType = await getMimeType(fetchableContentUrl);\n const mediaType = mimeTypeToMedia(mimeType);\n\n let image: string | undefined = undefined;\n let animation_url: string | null = null;\n\n // If the media is an image, just set the image field\n // Otherwise we require a thumbnail, set image and animation_url\n if (isImage(mimeType)) {\n image = contentUrl;\n } else {\n image = thumbnailUrl;\n animation_url = mediaUrl;\n }\n\n // If no image determined, use a fallback placeholder\n if (!image)\n image = `ipfs://${\n DEFAULT_THUMBNAIL_CID_HASHES[mediaType] ||\n DEFAULT_THUMBNAIL_CID_HASHES.default\n }`;\n\n const content = contentUrl\n ? {\n mime: mimeType || \"application/octet-stream\",\n uri: contentUrl,\n }\n : null;\n\n return {\n name,\n description,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\nexport async function fetchTokenMetadata(tokenMetadataURI: string) {\n const fetchableUrl = getFetchableUrl(tokenMetadataURI);\n\n if (!fetchableUrl) {\n throw new Error(`Invalid token metadata URI: ${tokenMetadataURI}`);\n }\n\n const json = (await (await fetch(fetchableUrl)).json()) as\n | TokenMetadataJson\n | undefined;\n\n if (!json) {\n throw new Error(`Failed to fetch metadata from ${fetchableUrl}`);\n }\n\n return json;\n}\n","import { TextMetadataFiles } from \"./types\";\n\nconst CHAR_LIMIT = 1111;\n\nconst wrapText = ({\n ctx,\n text,\n x,\n y,\n maxWidth,\n lineHeight,\n}: {\n ctx: CanvasRenderingContext2D;\n text: string;\n x: number;\n y: number;\n maxWidth: number;\n lineHeight: number;\n}) => {\n // Split text into words\n let words = text.replaceAll(\"\\n\", \" \\n \").split(/ +/);\n let line = \"\"; // This will store the text of the current line\n let testLine = \"\"; // This will store the text when we add a word, to test if it's too long\n let lineArray = []; // This is an array of lines, which the function will return\n\n for (var n = 0; n < words.length; n++) {\n // Measure text sizing\n testLine += `${words[n]} `;\n let metrics = ctx.measureText(testLine);\n let testWidth = metrics.width;\n // If the width of this test line is more than the max width\n if (words[n]?.includes(\"\\n\") || (testWidth > maxWidth && n > 0)) {\n // Then the line is finished, push the current line into \"lineArray\"\n lineArray.push({ text: line, x, y });\n // Start a new line\n y += lineHeight;\n // Update line and test line to use this word as the first word on the next line\n // If it's a newline, then don't add a space\n if (words[n]?.includes(\"\\n\")) {\n line = ``;\n testLine = ``;\n } else {\n line = `${words[n]} `;\n testLine = `${words[n]} `;\n }\n } else {\n // Test line is less than the max width, add the word to the current line\n line += `${words[n]} `;\n }\n // Handle a single line...\n if (n === words.length - 1) {\n lineArray.push({ text: line, x, y });\n }\n }\n return lineArray;\n};\n\nasync function generateTextPreview(text: string): Promise<File> {\n // Trim the text to a reasonable max length. Prevent crashes if the user pastes a gigantic string\n const trimmedText = text.trim().slice(0, CHAR_LIMIT);\n\n const [width, height] = [500, 500];\n const padding = 20;\n const dpr = 2;\n\n const fontFamily = \"Inter\";\n const [fontSize, lineHeight] = [16, 24];\n const [textColor, backgroundColor] = [\"black\", \"white\"];\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return reject(new Error(\"Could not create canvas context\"));\n }\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width * dpr, width * dpr);\n ctx.fillStyle = textColor;\n ctx.font = `${fontSize * dpr}px ${fontFamily}`;\n const wrapped = wrapText({\n ctx,\n text: trimmedText,\n x: padding * dpr,\n y: fontSize * dpr + padding * dpr,\n maxWidth: width * dpr - padding * 2 * dpr,\n lineHeight: lineHeight * dpr,\n });\n wrapped.forEach((line) => ctx.fillText(line.text, line.x, line.y));\n canvas.toBlob((blob) => {\n if (!blob) {\n return reject(new Error(\"Could not create blob\"));\n }\n resolve(new File([blob], \"thumbnail.png\", { type: \"image/png\" }));\n });\n });\n}\n\nfunction generateTextTitle(text: string) {\n const firstLine = text.split(\"\\n\")[0]!;\n const firstSentence = firstLine?.split(\". \")[0]!;\n\n if (firstSentence.length > 50) {\n return firstSentence.slice(0, 50) + \"...\";\n }\n\n return firstSentence;\n}\n\nconst toTextFile = (text: string) =>\n new File([text], \"Untitled.txt\", { type: \"text/plain\" });\n\n/** For text nfts, this will generate files that are needed for the metadata json, including the txt.file containing the text, and a thumbnail image containing a preview of the text\n */\nexport async function generateTextNftMetadataFiles(\n text: string,\n): Promise<TextMetadataFiles> {\n const name = generateTextTitle(text);\n const textFile = toTextFile(text);\n const thumbnailFile = await generateTextPreview(text);\n\n return {\n name,\n mediaUrlFile: textFile,\n thumbnailFile,\n };\n}\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"src/apis/http-api-base\";\nimport { Address, decodeAbiParameters, encodeAbiParameters, Hex } from \"viem\";\nimport { AllowList } from \"./types\";\n\ntype AllowListCreateParameters = {\n unhashedLeaves: Hex[];\n leafTypeDescriptor: string[];\n packedEncoding: boolean;\n};\n\ntype AllowListCreateResponse = {\n merkleRoot: Hex;\n};\n\ntype LanyardResponse = {\n proof: Hex[];\n unhashedLeaf: Hex;\n};\n\nconst ALLOWLIST_ABI_PARAMETERS = [\n { type: \"address\", name: \"user\" },\n { type: \"uint256\", name: \"maxCanMint\" },\n { type: \"uint256\", name: \"price\" },\n];\n\nconst ALLOW_LIST_API_BASE = \"https://lanyard.org/api/v1/\";\ntype AllowlistEntry = {\n user: Address;\n maxCanMint: number;\n price: bigint;\n priceDecimal: number;\n proof: Hex[];\n};\n\nfunction getZoraEntry(\n lanyardResponse: LanyardResponse | undefined,\n root: string | undefined,\n): AllowlistEntry | undefined {\n if (!lanyardResponse || !root) {\n return;\n }\n\n try {\n const [user, maxCanMint, price] = decodeAbiParameters(\n ALLOWLIST_ABI_PARAMETERS,\n lanyardResponse.unhashedLeaf,\n );\n\n return {\n user: user as Address,\n maxCanMint: Number(maxCanMint),\n price: price as bigint,\n // This won't realistically overflow.\n priceDecimal: Number(price),\n proof: lanyardResponse.proof,\n };\n } catch (e: any) {\n console.error(e);\n // Silently error here because the format is unexpected\n return;\n }\n}\n\nexport const createAllowList = async ({\n allowList,\n httpClient = defaultHttpClient,\n baseUrl = ALLOW_LIST_API_BASE,\n}: {\n allowList: AllowList;\n httpClient?: IHttpClient;\n baseUrl?: string;\n}) => {\n const { post, retries } = httpClient;\n\n const data: AllowListCreateParameters = {\n unhashedLeaves: allowList.entries.map((entry) =>\n encodeAbiParameters(ALLOWLIST_ABI_PARAMETERS, [\n entry.user,\n entry.maxCanMint,\n entry.price,\n ]),\n ),\n leafTypeDescriptor: [\"address\", \"uint256\", \"uint256\"],\n packedEncoding: false,\n };\n\n return (\n await retries(() => post<AllowListCreateResponse>(`${baseUrl}tree`, data))\n ).merkleRoot;\n};\n\nexport const getAllowListEntry = async ({\n merkleRoot,\n address,\n httpClient = defaultHttpClient,\n baseUrl = ALLOW_LIST_API_BASE,\n}: {\n merkleRoot: string;\n httpClient?: IHttpClient;\n address: string;\n baseUrl?: string;\n}) => {\n const { retries, get } = httpClient;\n\n const response = await retries(() =>\n get<LanyardResponse>(\n `${baseUrl}proof?address=${address}&root=${merkleRoot}`,\n ),\n );\n\n const allowListEntry = getZoraEntry(response, merkleRoot);\n\n return {\n accessAllowed: allowListEntry && allowListEntry?.proof?.length,\n allowListEntry,\n };\n};\n\nexport interface IAllowListClient {\n createAllowList: typeof createAllowList;\n getAllowListEntry: typeof getAllowListEntry;\n}\n\nexport const defaultAllowListClient = (): IAllowListClient => ({\n createAllowList,\n getAllowListEntry,\n});\n"],"mappings":"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","names":["src","base","gte","gte","coerce","cache","from","require_valid","gte","require_semver","gte","coerce","zeroAddress","zoraCreator1155PremintExecutorImplABI","parseEther","parseEther","PremintConfigVersion","zoraCreator1155PremintExecutorImplABI","zeroAddress","PremintConfigVersion","PremintConfigVersion","post","retries","get","httpClient","httpClient","retries","post","mint","zeroAddress","zeroAddress","zeroAddress","zeroAddress","isPrimaryMintActive","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","zoraCreator1155ImplABI","decodeEventLog","zoraCreator1155ImplABI","semver","zoraCreator1155ImplABI","encodeFunctionData","zeroAddress","parseEther","erc20MinterABI","zoraCreator1155ImplABI","zoraTimedSaleStrategyABI","isAllowList","isErc20","isFixedPrice","zeroAddress","encodeFunctionData","zoraCreator1155ImplABI","parseEther","zeroAddress","parseEther","zeroAddress","retries","responseData","decodeEventLog","zoraCreator1155ImplABI","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","encodeFunctionData","zeroAddress","encodeFunctionData","zeroAddress","encodeFunctionData","parseAbi","wethAddress","erc20z","encodeFunctionData","encodeFunctionData","parseAbi","encodeAbiParameters","zoraCreator1155ImplABI","callerAndCommenterABI","callerAndCommenterAddress","mainnet","parseAbi","mainnet","mainnet","sepolia","zora","zoraSepolia","base","baseSepolia","optimism","arbitrum","mainnet","sepolia","zora","zoraSepolia","base","baseSepolia","optimism","arbitrum","parseEther","zoraTimedSaleStrategyABI","zoraTimedSaleStrategyAddress","callerAndCommenterABI","callerAndCommenterAddress","zoraCreator1155ImplABI","encodeAbiParameters","coerce","base","encode","length","i","j","decode","encode","decode","coerce","encode","decode","decode","decode","coerce","equals","base","baseCache","equals","base","decode","coerce","length","cache","cid","encodeAbiParameters","httpClient","post","retries","encodeAbiParameters"]}