@misofm/sdk 0.9.0 → 0.11.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 (265) hide show
  1. package/README.md +88 -56
  2. package/dist/client.d.ts +121 -18
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +200 -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/routed_stake/deps/royalty_pool/stake.d.ts +54 -0
  91. package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts.map +1 -0
  92. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js +37 -0
  93. package/dist/contracts/routed_stake/deps/royalty_pool/stake.js.map +1 -0
  94. package/dist/contracts/routed_stake/deps/std/type_name.d.ts +18 -0
  95. package/dist/contracts/routed_stake/deps/std/type_name.d.ts.map +1 -0
  96. package/dist/contracts/routed_stake/deps/std/type_name.js +20 -0
  97. package/dist/contracts/routed_stake/deps/std/type_name.js.map +1 -0
  98. package/dist/contracts/routed_stake/deps/sui/balance.d.ts +13 -0
  99. package/dist/contracts/routed_stake/deps/sui/balance.d.ts.map +1 -0
  100. package/dist/contracts/routed_stake/deps/sui/balance.js +15 -0
  101. package/dist/contracts/routed_stake/deps/sui/balance.js.map +1 -0
  102. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts +37 -0
  103. package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts.map +1 -0
  104. package/dist/contracts/routed_stake/deps/sui/vec_map.js +28 -0
  105. package/dist/contracts/routed_stake/deps/sui/vec_map.js.map +1 -0
  106. package/dist/contracts/routed_stake/routed_stake.d.ts +356 -0
  107. package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -0
  108. package/dist/contracts/routed_stake/routed_stake.js +311 -0
  109. package/dist/contracts/routed_stake/routed_stake.js.map +1 -0
  110. package/dist/contracts/royalty_pool/pool.d.ts +27 -17
  111. package/dist/contracts/royalty_pool/pool.d.ts.map +1 -1
  112. package/dist/contracts/royalty_pool/pool.js +26 -17
  113. package/dist/contracts/royalty_pool/pool.js.map +1 -1
  114. package/dist/contracts/vault/deps/sui/bag.d.ts +35 -0
  115. package/dist/contracts/vault/deps/sui/bag.d.ts.map +1 -0
  116. package/dist/contracts/vault/deps/sui/bag.js +37 -0
  117. package/dist/contracts/vault/deps/sui/bag.js.map +1 -0
  118. package/dist/contracts/vault/deps/sui/borrow.d.ts +20 -0
  119. package/dist/contracts/vault/deps/sui/borrow.d.ts.map +1 -0
  120. package/dist/contracts/vault/deps/sui/borrow.js +21 -0
  121. package/dist/contracts/vault/deps/sui/borrow.js.map +1 -0
  122. package/dist/contracts/vault/vault.d.ts +276 -0
  123. package/dist/contracts/vault/vault.d.ts.map +1 -0
  124. package/dist/contracts/vault/vault.js +274 -0
  125. package/dist/contracts/vault/vault.js.map +1 -0
  126. package/dist/contracts.d.ts +13 -2
  127. package/dist/contracts.d.ts.map +1 -1
  128. package/dist/contracts.js +15 -7
  129. package/dist/contracts.js.map +1 -1
  130. package/dist/cover.d.ts +17 -3
  131. package/dist/cover.d.ts.map +1 -1
  132. package/dist/cover.js +43 -20
  133. package/dist/cover.js.map +1 -1
  134. package/dist/credits.d.ts +31 -12
  135. package/dist/credits.d.ts.map +1 -1
  136. package/dist/credits.js +41 -25
  137. package/dist/credits.js.map +1 -1
  138. package/dist/deployments.d.ts +30 -57
  139. package/dist/deployments.d.ts.map +1 -1
  140. package/dist/deployments.js +5 -53
  141. package/dist/deployments.js.map +1 -1
  142. package/dist/index.d.ts +4 -2
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +6 -5
  145. package/dist/index.js.map +1 -1
  146. package/dist/pressing.d.ts +8 -7
  147. package/dist/pressing.d.ts.map +1 -1
  148. package/dist/pressing.js +91 -32
  149. package/dist/pressing.js.map +1 -1
  150. package/dist/read/artist.js +3 -3
  151. package/dist/read/artist.js.map +1 -1
  152. package/dist/read/catalog.d.ts +14 -9
  153. package/dist/read/catalog.d.ts.map +1 -1
  154. package/dist/read/catalog.js +71 -37
  155. package/dist/read/catalog.js.map +1 -1
  156. package/dist/read/client.d.ts +4 -2
  157. package/dist/read/client.d.ts.map +1 -1
  158. package/dist/read/client.js +15 -4
  159. package/dist/read/client.js.map +1 -1
  160. package/dist/read/config.d.ts +14 -11
  161. package/dist/read/config.d.ts.map +1 -1
  162. package/dist/read/config.js +10 -37
  163. package/dist/read/config.js.map +1 -1
  164. package/dist/read/index.d.ts +2 -2
  165. package/dist/read/index.d.ts.map +1 -1
  166. package/dist/read/index.js +1 -1
  167. package/dist/read/index.js.map +1 -1
  168. package/dist/read/receipts.d.ts +24 -7
  169. package/dist/read/receipts.d.ts.map +1 -1
  170. package/dist/read/receipts.js +78 -25
  171. package/dist/read/receipts.js.map +1 -1
  172. package/dist/read/types.d.ts +43 -25
  173. package/dist/read/types.d.ts.map +1 -1
  174. package/dist/read/types.js +2 -2
  175. package/dist/read/types.js.map +1 -1
  176. package/dist/recording-extensions.d.ts +37 -0
  177. package/dist/recording-extensions.d.ts.map +1 -0
  178. package/dist/recording-extensions.js +61 -0
  179. package/dist/recording-extensions.js.map +1 -0
  180. package/dist/release-extensions.d.ts +84 -0
  181. package/dist/release-extensions.d.ts.map +1 -0
  182. package/dist/release-extensions.js +160 -0
  183. package/dist/release-extensions.js.map +1 -0
  184. package/dist/release-graph.d.ts +17 -26
  185. package/dist/release-graph.d.ts.map +1 -1
  186. package/dist/release-graph.js +55 -49
  187. package/dist/release-graph.js.map +1 -1
  188. package/dist/transactions.d.ts +43 -24
  189. package/dist/transactions.d.ts.map +1 -1
  190. package/dist/transactions.js +48 -27
  191. package/dist/transactions.js.map +1 -1
  192. package/dist/vault.d.ts +268 -0
  193. package/dist/vault.d.ts.map +1 -0
  194. package/dist/vault.js +389 -0
  195. package/dist/vault.js.map +1 -0
  196. package/package.json +17 -11
  197. package/src/client.ts +399 -61
  198. package/src/contracts/composition_routed_stake/composition_routed_stake.ts +346 -0
  199. package/src/contracts/composition_routed_stake/witness.ts +11 -0
  200. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +151 -35
  201. package/src/contracts/composition_royalty_pool/witness.ts +7 -0
  202. package/src/contracts/genre/genre.ts +151 -0
  203. package/src/contracts/recording_advisory/recording_advisory.ts +315 -0
  204. package/src/contracts/recording_language/deps/language_code/language_code.ts +7 -0
  205. package/src/contracts/recording_language/recording_language.ts +237 -0
  206. package/src/contracts/recording_master_reference/deps/ori/walrus_data.ts +36 -0
  207. package/src/contracts/recording_master_reference/recording_master_reference.ts +181 -0
  208. package/src/contracts/recording_preview/deps/ori/walrus_data.ts +36 -0
  209. package/src/contracts/recording_preview/recording_preview.ts +154 -0
  210. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +152 -35
  211. package/src/contracts/recording_royalty_pool/witness.ts +7 -0
  212. package/src/contracts/release_description/release_description.ts +167 -0
  213. package/src/contracts/release_dsp_link/release_dsp_link.ts +813 -0
  214. package/src/contracts/release_genre/deps/per_track/per_track.ts +36 -0
  215. package/src/contracts/release_genre/release_genre.ts +314 -0
  216. package/src/contracts/release_kind/release_kind.ts +153 -0
  217. package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +178 -0
  218. package/src/contracts/release_revenue_distributor/witness.ts +11 -0
  219. package/src/contracts/routed_stake/deps/royalty_pool/stake.ts +39 -0
  220. package/src/contracts/routed_stake/deps/std/type_name.ts +22 -0
  221. package/src/contracts/routed_stake/deps/sui/balance.ts +17 -0
  222. package/src/contracts/routed_stake/deps/sui/vec_map.ts +33 -0
  223. package/src/contracts/routed_stake/routed_stake.ts +508 -0
  224. package/src/contracts/royalty_pool/pool.ts +34 -24
  225. package/src/contracts/vault/deps/sui/bag.ts +39 -0
  226. package/src/contracts/vault/deps/sui/borrow.ts +25 -0
  227. package/src/contracts/vault/vault.ts +454 -0
  228. package/src/contracts.ts +16 -9
  229. package/src/cover.ts +62 -37
  230. package/src/credits.ts +64 -51
  231. package/src/deployments.ts +35 -97
  232. package/src/index.ts +11 -5
  233. package/src/pressing.ts +135 -39
  234. package/src/read/artist.ts +3 -3
  235. package/src/read/catalog.ts +99 -44
  236. package/src/read/client.ts +20 -4
  237. package/src/read/config.ts +23 -49
  238. package/src/read/index.ts +3 -1
  239. package/src/read/receipts.ts +103 -26
  240. package/src/read/types.ts +44 -27
  241. package/src/recording-extensions.ts +102 -0
  242. package/src/release-extensions.ts +261 -0
  243. package/src/release-graph.ts +68 -81
  244. package/src/transactions.ts +79 -53
  245. package/src/vault.ts +777 -0
  246. package/dist/contracts/miso_drop/drop.d.ts +0 -550
  247. package/dist/contracts/miso_drop/drop.d.ts.map +0 -1
  248. package/dist/contracts/miso_drop/drop.js +0 -523
  249. package/dist/contracts/miso_drop/drop.js.map +0 -1
  250. package/dist/contracts/release_registry/release_registry.d.ts +0 -114
  251. package/dist/contracts/release_registry/release_registry.d.ts.map +0 -1
  252. package/dist/contracts/release_registry/release_registry.js +0 -119
  253. package/dist/contracts/release_registry/release_registry.js.map +0 -1
  254. package/dist/drop.d.ts +0 -127
  255. package/dist/drop.d.ts.map +0 -1
  256. package/dist/drop.js +0 -202
  257. package/dist/drop.js.map +0 -1
  258. package/dist/extensions/royalty-pool.d.ts +0 -32
  259. package/dist/extensions/royalty-pool.d.ts.map +0 -1
  260. package/dist/extensions/royalty-pool.js +0 -33
  261. package/dist/extensions/royalty-pool.js.map +0 -1
  262. package/src/contracts/miso_drop/drop.ts +0 -798
  263. package/src/contracts/release_registry/release_registry.ts +0 -160
  264. package/src/drop.ts +0 -376
  265. package/src/extensions/royalty-pool.ts +0 -90
