@misofm/sdk 0.8.1 → 0.10.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 (279) hide show
  1. package/README.md +88 -56
  2. package/dist/client.d.ts +126 -18
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +210 -44
  5. package/dist/client.js.map +1 -1
  6. package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts +205 -0
  7. package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts.map +1 -0
  8. package/dist/contracts/composition_routed_stake/composition_routed_stake.js +184 -0
  9. package/dist/contracts/composition_routed_stake/composition_routed_stake.js.map +1 -0
  10. package/dist/contracts/composition_routed_stake/witness.d.ts +7 -0
  11. package/dist/contracts/composition_routed_stake/witness.d.ts.map +1 -0
  12. package/dist/contracts/composition_routed_stake/witness.js +9 -0
  13. package/dist/contracts/composition_routed_stake/witness.js.map +1 -0
  14. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +89 -28
  15. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -1
  16. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +84 -23
  17. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -1
  18. package/dist/contracts/composition_royalty_pool/witness.d.ts +6 -0
  19. package/dist/contracts/composition_royalty_pool/witness.d.ts.map +1 -0
  20. package/dist/contracts/composition_royalty_pool/witness.js +8 -0
  21. package/dist/contracts/composition_royalty_pool/witness.js.map +1 -0
  22. package/dist/contracts/genre/genre.d.ts +96 -0
  23. package/dist/contracts/genre/genre.d.ts.map +1 -0
  24. package/dist/contracts/genre/genre.js +107 -0
  25. package/dist/contracts/genre/genre.js.map +1 -0
  26. package/dist/contracts/recording_advisory/recording_advisory.d.ts +194 -0
  27. package/dist/contracts/recording_advisory/recording_advisory.d.ts.map +1 -0
  28. package/dist/contracts/recording_advisory/recording_advisory.js +204 -0
  29. package/dist/contracts/recording_advisory/recording_advisory.js.map +1 -0
  30. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +6 -0
  31. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +1 -0
  32. package/dist/contracts/recording_language/deps/language_code/language_code.js +8 -0
  33. package/dist/contracts/recording_language/deps/language_code/language_code.js.map +1 -0
  34. package/dist/contracts/recording_language/recording_language.d.ts +152 -0
  35. package/dist/contracts/recording_language/recording_language.d.ts.map +1 -0
  36. package/dist/contracts/recording_language/recording_language.js +149 -0
  37. package/dist/contracts/recording_language/recording_language.js.map +1 -0
  38. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts +52 -0
  39. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts.map +1 -0
  40. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js +37 -0
  41. package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js.map +1 -0
  42. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts +131 -0
  43. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts.map +1 -0
  44. package/dist/contracts/recording_master_reference/recording_master_reference.js +121 -0
  45. package/dist/contracts/recording_master_reference/recording_master_reference.js.map +1 -0
  46. package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts +52 -0
  47. package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts.map +1 -0
  48. package/dist/contracts/recording_preview/deps/ori/walrus_data.js +37 -0
  49. package/dist/contracts/recording_preview/deps/ori/walrus_data.js.map +1 -0
  50. package/dist/contracts/recording_preview/recording_preview.d.ts +104 -0
  51. package/dist/contracts/recording_preview/recording_preview.d.ts.map +1 -0
  52. package/dist/contracts/recording_preview/recording_preview.js +94 -0
  53. package/dist/contracts/recording_preview/recording_preview.js.map +1 -0
  54. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +90 -28
  55. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -1
  56. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +84 -23
  57. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -1
  58. package/dist/contracts/recording_royalty_pool/witness.d.ts +6 -0
  59. package/dist/contracts/recording_royalty_pool/witness.d.ts.map +1 -0
  60. package/dist/contracts/recording_royalty_pool/witness.js +8 -0
  61. package/dist/contracts/recording_royalty_pool/witness.js.map +1 -0
  62. package/dist/contracts/release_description/release_description.d.ts +112 -0
  63. package/dist/contracts/release_description/release_description.d.ts.map +1 -0
  64. package/dist/contracts/release_description/release_description.js +123 -0
  65. package/dist/contracts/release_description/release_description.js.map +1 -0
  66. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts +644 -0
  67. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts.map +1 -0
  68. package/dist/contracts/release_dsp_link/release_dsp_link.js +556 -0
  69. package/dist/contracts/release_dsp_link/release_dsp_link.js.map +1 -0
  70. package/dist/contracts/release_genre/deps/per_track/per_track.d.ts +33 -0
  71. package/dist/contracts/release_genre/deps/per_track/per_track.d.ts.map +1 -0
  72. package/dist/contracts/release_genre/deps/per_track/per_track.js +32 -0
  73. package/dist/contracts/release_genre/deps/per_track/per_track.js.map +1 -0
  74. package/dist/contracts/release_genre/release_genre.d.ts +193 -0
  75. package/dist/contracts/release_genre/release_genre.d.ts.map +1 -0
  76. package/dist/contracts/release_genre/release_genre.js +207 -0
  77. package/dist/contracts/release_genre/release_genre.js.map +1 -0
  78. package/dist/contracts/release_kind/release_kind.d.ts +98 -0
  79. package/dist/contracts/release_kind/release_kind.d.ts.map +1 -0
  80. package/dist/contracts/release_kind/release_kind.js +109 -0
  81. package/dist/contracts/release_kind/release_kind.js.map +1 -0
  82. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts +106 -0
  83. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts.map +1 -0
  84. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js +113 -0
  85. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js.map +1 -0
  86. package/dist/contracts/release_revenue_distributor/witness.d.ts +7 -0
  87. package/dist/contracts/release_revenue_distributor/witness.d.ts.map +1 -0
  88. package/dist/contracts/release_revenue_distributor/witness.js +9 -0
  89. package/dist/contracts/release_revenue_distributor/witness.js.map +1 -0
  90. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts +52 -0
  91. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts.map +1 -0
  92. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js +37 -0
  93. package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js.map +1 -0
  94. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts +91 -0
  95. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts.map +1 -0
  96. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js +91 -0
  97. package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js.map +1 -0
  98. package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts +54 -0
  99. package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts.map +1 -0
  100. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js +37 -0
  101. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js.map +1 -0
  102. package/dist/contracts/routed_stake/deps/std/type_name.d.ts +18 -0
  103. package/dist/contracts/routed_stake/deps/std/type_name.d.ts.map +1 -0
  104. package/dist/contracts/routed_stake/deps/std/type_name.js +20 -0
  105. package/dist/contracts/routed_stake/deps/std/type_name.js.map +1 -0
  106. package/dist/contracts/routed_stake/deps/sui/balance.d.ts +13 -0
  107. package/dist/contracts/routed_stake/deps/sui/balance.d.ts.map +1 -0
  108. package/dist/contracts/routed_stake/deps/sui/balance.js +15 -0
  109. package/dist/contracts/routed_stake/deps/sui/balance.js.map +1 -0
  110. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts +37 -0
  111. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts.map +1 -0
  112. package/dist/contracts/routed_stake/deps/sui/vec_map.js +28 -0
  113. package/dist/contracts/routed_stake/deps/sui/vec_map.js.map +1 -0
  114. package/dist/contracts/routed_stake/routed_stake.d.ts +356 -0
  115. package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -0
  116. package/dist/contracts/routed_stake/routed_stake.js +311 -0
  117. package/dist/contracts/routed_stake/routed_stake.js.map +1 -0
  118. package/dist/contracts/royalty_pool/pool.d.ts +27 -17
  119. package/dist/contracts/royalty_pool/pool.d.ts.map +1 -1
  120. package/dist/contracts/royalty_pool/pool.js +26 -17
  121. package/dist/contracts/royalty_pool/pool.js.map +1 -1
  122. package/dist/contracts/vault/deps/sui/bag.d.ts +35 -0
  123. package/dist/contracts/vault/deps/sui/bag.d.ts.map +1 -0
  124. package/dist/contracts/vault/deps/sui/bag.js +37 -0
  125. package/dist/contracts/vault/deps/sui/bag.js.map +1 -0
  126. package/dist/contracts/vault/deps/sui/borrow.d.ts +20 -0
  127. package/dist/contracts/vault/deps/sui/borrow.d.ts.map +1 -0
  128. package/dist/contracts/vault/deps/sui/borrow.js +21 -0
  129. package/dist/contracts/vault/deps/sui/borrow.js.map +1 -0
  130. package/dist/contracts/vault/vault.d.ts +276 -0
  131. package/dist/contracts/vault/vault.d.ts.map +1 -0
  132. package/dist/contracts/vault/vault.js +274 -0
  133. package/dist/contracts/vault/vault.js.map +1 -0
  134. package/dist/contracts.d.ts +14 -2
  135. package/dist/contracts.d.ts.map +1 -1
  136. package/dist/contracts.js +16 -7
  137. package/dist/contracts.js.map +1 -1
  138. package/dist/cover.d.ts +17 -3
  139. package/dist/cover.d.ts.map +1 -1
  140. package/dist/cover.js +43 -20
  141. package/dist/cover.js.map +1 -1
  142. package/dist/credits.d.ts +31 -12
  143. package/dist/credits.d.ts.map +1 -1
  144. package/dist/credits.js +41 -25
  145. package/dist/credits.js.map +1 -1
  146. package/dist/deployments.d.ts +31 -57
  147. package/dist/deployments.d.ts.map +1 -1
  148. package/dist/deployments.js +5 -53
  149. package/dist/deployments.js.map +1 -1
  150. package/dist/index.d.ts +4 -2
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +6 -5
  153. package/dist/index.js.map +1 -1
  154. package/dist/pressing.d.ts +8 -7
  155. package/dist/pressing.d.ts.map +1 -1
  156. package/dist/pressing.js +91 -32
  157. package/dist/pressing.js.map +1 -1
  158. package/dist/read/artist.js +3 -3
  159. package/dist/read/artist.js.map +1 -1
  160. package/dist/read/catalog.d.ts +14 -9
  161. package/dist/read/catalog.d.ts.map +1 -1
  162. package/dist/read/catalog.js +72 -37
  163. package/dist/read/catalog.js.map +1 -1
  164. package/dist/read/client.d.ts +4 -2
  165. package/dist/read/client.d.ts.map +1 -1
  166. package/dist/read/client.js +15 -4
  167. package/dist/read/client.js.map +1 -1
  168. package/dist/read/config.d.ts +14 -11
  169. package/dist/read/config.d.ts.map +1 -1
  170. package/dist/read/config.js +10 -37
  171. package/dist/read/config.js.map +1 -1
  172. package/dist/read/index.d.ts +2 -2
  173. package/dist/read/index.d.ts.map +1 -1
  174. package/dist/read/index.js +1 -1
  175. package/dist/read/index.js.map +1 -1
  176. package/dist/read/receipts.d.ts +24 -7
  177. package/dist/read/receipts.d.ts.map +1 -1
  178. package/dist/read/receipts.js +78 -25
  179. package/dist/read/receipts.js.map +1 -1
  180. package/dist/read/types.d.ts +45 -25
  181. package/dist/read/types.d.ts.map +1 -1
  182. package/dist/read/types.js +2 -2
  183. package/dist/read/types.js.map +1 -1
  184. package/dist/read/works.d.ts.map +1 -1
  185. package/dist/read/works.js +6 -1
  186. package/dist/read/works.js.map +1 -1
  187. package/dist/recording-extensions.d.ts +37 -0
  188. package/dist/recording-extensions.d.ts.map +1 -0
  189. package/dist/recording-extensions.js +61 -0
  190. package/dist/recording-extensions.js.map +1 -0
  191. package/dist/release-extensions.d.ts +92 -0
  192. package/dist/release-extensions.d.ts.map +1 -0
  193. package/dist/release-extensions.js +175 -0
  194. package/dist/release-extensions.js.map +1 -0
  195. package/dist/release-graph.d.ts +17 -32
  196. package/dist/release-graph.d.ts.map +1 -1
  197. package/dist/release-graph.js +57 -57
  198. package/dist/release-graph.js.map +1 -1
  199. package/dist/transactions.d.ts +43 -26
  200. package/dist/transactions.d.ts.map +1 -1
  201. package/dist/transactions.js +50 -31
  202. package/dist/transactions.js.map +1 -1
  203. package/dist/vault.d.ts +268 -0
  204. package/dist/vault.d.ts.map +1 -0
  205. package/dist/vault.js +389 -0
  206. package/dist/vault.js.map +1 -0
  207. package/package.json +21 -11
  208. package/src/client.ts +428 -61
  209. package/src/contracts/composition_routed_stake/composition_routed_stake.ts +346 -0
  210. package/src/contracts/composition_routed_stake/witness.ts +11 -0
  211. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +151 -35
  212. package/src/contracts/composition_royalty_pool/witness.ts +7 -0
  213. package/src/contracts/genre/genre.ts +151 -0
  214. package/src/contracts/recording_advisory/recording_advisory.ts +315 -0
  215. package/src/contracts/recording_language/deps/language_code/language_code.ts +7 -0
  216. package/src/contracts/recording_language/recording_language.ts +237 -0
  217. package/src/contracts/recording_master_reference/deps/ori/walrus_data.ts +36 -0
  218. package/src/contracts/recording_master_reference/recording_master_reference.ts +181 -0
  219. package/src/contracts/recording_preview/deps/ori/walrus_data.ts +36 -0
  220. package/src/contracts/recording_preview/recording_preview.ts +154 -0
  221. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +152 -35
  222. package/src/contracts/recording_royalty_pool/witness.ts +7 -0
  223. package/src/contracts/release_description/release_description.ts +167 -0
  224. package/src/contracts/release_dsp_link/release_dsp_link.ts +813 -0
  225. package/src/contracts/release_genre/deps/per_track/per_track.ts +36 -0
  226. package/src/contracts/release_genre/release_genre.ts +314 -0
  227. package/src/contracts/release_kind/release_kind.ts +153 -0
  228. package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +178 -0
  229. package/src/contracts/release_revenue_distributor/witness.ts +11 -0
  230. package/src/contracts/release_snapshot_bundle/deps/ori/walrus_data.ts +36 -0
  231. package/src/contracts/release_snapshot_bundle/release_snapshot_bundle.ts +124 -0
  232. package/src/contracts/routed_stake/deps/royalty_pool/stake.ts +39 -0
  233. package/src/contracts/routed_stake/deps/std/type_name.ts +22 -0
  234. package/src/contracts/routed_stake/deps/sui/balance.ts +17 -0
  235. package/src/contracts/routed_stake/deps/sui/vec_map.ts +33 -0
  236. package/src/contracts/routed_stake/routed_stake.ts +508 -0
  237. package/src/contracts/royalty_pool/pool.ts +34 -24
  238. package/src/contracts/vault/deps/sui/bag.ts +39 -0
  239. package/src/contracts/vault/deps/sui/borrow.ts +25 -0
  240. package/src/contracts/vault/vault.ts +454 -0
  241. package/src/contracts.ts +17 -9
  242. package/src/cover.ts +62 -37
  243. package/src/credits.ts +64 -51
  244. package/src/deployments.ts +36 -97
  245. package/src/index.ts +11 -5
  246. package/src/pressing.ts +135 -39
  247. package/src/read/artist.ts +3 -3
  248. package/src/read/catalog.ts +100 -44
  249. package/src/read/client.ts +20 -4
  250. package/src/read/config.ts +23 -49
  251. package/src/read/index.ts +3 -1
  252. package/src/read/receipts.ts +103 -26
  253. package/src/read/types.ts +46 -27
  254. package/src/read/works.ts +6 -1
  255. package/src/recording-extensions.ts +102 -0
  256. package/src/release-extensions.ts +286 -0
  257. package/src/release-graph.ts +70 -96
  258. package/src/transactions.ts +81 -59
  259. package/src/vault.ts +777 -0
  260. package/dist/contracts/miso_drop/drop.d.ts +0 -550
  261. package/dist/contracts/miso_drop/drop.d.ts.map +0 -1
  262. package/dist/contracts/miso_drop/drop.js +0 -523
  263. package/dist/contracts/miso_drop/drop.js.map +0 -1
  264. package/dist/contracts/release_registry/release_registry.d.ts +0 -114
  265. package/dist/contracts/release_registry/release_registry.d.ts.map +0 -1
  266. package/dist/contracts/release_registry/release_registry.js +0 -119
  267. package/dist/contracts/release_registry/release_registry.js.map +0 -1
  268. package/dist/drop.d.ts +0 -127
  269. package/dist/drop.d.ts.map +0 -1
  270. package/dist/drop.js +0 -202
  271. package/dist/drop.js.map +0 -1
  272. package/dist/extensions/royalty-pool.d.ts +0 -32
  273. package/dist/extensions/royalty-pool.d.ts.map +0 -1
  274. package/dist/extensions/royalty-pool.js +0 -33
  275. package/dist/extensions/royalty-pool.js.map +0 -1
  276. package/src/contracts/miso_drop/drop.ts +0 -798
  277. package/src/contracts/release_registry/release_registry.ts +0 -160
  278. package/src/drop.ts +0 -376
  279. package/src/extensions/royalty-pool.ts +0 -90
