@bananapus/nana-sdk-core 1.3.0 → 1.4.1

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 (291) hide show
  1. package/dist/cjs/utils/index.d.ts +1 -0
  2. package/dist/cjs/utils/index.d.ts.map +1 -1
  3. package/dist/cjs/utils/index.js +1 -0
  4. package/dist/cjs/utils/index.js.map +1 -1
  5. package/dist/cjs/utils/ipfs.d.ts +33 -1
  6. package/dist/cjs/utils/ipfs.d.ts.map +1 -1
  7. package/dist/cjs/utils/ipfs.js +212 -8
  8. package/dist/cjs/utils/ipfs.js.map +1 -1
  9. package/dist/cjs/utils/token.d.ts +2 -2
  10. package/dist/cjs/utils/token.d.ts.map +1 -1
  11. package/dist/cjs/utils/token.js +30 -9
  12. package/dist/cjs/utils/token.js.map +1 -1
  13. package/dist/cjs/v6/index.d.ts +2 -0
  14. package/dist/cjs/v6/index.d.ts.map +1 -1
  15. package/dist/cjs/v6/index.js +2 -0
  16. package/dist/cjs/v6/index.js.map +1 -1
  17. package/dist/cjs/v6/launch.d.ts +23 -2
  18. package/dist/cjs/v6/launch.d.ts.map +1 -1
  19. package/dist/cjs/v6/launch.js +40 -1
  20. package/dist/cjs/v6/launch.js.map +1 -1
  21. package/dist/cjs/v6/nft.d.ts +67 -0
  22. package/dist/cjs/v6/nft.d.ts.map +1 -1
  23. package/dist/cjs/v6/nft.js +192 -2
  24. package/dist/cjs/v6/nft.js.map +1 -1
  25. package/dist/cjs/v6/permissions.d.ts +21 -0
  26. package/dist/cjs/v6/permissions.d.ts.map +1 -1
  27. package/dist/cjs/v6/permissions.js +44 -1
  28. package/dist/cjs/v6/permissions.js.map +1 -1
  29. package/dist/cjs/v6/projectPayers.d.ts +178 -0
  30. package/dist/cjs/v6/projectPayers.d.ts.map +1 -0
  31. package/dist/cjs/v6/projectPayers.js +108 -0
  32. package/dist/cjs/v6/projectPayers.js.map +1 -0
  33. package/dist/cjs/v6/revnets.d.ts +3 -2
  34. package/dist/cjs/v6/revnets.d.ts.map +1 -1
  35. package/dist/cjs/v6/revnets.js +3 -2
  36. package/dist/cjs/v6/revnets.js.map +1 -1
  37. package/dist/cjs/v6/rulesets.d.ts +42 -0
  38. package/dist/cjs/v6/rulesets.d.ts.map +1 -1
  39. package/dist/cjs/v6/rulesets.js +87 -0
  40. package/dist/cjs/v6/rulesets.js.map +1 -1
  41. package/dist/cjs/v6/suckers.d.ts +740 -2
  42. package/dist/cjs/v6/suckers.d.ts.map +1 -1
  43. package/dist/cjs/v6/suckers.js +647 -8
  44. package/dist/cjs/v6/suckers.js.map +1 -1
  45. package/dist/cjs/v6/uniswapV4.d.ts +82 -0
  46. package/dist/cjs/v6/uniswapV4.d.ts.map +1 -0
  47. package/dist/cjs/v6/uniswapV4.js +336 -0
  48. package/dist/cjs/v6/uniswapV4.js.map +1 -0
  49. package/dist/esm/utils/index.d.ts +1 -0
  50. package/dist/esm/utils/index.d.ts.map +1 -1
  51. package/dist/esm/utils/index.js +1 -0
  52. package/dist/esm/utils/index.js.map +1 -1
  53. package/dist/esm/utils/ipfs.d.ts +33 -1
  54. package/dist/esm/utils/ipfs.d.ts.map +1 -1
  55. package/dist/esm/utils/ipfs.js +204 -8
  56. package/dist/esm/utils/ipfs.js.map +1 -1
  57. package/dist/esm/utils/token.d.ts +2 -2
  58. package/dist/esm/utils/token.d.ts.map +1 -1
  59. package/dist/esm/utils/token.js +30 -9
  60. package/dist/esm/utils/token.js.map +1 -1
  61. package/dist/esm/v6/index.d.ts +2 -0
  62. package/dist/esm/v6/index.d.ts.map +1 -1
  63. package/dist/esm/v6/index.js +2 -0
  64. package/dist/esm/v6/index.js.map +1 -1
  65. package/dist/esm/v6/launch.d.ts +23 -2
  66. package/dist/esm/v6/launch.d.ts.map +1 -1
  67. package/dist/esm/v6/launch.js +39 -2
  68. package/dist/esm/v6/launch.js.map +1 -1
  69. package/dist/esm/v6/nft.d.ts +67 -0
  70. package/dist/esm/v6/nft.d.ts.map +1 -1
  71. package/dist/esm/v6/nft.js +183 -1
  72. package/dist/esm/v6/nft.js.map +1 -1
  73. package/dist/esm/v6/permissions.d.ts +21 -0
  74. package/dist/esm/v6/permissions.d.ts.map +1 -1
  75. package/dist/esm/v6/permissions.js +40 -0
  76. package/dist/esm/v6/permissions.js.map +1 -1
  77. package/dist/esm/v6/projectPayers.d.ts +178 -0
  78. package/dist/esm/v6/projectPayers.d.ts.map +1 -0
  79. package/dist/esm/v6/projectPayers.js +101 -0
  80. package/dist/esm/v6/projectPayers.js.map +1 -0
  81. package/dist/esm/v6/revnets.d.ts +3 -2
  82. package/dist/esm/v6/revnets.d.ts.map +1 -1
  83. package/dist/esm/v6/revnets.js +3 -2
  84. package/dist/esm/v6/revnets.js.map +1 -1
  85. package/dist/esm/v6/rulesets.d.ts +42 -0
  86. package/dist/esm/v6/rulesets.d.ts.map +1 -1
  87. package/dist/esm/v6/rulesets.js +83 -0
  88. package/dist/esm/v6/rulesets.js.map +1 -1
  89. package/dist/esm/v6/suckers.d.ts +740 -2
  90. package/dist/esm/v6/suckers.d.ts.map +1 -1
  91. package/dist/esm/v6/suckers.js +630 -8
  92. package/dist/esm/v6/suckers.js.map +1 -1
  93. package/dist/esm/v6/uniswapV4.d.ts +82 -0
  94. package/dist/esm/v6/uniswapV4.d.ts.map +1 -0
  95. package/dist/esm/v6/uniswapV4.js +318 -0
  96. package/dist/esm/v6/uniswapV4.js.map +1 -0
  97. package/package.json +17 -10
  98. package/dist/cjs/utils/data.test.d.ts +0 -2
  99. package/dist/cjs/utils/data.test.d.ts.map +0 -1
  100. package/dist/cjs/utils/data.test.js +0 -27
  101. package/dist/cjs/utils/data.test.js.map +0 -1
  102. package/dist/cjs/utils/deploy.test.d.ts +0 -2
  103. package/dist/cjs/utils/deploy.test.d.ts.map +0 -1
  104. package/dist/cjs/utils/deploy.test.js +0 -65
  105. package/dist/cjs/utils/deploy.test.js.map +0 -1
  106. package/dist/cjs/utils/fee.test.d.ts +0 -2
  107. package/dist/cjs/utils/fee.test.d.ts.map +0 -1
  108. package/dist/cjs/utils/fee.test.js +0 -11
  109. package/dist/cjs/utils/fee.test.js.map +0 -1
  110. package/dist/cjs/utils/format.test.d.ts +0 -2
  111. package/dist/cjs/utils/format.test.d.ts.map +0 -1
  112. package/dist/cjs/utils/format.test.js +0 -27
  113. package/dist/cjs/utils/format.test.js.map +0 -1
  114. package/dist/cjs/utils/ipfs.test.d.ts +0 -2
  115. package/dist/cjs/utils/ipfs.test.d.ts.map +0 -1
  116. package/dist/cjs/utils/ipfs.test.js +0 -33
  117. package/dist/cjs/utils/ipfs.test.js.map +0 -1
  118. package/dist/cjs/utils/revnet.test.d.ts +0 -2
  119. package/dist/cjs/utils/revnet.test.d.ts.map +0 -1
  120. package/dist/cjs/utils/revnet.test.js +0 -12
  121. package/dist/cjs/utils/revnet.test.js.map +0 -1
  122. package/dist/cjs/utils/ruleset.test.d.ts +0 -2
  123. package/dist/cjs/utils/ruleset.test.d.ts.map +0 -1
  124. package/dist/cjs/utils/ruleset.test.js +0 -23
  125. package/dist/cjs/utils/ruleset.test.js.map +0 -1
  126. package/dist/cjs/utils/token.test.d.ts +0 -2
  127. package/dist/cjs/utils/token.test.d.ts.map +0 -1
  128. package/dist/cjs/utils/token.test.js +0 -40
  129. package/dist/cjs/utils/token.test.js.map +0 -1
  130. package/dist/cjs/utils/urn.test.d.ts +0 -2
  131. package/dist/cjs/utils/urn.test.d.ts.map +0 -1
  132. package/dist/cjs/utils/urn.test.js +0 -114
  133. package/dist/cjs/utils/urn.test.js.map +0 -1
  134. package/dist/cjs/v6/cashOut.test.d.ts +0 -2
  135. package/dist/cjs/v6/cashOut.test.d.ts.map +0 -1
  136. package/dist/cjs/v6/cashOut.test.js +0 -122
  137. package/dist/cjs/v6/cashOut.test.js.map +0 -1
  138. package/dist/cjs/v6/currency.test.d.ts +0 -2
  139. package/dist/cjs/v6/currency.test.d.ts.map +0 -1
  140. package/dist/cjs/v6/currency.test.js +0 -26
  141. package/dist/cjs/v6/currency.test.js.map +0 -1
  142. package/dist/cjs/v6/fees.test.d.ts +0 -2
  143. package/dist/cjs/v6/fees.test.d.ts.map +0 -1
  144. package/dist/cjs/v6/fees.test.js +0 -40
  145. package/dist/cjs/v6/fees.test.js.map +0 -1
  146. package/dist/cjs/v6/launch.test.d.ts +0 -2
  147. package/dist/cjs/v6/launch.test.d.ts.map +0 -1
  148. package/dist/cjs/v6/launch.test.js +0 -137
  149. package/dist/cjs/v6/launch.test.js.map +0 -1
  150. package/dist/cjs/v6/loans.test.d.ts +0 -2
  151. package/dist/cjs/v6/loans.test.d.ts.map +0 -1
  152. package/dist/cjs/v6/loans.test.js +0 -129
  153. package/dist/cjs/v6/loans.test.js.map +0 -1
  154. package/dist/cjs/v6/nft.test.d.ts +0 -2
  155. package/dist/cjs/v6/nft.test.d.ts.map +0 -1
  156. package/dist/cjs/v6/nft.test.js +0 -206
  157. package/dist/cjs/v6/nft.test.js.map +0 -1
  158. package/dist/cjs/v6/omnichain.test.d.ts +0 -2
  159. package/dist/cjs/v6/omnichain.test.d.ts.map +0 -1
  160. package/dist/cjs/v6/omnichain.test.js +0 -145
  161. package/dist/cjs/v6/omnichain.test.js.map +0 -1
  162. package/dist/cjs/v6/pay.test.d.ts +0 -2
  163. package/dist/cjs/v6/pay.test.d.ts.map +0 -1
  164. package/dist/cjs/v6/pay.test.js +0 -137
  165. package/dist/cjs/v6/pay.test.js.map +0 -1
  166. package/dist/cjs/v6/permissions.test.d.ts +0 -2
  167. package/dist/cjs/v6/permissions.test.d.ts.map +0 -1
  168. package/dist/cjs/v6/permissions.test.js +0 -117
  169. package/dist/cjs/v6/permissions.test.js.map +0 -1
  170. package/dist/cjs/v6/revnets.test.d.ts +0 -2
  171. package/dist/cjs/v6/revnets.test.d.ts.map +0 -1
  172. package/dist/cjs/v6/revnets.test.js +0 -233
  173. package/dist/cjs/v6/revnets.test.js.map +0 -1
  174. package/dist/cjs/v6/rulesets.test.d.ts +0 -2
  175. package/dist/cjs/v6/rulesets.test.d.ts.map +0 -1
  176. package/dist/cjs/v6/rulesets.test.js +0 -106
  177. package/dist/cjs/v6/rulesets.test.js.map +0 -1
  178. package/dist/cjs/v6/splits.test.d.ts +0 -2
  179. package/dist/cjs/v6/splits.test.d.ts.map +0 -1
  180. package/dist/cjs/v6/splits.test.js +0 -135
  181. package/dist/cjs/v6/splits.test.js.map +0 -1
  182. package/dist/cjs/v6/suckers.test.d.ts +0 -2
  183. package/dist/cjs/v6/suckers.test.d.ts.map +0 -1
  184. package/dist/cjs/v6/suckers.test.js +0 -134
  185. package/dist/cjs/v6/suckers.test.js.map +0 -1
  186. package/dist/cjs/v6/terminals.test.d.ts +0 -2
  187. package/dist/cjs/v6/terminals.test.d.ts.map +0 -1
  188. package/dist/cjs/v6/terminals.test.js +0 -59
  189. package/dist/cjs/v6/terminals.test.js.map +0 -1
  190. package/dist/cjs/v6/tokens.test.d.ts +0 -2
  191. package/dist/cjs/v6/tokens.test.d.ts.map +0 -1
  192. package/dist/cjs/v6/tokens.test.js +0 -141
  193. package/dist/cjs/v6/tokens.test.js.map +0 -1
  194. package/dist/esm/utils/data.test.d.ts +0 -2
  195. package/dist/esm/utils/data.test.d.ts.map +0 -1
  196. package/dist/esm/utils/data.test.js +0 -25
  197. package/dist/esm/utils/data.test.js.map +0 -1
  198. package/dist/esm/utils/deploy.test.d.ts +0 -2
  199. package/dist/esm/utils/deploy.test.d.ts.map +0 -1
  200. package/dist/esm/utils/deploy.test.js +0 -63
  201. package/dist/esm/utils/deploy.test.js.map +0 -1
  202. package/dist/esm/utils/fee.test.d.ts +0 -2
  203. package/dist/esm/utils/fee.test.d.ts.map +0 -1
  204. package/dist/esm/utils/fee.test.js +0 -9
  205. package/dist/esm/utils/fee.test.js.map +0 -1
  206. package/dist/esm/utils/format.test.d.ts +0 -2
  207. package/dist/esm/utils/format.test.d.ts.map +0 -1
  208. package/dist/esm/utils/format.test.js +0 -25
  209. package/dist/esm/utils/format.test.js.map +0 -1
  210. package/dist/esm/utils/ipfs.test.d.ts +0 -2
  211. package/dist/esm/utils/ipfs.test.d.ts.map +0 -1
  212. package/dist/esm/utils/ipfs.test.js +0 -28
  213. package/dist/esm/utils/ipfs.test.js.map +0 -1
  214. package/dist/esm/utils/revnet.test.d.ts +0 -2
  215. package/dist/esm/utils/revnet.test.d.ts.map +0 -1
  216. package/dist/esm/utils/revnet.test.js +0 -10
  217. package/dist/esm/utils/revnet.test.js.map +0 -1
  218. package/dist/esm/utils/ruleset.test.d.ts +0 -2
  219. package/dist/esm/utils/ruleset.test.d.ts.map +0 -1
  220. package/dist/esm/utils/ruleset.test.js +0 -21
  221. package/dist/esm/utils/ruleset.test.js.map +0 -1
  222. package/dist/esm/utils/token.test.d.ts +0 -2
  223. package/dist/esm/utils/token.test.d.ts.map +0 -1
  224. package/dist/esm/utils/token.test.js +0 -38
  225. package/dist/esm/utils/token.test.js.map +0 -1
  226. package/dist/esm/utils/urn.test.d.ts +0 -2
  227. package/dist/esm/utils/urn.test.d.ts.map +0 -1
  228. package/dist/esm/utils/urn.test.js +0 -112
  229. package/dist/esm/utils/urn.test.js.map +0 -1
  230. package/dist/esm/v6/cashOut.test.d.ts +0 -2
  231. package/dist/esm/v6/cashOut.test.d.ts.map +0 -1
  232. package/dist/esm/v6/cashOut.test.js +0 -120
  233. package/dist/esm/v6/cashOut.test.js.map +0 -1
  234. package/dist/esm/v6/currency.test.d.ts +0 -2
  235. package/dist/esm/v6/currency.test.d.ts.map +0 -1
  236. package/dist/esm/v6/currency.test.js +0 -24
  237. package/dist/esm/v6/currency.test.js.map +0 -1
  238. package/dist/esm/v6/fees.test.d.ts +0 -2
  239. package/dist/esm/v6/fees.test.d.ts.map +0 -1
  240. package/dist/esm/v6/fees.test.js +0 -38
  241. package/dist/esm/v6/fees.test.js.map +0 -1
  242. package/dist/esm/v6/launch.test.d.ts +0 -2
  243. package/dist/esm/v6/launch.test.d.ts.map +0 -1
  244. package/dist/esm/v6/launch.test.js +0 -135
  245. package/dist/esm/v6/launch.test.js.map +0 -1
  246. package/dist/esm/v6/loans.test.d.ts +0 -2
  247. package/dist/esm/v6/loans.test.d.ts.map +0 -1
  248. package/dist/esm/v6/loans.test.js +0 -127
  249. package/dist/esm/v6/loans.test.js.map +0 -1
  250. package/dist/esm/v6/nft.test.d.ts +0 -2
  251. package/dist/esm/v6/nft.test.d.ts.map +0 -1
  252. package/dist/esm/v6/nft.test.js +0 -204
  253. package/dist/esm/v6/nft.test.js.map +0 -1
  254. package/dist/esm/v6/omnichain.test.d.ts +0 -2
  255. package/dist/esm/v6/omnichain.test.d.ts.map +0 -1
  256. package/dist/esm/v6/omnichain.test.js +0 -143
  257. package/dist/esm/v6/omnichain.test.js.map +0 -1
  258. package/dist/esm/v6/pay.test.d.ts +0 -2
  259. package/dist/esm/v6/pay.test.d.ts.map +0 -1
  260. package/dist/esm/v6/pay.test.js +0 -135
  261. package/dist/esm/v6/pay.test.js.map +0 -1
  262. package/dist/esm/v6/permissions.test.d.ts +0 -2
  263. package/dist/esm/v6/permissions.test.d.ts.map +0 -1
  264. package/dist/esm/v6/permissions.test.js +0 -115
  265. package/dist/esm/v6/permissions.test.js.map +0 -1
  266. package/dist/esm/v6/revnets.test.d.ts +0 -2
  267. package/dist/esm/v6/revnets.test.d.ts.map +0 -1
  268. package/dist/esm/v6/revnets.test.js +0 -231
  269. package/dist/esm/v6/revnets.test.js.map +0 -1
  270. package/dist/esm/v6/rulesets.test.d.ts +0 -2
  271. package/dist/esm/v6/rulesets.test.d.ts.map +0 -1
  272. package/dist/esm/v6/rulesets.test.js +0 -104
  273. package/dist/esm/v6/rulesets.test.js.map +0 -1
  274. package/dist/esm/v6/splits.test.d.ts +0 -2
  275. package/dist/esm/v6/splits.test.d.ts.map +0 -1
  276. package/dist/esm/v6/splits.test.js +0 -133
  277. package/dist/esm/v6/splits.test.js.map +0 -1
  278. package/dist/esm/v6/suckers.test.d.ts +0 -2
  279. package/dist/esm/v6/suckers.test.d.ts.map +0 -1
  280. package/dist/esm/v6/suckers.test.js +0 -132
  281. package/dist/esm/v6/suckers.test.js.map +0 -1
  282. package/dist/esm/v6/terminals.test.d.ts +0 -2
  283. package/dist/esm/v6/terminals.test.d.ts.map +0 -1
  284. package/dist/esm/v6/terminals.test.js +0 -57
  285. package/dist/esm/v6/terminals.test.js.map +0 -1
  286. package/dist/esm/v6/tokens.test.d.ts +0 -2
  287. package/dist/esm/v6/tokens.test.d.ts.map +0 -1
  288. package/dist/esm/v6/tokens.test.js +0 -139
  289. package/dist/esm/v6/tokens.test.js.map +0 -1
  290. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  291. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,26 +1,222 @@
