@misonetwork/sdk 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/README.md +181 -124
  2. package/dist/client.d.ts +1229 -15
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +43 -21
  5. package/dist/client.js.map +1 -1
  6. package/dist/contracts/composition_credits/composition_credits.d.ts +181 -0
  7. package/dist/contracts/composition_credits/composition_credits.d.ts.map +1 -0
  8. package/dist/contracts/composition_credits/composition_credits.js +109 -0
  9. package/dist/contracts/composition_credits/composition_credits.js.map +1 -0
  10. package/dist/contracts/composition_credits/composition_party_role.d.ts +119 -0
  11. package/dist/contracts/composition_credits/composition_party_role.d.ts.map +1 -0
  12. package/dist/contracts/composition_credits/composition_party_role.js +139 -0
  13. package/dist/contracts/composition_credits/composition_party_role.js.map +1 -0
  14. package/dist/contracts/composition_credits/deps/miso_credit/credit.d.ts +24 -0
  15. package/dist/contracts/composition_credits/deps/miso_credit/credit.d.ts.map +1 -0
  16. package/dist/contracts/composition_credits/deps/miso_credit/credit.js +23 -0
  17. package/dist/contracts/composition_credits/deps/miso_credit/credit.js.map +1 -0
  18. package/dist/contracts/composition_credits/deps/sui/vec_map.d.ts +37 -0
  19. package/dist/contracts/composition_credits/deps/sui/vec_map.d.ts.map +1 -0
  20. package/dist/contracts/composition_credits/deps/sui/vec_map.js +28 -0
  21. package/dist/contracts/composition_credits/deps/sui/vec_map.js.map +1 -0
  22. package/dist/contracts/miso/composition.d.ts +17 -39
  23. package/dist/contracts/miso/composition.d.ts.map +1 -1
  24. package/dist/contracts/miso/composition.js +18 -39
  25. package/dist/contracts/miso/composition.js.map +1 -1
  26. package/dist/contracts/miso/deps/bps/bps.d.ts +1 -1
  27. package/dist/contracts/miso/deps/bps/bps.js +1 -1
  28. package/dist/contracts/miso/recording.d.ts +44 -19
  29. package/dist/contracts/miso/recording.d.ts.map +1 -1
  30. package/dist/contracts/miso/recording.js +46 -20
  31. package/dist/contracts/miso/recording.js.map +1 -1
  32. package/dist/contracts/miso/release.d.ts +63 -37
  33. package/dist/contracts/miso/release.d.ts.map +1 -1
  34. package/dist/contracts/miso/release.js +65 -38
  35. package/dist/contracts/miso/release.js.map +1 -1
  36. package/dist/contracts/miso/track.d.ts +41 -10
  37. package/dist/contracts/miso/track.d.ts.map +1 -1
  38. package/dist/contracts/miso/track.js +44 -10
  39. package/dist/contracts/miso/track.js.map +1 -1
  40. package/dist/contracts/recording_advisory/recording_advisory.d.ts +194 -0
  41. package/dist/contracts/recording_advisory/recording_advisory.d.ts.map +1 -0
  42. package/dist/contracts/recording_advisory/recording_advisory.js +204 -0
  43. package/dist/contracts/recording_advisory/recording_advisory.js.map +1 -0
  44. package/dist/contracts/recording_credits/deps/miso_credit/credit.d.ts +24 -0
  45. package/dist/contracts/recording_credits/deps/miso_credit/credit.d.ts.map +1 -0
  46. package/dist/contracts/recording_credits/deps/miso_credit/credit.js +23 -0
  47. package/dist/contracts/recording_credits/deps/miso_credit/credit.js.map +1 -0
  48. package/dist/contracts/recording_credits/deps/sui/vec_map.d.ts +37 -0
  49. package/dist/contracts/recording_credits/deps/sui/vec_map.d.ts.map +1 -0
  50. package/dist/contracts/recording_credits/deps/sui/vec_map.js +28 -0
  51. package/dist/contracts/recording_credits/deps/sui/vec_map.js.map +1 -0
  52. package/dist/contracts/recording_credits/deps/sui/vec_set.d.ts +21 -0
  53. package/dist/contracts/recording_credits/deps/sui/vec_set.d.ts.map +1 -0
  54. package/dist/contracts/recording_credits/deps/sui/vec_set.js +20 -0
  55. package/dist/contracts/recording_credits/deps/sui/vec_set.js.map +1 -0
  56. package/dist/contracts/recording_credits/recording_credits.d.ts +2313 -0
  57. package/dist/contracts/recording_credits/recording_credits.d.ts.map +1 -0
  58. package/dist/contracts/recording_credits/recording_credits.js +270 -0
  59. package/dist/contracts/recording_credits/recording_credits.js.map +1 -0
  60. package/dist/contracts/recording_credits/recording_party_role.d.ts +1174 -0
  61. package/dist/contracts/recording_credits/recording_party_role.d.ts.map +1 -0
  62. package/dist/contracts/recording_credits/recording_party_role.js +692 -0
  63. package/dist/contracts/recording_credits/recording_party_role.js.map +1 -0
  64. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +6 -0
  65. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +1 -0
  66. package/dist/contracts/recording_language/deps/language_code/language_code.js +8 -0
  67. package/dist/contracts/recording_language/deps/language_code/language_code.js.map +1 -0
  68. package/dist/contracts/recording_language/recording_language.d.ts +152 -0
  69. package/dist/contracts/recording_language/recording_language.d.ts.map +1 -0
  70. package/dist/contracts/recording_language/recording_language.js +149 -0
  71. package/dist/contracts/recording_language/recording_language.js.map +1 -0
  72. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts +52 -0
  73. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts.map +1 -0
  74. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js +37 -0
  75. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js.map +1 -0
  76. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts +131 -0
  77. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts.map +1 -0
  78. package/dist/contracts/recording_master_reference/recording_master_reference.js +121 -0
  79. package/dist/contracts/recording_master_reference/recording_master_reference.js.map +1 -0
  80. package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts +52 -0
  81. package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts.map +1 -0
  82. package/dist/contracts/recording_preview/deps/ori/walrus_data.js +37 -0
  83. package/dist/contracts/recording_preview/deps/ori/walrus_data.js.map +1 -0
  84. package/dist/contracts/recording_preview/recording_preview.d.ts +104 -0
  85. package/dist/contracts/recording_preview/recording_preview.d.ts.map +1 -0
  86. package/dist/contracts/recording_preview/recording_preview.js +94 -0
  87. package/dist/contracts/recording_preview/recording_preview.js.map +1 -0
  88. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.d.ts +52 -0
  89. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.d.ts.map +1 -0
  90. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.js +37 -0
  91. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.js.map +1 -0
  92. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.d.ts +46 -0
  93. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.d.ts.map +1 -0
  94. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.js +21 -0
  95. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.js.map +1 -0
  96. package/dist/contracts/release_cover_art/deps/per_track/per_track.d.ts +33 -0
  97. package/dist/contracts/release_cover_art/deps/per_track/per_track.d.ts.map +1 -0
  98. package/dist/contracts/release_cover_art/deps/per_track/per_track.js +32 -0
  99. package/dist/contracts/release_cover_art/deps/per_track/per_track.js.map +1 -0
  100. package/dist/contracts/release_cover_art/release_cover_art.d.ts +300 -0
  101. package/dist/contracts/release_cover_art/release_cover_art.d.ts.map +1 -0
  102. package/dist/contracts/release_cover_art/release_cover_art.js +168 -0
  103. package/dist/contracts/release_cover_art/release_cover_art.js.map +1 -0
  104. package/dist/contracts/release_credits/deps/miso_credit/credit.d.ts +24 -0
  105. package/dist/contracts/release_credits/deps/miso_credit/credit.d.ts.map +1 -0
  106. package/dist/contracts/release_credits/deps/miso_credit/credit.js +23 -0
  107. package/dist/contracts/release_credits/deps/miso_credit/credit.js.map +1 -0
  108. package/dist/contracts/release_credits/deps/sui/vec_map.d.ts +37 -0
  109. package/dist/contracts/release_credits/deps/sui/vec_map.d.ts.map +1 -0
  110. package/dist/contracts/release_credits/deps/sui/vec_map.js +28 -0
  111. package/dist/contracts/release_credits/deps/sui/vec_map.js.map +1 -0
  112. package/dist/contracts/release_credits/release_credits.d.ts +142 -0
  113. package/dist/contracts/release_credits/release_credits.d.ts.map +1 -0
  114. package/dist/contracts/release_credits/release_credits.js +108 -0
  115. package/dist/contracts/release_credits/release_credits.js.map +1 -0
  116. package/dist/contracts/release_credits/release_party_role.d.ts +58 -0
  117. package/dist/contracts/release_credits/release_party_role.d.ts.map +1 -0
  118. package/dist/contracts/release_credits/release_party_role.js +66 -0
  119. package/dist/contracts/release_credits/release_party_role.js.map +1 -0
  120. package/dist/contracts/release_description/release_description.d.ts +112 -0
  121. package/dist/contracts/release_description/release_description.d.ts.map +1 -0
  122. package/dist/contracts/release_description/release_description.js +123 -0
  123. package/dist/contracts/release_description/release_description.js.map +1 -0
  124. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts +644 -0
  125. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts.map +1 -0
  126. package/dist/contracts/release_dsp_link/release_dsp_link.js +556 -0
  127. package/dist/contracts/release_dsp_link/release_dsp_link.js.map +1 -0
  128. package/dist/contracts/release_genre/deps/per_track/per_track.d.ts +33 -0
  129. package/dist/contracts/release_genre/deps/per_track/per_track.d.ts.map +1 -0
  130. package/dist/contracts/release_genre/deps/per_track/per_track.js +32 -0
  131. package/dist/contracts/release_genre/deps/per_track/per_track.js.map +1 -0
  132. package/dist/contracts/release_genre/release_genre.d.ts +193 -0
  133. package/dist/contracts/release_genre/release_genre.d.ts.map +1 -0
  134. package/dist/contracts/release_genre/release_genre.js +207 -0
  135. package/dist/contracts/release_genre/release_genre.js.map +1 -0
  136. package/dist/contracts/release_kind/release_kind.d.ts +98 -0
  137. package/dist/contracts/release_kind/release_kind.d.ts.map +1 -0
  138. package/dist/contracts/release_kind/release_kind.js +109 -0
  139. package/dist/contracts/release_kind/release_kind.js.map +1 -0
  140. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts +52 -0
  141. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts.map +1 -0
  142. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js +37 -0
  143. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js.map +1 -0
  144. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts +91 -0
  145. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts.map +1 -0
  146. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js +91 -0
  147. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js.map +1 -0
  148. package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts +54 -0
  149. package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts.map +1 -0
  150. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js +37 -0
  151. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js.map +1 -0
  152. package/dist/contracts/routed_stake/deps/std/type_name.d.ts +18 -0
  153. package/dist/contracts/routed_stake/deps/std/type_name.d.ts.map +1 -0
  154. package/dist/contracts/routed_stake/deps/std/type_name.js +20 -0
  155. package/dist/contracts/routed_stake/deps/std/type_name.js.map +1 -0
  156. package/dist/contracts/routed_stake/deps/sui/balance.d.ts +13 -0
  157. package/dist/contracts/routed_stake/deps/sui/balance.d.ts.map +1 -0
  158. package/dist/contracts/routed_stake/deps/sui/balance.js +15 -0
  159. package/dist/contracts/routed_stake/deps/sui/balance.js.map +1 -0
  160. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts +37 -0
  161. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts.map +1 -0
  162. package/dist/contracts/routed_stake/deps/sui/vec_map.js +28 -0
  163. package/dist/contracts/routed_stake/deps/sui/vec_map.js.map +1 -0
  164. package/dist/contracts/routed_stake/routed_stake.d.ts +356 -0
  165. package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -0
  166. package/dist/contracts/routed_stake/routed_stake.js +311 -0
  167. package/dist/contracts/routed_stake/routed_stake.js.map +1 -0
  168. package/dist/contracts/royalty_pool/deps/std/type_name.d.ts +18 -0
  169. package/dist/contracts/royalty_pool/deps/std/type_name.d.ts.map +1 -0
  170. package/dist/contracts/royalty_pool/deps/std/type_name.js +20 -0
  171. package/dist/contracts/royalty_pool/deps/std/type_name.js.map +1 -0
  172. package/dist/contracts/royalty_pool/deps/sui/balance.d.ts +13 -0
  173. package/dist/contracts/royalty_pool/deps/sui/balance.d.ts.map +1 -0
  174. package/dist/contracts/royalty_pool/deps/sui/balance.js +15 -0
  175. package/dist/contracts/royalty_pool/deps/sui/balance.js.map +1 -0
  176. package/dist/contracts/royalty_pool/deps/sui/vec_map.d.ts +37 -0
  177. package/dist/contracts/royalty_pool/deps/sui/vec_map.d.ts.map +1 -0
  178. package/dist/contracts/royalty_pool/deps/sui/vec_map.js +28 -0
  179. package/dist/contracts/royalty_pool/deps/sui/vec_map.js.map +1 -0
  180. package/dist/contracts/royalty_pool/pool.d.ts +394 -0
  181. package/dist/contracts/royalty_pool/pool.d.ts.map +1 -0
  182. package/dist/contracts/royalty_pool/pool.js +387 -0
  183. package/dist/contracts/royalty_pool/pool.js.map +1 -0
  184. package/dist/contracts/royalty_pool/stake.d.ts +202 -0
  185. package/dist/contracts/royalty_pool/stake.d.ts.map +1 -0
  186. package/dist/contracts/royalty_pool/stake.js +197 -0
  187. package/dist/contracts/royalty_pool/stake.js.map +1 -0
  188. package/dist/contracts.d.ts +37 -3
  189. package/dist/contracts.d.ts.map +1 -1
  190. package/dist/contracts.js +42 -8
  191. package/dist/contracts.js.map +1 -1
  192. package/dist/deployments.d.ts +46 -12
  193. package/dist/deployments.d.ts.map +1 -1
  194. package/dist/deployments.js +119 -11
  195. package/dist/deployments.js.map +1 -1
  196. package/dist/events.d.ts +1081 -0
  197. package/dist/events.d.ts.map +1 -0
  198. package/dist/events.js +124 -0
  199. package/dist/events.js.map +1 -0
  200. package/dist/execute.d.ts.map +1 -1
  201. package/dist/execute.js +0 -4
  202. package/dist/execute.js.map +1 -1
  203. package/dist/index.d.ts +3 -0
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +6 -3
  206. package/dist/index.js.map +1 -1
  207. package/dist/internal.d.ts.map +1 -1
  208. package/dist/internal.js +2 -0
  209. package/dist/internal.js.map +1 -1
  210. package/dist/numeric.d.ts +5 -0
  211. package/dist/numeric.d.ts.map +1 -0
  212. package/dist/numeric.js +21 -0
  213. package/dist/numeric.js.map +1 -0
  214. package/dist/packages.d.ts +159 -0
  215. package/dist/packages.d.ts.map +1 -0
  216. package/dist/packages.js +179 -0
  217. package/dist/packages.js.map +1 -0
  218. package/dist/parsers.d.ts +5 -2
  219. package/dist/parsers.d.ts.map +1 -1
  220. package/dist/parsers.js +19 -7
  221. package/dist/parsers.js.map +1 -1
  222. package/dist/queries.d.ts +92 -0
  223. package/dist/queries.d.ts.map +1 -1
  224. package/dist/queries.js +132 -23
  225. package/dist/queries.js.map +1 -1
  226. package/dist/transactions.d.ts +96 -12
  227. package/dist/transactions.d.ts.map +1 -1
  228. package/dist/transactions.js +124 -14
  229. package/dist/transactions.js.map +1 -1
  230. package/dist/types.d.ts +35 -8
  231. package/dist/types.d.ts.map +1 -1
  232. package/dist/view.d.ts +6 -5
  233. package/dist/view.d.ts.map +1 -1
  234. package/dist/view.js +8 -2
  235. package/dist/view.js.map +1 -1
  236. package/package.json +14 -4
  237. package/src/client.ts +57 -25
  238. package/src/contracts/composition_credits/composition_credits.ts +169 -0
  239. package/src/contracts/composition_credits/composition_party_role.ts +189 -0
  240. package/src/contracts/composition_credits/deps/miso_credit/credit.ts +27 -0
  241. package/src/contracts/composition_credits/deps/sui/vec_map.ts +33 -0
  242. package/src/contracts/miso/composition.ts +24 -61
  243. package/src/contracts/miso/deps/bps/bps.ts +3 -3
  244. package/src/contracts/miso/recording.ts +69 -32
  245. package/src/contracts/miso/release.ts +103 -67
  246. package/src/contracts/miso/track.ts +56 -13
  247. package/src/contracts/recording_advisory/recording_advisory.ts +315 -0
  248. package/src/contracts/recording_credits/deps/miso_credit/credit.ts +27 -0
  249. package/src/contracts/recording_credits/deps/sui/vec_map.ts +33 -0
  250. package/src/contracts/recording_credits/deps/sui/vec_set.ts +21 -0
  251. package/src/contracts/recording_credits/recording_credits.ts +458 -0
  252. package/src/contracts/recording_credits/recording_party_role.ts +1041 -0
  253. package/src/contracts/recording_language/deps/language_code/language_code.ts +7 -0
  254. package/src/contracts/recording_language/recording_language.ts +237 -0
  255. package/src/contracts/recording_master_reference/deps/ori/walrus_data.ts +36 -0
  256. package/src/contracts/recording_master_reference/recording_master_reference.ts +181 -0
  257. package/src/contracts/recording_preview/deps/ori/walrus_data.ts +36 -0
  258. package/src/contracts/recording_preview/recording_preview.ts +154 -0
  259. package/src/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.ts +36 -0
  260. package/src/contracts/release_cover_art/deps/cover_art/cover_art.ts +23 -0
  261. package/src/contracts/release_cover_art/deps/per_track/per_track.ts +36 -0
  262. package/src/contracts/release_cover_art/release_cover_art.ts +251 -0
  263. package/src/contracts/release_credits/deps/miso_credit/credit.ts +27 -0
  264. package/src/contracts/release_credits/deps/sui/vec_map.ts +33 -0
  265. package/src/contracts/release_credits/release_credits.ts +156 -0
  266. package/src/contracts/release_credits/release_party_role.ts +87 -0
  267. package/src/contracts/release_description/release_description.ts +167 -0
  268. package/src/contracts/release_dsp_link/release_dsp_link.ts +813 -0
  269. package/src/contracts/release_genre/deps/per_track/per_track.ts +36 -0
  270. package/src/contracts/release_genre/release_genre.ts +314 -0
  271. package/src/contracts/release_kind/release_kind.ts +153 -0
  272. package/src/contracts/release_snapshot_bundle/deps/ori/walrus_data.ts +36 -0
  273. package/src/contracts/release_snapshot_bundle/release_snapshot_bundle.ts +124 -0
  274. package/src/contracts/routed_stake/deps/royalty_pool/stake.ts +39 -0
  275. package/src/contracts/routed_stake/deps/std/type_name.ts +22 -0
  276. package/src/contracts/routed_stake/deps/sui/balance.ts +17 -0
  277. package/src/contracts/routed_stake/deps/sui/vec_map.ts +33 -0
  278. package/src/contracts/routed_stake/routed_stake.ts +508 -0
  279. package/src/contracts/royalty_pool/deps/std/type_name.ts +22 -0
  280. package/src/contracts/royalty_pool/deps/sui/balance.ts +17 -0
  281. package/src/contracts/royalty_pool/deps/sui/vec_map.ts +33 -0
  282. package/src/contracts/royalty_pool/pool.ts +613 -0
  283. package/src/contracts/royalty_pool/stake.ts +317 -0
  284. package/src/contracts.ts +59 -6
  285. package/src/deployments.ts +160 -22
  286. package/src/events.ts +129 -0
  287. package/src/execute.ts +0 -4
  288. package/src/index.ts +6 -3
  289. package/src/internal.ts +2 -4
  290. package/src/numeric.ts +25 -0
  291. package/src/packages.ts +251 -0
  292. package/src/parsers.ts +32 -11
  293. package/src/queries.ts +227 -25
  294. package/src/transactions.ts +255 -23
  295. package/src/types.ts +37 -9
  296. package/src/view.ts +12 -6