@@ -16,7 +16,7 @@
16
16
  // minato, publishing (sharing) the work, and transferring its admin cap is
17
17
  // an opinion about economics;
18
18
  // - minting a release is a platform primitive: core's `release::new` takes an
19
- // unconstructible PTB `&mut UID`, so `release_registry::new_release` is the
19
+ // unconstructible PTB `&mut UID`, so core `release::new(registry, …)` is the
20
20
  // canonical client path. Choosing a track-assembly strategy, publishing
21
21
  // (sharing) it, and picking a recipient for its `ReleaseAdminCap` is the
22
22
  // opinion, so `finalizeRelease` / `publishRelease` live here.
@@ -42,7 +42,7 @@ import {
42
42
  type ShareCurrencyBinding,
43
43
  type TxThunk,
44
44
  } from "@misonetwork/sdk";
45
- import * as releaseRegistry from "./contracts/release_registry/release_registry.ts";
45
+ import { asU64, directAdminCap, disposeNewAdminCap, invokeWithAdminCap, type AdminCapAuthority, type AdminCapCustody, type U64Input } from "./vault.ts";
46
46
 
47
47
  const { track, release } = contracts;
48
48
 
@@ -55,13 +55,45 @@ interface ReleaseParts {
55
55
  // the same nominal shape rather than a structurally-identical twin.
56
56
  export type { TxThunk };
57
57
 
58
+ /** New custody is explicit; the legacy address shape remains mutually exclusive. */
59
+ export type AdminCustodyInput =
60
+ | { readonly adminCustody: AdminCapCustody; readonly adminAddress?: never }
61
+ | { readonly adminCustody?: never; readonly adminAddress: string };
62
+ export type RecordingAuthorityInput =
63
+ | { readonly recordingAuthority: AdminCapAuthority; readonly recordingAdminCapId?: never }
64
+ | { readonly recordingAuthority?: never; readonly recordingAdminCapId: string };
65
+
66
+ export function custodyOf(input: AdminCustodyInput): AdminCapCustody {
67
+ if (input.adminCustody !== undefined) return input.adminCustody;
68
+ if (input.adminAddress !== undefined) return { kind: "direct", owner: input.adminAddress };
69
+ throw new Error("admin custody is required");
70
+ }
71
+ export function recordingAuthorityOf(input: RecordingAuthorityInput): AdminCapAuthority {
72
+ if (input.recordingAuthority !== undefined) return input.recordingAuthority;
73
+ if (input.recordingAdminCapId !== undefined) return directAdminCap(input.recordingAdminCapId);
74
+ throw new Error("recording authority is required");
75
+ }
76
+
77
+ /** Reject a malformed multi-result command before it becomes a PTB argument. */
78
+ export function requiredCommandResult<T>(
79
+ result: { readonly [index: number]: T | undefined },
80
+ index: number,
81
+ command: string,
82
+ ): T {
83
+ const value = result[index];
84
+ if (value === undefined) {
85
+ throw new Error(`${command} did not return result ${index}`);
86
+ }
87
+ return value;
88
+ }
89
+
58
90
  // ============================================================================
59
91
  // Share dispersal (minato)
60
92
  // ============================================================================
61
93
 
62
94
  export interface ShareRecipient {
63
95
  address: string;
64
- value: number;
96
+ value: U64Input;
65
97
  }
66
98
 
67
99
  /**
@@ -81,7 +113,7 @@ export function disperseShares(
81
113
  typeArguments: [shareType],
82
114
  arguments: [
83
115
  balance,
84
- tx.makeMoveVec({ type: "u64", elements: recipients.map((r) => tx.pure.u64(r.value)) }),
116
+ tx.makeMoveVec({ type: "u64", elements: recipients.map((r) => tx.pure.u64(asU64("share recipient value", r.value)))}),
85
117
  tx.makeMoveVec({ type: "address", elements: recipients.map((r) => tx.pure.address(r.address)) }),
86
118
  ],
87
119
  });
@@ -130,14 +162,14 @@ export function initializeShareCurrency(params: InitializeShareCurrencyParams):
130
162
  // Composition
131
163
  // ============================================================================
132
164
 
133
- export interface FinalizeCompositionParams extends CompositionParts {
165
+ interface FinalizeCompositionParamsBase extends CompositionParts {
134
166
  /** The composition's `share::Share` type. */
135
167
  shareType: string;
136
168
  shareRecipients: ShareRecipient[];
137
- adminAddress: string;
138
169
  misoPackageId: string;
139
170
  minatoPackageId: string;
140
171
  }