1
1
  import bs58 from "bs58";
2
2
  const PUBLIC_IPFS_GATEWAY_HOSTNAME = "ipfs.io";
3
+ const IPFS_URI_PREFIX = "ipfs://";
4
+ const SHA2_256_MULTIHASH_PREFIX = new Uint8Array([0x12, 0x20]);
5
+ const BASE32_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
6
+ function validatedIpfsAssetPath(value) {
7
+ const cid = value.split("/")[0];
8
+ return cid && isIpfsCid(cid) ? value : null;
9
+ }
3
10
  export function ipfsGatewayUrl(cid, gatewayHostname) {
4
11
  return `https://${gatewayHostname ?? PUBLIC_IPFS_GATEWAY_HOSTNAME}/ipfs/${cid}`;
5
12
  }
13
+ /** Return an `ipfs://` URI for a CID and optional path. */
14
+ export function ipfsUri(cid, path) {
15
+ const suffix = path ? `/${path.replace(/^\/+/, "")}` : "";
16
+ return `${IPFS_URI_PREFIX}${cid}${suffix}`;
17
+ }
18
+ /** Whether a value uses the native `ipfs://` URI scheme. */
19
+ export function isIpfsUri(value) {
20
+ return value.startsWith(IPFS_URI_PREFIX);
21
+ }
22
+ /**
23
+ * Extract the immutable `<cid>[/path]` part of an IPFS URI or HTTP gateway URL.
24
+ *
25
+ * Both path gateways (`https://host/ipfs/<cid>`) and CID subdomain gateways
26
+ * (`https://<cid>.ipfs.host/path`) are recognized. Returns `null` for ordinary
27
+ * HTTP URLs and malformed values.
28
+ */
29
+ export function ipfsAssetPath(value) {
30
+ const trimmed = value.trim();
31
+ if (!trimmed)
32
+ return null;
33
+ if (trimmed.startsWith(IPFS_URI_PREFIX)) {
34
+ const path = trimmed.slice(IPFS_URI_PREFIX.length);
35
+ return validatedIpfsAssetPath(path);
36
+ }
37
+ try {
38
+ const url = new URL(trimmed);
39
+ const pathMatch = /^\/ipfs\/([^/]+)(\/.*)?$/i.exec(url.pathname);
40
+ if (pathMatch) {
41
+ return validatedIpfsAssetPath(`${pathMatch[1]}${pathMatch[2] ?? ""}`);
42
+ }
43
+ const [subdomain, marker] = url.hostname.split(".");
44
+ if (marker === "ipfs" && isIpfsCid(subdomain)) {
45
+ return `${subdomain}${url.pathname === "/" ? "" : url.pathname}`;
46
+ }
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ return null;
52
+ }
53
+ /** Return the CID (without a path) from an IPFS URI or gateway URL. */
54
+ export function cidFromIpfsUri(value) {
55
+ const path = ipfsAssetPath(value);
56
+ return path?.split("/")[0] || null;
57
+ }
58
+ /** A lightweight CIDv0 / base32 CIDv1 shape check. */
59
+ export function isIpfsCid(value) {
60
+ return (/^Qm[1-9A-HJ-NP-Za-km-z]{44}$/.test(value) ||
61
+ /^b[a-z2-7]{20,120}$/.test(value.toLowerCase()));
62
+ }
63
+ function bytesToHex(bytes) {
64
+ return `0x${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
65
+ }
66
+ function hexToBytes(value) {
67
+ const hex = value.startsWith("0x") ? value.slice(2) : value;
68
+ if (!/^[0-9a-fA-F]*$/.test(hex) || hex.length % 2 !== 0) {
69
+ throw new Error("Expected an even-length hexadecimal value.");
70
+ }
71
+ return Uint8Array.from({ length: hex.length / 2 }, (_, index) => Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16));
72
+ }
73
+ function cidV0Digest(cid) {
74
+ const decoded = bs58.decode(cid);
75
+ if (decoded.length !== 34 ||
76
+ decoded[0] !== SHA2_256_MULTIHASH_PREFIX[0] ||
77
+ decoded[1] !== SHA2_256_MULTIHASH_PREFIX[1]) {
78
+ throw new Error("Expected a CIDv0 using a 32-byte sha2-256 multihash.");
79
+ }
80
+ return decoded.slice(2);
81
+ }
82
+ function base32Encode(bytes) {
83
+ let result = "";
84
+ let buffer = 0;
85
+ let bits = 0;
86
+ for (const byte of bytes) {
87
+ buffer = (buffer << 8) | byte;
88
+ bits += 8;
89
+ while (bits >= 5) {
90
+ result += BASE32_ALPHABET[(buffer >>> (bits - 5)) & 31];
91
+ bits -= 5;
92
+ buffer &= bits === 0 ? 0 : (1 << bits) - 1;
93
+ }
94
+ }
95
+ if (bits > 0)
96
+ result += BASE32_ALPHABET[(buffer << (5 - bits)) & 31];
97
+ return result;
98
+ }
99
+ function base32Decode(value) {
100
+ const input = value.trim().toLowerCase().replace(/^b/, "").replace(/=+$/, "");
101
+ const output = [];
102
+ let buffer = 0;
103
+ let bits = 0;
104
+ for (const character of input) {
105
+ const index = BASE32_ALPHABET.indexOf(character);
106
+ if (index < 0)
107
+ throw new Error(`Invalid base32 character: ${character}.`);
108
+ buffer = (buffer << 5) | index;
109
+ bits += 5;
110
+ if (bits >= 8) {
111
+ output.push((buffer >>> (bits - 8)) & 0xff);
112
+ bits -= 8;
113
+ buffer &= bits === 0 ? 0 : (1 << bits) - 1;
114
+ }
115
+ }
116
+ return Uint8Array.from(output);
117
+ }
118
+ function readVarint(bytes, offset) {
119
+ let value = 0;
120
+ let shift = 0;
121
+ for (let index = offset; index < bytes.length; index++) {
122
+ const byte = bytes[index];
123
+ value += (byte & 0x7f) * 2 ** shift;
124
+ if ((byte & 0x80) === 0)
125
+ return { value, offset: index + 1 };
126
+ shift += 7;
127
+ if (shift > 49)
128
+ throw new Error("The CID varint is too large.");
129
+ }
130
+ throw new Error("The CID varint is truncated.");
131
+ }
132
+ function cidV1Digest(cid) {
133
+ if (!cid.toLowerCase().startsWith("b")) {
134
+ throw new Error("Expected a base32 CIDv1.");
135
+ }
136
+ const bytes = base32Decode(cid);
137
+ const version = readVarint(bytes, 0);
138
+ const codec = readVarint(bytes, version.offset);
139
+ const hashCode = readVarint(bytes, codec.offset);
140
+ const hashLength = readVarint(bytes, hashCode.offset);
141
+ if (version.value !== 1)
142
+ throw new Error("Expected a CIDv1.");
143
+ if (codec.value !== 0x70) {
144
+ throw new Error("Only DAG-PB CIDv1 metadata can be stored in a bytes32 IPFS slot.");
145
+ }
146
+ if (hashCode.value !== 0x12 || hashLength.value !== 32) {
147
+ throw new Error("Expected a CID using a 32-byte sha2-256 multihash.");
148
+ }
149
+ const digest = bytes.slice(hashLength.offset);
150
+ if (digest.length !== hashLength.value) {
151
+ throw new Error("The CID multihash length is invalid.");
152
+ }
153
+ return digest;
154
+ }
6
155
  /**
7
156
  * Return a hex-encoded CID to store on-chain.
8
157
  * Hex-encoded CIDs are used to store some CIDs on-chain because they are more gas-efficient.
9
158
  */
10
159
  export function encodeIpfsUri(cid) {
11
- return "0x" + Buffer.from(bs58.decode(cid).slice(2)).toString("hex");
160
+ const assetPath = ipfsAssetPath(cid);
161
+ if (assetPath?.includes("/")) {
162
+ throw new Error("A bytes32 IPFS digest cannot include a path.");
163
+ }
164
+ const candidate = assetPath ?? cid;
165
+ return bytesToHex(candidate.toLowerCase().startsWith("b")
166
+ ? cidV1Digest(candidate)
167
+ : cidV0Digest(candidate));
12
168
  }
13
169
  /**
14
170
  * Return the IPFS CID from a given hex-endoded string.
15
171
  * Hex-encoded CIDs are used to store some CIDs on-chain because they are more gas-efficient.
16
172
  */
17
173
  export function decodeEncodedIpfsUri(hex) {
18
- // Add default ipfs values for first 2 bytes:
19
- // - function:0x12=sha2, size:0x20=256 bits
20
- // - also cut off leading "0x"
21
- const hashHex = "1220" + hex.slice(2);
22
- const hashBytes = Buffer.from(hashHex, "hex");
23
- const hashStr = bs58.encode(hashBytes);
24
- return hashStr;
174
+ const digest = hexToBytes(hex);
175
+ if (digest.length !== 32) {
176
+ throw new Error("Expected a bytes32 IPFS digest.");
177
+ }
178
+ if (digest.every((byte) => byte === 0)) {
179
+ throw new Error("The zero bytes32 value does not contain an IPFS CID.");
180
+ }
181
+ return bs58.encode(new Uint8Array([...SHA2_256_MULTIHASH_PREFIX, ...digest]));
182
+ }
183
+ /** Strict alias describing the on-chain representation more explicitly. */
184
+ export const cidV0ToBytes32 = encodeIpfsUri;
185
+ /**
186
+ * Decode a bytes32 sha2-256 digest into a CIDv0, returning `null` for the zero
187
+ * value or malformed input instead of throwing.
188
+ */
189
+ export function bytes32ToCidV0(value) {
190
+ try {
191
+ return decodeEncodedIpfsUri(value);
192
+ }
193
+ catch {
194
+ return null;
195
+ }
196
+ }
197
+ /**
198
+ * Decode a stored tier metadata digest into equivalent immutable URI forms.
199
+ *
200
+ * The first candidate is the conventional DAG-PB CIDv0 used by Juicebox 721
201
+ * metadata. The second is a raw-codec CIDv1 over the same multihash, retained
202
+ * as a fallback for content that was pinned with a raw block codec. Legacy
203
+ * 33-byte values with a leading version marker are accepted as well.
204
+ */
205
+ export function decodeEncodedIpfsUriCandidates(value) {
206
+ if (!value)
207
+ return null;
208
+ let hex = value.startsWith("0x") ? value.slice(2) : value;
209
+ if (hex.length === 66)
210
+ hex = hex.slice(2);
211
+ const cidV0 = bytes32ToCidV0(hex);
212
+ if (!cidV0)
213
+ return null;
214
+ const multihash = new Uint8Array([
215
+ ...SHA2_256_MULTIHASH_PREFIX,
216
+ ...hexToBytes(hex),
217
+ ]);
218
+ // CIDv1 (0x01), raw codec (0x55), then the same sha2-256 multihash.
219
+ const rawCidV1 = `b${base32Encode(new Uint8Array([0x01, 0x55, ...multihash]))}`;
220
+ return [ipfsUri(cidV0), ipfsUri(rawCidV1)];
25
221
  }
26
222
  //# sourceMappingURL=ipfs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../../src/utils/ipfs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,4BAA4B,GAAG,SAAS,CAAC;AAE/C,MAAM,UAAU,cAAc,CAC5B,GAAuB,EACvB,eAAwB;IAExB,OAAO,WACL,eAAe,IAAI,4BACrB,SAAS,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,6CAA6C;IAC7C,2CAA2C;IAC3C,8BAA8B;IAC9B,MAAM,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../../src/utils/ipfs.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ tokenADecimals: number, cycleParams: {
59
59
  * - `r` = cashOutTaxRate
60
60
  *
61
61
  * @implements JBCashOuts.cashOutFrom
62
- * @see https://github.com/Bananapus/nana-core/blob/44ae030f910e4a40a9a70a1eccf67cb0cf0c80f9/src/libraries/JBCashOuts.sol
62
+ * @see https://github.com/Bananapus/nana-core-v6/blob/89ac631620588687b63b06d8cebe8499f7a60bdf/src/libraries/JBCashOuts.sol
63
63
  * @see https://www.desmos.com/calculator/sp9ru6zbpk
64
64
  * @returns amount in ETH
65
65
  */
@@ -68,5 +68,5 @@ export declare const getTokenCashOutQuoteEth: (tokensAmount: bigint, { overflowW
68
68
  totalSupply: bigint;
69
69
  cashOutTaxRate: number;
70
70
  tokensReserved: bigint;
71
- }) => bigint | 0;
71
+ }) => bigint;
72
72
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAO3D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,cAAc,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM;AACjC,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE;;;;;CAoBzE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,gBAAgB,MAAM,EACtB,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,qBAYzE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,cAAc,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM;AACjC,gBAAgB,MAAM,EACtB,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,qBAOzE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,uBAAuB,GAClC,cAAc,MAAM,EACpB,+DAKG;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,eAwDF,CAAC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAO3D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,cAAc,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM;AACjC,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE;;;;;CAoBzE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,gBAAgB,MAAM,EACtB,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,qBAYzE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,cAAc,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM;AACjC,gBAAgB,MAAM,EACtB,aAAa;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,qBAOzE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,uBAAuB,GAClC,cAAc,MAAM,EACpB,+DAKG;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,WAiFF,CAAC"}
@@ -74,29 +74,50 @@ tokenADecimals, cycleParams) => {
74
74
  * - `r` = cashOutTaxRate
75
75
  *
76
76
  * @implements JBCashOuts.cashOutFrom
77
- * @see https://github.com/Bananapus/nana-core/blob/44ae030f910e4a40a9a70a1eccf67cb0cf0c80f9/src/libraries/JBCashOuts.sol
77
+ * @see https://github.com/Bananapus/nana-core-v6/blob/89ac631620588687b63b06d8cebe8499f7a60bdf/src/libraries/JBCashOuts.sol
78
78
  * @see https://www.desmos.com/calculator/sp9ru6zbpk
79
79
  * @returns amount in ETH
80
80
  */
81
81
  export const getTokenCashOutQuoteEth = (tokensAmount, { overflowWei, // surplus
82
82
  totalSupply, cashOutTaxRate, tokensReserved, }) => {
83
+ const maxUint256 = (1n << 256n) - 1n;
84
+ if (tokensAmount < 0n ||
85
+ tokensAmount > maxUint256 ||
86
+ overflowWei < 0n ||
87
+ overflowWei > maxUint256 ||
88
+ totalSupply < 0n ||
89
+ totalSupply > maxUint256 ||
90
+ tokensReserved < 0n ||
91
+ tokensReserved > maxUint256 ||
92
+ totalSupply > maxUint256 - tokensReserved ||
93
+ !Number.isSafeInteger(cashOutTaxRate) ||
94
+ cashOutTaxRate < 0 ||
95
+ cashOutTaxRate > MAX_CASH_OUT_TAX_RATE) {
96
+ throw new RangeError("cash-out inputs are outside contract bounds");
97
+ }
83
98
  // alias names, to match the contract's implementation for easier manual comparison.
84
99
  const surplus = overflowWei;
85
100
  const cashOutCount = tokensAmount;
101
+ // `JBTerminalStore` supplies `JBCashOuts.cashOutFrom` with total outstanding
102
+ // tokens, which includes pending reserved tokens. Build that denominator
103
+ // before applying any of the library's edge conditions: a holder cashing out
104
+ // every minted token is not cashing out the full supply while reserved tokens
105
+ // are still pending.
106
+ const realTotalSupply = totalSupply + tokensReserved;
107
+ // Match JBCashOuts.cashOutFrom's first edge condition. This must precede the
108
+ // full-supply branch so a zero count against a zero supply cannot reclaim the
109
+ // surplus.
110
+ if (cashOutCount === 0n) {
111
+ return 0n;
112
+ }
86
113
  // If the cash out tax rate is the max, no surplus can be reclaimed.
87
114
  if (cashOutTaxRate === MAX_CASH_OUT_TAX_RATE) {
88
- return 0;
115
+ return 0n;
89
116
  }
90
117
  // If the total supply is being cashed out, return the entire surplus.
91
- if (cashOutCount >= totalSupply) {
118
+ if (cashOutCount >= realTotalSupply) {
92
119
  return surplus;
93
120
  }
94
- //
95
- /**
96
- * totalOutstandingTokensOf in contract.
97
- * @note this deviates from the contract's `cashOutFrom` implementation.
98
- */
99
- const realTotalSupply = totalSupply + tokensReserved;
100
121
  /**
101
122
  * Get a reference to the linear proportion.
102
123
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/utils/token.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,11 @@ export * from "./splits.js";
8
8
  export * from "./revnets.js";
9
9
  export * from "./terminals.js";
10
10
  export * from "./pay.js";
11
+ export * from "./projectPayers.js";
11
12
  export * from "./cashOut.js";
12
13
  export * from "./nft.js";
13
14
  export * from "./tokens.js";
15
+ export * from "./uniswapV4.js";
14
16
  export * from "./permissions.js";
15
17
  export * from "./suckers.js";
16
18
  export * from "./loans.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -8,9 +8,11 @@ export * from "./splits.js";
8
8
  export * from "./revnets.js";
9
9
  export * from "./terminals.js";
10
10
  export * from "./pay.js";
11
+ export * from "./projectPayers.js";
11
12
  export * from "./cashOut.js";
12
13
  export * from "./nft.js";
13
14
  export * from "./tokens.js";
15
+ export * from "./uniswapV4.js";
14
16
  export * from "./permissions.js";
15
17
  export * from "./suckers.js";
16
18
  export * from "./loans.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v6/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Address, ContractFunctionArgs, PublicClient } from "viem";
1
+ import { Address, ContractFunctionArgs, Hex, PublicClient } from "viem";
2
2
  import { jbControllerAbi } from "../generated/juicebox.js";
3
3
  import { JBChainId } from "../types.js";
4
4
  import { JBRulesetConfig, JBRulesetMetadata } from "./rulesets.js";
@@ -75,7 +75,8 @@ export declare function buildRulesetMetadata(overrides?: Partial<JBRulesetMetada
75
75
  * shared timestamp so every chain's ruleset is byte-identical.
76
76
  * @param args.duration Seconds the ruleset is locked for. 0 = no duration.
77
77
  * @param args.weight Tokens issued per unit of `baseCurrency` paid, as an
78
- * 18-decimal fixed point (uint112).
78
+ * 18-decimal fixed point (uint112). Later configurations can use the exported
79
+ * `RULESET_WEIGHT_INHERIT` sentinel (1n); zero means genuine zero issuance.
79
80
  * @param args.weightCutPercent Issuance cut applied each cycle, out of 1e9.
80
81
  * @param args.approvalHook A deadline contract queued rulesets must clear.
81
82
  * @param args.metadata Ruleset metadata; see {@link buildRulesetMetadata}.
@@ -2750,5 +2751,25 @@ export declare function buildLaunchProjectTx(args: {
2750
2751
  }[], string];
2751
2752
  value: bigint;
2752
2753
  };
2754
+ /** Minimal log shape needed to decode a project launch. */
2755
+ export interface V6LaunchProjectLog {
2756
+ address: Address;
2757
+ data: Hex;
2758
+ topics: readonly Hex[];
2759
+ }
2760
+ /**
2761
+ * Decode a v6 `LaunchProject` log emitted by the canonical controller.
2762
+ *
2763
+ * Checking the emitter matters: unrelated contracts can emit an event with the
2764
+ * same signature, and ERC-721 `Transfer` logs in a complex receipt are not a
2765
+ * reliable way to identify which mint was the Juicebox project NFT.
2766
+ */
2767
+ export declare function decodeLaunchProjectId(log: V6LaunchProjectLog, { chainId }: {
2768
+ chainId: JBChainId;
2769
+ }): bigint | null;
2770
+ /** Return the first canonical v6 project id found in a transaction's logs. */
2771
+ export declare function projectIdFromLaunchLogs(logs: readonly V6LaunchProjectLog[], args: {
2772
+ chainId: JBChainId;
2773
+ }): bigint | null;
2753
2774
  export {};
2754
2775
  //# sourceMappingURL=launch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,EACvB,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GAClC,MAAM,GAAG,IAAI,CAmBf;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,kBAAkB,EAAE,EACnC,IAAI,EAAE;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GAC3B,MAAM,GAAG,IAAI,CAMf"}
@@ -1,4 +1,4 @@
1
- import { zeroAddress } from "viem";
1
+ import { decodeEventLog, isAddressEqual, zeroAddress, } from "viem";
2
2
  import { NATIVE_TOKEN, NATIVE_TOKEN_DECIMALS } from "../constants.js";
3
3
  import { jbControllerAbi, jbProjectsAbi } from "../generated/juicebox.js";
4
4
  import { BASE_CURRENCY_ETH, tokenCurrencyId } from "./currency.js";
@@ -120,7 +120,8 @@ export function buildRulesetMetadata(overrides) {
120
120
  * shared timestamp so every chain's ruleset is byte-identical.
121
121
  * @param args.duration Seconds the ruleset is locked for. 0 = no duration.
122
122
  * @param args.weight Tokens issued per unit of `baseCurrency` paid, as an
123
- * 18-decimal fixed point (uint112).
123
+ * 18-decimal fixed point (uint112). Later configurations can use the exported
124
+ * `RULESET_WEIGHT_INHERIT` sentinel (1n); zero means genuine zero issuance.
124
125
  * @param args.weightCutPercent Issuance cut applied each cycle, out of 1e9.
125
126
  * @param args.approvalHook A deadline contract queued rulesets must clear.
126
127
  * @param args.metadata Ruleset metadata; see {@link buildRulesetMetadata}.
@@ -173,4 +174,40 @@ export function buildLaunchProjectTx(args) {
173
174
  value: args.creationFee,
174
175
  };
175
176
  }
177
+ /**
178
+ * Decode a v6 `LaunchProject` log emitted by the canonical controller.
179
+ *
180
+ * Checking the emitter matters: unrelated contracts can emit an event with the
181
+ * same signature, and ERC-721 `Transfer` logs in a complex receipt are not a
182
+ * reliable way to identify which mint was the Juicebox project NFT.
183
+ */
184
+ export function decodeLaunchProjectId(log, { chainId }) {
185
+ if (!isAddressEqual(log.address, v6Address("JBController", chainId))) {
186
+ return null;
187
+ }
188
+ try {
189
+ const decoded = decodeEventLog({
190
+ abi: jbControllerAbi,
191
+ eventName: "LaunchProject",
192
+ data: log.data,
193
+ topics: log.topics,
194
+ strict: true,
195
+ });
196
+ return decoded.eventName === "LaunchProject"
197
+ ? decoded.args.projectId
198
+ : null;
199
+ }
200
+ catch {
201
+ return null;
202
+ }
203
+ }
204
+ /** Return the first canonical v6 project id found in a transaction's logs. */
205
+ export function projectIdFromLaunchLogs(logs, args) {
206
+ for (const log of logs) {
207
+ const projectId = decodeLaunchProjectId(log, args);
208
+ if (projectId !== null)
209
+ return projectId;
210
+ }
211
+ return null;
212
+ }
176
213
  //# sourceMappingURL=launch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,WAAW,EAAE,MAAM,MAAM,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAqBvC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAoB,EACpB,OAAkB;IAElB,OAAO,MAAM,CAAC,YAAY,CAAC;QACzB,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;QACzC,GAAG,EAAE,aAAa;QAClB,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAiB,YAAY,EAC7B,QAAiB;IAEjB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;IACpE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,6CAA6C,KAAK,6BAA6B,CAChF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,QAAQ,IAAI,qBAAqB;QAC3C,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAG3C;IACC,MAAM,cAAc,GAAuB;QACzC;YACE,QAAQ,EAAE,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC;YACpD,0BAA0B,EAAE,IAAI,CAAC,kBAAkB,IAAI;gBACrD,sBAAsB,EAAE;aACzB;SACF;KACF,CAAC;IACF,IAAI,CAAC;QACH,cAAc,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,SAAS,CAAC,0BAA0B,EAAE,IAAI,CAAC,OAAO,CAAC;YAC7D,0BAA0B,EAAE,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,4BAA4B;IAC9B,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAsC;IAEtC,OAAO;QACL,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,iBAAiB;QAC/B,QAAQ,EAAE,KAAK;QACf,oBAAoB,EAAE,KAAK;QAC3B,iBAAiB,EAAE,KAAK;QACxB,mBAAmB,EAAE,KAAK;QAC1B,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB,EAAE,KAAK;QACxB,kBAAkB,EAAE,KAAK;QACzB,yBAAyB,EAAE,KAAK;QAChC,iBAAiB,EAAE,KAAK;QACxB,oBAAoB,EAAE,KAAK;QAC3B,QAAQ,EAAE,KAAK;QACf,4BAA4B,EAAE,KAAK;QACnC,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,CAAC;QACX,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,yBAAyB,CAAC,IASzC;IACC,OAAO;QACL,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QAC1B,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,CAAC;QAC7C,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,WAAW;QAC/C,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,oBAAoB,EAAE;QAClD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;QACpC,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAQpC;IACC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC;QAChD,GAAG,EAAE,eAAe;QACpB,YAAY,EAAE,kBAA2B;QACzC,IAAI,EAAE;YACJ,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,IAAI,IAAI,EAAE;SACP;QACV,KAAK,EAAE,IAAI,CAAC,WAAW;KACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/v6/launch.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,77 @@
1
1
  import { Address, Hex, PublicClient } from "viem";
2
2
  import { JBChainId } from "../types.js";
3
+ /**
4
+ * App-level sentinel convention used by Juicebox 721 shops for effectively
5
+ * unlimited inventory.
6
+ */
7
+ export declare const TIER_UNLIMITED_SUPPLY = 999999999;
3
8
  /**
4
9
  * JB721TiersHookStore's `DISCOUNT_DENOMINATOR`: a tier's `discountPercent` is
5
10
  * out of 200, so the shopper-facing "% off" is `discountPercent / 2`.
6
11
  */
7
12
  export declare const DISCOUNT_DENOMINATOR = 200n;
13
+ /** Canonical display fields understood across Juicebox 721 metadata writers. */
14
+ export interface TierMetadata {
15
+ name?: string;
16
+ description?: string;
17
+ image?: string;
18
+ animationUrl?: string;
19
+ mediaType?: string;
20
+ categoryName?: string;
21
+ }
22
+ /** Input accepted by {@link buildTierMetadata}. */
23
+ export interface TierMetadataInput {
24
+ name: string;
25
+ description?: string;
26
+ image?: string;
27
+ animationUrl?: string;
28
+ mediaType?: string;
29
+ categoryName?: string;
30
+ }
31
+ /** JSON shape written for a tier's pinned metadata. */
32
+ export interface StoredTierMetadata {
33
+ name: string;
34
+ description?: string;
35
+ image?: string;
36
+ animation_url?: string;
37
+ mediaType?: string;
38
+ categoryName?: string;
39
+ }
40
+ /**
41
+ * Parse a `data:application/json` tier URI. Invalid, non-object, and non-data
42
+ * values return `null` so callers can fall back to an IPFS metadata fetch.
43
+ */
44
+ export declare function parseTierMetadataJson(uri: string): Record<string, unknown> | null;
45
+ /**
46
+ * Normalize legacy and current tier metadata field names into one display
47
+ * shape. Only non-empty strings are returned.
48
+ */
49
+ export declare function pickTierMetadata(json: Record<string, unknown>): TierMetadata;
50
+ /** Whether a tier media value uses an immutable or browser-loadable URI form. */
51
+ export declare function isSafeTierMediaUri(value: string): boolean;
52
+ /** Build the canonical JSON object pinned for one tier. */
53
+ export declare function buildTierMetadata(input: TierMetadataInput): StoredTierMetadata;
54
+ /**
55
+ * Route IPFS media through a caller-selected gateway base URL. Data URIs and
56
+ * ordinary HTTP URLs pass through unchanged.
57
+ */
58
+ export declare function tierMediaAssetUrl(value: unknown, ipfsGatewayBaseUrl?: string): string | undefined;
59
+ /**
60
+ * Return a browser-renderable tier image URL. SVG data URIs that only wrap an
61
+ * external `<image href>` are unwrapped because browsers block that nested
62
+ * network request when the SVG itself is used as an `<img>` source.
63
+ */
64
+ export declare function tierMediaImageUrl(image: unknown, ipfsGatewayBaseUrl?: string): string | undefined;
65
+ /** Pick and resolve all tier metadata fields in one pass. */
66
+ export declare function tierDisplayMetadata(json: Record<string, unknown>, ipfsGatewayBaseUrl?: string): TierMetadata;
67
+ /** Stable first-seen category ids, with blank categories assigned to 0. */
68
+ export declare function buildTierCategoryPlan(tiers: ReadonlyArray<{
69
+ id: string;
70
+ categoryName?: string;
71
+ }>): {
72
+ categoryByTierId: Record<string, number>;
73
+ storeCategories: Record<string, string>;
74
+ };
8
75
  /**
9
76
  * A tier's effective (discounted) price, matching the on-chain formula in
10
77
  * JB721TiersHookStore: `price - mulDiv(price, discountPercent, 200)` with
@@ -1 +1 @@
1
- {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../../src/v6/nft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAe,MAAM,MAAM,CAAC;AAQ/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,GAAG,MAAM,GAC/B,MAAM,CAKR;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC9C,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,EACE,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAe,EACf,UAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkGhC"}
1
+ {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../../src/v6/nft.ts"],"names":[],"mappings":"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"}