@misofm/platform 0.26.2 → 0.28.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 (428) hide show
  1. package/README.md +309 -204
  2. package/dist/Miso.d.ts +403 -0
  3. package/dist/Miso.d.ts.map +1 -0
  4. package/dist/Miso.js +455 -0
  5. package/dist/Miso.js.map +1 -0
  6. package/dist/auth.d.ts +11 -1
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +16 -3
  9. package/dist/auth.js.map +1 -1
  10. package/dist/catalog.d.ts +8 -5
  11. package/dist/catalog.d.ts.map +1 -1
  12. package/dist/catalog.js +36 -19
  13. package/dist/catalog.js.map +1 -1
  14. package/dist/client.d.ts +52 -443
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +58 -775
  17. package/dist/client.js.map +1 -1
  18. package/dist/contracts/composition_credits/composition_credits.d.ts +38 -48
  19. package/dist/contracts/composition_credits/composition_credits.d.ts.map +1 -1
  20. package/dist/contracts/composition_credits/composition_credits.js +20 -4
  21. package/dist/contracts/composition_credits/composition_credits.js.map +1 -1
  22. package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts +64 -1
  23. package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts.map +1 -1
  24. package/dist/contracts/composition_routed_stake/composition_routed_stake.js +66 -1
  25. package/dist/contracts/composition_routed_stake/composition_routed_stake.js.map +1 -1
  26. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +52 -4
  27. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -1
  28. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +52 -4
  29. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -1
  30. package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.d.ts +63 -1
  31. package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.d.ts.map +1 -1
  32. package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.js +63 -1
  33. package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.js.map +1 -1
  34. package/dist/contracts/genre/genre.d.ts +10 -1
  35. package/dist/contracts/genre/genre.d.ts.map +1 -1
  36. package/dist/contracts/genre/genre.js +8 -1
  37. package/dist/contracts/genre/genre.js.map +1 -1
  38. package/dist/contracts/miso_pay/deps/std/type_name.d.ts.map +1 -0
  39. package/dist/contracts/miso_pay/deps/std/type_name.js.map +1 -0
  40. package/dist/contracts/miso_pay/pay.d.ts +209 -0
  41. package/dist/contracts/miso_pay/pay.d.ts.map +1 -0
  42. package/dist/contracts/miso_pay/pay.js +195 -0
  43. package/dist/contracts/miso_pay/pay.js.map +1 -0
  44. package/dist/contracts/party_cta/party_cta.d.ts +49 -3
  45. package/dist/contracts/party_cta/party_cta.d.ts.map +1 -1
  46. package/dist/contracts/party_cta/party_cta.js +27 -5
  47. package/dist/contracts/party_cta/party_cta.js.map +1 -1
  48. package/dist/contracts/party_genre/party_genre.d.ts +25 -0
  49. package/dist/contracts/party_genre/party_genre.d.ts.map +1 -1
  50. package/dist/contracts/party_genre/party_genre.js +14 -3
  51. package/dist/contracts/party_genre/party_genre.js.map +1 -1
  52. package/dist/contracts/party_media/party_media.d.ts +19 -3
  53. package/dist/contracts/party_media/party_media.d.ts.map +1 -1
  54. package/dist/contracts/party_media/party_media.js +20 -4
  55. package/dist/contracts/party_media/party_media.js.map +1 -1
  56. package/dist/contracts/party_platform_link/party_platform_link.d.ts +15 -7
  57. package/dist/contracts/party_platform_link/party_platform_link.d.ts.map +1 -1
  58. package/dist/contracts/party_platform_link/party_platform_link.js +15 -7
  59. package/dist/contracts/party_platform_link/party_platform_link.js.map +1 -1
  60. package/dist/contracts/party_profile/party_profile.d.ts +63 -8
  61. package/dist/contracts/party_profile/party_profile.d.ts.map +1 -1
  62. package/dist/contracts/party_profile/party_profile.js +33 -8
  63. package/dist/contracts/party_profile/party_profile.js.map +1 -1
  64. package/dist/contracts/party_roles/party_roles.d.ts +28 -3
  65. package/dist/contracts/party_roles/party_roles.d.ts.map +1 -1
  66. package/dist/contracts/party_roles/party_roles.js +19 -4
  67. package/dist/contracts/party_roles/party_roles.js.map +1 -1
  68. package/dist/contracts/party_tags/party_tags.d.ts +23 -3
  69. package/dist/contracts/party_tags/party_tags.d.ts.map +1 -1
  70. package/dist/contracts/party_tags/party_tags.js +16 -4
  71. package/dist/contracts/party_tags/party_tags.js.map +1 -1
  72. package/dist/contracts/party_wallet/party_wallet.d.ts +4 -1
  73. package/dist/contracts/party_wallet/party_wallet.d.ts.map +1 -1
  74. package/dist/contracts/party_wallet/party_wallet.js +2 -1
  75. package/dist/contracts/party_wallet/party_wallet.js.map +1 -1
  76. package/dist/contracts/platform_link/platform_link.d.ts +207 -0
  77. package/dist/contracts/platform_link/platform_link.d.ts.map +1 -0
  78. package/dist/contracts/platform_link/platform_link.js +209 -0
  79. package/dist/contracts/platform_link/platform_link.js.map +1 -0
  80. package/dist/contracts/record/pressing.d.ts +53 -7
  81. package/dist/contracts/record/pressing.d.ts.map +1 -1
  82. package/dist/contracts/record/pressing.js +50 -4
  83. package/dist/contracts/record/pressing.js.map +1 -1
  84. package/dist/contracts/record/record.d.ts +14 -0
  85. package/dist/contracts/record/record.d.ts.map +1 -1
  86. package/dist/contracts/record/record.js +15 -1
  87. package/dist/contracts/record/record.js.map +1 -1
  88. package/dist/contracts/record_shop/listing.d.ts +80 -35
  89. package/dist/contracts/record_shop/listing.d.ts.map +1 -1
  90. package/dist/contracts/record_shop/listing.js +76 -13
  91. package/dist/contracts/record_shop/listing.js.map +1 -1
  92. package/dist/contracts/recording_advisory/recording_advisory.d.ts +15 -15
  93. package/dist/contracts/recording_advisory/recording_advisory.d.ts.map +1 -1
  94. package/dist/contracts/recording_advisory/recording_advisory.js +15 -8
  95. package/dist/contracts/recording_advisory/recording_advisory.js.map +1 -1
  96. package/dist/contracts/recording_credits/recording_credits.d.ts +95 -1350
  97. package/dist/contracts/recording_credits/recording_credits.d.ts.map +1 -1
  98. package/dist/contracts/recording_credits/recording_credits.js +63 -12
  99. package/dist/contracts/recording_credits/recording_credits.js.map +1 -1
  100. package/dist/contracts/recording_engine_session/recording_engine_session.d.ts +30 -49
  101. package/dist/contracts/recording_engine_session/recording_engine_session.d.ts.map +1 -1
  102. package/dist/contracts/recording_engine_session/recording_engine_session.js +19 -4
  103. package/dist/contracts/recording_engine_session/recording_engine_session.js.map +1 -1
  104. package/dist/contracts/recording_genre/recording_genre.d.ts +67 -9
  105. package/dist/contracts/recording_genre/recording_genre.d.ts.map +1 -1
  106. package/dist/contracts/recording_genre/recording_genre.js +53 -9
  107. package/dist/contracts/recording_genre/recording_genre.js.map +1 -1
  108. package/dist/contracts/recording_language/recording_language.d.ts +29 -5
  109. package/dist/contracts/recording_language/recording_language.d.ts.map +1 -1
  110. package/dist/contracts/recording_language/recording_language.js +18 -5
  111. package/dist/contracts/recording_language/recording_language.js.map +1 -1
  112. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts +25 -15
  113. package/dist/contracts/recording_master_reference/recording_master_reference.d.ts.map +1 -1
  114. package/dist/contracts/recording_master_reference/recording_master_reference.js +18 -5
  115. package/dist/contracts/recording_master_reference/recording_master_reference.js.map +1 -1
  116. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +55 -4
  117. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -1
  118. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +55 -4
  119. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -1
  120. package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.d.ts +66 -1
  121. package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.d.ts.map +1 -1
  122. package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.js +66 -1
  123. package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.js.map +1 -1
  124. package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.d.ts +12 -9
  125. package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.d.ts.map +1 -1
  126. package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.js +11 -4
  127. package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.js.map +1 -1
  128. package/dist/contracts/release_cover_art/release_cover_art.d.ts +168 -74
  129. package/dist/contracts/release_cover_art/release_cover_art.d.ts.map +1 -1
  130. package/dist/contracts/release_cover_art/release_cover_art.js +126 -10
  131. package/dist/contracts/release_cover_art/release_cover_art.js.map +1 -1
  132. package/dist/contracts/release_credits/release_credits.d.ts +24 -28
  133. package/dist/contracts/release_credits/release_credits.d.ts.map +1 -1
  134. package/dist/contracts/release_credits/release_credits.js +18 -4
  135. package/dist/contracts/release_credits/release_credits.js.map +1 -1
  136. package/dist/contracts/release_description/release_description.d.ts +16 -5
  137. package/dist/contracts/release_description/release_description.d.ts.map +1 -1
  138. package/dist/contracts/release_description/release_description.js +9 -4
  139. package/dist/contracts/release_description/release_description.js.map +1 -1
  140. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts +130 -160
  141. package/dist/contracts/release_dsp_link/release_dsp_link.d.ts.map +1 -1
  142. package/dist/contracts/release_dsp_link/release_dsp_link.js +74 -19
  143. package/dist/contracts/release_dsp_link/release_dsp_link.js.map +1 -1
  144. package/dist/contracts/release_genre/release_genre.d.ts +66 -11
  145. package/dist/contracts/release_genre/release_genre.d.ts.map +1 -1
  146. package/dist/contracts/release_genre/release_genre.js +52 -11
  147. package/dist/contracts/release_genre/release_genre.js.map +1 -1
  148. package/dist/contracts/release_kind/release_kind.d.ts +28 -5
  149. package/dist/contracts/release_kind/release_kind.d.ts.map +1 -1
  150. package/dist/contracts/release_kind/release_kind.js +19 -4
  151. package/dist/contracts/release_kind/release_kind.js.map +1 -1
  152. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts +17 -0
  153. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts.map +1 -1
  154. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js +15 -0
  155. package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js.map +1 -1
  156. package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.d.ts +37 -1
  157. package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.d.ts.map +1 -1
  158. package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.js +37 -1
  159. package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.js.map +1 -1
  160. package/dist/contracts/routed_stake/routed_stake.d.ts +78 -6
  161. package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -1
  162. package/dist/contracts/routed_stake/routed_stake.js +79 -7
  163. package/dist/contracts/routed_stake/routed_stake.js.map +1 -1
  164. package/dist/contracts/royalty_pool/pool.d.ts +117 -27
  165. package/dist/contracts/royalty_pool/pool.d.ts.map +1 -1
  166. package/dist/contracts/royalty_pool/pool.js +117 -28
  167. package/dist/contracts/royalty_pool/pool.js.map +1 -1
  168. package/dist/contracts/royalty_pool/stake.d.ts +3 -0
  169. package/dist/contracts/royalty_pool/stake.d.ts.map +1 -1
  170. package/dist/contracts/royalty_pool/stake.js +5 -2
  171. package/dist/contracts/royalty_pool/stake.js.map +1 -1
  172. package/dist/contracts/share/share.d.ts +80 -0
  173. package/dist/contracts/share/share.d.ts.map +1 -0
  174. package/dist/contracts/share/share.js +72 -0
  175. package/dist/contracts/share/share.js.map +1 -0
  176. package/dist/contracts/vault/vault.d.ts +51 -0
  177. package/dist/contracts/vault/vault.d.ts.map +1 -1
  178. package/dist/contracts/vault/vault.js +55 -4
  179. package/dist/contracts/vault/vault.js.map +1 -1
  180. package/dist/contracts.d.ts +60 -0
  181. package/dist/contracts.d.ts.map +1 -1
  182. package/dist/contracts.js +17 -0
  183. package/dist/contracts.js.map +1 -1
  184. package/dist/cover.d.ts +5 -6
  185. package/dist/cover.d.ts.map +1 -1
  186. package/dist/cover.js +10 -10
  187. package/dist/cover.js.map +1 -1
  188. package/dist/credits.d.ts +12 -13
  189. package/dist/credits.d.ts.map +1 -1
  190. package/dist/credits.js +16 -10
  191. package/dist/credits.js.map +1 -1
  192. package/dist/deployments.d.ts +3 -3
  193. package/dist/deployments.d.ts.map +1 -1
  194. package/dist/deployments.js +2 -3
  195. package/dist/deployments.js.map +1 -1
  196. package/dist/errors.d.ts +32 -9
  197. package/dist/errors.d.ts.map +1 -1
  198. package/dist/errors.js +52 -16
  199. package/dist/errors.js.map +1 -1
  200. package/dist/events.d.ts +1687 -835
  201. package/dist/events.d.ts.map +1 -1
  202. package/dist/events.js +258 -39
  203. package/dist/events.js.map +1 -1
  204. package/dist/genre.d.ts +11 -12
  205. package/dist/genre.d.ts.map +1 -1
  206. package/dist/genre.js +5 -3
  207. package/dist/genre.js.map +1 -1
  208. package/dist/index.d.ts +3 -3
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +7 -2
  211. package/dist/index.js.map +1 -1
  212. package/dist/packages.d.ts +1047 -1695
  213. package/dist/packages.d.ts.map +1 -1
  214. package/dist/party/client.d.ts +113 -296
  215. package/dist/party/client.d.ts.map +1 -1
  216. package/dist/party/client.js +93 -178
  217. package/dist/party/client.js.map +1 -1
  218. package/dist/party/extensions/ctas.d.ts +3 -3
  219. package/dist/party/extensions/ctas.d.ts.map +1 -1
  220. package/dist/party/extensions/genres.d.ts +4 -4
  221. package/dist/party/extensions/genres.d.ts.map +1 -1
  222. package/dist/party/extensions/links.d.ts +5 -5
  223. package/dist/party/extensions/links.d.ts.map +1 -1
  224. package/dist/party/extensions/links.js.map +1 -1
  225. package/dist/party/extensions/media.d.ts +3 -3
  226. package/dist/party/extensions/media.d.ts.map +1 -1
  227. package/dist/party/extensions/profile.d.ts +3 -3
  228. package/dist/party/extensions/profile.d.ts.map +1 -1
  229. package/dist/party/extensions/roles.d.ts +4 -4
  230. package/dist/party/extensions/roles.d.ts.map +1 -1
  231. package/dist/party/extensions/roles.js.map +1 -1
  232. package/dist/party/extensions/tags.d.ts +4 -4
  233. package/dist/party/extensions/tags.d.ts.map +1 -1
  234. package/dist/party/index.d.ts +1 -1
  235. package/dist/party/index.d.ts.map +1 -1
  236. package/dist/party/index.js.map +1 -1
  237. package/dist/party/queries.d.ts +8 -8
  238. package/dist/party/queries.d.ts.map +1 -1
  239. package/dist/party/queries.js +83 -56
  240. package/dist/party/queries.js.map +1 -1
  241. package/dist/pressing.d.ts +13 -15
  242. package/dist/pressing.d.ts.map +1 -1
  243. package/dist/pressing.js +99 -29
  244. package/dist/pressing.js.map +1 -1
  245. package/dist/publication.d.ts +13 -6
  246. package/dist/publication.d.ts.map +1 -1
  247. package/dist/publication.js +26 -21
  248. package/dist/publication.js.map +1 -1
  249. package/dist/queries.js +3 -3
  250. package/dist/queries.js.map +1 -1
  251. package/dist/read/artist.d.ts +4 -3
  252. package/dist/read/artist.d.ts.map +1 -1
  253. package/dist/read/artist.js +24 -8
  254. package/dist/read/artist.js.map +1 -1
  255. package/dist/read/catalog.d.ts +17 -16
  256. package/dist/read/catalog.d.ts.map +1 -1
  257. package/dist/read/catalog.js +25 -11
  258. package/dist/read/catalog.js.map +1 -1
  259. package/dist/read/client.d.ts +41 -20
  260. package/dist/read/client.d.ts.map +1 -1
  261. package/dist/read/client.js +20 -12
  262. package/dist/read/client.js.map +1 -1
  263. package/dist/read/config.d.ts +27 -3
  264. package/dist/read/config.d.ts.map +1 -1
  265. package/dist/read/config.js +42 -24
  266. package/dist/read/config.js.map +1 -1
  267. package/dist/read/genres.d.ts +8 -3
  268. package/dist/read/genres.d.ts.map +1 -1
  269. package/dist/read/genres.js +23 -17
  270. package/dist/read/genres.js.map +1 -1
  271. package/dist/read/index.d.ts +3 -1
  272. package/dist/read/index.d.ts.map +1 -1
  273. package/dist/read/index.js +9 -6
  274. package/dist/read/index.js.map +1 -1
  275. package/dist/read/receipts.d.ts +5 -4
  276. package/dist/read/receipts.d.ts.map +1 -1
  277. package/dist/read/receipts.js +94 -46
  278. package/dist/read/receipts.js.map +1 -1
  279. package/dist/read/royalties.d.ts +25 -0
  280. package/dist/read/royalties.d.ts.map +1 -0
  281. package/dist/read/royalties.js +168 -0
  282. package/dist/read/royalties.js.map +1 -0
  283. package/dist/read/types.d.ts +27 -0
  284. package/dist/read/types.d.ts.map +1 -1
  285. package/dist/read/wallet.d.ts +23 -12
  286. package/dist/read/wallet.d.ts.map +1 -1
  287. package/dist/read/wallet.js +158 -177
  288. package/dist/read/wallet.js.map +1 -1
  289. package/dist/read/works.d.ts +6 -6
  290. package/dist/read/works.d.ts.map +1 -1
  291. package/dist/read/works.js +40 -26
  292. package/dist/read/works.js.map +1 -1
  293. package/dist/recording-extensions.d.ts +15 -16
  294. package/dist/recording-extensions.d.ts.map +1 -1
  295. package/dist/recording-extensions.js +12 -8
  296. package/dist/recording-extensions.js.map +1 -1
  297. package/dist/release-extensions.d.ts +5 -6
  298. package/dist/release-extensions.d.ts.map +1 -1
  299. package/dist/release-extensions.js +3 -2
  300. package/dist/release-extensions.js.map +1 -1
  301. package/dist/release-graph.d.ts +2 -2
  302. package/dist/release-graph.d.ts.map +1 -1
  303. package/dist/release-graph.js.map +1 -1
  304. package/dist/royalty.d.ts +4 -4
  305. package/dist/royalty.d.ts.map +1 -1
  306. package/dist/royalty.js +16 -7
  307. package/dist/royalty.js.map +1 -1
  308. package/dist/share.d.ts +58 -24
  309. package/dist/share.d.ts.map +1 -1
  310. package/dist/share.js +167 -92
  311. package/dist/share.js.map +1 -1
  312. package/dist/transactions.d.ts +15 -6
  313. package/dist/transactions.d.ts.map +1 -1
  314. package/dist/transactions.js +1 -0
  315. package/dist/transactions.js.map +1 -1
  316. package/dist/vault.d.ts +13 -3
  317. package/dist/vault.d.ts.map +1 -1
  318. package/dist/vault.js +22 -16
  319. package/dist/vault.js.map +1 -1
  320. package/package.json +9 -8
  321. package/src/Miso.ts +951 -0
  322. package/src/auth.ts +16 -3
  323. package/src/catalog.ts +58 -25
  324. package/src/client.ts +98 -1359
  325. package/src/contracts/composition_credits/composition_credits.ts +20 -4
  326. package/src/contracts/composition_routed_stake/composition_routed_stake.ts +67 -1
  327. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +53 -4
  328. package/src/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.ts +64 -1
  329. package/src/contracts/genre/genre.ts +8 -1
  330. package/src/contracts/miso_pay/pay.ts +356 -0
  331. package/src/contracts/party_cta/party_cta.ts +27 -5
  332. package/src/contracts/party_genre/party_genre.ts +14 -3
  333. package/src/contracts/party_media/party_media.ts +20 -4
  334. package/src/contracts/party_platform_link/party_platform_link.ts +15 -7
  335. package/src/contracts/party_profile/party_profile.ts +33 -8
  336. package/src/contracts/party_roles/party_roles.ts +19 -4
  337. package/src/contracts/party_tags/party_tags.ts +16 -4
  338. package/src/contracts/party_wallet/party_wallet.ts +2 -1
  339. package/src/contracts/platform_link/platform_link.ts +322 -0
  340. package/src/contracts/record/pressing.ts +50 -4
  341. package/src/contracts/record/record.ts +15 -1
  342. package/src/contracts/record_shop/listing.ts +76 -13
  343. package/src/contracts/recording_advisory/recording_advisory.ts +15 -8
  344. package/src/contracts/recording_credits/recording_credits.ts +63 -12
  345. package/src/contracts/recording_engine_session/recording_engine_session.ts +19 -4
  346. package/src/contracts/recording_genre/recording_genre.ts +53 -9
  347. package/src/contracts/recording_language/recording_language.ts +18 -5
  348. package/src/contracts/recording_master_reference/recording_master_reference.ts +18 -5
  349. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +56 -4
  350. package/src/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.ts +67 -1
  351. package/src/contracts/recording_streaming_transcode/recording_streaming_transcode.ts +11 -4
  352. package/src/contracts/release_cover_art/release_cover_art.ts +126 -10
  353. package/src/contracts/release_credits/release_credits.ts +18 -4
  354. package/src/contracts/release_description/release_description.ts +9 -4
  355. package/src/contracts/release_dsp_link/release_dsp_link.ts +74 -19
  356. package/src/contracts/release_genre/release_genre.ts +52 -11
  357. package/src/contracts/release_kind/release_kind.ts +19 -4
  358. package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +15 -0
  359. package/src/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.ts +38 -1
  360. package/src/contracts/routed_stake/routed_stake.ts +79 -7
  361. package/src/contracts/royalty_pool/pool.ts +140 -38
  362. package/src/contracts/royalty_pool/stake.ts +5 -2
  363. package/src/contracts/share/share.ts +97 -0
  364. package/src/contracts/vault/vault.ts +55 -4
  365. package/src/contracts.ts +18 -0
  366. package/src/cover.ts +14 -15
  367. package/src/credits.ts +27 -22
  368. package/src/deployments.ts +3 -4
  369. package/src/errors.ts +77 -34
  370. package/src/events.ts +260 -39
  371. package/src/genre.ts +15 -14
  372. package/src/index.ts +19 -10
  373. package/src/party/client.ts +217 -208
  374. package/src/party/extensions/ctas.ts +3 -3
  375. package/src/party/extensions/genres.ts +4 -4
  376. package/src/party/extensions/links.ts +7 -7
  377. package/src/party/extensions/media.ts +3 -3
  378. package/src/party/extensions/profile.ts +3 -3
  379. package/src/party/extensions/roles.ts +5 -5
  380. package/src/party/extensions/tags.ts +4 -4
  381. package/src/party/index.ts +0 -1
  382. package/src/party/queries.ts +90 -87
  383. package/src/pressing.ts +132 -89
  384. package/src/publication.ts +33 -32
  385. package/src/queries.ts +3 -3
  386. package/src/read/artist.ts +36 -17
  387. package/src/read/catalog.ts +68 -36
  388. package/src/read/client.ts +55 -30
  389. package/src/read/config.ts +57 -29
  390. package/src/read/genres.ts +22 -18
  391. package/src/read/index.ts +15 -6
  392. package/src/read/receipts.ts +130 -67
  393. package/src/read/royalties.ts +212 -0
  394. package/src/read/types.ts +30 -0
  395. package/src/read/wallet.ts +226 -216
  396. package/src/read/works.ts +51 -44
  397. package/src/recording-extensions.ts +27 -24
  398. package/src/release-extensions.ts +7 -7
  399. package/src/release-graph.ts +2 -1
  400. package/src/royalty.ts +19 -25
  401. package/src/share.ts +197 -128
  402. package/src/transactions.ts +15 -8
  403. package/src/vault.ts +24 -31
  404. package/dist/contracts/record_shop/deps/std/type_name.d.ts.map +0 -1
  405. package/dist/contracts/record_shop/deps/std/type_name.js.map +0 -1
  406. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +0 -6
  407. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +0 -1
  408. package/dist/contracts/recording_language/deps/language_code/language_code.js +0 -8
  409. package/dist/contracts/recording_language/deps/language_code/language_code.js.map +0 -1
  410. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts +0 -24
  411. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts.map +0 -1
  412. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js +0 -24
  413. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js.map +0 -1
  414. package/dist/contracts/recording_master_reference/deps/ori/data.d.ts +0 -16
  415. package/dist/contracts/recording_master_reference/deps/ori/data.d.ts.map +0 -1
  416. package/dist/contracts/recording_master_reference/deps/ori/data.js +0 -12
  417. package/dist/contracts/recording_master_reference/deps/ori/data.js.map +0 -1
  418. package/dist/execute.d.ts +0 -32
  419. package/dist/execute.d.ts.map +0 -1
  420. package/dist/execute.js +0 -36
  421. package/dist/execute.js.map +0 -1
  422. package/src/contracts/recording_language/deps/language_code/language_code.ts +0 -8
  423. package/src/contracts/recording_master_reference/deps/ori/confidentiality.ts +0 -24
  424. package/src/contracts/recording_master_reference/deps/ori/data.ts +0 -12
  425. package/src/execute.ts +0 -56
  426. /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.d.ts +0 -0
  427. /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.js +0 -0
  428. /package/src/contracts/{record_shop → miso_pay}/deps/std/type_name.ts +0 -0