172
+ export type FinalizeCompositionParams = FinalizeCompositionParamsBase & AdminCustodyInput;
141
173
 
142
174
  /**
143
175
  * The opinionated finish for a composition: disperse its share supply to
@@ -148,18 +180,17 @@ export interface FinalizeCompositionParams extends CompositionParts {
148
180
  export function finalizeComposition(tx: Transaction, params: FinalizeCompositionParams): void {
149
181
  disperseShares(tx, params.minatoPackageId, params.shareType, params.balance, params.shareRecipients);
150
182
  tx.add(contracts.composition.publish({ package: params.misoPackageId, typeArguments: [params.shareType], arguments: [params.composition, params.adminCap] }));
151
- tx.transferObjects([params.adminCap], params.adminAddress);
183
+ disposeNewAdminCap(tx, params.adminCap, custodyOf(params));
152
184
  }
153
185
 
154
- export interface PublishCompositionParams extends ShareCurrencyBinding {
186
+ interface PublishCompositionParamsBase extends ShareCurrencyBinding {
155
187
  title: string;
156
188
  royaltyRateBps: number;
157
189
  shareRecipients: ShareRecipient[];
158
- /** Sole owner of the shares + CompositionAdminCap (the zkLogin address). */
159
- adminAddress: string;
160
190
  misoPackageId: string;