package/src/queries.ts CHANGED
@@ -12,10 +12,8 @@
12
12
  // they obtained from the chain, so a miss means a broken reference — an
13
13
  // exceptional state, not a normal one.
14
14
  // - Extension dynamic-field readers return `null` — extension data is optional
15
- // by design, and "not attached" is a normal, expected state. Those readers
16
- // live in `@misofm/sdk` now (`getCompositionCredits`, `getRecordingCredits`,
17
- // `getReleaseCredits`, `getReleaseCover`) and re-import {@link isNotFound}
18
- // from here to keep one not-found taxonomy across both packages.
15
+ // by design, and "not attached" is a normal, expected state. Use
16
+ // `getExtensionField` with the generated BCS codec for the extension.
19
17
  // All null-returning readers use {@link isNotFound} to distinguish a missing
20
18
  // object from a transport failure (which still throws).
21
19
 
@@ -26,7 +24,13 @@ import { deriveObjectID, normalizeSuiAddress } from "@mysten/sui/utils";
26
24
 
27
25
  import { Composition as CompositionBcs } from "./contracts/miso/composition.ts";
28
26
  import { Recording as RecordingBcs } from "./contracts/miso/recording.ts";
29
- import { Release as ReleaseBcs } from "./contracts/miso/release.ts";
27
+ import {
28
+ Release as ReleaseBcs,
29
+ ReleaseRegistry as ReleaseRegistryBcs,
30
+ } from "./contracts/miso/release.ts";
31
+ import { RoyaltyPool as RoyaltyPoolBcs } from "./contracts/royalty_pool/pool.ts";
32
+ import { Stake as RoyaltyStakeBcs } from "./contracts/royalty_pool/stake.ts";
33
+ import { RoutedStake as RoutedStakeBcs } from "./contracts/routed_stake/routed_stake.ts";
30
34
  import {
31
35
  mapBps,
32
36
  mapComposition,
@@ -117,6 +121,35 @@ export function isNotFound(e: unknown): boolean {
117
121
  /** Key bytes for Move unit structs (single `0x00` for `dummy_field: bool = false`). */
118
122
  const UNIT_STRUCT_KEY_BYTES = new Uint8Array([0x00]);
119
123
 
124
+ /** Any generated BCS codec with a `parse` method. */
125
+ export interface BcsParser<T> {
126
+ parse(bytes: Uint8Array): T;
127
+ }
128
+
129
+ /** Exhaust every Core owned-object page; cap discovery must not truncate. */
130
+ async function listAllOwnedObjects(
131
+ client: ClientWithCoreApi,
132
+ input: Record<string, unknown>,
133
+ ): Promise<Array<{ objectId: string; type?: string; json?: unknown }>> {
134
+ const objects: Array<{ objectId: string; type?: string; json?: unknown }> = [];
135
+ let cursor: string | null | undefined;
136
+ do {
137
+ const page = await (client.core.listOwnedObjects as (args: unknown) => Promise<{
138
+ objects: Array<{ objectId: string; type?: string; json?: unknown }>;
139
+ pageInfo?: { hasNextPage?: boolean; endCursor?: string | null };
140
+ hasNextPage?: boolean;
141
+ cursor?: string | null;
142
+ }>)(cursor ? { ...input, cursor } : input);
143
+ objects.push(...page.objects);
144
+ cursor = page.pageInfo?.hasNextPage
145
+ ? page.pageInfo.endCursor
146
+ : page.hasNextPage
147
+ ? page.cursor
148
+ : null;
149
+ } while (cursor);
150
+ return objects;
151
+ }
152
+
120
153
  /** Fetches one object's BCS content bytes (or null if absent). */
121
154
  async function getContent(
122
155
  client: ClientWithCoreApi,
@@ -129,6 +162,168 @@ async function getContent(
129
162
  return object.content ?? null;
130
163
  }
131
164
 
165
+ /**
166
+ * Fetch and parse an object through the transport-neutral Core API. Object
167
+ * content is BCS; never pass the full `objectBcs` envelope to a Move codec.
168
+ */
169
+ export async function getObjectByBcs<T>(
170
+ client: ClientWithCoreApi,
171
+ objectId: string,
172
+ codec: BcsParser<T>,
173
+ ): Promise<T> {
174
+ const content = await getContent(client, objectId);
175
+ if (!content) throw new Error(`Object not found: ${objectId}`);
176
+ return codec.parse(content);
177
+ }
178
+
179
+ export interface ExtensionFieldParams<T> {
180
+ /** Freshly published package address for the extension. */
181
+ packageId: string;
182
+ /** Move module declaring the fieldless `ExtensionKey`. */
183
+ module: string;
184
+ /** Generated codec for the dynamic-field value. */
185
+ codec: BcsParser<T>;
186
+ }
187
+
188
+ /**
189
+ * Read an optional first-party extension field from a core object's UID. Every
190
+ * current extension uses a fieldless `ExtensionKey`, whose BCS is one false
191
+ * boolean byte. Absence returns `null`; transport errors still propagate.
192
+ */
193
+ export async function getExtensionField<T>(
194
+ client: ClientWithCoreApi,
195
+ parentId: string,
196
+ params: ExtensionFieldParams<T>,
197
+ ): Promise<T | null> {
198
+ try {
199
+ const { dynamicField } = await client.core.getDynamicField({
200
+ parentId,
201
+ name: {
202
+ type: `${params.packageId}::${params.module}::ExtensionKey`,
203
+ bcs: UNIT_STRUCT_KEY_BYTES,
204
+ },
205
+ });
206
+ return params.codec.parse(dynamicField.value.bcs);
207
+ } catch (error) {
208
+ if (isNotFound(error)) return null;
209
+ throw error;
210
+ }
211
+ }
212
+
213
+ export interface ReleaseDspFieldParams<T> {
214
+ /** Freshly published `release_dsp_link` package address. */
215
+ packageId: string;
216
+ /** Numeric DSP discriminator (`DspLinkData::platform()`). */
217
+ platform: number;
218
+ /** Generated codec for `DspLinkData` or `PerTrack<Option<DspLinkData>>`. */
219
+ codec: BcsParser<T>;
220
+ }
221
+
222
+ async function getReleaseDspField<T>(
223
+ client: ClientWithCoreApi,
224
+ releaseId: string,
225
+ key: "ReleaseLinkKey" | "TrackLinksKey",
226
+ params: ReleaseDspFieldParams<T>,
227
+ ): Promise<T | null> {
228
+ if (!Number.isInteger(params.platform) || params.platform < 0 || params.platform > 255) {
229
+ throw new Error("DSP platform must be a u8 discriminator");
230
+ }
231
+ try {
232
+ const { dynamicField } = await client.core.getDynamicField({
233
+ parentId: releaseId,
234
+ name: {
235
+ type: `${params.packageId}::release_dsp_link::${key}`,
236
+ bcs: Uint8Array.of(params.platform),
237
+ },
238
+ });
239
+ return params.codec.parse(dynamicField.value.bcs);
240
+ } catch (error) {
241
+ if (isNotFound(error)) return null;
242
+ throw error;
243
+ }
244
+ }
245
+
246
+ /** Read a release-level DSP link stored under `ReleaseLinkKey(platform)`. */
247
+ export function getReleaseDspLink<T>(
248
+ client: ClientWithCoreApi,
249
+ releaseId: string,
250
+ params: ReleaseDspFieldParams<T>,
251
+ ): Promise<T | null> {
252
+ return getReleaseDspField(client, releaseId, "ReleaseLinkKey", params);
253
+ }
254
+
255
+ /** Read the per-track DSP-link array stored under `TrackLinksKey(platform)`. */
256
+ export function getTrackDspLinks<T>(
257
+ client: ClientWithCoreApi,
258
+ releaseId: string,
259
+ params: ReleaseDspFieldParams<T>,
260
+ ): Promise<T | null> {
261
+ return getReleaseDspField(client, releaseId, "TrackLinksKey", params);
262
+ }
263
+
264
+ // ============================================================================
265
+ // Core registry and generic primitive reads
266
+ // ============================================================================
267
+
268
+ /** Parse the shared canonical core `miso::release::ReleaseRegistry` by ID. */
269
+ export async function getReleaseRegistryById(
270
+ client: ClientWithCoreApi,
271
+ registryId: string,
272
+ ) {
273
+ return getObjectByBcs(client, registryId, ReleaseRegistryBcs);
274
+ }
275
+
276
+ /** Parse a royalty pool by object ID. Phantom type arguments do not affect BCS. */
277
+ export async function getRoyaltyPoolById(
278
+ client: ClientWithCoreApi,
279
+ poolId: string,
280
+ ) {
281
+ return getObjectByBcs(client, poolId, RoyaltyPoolBcs);
282
+ }
283
+
284
+ /** Parse an owned `Stake<Share>` by object ID. */
285
+ export async function getRoyaltyStakeById(
286
+ client: ClientWithCoreApi,
287
+ stakeId: string,
288
+ ) {
289
+ return getObjectByBcs(client, stakeId, RoyaltyStakeBcs);
290
+ }
291
+
292
+ /** Parse a shared routed stake by object ID. */
293
+ export async function getRoutedStakeById(
294
+ client: ClientWithCoreApi,
295
+ routedStakeId: string,
296
+ ) {
297
+ return getObjectByBcs(client, routedStakeId, RoutedStakeBcs);
298
+ }
299
+
300
+ /** Deterministically derive the royalty-pool ID for a parent and type pair. */
301
+ export function deriveRoyaltyPoolId(
302
+ parentId: string,
303
+ shareType: string,
304
+ currencyType: string,
305
+ royaltyPoolPackageId: string,
306
+ ): string {
307
+ return deriveObjectID(
308
+ parentId,
309
+ `${royaltyPoolPackageId}::pool::RoyaltyPoolKey<${shareType}, ${currencyType}>`,
310
+ UNIT_STRUCT_KEY_BYTES,
311
+ );
312
+ }
313
+
314
+ /** Deterministically derive the routed-stake ID for a parent and stake share. */
315
+ export function deriveRoutedStakeId(
316
+ parentId: string,
317
+ stakeShareType: string,
318
+ routedStakePackageId: string,
319
+ ): string {
320
+ return deriveObjectID(
321
+ parentId,
322
+ `${routedStakePackageId}::routed_stake::RoutedStakeKey<${stakeShareType}>`,
323
+ UNIT_STRUCT_KEY_BYTES,
324
+ );
325
+ }
326
+
132
327
  // ============================================================================
133
328
  // GraphQL discovery queries
134
329
  // ============================================================================
@@ -465,10 +660,7 @@ export async function getOwnedCompositionAdminCaps(
465
660
  misoPackageId: string,
466
661
  ): Promise<CompositionAdminCap[]> {
467
662
  const capType = `${misoPackageId}::composition::CompositionAdminCap`;
468
- const { objects } = await client.core.listOwnedObjects({
469
- owner,
470
- type: capType,
471
- });
663
+ const objects = await listAllOwnedObjects(client, { owner, type: capType });
472
664
  const caps: CompositionAdminCap[] = [];
473
665
  for (const obj of objects) {
474
666
  const match = obj.type?.match(/<(.+)>$/);
@@ -590,10 +782,7 @@ export async function getOwnedRecordingAdminCaps(
590
782
  misoPackageId: string,
591
783
  ): Promise<RecordingAdminCap[]> {
592
784
  const capType = `${misoPackageId}::recording::RecordingAdminCap`;
593
- const { objects } = await client.core.listOwnedObjects({
594
- owner,
595
- type: capType,
596
- });
785
+ const objects = await listAllOwnedObjects(client, { owner, type: capType });
597
786
  const caps: RecordingAdminCap[] = [];
598
787
  for (const obj of objects) {
599
788
  const match = obj.type?.match(/<(.+)>$/);
@@ -666,7 +855,7 @@ export async function getOwnedReleaseAdminCaps(
666
855
  misoPackageId: string,
667
856
  ): Promise<ReleaseAdminCap[]> {
668
857
  const capType = `${misoPackageId}::release::ReleaseAdminCap`;
669
- const { objects } = await client.core.listOwnedObjects({
858
+ const objects = await listAllOwnedObjects(client, {
670
859
  owner,
671
860
  type: capType,
672
861
  include: { json: true },
@@ -724,7 +913,7 @@ export async function getShareCurrencyTreasuryCap(
724
913
  shareType: string,
725
914
  owner: string,
726
915
  ): Promise<string> {
727
- const { objects } = await client.core.listOwnedObjects({
916
+ const objects = await listAllOwnedObjects(client, {
728
917
  owner,
729
918
  type: `0x2::coin::TreasuryCap<${shareType}>`,
730
919
  });
@@ -766,15 +955,28 @@ async function addressOfRecordingWithShareType(
766
955
  misoPackageId: string,
767
956
  shareType: string,
768
957
  ): Promise<string | null> {
769
- const result = await client.query({
770
- query: AddressesAndTypesByTypeQuery,
771
- variables: { type: `${misoPackageId}::recording::Recording` },
772
- });
773
- for (const node of result.data?.objects?.nodes ?? []) {
774
- const repr = node?.asMoveObject?.contents?.type?.repr;
775
- if (!repr || !node.address) continue;
776
- const [recordingShareType] = extractTypeParams2(repr);
777
- if (recordingShareType === shareType) return node.address;
778
- }
958
+ let cursor: string | null | undefined;
959
+ do {
960
+ const result = await client.query<
961
+ { objects?: WorkAddressConnection | null },
962
+ { type: string; cursor?: string | null }
963
+ >({
964
+ query: `query RecordingAddress($type: String!, $cursor: String) {
965
+ objects(first: 50, after: $cursor, filter: { type: $type }) {
966
+ pageInfo { hasNextPage endCursor }
967
+ nodes { address asMoveObject { contents { type { repr } } } }
968
+ }
969
+ }`,
970
+ variables: { type: `${misoPackageId}::recording::Recording`, cursor },
971
+ });
972
+ const page = result.data?.objects;
973
+ for (const node of page?.nodes ?? []) {
974
+ const repr = node?.asMoveObject?.contents?.type?.repr;
975
+ if (!repr || !node.address) continue;
976
+ const [recordingShareType] = extractTypeParams2(repr);
977
+ if (recordingShareType === shareType) return node.address;
978
+ }
979
+ cursor = page?.pageInfo?.hasNextPage ? page.pageInfo.endCursor : null;
980
+ } while (cursor);
779
981
  return null;
780
982
  }
@@ -25,20 +25,24 @@
25
25
  // sending an admin cap somewhere other than a plain address (every admin cap is
26
26
  // `key, store`, so it is freely routable).
27
27
  //
28
- // The opinionated layers track assembly, cap disposition, minato dispersal,
29
- // the share-currency lifecycle live in `@misofm/sdk`
30
- // (`release_registry::new_release`, `publishRelease`/`publishReleaseGraph`,
31
- // `finalizeComposition`/`finalizeRecording`/`finalizeRelease`,
32
- // `publishComposition`/`publishRecording`/`publishCompositionAndRecording`,
33
- // `share.ts`) as free functions taking `misoPackageId` explicitly. Those import
34
- // the primitives from here and build on top, same PTB composition pattern, just
35
- // crossing a package boundary.
28
+ // This package exposes the complete low-level current ABI. The platform SDK
29
+ // should own product-specific orchestration (cap disposition, currency
30
+ // lifecycle, authority-package workflows) on top of these composable calls.
36
31
 
37
- import { Transaction, type TransactionObjectArgument } from "@mysten/sui/transactions";
32
+ import {
33
+ Transaction,
34
+ type TransactionArgument,
35
+ type TransactionObjectArgument,
36
+ } from "@mysten/sui/transactions";
38
37
 
39
38
  import * as composition from "./contracts/miso/composition.ts";
40
39
  import * as recording from "./contracts/miso/recording.ts";
40
+ import * as release from "./contracts/miso/release.ts";
41
+ import { asU256, type UnsignedInput } from "./numeric.ts";
41
42
  import * as track from "./contracts/miso/track.ts";
43
+ import * as royaltyPool from "./contracts/royalty_pool/pool.ts";
44
+ import * as royaltyStake from "./contracts/royalty_pool/stake.ts";
45
+ import * as routedStake from "./contracts/routed_stake/routed_stake.ts";
42
46
 
43
47
  /** A thunk that adds commands to a transaction. May be async (resolves at build time). */
44
48
  export type TxThunk = (tx: Transaction) => void | Promise<void>;
@@ -110,9 +114,6 @@ export interface RecordingParts {
110
114
  balance: TransactionObjectArgument;
111
115
  }
112
116
 
113
- /** The protocol's maximum composition royalty rate (`MAX_ROYALTY_RATE_BPS`). */
114
- export const PROTOCOL_MAX_ROYALTY_RATE_BPS = 2000;
115
-
116
117
  export interface CreateRecordingParams extends ShareCurrencyBinding {
117
118
  /** Share type of the parent composition (the recording's `CompositionShare` phantom). */
118
119
  compositionShareType: string;
@@ -122,13 +123,6 @@ export interface CreateRecordingParams extends ShareCurrencyBinding {
122
123
  * unshared, transaction-local `createComposition(...).composition` result.
123
124
  */
124
125
  composition: TransactionObjectArgument;
125
- /**
126
- * Slippage guard: the maximum composition royalty rate (bps) the recorder will
127
- * grant — `recording::new` aborts if the composition's live rate exceeds it.
128
- * Pass the rate you observed. Defaults to the protocol maximum (2000), which
129
- * accepts any legal rate.
130
- */
131
- maxRoyaltyRateBps?: number;
132
126
  misoPackageId: string;
133
127
  }
134
128
 
@@ -144,7 +138,7 @@ export function createRecording(tx: Transaction, params: CreateRecordingParams):
144
138
  recording._new({
145
139
  package: params.misoPackageId,
146
140
  typeArguments: [params.shareType, params.compositionShareType],
147
- arguments: [params.composition, tx.object(params.shareCurrencyId), tx.object(params.shareTreasuryCapId), tx.pure.u16(params.maxRoyaltyRateBps ?? PROTOCOL_MAX_ROYALTY_RATE_BPS)],
141
+ arguments: [params.composition, tx.object(params.shareCurrencyId), tx.object(params.shareTreasuryCapId)],
148
142
  }),
149
143
  );
150
144
  return { recording: result[0]!, adminCap: result[1]!, balance: result[2]! };
@@ -155,7 +149,10 @@ export function createRecording(tx: Transaction, params: CreateRecordingParams):
155
149
  // ============================================================================
156
150
 
157
151
  export interface CreateTrackParams {
158
- recordingId: string;
152
+ /** Shared recording object ID, unless `recording` is PTB-local. */
153
+ recordingId?: string;
154
+ /** A recording returned by `createRecording` earlier in this same PTB. */
155
+ recording?: TransactionObjectArgument;
159
156
  recordingAdminCapId?: string;
160
157
  recordingAdminCap?: TransactionObjectArgument;
161
158
  /** Share type of the recording (the track's `RecordingShare` phantom). */
@@ -171,7 +168,8 @@ export interface CreateTrackParams {
171
168
  * PRIMITIVE. Appends `track::new` and returns its by-value `Track`. A track has
172
169
  * `drop, store`, so callers may leave it unused; to assemble a release, pass
173
170
  * returned tracks to `tx.makeMoveVec({ type: `${misoPackageId}::track::Track`,
174
- * elements })` and then call `release_registry::new_release` from `@misofm/sdk`.
171
+ * elements })` and then pass that vector to `createRelease` with its shared
172
+ * `ReleaseRegistry` object.
175
173
  *
176
174
  * The `recordingAdminCap` may be passed as an on-chain object id
177
175
  * (`recordingAdminCapId`) or as a PTB-local argument (`recordingAdminCap`) —
@@ -182,17 +180,251 @@ export function createTrack(tx: Transaction, params: CreateTrackParams): Transac
182
180
  if (!params.recordingAdminCap && !params.recordingAdminCapId) {
183
181
  throw new Error("createTrack: recordingAdminCapId or recordingAdminCap required");
184
182
  }
183
+ if (!params.recording && !params.recordingId) {
184
+ throw new Error("createTrack: recordingId or recording required");
185
+ }
185
186
  const adminCapArg = params.recordingAdminCap ?? tx.object(params.recordingAdminCapId!);
187
+ const recordingArg = params.recording ?? tx.object(params.recordingId!);
186
188
  return tx.add(
187
189
  track._new({
188
190
  package: params.misoPackageId,
189
191
  typeArguments: [params.recordingShareType, params.compositionShareType],
190
192
  arguments: [
191
193
  adminCapArg,
192
- tx.object(params.recordingId),
194
+ recordingArg,
193
195
  tx.pure.id(params.targetReleaseId),
194
196
  tx.pure.u16(params.trackSplitBps),
195
197
  ],
196
198
  }),
197
199
  );
198
200
  }
201
+
202
+ // ============================================================================
203
+ // Publish finalizers
204
+ // ============================================================================
205
+
206
+ /** Consume and share an initialized composition. The generated call supplies Clock. */
207
+ export function publishComposition(
208
+ tx: Transaction,
209
+ params: {
210
+ composition: TransactionObjectArgument;
211
+ adminCap: TransactionObjectArgument;
212
+ shareType: string;
213
+ misoPackageId: string;
214
+ },
215
+ ): void {
216
+ tx.add(
217
+ composition.publish({
218
+ package: params.misoPackageId,
219
+ typeArguments: [params.shareType],
220
+ arguments: [params.composition, params.adminCap],
221
+ }),
222
+ );
223
+ }
224
+
225
+ /** Consume and share an initialized recording. The generated call supplies Clock. */
226
+ export function publishRecording(
227
+ tx: Transaction,
228
+ params: {
229
+ recording: TransactionObjectArgument;
230
+ adminCap: TransactionObjectArgument;
231
+ recordingShareType: string;
232
+ compositionShareType: string;
233
+ misoPackageId: string;
234
+ },
235
+ ): void {
236
+ tx.add(
237
+ recording.publish({
238
+ package: params.misoPackageId,
239
+ typeArguments: [params.recordingShareType, params.compositionShareType],
240
+ arguments: [params.recording, params.adminCap],
241
+ }),
242
+ );
243
+ }
244
+
245
+ /** Consume and share an initialized release. The generated call supplies Clock. */
246
+ export function publishRelease(
247
+ tx: Transaction,
248
+ params: {
249
+ release: TransactionObjectArgument;
250
+ adminCap: TransactionObjectArgument;
251
+ misoPackageId: string;
252
+ },
253
+ ): void {
254
+ tx.add(
255
+ release.publish({
256
+ package: params.misoPackageId,
257
+ arguments: [params.release, params.adminCap],
258
+ }),
259
+ );
260
+ }
261
+
262
+ // ============================================================================
263
+ // Core release registry
264
+ // ============================================================================
265
+
266
+ /** The by-value result of core `release::new`. Publish it in this PTB. */
267
+ export interface ReleaseParts {
268
+ release: TransactionObjectArgument;
269
+ adminCap: TransactionObjectArgument;
270
+ }
271
+
272
+ export interface CreateReleaseParams {
273
+ /** Shared, canonical `miso::release::ReleaseRegistry` object ID. */
274
+ releaseRegistryId: string;
275
+ title: string;
276
+ /** `Track` values returned by {@link createTrack}; all are consumed. */
277
+ tracks: readonly TransactionObjectArgument[];
278
+ nonce: UnsignedInput;
279
+ /** Freshly published core `miso` package ID. */
280
+ misoPackageId: string;
281
+ }
282
+
283
+ /**
284
+ * Assemble a release through core `miso::release::new`. The registry is the
285
+ * first object argument; there is no arbitrary-parent or utility-package path.
286
+ * Both returned values are non-drop and must be published or otherwise consumed
287
+ * in this PTB.
288
+ */
289
+ export function createRelease(
290
+ tx: Transaction,
291
+ params: CreateReleaseParams,
292
+ ): ReleaseParts {
293
+ const tracks = tx.makeMoveVec({
294
+ type: `${params.misoPackageId}::track::Track`,
295
+ elements: [...params.tracks],
296
+ });
297
+ const result = tx.add(
298
+ release._new({
299
+ package: params.misoPackageId,
300
+ arguments: [
301
+ tx.object(params.releaseRegistryId),
302
+ tx.pure.string(params.title),
303
+ tracks,
304
+ tx.pure.u256(asU256("release nonce", params.nonce)),
305
+ ],
306
+ }),
307
+ );
308
+ return { release: result[0]!, adminCap: result[1]! };
309
+ }
310
+
311
+ // ============================================================================
312
+ // Generic royalty primitives
313
+ // ============================================================================
314
+
315
+ /** Create an owned `Stake<Share>` from a by-value `Balance<Share>`. */
316
+ export function createRoyaltyStake(
317
+ tx: Transaction,
318
+ params: {
319
+ balance: TransactionArgument;
320
+ shareType: string;
321
+ royaltyPoolPackageId: string;
322
+ },
323
+ ): TransactionObjectArgument {
324
+ return tx.add(
325
+ royaltyStake._new({
326
+ package: params.royaltyPoolPackageId,
327
+ typeArguments: [params.shareType],
328
+ arguments: [params.balance],
329
+ }),
330
+ );
331
+ }
332
+
333
+ /** Destroy an unregistered stake and return its principal `Balance<Share>`. */
334
+ export function destroyRoyaltyStake(
335
+ tx: Transaction,
336
+ params: {
337
+ stake: TransactionObjectArgument;
338
+ shareType: string;
339
+ royaltyPoolPackageId: string;
340
+ },
341
+ ): TransactionObjectArgument {
342
+ return tx.add(
343
+ royaltyStake.destroy({
344
+ package: params.royaltyPoolPackageId,
345
+ typeArguments: [params.shareType],
346
+ arguments: [params.stake],
347
+ }),
348
+ );
349
+ }
350
+
351
+ /** Register an owned stake against a shared royalty pool. */
352
+ export function registerRoyaltyStake(
353
+ tx: Transaction,
354
+ params: {
355
+ poolId: string;
356
+ stakeId?: string;
357
+ /** A `Stake` created earlier in this same PTB. */
358
+ stake?: TransactionObjectArgument;
359
+ shareType: string;
360
+ currencyType: string;
361
+ royaltyPoolPackageId: string;
362
+ },
363
+ ): void {
364
+ if (!params.stake && !params.stakeId) {
365
+ throw new Error("registerRoyaltyStake: stakeId or stake required");
366
+ }
367
+ tx.add(
368
+ royaltyPool.registerStake({
369
+ package: params.royaltyPoolPackageId,
370
+ typeArguments: [params.shareType, params.currencyType],
371
+ arguments: [tx.object(params.poolId), params.stake ?? tx.object(params.stakeId!)],
372
+ }),
373
+ );
374
+ }
375
+
376
+ /** Claim rewards. The returned `Balance<Currency>` must be consumed in this PTB. */
377
+ export function claimRoyaltyRewards(
378
+ tx: Transaction,
379
+ params: {
380
+ poolId: string;
381
+ stakeId: string;
382
+ shareType: string;
383
+ currencyType: string;
384
+ royaltyPoolPackageId: string;
385
+ },
386
+ ): TransactionObjectArgument {
387
+ return tx.add(
388
+ royaltyPool.claimRewards({
389
+ package: params.royaltyPoolPackageId,
390
+ typeArguments: [params.shareType, params.currencyType],
391
+ arguments: [tx.object(params.poolId), tx.object(params.stakeId)],
392
+ }),
393
+ );
394
+ }
395
+
396
+ /**
397
+ * Permissionlessly route rewards from a shared routed stake into its parent
398
+ * pool. Pool/routed-stake creation and lifecycle operations take `&mut UID` and
399
+ * belong in the parent authority module, not in a client-side PTB helper.
400
+ */
401
+ export function sweepRoutedStake(
402
+ tx: Transaction,
403
+ params: {
404
+ routedStakeId: string;
405
+ stakePoolId: string;
406
+ routedPoolId: string;
407
+ parentId: string;
408
+ stakeShareType: string;
409
+ poolShareType: string;
410
+ currencyType: string;
411
+ routedStakePackageId: string;
412
+ },
413
+ ): void {
414
+ tx.add(
415
+ routedStake.sweep({
416
+ package: params.routedStakePackageId,
417
+ typeArguments: [
418
+ params.stakeShareType,
419
+ params.poolShareType,
420
+ params.currencyType,
421
+ ],
422
+ arguments: [
423
+ tx.object(params.routedStakeId),
424
+ tx.object(params.stakePoolId),
425
+ tx.object(params.routedPoolId),
426
+ tx.pure.id(params.parentId),
427
+ ],
428
+ }),
429
+ );
430
+ }