package/src/Miso.ts ADDED
@@ -0,0 +1,951 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * The `Miso` service: the sui-effect extension replacing the hand-written
6
+ * `MisoPlatformClient` class (misofm/sdks#35). Stage 3 (WP6 "facade
7
+ * derivation") assembles the complete `MisoService` this file's earlier
8
+ * skeleton deferred: `getPressing`/`getListing`/`getRecord`/`getSale`,
9
+ * `ids.*`, `tx.*`, `call`/`bcs`, `vault`, `createShareCurrency`/
10
+ * `publishShareCurrencies`/`initializeShareCurrencies`, `publishCatalog`,
11
+ * `read.*`, `events`, and the deprecated `ready` warm-up member — see
12
+ * `docs/CONVERSION.md` for what changed and why.
13
+ *
14
+ * Per sui-effect's `docs/extensions.md` ("converting an existing facade"):
15
+ * `Musicos`/`Partyos` are dependencies already extended elsewhere, so this
16
+ * service `Layer.provide`s their own `layer(...)` inside its own so the
17
+ * requirement channel stays `Sui | SuiGraphQL` and never leaks
18
+ * `Musicos | Partyos` to a consumer that only asked for `Miso`. `SuiGraphQL`
19
+ * joins the requirement this stage, now that `read.*` and the catalog reads
20
+ * need it (the WP1 skeleton's `Sui`-only requirement was accurate only until
21
+ * this surface existed).
22
+ *
23
+ * Every I/O member closes over the `Sui`/`SuiGraphQL` this layer's `make`
24
+ * already holds via `Effect.provideService`, so `R` is empty on every member
25
+ * — the `withSui`/`withEnv` helpers below are the "keeps the 100-odd members
26
+ * from repeating it" helper the issue's target shape calls for.
27
+ */
28
+ import type { SuiGraphQLClient } from "@mysten/sui/graphql";
29
+ import { Config, Context, Effect, Layer } from "effect";
30
+ import { Musicos, type MusicosDeploymentInvalid, type MusicosService } from "@misofm/musicos";
31
+ import { Partyos, type PartyosDeploymentError, type PartyosService } from "@misofm/partyos";
32
+ import {
33
+ Sui,
34
+ SuiGraphQL,
35
+ type BatchItemError,
36
+ type DecodeError,
37
+ type ObjectDeleted,
38
+ type ObjectUnavailable,
39
+ type Recipe,
40
+ type SuiService,
41
+ type TransportError,
42
+ type UnexpectedEffects,
43
+ } from "@unconfirmed/sui-effect";
44
+ import { Tx, type RunError } from "@unconfirmed/sui-effect/tx";
45
+
46
+ import {
47
+ getMisoPlatformDeployment,
48
+ MISO_PLATFORM_DEPLOYMENTS,
49
+ normalizeMisoPlatformDeployment,
50
+ requireOperationsDeployment,
51
+ requireRecordSalesDeployment,
52
+ type AvailableOperationsDeployment,
53
+ type MisoPlatformDeployment,
54
+ type RecordSalesDeployment,
55
+ } from "./deployments.ts";
56
+ import {
57
+ MisoChainIdentifierMismatchError,
58
+ MisoNetworkMismatchError,
59
+ MisoPlatformDeploymentInvalidError,
60
+ OperationsUnavailableError,
61
+ RecordSalesUnavailableError,
62
+ } from "./errors.ts";
63
+ import { makeMisoParty, type MisoPartyService } from "./party/client.ts";
64
+ import { immutableSnapshot } from "./internal.ts";
65
+
66
+ import {
67
+ authorizeRecordShop,
68
+ deriveListingId,
69
+ derivePressingAdminCapId,
70
+ derivePressingId,
71
+ deriveRecordId,
72
+ deriveSaleIds,
73
+ getListing,
74
+ getPressing,
75
+ getRecord,
76
+ getSale,
77
+ openListing,
78
+ openPressing,
79
+ purchaseRecord,
80
+ revokeRecordShop,
81
+ setListingPrice,
82
+ setListingState,
83
+ type GetSaleParams,
84
+ type Listing,
85
+ type OpenListingParams,
86
+ type OpenPressingParams,
87
+ type Pressing,
88
+ type PressingAdministrationParams,
89
+ type PressingRecord,
90
+ type PurchaseRecordParams,
91
+ type SetListingPriceParams,
92
+ type SetListingStateParams,
93
+ } from "./pressing.ts";
94
+ import {
95
+ publishComposition,
96
+ publishCompositionAndRecording,
97
+ publishRecording,
98
+ publishRelease,
99
+ publishShareCurrency,
100
+ initializeShareCurrency,
101
+ type PublishCompositionAndRecordingParams,
102
+ type PublishCompositionParams,
103
+ type PublishRecordingParams,
104
+ type PublishReleaseParams,
105
+ } from "./transactions.ts";
106
+ import { publishReleaseGraph, type PublishReleaseGraphParams } from "./release-graph.ts";
107
+ import {
108
+ setReleaseDescription,
109
+ setReleaseDspLinks,
110
+ setReleaseKind,
111
+ type SetReleaseDescriptionParams,
112
+ type SetReleaseDspLinksParams,
113
+ type SetReleaseKindParams,
114
+ } from "./release-extensions.ts";
115
+ import {
116
+ clearRecordingGenres,
117
+ clearReleaseGenres,
118
+ deriveGenreAddress,
119
+ setRecordingGenres,
120
+ setReleaseGenres,
121
+ type ClearRecordingGenresParams,
122
+ type ClearReleaseGenresParams,
123
+ type SetRecordingGenresParams,
124
+ type SetReleaseGenresParams,
125
+ } from "./genre.ts";
126
+ import {
127
+ setRecordingStreamingTranscode,
128
+ unsetRecordingStreamingTranscode,
129
+ type SetRecordingStreamingTranscodeParams,
130
+ type UnsetRecordingStreamingTranscodeParams,
131
+ } from "./recording-extensions.ts";
132
+ import { addReleaseCredit, type AddReleaseCreditParams } from "./credits.ts";
133
+ import { setReleaseCover, setReleaseTrackCover, type SetReleaseCoverParams, type SetReleaseTrackCoverParams } from "./cover.ts";
134
+ import * as vaultActions from "./vault.ts";
135
+ import { createShareCurrency, initializeShareCurrencies, publishShareCurrencies, type RunOpts, type ShareCurrency, type ShareCurrencyMeta } from "./share.ts";
136
+ import { publishAtomicCatalog, parseAtomicPublicationResult, type AtomicPublicationParams, type AtomicPublicationResult } from "./publication.ts";
137
+ import { platformEventParsers } from "./events.ts";
138
+ import { configFromDeployment } from "./read/config.ts";
139
+ import * as readCatalog from "./read/catalog.ts";
140
+ import * as readArtist from "./read/artist.ts";
141
+ import * as readGenres from "./read/genres.ts";
142
+ import * as readWallet from "./read/wallet.ts";
143
+ import * as readReceipts from "./read/receipts.ts";
144
+ import * as readRoyalties from "./read/royalties.ts";
145
+ import type { MisoConfig } from "./read/config.ts";
146
+
147
+ import * as recordContract from "./contracts/record/record.ts";
148
+ import * as pressingContract from "./contracts/record/pressing.ts";
149
+ import * as listingContract from "./contracts/record_shop/listing.ts";
150
+ import * as genreContract from "./contracts/genre/genre.ts";
151
+ import * as releaseDescriptionContract from "./contracts/release_description/release_description.ts";
152
+ import * as releaseDspLinkContract from "./contracts/release_dsp_link/release_dsp_link.ts";
153
+ import * as releaseGenreContract from "./contracts/release_genre/release_genre.ts";
154
+ import * as releaseKindContract from "./contracts/release_kind/release_kind.ts";
155
+ import * as releaseRevenueDistributorContract from "./contracts/release_revenue_distributor/release_revenue_distributor.ts";
156
+ import * as vaultContract from "./contracts/vault/vault.ts";
157
+ import * as compositionRoyaltyPoolContract from "./contracts/composition_royalty_pool/composition_royalty_pool.ts";
158
+ import * as recordingRoyaltyPoolContract from "./contracts/recording_royalty_pool/recording_royalty_pool.ts";
159
+ import * as partyWalletContract from "./contracts/party_wallet/party_wallet.ts";
160
+ import * as compositionRoutedStakeContract from "./contracts/composition_routed_stake/composition_routed_stake.ts";
161
+ import * as compositionRoyaltyPoolPluginContract from "./contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.ts";
162
+ import * as recordingRoyaltyPoolPluginContract from "./contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.ts";
163
+ import * as releaseRevenueDistributorPluginContract from "./contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.ts";
164
+ import * as routedStakeContract from "./contracts/routed_stake/routed_stake.ts";
165
+ import * as royaltyPoolContract from "./contracts/royalty_pool/pool.ts";
166
+ import * as recordingAdvisoryContract from "./contracts/recording_advisory/recording_advisory.ts";
167
+ import * as recordingLanguageContract from "./contracts/recording_language/recording_language.ts";
168
+ import * as recordingMasterReferenceContract from "./contracts/recording_master_reference/recording_master_reference.ts";
169
+ import * as recordingStreamingTranscodeContract from "./contracts/recording_streaming_transcode/recording_streaming_transcode.ts";
170
+ import * as recordingGenreContract from "./contracts/recording_genre/recording_genre.ts";
171
+ import * as coverArtContract from "./contracts/cover_art/cover_art.ts";
172
+ import * as releaseCoverArtContract from "./contracts/release_cover_art/release_cover_art.ts";
173
+ import * as releaseCreditsContract from "./contracts/release_credits/release_credits.ts";
174
+
175
+ /** Everything {@link Miso.layer} (and {@link Miso.layerConfig}) can fail with, at build time. */
176
+ export type MisoLayerError =
177
+ | MisoNetworkMismatchError
178
+ | MisoChainIdentifierMismatchError
179
+ | MusicosDeploymentInvalid
180
+ | PartyosDeploymentError;
181
+
182
+ // ── `bindModulePackage`: the allow-listed generated-call binder `call` uses ──
183
+ //
184
+ // Distinct from `party/client.ts`'s own helper of the same name (that one
185
+ // takes a deny-list and defaults to "everything"); this one is `client.ts`'s
186
+ // predecessor helper, moved here verbatim — an explicit allow-list so a
187
+ // reference-returning, UID-only, or package-internal constructor never
188
+ // appears on this executable facade.
189
+ type BoundMoveFunction<F> = F extends (options: infer Options) => infer Result
190
+ ? Options extends { package?: unknown }
191
+ ? (options: Omit<Options, "package">) => Result
192
+ : F
193
+ : F;
194
+ type BoundModule<M extends object, Available extends readonly (keyof M)[]> = {
195
+ [Key in Available[number]]: BoundMoveFunction<M[Key]>;
196
+ };
197
+
198
+ function bindModulePackage<M extends object, K extends readonly (keyof M)[]>(mod: M, pkg: string, available: K): BoundModule<M, K> {
199
+ const out: Record<string, unknown> = {};
200
+ for (const key of available) {
201
+ const value = (mod as Record<PropertyKey, unknown>)[key];
202
+ out[String(key)] = typeof value === "function" ? (options: { package?: string }) => (value as (o: unknown) => unknown)({ ...options, package: pkg }) : value;
203
+ }
204
+ return out as BoundModule<M, K>;
205
+ }
206
+
207
+ /** Every function-valued member of `surface` throws `guard()`'s error before running, when it throws. */
208
+ function gateAvailability<T extends object>(surface: T, guard: () => void): T {
209
+ return new Proxy(surface, {
210
+ get(target, property, receiver) {
211
+ const value = Reflect.get(target, property, receiver) as unknown;
212
+ if (typeof value !== "function") return value;
213
+ return (...args: unknown[]) => {
214
+ guard();
215
+ return Reflect.apply(value, target, args);
216
+ };
217
+ },
218
+ });
219
+ }
220
+
221
+ function requiredPackage(id: string | undefined, field: string, operation: string): string {
222
+ if (!id) throw new Error(`@misofm/platform: deployment.packages.${field} is required for ${operation}.`);
223
+ return id;
224
+ }
225
+
226
+ /** Params with the ids the deployment already supplies dropped from the call site. */
227
+ type DistributiveOmit<T, Keys extends PropertyKey> = T extends unknown ? Omit<T, Keys> : never;
228
+ type Configured<T> = DistributiveOmit<T, "recordPackageId" | "recordShopPackageId">;
229
+ type ConfiguredPublish<T> = DistributiveOmit<T, "misoPackageId" | "minatoPackageId">;
230
+ type ConfiguredRelease<T> = DistributiveOmit<T, "misoPackageId" | "minatoPackageId" | "releaseRegistryId">;
231
+ type ConfiguredReleaseKind = DistributiveOmit<SetReleaseKindParams, "releaseKindPackageId">;
232
+ type ConfiguredReleaseDescription = DistributiveOmit<SetReleaseDescriptionParams, "releaseDescriptionPackageId">;
233
+ type ConfiguredReleaseGenres = DistributiveOmit<SetReleaseGenresParams, "releaseGenrePackageId">;
234
+ type ConfiguredRecordingGenres = DistributiveOmit<SetRecordingGenresParams, "recordingGenrePackageId">;
235
+ type ConfiguredClearReleaseGenres = DistributiveOmit<ClearReleaseGenresParams, "releaseGenrePackageId">;
236
+ type ConfiguredClearRecordingGenres = DistributiveOmit<ClearRecordingGenresParams, "recordingGenrePackageId">;
237
+ type ConfiguredReleaseDspLinks = DistributiveOmit<SetReleaseDspLinksParams, "releaseDspLinkPackageId">;
238
+ type ConfiguredReleaseCredit = DistributiveOmit<AddReleaseCreditParams, "releaseCreditsPackageId" | "misoCreditPackageId">;
239
+ type ConfiguredReleaseCover = DistributiveOmit<SetReleaseCoverParams, "coverArtPackageId" | "releaseCoverArtPackageId" | "oriPackageId">;
240
+ type ConfiguredReleaseTrackCover = DistributiveOmit<SetReleaseTrackCoverParams, "coverArtPackageId" | "releaseCoverArtPackageId" | "oriPackageId">;
241
+ type ConfiguredRecordingStreamingTranscode = DistributiveOmit<SetRecordingStreamingTranscodeParams, "recordingStreamingTranscodePackageId" | "oriPackageId">;
242
+ type ConfiguredUnsetRecordingStreamingTranscode = DistributiveOmit<UnsetRecordingStreamingTranscodeParams, "recordingStreamingTranscodePackageId">;
243
+ /** Whole-graph params with this deployment's package ids dropped. */
244
+ export type ConfiguredReleaseGraphParams = Omit<PublishReleaseGraphParams, "misoPackageId" | "minatoPackageId">;
245
+
246
+ /** The 7 sales reads plus PTB builders, bound to `deployment.recordSales` (`RecordSalesUnavailableError` when unavailable). */
247
+ export type MisoSalesTx = {
248
+ readonly purchaseRecord: (p: Configured<PurchaseRecordParams>) => Recipe;
249
+ readonly openPressing: (p: Configured<OpenPressingParams>) => Recipe;
250
+ readonly openListing: (p: Configured<OpenListingParams>) => Recipe;
251
+ readonly authorizeRecordShop: (p: Configured<PressingAdministrationParams>) => Recipe;
252
+ readonly revokeRecordShop: (p: Configured<PressingAdministrationParams>) => Recipe;
253
+ readonly setListingPrice: (p: Configured<SetListingPriceParams>) => Recipe;
254
+ readonly setListingState: (p: Configured<SetListingStateParams>) => Recipe;
255
+ };
256
+
257
+ export type MisoTx = MisoSalesTx & {
258
+ readonly publishShareCurrency: typeof publishShareCurrency;
259
+ readonly initializeShareCurrency: typeof initializeShareCurrency;
260
+ readonly publishComposition: (p: ConfiguredPublish<PublishCompositionParams>) => Recipe;
261
+ readonly publishRecording: (p: ConfiguredPublish<PublishRecordingParams>) => Recipe;
262
+ readonly publishCompositionAndRecording: (p: ConfiguredPublish<PublishCompositionAndRecordingParams>) => Recipe;
263
+ readonly publishRelease: (p: ConfiguredRelease<PublishReleaseParams>) => Recipe;
264
+ readonly publishReleaseGraph: (p: ConfiguredReleaseGraphParams) => Recipe;
265
+ readonly setReleaseKind: (p: ConfiguredReleaseKind) => Recipe;
266
+ readonly setReleaseDescription: (p: ConfiguredReleaseDescription) => Recipe;
267
+ readonly setReleaseGenres: (p: ConfiguredReleaseGenres) => Recipe;
268
+ readonly clearReleaseGenres: (p: ConfiguredClearReleaseGenres) => Recipe;
269
+ readonly setReleaseDspLinks: (p: ConfiguredReleaseDspLinks) => Recipe;
270
+ readonly addReleaseCredit: (p: ConfiguredReleaseCredit) => Recipe;
271
+ readonly setReleaseCover: (p: ConfiguredReleaseCover) => Recipe;
272
+ readonly setReleaseTrackCover: (p: ConfiguredReleaseTrackCover) => Recipe;
273
+ readonly setRecordingStreamingTranscode: (p: ConfiguredRecordingStreamingTranscode) => Recipe;
274
+ readonly unsetRecordingStreamingTranscode: (p: ConfiguredUnsetRecordingStreamingTranscode) => Recipe;
275
+ readonly setRecordingGenres: (p: ConfiguredRecordingGenres) => Recipe;
276
+ readonly clearRecordingGenres: (p: ConfiguredClearRecordingGenres) => Recipe;
277
+ };
278
+
279
+ export type MisoIds = {
280
+ readonly pressing: (releaseId: string, edition: number) => string;
281
+ readonly pressingAdminCap: (pressingId: string) => string;
282
+ readonly record: (pressingId: string, number: number) => string;
283
+ readonly listing: (pressingId: string, currencyType: string) => string;
284
+ readonly sale: (releaseId: string, edition: number, currencyType: string) => { pressingId: string; listingId: string };
285
+ readonly vault: (capId: string, capType: string) => string;
286
+ readonly vaultAdminCap: (vaultId: string) => string;
287
+ readonly genre: (canonicalName: string) => string;
288
+ };
289
+
290
+ /** Generated Move-call bindings, gated by which parts of the deployment are configured — `undefined` when their package isn't. */
291
+ export type MisoCall = {
292
+ readonly record: ReturnType<typeof bindModulePackage<typeof recordContract, readonly ["destroy", "releaseId", "pressingId", "edition", "number", "purchaseCurrency", "purchasePrice", "purchasedBy", "purchasedTimestampMs", "deriveAddress"]>> | undefined;
293
+ readonly listing:
294
+ | ReturnType<
295
+ typeof bindModulePackage<
296
+ typeof listingContract,
297
+ readonly ["fixed", "floor", "enabled", "disabled", "setState", "setPrice", "purchase", "deriveAddress", "releaseId", "pressingId", "pricing", "price", "state", "isEnabled", "isDisabled", "isFixed", "isFloor"]
298
+ >
299
+ >
300
+ | undefined;
301
+ readonly pressing: ReturnType<typeof bindModulePackage<typeof pressingContract, readonly ["authorizeDistributor", "revokeDistributor", "deriveAddress", "deriveAdminCapAddress", "releaseId", "edition", "supply", "maxSupply", "distributors", "isDistributorAuthorized", "pressingId"]>> | undefined;
302
+ readonly genre: ReturnType<typeof bindModulePackage<typeof genreContract, readonly ["deriveAddress"]>>;
303
+ readonly releaseDescription: ReturnType<typeof bindModulePackage<typeof releaseDescriptionContract, readonly ["setDescription", "clearDescription", "hasDescription"]>>;
304
+ readonly releaseDspLink: ReturnType<
305
+ typeof bindModulePackage<
306
+ typeof releaseDspLinkContract,
307
+ readonly [
308
+ "platform", "platformSpotify", "platformAppleMusic", "platformAmazonMusic", "platformBandcamp", "platformDeezer", "platformSoundcloud", "platformTidal", "platformYoutubeMusic",
309
+ "newSpotify", "newAppleMusicAlbum", "newAppleMusicTrack", "newAmazonMusicAlbum", "newAmazonMusicTrack", "newBandcamp", "newDeezer", "newSoundcloud", "newTidal", "newYoutubeMusic",
310
+ "setReleaseLink", "clearReleaseLink", "setTrackLink", "clearTrackLink", "clearTrackLinks", "hasReleaseLink",
311
+ ]
312
+ >
313
+ >;
314
+ readonly releaseGenre: ReturnType<typeof bindModulePackage<typeof releaseGenreContract, readonly ["addGenre", "removeGenre", "clearGenres"]>>;
315
+ readonly releaseKind: ReturnType<typeof bindModulePackage<typeof releaseKindContract, readonly ["setKind", "unsetKind", "hasKind"]>>;
316
+ readonly releaseRevenueDistributor: ReturnType<typeof bindModulePackage<typeof releaseRevenueDistributorContract, readonly ["redeemAndDistribute", "redeemAllAndDistribute", "receiveAndDistribute"]>> | undefined;
317
+ readonly releaseRevenueDistributorPlugin: ReturnType<typeof bindModulePackage<typeof releaseRevenueDistributorPluginContract, readonly ["install", "uninstall", "redeemAllAndDistribute", "receiveAndDistribute", "isInstalled"]>> | undefined;
318
+ readonly vault: ReturnType<typeof bindModulePackage<typeof vaultContract, readonly ["share", "withdrawCap", "restoreCap", "derivedAddress", "capId", "isActive", "authorizedPlugins", "isPluginAuthorized"]>> | undefined;
319
+ readonly compositionRoyaltyPool: ReturnType<typeof bindModulePackage<typeof compositionRoyaltyPoolContract, readonly ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"]>> | undefined;
320
+ readonly compositionRoyaltyPoolPlugin: ReturnType<typeof bindModulePackage<typeof compositionRoyaltyPoolPluginContract, readonly ["install", "uninstall", "receiveAndDeposit", "redeemAndDeposit", "isInstalled"]>> | undefined;
321
+ readonly recordingRoyaltyPool: ReturnType<typeof bindModulePackage<typeof recordingRoyaltyPoolContract, readonly ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"]>> | undefined;
322
+ readonly recordingRoyaltyPoolPlugin: ReturnType<typeof bindModulePackage<typeof recordingRoyaltyPoolPluginContract, readonly ["install", "uninstall", "receiveAndDeposit", "redeemAndDeposit", "isInstalled"]>> | undefined;
323
+ readonly partyWallet: ReturnType<typeof bindModulePackage<typeof partyWalletContract, readonly ["receive", "receiveBalance", "redeemBalance", "inboxAddress"]>> | undefined;
324
+ readonly compositionRoutedStake: ReturnType<typeof bindModulePackage<typeof compositionRoutedStakeContract, readonly ["createStake", "register", "unregister", "unstake", "restake", "stakeAddress"]>> | undefined;
325
+ readonly routedStake: ReturnType<typeof bindModulePackage<typeof routedStakeContract, readonly ["share", "register", "unregister", "sweep", "unstake", "restake", "derivedAddress"]>>;
326
+ readonly royaltyPool: ReturnType<
327
+ typeof bindModulePackage<
328
+ typeof royaltyPoolContract,
329
+ readonly ["share", "deposit", "settle", "recoverCoins", "registerStake", "unregisterStake", "claimRewards", "pendingRewards", "stakedShares", "cumulativeRewardPerShare", "carry", "cumulativeDeposits", "settledValue", "derivedAddress", "assertDerivedFrom"]
330
+ >
331
+ >;
332
+ readonly recordingAdvisory: ReturnType<typeof bindModulePackage<typeof recordingAdvisoryContract, readonly ["explicit", "notExplicit", "cleaned", "setRating", "unsetRating", "hasRating", "isExplicit", "isNotExplicit", "isCleaned"]>>;
333
+ readonly recordingLanguage: ReturnType<typeof bindModulePackage<typeof recordingLanguageContract, readonly ["setLanguages", "setInstrumental", "unsetLanguages", "hasLanguages", "isInstrumental"]>>;
334
+ readonly recordingMasterReference: ReturnType<typeof bindModulePackage<typeof recordingMasterReferenceContract, readonly ["setMasterReference", "unsetMasterReference", "hasMasterReference"]>>;
335
+ readonly recordingStreamingTranscode: ReturnType<typeof bindModulePackage<typeof recordingStreamingTranscodeContract, readonly ["setStreamingTranscode", "unsetStreamingTranscode", "hasStreamingTranscode"]>> | undefined;
336
+ readonly recordingGenre: ReturnType<typeof bindModulePackage<typeof recordingGenreContract, readonly ["addGenre", "removeGenre", "clearGenres"]>> | undefined;
337
+ readonly coverArt: ReturnType<typeof bindModulePackage<typeof coverArtContract, readonly []>>;
338
+ readonly releaseCoverArt: ReturnType<typeof bindModulePackage<typeof releaseCoverArtContract, readonly ["setCover", "unsetCover", "setTrackCover", "unsetTrackCover", "hasCoverArt"]>>;
339
+ readonly releaseCredits: ReturnType<typeof bindModulePackage<typeof releaseCreditsContract, readonly ["addCredit", "removeCredit", "hasCredits"]>>;
340
+ };
341
+
342
+ /** Generated BCS definitions, for parsing objects or events yourself. */
343
+ export type MisoBcs = {
344
+ readonly Record: typeof recordContract.Record;
345
+ readonly Pressing: typeof pressingContract.Pressing;
346
+ readonly PressingAdminCap: typeof pressingContract.PressingAdminCap;
347
+ readonly Listing: typeof listingContract.Listing;
348
+ readonly Pricing: typeof listingContract.Pricing;
349
+ readonly ListingState: typeof listingContract.State;
350
+ readonly RecordCreatedEvent: typeof recordContract.RecordCreatedEvent;
351
+ readonly RecordDestroyedEvent: typeof recordContract.RecordDestroyedEvent;
352
+ readonly PressingCreatedEvent: typeof pressingContract.PressingCreatedEvent;
353
+ readonly DistributorAuthorizedEvent: typeof pressingContract.DistributorAuthorizedEvent;
354
+ readonly DistributorRevokedEvent: typeof pressingContract.DistributorRevokedEvent;
355
+ readonly RecordPurchasedEvent: typeof pressingContract.RecordPurchasedEvent;
356
+ readonly PressingSharedEvent: typeof pressingContract.PressingSharedEvent;
357
+ readonly PressingDistributorAuthorizedEvent: typeof pressingContract.PressingDistributorAuthorizedEvent;
358
+ readonly PressingDistributorRevokedEvent: typeof pressingContract.PressingDistributorRevokedEvent;
359
+ readonly ListingCreatedEvent: typeof listingContract.ListingCreatedEvent;
360
+ readonly ListingSharedEvent: typeof listingContract.ListingSharedEvent;
361
+ readonly ListingPriceChangedEvent: typeof listingContract.ListingPriceChangedEvent;
362
+ readonly ListingStateChangedEvent: typeof listingContract.ListingStateChangedEvent;
363
+ readonly RecordSoldEvent: typeof listingContract.RecordSoldEvent;
364
+ readonly VaultAdminCap: typeof vaultContract.VaultAdminCap;
365
+ readonly VaultRegistry: typeof vaultContract.VaultRegistry;
366
+ readonly VaultKey: typeof vaultContract.VaultKey;
367
+ readonly VaultAdminCapKey: typeof vaultContract.VaultAdminCapKey;
368
+ readonly VaultCreatedEvent: typeof vaultContract.VaultCreatedEvent;
369
+ readonly VaultRegistryCreatedEvent: typeof vaultContract.VaultRegistryCreatedEvent;
370
+ readonly VaultSharedEvent: typeof vaultContract.VaultSharedEvent;
371
+ readonly PluginAuthorizedEvent: typeof vaultContract.PluginAuthorizedEvent;
372
+ readonly PluginRevokedEvent: typeof vaultContract.PluginRevokedEvent;
373
+ readonly VaultCapabilityWithdrawnEvent: typeof vaultContract.VaultCapabilityWithdrawnEvent;
374
+ readonly VaultCapabilityRestoredEvent: typeof vaultContract.VaultCapabilityRestoredEvent;
375
+ readonly VaultCapabilityBorrowedByPluginEvent: typeof vaultContract.VaultCapabilityBorrowedByPluginEvent;
376
+ readonly VaultCapabilityBorrowedByAdminEvent: typeof vaultContract.VaultCapabilityBorrowedByAdminEvent;
377
+ readonly VaultCapabilityReturnedEvent: typeof vaultContract.VaultCapabilityReturnedEvent;
378
+ readonly PartyObjectReceivedEvent: typeof partyWalletContract.ObjectReceivedEvent;
379
+ readonly PartyCoinsReceivedEvent: typeof partyWalletContract.CoinsReceivedEvent;
380
+ readonly PartyFundsRedeemedEvent: typeof partyWalletContract.FundsRedeemedEvent;
381
+ readonly ReleaseTrackRevenueDistributedEvent: typeof releaseRevenueDistributorContract.ReleaseTrackRevenueDistributedEvent;
382
+ readonly ReleaseRevenueDistributedEvent: typeof releaseRevenueDistributorContract.ReleaseRevenueDistributedEvent;
383
+ readonly ReleaseCoinsReceivedEvent: typeof releaseRevenueDistributorContract.ReleaseCoinsReceivedEvent;
384
+ readonly ReleaseFundsRedeemedEvent: typeof releaseRevenueDistributorContract.ReleaseFundsRedeemedEvent;
385
+ };
386
+
387
+ /**
388
+ * `vault.ts`'s builders, `getVaultAdminCap`, and `resolveReceivingCoins`,
389
+ * always present as an object (unlike the predecessor's
390
+ * `client.miso.vault: typeof vaultActions | undefined`) — every member
391
+ * throws {@link OperationsUnavailableError} at call time when
392
+ * `deployment.operations.status !== "available"`, per the issue's migration
393
+ * map ("callers that tested `if (client.miso.vault)` must test
394
+ * `deployment.operations.status`").
395
+ */
396
+ export type MisoVault = Omit<typeof vaultActions, "getVaultAdminCap" | "resolveReceivingCoins"> & {
397
+ readonly getVaultAdminCap: (vaultAdminCapId: string, capType: string) => Effect.Effect<vaultActions.VaultAdminCap | null, DecodeError | ObjectUnavailable | TransportError | OperationsUnavailableError>;
398
+ readonly resolveReceivingCoins: (coinIds: readonly string[]) => Effect.Effect<vaultActions.ReceivingObjectRef[], BatchItemError | TransportError | OperationsUnavailableError>;
399
+ };
400
+
401
+ const make =(deployment: MisoPlatformDeployment): Effect.Effect<MisoService, MisoNetworkMismatchError | MisoChainIdentifierMismatchError, Sui | SuiGraphQL | Musicos | Partyos> =>
402
+ Effect.gen(function* () {
403
+ const sui = yield* Sui;
404
+ // The exact-ledger check `MisoPlatformClient#ready()` used to perform at
405
+ // first use, moved to layer build (the issue's target shape: "a
406
+ // caller's first call builds the runtime; a mismatch rejects it with
407
+ // MisoChainIdentifierMismatchError instead of ready()").
408
+ if (sui.network !== deployment.network) {
409
+ return yield* new MisoNetworkMismatchError({ clientNetwork: sui.network, deploymentNetwork: deployment.network });
410
+ }
411
+ if (sui.chainId !== deployment.chainIdentifier) {
412
+ return yield* new MisoChainIdentifierMismatchError({ actual: sui.chainId, expected: deployment.chainIdentifier });
413
+ }
414
+ const protocol = yield* Musicos;
415
+ const partyos = yield* Partyos;
416
+ const graphql = yield* SuiGraphQL;
417
+ return assemble(sui, graphql, protocol, partyos, deployment);
418
+ });
419
+
420
+ /** `make`, without the exact-chain check — what {@link Miso.layerTest} builds over. */
421
+ const makeUnchecked = (deployment: MisoPlatformDeployment): Effect.Effect<MisoService, never, Sui | SuiGraphQL | Musicos | Partyos> =>
422
+ Effect.gen(function* () {
423
+ const sui = yield* Sui;
424
+ const protocol = yield* Musicos;
425
+ const partyos = yield* Partyos;
426
+ const graphql = yield* SuiGraphQL;
427
+ return { ...assemble(sui, graphql, protocol, partyos, deployment), chainId: sui.chainId };
428
+ });
429
+
430
+ /**
431
+ * Assembles the complete {@link MisoService} from the `Sui`/`SuiGraphQL` the
432
+ * layer already holds, the converted `protocol`/`party` services, and
433
+ * `deployment`. Every I/O member is `withSui`/`withEnv`-wrapped so `R` is
434
+ * empty; every synchronous member closes over `deployment` directly instead
435
+ * of a `#requireReady`-style gate — sui-effect's own `warm`/`$ready`
436
+ * mechanism (`docs/extensions.md` §7) is what governs "real before the first
437
+ * await" now, not a second, platform-specific readiness machine.
438
+ */
439
+ function assemble(sui: SuiService, graphql: SuiGraphQLClient, protocol: MusicosService, partyosService: PartyosService, rawDeployment: MisoPlatformDeployment): MisoService {
440
+ // Recursively frozen snapshot taken at layer-build time, matching the
441
+ // predecessor `MisoPlatformClient`'s own guarantee ("later caller mutation
442
+ // cannot retarget an existing client") — a custom deployment object the
443
+ // caller keeps a reference to and mutates after `miso({ deployment })`
444
+ // must not reach back into an already-built `Miso` instance.
445
+ const deployment = immutableSnapshot(rawDeployment);
446
+ const withSui = <A, E>(effect: Effect.Effect<A, E, Sui>): Effect.Effect<A, E> => effect.pipe(Effect.provideService(Sui, sui));
447
+ /** `Sui` and `SuiGraphQL` both provided — safe even for a `Sui`-only effect (an unused service is simply not read). */
448
+ const withEnv = <A, E>(effect: Effect.Effect<A, E, Sui | SuiGraphQL>): Effect.Effect<A, E> =>
449
+ effect.pipe(Effect.provideService(Sui, sui), Effect.provideService(SuiGraphQL, graphql));
450
+
451
+ const party = makeMisoParty(sui, partyosService, deployment.party);
452
+
453
+ // ── Sales binding (RecordSalesUnavailableError when unavailable) ─────────
454
+ const sales = (): Extract<RecordSalesDeployment, { status: "available" }> => requireRecordSalesDeployment(deployment.recordSales);
455
+ const salesOrFail = (): Effect.Effect<Extract<RecordSalesDeployment, { status: "available" }>, RecordSalesUnavailableError> =>
456
+ Effect.try({ try: sales, catch: (cause) => cause as RecordSalesUnavailableError });
457
+
458
+ // ── Operations binding (OperationsUnavailableError when unavailable) ─────
459
+ const operations = (): AvailableOperationsDeployment => requireOperationsDeployment(deployment.operations);
460
+ const availableOperations = (): AvailableOperationsDeployment | undefined => (deployment.operations.status === "available" ? requireOperationsDeployment(deployment.operations) : undefined);
461
+ /** `operations`, as a typed Effect failure instead of a synchronous throw — mirrors `salesOrFail` above. */
462
+ const operationsOrFail = (): Effect.Effect<AvailableOperationsDeployment, OperationsUnavailableError> =>
463
+ Effect.try({ try: operations, catch: (cause) => cause as OperationsUnavailableError });
464
+
465
+ // ── Reads ─────────────────────────────────────────────────────────────
466
+ const misoGetPressing = (pressingId: string): Effect.Effect<Pressing | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError> =>
467
+ withSui(Effect.flatMap(salesOrFail(), (s) => getPressing(pressingId, s.recordPackageId)));
468
+ const misoGetListing = (listingId: string): Effect.Effect<Listing | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError> =>
469
+ withSui(Effect.flatMap(salesOrFail(), (s) => getListing(listingId, s.recordShopPackageId)));
470
+ const misoGetRecord = (recordId: string): Effect.Effect<PressingRecord | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError> =>
471
+ withSui(Effect.flatMap(salesOrFail(), (s) => getRecord(recordId, s.recordPackageId)));
472
+ const misoGetSale = (
473
+ p: Configured<GetSaleParams>,
474
+ ): Effect.Effect<{ pressing: Pressing | null; listing: Listing | null }, DecodeError | ObjectDeleted | ObjectUnavailable | TransportError | RecordSalesUnavailableError> =>
475
+ withSui(
476
+ Effect.flatMap(salesOrFail(), (s) =>
477
+ getSale({ ...p, recordPackageId: s.recordPackageId, recordShopPackageId: s.recordShopPackageId }),
478
+ ),
479
+ );
480
+
481
+ // ── Address math (`ids.*`, sync — throws RecordSalesUnavailableError/OperationsUnavailableError) ──
482
+ const ids: MisoIds = {
483
+ pressing: (releaseId, edition) => derivePressingId(releaseId, edition, sales().recordPackageId),
484
+ pressingAdminCap: (pressingId) => derivePressingAdminCapId(pressingId, sales().recordPackageId),
485
+ record: (pressingId, number) => deriveRecordId(pressingId, number, sales().recordPackageId),
486
+ listing: (pressingId, currencyType) => deriveListingId(pressingId, currencyType, sales().recordShopPackageId),
487
+ sale: (releaseId, edition, currencyType) => deriveSaleIds(releaseId, edition, currencyType, sales().recordPackageId, sales().recordShopPackageId),
488
+ vault: (capId, capType) => vaultActions.deriveVaultId({ vaultRegistryId: operations().vault.registryId, capId, capType, vaultPackageId: operations().vault.packageId }),
489
+ vaultAdminCap: (vaultId) => vaultActions.deriveVaultAdminCapId(vaultId, operations().vault.packageId),
490
+ genre: (canonicalName) => deriveGenreAddress(deployment.objects.genreRegistry, deployment.packages.genre, canonicalName),
491
+ };
492
+
493
+ // ── Transaction builders (`tx.*`, sync recipes) ──────────────────────────
494
+ const tx: MisoTx = {
495
+ purchaseRecord: (p) => purchaseRecord({ ...p, recordPackageId: sales().recordPackageId, recordShopPackageId: sales().recordShopPackageId }),
496
+ openPressing: (p) => openPressing({ ...p, recordPackageId: sales().recordPackageId, recordShopPackageId: sales().recordShopPackageId }),
497
+ openListing: (p) => openListing({ ...p, recordShopPackageId: sales().recordShopPackageId }),
498
+ authorizeRecordShop: (p) => authorizeRecordShop({ ...p, recordPackageId: sales().recordPackageId, recordShopPackageId: sales().recordShopPackageId }),
499
+ revokeRecordShop: (p) => revokeRecordShop({ ...p, recordPackageId: sales().recordPackageId, recordShopPackageId: sales().recordShopPackageId }),
500
+ setListingPrice: (p) => setListingPrice({ ...p, recordShopPackageId: sales().recordShopPackageId }),
501
+ setListingState: (p) => setListingState({ ...p, recordShopPackageId: sales().recordShopPackageId }),
502
+
503
+ publishShareCurrency,
504
+ initializeShareCurrency,
505
+ publishComposition: (p) => publishComposition({ ...p, misoPackageId: deployment.protocol.musicos, minatoPackageId: deployment.packages.minato }),
506
+ publishRecording: (p) => publishRecording({ ...p, misoPackageId: deployment.protocol.musicos, minatoPackageId: deployment.packages.minato }),
507
+ publishCompositionAndRecording: (p) => publishCompositionAndRecording({ ...p, misoPackageId: deployment.protocol.musicos, minatoPackageId: deployment.packages.minato }),
508
+ publishRelease: (p) => publishRelease({ ...p, misoPackageId: deployment.protocol.musicos, releaseRegistryId: deployment.objects.releaseRegistry }),
509
+ publishReleaseGraph: (p) => publishReleaseGraph({ ...p, misoPackageId: deployment.protocol.musicos, minatoPackageId: deployment.packages.minato }),
510
+ setReleaseKind: (p) => setReleaseKind({ ...p, releaseKindPackageId: deployment.packages.releaseKind }),
511
+ setReleaseDescription: (p) => setReleaseDescription({ ...p, releaseDescriptionPackageId: deployment.packages.releaseDescription }),
512
+ setReleaseGenres: (p) => setReleaseGenres({ ...p, releaseGenrePackageId: deployment.packages.releaseGenre }),
513
+ clearReleaseGenres: (p) => clearReleaseGenres({ ...p, releaseGenrePackageId: deployment.packages.releaseGenre }),
514
+ setReleaseDspLinks: (p) => setReleaseDspLinks({ ...p, releaseDspLinkPackageId: deployment.packages.releaseDspLink }),
515
+ addReleaseCredit: (p) => addReleaseCredit({ ...p, releaseCreditsPackageId: deployment.packages.releaseCredits, misoCreditPackageId: deployment.packages.credit }),
516
+ setReleaseCover: (p) => setReleaseCover({ ...p, coverArtPackageId: deployment.packages.coverArt, releaseCoverArtPackageId: deployment.packages.releaseCoverArt, oriPackageId: deployment.packages.ori }),
517
+ setReleaseTrackCover: (p) => setReleaseTrackCover({ ...p, coverArtPackageId: deployment.packages.coverArt, releaseCoverArtPackageId: deployment.packages.releaseCoverArt, oriPackageId: deployment.packages.ori }),
518
+ setRecordingStreamingTranscode: (p) =>
519
+ setRecordingStreamingTranscode({
520
+ ...p,
521
+ recordingStreamingTranscodePackageId: requiredPackage(deployment.packages.recordingStreamingTranscode, "recordingStreamingTranscode", "setRecordingStreamingTranscode"),
522
+ oriPackageId: deployment.packages.ori,
523
+ }),
524
+ unsetRecordingStreamingTranscode: (p) =>
525
+ unsetRecordingStreamingTranscode({ ...p, recordingStreamingTranscodePackageId: requiredPackage(deployment.packages.recordingStreamingTranscode, "recordingStreamingTranscode", "unsetRecordingStreamingTranscode") }),
526
+ setRecordingGenres: (p) => setRecordingGenres({ ...p, recordingGenrePackageId: requiredPackage(deployment.packages.recordingGenre, "recordingGenre", "setRecordingGenres") }),
527
+ clearRecordingGenres: (p) => clearRecordingGenres({ ...p, recordingGenrePackageId: requiredPackage(deployment.packages.recordingGenre, "recordingGenre", "clearRecordingGenres") }),
528
+ };
529
+
530
+ // ── Generated call/bcs bindings ──────────────────────────────────────────
531
+ const availableSales = deployment.recordSales.status === "available" ? deployment.recordSales : undefined;
532
+ const ops = availableOperations();
533
+ const call: MisoCall = {
534
+ record: availableSales
535
+ ? bindModulePackage(recordContract, availableSales.recordPackageId, [
536
+ "destroy", "releaseId", "pressingId", "edition", "number", "purchaseCurrency", "purchasePrice", "purchasedBy", "purchasedTimestampMs", "deriveAddress",
537
+ ] as const)
538
+ : undefined,
539
+ listing: availableSales
540
+ ? bindModulePackage(listingContract, availableSales.recordShopPackageId, [
541
+ "fixed", "floor", "enabled", "disabled", "setState", "setPrice", "purchase", "deriveAddress", "releaseId", "pressingId", "pricing", "price", "state", "isEnabled", "isDisabled", "isFixed", "isFloor",
542
+ ] as const)
543
+ : undefined,
544
+ pressing: availableSales
545
+ ? bindModulePackage(pressingContract, availableSales.recordPackageId, [
546
+ "authorizeDistributor", "revokeDistributor", "deriveAddress", "deriveAdminCapAddress", "releaseId", "edition", "supply", "maxSupply", "distributors", "isDistributorAuthorized", "pressingId",
547
+ ] as const)
548
+ : undefined,
549
+ genre: bindModulePackage(genreContract, deployment.packages.genre, ["deriveAddress"] as const),
550
+ releaseDescription: bindModulePackage(releaseDescriptionContract, deployment.packages.releaseDescription, ["setDescription", "clearDescription", "hasDescription"] as const),
551
+ releaseDspLink: bindModulePackage(releaseDspLinkContract, deployment.packages.releaseDspLink, [
552
+ "platform", "platformSpotify", "platformAppleMusic", "platformAmazonMusic", "platformBandcamp", "platformDeezer", "platformSoundcloud", "platformTidal", "platformYoutubeMusic",
553
+ "newSpotify", "newAppleMusicAlbum", "newAppleMusicTrack", "newAmazonMusicAlbum", "newAmazonMusicTrack", "newBandcamp", "newDeezer", "newSoundcloud", "newTidal", "newYoutubeMusic",
554
+ "setReleaseLink", "clearReleaseLink", "setTrackLink", "clearTrackLink", "clearTrackLinks", "hasReleaseLink",
555
+ ] as const),
556
+ releaseGenre: bindModulePackage(releaseGenreContract, deployment.packages.releaseGenre, ["addGenre", "removeGenre", "clearGenres"] as const),
557
+ releaseKind: bindModulePackage(releaseKindContract, deployment.packages.releaseKind, ["setKind", "unsetKind", "hasKind"] as const),
558
+ releaseRevenueDistributor: ops
559
+ ? bindModulePackage(releaseRevenueDistributorContract, ops.actions.releaseRevenueDistributor, ["redeemAndDistribute", "redeemAllAndDistribute", "receiveAndDistribute"] as const)
560
+ : undefined,
561
+ releaseRevenueDistributorPlugin: ops
562
+ ? bindModulePackage(releaseRevenueDistributorPluginContract, ops.plugins.releaseRevenueDistributor, ["install", "uninstall", "redeemAllAndDistribute", "receiveAndDistribute", "isInstalled"] as const)
563
+ : undefined,
564
+ vault: ops
565
+ ? bindModulePackage(vaultContract, ops.vault.packageId, ["share", "withdrawCap", "restoreCap", "derivedAddress", "capId", "isActive", "authorizedPlugins", "isPluginAuthorized"] as const)
566
+ : undefined,
567
+ compositionRoyaltyPool: ops
568
+ ? bindModulePackage(compositionRoyaltyPoolContract, ops.actions.compositionRoyaltyPool, ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"] as const)
569
+ : undefined,
570
+ compositionRoyaltyPoolPlugin: ops
571
+ ? bindModulePackage(compositionRoyaltyPoolPluginContract, ops.plugins.compositionRoyaltyPool, ["install", "uninstall", "receiveAndDeposit", "redeemAndDeposit", "isInstalled"] as const)
572
+ : undefined,
573
+ recordingRoyaltyPool: ops
574
+ ? bindModulePackage(recordingRoyaltyPoolContract, ops.actions.recordingRoyaltyPool, ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"] as const)
575
+ : undefined,
576
+ recordingRoyaltyPoolPlugin: ops
577
+ ? bindModulePackage(recordingRoyaltyPoolPluginContract, ops.plugins.recordingRoyaltyPool, ["install", "uninstall", "receiveAndDeposit", "redeemAndDeposit", "isInstalled"] as const)
578
+ : undefined,
579
+ partyWallet: ops ? bindModulePackage(partyWalletContract, ops.actions.partyWallet, ["receive", "receiveBalance", "redeemBalance", "inboxAddress"] as const) : undefined,
580
+ compositionRoutedStake: ops
581
+ ? bindModulePackage(compositionRoutedStakeContract, ops.actions.compositionRoutedStake, ["createStake", "register", "unregister", "unstake", "restake", "stakeAddress"] as const)
582
+ : undefined,
583
+ routedStake: bindModulePackage(routedStakeContract, deployment.packages.routedStake, ["share", "register", "unregister", "sweep", "unstake", "restake", "derivedAddress"] as const),
584
+ royaltyPool: bindModulePackage(royaltyPoolContract, deployment.packages.royaltyPool, [
585
+ "share", "deposit", "settle", "recoverCoins", "registerStake", "unregisterStake", "claimRewards", "pendingRewards", "stakedShares", "cumulativeRewardPerShare", "carry", "cumulativeDeposits", "settledValue", "derivedAddress", "assertDerivedFrom",
586
+ ] as const),
587
+ recordingAdvisory: bindModulePackage(recordingAdvisoryContract, deployment.packages.recordingAdvisory, ["explicit", "notExplicit", "cleaned", "setRating", "unsetRating", "hasRating", "isExplicit", "isNotExplicit", "isCleaned"] as const),
588
+ recordingLanguage: bindModulePackage(recordingLanguageContract, deployment.packages.recordingLanguage, ["setLanguages", "setInstrumental", "unsetLanguages", "hasLanguages", "isInstrumental"] as const),
589
+ recordingMasterReference: bindModulePackage(recordingMasterReferenceContract, deployment.packages.recordingMasterReference, ["setMasterReference", "unsetMasterReference", "hasMasterReference"] as const),
590
+ recordingStreamingTranscode: deployment.packages.recordingStreamingTranscode
591
+ ? bindModulePackage(recordingStreamingTranscodeContract, deployment.packages.recordingStreamingTranscode, ["setStreamingTranscode", "unsetStreamingTranscode", "hasStreamingTranscode"] as const)
592
+ : undefined,
593
+ recordingGenre: deployment.packages.recordingGenre ? bindModulePackage(recordingGenreContract, deployment.packages.recordingGenre, ["addGenre", "removeGenre", "clearGenres"] as const) : undefined,
594
+ coverArt: bindModulePackage(coverArtContract, deployment.packages.coverArt, [] as const),
595
+ releaseCoverArt: bindModulePackage(releaseCoverArtContract, deployment.packages.releaseCoverArt, ["setCover", "unsetCover", "setTrackCover", "unsetTrackCover", "hasCoverArt"] as const),
596
+ releaseCredits: bindModulePackage(releaseCreditsContract, deployment.packages.releaseCredits, ["addCredit", "removeCredit", "hasCredits"] as const),
597
+ };
598
+
599
+ const bcs: MisoBcs = {
600
+ Record: recordContract.Record,
601
+ Pressing: pressingContract.Pressing,
602
+ PressingAdminCap: pressingContract.PressingAdminCap,
603
+ Listing: listingContract.Listing,
604
+ Pricing: listingContract.Pricing,
605
+ ListingState: listingContract.State,
606
+ RecordCreatedEvent: recordContract.RecordCreatedEvent,
607
+ RecordDestroyedEvent: recordContract.RecordDestroyedEvent,
608
+ PressingCreatedEvent: pressingContract.PressingCreatedEvent,
609
+ DistributorAuthorizedEvent: pressingContract.DistributorAuthorizedEvent,
610
+ DistributorRevokedEvent: pressingContract.DistributorRevokedEvent,
611
+ RecordPurchasedEvent: pressingContract.RecordPurchasedEvent,
612
+ PressingSharedEvent: pressingContract.PressingSharedEvent,
613
+ PressingDistributorAuthorizedEvent: pressingContract.PressingDistributorAuthorizedEvent,
614
+ PressingDistributorRevokedEvent: pressingContract.PressingDistributorRevokedEvent,
615
+ ListingCreatedEvent: listingContract.ListingCreatedEvent,
616
+ ListingSharedEvent: listingContract.ListingSharedEvent,
617
+ ListingPriceChangedEvent: listingContract.ListingPriceChangedEvent,
618
+ ListingStateChangedEvent: listingContract.ListingStateChangedEvent,
619
+ RecordSoldEvent: listingContract.RecordSoldEvent,
620
+ VaultAdminCap: vaultContract.VaultAdminCap,
621
+ VaultRegistry: vaultContract.VaultRegistry,
622
+ VaultKey: vaultContract.VaultKey,
623
+ VaultAdminCapKey: vaultContract.VaultAdminCapKey,
624
+ VaultCreatedEvent: vaultContract.VaultCreatedEvent,
625
+ VaultRegistryCreatedEvent: vaultContract.VaultRegistryCreatedEvent,
626
+ VaultSharedEvent: vaultContract.VaultSharedEvent,
627
+ PluginAuthorizedEvent: vaultContract.PluginAuthorizedEvent,
628
+ PluginRevokedEvent: vaultContract.PluginRevokedEvent,
629
+ VaultCapabilityWithdrawnEvent: vaultContract.VaultCapabilityWithdrawnEvent,
630
+ VaultCapabilityRestoredEvent: vaultContract.VaultCapabilityRestoredEvent,
631
+ VaultCapabilityBorrowedByPluginEvent: vaultContract.VaultCapabilityBorrowedByPluginEvent,
632
+ VaultCapabilityBorrowedByAdminEvent: vaultContract.VaultCapabilityBorrowedByAdminEvent,
633
+ VaultCapabilityReturnedEvent: vaultContract.VaultCapabilityReturnedEvent,
634
+ PartyObjectReceivedEvent: partyWalletContract.ObjectReceivedEvent,
635
+ PartyCoinsReceivedEvent: partyWalletContract.CoinsReceivedEvent,
636
+ PartyFundsRedeemedEvent: partyWalletContract.FundsRedeemedEvent,
637
+ ReleaseTrackRevenueDistributedEvent: releaseRevenueDistributorContract.ReleaseTrackRevenueDistributedEvent,
638
+ ReleaseRevenueDistributedEvent: releaseRevenueDistributorContract.ReleaseRevenueDistributedEvent,
639
+ ReleaseCoinsReceivedEvent: releaseRevenueDistributorContract.ReleaseCoinsReceivedEvent,
640
+ ReleaseFundsRedeemedEvent: releaseRevenueDistributorContract.ReleaseFundsRedeemedEvent,
641
+ };
642
+
643
+ // ── Vault namespace: always present; every member throws/fails OperationsUnavailableError when unavailable ──
644
+ //
645
+ // `getVaultAdminCap`/`resolveReceivingCoins` are `Effect`-returning members,
646
+ // not synchronous PTB builders — `gateAvailability`'s Proxy calls its
647
+ // `guard()` synchronously, on every property access, before the wrapped
648
+ // function even runs, which is exactly right for a sync builder (the
649
+ // predecessor's own behaviour: throw before building) but wrong for an
650
+ // `Effect` member, which a Promise/Effect caller expects to REJECT/fail,
651
+ // never to throw synchronously out of merely calling it. So these two stay
652
+ // out of the Proxy and gate themselves through `operationsOrFail()`
653
+ // (mirroring `salesOrFail` above) composed into their own `Effect` chain —
654
+ // calling them always returns a value; only running it can fail (B2,
655
+ // misofm/sdks#35 verification).
656
+ const { getVaultAdminCap: _unusedGetVaultAdminCap, resolveReceivingCoins: _unusedResolveReceivingCoins, ...vaultActionsWithoutEffectMembers } = vaultActions;
657
+ const vault: MisoVault = {
658
+ ...gateAvailability(vaultActionsWithoutEffectMembers, () => {
659
+ requireOperationsDeployment(deployment.operations);
660
+ }),
661
+ getVaultAdminCap: (vaultAdminCapId: string, capType: string) =>
662
+ withSui(Effect.flatMap(operationsOrFail(), (ops) => vaultActions.getVaultAdminCap(vaultAdminCapId, { vaultPackageId: ops.vault.packageId, capType }))),
663
+ resolveReceivingCoins: (coinIds: readonly string[]) => withSui(Effect.flatMap(operationsOrFail(), () => vaultActions.resolveReceivingCoins(coinIds))),
664
+ } as MisoVault;
665
+
666
+ // ── Submissions ───────────────────────────────────────────────────────────
667
+ const misoCreateShareCurrency = (params: Parameters<typeof createShareCurrency>[0], opts: RunOpts): Effect.Effect<ShareCurrency, RunError | UnexpectedEffects> => withSui(createShareCurrency(params, opts));
668
+ const misoPublishShareCurrencies = (count: number, opts: Parameters<typeof publishShareCurrencies>[1]): Effect.Effect<{ packageIds: string[]; gasUsed: bigint }, RunError | UnexpectedEffects> => withSui(publishShareCurrencies(count, opts));
669
+ const misoInitializeShareCurrencies = <E = never>(
670
+ packageIds: readonly string[],
671
+ metaOf: (packageId: string) => ShareCurrencyMeta,
672
+ opts: Parameters<typeof initializeShareCurrencies<E>>[2],
673
+ ): Effect.Effect<{ currencies: ShareCurrency[]; gasUsed: bigint }, RunError | UnexpectedEffects | E> => withSui(initializeShareCurrencies(packageIds, metaOf, opts));
674
+
675
+ const misoPublishCatalog = (
676
+ params: Omit<AtomicPublicationParams, "deployment">,
677
+ opts: RunOpts,
678
+ ): Effect.Effect<AtomicPublicationResult, RunError | UnexpectedEffects> => {
679
+ const full: AtomicPublicationParams = { ...params, deployment };
680
+ return withSui(Effect.map(Tx.run(publishAtomicCatalog(full), opts), (executed) => parseAtomicPublicationResult(full, executed)));
681
+ };
682
+
683
+ // ── `read.*`: the high-level views, config captured from this deployment ──
684
+ const readConfig: MisoConfig = configFromDeployment(deployment);
685
+ const read = {
686
+ currencyInfo: readCatalog.currencyInfo,
687
+ primaryArtistNames: readCatalog.primaryArtistNames,
688
+ toTracks: readCatalog.toTracks,
689
+ getPressingView: (pressingId: string) => withEnv(readCatalog.getPressingView(pressingId, readConfig)),
690
+ getListingView: (pressingId: string, currencyType: string) => withEnv(readCatalog.getListingView(pressingId, currencyType, readConfig)),
691
+ readReleaseCover: (releaseId: string) => withEnv(readCatalog.readReleaseCover(releaseId, readConfig)),
692
+ getReleaseResources: (releaseId: string, include?: Parameters<typeof readCatalog.getReleaseResources>[2]) => withEnv(readCatalog.getReleaseResources(releaseId, readConfig, include)),
693
+ getReleaseDetail: (releaseId: string, options?: Parameters<typeof readCatalog.getReleaseDetail>[2]) => withEnv(readCatalog.getReleaseDetail(releaseId, readConfig, options)),
694
+ getTrackCredits: (releaseId: string) => withEnv(readCatalog.getTrackCredits(releaseId, readConfig)),
695
+ getPressingDetail: (pressingId: string, options?: Parameters<typeof readCatalog.getPressingDetail>[2]) => withEnv(readCatalog.getPressingDetail(pressingId, readConfig, options)),
696
+ getPressingSaleDetail: (pressingId: string, currencyType: string, options?: Parameters<typeof readCatalog.getPressingSaleDetail>[3]) =>
697
+ withEnv(readCatalog.getPressingSaleDetail(pressingId, currencyType, readConfig, options)),
698
+ getPressingPreview: (pressingId: string) => withEnv(readCatalog.getPressingPreview(pressingId, readConfig)),
699
+ getSaleDetail: (releaseId: string, edition: number, currencyType: string, options?: Parameters<typeof readCatalog.getSaleDetail>[4]) =>
700
+ withEnv(readCatalog.getSaleDetail(releaseId, edition, currencyType, readConfig, options)),
701
+ getDiscoverShelf: () => withEnv(readCatalog.getDiscoverShelf(readConfig)),
702
+ getRecordAlbum: (recordId: string, options?: Parameters<typeof readCatalog.getRecordAlbum>[2]) => withEnv(readCatalog.getRecordAlbum(recordId, readConfig, options)),
703
+
704
+ partyAvatarUrl: (partyId: string) => readArtist.partyAvatarUrl(readConfig.apiBaseUrl, partyId),
705
+ getArtistProfile: (partyId: string, options?: Parameters<typeof readArtist.getArtistProfile>[2]) => withEnv(readArtist.getArtistProfile(partyId, readConfig, options)),
706
+ getPartySummaries: (ids: readonly string[]) => withEnv(readArtist.getPartySummaries(ids, readConfig)),
707
+
708
+ resolveGenreNames: (genreIds: readonly string[]) => withSui(readGenres.resolveGenreNames(genreIds)),
709
+
710
+ getBalance: (address: string, coinType?: string) => withSui(readWallet.getBalance(address, readConfig, coinType)),
711
+ getOwnedParties: (owner: string) => withEnv(readWallet.getOwnedParties(owner, readConfig)),
712
+ getPendingMemberships: (owner: string) => withEnv(readWallet.getPendingMemberships(owner, readConfig)),
713
+ getOwnedRecords: (owner: string) => withEnv(readWallet.getOwnedRecords(owner, readConfig)),
714
+ getOwnedWorks: (owner: string) => withEnv(readWallet.getOwnedWorks(owner, readConfig)),
715
+ getWorkByCap: (capId: string) => withEnv(readWallet.getWorkByCap(capId, readConfig)),
716
+ ownsParty: (address: string, partyId: string) => withEnv(readWallet.ownsParty(address, partyId, readConfig)),
717
+ ownsRecord: (address: string, recordId: string) => withSui(readWallet.ownsRecord(address, recordId)),
718
+
719
+ isRecordSoldEventType: readReceipts.isRecordSoldEventType,
720
+ recordSoldCurrencyType: readReceipts.recordSoldCurrencyType,
721
+ findRecordSales: readReceipts.findRecordSales,
722
+ findRecordSale: readReceipts.findRecordSale,
723
+ breakdown: readReceipts.breakdown,
724
+ getPurchaseReceipts: (txDigest: string) => withEnv(readReceipts.getPurchaseReceipts(txDigest, readConfig)),
725
+ getPurchaseReceipt: (txDigest: string, recordId: string) => withEnv(readReceipts.getPurchaseReceipt(txDigest, recordId, readConfig)),
726
+
727
+ ROYALTY_CLAIMS_PAGE_LIMIT: readRoyalties.ROYALTY_CLAIMS_PAGE_LIMIT,
728
+ royaltyClaimedEventType: () => readRoyalties.royaltyClaimedEventType(readConfig),
729
+ listRoyaltyClaims: (address: string, options?: Parameters<typeof readRoyalties.listRoyaltyClaims>[2]) => withEnv(readRoyalties.listRoyaltyClaims(address, readConfig, options)),
730
+ };
731
+
732
+ return {
733
+ deployment,
734
+ network: deployment.network,
735
+ chainId: deployment.chainIdentifier,
736
+ protocol,
737
+ party,
738
+
739
+ getPressing: misoGetPressing,
740
+ getListing: misoGetListing,
741
+ getRecord: misoGetRecord,
742
+ getSale: misoGetSale,
743
+ ids,
744
+ tx,
745
+ call,
746
+ bcs,
747
+ vault,
748
+ createShareCurrency: misoCreateShareCurrency,
749
+ publishShareCurrencies: misoPublishShareCurrencies,
750
+ initializeShareCurrencies: misoInitializeShareCurrencies,
751
+ publishCatalog: misoPublishCatalog,
752
+ read,
753
+ events: platformEventParsers,
754
+ /** @deprecated Warm-up compatibility member — see `docs/CONVERSION.md`; every member is already real once `warm`/`$ready()` resolved this runtime. */
755
+ ready: Effect.void,
756
+ };
757
+ }
758
+
759
+ export interface MisoService {
760
+ /** The exact deployment this instance was built with. */
761
+ readonly deployment: MisoPlatformDeployment;
762
+ /** The network this deployment is for (`deployment.network`). */
763
+ readonly network: MisoPlatformDeployment["network"];
764
+ /** The chain identifier this instance was validated against (`deployment.chainIdentifier`). */
765
+ readonly chainId: string;
766
+ /**
767
+ * The converted `@misofm/musicos` protocol service, always present.
768
+ *
769
+ * Typed as a mapped copy of `MusicosService`, not the interface itself:
770
+ * sui-effect 0.1.0's `PromiseFace<S>` recurses only into members assignable
771
+ * to `Record<string, unknown>`, and an `interface` (unlike a mapped type,
772
+ * which resolves to a fresh object type) is not — so `client.miso.protocol`
773
+ * would keep typing every member as `Effect`-returning while the derived
774
+ * Promise face maps them to Promise-returning methods at runtime
775
+ * (misofm/sdks#35 verification, A1; fixed on the 0.1.0 library's behaviour
776
+ * here since `MusicosService` itself is not this package's to redeclare —
777
+ * `@misofm/musicos`, not `@unconfirmed/sui-effect`, so 0.1.1's own
778
+ * `PromiseFace` fix does not retroactively change this; this mapped-type
779
+ * wrapping stays correct either way). See `docs/CONVERSION.md` "Stage 5".
780
+ */
781
+ readonly protocol: { readonly [K in keyof MusicosService]: MusicosService[K] };
782
+ /** The party surface: `@misofm/partyos` core plus this package's own party extensions. */
783
+ readonly party: MisoPartyService;
784
+
785
+ /** The run itself, or `null` if this release has never opened one. Fails with `RecordSalesUnavailableError` when this deployment has no Record sales. */
786
+ readonly getPressing: (pressingId: string) => Effect.Effect<Pressing | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError>;
787
+ /** One currency's offer, or `null` if the run does not sell in it. */
788
+ readonly getListing: (listingId: string) => Effect.Effect<Listing | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError>;
789
+ /** One concrete purchased Record, including immutable purchase provenance. */
790
+ readonly getRecord: (recordId: string) => Effect.Effect<PressingRecord | null, DecodeError | ObjectUnavailable | TransportError | RecordSalesUnavailableError>;
791
+ /** Run + one currency's offer in a single round trip, by address math. */
792
+ readonly getSale: (p: Configured<GetSaleParams>) => Effect.Effect<{ pressing: Pressing | null; listing: Listing | null }, DecodeError | ObjectDeleted | ObjectUnavailable | TransportError | RecordSalesUnavailableError>;
793
+
794
+ /** Address math (sync); throws `RecordSalesUnavailableError`/`OperationsUnavailableError` when the relevant deployment section is unavailable. */
795
+ readonly ids: MisoIds;
796
+ /** PTB fragments (sync); throws the same errors as `ids.*` at build time for a gated builder. */
797
+ readonly tx: MisoTx;
798
+ /** Generated Move-call bindings, `undefined` for a section this deployment doesn't configure. */
799
+ readonly call: MisoCall;
800
+ /** Generated BCS structs, for parsing objects or events yourself. */
801
+ readonly bcs: MisoBcs;
802
+ /** Vault/Action/plugin builders and reads; always an object — every member throws `OperationsUnavailableError` when unavailable. */
803
+ readonly vault: MisoVault;
804
+
805
+ /** Two `Tx.run`s (publish, then initialize) under one signer. Fails with: `RunError`, `UnexpectedEffects`. */
806
+ readonly createShareCurrency: (params: Parameters<typeof createShareCurrency>[0], opts: RunOpts) => Effect.Effect<ShareCurrency, RunError | UnexpectedEffects>;
807
+ /** Batched publishing, ≤5 per `Tx.run`. Fails with: `RunError`, `UnexpectedEffects`. */
808
+ readonly publishShareCurrencies: (count: number, opts: Parameters<typeof publishShareCurrencies>[1]) => Effect.Effect<{ packageIds: string[]; gasUsed: bigint }, RunError | UnexpectedEffects>;
809
+ /** Batched initialization, ≤10 per `Tx.run`; `onBatch` reports each succeeded batch before a later one's typed failure. Fails with: `RunError | UnexpectedEffects | E`. */
810
+ readonly initializeShareCurrencies: <E = never>(
811
+ packageIds: readonly string[],
812
+ metaOf: (packageId: string) => ShareCurrencyMeta,
813
+ opts: Parameters<typeof initializeShareCurrencies<E>>[2],
814
+ ) => Effect.Effect<{ currencies: ShareCurrency[]; gasUsed: bigint }, RunError | UnexpectedEffects | E>;
815
+ /** The complete post-share catalog graph as one atomic PTB, submitted once. Fails with: `RunError`, `UnexpectedEffects`. */
816
+ readonly publishCatalog: (params: Omit<AtomicPublicationParams, "deployment">, opts: RunOpts) => Effect.Effect<AtomicPublicationResult, RunError | UnexpectedEffects>;
817
+
818
+ /** The high-level, JSON-safe `read/*` views, with `config` already captured from this deployment. */
819
+ readonly read: {
820
+ readonly currencyInfo: typeof readCatalog.currencyInfo;
821
+ readonly primaryArtistNames: typeof readCatalog.primaryArtistNames;
822
+ readonly toTracks: typeof readCatalog.toTracks;
823
+ readonly getPressingView: (pressingId: string) => ReturnType<typeof readCatalog.getPressingView>;
824
+ readonly getListingView: (pressingId: string, currencyType: string) => ReturnType<typeof readCatalog.getListingView>;
825
+ readonly readReleaseCover: (releaseId: string) => ReturnType<typeof readCatalog.readReleaseCover>;
826
+ readonly getReleaseResources: (releaseId: string, include?: Parameters<typeof readCatalog.getReleaseResources>[2]) => ReturnType<typeof readCatalog.getReleaseResources>;
827
+ readonly getReleaseDetail: (releaseId: string, options?: Parameters<typeof readCatalog.getReleaseDetail>[2]) => ReturnType<typeof readCatalog.getReleaseDetail>;
828
+ readonly getTrackCredits: (releaseId: string) => ReturnType<typeof readCatalog.getTrackCredits>;
829
+ readonly getPressingDetail: (pressingId: string, options?: Parameters<typeof readCatalog.getPressingDetail>[2]) => ReturnType<typeof readCatalog.getPressingDetail>;
830
+ readonly getPressingSaleDetail: (pressingId: string, currencyType: string, options?: Parameters<typeof readCatalog.getPressingSaleDetail>[3]) => ReturnType<typeof readCatalog.getPressingSaleDetail>;
831
+ readonly getPressingPreview: (pressingId: string) => ReturnType<typeof readCatalog.getPressingPreview>;
832
+ readonly getSaleDetail: (releaseId: string, edition: number, currencyType: string, options?: Parameters<typeof readCatalog.getSaleDetail>[4]) => ReturnType<typeof readCatalog.getSaleDetail>;
833
+ readonly getDiscoverShelf: () => ReturnType<typeof readCatalog.getDiscoverShelf>;
834
+ readonly getRecordAlbum: (recordId: string, options?: Parameters<typeof readCatalog.getRecordAlbum>[2]) => ReturnType<typeof readCatalog.getRecordAlbum>;
835
+
836
+ readonly partyAvatarUrl: (partyId: string) => string;
837
+ readonly getArtistProfile: (partyId: string, options?: Parameters<typeof readArtist.getArtistProfile>[2]) => ReturnType<typeof readArtist.getArtistProfile>;
838
+ readonly getPartySummaries: (ids: readonly string[]) => ReturnType<typeof readArtist.getPartySummaries>;
839
+
840
+ readonly resolveGenreNames: (genreIds: readonly string[]) => ReturnType<typeof readGenres.resolveGenreNames>;
841
+
842
+ readonly getBalance: (address: string, coinType?: string) => ReturnType<typeof readWallet.getBalance>;
843
+ readonly getOwnedParties: (owner: string) => ReturnType<typeof readWallet.getOwnedParties>;
844
+ readonly getPendingMemberships: (owner: string) => ReturnType<typeof readWallet.getPendingMemberships>;
845
+ readonly getOwnedRecords: (owner: string) => ReturnType<typeof readWallet.getOwnedRecords>;
846
+ readonly getOwnedWorks: (owner: string) => ReturnType<typeof readWallet.getOwnedWorks>;
847
+ readonly getWorkByCap: (capId: string) => ReturnType<typeof readWallet.getWorkByCap>;
848
+ readonly ownsParty: (address: string, partyId: string) => ReturnType<typeof readWallet.ownsParty>;
849
+ readonly ownsRecord: (address: string, recordId: string) => ReturnType<typeof readWallet.ownsRecord>;
850
+
851
+ readonly isRecordSoldEventType: typeof readReceipts.isRecordSoldEventType;
852
+ readonly recordSoldCurrencyType: typeof readReceipts.recordSoldCurrencyType;
853
+ readonly findRecordSales: typeof readReceipts.findRecordSales;
854
+ readonly findRecordSale: typeof readReceipts.findRecordSale;
855
+ readonly breakdown: typeof readReceipts.breakdown;
856
+ readonly getPurchaseReceipts: (txDigest: string) => ReturnType<typeof readReceipts.getPurchaseReceipts>;
857
+ readonly getPurchaseReceipt: (txDigest: string, recordId: string) => ReturnType<typeof readReceipts.getPurchaseReceipt>;
858
+
859
+ readonly ROYALTY_CLAIMS_PAGE_LIMIT: number;
860
+ readonly royaltyClaimedEventType: () => string;
861
+ readonly listRoyaltyClaims: (address: string, options?: Parameters<typeof readRoyalties.listRoyaltyClaims>[2]) => ReturnType<typeof readRoyalties.listRoyaltyClaims>;
862
+ };
863
+
864
+ /** The platform event-parser registry (`events.ts`). */
865
+ readonly events: typeof platformEventParsers;
866
+ /**
867
+ * @deprecated Warm-up compatibility only. `Miso.layer`'s exact-chain check
868
+ * now runs at layer build, not at first use, so this member does no work —
869
+ * it is `Effect.void`, kept only so `await client.miso.ready()` (the
870
+ * predecessor's own idiom) keeps compiling and working as a `$ready()`-style
871
+ * warm-up until every consumer migrates off it. See `docs/CONVERSION.md`.
872
+ */
873
+ readonly ready: Effect.Effect<void>;
874
+ }
875
+
876
+ /**
877
+ * The Miso platform service: `Pressing`/`Listing`/`Record` reads, PTB
878
+ * fragments, `vault`/`call`/`bcs`, the high-level `read.*` views, and the
879
+ * converted `protocol`/`party` object-model services, built on `Sui` and
880
+ * `SuiGraphQL`. Identifier `"@misofm/platform/Miso"`, never changes after
881
+ * publication.
882
+ */
883
+ export class Miso extends Context.Service<Miso, MisoService>()("@misofm/platform/Miso") {
884
+ /**
885
+ * The live layer, bound to `deployment`. Composes `Musicos.layer` and
886
+ * `Partyos.layer` over the same `Sui` internally, so the requirement stays
887
+ * `Sui | SuiGraphQL` — never `Sui | SuiGraphQL | Musicos | Partyos` — for a
888
+ * consumer that only asked for `Miso`.
889
+ *
890
+ * Fails with: `MisoNetworkMismatchError`, `MisoChainIdentifierMismatchError`
891
+ * (the client's `sui.network`/`sui.chainId` do not match `deployment`),
892
+ * plus whatever `Musicos.layer`/`Partyos.layer` fail with for a structurally
893
+ * invalid `deployment.protocol`/`deployment.partyos` (should not happen for
894
+ * an already-`normalizeMisoPlatformDeployment`-validated deployment).
895
+ */
896
+ static readonly layer = (deployment: MisoPlatformDeployment): Layer.Layer<Miso, MisoLayerError, Sui | SuiGraphQL> =>
897
+ Layer.effect(Miso, make(deployment)).pipe(
898
+ Layer.provide(Musicos.layer({ deployment: deployment.protocol })),
899
+ Layer.provide(Partyos.layer({ deployment: deployment.partyos })),
900
+ );
901
+
902
+ /**
903
+ * `layer`, over `Musicos`/`Partyos` and `Sui`/`SuiGraphQL` the caller
904
+ * already provides — the shape `docs/extensions.md` calls `layerNoDeps` for
905
+ * a service that composes other extensions, spelled out for testing or a
906
+ * caller assembling every layer itself.
907
+ */
908
+ static readonly layerNoDeps = (deployment: MisoPlatformDeployment): Layer.Layer<Miso, MisoNetworkMismatchError | MisoChainIdentifierMismatchError, Sui | SuiGraphQL | Musicos | Partyos> =>
909
+ Layer.effect(Miso, make(deployment));
910
+
911
+ /**
912
+ * `layer`, reading `MISO_NETWORK` from the environment to pick this
913
+ * release's bundled manifest; unset falls back to `sui.network`.
914
+ *
915
+ * Fails with: `ConfigError`, `MisoPlatformDeploymentInvalidError` (an
916
+ * unbundled `MISO_NETWORK`), plus everything {@link layer} fails with.
917
+ */
918
+ static readonly layerConfig: Layer.Layer<Miso, Config.ConfigError | MisoPlatformDeploymentInvalidError | MisoLayerError, Sui | SuiGraphQL> = Layer.unwrap(
919
+ Effect.gen(function* () {
920
+ const configuredNetwork = yield* Config.nonEmptyString("MISO_NETWORK").pipe(Config.option);
921
+ const network = configuredNetwork._tag === "Some" ? configuredNetwork.value : (yield* Sui).network;
922
+ const deployment = yield* Effect.try({
923
+ try: () => getMisoPlatformDeployment(network),
924
+ catch: (cause) => new MisoPlatformDeploymentInvalidError({ message: cause instanceof Error ? cause.message : String(cause) }),
925
+ });
926
+ return Miso.layer(deployment);
927
+ }),
928
+ );
929
+
930
+ /**
931
+ * The real service over a fixed manifest (the bundled testnet deployment
932
+ * unless `state.deployment` overrides it), skipping the exact-chain check
933
+ * `layer` performs — this is what lets a test provide any `Sui` fake
934
+ * without also faking a matching chain id. Compose with `layerExtensionTest`
935
+ * (or a merged `layerTest` for `Sui`) and a `SuiGraphQL` layer (e.g.
936
+ * `SuiGraphQL.layerUnavailable` when a test never reaches `read.*`/catalog
937
+ * GraphQL paths) from `sui-effect/testing`. Never fails.
938
+ */
939
+ static readonly layerTest = (state: { readonly deployment?: MisoPlatformDeployment } = {}): Layer.Layer<Miso, never, Sui | SuiGraphQL> => {
940
+ const deployment = state.deployment ?? MISO_PLATFORM_DEPLOYMENTS.testnet;
941
+ return Layer.effect(Miso, makeUnchecked(deployment)).pipe(
942
+ Layer.provide(Musicos.layerTest({ packageId: deployment.protocol.musicos })),
943
+ Layer.provide(Partyos.layerTest(deployment.partyos)),
944
+ );
945
+ };
946
+ }
947
+
948
+ // `normalizeMisoPlatformDeployment` stays imported (not just re-exported) so
949
+ // a future `layerConfig` `MISO_DEPLOYMENT` JSON-path addition has it in scope
950
+ // without another import line to remember.
951
+ export { normalizeMisoPlatformDeployment };