161
191
  minatoPackageId: string;
162
192
  }
193
+ export type PublishCompositionParams = PublishCompositionParamsBase & AdminCustodyInput;
163
194
 
164
195
  /** Convenience: publish a composition end-to-end (createComposition → finalizeComposition). */
165
196
  export function publishComposition(params: PublishCompositionParams): TxThunk {
@@ -176,7 +207,7 @@ export function publishComposition(params: PublishCompositionParams): TxThunk {
176
207
  ...parts,
177
208
  shareType: params.shareType,
178
209
  shareRecipients: params.shareRecipients,
179
- adminAddress: params.adminAddress,
210
+ adminCustody: custodyOf(params),
180
211
  misoPackageId: params.misoPackageId,
181
212
  minatoPackageId: params.minatoPackageId,
182
213
  });
@@ -187,16 +218,16 @@ export function publishComposition(params: PublishCompositionParams): TxThunk {
187
218
  // Recording
188
219
  // ============================================================================
189
220
 
190
- export interface FinalizeRecordingParams extends RecordingParts {
221
+ interface FinalizeRecordingParamsBase extends RecordingParts {
191
222
  /** The recording's own `share::Share` type. */
192
223
  recordingShareType: string;
193
224
  /** Share type of the parent composition. */
194
225
  compositionShareType: string;
195
226
  shareRecipients: ShareRecipient[];
196
- adminAddress: string;
197
227
  misoPackageId: string;
198
228
  minatoPackageId: string;
199
229
  }
230
+ export type FinalizeRecordingParams = FinalizeRecordingParamsBase & AdminCustodyInput;
200
231
 
201
232
  /**
202
233
  * The opinionated finish for a recording: publish (share) it, disperse its
@@ -207,10 +238,10 @@ export function finalizeRecording(tx: Transaction, params: FinalizeRecordingPara
207
238
  const typeArguments: [string, string] = [params.recordingShareType, params.compositionShareType];
208
239
  tx.add(contracts.recording.publish({ package: params.misoPackageId, typeArguments, arguments: [params.recording, params.adminCap] }));
209
240
  disperseShares(tx, params.minatoPackageId, params.recordingShareType, params.balance, params.shareRecipients);
210
- tx.transferObjects([params.adminCap], params.adminAddress);
241
+ disposeNewAdminCap(tx, params.adminCap, custodyOf(params));
211
242
  }
212
243
 
213
- export interface PublishRecordingParams extends ShareCurrencyBinding {
244
+ interface PublishRecordingParamsBase extends ShareCurrencyBinding {
214
245
  /**
215
246
  * Parent composition, referenced as an on-chain object. Read-only at
216
247
  * `recording::new` (only its royalty rate and id are read).
@@ -219,12 +250,10 @@ export interface PublishRecordingParams extends ShareCurrencyBinding {
219
250
  /** Share type of the parent composition (the recording's `CompositionShare` phantom). */
220
251
  compositionShareType: string;
221
252
  shareRecipients: ShareRecipient[];
222
- adminAddress: string;
223
- /** Slippage guard for `recording::new` — pass the composition rate you observed (default: protocol max). */
224
- maxRoyaltyRateBps?: number;
225
253
  misoPackageId: string;
226
254
  minatoPackageId: string;
227
255
  }
256
+ export type PublishRecordingParams = PublishRecordingParamsBase & AdminCustodyInput;
228
257
 
229
258
  /** Convenience: publish a recording against an already-on-chain composition. */
230
259
  export function publishRecording(params: PublishRecordingParams): TxThunk {
@@ -235,7 +264,6 @@ export function publishRecording(params: PublishRecordingParams): TxThunk {
235
264
  shareTreasuryCapId: params.shareTreasuryCapId,
236
265
  compositionShareType: params.compositionShareType,
237
266
  composition: tx.object(params.compositionId),
238
- maxRoyaltyRateBps: params.maxRoyaltyRateBps,
239
267
  misoPackageId: params.misoPackageId,
240
268
  } satisfies CreateRecordingParams);
241
269
  finalizeRecording(tx, {
@@ -243,7 +271,7 @@ export function publishRecording(params: PublishRecordingParams): TxThunk {
243
271
  recordingShareType: params.shareType,
244
272
  compositionShareType: params.compositionShareType,
245
273
  shareRecipients: params.shareRecipients,
246
- adminAddress: params.adminAddress,
274
+ adminCustody: custodyOf(params),
247
275
  misoPackageId: params.misoPackageId,
248
276
  minatoPackageId: params.minatoPackageId,
249
277
  });
@@ -258,9 +286,9 @@ export interface PublishCompositionAndRecordingParams {
258
286
  title: string;
259
287
  royaltyRateBps: number;
260
288
  /** Share-currency binding for the composition. */
261
- composition: ShareCurrencyBinding & { shareRecipients: ShareRecipient[]; adminAddress: string };
289
+ composition: ShareCurrencyBinding & { shareRecipients: ShareRecipient[] } & AdminCustodyInput;
262
290
  /** Share-currency binding for the recording. */
263
- recording: ShareCurrencyBinding & { shareRecipients: ShareRecipient[]; adminAddress: string };
291
+ recording: ShareCurrencyBinding & { shareRecipients: ShareRecipient[] } & AdminCustodyInput;
264
292
  misoPackageId: string;
265
293
  minatoPackageId: string;
266
294
  }
@@ -287,15 +315,14 @@ export function publishCompositionAndRecording(params: PublishCompositionAndReco
287
315
  } satisfies CreateCompositionParams);
288
316
 
289
317
  // Borrow the still-unshared composition into recording::new before publishing it.
290
- // The composition is created in this PTB with a known rate, so the slippage
291
- // guard pins that exact value front-running is structurally impossible here.
318
+ // The composition's royalty rate is immutable once set at `composition::new`,
319
+ // so `recording::new` reads exactly the rate this PTB just created it with.
292
320
  const rec = createRecording(tx, {
293
321
  shareType: params.recording.shareType,
294
322
  shareCurrencyId: params.recording.shareCurrencyId,
295
323
  shareTreasuryCapId: params.recording.shareTreasuryCapId,
296
324
  compositionShareType: params.composition.shareType,
297
325
  composition: comp.composition,
298
- maxRoyaltyRateBps: params.royaltyRateBps,
299
326
  misoPackageId: params.misoPackageId,
300
327
  } satisfies CreateRecordingParams);
301
328
 
@@ -303,7 +330,7 @@ export function publishCompositionAndRecording(params: PublishCompositionAndReco
303
330
  ...comp,
304
331
  shareType: params.composition.shareType,
305
332
  shareRecipients: params.composition.shareRecipients,
306
- adminAddress: params.composition.adminAddress,
333
+ adminCustody: custodyOf(params.composition),
307
334
  misoPackageId: params.misoPackageId,
308
335
  minatoPackageId: params.minatoPackageId,
309
336
  });