package/src/cover.ts CHANGED
@@ -18,15 +18,23 @@ import type { ClientWithCoreApi } from "@mysten/sui/client";
18
18
  import { bcs } from "@mysten/sui/bcs";
19
19
  import { deriveDynamicFieldID } from "@mysten/sui/utils";
20
20
  import type { TxThunk } from "./transactions.ts";
21
+ import { asU64, directAdminCap, invokeWithAdminCap, type AdminCapAuthority, type U64Input } from "./vault.ts";
21
22
  import { OPTION_NONE, OPTION_SOME } from "./internal.ts";
22
23
  import * as coverArt from "./contracts/cover_art/cover_art.ts";
23
24
  import * as releaseCoverArt from "./contracts/release_cover_art/release_cover_art.ts";
24
25
 
25
- export interface SetReleaseCoverParams {
26
+ type ReleaseAuthorityInput =
27
+ | { readonly authority: AdminCapAuthority; readonly releaseAdminCapId?: never }
28
+ | { readonly authority?: never; readonly releaseAdminCapId: string };
29
+ function releaseAuthorityOf(input: ReleaseAuthorityInput): AdminCapAuthority {
30
+ if (input.authority !== undefined) return input.authority;
31
+ if (input.releaseAdminCapId !== undefined) return directAdminCap(input.releaseAdminCapId);
32
+ throw new Error("release authority is required");
33
+ }
34
+
35
+ interface SetReleaseCoverParamsBase {
26
36
  /** The `Release` object to attach the cover to. */
27
37
  releaseId: string;
28
- /** The release's `ReleaseAdminCap`. */
29
- releaseAdminCapId: string;
30
38
  /** Walrus blob id of the still cover image, as `u256` (decimal string or bigint). */
31
39
  stillBlobId: bigint | string;
32
40
  /** Optional animated-cover Walrus blob id (`u256`); omit for a still-only cover. */
@@ -38,39 +46,60 @@ export interface SetReleaseCoverParams {
38
46
  /** `ori` package (home of `walrus_data::new_blob` / the `WalrusData` type). */
39
47
  oriPackageId: string;
40
48
  }
49
+ export type SetReleaseCoverParams = SetReleaseCoverParamsBase & ReleaseAuthorityInput;
50
+
51
+ export type SetReleaseTrackCoverParams = SetReleaseCoverParams & {
52
+ /** Zero-based index in the release's flattened tracklist. */
53
+ trackIndex: U64Input;
54
+ };
55
+
56
+ function buildCover(tx: Parameters<TxThunk>[0], p: SetReleaseCoverParams) {
57
+ const walrusType = `${p.oriPackageId}::walrus_data::WalrusData`;
58
+ const blob = (id: bigint | string) =>
59
+ tx.moveCall({
60
+ target: `${p.oriPackageId}::walrus_data::new_blob`,
61
+ arguments: [tx.pure.u256(id)],
62
+ });
63
+
64
+ const still = blob(p.stillBlobId);
65
+ const animated =
66
+ p.animatedBlobId == null
67
+ ? tx.moveCall({ target: OPTION_NONE, typeArguments: [walrusType] })
68
+ : tx.moveCall({
69
+ target: OPTION_SOME,
70
+ typeArguments: [walrusType],
71
+ arguments: [blob(p.animatedBlobId)],
72
+ });
73
+
74
+ return tx.add(
75
+ coverArt._new({
76
+ package: p.coverArtPackageId,
77
+ arguments: [still, animated],
78
+ }),
79
+ );
80
+ }
41
81
 
42
82
  /** Sets (or replaces) a release's album-level cover from Walrus blob ids. */
43
83
  export function setReleaseCover(p: SetReleaseCoverParams): TxThunk {
44
84
  return (tx) => {
45
- const walrusType = `${p.oriPackageId}::walrus_data::WalrusData`;
46
- const blob = (id: bigint | string) =>
47
- tx.moveCall({
48
- target: `${p.oriPackageId}::walrus_data::new_blob`,
49
- arguments: [tx.pure.u256(id)],
50
- });
51
-
52
- const still = blob(p.stillBlobId);
53
- const animated =
54
- p.animatedBlobId == null
55
- ? tx.moveCall({ target: OPTION_NONE, typeArguments: [walrusType] })
56
- : tx.moveCall({
57
- target: OPTION_SOME,
58
- typeArguments: [walrusType],
59
- arguments: [blob(p.animatedBlobId)],
60
- });
61
-
62
- const cover = tx.add(
63
- coverArt._new({
64
- package: p.coverArtPackageId,
65
- arguments: [still, animated],
66
- }),
67
- );
68
- tx.add(
69
- releaseCoverArt.setCover({
70
- package: p.releaseCoverArtPackageId,
71
- arguments: [p.releaseId, p.releaseAdminCapId, cover],
72
- }),
73
- );
85
+ const cover = buildCover(tx, p);
86
+ invokeWithAdminCap(tx, releaseAuthorityOf(p), {
87
+ target: `${p.releaseCoverArtPackageId}::release_cover_art::set_cover`,
88
+ arguments: [tx.object(p.releaseId), cover],
89
+ adminCapIndex: 1,
90
+ });
91
+ };
92
+ }
93
+
94
+ /** Sets (or replaces) one track's cover from Walrus blob ids. */
95
+ export function setReleaseTrackCover(p: SetReleaseTrackCoverParams): TxThunk {
96
+ return (tx) => {
97
+ const cover = buildCover(tx, p);
98
+ invokeWithAdminCap(tx, releaseAuthorityOf(p), {
99
+ target: `${p.releaseCoverArtPackageId}::release_cover_art::set_track_cover`,
100
+ arguments: [tx.object(p.releaseId), tx.pure.u64(asU64("trackIndex", p.trackIndex)), cover],
101
+ adminCapIndex: 1,
102
+ });
74
103
  };
75
104
  }
76
105
 
@@ -142,11 +171,7 @@ export async function getReleaseCover(
142
171
  ): Promise<ReleaseCoverView | null> {
143
172
  return (
144
173
  (
145
- await getReleaseCoversByIds(
146
- client,
147
- [releaseId],
148
- releaseCoverArtPackageId,
149
- )
174
+ await getReleaseCoversByIds(client, [releaseId], releaseCoverArtPackageId)
150
175
  )[releaseId] ?? null
151
176
  );
152
177
  }
package/src/credits.ts CHANGED
@@ -44,6 +44,30 @@ import * as recordingCredits from "./contracts/recording_credits/recording_credi
44
44
  import * as recordingPartyRole from "./contracts/recording_credits/recording_party_role.ts";
45
45
  import * as releaseCredits from "./contracts/release_credits/release_credits.ts";
46
46
  import * as releasePartyRole from "./contracts/release_credits/release_party_role.ts";
47
+ import { directAdminCap, invokeWithAdminCap, type AdminCapAuthority } from "./vault.ts";
48
+
49
+ type CompositionAuthorityInput =
50
+ | { readonly authority: AdminCapAuthority; readonly compositionAdminCapId?: never }
51
+ | { readonly authority?: never; readonly compositionAdminCapId: string };
52
+ type RecordingAuthorityInput =
53
+ | { readonly authority: AdminCapAuthority; readonly recordingAdminCapId?: never }
54
+ | { readonly authority?: never; readonly recordingAdminCapId: string };
55
+ type ReleaseAuthorityInput =
56
+ | { readonly authority: AdminCapAuthority; readonly releaseAdminCapId?: never }
57
+ | { readonly authority?: never; readonly releaseAdminCapId: string };
58
+
59
+ function compositionAuthorityOf(input: CompositionAuthorityInput): AdminCapAuthority {
60
+ if (input.authority !== undefined) return input.authority;
61
+ return directAdminCap(input.compositionAdminCapId);
62
+ }
63
+ function recordingAuthorityOf(input: RecordingAuthorityInput): AdminCapAuthority {
64
+ if (input.authority !== undefined) return input.authority;
65
+ return directAdminCap(input.recordingAdminCapId);
66
+ }
67
+ function releaseAuthorityOf(input: ReleaseAuthorityInput): AdminCapAuthority {
68
+ if (input.authority !== undefined) return input.authority;
69
+ return directAdminCap(input.releaseAdminCapId);
70
+ }
47
71
 
48
72
  // ── Role model ────────────────────────────────────────────────────────────────
49
73
 
@@ -341,11 +365,9 @@ function buildCredit(
341
365
 
342
366
  // ── Writers ───────────────────────────────────────────────────────────────────
343
367
 
344
- export interface AttachCompositionCreditParams {
368
+ interface AttachCompositionCreditParamsBase {
345
369
  /** The `Composition` object to credit on. */
346
370
  compositionId: string;
347
- /** The composition's `CompositionAdminCap`. */
348
- compositionAdminCapId: string;
349
371
  /** The `Party` being credited. */
350
372
  partyId: string;
351
373
  /** Human-readable name for the credit (≤200 bytes, non-empty). */
@@ -359,6 +381,8 @@ export interface AttachCompositionCreditParams {
359
381
  /** `miso_credit` package id (home of `credit::new`). */
360
382
  misoCreditPackageId: string;
361
383
  }
384
+ export type AttachCompositionCreditParams =
385
+ AttachCompositionCreditParamsBase & CompositionAuthorityInput;
362
386
 
363
387
  /**
364
388
  * Adds a writing credit for a party on a composition. Throws (client-side,
@@ -382,26 +406,18 @@ export function attachCompositionCredit(
382
406
  p.displayName,
383
407
  roleArgs,
384
408
  );
385
- tx.add(
386
- compositionCredits.addCredit({
387
- package: p.compositionCreditsPackageId,
388
- typeArguments: [p.compositionShareType],
389
- arguments: [
390
- p.compositionId,
391
- p.compositionAdminCapId,
392
- p.partyId,
393
- credit,
394
- ],
395
- }),
396
- );
409
+ invokeWithAdminCap(tx, compositionAuthorityOf(p), {
410
+ target: `${p.compositionCreditsPackageId}::composition_credits::add_credit`,
411
+ typeArguments: [p.compositionShareType],
412
+ arguments: [tx.object(p.compositionId), tx.object(p.partyId), credit],
413
+ adminCapIndex: 1,
414
+ });
397
415
  };
398
416
  }
399
417
 
400
- export interface AttachRecordingCreditParams {
418
+ interface AttachRecordingCreditParamsBase {
401
419
  /** The `Recording` object to credit on. */
402
420
  recordingId: string;
403
- /** The recording's `RecordingAdminCap`. */
404
- recordingAdminCapId: string;
405
421
  /** The `Party` being credited. */
406
422
  partyId: string;
407
423
  /** Human-readable name for the credit (≤200 bytes, non-empty). */
@@ -417,6 +433,8 @@ export interface AttachRecordingCreditParams {
417
433
  /** `miso_credit` package id (home of `credit::new`). */
418
434
  misoCreditPackageId: string;
419
435
  }
436
+ export type AttachRecordingCreditParams =
437
+ AttachRecordingCreditParamsBase & RecordingAuthorityInput;
420
438
 
421
439
  /**
422
440
  * Adds a production/performance credit for a party on a recording. Throws
@@ -439,21 +457,18 @@ export function attachRecordingCredit(p: AttachRecordingCreditParams): TxThunk {
439
457
  p.displayName,
440
458
  roleArgs,
441
459
  );
442
- tx.add(
443
- recordingCredits.addCredit({
444
- package: p.recordingCreditsPackageId,
445
- typeArguments: [p.recordingShareType, p.compositionShareType],
446
- arguments: [p.recordingId, p.recordingAdminCapId, p.partyId, credit],
447
- }),
448
- );
460
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
461
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_credit`,
462
+ typeArguments: [p.recordingShareType, p.compositionShareType],
463
+ arguments: [tx.object(p.recordingId), tx.object(p.partyId), credit],
464
+ adminCapIndex: 1,
465
+ });
449
466
  };
450
467
  }
451
468
 
452
- export interface AddRecordingArtistParams {
469
+ interface AddRecordingArtistParamsBase {
453
470
  /** The `Recording` object. */
454
471
  recordingId: string;
455
- /** The recording's `RecordingAdminCap`. */
456
- recordingAdminCapId: string;
457
472
  /** The `Party` to designate. Must already be credited on the recording. */
458
473
  partyId: string;
459
474
  /** The recording's own share coin type (the `RecordingShare` phantom). */
@@ -463,6 +478,8 @@ export interface AddRecordingArtistParams {
463
478
  /** `recording_credits` package id. */
464
479
  recordingCreditsPackageId: string;
465
480
  }
481
+ export type AddRecordingArtistParams =
482
+ AddRecordingArtistParamsBase & RecordingAuthorityInput;
466
483
 
467
484
  /**
468
485
  * Designates an already-credited party as a primary artist on a recording. The
@@ -473,13 +490,12 @@ export function addRecordingPrimaryArtist(
473
490
  p: AddRecordingArtistParams,
474
491
  ): TxThunk {
475
492
  return (tx) => {
476
- tx.add(
477
- recordingCredits.addPrimaryArtist({
478
- package: p.recordingCreditsPackageId,
479
- typeArguments: [p.recordingShareType, p.compositionShareType],
480
- arguments: [p.recordingId, p.recordingAdminCapId, p.partyId],
481
- }),
482
- );
493
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
494
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_primary_artist`,
495
+ typeArguments: [p.recordingShareType, p.compositionShareType],
496
+ arguments: [tx.object(p.recordingId), tx.object(p.partyId)],
497
+ adminCapIndex: 1,
498
+ });
483
499
  };
484
500
  }
485
501
 
@@ -492,21 +508,18 @@ export function addRecordingFeaturedArtist(
492
508
  p: AddRecordingArtistParams,
493
509
  ): TxThunk {
494
510
  return (tx) => {
495
- tx.add(
496
- recordingCredits.addFeaturedArtist({
497
- package: p.recordingCreditsPackageId,
498
- typeArguments: [p.recordingShareType, p.compositionShareType],
499
- arguments: [p.recordingId, p.recordingAdminCapId, p.partyId],
500
- }),
501
- );
511
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
512
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_featured_artist`,
513
+ typeArguments: [p.recordingShareType, p.compositionShareType],
514
+ arguments: [tx.object(p.recordingId), tx.object(p.partyId)],
515
+ adminCapIndex: 1,
516
+ });
502
517
  };
503
518
  }
504
519
 
505
- export interface AddReleaseCreditParams {
520
+ interface AddReleaseCreditParamsBase {
506
521
  /** The `Release` object to credit on. */
507
522
  releaseId: string;
508
- /** The release's `ReleaseAdminCap`. */
509
- releaseAdminCapId: string;
510
523
  /** The `Party` being credited. */
511
524
  partyId: string;
512
525
  /** Human-readable name for the credit (≤200 bytes, non-empty). */
@@ -518,6 +531,7 @@ export interface AddReleaseCreditParams {
518
531
  /** `miso_credit` package id (home of `credit::new`). */
519
532
  misoCreditPackageId: string;
520
533
  }
534
+ export type AddReleaseCreditParams = AddReleaseCreditParamsBase & ReleaseAuthorityInput;
521
535
 
522
536
  /**
523
537
  * Adds a top-line billing credit (a single role) for a party on a release.
@@ -536,12 +550,11 @@ export function addReleaseCredit(p: AddReleaseCreditParams): TxThunk {
536
550
  p.displayName,
537
551
  [roleArg],
538
552
  );
539
- tx.add(
540
- releaseCredits.addCredit({
541
- package: p.releaseCreditsPackageId,
542
- arguments: [p.releaseId, p.releaseAdminCapId, p.partyId, credit],
543
- }),
544
- );
553
+ invokeWithAdminCap(tx, releaseAuthorityOf(p), {
554
+ target: `${p.releaseCreditsPackageId}::release_credits::add_credit`,
555
+ arguments: [tx.object(p.releaseId), tx.object(p.partyId), credit],
556
+ adminCapIndex: 1,
557
+ });
545
558
  };
546
559
  }
547
560
 
@@ -1,10 +1,9 @@
1
1
  // Copyright (c) Miso Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import {
5
- MISO_PROTOCOL_DEPLOYMENTS,
6
- type MisoNetwork,
7
- type MisoProtocolDeployment,
4
+ import type {
5
+ MisoNetwork,
6
+ MisoProtocolDeployment,
8
7
  } from "@misonetwork/sdk/deployments";
9
8
 
10
9
  /** Complete on-chain identity used by the Miso platform SDK on one network. */
@@ -14,28 +13,46 @@ export interface MisoPlatformDeployment {
14
13
  readonly packages: {
15
14
  readonly pressing: string;
16
15
  readonly record: string;
17
- readonly releaseRegistry: string;
18
16
  readonly minato: string;
19
- readonly drop: string;
20
17
  readonly credit: string;
21
18
  readonly compositionCredits: string;
22
19
  readonly recordingCredits: string;
23
20
  readonly releaseCredits: string;
24
21
  /** Base royalty-pool value library. */
25
22
  readonly royaltyPool: string;
26
- /** Composition royalty-pool extension. */
27
- readonly compositionRoyaltyPool: string;
28
- /** Recording royalty-pool extension. */
29
- readonly recordingRoyaltyPool: string;
23
+ /** Shared custody package for protocol admin capabilities. */
24
+ readonly vault: string;
25
+ /** Vault plugin that creates and cranks Composition royalty pools. */
26
+ readonly compositionRoyaltyPoolPlugin: string;
27
+ /** Vault plugin that creates and cranks Recording royalty pools. */
28
+ readonly recordingRoyaltyPoolPlugin: string;
29
+ /** Generic stake wrapper used by the composition routed-stake plugin. */
30
+ readonly routedStake: string;
31
+ /** Vault plugin for Composition-owned Recording-share staking. */
32
+ readonly compositionRoutedStakePlugin: string;
30
33
  /** Cover-art value type used by the release cover extension. */
31
34
  readonly coverArt: string;
32
35
  readonly releaseCoverArt: string;
36
+ /** Curated Genre vocabulary package used by release_genre. */
37
+ readonly genre: string;
38
+ readonly releaseDescription: string;
39
+ readonly releaseDspLink: string;
40
+ readonly releaseGenre: string;
41
+ readonly releaseKind: string;
42
+ /** Vault plugin that routes Release revenue into Recording addresses. */
43
+ readonly releaseRevenueDistributorPlugin: string;
44
+ readonly recordingAdvisory: string;
45
+ readonly recordingLanguage: string;
46
+ readonly recordingMasterReference: string;
47
+ readonly recordingPreview: string;
33
48
  /** External `ori::walrus_data::WalrusData` dependency used by cover art. */
34
49
  readonly ori: string;
35
50
  };
36
51
  readonly objects: {
37
52
  readonly recordSettings: string;
38
53
  readonly releaseRegistry: string;
54
+ /** Shared parent used to derive canonical Genre object ids. */
55
+ readonly genreRegistry: string;
39
56
  };
40
57
  /** PartyOS packages used by the composed artist and wallet reads. */
41
58
  readonly party: {
@@ -63,100 +80,21 @@ export interface MisoPlatformDeployment {
63
80
  /**
64
81
  * Platform deployments bundled with this SDK release.
65
82
  *
66
- * Mainnet is intentionally absent until the complete platform stack is live.
67
- * Mainnet is intentionally unavailable until this ABI is deployed there.
83
+ * This release deliberately contains no bundled network deployment. The core
84
+ * protocol is being republished as an immutable stack, so every old package ID
85
+ * is an incompatible ABI and must not be selected by accident. The admin-cli
86
+ * deployment flow injects verified IDs in a follow-up change.
68
87
  */
69
- export const MISO_PLATFORM_DEPLOYMENTS = {
70
- testnet: {
71
- protocol: MISO_PROTOCOL_DEPLOYMENTS.testnet,
72
- packages: {
73
- pressing:
74
- "0xd0913b584d87a3891a8013c58644e3896f438fd948e819a69db256b47314974e",
75
- record:
76
- "0x97e2772d81528c69e21b6681f6702f90deae2a6b079e19da1df53f9f4fdd3271",
77
- releaseRegistry:
78
- "0x683b2feb784a815171d2976418345bd41c046e159dcf7a16890c766f69fd7808",
79
- minato:
80
- "0x8466e9864c1d947888e73b0e349b035bc22805579eef18f132966f56c8efe1d2",
81
- drop:
82
- "0xfc2b51f068dee9d5482d39fa017164f6a8c3601cabb59084a518de5f609ef1c7",
83
- credit:
84
- "0x0121926470393cc93b89b5b6d5067737a8bc0c1c545fb96c4447569174116174",
85
- compositionCredits:
86
- "0xfa2f62db28f2eb42c8c1a6533097fb2095649efab05c0527be1874b9be6cdc73",
87
- recordingCredits:
88
- "0xc794252bd90efb4cc224107f9dd0a56d4f4f5623783628b6af286f6535dd4c1e",
89
- releaseCredits:
90
- "0x42e2dbf6098d18782911460ecf79b338af2f1b654ef7ba99c6e7344fd4bf3f94",
91
- royaltyPool:
92
- "0x798fb353a5dbed51a0df08a7c10fdc432a11d60b55e016102ca635f9033c654d",
93
- compositionRoyaltyPool:
94
- "0xc22693ec50312492d7da23f3544625df637a92cd2be08e09d0f2eb8ff4e0e7ac",
95
- recordingRoyaltyPool:
96
- "0x33c9149889ef9e8078a5eba5c5486e8938e2dc69b3bd49a45c5c57e9f3d898a8",
97
- coverArt:
98
- "0xb29052d1174835a8061149aeca08f53551fa0691de64350247fc5cb558f797a0",
99
- releaseCoverArt:
100
- "0x831a612920343696de7e8f0603ff4c0b21c43ca3de478feb96d230e263cd11d4",
101
- ori:
102
- "0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78",
103
- },
104
- objects: {
105
- recordSettings:
106
- "0x6a005dad071562d421ad7a9d368289f5c9f0408ca495cd466a1f774d65a21fa7",
107
- releaseRegistry:
108
- "0x5941b8690916e762a7583363906496d64a6ea3e6cedb078c90e23e7c671544f2",
109
- },
110
- party: {
111
- partyPackageId:
112
- "0x09a812d46c3aa3978703c8e5a7409ba67b9ba2dfdb91154e48ebdd9d2415da0c",
113
- partyProfilePackageId:
114
- "0xce89d3f993dfebc0b697388598c3b01e9db7b73fa2e8df18ed22608cf7ac5aee",
115
- countryCodePackageId:
116
- "0x6c3a53f228ccd089825d0fb5ee1f0465a4b7a438bc1b1735b4e2f01df8d056e9",
117
- languageCodePackageId:
118
- "0xa18b786807cfc45488691f93aa647800b77cf9993e420d110afd7024c5b15948",
119
- partyMediaPackageId:
120
- "0x7db56ef37692f84c1cfb0e0b26bde35ac9f1bc0bcd91ac5d24b3f8b4d1821349",
121
- partyRolesPackageId:
122
- "0x41a442a2c39368af2181e73ea5b90e2e0b4f89de09050c121a6e7d79e7c84415",
123
- partyTagsPackageId:
124
- "0xa4c7f6b05bb9b612ea7640974c150ce31ad7927ea82d3f9f4673acac7deef0da",
125
- partyGenrePackageId:
126
- "0x6ce063438be6cf44ccf5f17bf8892c9e0cef4e2344442aeb44412beead74d3a8",
127
- partyCtaPackageId:
128
- "0x85a312210d9ddbae535e0f933032c8a56aa3f0fe1d6c3430d4fa538765008da3",
129
- partyPlatformLinkPackageId:
130
- "0x46d9f3e05d2065a926b010fe833baf61e5c250c233d512a260cbe746b02c56af",
131
- partySocialPackageId:
132
- "0x438e767ce8f5699f12be1704a12ff69c28045ca241f890ca8a978d55e09f6541",
133
- partyMusicPackageId:
134
- "0x89add347dfa779aa77e21b1853a37f2054dbecfce29799b61463d9900877b7b1",
135
- partyProLinkPackageId:
136
- "0xe5e8a0d02b43037abb7e6ddb4b742c6197aadf2dc19910957bba98307bef4103",
137
- partyFeaturedDropPackageId:
138
- "0x1a7b926686565a6cc82a9e0630839dc1f75c9bf4fafc0ba789a05af2c3c269f0",
139
- genrePackageId:
140
- "0xcbbce10e8b0781d458e88ce99d08e0c85f1e674c5b7ec975383d74f87a1d76b1",
141
- },
142
- legacy: {
143
- releaseCoverArtPackages: [
144
- "0x25c3c87ef4823d62d80dd8bda714ef4976df0f04453997646659a6cebadd655b",
145
- "0x1ee2cae0da7595d7973c310c912434ef531589b468cc57839296810c1385f7f6",
146
- "0x7d4a205a68f8e768a408c9f4c45a4d4076722c5edeba9068c0ac058f554e964e",
147
- ],
148
- },
149
- },
150
- } as const satisfies Partial<Record<MisoNetwork, MisoPlatformDeployment>>;
88
+ export const MISO_PLATFORM_DEPLOYMENTS = {} as const satisfies Partial<
89
+ Record<MisoNetwork, MisoPlatformDeployment>
90
+ >;
151
91
 
152
92
  /** Resolve a bundled platform deployment, failing closed when it is unavailable. */
153
93
  export function getMisoPlatformDeployment(
154
94
  network: string,
155
95
  ): MisoPlatformDeployment {
156
96
  const deployment = (
157
- MISO_PLATFORM_DEPLOYMENTS as Partial<
158
- Record<string, MisoPlatformDeployment>
159
- >
97
+ MISO_PLATFORM_DEPLOYMENTS as Partial<Record<string, MisoPlatformDeployment>>
160
98
  )[network];
161
99
  if (!deployment) {
162
100
  throw new Error(
package/src/index.ts CHANGED
@@ -14,9 +14,8 @@
14
14
  //
15
15
  // A release is protocol. Pressing a record off it and selling that record is
16
16
  // platform. Keeping the split at the package boundary is what stops the protocol
17
- // from quietly growing a storefront. Core's `release::new` is the sole practical
18
- // exception: it needs `&mut UID`, which cannot cross a PTB command boundary, so
19
- // the platform's `release_registry` extension owns the PTB-callable minting path.
17
+ // from quietly growing a storefront. Core `release::new` uses its shared
18
+ // `ReleaseRegistry` as the PTB-callable derivation parent.
20
19
  //
21
20
  // Extensions live on this side of the line for the same reason. An extension is
22
21
  // not part of what a Composition or Recording IS — it is a choice Miso makes
@@ -27,7 +26,12 @@
27
26
 
28
27
  // The recommended entry point is the client extension (see ./client.ts); the bare
29
28
  // builders and readers stay exported for callers that hold ids themselves.
30
- export { miso, misoPlatform, MisoClient, MisoPlatformClient } from "./client.ts";
29
+ export {
30
+ miso,
31
+ misoPlatform,
32
+ MisoClient,
33
+ MisoPlatformClient,
34
+ } from "./client.ts";
31
35
  export type {
32
36
  ConfiguredReleaseGraphParams,
33
37
  MisoOptions,
@@ -51,7 +55,9 @@ export * as read from "./read/index.ts";
51
55
  // `uid_mut` hook.
52
56
  export * from "./credits.ts";
53
57
  export * from "./cover.ts";
54
- export * from "./extensions/royalty-pool.ts";
58
+ export * from "./release-extensions.ts";
59
+ export * from "./recording-extensions.ts";
60
+ export * from "./vault.ts";
55
61
 
56
62
  // Generated, ABI-bound bindings (BCS structs + type-safe Move calls).
57
63
  export * as contracts from "./contracts.ts";