@@ -313,7 +340,7 @@ export function publishCompositionAndRecording(params: PublishCompositionAndReco
313
340
  recordingShareType: params.recording.shareType,
314
341
  compositionShareType: params.composition.shareType,
315
342
  shareRecipients: params.recording.shareRecipients,
316
- adminAddress: params.recording.adminAddress,
343
+ adminCustody: custodyOf(params.recording),
317
344
  misoPackageId: params.misoPackageId,
318
345
  minatoPackageId: params.minatoPackageId,
319
346
  });
@@ -324,17 +351,17 @@ export function publishCompositionAndRecording(params: PublishCompositionAndReco
324
351
  // Release
325
352
  // ============================================================================
326
353
 
327
- export interface FinalizeReleaseParams extends ReleaseParts {
328
- /** Recipient of the `ReleaseAdminCap`. */
329
- adminAddress: string;
354
+ interface FinalizeReleaseParamsBase extends ReleaseParts {
355
+ /** Explicit direct delivery or Vault custody for the ReleaseAdminCap. */
330
356
  misoPackageId: string;
331
357
  }
358
+ export type FinalizeReleaseParams = FinalizeReleaseParamsBase & AdminCustodyInput;
332
359
 
333
360
  /**
334
361
  * The opinionated finish for a release: publish (share) it and transfer its
335
362
  * admin cap to `adminAddress`.
336
363
  *
337
- * MUST run in the same PTB as the `release_registry::new_release` that produced
364
+ * MUST run in the same PTB as `release::new(registry, …)` that produced
338
365
  * these parts —
339
366
  * `Release` is `key`-only with no `drop`, so an unpublished release cannot
340
367
  * outlive its transaction. Splitting create from finalize is what lets a caller
@@ -343,31 +370,31 @@ export interface FinalizeReleaseParams extends ReleaseParts {
343
370
  */
344
371
  export function finalizeRelease(tx: Transaction, params: FinalizeReleaseParams): void {
345
372
  tx.add(release.publish({ package: params.misoPackageId, arguments: [params.release, params.adminCap] }));
346
- tx.transferObjects([params.adminCap], tx.pure.address(params.adminAddress));
373
+ disposeNewAdminCap(tx, params.adminCap, custodyOf(params));
347
374
  }
348
375
 
349
- export interface TrackInput {
376
+ interface TrackInputBase {
350
377
  recordingId: string;
351
- recordingAdminCapId: string;
378
+ /** Explicit legacy direct cap or Vault custody authority for this recording. */
352
379
  /** Share type of the recording (the track `RecordingShare` phantom). */
353
380
  recordingShareType: string;
354
381
  /** Share type of the parent composition (the track `CompositionShare` phantom). */
355
382
  compositionShareType: string;
356
383
  splitBps: number;
357
384
  }
385
+ export type TrackInput = TrackInputBase & RecordingAuthorityInput;
358
386
 
359
- export interface PublishReleaseParams {
387
+ interface PublishReleaseParamsBase {
360
388
  title: string;
361
389
  /** The ordered tracklist. Display grouping (discs/sides) is extension data. */
362
390
  tracks: TrackInput[];
363
- /** `release_registry` extension package, distinct from its shared object id. */
364
- releaseRegistryPackageId: string;
391
+ /** Shared core `miso::release::ReleaseRegistry` object. */
365
392
  releaseRegistryId: string;
366
393
  releaseId: string;
367
394
  releaseNonce: string;
368
395
  misoPackageId: string;
369
- adminAddress: string;
370
396
  }
397
+ export type PublishReleaseParams = PublishReleaseParamsBase & AdminCustodyInput;
371
398
 
372
399
  function buildTrackVec(
373
400
  tx: Transaction,
@@ -383,29 +410,24 @@ function buildTrackVec(
383
410
  */
384
411
  export function publishRelease(params: PublishReleaseParams): TxThunk {
385
412
  return (tx) => {
386
- const { misoPackageId, releaseRegistryPackageId } = params;
413
+ const { misoPackageId } = params;
387
414
  const trackArgs = params.tracks.map((t) => {
388
415
  const typeArguments: [string, string] = [t.recordingShareType, t.compositionShareType];
389
- return tx.add(
390
- track._new({
391
- package: misoPackageId,
392
- typeArguments,
393
- arguments: [tx.object(t.recordingAdminCapId), tx.object(t.recordingId), tx.pure.id(params.releaseId), tx.pure.u16(t.splitBps)],
394
- }),
395
- );
416
+ return invokeWithAdminCap(tx, recordingAuthorityOf(t), {
417
+ target: `${misoPackageId}::track::new`,
418
+ typeArguments,
419
+ arguments: [tx.object(t.recordingId), tx.pure.id(params.releaseId), tx.pure.u16(t.splitBps)],
420
+ adminCapIndex: 0,
421
+ });
422
+ });
423
+ const created = tx.moveCall({
424
+ target: `${misoPackageId}::release::new`,
425
+ arguments: [tx.object(params.releaseRegistryId), tx.pure.string(params.title), buildTrackVec(tx, misoPackageId, trackArgs), tx.pure.u256(BigInt(params.releaseNonce))],
396
426
  });
397
- const created = tx.add(
398
- releaseRegistry.newRelease({
399
- package: releaseRegistryPackageId,
400
- arguments: [
401
- tx.object(params.releaseRegistryId),
402
- tx.pure.string(params.title),
403
- buildTrackVec(tx, misoPackageId, trackArgs),
404
- tx.pure.u256(BigInt(params.releaseNonce)),
405
- ],
406
- }),
407
- );
408
- const parts: ReleaseParts = { release: created[0]!, adminCap: created[1]! };
409
- finalizeRelease(tx, { ...parts, adminAddress: params.adminAddress, misoPackageId });
427
+ const parts: ReleaseParts = {
428
+ release: requiredCommandResult(created, 0, "release::new"),
429
+ adminCap: requiredCommandResult(created, 1, "release::new"),
430
+ };
431
+ finalizeRelease(tx, { ...parts, ...params, misoPackageId });
410
432
  };
411
433
  }