@misofm/platform 0.27.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) 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 +24 -9
  197. package/dist/errors.d.ts.map +1 -1
  198. package/dist/errors.js +43 -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 +25 -3
  264. package/dist/read/config.d.ts.map +1 -1
  265. package/dist/read/config.js +42 -25
  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 +1 -1
  272. package/dist/read/index.d.ts.map +1 -1
  273. package/dist/read/index.js +8 -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 +6 -5
  280. package/dist/read/royalties.d.ts.map +1 -1
  281. package/dist/read/royalties.js +16 -9
  282. package/dist/read/royalties.js.map +1 -1
  283. package/dist/read/wallet.d.ts +23 -12
  284. package/dist/read/wallet.d.ts.map +1 -1
  285. package/dist/read/wallet.js +158 -177
  286. package/dist/read/wallet.js.map +1 -1
  287. package/dist/read/works.d.ts +6 -6
  288. package/dist/read/works.d.ts.map +1 -1
  289. package/dist/read/works.js +40 -26
  290. package/dist/read/works.js.map +1 -1
  291. package/dist/recording-extensions.d.ts +15 -16
  292. package/dist/recording-extensions.d.ts.map +1 -1
  293. package/dist/recording-extensions.js +12 -8
  294. package/dist/recording-extensions.js.map +1 -1
  295. package/dist/release-extensions.d.ts +5 -6
  296. package/dist/release-extensions.d.ts.map +1 -1
  297. package/dist/release-extensions.js +3 -2
  298. package/dist/release-extensions.js.map +1 -1
  299. package/dist/release-graph.d.ts +2 -2
  300. package/dist/release-graph.d.ts.map +1 -1
  301. package/dist/release-graph.js.map +1 -1
  302. package/dist/royalty.d.ts +4 -4
  303. package/dist/royalty.d.ts.map +1 -1
  304. package/dist/royalty.js +16 -7
  305. package/dist/royalty.js.map +1 -1
  306. package/dist/share.d.ts +58 -24
  307. package/dist/share.d.ts.map +1 -1
  308. package/dist/share.js +167 -92
  309. package/dist/share.js.map +1 -1
  310. package/dist/transactions.d.ts +15 -6
  311. package/dist/transactions.d.ts.map +1 -1
  312. package/dist/transactions.js +1 -0
  313. package/dist/transactions.js.map +1 -1
  314. package/dist/vault.d.ts +13 -3
  315. package/dist/vault.d.ts.map +1 -1
  316. package/dist/vault.js +22 -16
  317. package/dist/vault.js.map +1 -1
  318. package/package.json +9 -8
  319. package/src/Miso.ts +951 -0
  320. package/src/auth.ts +16 -3
  321. package/src/catalog.ts +58 -25
  322. package/src/client.ts +98 -1359
  323. package/src/contracts/composition_credits/composition_credits.ts +20 -4
  324. package/src/contracts/composition_routed_stake/composition_routed_stake.ts +67 -1
  325. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +53 -4
  326. package/src/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.ts +64 -1
  327. package/src/contracts/genre/genre.ts +8 -1
  328. package/src/contracts/miso_pay/pay.ts +356 -0
  329. package/src/contracts/party_cta/party_cta.ts +27 -5
  330. package/src/contracts/party_genre/party_genre.ts +14 -3
  331. package/src/contracts/party_media/party_media.ts +20 -4
  332. package/src/contracts/party_platform_link/party_platform_link.ts +15 -7
  333. package/src/contracts/party_profile/party_profile.ts +33 -8
  334. package/src/contracts/party_roles/party_roles.ts +19 -4
  335. package/src/contracts/party_tags/party_tags.ts +16 -4
  336. package/src/contracts/party_wallet/party_wallet.ts +2 -1
  337. package/src/contracts/platform_link/platform_link.ts +322 -0
  338. package/src/contracts/record/pressing.ts +50 -4
  339. package/src/contracts/record/record.ts +15 -1
  340. package/src/contracts/record_shop/listing.ts +76 -13
  341. package/src/contracts/recording_advisory/recording_advisory.ts +15 -8
  342. package/src/contracts/recording_credits/recording_credits.ts +63 -12
  343. package/src/contracts/recording_engine_session/recording_engine_session.ts +19 -4
  344. package/src/contracts/recording_genre/recording_genre.ts +53 -9
  345. package/src/contracts/recording_language/recording_language.ts +18 -5
  346. package/src/contracts/recording_master_reference/recording_master_reference.ts +18 -5
  347. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +56 -4
  348. package/src/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.ts +67 -1
  349. package/src/contracts/recording_streaming_transcode/recording_streaming_transcode.ts +11 -4
  350. package/src/contracts/release_cover_art/release_cover_art.ts +126 -10
  351. package/src/contracts/release_credits/release_credits.ts +18 -4
  352. package/src/contracts/release_description/release_description.ts +9 -4
  353. package/src/contracts/release_dsp_link/release_dsp_link.ts +74 -19
  354. package/src/contracts/release_genre/release_genre.ts +52 -11
  355. package/src/contracts/release_kind/release_kind.ts +19 -4
  356. package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +15 -0
  357. package/src/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.ts +38 -1
  358. package/src/contracts/routed_stake/routed_stake.ts +79 -7
  359. package/src/contracts/royalty_pool/pool.ts +140 -38
  360. package/src/contracts/royalty_pool/stake.ts +5 -2
  361. package/src/contracts/share/share.ts +97 -0
  362. package/src/contracts/vault/vault.ts +55 -4
  363. package/src/contracts.ts +18 -0
  364. package/src/cover.ts +14 -15
  365. package/src/credits.ts +27 -22
  366. package/src/deployments.ts +3 -4
  367. package/src/errors.ts +64 -34
  368. package/src/events.ts +260 -39
  369. package/src/genre.ts +15 -14
  370. package/src/index.ts +19 -10
  371. package/src/party/client.ts +217 -208
  372. package/src/party/extensions/ctas.ts +3 -3
  373. package/src/party/extensions/genres.ts +4 -4
  374. package/src/party/extensions/links.ts +7 -7
  375. package/src/party/extensions/media.ts +3 -3
  376. package/src/party/extensions/profile.ts +3 -3
  377. package/src/party/extensions/roles.ts +5 -5
  378. package/src/party/extensions/tags.ts +4 -4
  379. package/src/party/index.ts +0 -1
  380. package/src/party/queries.ts +90 -87
  381. package/src/pressing.ts +132 -89
  382. package/src/publication.ts +33 -32
  383. package/src/queries.ts +3 -3
  384. package/src/read/artist.ts +36 -17
  385. package/src/read/catalog.ts +68 -36
  386. package/src/read/client.ts +55 -30
  387. package/src/read/config.ts +55 -30
  388. package/src/read/genres.ts +22 -18
  389. package/src/read/index.ts +8 -6
  390. package/src/read/receipts.ts +130 -67
  391. package/src/read/royalties.ts +22 -10
  392. package/src/read/wallet.ts +226 -216
  393. package/src/read/works.ts +51 -44
  394. package/src/recording-extensions.ts +27 -24
  395. package/src/release-extensions.ts +7 -7
  396. package/src/release-graph.ts +2 -1
  397. package/src/royalty.ts +19 -25
  398. package/src/share.ts +197 -128
  399. package/src/transactions.ts +15 -8
  400. package/src/vault.ts +24 -31
  401. package/dist/contracts/record_shop/deps/std/type_name.d.ts.map +0 -1
  402. package/dist/contracts/record_shop/deps/std/type_name.js.map +0 -1
  403. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +0 -6
  404. package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +0 -1
  405. package/dist/contracts/recording_language/deps/language_code/language_code.js +0 -8
  406. package/dist/contracts/recording_language/deps/language_code/language_code.js.map +0 -1
  407. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts +0 -24
  408. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts.map +0 -1
  409. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js +0 -24
  410. package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js.map +0 -1
  411. package/dist/contracts/recording_master_reference/deps/ori/data.d.ts +0 -16
  412. package/dist/contracts/recording_master_reference/deps/ori/data.d.ts.map +0 -1
  413. package/dist/contracts/recording_master_reference/deps/ori/data.js +0 -12
  414. package/dist/contracts/recording_master_reference/deps/ori/data.js.map +0 -1
  415. package/dist/execute.d.ts +0 -32
  416. package/dist/execute.d.ts.map +0 -1
  417. package/dist/execute.js +0 -36
  418. package/dist/execute.js.map +0 -1
  419. package/src/contracts/recording_language/deps/language_code/language_code.ts +0 -8
  420. package/src/contracts/recording_master_reference/deps/ori/confidentiality.ts +0 -24
  421. package/src/contracts/recording_master_reference/deps/ori/data.ts +0 -12
  422. package/src/execute.ts +0 -56
  423. /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.d.ts +0 -0
  424. /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.js +0 -0
  425. /package/src/contracts/{record_shop → miso_pay}/deps/std/type_name.ts +0 -0
package/src/client.ts CHANGED
@@ -2,8 +2,9 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  // The client extension — Sui's recommended shape for an SDK
5
- // (https://sdk.mystenlabs.com/sui/sdk-building). Register it once and the
6
- // platform layer hangs off whatever client you already have:
5
+ // (https://sdk.mystenlabs.com/sui/sdk-building), now derived rather than
6
+ // hand-maintained (misofm/sdks#35, WP6 "facade derivation"). Register it once
7
+ // and the platform layer hangs off whatever client you already have:
7
8
  //
8
9
  // const client = new SuiGrpcClient({ network, baseUrl }).$extend(miso());
9
10
  //
@@ -12,1378 +13,116 @@
12
13
  // tx.add(client.miso.tx.purchaseRecord({ releaseId, edition, currencyType,
13
14
  // paymentAmount, expectedPricing, recipient }));
14
15
  //
15
- // Two things this buys over calling the bare functions:
16
- //
17
- // IDS ARE CONFIGURED ONCE. Every builder and reader below needs the pressing
18
- // package id. Threading those
19
- // through 20 call sites is how an app ends up publishing against one package and
20
- // reading against another.
21
- //
22
- // IT COMPOSES. `register` takes the transport-agnostic `ClientWithCoreApi`, never
23
- // a concrete client, so this works on gRPC, GraphQL, or JSON-RPC — and the
24
- // builders stay thunks, so a platform call and a protocol call go in the same PTB.
25
- //
26
- // Namespaces follow the guide's convention: top-level methods read and parse,
27
- // `tx` builds transactions without executing, `bcs` exposes the generated struct
28
- // definitions, `ids` is the address math that replaces a registry.
29
-
30
- import type {
31
- ClientWithCoreApi,
32
- SuiClientRegistration,
33
- } from "@mysten/sui/client";
34
- import type {} from "@mysten/bcs";
35
- import type { Signer } from "@mysten/sui/cryptography";
16
+ // `SuiExtension.fromService` walks `MisoService` once: every `Effect` member
17
+ // becomes a Promise method, `tx`/`ids`/`call`/`bcs`/`vault`/`deployment`
18
+ // (nested namespaces) are mapped recursively, and a rejection is the same
19
+ // tagged error instance an Effect caller would have caught. Namespaces follow
20
+ // the guide's convention: top-level methods read and parse, `tx` builds
21
+ // transactions without executing, `bcs` exposes the generated struct
22
+ // definitions, `ids` is the address math that replaces a registry, `call` is
23
+ // generated type-safe Move calls, `vault` is Vault/Action/plugin builders and
24
+ // reads, `protocol`/`party` are the converted `@misofm/musicos`/
25
+ // `@misofm/partyos` surfaces.
26
+ import type { ClientWithCoreApi, SuiClientRegistration } from "@mysten/sui/client";
36
27
  import type { SuiGraphQLClient } from "@mysten/sui/graphql";
37
- import type { ParallelTransactionExecutor } from "@mysten/sui/transactions";
38
- import {
39
- miso as protocolMiso,
40
- type MisoProtocolClient,
41
- } from "@misofm/musicos/client";
42
- import { PartyosClient } from "@misofm/partyos";
43
- import { PartyPlatformClient } from "./party/index.ts";
44
-
45
- import * as recordContract from "./contracts/record/record.ts";
46
- import * as pressingContract from "./contracts/record/pressing.ts";
47
- import * as listingContract from "./contracts/record_shop/listing.ts";
48
- import * as genreContract from "./contracts/genre/genre.ts";
49
- import * as releaseDescriptionContract from "./contracts/release_description/release_description.ts";
50
- import * as releaseDspLinkContract from "./contracts/release_dsp_link/release_dsp_link.ts";
51
- import * as releaseGenreContract from "./contracts/release_genre/release_genre.ts";
52
- import * as releaseKindContract from "./contracts/release_kind/release_kind.ts";
53
- import * as releaseRevenueDistributorContract from "./contracts/release_revenue_distributor/release_revenue_distributor.ts";
54
- import * as vaultContract from "./contracts/vault/vault.ts";
55
- import * as compositionRoyaltyPoolContract from "./contracts/composition_royalty_pool/composition_royalty_pool.ts";
56
- import * as recordingRoyaltyPoolContract from "./contracts/recording_royalty_pool/recording_royalty_pool.ts";
57
- import * as partyWalletContract from "./contracts/party_wallet/party_wallet.ts";
58
- import * as compositionRoutedStakeContract from "./contracts/composition_routed_stake/composition_routed_stake.ts";
59
- import * as compositionRoyaltyPoolPluginContract from "./contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.ts";
60
- import * as recordingRoyaltyPoolPluginContract from "./contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.ts";
61
- import * as releaseRevenueDistributorPluginContract from "./contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.ts";
62
- import * as routedStakeContract from "./contracts/routed_stake/routed_stake.ts";
63
- import * as royaltyPoolContract from "./contracts/royalty_pool/pool.ts";
64
- import * as recordingAdvisoryContract from "./contracts/recording_advisory/recording_advisory.ts";
65
- import * as recordingLanguageContract from "./contracts/recording_language/recording_language.ts";
66
- import * as recordingMasterReferenceContract from "./contracts/recording_master_reference/recording_master_reference.ts";
67
- import * as recordingStreamingTranscodeContract from "./contracts/recording_streaming_transcode/recording_streaming_transcode.ts";
68
- import * as recordingGenreContract from "./contracts/recording_genre/recording_genre.ts";
69
- import * as vaultActions from "./vault.ts";
70
- import * as coverArtContract from "./contracts/cover_art/cover_art.ts";
71
- import * as releaseCoverArtContract from "./contracts/release_cover_art/release_cover_art.ts";
72
- import * as releaseCreditsContract from "./contracts/release_credits/release_credits.ts";
73
- import {
74
- authorizeRecordShop,
75
- deriveListingId,
76
- derivePressingAdminCapId,
77
- derivePressingId,
78
- deriveRecordId,
79
- deriveSaleIds,
80
- getListing,
81
- getPressing,
82
- getRecord,
83
- getSale,
84
- openListing,
85
- openPressing,
86
- purchaseRecord,
87
- revokeRecordShop,
88
- setListingPrice,
89
- setListingState,
90
- } from "./pressing.ts";
91
- import type {
92
- GetSaleParams,
93
- Listing,
94
- OpenListingParams,
95
- OpenPressingParams,
96
- Pressing,
97
- PressingAdministrationParams,
98
- PressingRecord,
99
- PurchaseRecordParams,
100
- SetListingPriceParams,
101
- SetListingStateParams,
102
- } from "./pressing.ts";
103
- import {
104
- publishShareCurrency,
105
- initializeShareCurrency,
106
- publishComposition,
107
- publishRecording,
108
- publishCompositionAndRecording,
109
- publishRelease,
110
- } from "./transactions.ts";
111
- import type {
112
- TxThunk,
113
- PublishCompositionParams,
114
- PublishRecordingParams,
115
- PublishCompositionAndRecordingParams,
116
- PublishReleaseParams,
117
- } from "./transactions.ts";
118
- import * as share from "./share.ts";
119
- import {
120
- publishReleaseGraph,
121
- type PublishReleaseGraphParams,
122
- } from "./release-graph.ts";
123
- import {
124
- getMisoPlatformDeployment,
125
- requireOperationsDeployment,
126
- requireRecordSalesDeployment,
127
- type MisoPlatformDeployment,
128
- type OperationsDeployment,
129
- type RecordSalesDeployment,
130
- } from "./deployments.ts";
131
- import { immutableSnapshot } from "./internal.ts";
132
- import {
133
- setReleaseDescription,
134
- setReleaseDspLinks,
135
- setReleaseKind,
136
- type SetReleaseDescriptionParams,
137
- type SetReleaseDspLinksParams,
138
- type SetReleaseKindParams,
139
- } from "./release-extensions.ts";
140
- import {
141
- deriveGenreAddress,
142
- setReleaseGenres,
143
- setRecordingGenres,
144
- clearReleaseGenres,
145
- clearRecordingGenres,
146
- type SetReleaseGenresParams,
147
- type SetRecordingGenresParams,
148
- type ClearReleaseGenresParams,
149
- type ClearRecordingGenresParams,
150
- } from "./genre.ts";
151
- import {
152
- setRecordingStreamingTranscode,
153
- unsetRecordingStreamingTranscode,
154
- type SetRecordingStreamingTranscodeParams,
155
- type UnsetRecordingStreamingTranscodeParams,
156
- } from "./recording-extensions.ts";
157
- import { addReleaseCredit, type AddReleaseCreditParams } from "./credits.ts";
158
- import {
159
- setReleaseCover,
160
- setReleaseTrackCover,
161
- type SetReleaseCoverParams,
162
- type SetReleaseTrackCoverParams,
163
- } from "./cover.ts";
164
- import {
165
- executeViaExecutor as executePlatformViaExecutor,
166
- type PlatformExecResult,
167
- } from "./execute.ts";
168
- import { Effect } from "effect";
169
- import {
170
- SuiClient,
171
- SuiRpcError,
172
- type BcsDecodeError,
173
- type ObjectTypeMismatchError,
174
- type TransactionFailedError,
175
- } from "@misofm/effect";
176
- import {
177
- MisoChainIdentifierMismatchError,
178
- MisoClientNotReadyError,
179
- MisoNetworkMismatchError,
180
- } from "./errors.ts";
181
-
182
- export {
183
- MisoChainIdentifierMismatchError,
184
- MisoClientNotReadyError,
185
- MisoNetworkMismatchError,
186
- } from "./errors.ts";
28
+ import { Effect, Layer } from "effect";
29
+ import { Sui, SuiGraphQL } from "@unconfirmed/sui-effect";
30
+ import { SuiExtension, type ExtensionFace, type PromiseFace } from "@unconfirmed/sui-effect/extension";
31
+ import { getMisoPlatformDeployment, type MisoPlatformDeployment } from "./deployments.ts";
32
+ import { Miso, type MisoService } from "./Miso.ts";
33
+ import { MisoPlatformDeploymentInvalidError } from "./errors.ts";
187
34
 
188
- type BoundMoveFunction<F> = F extends (options: infer Options) => infer Result
189
- ? Options extends { package?: unknown }
190
- ? (options: Omit<Options, "package">) => Result
191
- : F
192
- : F;
193
- type BoundModule<M extends object, Available extends readonly (keyof M)[]> = {
194
- [Key in Available[number]]: BoundMoveFunction<M[Key]>;
195
- };
35
+ export { MisoChainIdentifierMismatchError, MisoNetworkMismatchError, MisoPlatformDeploymentInvalidError } from "./errors.ts";
196
36
 
197
37
  /**
198
- * Bind an explicit safe subset of a generated module to one immutable package.
199
- * Callers cannot supply or override `package`; reference-returning, UID-only,
200
- * and package-internal constructors never appear in this executable facade.
38
+ * The type of `client.miso` after `client.$extend(miso())` the derived
39
+ * Promise face of {@link MisoService} plus `$ready`/`$dispose`/`dispose`.
40
+ * Replaces the predecessor `MisoPlatformClient` class as the public name for
41
+ * "the complete Miso client".
201
42
  */
202
- function bindModulePackage<M extends object, K extends readonly (keyof M)[]>(
203
- mod: M,
204
- pkg: string,
205
- available: K,
206
- ): BoundModule<M, K> {
207
- const out: Record<string, unknown> = {};
208
- for (const key of available) {
209
- const value = (mod as Record<PropertyKey, unknown>)[key];
210
- out[String(key)] =
211
- typeof value === "function"
212
- ? (options: { package?: string }) =>
213
- (value as (o: unknown) => unknown)({ ...options, package: pkg })
214
- : value;
215
- }
216
- return out as BoundModule<M, K>;
217
- }
218
-
219
- /** Keep synchronous, client-bound surfaces unusable until the endpoint's exact
220
- * ledger has been validated. The underlying standalone builders remain pure. */
221
- function requireReadyOnFunctions<T extends object>(
222
- surface: T,
223
- requireReady: (operation: string) => void,
224
- namespace: string,
225
- ): T {
226
- return new Proxy(surface, {
227
- get(target, property, receiver) {
228
- const value = Reflect.get(target, property, receiver) as unknown;
229
- if (typeof value !== "function") return value;
230
- return (...args: unknown[]) => {
231
- requireReady(`${namespace}.${String(property)}`);
232
- return Reflect.apply(value, target, args);
233
- };
234
- },
235
- });
236
- }
237
-
238
- function requireReadyOnModuleFunctions<T extends object>(
239
- surface: T,
240
- requireReady: (operation: string) => void,
241
- namespace: string,
242
- ): T {
243
- return new Proxy(surface, {
244
- get(target, property, receiver) {
245
- const value = Reflect.get(target, property, receiver) as unknown;
246
- if (!value || typeof value !== "object") return value;
247
- return requireReadyOnFunctions(
248
- value,
249
- requireReady,
250
- `${namespace}.${String(property)}`,
251
- );
252
- },
253
- });
254
- }
43
+ export type MisoClient = PromiseFace<MisoService> & ExtensionFace;
255
44
 
45
+ /** What {@link miso} needs to know. Same options shape as the sibling extensions (`partyos()`, `musicos()`). */
256
46
  export interface MisoOptions<Name extends string = "miso"> {
257
- /** Name for the client extension. Defaults to `miso`. */
258
- name?: Name;
259
- /** Complete custom deployment; omit to select the bundled client network. */
260
- deployment?: MisoPlatformDeployment;
261
- /** Required only by protocol methods that perform global type discovery. */
262
- graphqlClient?: SuiGraphQLClient;
263
- }
264
-
265
- export interface MisoPlatformConfig {
266
- /** Exact client network label for deprecated `misoPlatform()` registration. */
267
- network?: string;
268
- /** Exact ledger identifier required by deprecated `misoPlatform().ready()`. */
269
- chainIdentifier?: string;
270
- /** Finalized immutable Record + Record Shop identities, or an explicit
271
- * unavailable legacy state that makes every sales API fail closed. */
272
- recordSales?: RecordSalesDeployment;
273
- /**
274
- * The `@misofm/musicos` protocol package (miso core). Required for the
275
- * publish builders (`publishComposition`, `publishRecording`,
276
- * `publishCompositionAndRecording`) — optional if this client only ever
277
- * sells pressed records.
278
- */
279
- misoPackageId?: string;
280
- /**
281
- * The minato share-disperse package. Bound into the publish builders so
282
- * callers don't repeat it; required alongside `misoPackageId` for the same
283
- * builders (they disperse shares via minato).
284
- */
285
- minatoPackageId?: string;
286
- /** The shared core `miso::release::ReleaseRegistry` object. */
287
- releaseRegistryId?: string;
288
- /** Release metadata/discovery extension package ids. */
289
- releaseKindPackageId?: string;
290
- releaseDescriptionPackageId?: string;
291
- releaseGenrePackageId?: string;
292
- releaseDspLinkPackageId?: string;
293
- recordingAdvisoryPackageId?: string;
294
- recordingLanguagePackageId?: string;
295
- recordingGenrePackageId?: string;
296
- recordingMasterReferencePackageId?: string;
297
- recordingStreamingTranscodePackageId?: string;
298
- /** Structurally complete Vault/Action/plugin identity set. */
299
- operations?: OperationsDeployment;
300
- /** Generic royalty-pool value package used by pool and routed-stake helpers. */
301
- royaltyPoolPackageId?: string;
302
- routedStakePackageId?: string;
303
- releaseCreditsPackageId?: string;
304
- misoCreditPackageId?: string;
305
- coverArtPackageId?: string;
306
- releaseCoverArtPackageId?: string;
307
- /** Curated genre vocabulary package and its shared derivation parent. */
308
- genrePackageId?: string;
309
- genreRegistryId?: string;
310
- /** External ori package used to create `data::WalrusBlob` values. */
311
- oriPackageId?: string;
312
- }
313
-
314
- /** Params with the ids this client already knows dropped from the call site. */
315
- type DistributiveOmit<T, Keys extends PropertyKey> = T extends unknown
316
- ? Omit<T, Keys>
317
- : never;
318
- type Configured<T> = DistributiveOmit<
319
- T,
320
- "recordPackageId" | "recordShopPackageId"
321
- >;
322
-
323
- /** Publish-builder params with the protocol/minato ids this client already knows dropped. */
324
- type ConfiguredPublish<T> = DistributiveOmit<
325
- T,
326
- "misoPackageId" | "minatoPackageId"
327
- >;
328
-
329
- /** Release-builder params with this client's core, share, and registry ids dropped. */
330
- type ConfiguredRelease<T> = DistributiveOmit<
331
- T,
332
- "misoPackageId" | "minatoPackageId" | "releaseRegistryId"
333
- >;
334
-
335
- type ConfiguredReleaseKind = DistributiveOmit<
336
- SetReleaseKindParams,
337
- "releaseKindPackageId"
338
- >;
339
- type ConfiguredReleaseDescription = DistributiveOmit<
340
- SetReleaseDescriptionParams,
341
- "releaseDescriptionPackageId"
342
- >;
343
- type ConfiguredReleaseGenres = DistributiveOmit<
344
- SetReleaseGenresParams,
345
- "releaseGenrePackageId"
346
- >;
347
- type ConfiguredRecordingGenres = DistributiveOmit<
348
- SetRecordingGenresParams,
349
- "recordingGenrePackageId"
350
- >;
351
- type ConfiguredClearReleaseGenres = DistributiveOmit<
352
- ClearReleaseGenresParams,
353
- "releaseGenrePackageId"
354
- >;
355
- type ConfiguredClearRecordingGenres = DistributiveOmit<
356
- ClearRecordingGenresParams,
357
- "recordingGenrePackageId"
358
- >;
359
- type ConfiguredReleaseDspLinks = DistributiveOmit<
360
- SetReleaseDspLinksParams,
361
- "releaseDspLinkPackageId"
362
- >;
363
- type ConfiguredReleaseCredit = DistributiveOmit<
364
- AddReleaseCreditParams,
365
- "releaseCreditsPackageId" | "misoCreditPackageId"
366
- >;
367
- type ConfiguredReleaseCover = DistributiveOmit<
368
- SetReleaseCoverParams,
369
- "coverArtPackageId" | "releaseCoverArtPackageId" | "oriPackageId"
370
- >;
371
- type ConfiguredReleaseTrackCover = DistributiveOmit<
372
- SetReleaseTrackCoverParams,
373
- "coverArtPackageId" | "releaseCoverArtPackageId" | "oriPackageId"
374
- >;
375
- type ConfiguredRecordingStreamingTranscode = DistributiveOmit<
376
- SetRecordingStreamingTranscodeParams,
377
- "recordingStreamingTranscodePackageId" | "oriPackageId"
378
- >;
379
- type ConfiguredUnsetRecordingStreamingTranscode = DistributiveOmit<
380
- UnsetRecordingStreamingTranscodeParams,
381
- "recordingStreamingTranscodePackageId"
382
- >;
383
-
384
- /** Whole-graph params with this client's package ids dropped. */
385
- export type ConfiguredReleaseGraphParams = Omit<
386
- PublishReleaseGraphParams,
387
- "misoPackageId" | "minatoPackageId"
388
- >;
389
-
390
- export class MisoPlatformClient {
391
- readonly #client: ClientWithCoreApi;
392
- readonly #config: MisoPlatformConfig;
393
- readonly #protocol?: MisoProtocolClient;
394
- readonly #party?: PartyPlatformClient;
395
- readonly #chainIdentifier?: string;
396
- /** Bundled/custom deployment selected for the full facade, when available. */
47
+ /** The property the extension takes on the client: `client.<name>`. Defaults to `"miso"`. */
48
+ readonly name?: Name;
49
+ /** Explicit deployment. Omit to use the bundled manifest for the client's network. */
397
50
  readonly deployment?: MisoPlatformDeployment;
398
- #readyState: "unvalidated" | "validating" | "ready" | "failed" =
399
- "unvalidated";
400
- /** Set once in the constructor via `Effect.cached`, so every caller of
401
- * `ready()` shares the same in-flight/completed chain read. */
402
- readonly #readyEffect: Effect.Effect<void, MisoChainIdentifierMismatchError | SuiRpcError>;
403
- readonly #layer: ReturnType<typeof SuiClient.layer>;
404
-
405
- constructor(
406
- client: ClientWithCoreApi,
407
- config: MisoPlatformConfig,
408
- protocol?: MisoProtocolClient,
409
- deployment?: MisoPlatformDeployment,
410
- ) {
411
- const configSnapshot = immutableSnapshot(config);
412
- const deploymentSnapshot = deployment
413
- ? immutableSnapshot(deployment)
414
- : undefined;
415
- this.#client = client;
416
- this.#config = configSnapshot;
417
- if (configSnapshot.operations?.status === "available") {
418
- requireOperationsDeployment(configSnapshot.operations);
419
- }
420
- // A pressing-only facade must not implicitly register a fail-closed core
421
- // extension. Supply a core deployment/misoPackageId when `protocol` is
422
- // needed; otherwise this remains a safe, independent pressing client.
423
- this.#protocol =
424
- protocol ??
425
- (configSnapshot.misoPackageId
426
- ? protocolMiso({
427
- deployment: { packageId: configSnapshot.misoPackageId },
428
- }).register(client)
429
- : undefined);
430
- this.deployment = deploymentSnapshot;
431
- // The one place `PartyPlatformClient` is constructed: from this platform
432
- // deployment's `partyos` (core) and `party` (extensions) sections, not
433
- // from the object-model protocol client.
434
- this.#party = deploymentSnapshot
435
- ? new PartyPlatformClient(
436
- client,
437
- new PartyosClient(client, deploymentSnapshot.partyos),
438
- deploymentSnapshot.party,
439
- )
440
- : undefined;
441
- this.#chainIdentifier =
442
- deploymentSnapshot?.chainIdentifier ?? configSnapshot.chainIdentifier;
443
- this.#layer = SuiClient.layer(client);
444
- // Built once; `Effect.cached` shares the same in-flight/completed chain
445
- // read across every caller of `ready()` — the outer `Effect.cached(...)`
446
- // itself only sets up the memoization ref, so running it synchronously
447
- // here does not perform the underlying Core API read.
448
- this.#readyEffect = Effect.runSync(
449
- Effect.cached(
450
- Effect.suspend(() => {
451
- this.#readyState = "validating";
452
- if (!this.#chainIdentifier) {
453
- return Effect.die(
454
- new Error(
455
- "misoPlatform: chain readiness requires a complete deployment or an explicit `chainIdentifier`.",
456
- ),
457
- );
458
- }
459
- const expected = this.#chainIdentifier;
460
- return Effect.tryPromise({
461
- try: (signal) => this.#client.core.getChainIdentifier({ signal }),
462
- catch: (cause) => new SuiRpcError({ operation: "getChainIdentifier", cause }),
463
- }).pipe(
464
- Effect.flatMap(({ chainIdentifier }) =>
465
- chainIdentifier === expected
466
- ? Effect.void
467
- : new MisoChainIdentifierMismatchError({ actual: chainIdentifier, expected }),
468
- ),
469
- Effect.tap(() => Effect.sync(() => { this.#readyState = "ready"; })),
470
- Effect.tapError(() => Effect.sync(() => { this.#readyState = "failed"; })),
471
- );
472
- }),
473
- ),
474
- );
475
- }
476
-
477
- /** Permissionless protocol APIs bound to the same validated ledger. */
478
- get protocol(): MisoProtocolClient | undefined {
479
- if (!this.#protocol) return undefined;
480
- this.#requireReady("protocol APIs");
481
- return this.#protocol;
482
- }
483
-
484
51
  /**
485
- * Memoized exact-ledger readiness gate. Registration already rejects a
486
- * synchronous network-label mismatch; this Core API read protects every
487
- * client-bound write surface from a mislabeled or custom endpoint.
52
+ * The chain identifier the node must report, and the id a `warm`
53
+ * registration takes when the client's network is not `mainnet` or
54
+ * `testnet` (`docs/extensions.md` §7, "Synchronous members, `$ready` and
55
+ * `warm`" — `warm.chainId`, or `sui.chainId`, or the built-in table entry
56
+ * for `mainnet`/`testnet`, and nothing else). Required for `miso()` to
57
+ * build synchronously on `devnet`, `localnet`, or a custom network; omit
58
+ * it only when the client is on `mainnet` or `testnet`, where the
59
+ * built-in table already supplies one. Without it on an unbundled
60
+ * network, `client.$extend(miso())` throws synchronously.
488
61
  */
489
- ready(): Effect.Effect<void, MisoChainIdentifierMismatchError | SuiRpcError> {
490
- return this.#readyEffect;
491
- }
492
-
493
- /** Compatibility hook; prefer `client.miso.ready()`. */
494
- validateChainIdentifier(): Effect.Effect<string, MisoChainIdentifierMismatchError | SuiRpcError> {
495
- return this.ready().pipe(Effect.map(() => this.#chainIdentifier!));
496
- }
497
-
498
- #requireReady(operation: string): void {
499
- // Capability availability remains the first fail-closed boundary. This
500
- // keeps an unavailable deployment from masquerading as a mere lifecycle
501
- // error while still preventing configured builders from running pre-ready.
502
- if (
503
- operation === "ids.pressing" ||
504
- operation === "ids.pressingAdminCap" ||
505
- operation === "ids.record" ||
506
- operation === "ids.listing" ||
507
- operation === "ids.sale" ||
508
- operation === "tx.purchaseRecord" ||
509
- operation === "tx.openPressing" ||
510
- operation === "tx.openListing" ||
511
- operation === "tx.authorizeRecordShop" ||
512
- operation === "tx.revokeRecordShop" ||
513
- operation === "tx.setListingPrice" ||
514
- operation === "tx.setListingState"
515
- ) {
516
- this.#recordSales();
517
- }
518
- if (operation === "ids.vault" || operation === "ids.vaultAdminCap") {
519
- this.#operations();
520
- }
521
- if (this.#readyState !== "ready") {
522
- throw new MisoClientNotReadyError({ operation });
523
- }
524
- }
525
-
62
+ readonly chainId?: string;
526
63
  /**
527
- * Runs the exact-ledger readiness gate, then provides `SuiClient` from this
528
- * client's `ClientWithCoreApi`, so a read method's program has `R = never`.
64
+ * A `SuiGraphQLClient` for the type-discovery reads (`read.*`, the catalog
65
+ * views) that need one. Omit to register with `SuiGraphQL.layerUnavailable`
66
+ * — every synchronous and Sui-only member still works; a GraphQL-backed
67
+ * read rejects with `GraphQLUnavailable` instead.
529
68
  */
530
- #run<A, E>(
531
- effect: Effect.Effect<A, E, SuiClient>,
532
- ): Effect.Effect<A, E | MisoChainIdentifierMismatchError | SuiRpcError> {
533
- return this.ready().pipe(
534
- Effect.flatMap(() => effect),
535
- Effect.provide(this.#layer),
536
- );
537
- }
538
-
539
- /** Party identity and profile APIs, backed by the network SDK. */
540
- get party(): PartyPlatformClient {
541
- if (!this.#party) {
542
- throw new Error(
543
- "misoPlatform: Party APIs require the complete platform deployment. Use miso({ deployment }).",
544
- );
545
- }
546
- this.#requireReady("party APIs");
547
- return this.#party;
548
- }
549
-
550
- #recordSales() {
551
- return requireRecordSalesDeployment(
552
- this.#config.recordSales ?? {
553
- status: "unavailable",
554
- reason:
555
- "this client was configured without Record and Record Shop package IDs",
556
- },
557
- );
558
- }
559
-
560
- #operations() {
561
- return requireOperationsDeployment(this.#config.operations);
562
- }
563
-
564
- #availableOperations() {
565
- return this.#config.operations?.status === "available"
566
- ? requireOperationsDeployment(this.#config.operations)
567
- : undefined;
568
- }
569
-
570
- get recordPackageId(): string {
571
- return this.#recordSales().recordPackageId;
572
- }
573
-
574
- get recordShopPackageId(): string {
575
- return this.#recordSales().recordShopPackageId;
576
- }
577
-
578
- #misoPackageId(): string {
579
- const { misoPackageId } = this.#config;
580
- if (!misoPackageId) {
581
- throw new Error(
582
- "misoPlatform: `misoPackageId` is required for the publish builders " +
583
- "(publishComposition, publishRecording, publishCompositionAndRecording, publishRelease) — pass it to misoPlatform({ misoPackageId }).",
584
- );
585
- }
586
- return misoPackageId;
587
- }
588
-
589
- #minatoPackageId(): string {
590
- const { minatoPackageId } = this.#config;
591
- if (!minatoPackageId) {
592
- throw new Error(
593
- "misoPlatform: `minatoPackageId` is required for the publish builders that disperse shares " +
594
- "(publishComposition, publishRecording, publishCompositionAndRecording) — pass it to misoPlatform({ minatoPackageId }).",
595
- );
596
- }
597
- return minatoPackageId;
598
- }
599
-
600
- #releaseRegistryId(): string {
601
- const { releaseRegistryId: id } = this.#config;
602
- if (!id) {
603
- throw new Error(
604
- "misoPlatform: `releaseRegistryId` is required to build a release.",
605
- );
606
- }
607
- return id;
608
- }
609
-
610
- #requiredConfig(field: keyof MisoPlatformConfig, operation: string): string {
611
- const value = this.#config[field];
612
- if (typeof value !== "string" || value.length === 0) {
613
- throw new Error(
614
- `misoPlatform: \`${String(field)}\` is required for ${operation}.`,
615
- );
616
- }
617
- return value;
618
- }
619
-
620
- // ── Reads ─────────────────────────────────────────────────────────────────
621
-
622
- /** The run itself, or `null` if this release has never opened one. */
623
- getPressing(
624
- pressingId: string,
625
- ): Effect.Effect<
626
- Pressing | null,
627
- ObjectTypeMismatchError | BcsDecodeError | SuiRpcError | MisoChainIdentifierMismatchError
628
- > {
629
- return this.#run(getPressing(pressingId, this.recordPackageId));
630
- }
631
-
632
- /** One currency's offer, or `null` if the run does not sell in it. */
633
- getListing(
634
- listingId: string,
635
- ): Effect.Effect<
636
- Listing | null,
637
- ObjectTypeMismatchError | BcsDecodeError | SuiRpcError | MisoChainIdentifierMismatchError
638
- > {
639
- return this.#run(getListing(listingId, this.recordShopPackageId));
640
- }
641
-
642
- /** One concrete purchased Record, including immutable purchase provenance. */
643
- getRecord(
644
- recordId: string,
645
- ): Effect.Effect<
646
- PressingRecord | null,
647
- ObjectTypeMismatchError | BcsDecodeError | SuiRpcError | MisoChainIdentifierMismatchError
648
- > {
649
- return this.#run(getRecord(recordId, this.recordPackageId));
650
- }
651
-
652
- /** Run + one currency's offer in a single round trip, by address math. */
653
- getSale(p: Configured<GetSaleParams>): Effect.Effect<
654
- { pressing: Pressing | null; listing: Listing | null },
655
- ObjectTypeMismatchError | BcsDecodeError | SuiRpcError | MisoChainIdentifierMismatchError
656
- > {
657
- return this.#run(
658
- getSale({
659
- ...p,
660
- recordPackageId: this.recordPackageId,
661
- recordShopPackageId: this.recordShopPackageId,
662
- }),
663
- );
664
- }
665
-
666
- // ── Address math ──────────────────────────────────────────────────────────
667
-
668
- readonly ids = requireReadyOnFunctions({
669
- pressing: (releaseId: string, edition: number) =>
670
- derivePressingId(releaseId, edition, this.recordPackageId),
671
- pressingAdminCap: (pressingId: string) =>
672
- derivePressingAdminCapId(pressingId, this.recordPackageId),
673
- record: (pressingId: string, number: number) =>
674
- deriveRecordId(pressingId, number, this.recordPackageId),
675
- listing: (pressingId: string, currencyType: string) =>
676
- deriveListingId(pressingId, currencyType, this.recordShopPackageId),
677
- sale: (releaseId: string, edition: number, currencyType: string) =>
678
- deriveSaleIds(
679
- releaseId,
680
- edition,
681
- currencyType,
682
- this.recordPackageId,
683
- this.recordShopPackageId,
684
- ),
685
- vault: (capId: string, capType: string) =>
686
- vaultActions.deriveVaultId({
687
- vaultRegistryId: this.#operations().vault.registryId,
688
- capId,
689
- capType,
690
- vaultPackageId: this.#operations().vault.packageId,
691
- }),
692
- vaultAdminCap: (vaultId: string) =>
693
- vaultActions.deriveVaultAdminCapId(
694
- vaultId,
695
- this.#operations().vault.packageId,
696
- ),
697
- genre: (canonicalName: string) =>
698
- deriveGenreAddress(
699
- this.#requiredConfig("genreRegistryId", "genre id derivation"),
700
- this.#requiredConfig("genrePackageId", "genre id derivation"),
701
- canonicalName,
702
- ),
703
- }, (operation) => this.#requireReady(operation), "ids");
704
-
705
- // ── Transaction builders ──────────────────────────────────────────────────
706
-
707
- /** Client-bound builders require a successful `await client.miso.ready()`.
708
- * Standalone exports remain pure for explicitly managed offline workflows. */
709
- readonly tx = requireReadyOnFunctions({
710
- purchaseRecord: (p: Configured<PurchaseRecordParams>): TxThunk =>
711
- purchaseRecord({
712
- ...p,
713
- recordPackageId: this.recordPackageId,
714
- recordShopPackageId: this.recordShopPackageId,
715
- }),
716
- openPressing: (p: Configured<OpenPressingParams>): TxThunk =>
717
- openPressing({
718
- ...p,
719
- recordPackageId: this.recordPackageId,
720
- recordShopPackageId: this.recordShopPackageId,
721
- }),
722
- openListing: (p: Configured<OpenListingParams>): TxThunk =>
723
- openListing({ ...p, recordShopPackageId: this.recordShopPackageId }),
724
- authorizeRecordShop: (
725
- p: Configured<PressingAdministrationParams>,
726
- ): TxThunk =>
727
- authorizeRecordShop({
728
- ...p,
729
- recordPackageId: this.recordPackageId,
730
- recordShopPackageId: this.recordShopPackageId,
731
- }),
732
- revokeRecordShop: (p: Configured<PressingAdministrationParams>): TxThunk =>
733
- revokeRecordShop({
734
- ...p,
735
- recordPackageId: this.recordPackageId,
736
- recordShopPackageId: this.recordShopPackageId,
737
- }),
738
- setListingPrice: (p: Configured<SetListingPriceParams>): TxThunk =>
739
- setListingPrice({ ...p, recordShopPackageId: this.recordShopPackageId }),
740
- setListingState: (p: Configured<SetListingStateParams>): TxThunk =>
741
- setListingState({ ...p, recordShopPackageId: this.recordShopPackageId }),
742
-
743
- // Publishing (protocol works + minato share economics) — package-id-free
744
- // builders pass through unchanged; the rest bind this client's
745
- // `misoPackageId`/`minatoPackageId`, throwing at call time if either is
746
- // missing (kept optional on the client so a sell-only client, e.g. a
747
- // storefront that never mints new works, doesn't need to carry them).
748
- publishShareCurrency,
749
- initializeShareCurrency,
750
- publishComposition: (
751
- p: ConfiguredPublish<PublishCompositionParams>,
752
- ): TxThunk =>
753
- publishComposition({
754
- ...p,
755
- misoPackageId: this.#misoPackageId(),
756
- minatoPackageId: this.#minatoPackageId(),
757
- }),
758
- publishRecording: (p: ConfiguredPublish<PublishRecordingParams>): TxThunk =>
759
- publishRecording({
760
- ...p,
761
- misoPackageId: this.#misoPackageId(),
762
- minatoPackageId: this.#minatoPackageId(),
763
- }),
764
- publishCompositionAndRecording: (
765
- p: ConfiguredPublish<PublishCompositionAndRecordingParams>,
766
- ): TxThunk =>
767
- publishCompositionAndRecording({
768
- ...p,
769
- misoPackageId: this.#misoPackageId(),
770
- minatoPackageId: this.#minatoPackageId(),
771
- }),
772
- publishRelease: (p: ConfiguredRelease<PublishReleaseParams>): TxThunk => {
773
- return publishRelease({
774
- ...p,
775
- misoPackageId: this.#misoPackageId(),
776
- releaseRegistryId: this.#releaseRegistryId(),
777
- });
778
- },
779
- publishReleaseGraph: (p: ConfiguredReleaseGraphParams): TxThunk => {
780
- return publishReleaseGraph({
781
- ...p,
782
- misoPackageId: this.#misoPackageId(),
783
- minatoPackageId: this.#minatoPackageId(),
784
- });
785
- },
786
- setReleaseKind: (p: ConfiguredReleaseKind): TxThunk =>
787
- setReleaseKind({
788
- ...p,
789
- releaseKindPackageId: this.#requiredConfig(
790
- "releaseKindPackageId",
791
- "setReleaseKind",
792
- ),
793
- }),
794
- setReleaseDescription: (p: ConfiguredReleaseDescription): TxThunk =>
795
- setReleaseDescription({
796
- ...p,
797
- releaseDescriptionPackageId: this.#requiredConfig(
798
- "releaseDescriptionPackageId",
799
- "setReleaseDescription",
800
- ),
801
- }),
802
- setReleaseGenres: (p: ConfiguredReleaseGenres): TxThunk =>
803
- setReleaseGenres({
804
- ...p,
805
- releaseGenrePackageId: this.#requiredConfig(
806
- "releaseGenrePackageId",
807
- "setReleaseGenres",
808
- ),
809
- }),
810
- clearReleaseGenres: (p: ConfiguredClearReleaseGenres): TxThunk =>
811
- clearReleaseGenres({
812
- ...p,
813
- releaseGenrePackageId: this.#requiredConfig(
814
- "releaseGenrePackageId",
815
- "clearReleaseGenres",
816
- ),
817
- }),
818
- setReleaseDspLinks: (p: ConfiguredReleaseDspLinks): TxThunk =>
819
- setReleaseDspLinks({
820
- ...p,
821
- releaseDspLinkPackageId: this.#requiredConfig(
822
- "releaseDspLinkPackageId",
823
- "setReleaseDspLinks",
824
- ),
825
- }),
826
- addReleaseCredit: (p: ConfiguredReleaseCredit): TxThunk =>
827
- addReleaseCredit({
828
- ...p,
829
- releaseCreditsPackageId: this.#requiredConfig(
830
- "releaseCreditsPackageId",
831
- "addReleaseCredit",
832
- ),
833
- misoCreditPackageId: this.#requiredConfig(
834
- "misoCreditPackageId",
835
- "addReleaseCredit",
836
- ),
837
- }),
838
- setReleaseCover: (p: ConfiguredReleaseCover): TxThunk =>
839
- setReleaseCover({
840
- ...p,
841
- coverArtPackageId: this.#requiredConfig(
842
- "coverArtPackageId",
843
- "setReleaseCover",
844
- ),
845
- releaseCoverArtPackageId: this.#requiredConfig(
846
- "releaseCoverArtPackageId",
847
- "setReleaseCover",
848
- ),
849
- oriPackageId: this.#requiredConfig("oriPackageId", "setReleaseCover"),
850
- }),
851
- setReleaseTrackCover: (p: ConfiguredReleaseTrackCover): TxThunk =>
852
- setReleaseTrackCover({
853
- ...p,
854
- coverArtPackageId: this.#requiredConfig(
855
- "coverArtPackageId",
856
- "setReleaseTrackCover",
857
- ),
858
- releaseCoverArtPackageId: this.#requiredConfig(
859
- "releaseCoverArtPackageId",
860
- "setReleaseTrackCover",
861
- ),
862
- oriPackageId: this.#requiredConfig(
863
- "oriPackageId",
864
- "setReleaseTrackCover",
865
- ),
866
- }),
867
- setRecordingStreamingTranscode: (
868
- p: ConfiguredRecordingStreamingTranscode,
869
- ): TxThunk =>
870
- setRecordingStreamingTranscode({
871
- ...p,
872
- recordingStreamingTranscodePackageId: this.#requiredConfig(
873
- "recordingStreamingTranscodePackageId",
874
- "setRecordingStreamingTranscode",
875
- ),
876
- oriPackageId: this.#requiredConfig(
877
- "oriPackageId",
878
- "setRecordingStreamingTranscode",
879
- ),
880
- }),
881
- unsetRecordingStreamingTranscode: (
882
- p: ConfiguredUnsetRecordingStreamingTranscode,
883
- ): TxThunk =>
884
- unsetRecordingStreamingTranscode({
885
- ...p,
886
- recordingStreamingTranscodePackageId: this.#requiredConfig(
887
- "recordingStreamingTranscodePackageId",
888
- "unsetRecordingStreamingTranscode",
889
- ),
890
- }),
891
- setRecordingGenres: (p: ConfiguredRecordingGenres): TxThunk =>
892
- setRecordingGenres({
893
- ...p,
894
- recordingGenrePackageId: this.#requiredConfig(
895
- "recordingGenrePackageId",
896
- "setRecordingGenres",
897
- ),
898
- }),
899
- clearRecordingGenres: (p: ConfiguredClearRecordingGenres): TxThunk =>
900
- clearRecordingGenres({
901
- ...p,
902
- recordingGenrePackageId: this.#requiredConfig(
903
- "recordingGenrePackageId",
904
- "clearRecordingGenres",
905
- ),
906
- }),
907
- }, (operation) => this.#requireReady(operation), "tx");
908
-
909
- /**
910
- * Vault-aware builders and parsers. These take explicit object ids because a
911
- * VaultAdminCap is owner-held while the Vault is shared; package ids can come
912
- * from the deployment config or be supplied for private deployments.
913
- */
914
- get vault(): typeof vaultActions | undefined {
915
- if (!this.#availableOperations()) return undefined;
916
- this.#requireReady("vault builders");
917
- return vaultActions;
918
- }
919
-
920
- // ── Share currency provisioning (executes; Signer pattern) ─────────────────
921
-
922
- /** Publishes + initializes a fresh share currency (two txs). */
923
- createShareCurrency(
924
- signer: Signer,
925
- params: share.CreateShareCurrencyParams,
926
- ): Effect.Effect<share.ShareCurrency, SuiRpcError | TransactionFailedError | MisoChainIdentifierMismatchError> {
927
- return this.#run(share.createShareCurrency(signer, params));
928
- }
929
-
930
- /** Execute a composed platform PTB only after exact-ledger validation. */
931
- executeViaExecutor(
932
- executor: ParallelTransactionExecutor,
933
- ...thunks: TxThunk[]
934
- ): Effect.Effect<PlatformExecResult, SuiRpcError | MisoChainIdentifierMismatchError> {
935
- return this.ready().pipe(Effect.flatMap(() => executePlatformViaExecutor(executor, ...thunks)));
936
- }
937
-
938
- // ── Generated layer ───────────────────────────────────────────────────────
939
-
940
- /** Generated Move-call bindings, for commands this facade doesn't wrap. */
941
- get call() {
942
- const sales =
943
- this.#config.recordSales?.status === "available"
944
- ? this.#config.recordSales
945
- : undefined;
946
- const operations = this.#availableOperations();
947
- return requireReadyOnModuleFunctions({
948
- record: sales
949
- ? bindModulePackage(recordContract, sales.recordPackageId, [
950
- "destroy",
951
- "releaseId",
952
- "pressingId",
953
- "edition",
954
- "number",
955
- "purchaseCurrency",
956
- "purchasePrice",
957
- "purchasedBy",
958
- "purchasedTimestampMs",
959
- "deriveAddress",
960
- ] as const)
961
- : undefined,
962
- listing: sales
963
- ? bindModulePackage(listingContract, sales.recordShopPackageId, [
964
- "fixed",
965
- "floor",
966
- "enabled",
967
- "disabled",
968
- "setState",
969
- "setPrice",
970
- "purchase",
971
- "deriveAddress",
972
- "releaseId",
973
- "pressingId",
974
- "pricing",
975
- "price",
976
- "state",
977
- "isEnabled",
978
- "isDisabled",
979
- "isFixed",
980
- "isFloor",
981
- ] as const)
982
- : undefined,
983
- pressing: sales
984
- ? bindModulePackage(pressingContract, sales.recordPackageId, [
985
- "authorizeDistributor",
986
- "revokeDistributor",
987
- "deriveAddress",
988
- "deriveAdminCapAddress",
989
- "releaseId",
990
- "edition",
991
- "supply",
992
- "maxSupply",
993
- "distributors",
994
- "isDistributorAuthorized",
995
- "pressingId",
996
- ] as const)
997
- : undefined,
998
- genre: this.#config.genrePackageId
999
- ? bindModulePackage(genreContract, this.#config.genrePackageId, [
1000
- "deriveAddress",
1001
- ] as const)
1002
- : undefined,
1003
- releaseDescription: this.#config.releaseDescriptionPackageId
1004
- ? bindModulePackage(
1005
- releaseDescriptionContract,
1006
- this.#config.releaseDescriptionPackageId,
1007
- ["setDescription", "clearDescription", "hasDescription"],
1008
- )
1009
- : undefined,
1010
- releaseDspLink: this.#config.releaseDspLinkPackageId
1011
- ? bindModulePackage(
1012
- releaseDspLinkContract,
1013
- this.#config.releaseDspLinkPackageId,
1014
- [
1015
- "platform",
1016
- "platformSpotify",
1017
- "platformAppleMusic",
1018
- "platformAmazonMusic",
1019
- "platformBandcamp",
1020
- "platformDeezer",
1021
- "platformSoundcloud",
1022
- "platformTidal",
1023
- "platformYoutubeMusic",
1024
- "newSpotify",
1025
- "newAppleMusicAlbum",
1026
- "newAppleMusicTrack",
1027
- "newAmazonMusicAlbum",
1028
- "newAmazonMusicTrack",
1029
- "newBandcamp",
1030
- "newDeezer",
1031
- "newSoundcloud",
1032
- "newTidal",
1033
- "newYoutubeMusic",
1034
- "setReleaseLink",
1035
- "clearReleaseLink",
1036
- "setTrackLink",
1037
- "clearTrackLink",
1038
- "clearTrackLinks",
1039
- "hasReleaseLink",
1040
- ] as const,
1041
- )
1042
- : undefined,
1043
- releaseGenre: this.#config.releaseGenrePackageId
1044
- ? bindModulePackage(
1045
- releaseGenreContract,
1046
- this.#config.releaseGenrePackageId,
1047
- ["addGenre", "removeGenre", "clearGenres"] as const,
1048
- )
1049
- : undefined,
1050
- releaseKind: this.#config.releaseKindPackageId
1051
- ? bindModulePackage(
1052
- releaseKindContract,
1053
- this.#config.releaseKindPackageId,
1054
- ["setKind", "unsetKind", "hasKind"] as const,
1055
- )
1056
- : undefined,
1057
- releaseRevenueDistributor: operations
1058
- ? bindModulePackage(
1059
- releaseRevenueDistributorContract,
1060
- operations.actions.releaseRevenueDistributor,
1061
- [
1062
- "redeemAndDistribute",
1063
- "redeemAllAndDistribute",
1064
- "receiveAndDistribute",
1065
- ] as const,
1066
- )
1067
- : undefined,
1068
- releaseRevenueDistributorPlugin: operations
1069
- ? bindModulePackage(
1070
- releaseRevenueDistributorPluginContract,
1071
- operations.plugins.releaseRevenueDistributor,
1072
- [
1073
- "install",
1074
- "uninstall",
1075
- "redeemAllAndDistribute",
1076
- "receiveAndDistribute",
1077
- "isInstalled",
1078
- ] as const,
1079
- )
1080
- : undefined,
1081
- vault: operations
1082
- ? bindModulePackage(vaultContract, operations.vault.packageId, [
1083
- "share",
1084
- "withdrawCap",
1085
- "restoreCap",
1086
- "derivedAddress",
1087
- "capId",
1088
- "isActive",
1089
- "authorizedPlugins",
1090
- "isPluginAuthorized",
1091
- ] as const)
1092
- : undefined,
1093
- compositionRoyaltyPool: operations
1094
- ? bindModulePackage(
1095
- compositionRoyaltyPoolContract,
1096
- operations.actions.compositionRoyaltyPool,
1097
- ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"] as const,
1098
- )
1099
- : undefined,
1100
- compositionRoyaltyPoolPlugin: operations
1101
- ? bindModulePackage(
1102
- compositionRoyaltyPoolPluginContract,
1103
- operations.plugins.compositionRoyaltyPool,
1104
- [
1105
- "install",
1106
- "uninstall",
1107
- "receiveAndDeposit",
1108
- "redeemAndDeposit",
1109
- "isInstalled",
1110
- ] as const,
1111
- )
1112
- : undefined,
1113
- recordingRoyaltyPool: operations
1114
- ? bindModulePackage(
1115
- recordingRoyaltyPoolContract,
1116
- operations.actions.recordingRoyaltyPool,
1117
- ["newPool", "receiveAndDeposit", "redeemAndDeposit", "poolAddress"] as const,
1118
- )
1119
- : undefined,
1120
- recordingRoyaltyPoolPlugin: operations
1121
- ? bindModulePackage(
1122
- recordingRoyaltyPoolPluginContract,
1123
- operations.plugins.recordingRoyaltyPool,
1124
- [
1125
- "install",
1126
- "uninstall",
1127
- "receiveAndDeposit",
1128
- "redeemAndDeposit",
1129
- "isInstalled",
1130
- ] as const,
1131
- )
1132
- : undefined,
1133
- partyWallet: operations
1134
- ? bindModulePackage(
1135
- partyWalletContract,
1136
- operations.actions.partyWallet,
1137
- ["receive", "receiveBalance", "redeemBalance", "inboxAddress"] as const,
1138
- )
1139
- : undefined,
1140
- compositionRoutedStake: operations
1141
- ? bindModulePackage(
1142
- compositionRoutedStakeContract,
1143
- operations.actions.compositionRoutedStake,
1144
- ["createStake", "register", "unregister", "unstake", "restake", "stakeAddress"] as const,
1145
- )
1146
- : undefined,
1147
- routedStake: this.#config.routedStakePackageId
1148
- ? bindModulePackage(
1149
- routedStakeContract,
1150
- this.#config.routedStakePackageId,
1151
- [
1152
- "share",
1153
- "register",
1154
- "unregister",
1155
- "sweep",
1156
- "unstake",
1157
- "restake",
1158
- "derivedAddress",
1159
- ] as const,
1160
- )
1161
- : undefined,
1162
- royaltyPool: this.#config.royaltyPoolPackageId
1163
- ? bindModulePackage(
1164
- royaltyPoolContract,
1165
- this.#config.royaltyPoolPackageId,
1166
- [
1167
- "share",
1168
- "deposit",
1169
- "sweepAndDeposit",
1170
- "receiveAndDeposit",
1171
- "registerStake",
1172
- "unregisterStake",
1173
- "claimRewards",
1174
- "pendingRewards",
1175
- "stakedShares",
1176
- "cumulativeRewardPerShare",
1177
- "cumulativeDeposits",
1178
- "derivedAddress",
1179
- "assertDerivedFrom",
1180
- ] as const,
1181
- )
1182
- : undefined,
1183
- recordingAdvisory: this.#config.recordingAdvisoryPackageId
1184
- ? bindModulePackage(
1185
- recordingAdvisoryContract,
1186
- this.#config.recordingAdvisoryPackageId,
1187
- [
1188
- "explicit",
1189
- "notExplicit",
1190
- "cleaned",
1191
- "setRating",
1192
- "unsetRating",
1193
- "hasRating",
1194
- "isExplicit",
1195
- "isNotExplicit",
1196
- "isCleaned",
1197
- ] as const,
1198
- )
1199
- : undefined,
1200
- recordingLanguage: this.#config.recordingLanguagePackageId
1201
- ? bindModulePackage(
1202
- recordingLanguageContract,
1203
- this.#config.recordingLanguagePackageId,
1204
- [
1205
- "setLanguages",
1206
- "setInstrumental",
1207
- "unsetLanguages",
1208
- "hasLanguages",
1209
- "isInstrumental",
1210
- ] as const,
1211
- )
1212
- : undefined,
1213
- recordingMasterReference: this.#config.recordingMasterReferencePackageId
1214
- ? bindModulePackage(
1215
- recordingMasterReferenceContract,
1216
- this.#config.recordingMasterReferencePackageId,
1217
- [
1218
- "setMasterReference",
1219
- "unsetMasterReference",
1220
- "hasMasterReference",
1221
- ] as const,
1222
- )
1223
- : undefined,
1224
- recordingStreamingTranscode: this.#config.recordingStreamingTranscodePackageId
1225
- ? bindModulePackage(
1226
- recordingStreamingTranscodeContract,
1227
- this.#config.recordingStreamingTranscodePackageId,
1228
- [
1229
- "setStreamingTranscode",
1230
- "unsetStreamingTranscode",
1231
- "hasStreamingTranscode",
1232
- ] as const,
1233
- )
1234
- : undefined,
1235
- recordingGenre: this.#config.recordingGenrePackageId
1236
- ? bindModulePackage(
1237
- recordingGenreContract,
1238
- this.#config.recordingGenrePackageId,
1239
- ["addGenre", "removeGenre", "clearGenres"] as const,
1240
- )
1241
- : undefined,
1242
- coverArt: this.#config.coverArtPackageId
1243
- ? bindModulePackage(
1244
- coverArtContract,
1245
- this.#config.coverArtPackageId,
1246
- [] as const,
1247
- )
1248
- : undefined,
1249
- releaseCoverArt: this.#config.releaseCoverArtPackageId
1250
- ? bindModulePackage(
1251
- releaseCoverArtContract,
1252
- this.#config.releaseCoverArtPackageId,
1253
- [
1254
- "setCover",
1255
- "unsetCover",
1256
- "setTrackCover",
1257
- "unsetTrackCover",
1258
- "hasCoverArt",
1259
- ] as const,
1260
- )
1261
- : undefined,
1262
- releaseCredits: this.#config.releaseCreditsPackageId
1263
- ? bindModulePackage(
1264
- releaseCreditsContract,
1265
- this.#config.releaseCreditsPackageId,
1266
- ["addCredit", "removeCredit", "hasCredits"] as const,
1267
- )
1268
- : undefined,
1269
- }, (operation) => this.#requireReady(operation), "call");
1270
- }
1271
-
1272
- /** Generated BCS definitions, for parsing objects or events yourself. */
1273
- readonly bcs = {
1274
- Record: recordContract.Record,
1275
- Pressing: pressingContract.Pressing,
1276
- PressingAdminCap: pressingContract.PressingAdminCap,
1277
- Listing: listingContract.Listing,
1278
- Pricing: listingContract.Pricing,
1279
- ListingState: listingContract.State,
1280
- RecordCreatedEvent: recordContract.RecordCreatedEvent,
1281
- RecordDestroyedEvent: recordContract.RecordDestroyedEvent,
1282
- PressingCreatedEvent: pressingContract.PressingCreatedEvent,
1283
- DistributorAuthorizedEvent: pressingContract.DistributorAuthorizedEvent,
1284
- DistributorRevokedEvent: pressingContract.DistributorRevokedEvent,
1285
- RecordPurchasedEvent: pressingContract.RecordPurchasedEvent,
1286
- ListingCreatedEvent: listingContract.ListingCreatedEvent,
1287
- ListingPriceChangedEvent: listingContract.ListingPriceChangedEvent,
1288
- ListingStateChangedEvent: listingContract.ListingStateChangedEvent,
1289
- RecordSoldEvent: listingContract.RecordSoldEvent,
1290
- VaultAdminCap: vaultContract.VaultAdminCap,
1291
- VaultRegistry: vaultContract.VaultRegistry,
1292
- VaultKey: vaultContract.VaultKey,
1293
- VaultAdminCapKey: vaultContract.VaultAdminCapKey,
1294
- VaultCreatedEvent: vaultContract.VaultCreatedEvent,
1295
- VaultCapabilityWithdrawnEvent: vaultContract.VaultCapabilityWithdrawnEvent,
1296
- VaultCapabilityRestoredEvent: vaultContract.VaultCapabilityRestoredEvent,
1297
- PartyObjectReceivedEvent: partyWalletContract.ObjectReceivedEvent,
1298
- PartyCoinsReceivedEvent: partyWalletContract.CoinsReceivedEvent,
1299
- PartyFundsRedeemedEvent: partyWalletContract.FundsRedeemedEvent,
1300
- ReleaseTrackRevenueDistributedEvent:
1301
- releaseRevenueDistributorContract.ReleaseTrackRevenueDistributedEvent,
1302
- ReleaseRevenueDistributedEvent:
1303
- releaseRevenueDistributorContract.ReleaseRevenueDistributedEvent,
1304
- };
69
+ readonly graphqlClient?: SuiGraphQLClient;
1305
70
  }
1306
71
 
1307
- /** The full Miso client exposed by `@misofm/platform`. */
1308
- export { MisoPlatformClient as MisoClient };
1309
-
1310
72
  /**
1311
- * Registers the complete Miso facade at `client.miso`.
73
+ * The registration a Promise consumer passes to `client.$extend(...)`.
74
+ *
75
+ * ```ts
76
+ * const client = new SuiGrpcClient({ network: "testnet" }).$extend(miso());
77
+ * const pressing = await client.miso.getPressing(pressingId);
78
+ * const recipe = client.miso.tx.purchaseRecord({ releaseId, edition, currencyType, paymentAmount, expectedPricing, recipient });
79
+ * await client.miso.dispose();
80
+ * ```
1312
81
  *
1313
- * Platform operations live directly on `client.miso`; the lower-level
1314
- * permissionless protocol SDK is available at `client.miso.protocol`.
82
+ * `warm` is given because `tx`/`ids`/`call`/`bcs`/`vault`/`deployment` are
83
+ * synchronous members a consumer may read the moment it registers, and
84
+ * `Miso.layer` touches no network at build for a known chain id
85
+ * (`docs/extensions.md` §7, "Synchronous members, `$ready` and `warm`").
86
+ * `options.chainId` is forwarded to both `warm` (so `register` can build
87
+ * synchronously without reading the chain) and `sui` (so the same id is
88
+ * asserted against the node) — without it on a `devnet`, `localnet`, or
89
+ * custom network, `warm` throws for any network outside the built-in
90
+ * `mainnet`/`testnet` table.
91
+ *
92
+ * `ready` stays on the service, deprecated: `await client.miso.ready()`
93
+ * keeps compiling and working as a `$ready()`-style warm-up for a consumer
94
+ * migrating off the predecessor's own `ready()` idiom (`docs/CONVERSION.md`).
1315
95
  */
1316
- export function miso<const Name extends string = "miso">(
96
+ export const miso = <const Name extends string = "miso">(
1317
97
  options: MisoOptions<Name> = {},
1318
- ): SuiClientRegistration<ClientWithCoreApi, Name, MisoPlatformClient> {
1319
- const name = (options.name ?? "miso") as Name;
1320
- return {
1321
- name,
1322
- register: (client: ClientWithCoreApi) => {
1323
- const deployment = immutableSnapshot(
1324
- options.deployment ?? getMisoPlatformDeployment(client.network),
1325
- );
1326
- if (deployment.network !== client.network) {
1327
- throw new MisoNetworkMismatchError({ clientNetwork: client.network, deploymentNetwork: deployment.network });
1328
- }
1329
- const protocol = protocolMiso({
1330
- deployment: deployment.protocol,
1331
- graphqlClient: options.graphqlClient,
1332
- }).register(client);
1333
- return new MisoPlatformClient(
1334
- client,
1335
- {
1336
- recordSales: deployment.recordSales,
1337
- misoPackageId: deployment.protocol.musicos,
1338
- minatoPackageId: deployment.packages.minato,
1339
- releaseRegistryId: deployment.objects.releaseRegistry,
1340
- releaseKindPackageId: deployment.packages.releaseKind,
1341
- releaseDescriptionPackageId: deployment.packages.releaseDescription,
1342
- releaseGenrePackageId: deployment.packages.releaseGenre,
1343
- releaseDspLinkPackageId: deployment.packages.releaseDspLink,
1344
- recordingAdvisoryPackageId: deployment.packages.recordingAdvisory,
1345
- recordingLanguagePackageId: deployment.packages.recordingLanguage,
1346
- recordingGenrePackageId: deployment.packages.recordingGenre,
1347
- recordingMasterReferencePackageId:
1348
- deployment.packages.recordingMasterReference,
1349
- recordingStreamingTranscodePackageId:
1350
- deployment.packages.recordingStreamingTranscode,
1351
- operations: deployment.operations,
1352
- royaltyPoolPackageId: deployment.packages.royaltyPool,
1353
- routedStakePackageId: deployment.packages.routedStake,
1354
- releaseCreditsPackageId: deployment.packages.releaseCredits,
1355
- misoCreditPackageId: deployment.packages.credit,
1356
- coverArtPackageId: deployment.packages.coverArt,
1357
- releaseCoverArtPackageId: deployment.packages.releaseCoverArt,
1358
- genrePackageId: deployment.packages.genre,
1359
- genreRegistryId: deployment.objects.genreRegistry,
1360
- oriPackageId: deployment.packages.ori,
1361
- },
1362
- protocol,
1363
- deployment,
1364
- );
1365
- },
1366
- };
1367
- }
1368
-
1369
- /**
1370
- * @deprecated Prefer zero-config `miso()`, which registers the complete facade
1371
- * at `client.miso` and exposes the protocol layer at `client.miso.protocol`.
1372
- */
1373
- export function misoPlatform(config: MisoPlatformConfig) {
1374
- return {
1375
- name: "misoPlatform" as const,
1376
- register: (client: ClientWithCoreApi) => {
1377
- const configSnapshot = immutableSnapshot(config);
1378
- if (configSnapshot.network && configSnapshot.network !== client.network) {
1379
- throw new MisoNetworkMismatchError({ clientNetwork: client.network, deploymentNetwork: configSnapshot.network });
1380
- }
1381
- const protocol = configSnapshot.misoPackageId
1382
- ? protocolMiso({
1383
- deployment: { packageId: configSnapshot.misoPackageId },
1384
- }).register(client)
1385
- : undefined;
1386
- return new MisoPlatformClient(client, configSnapshot, protocol);
1387
- },
1388
- };
1389
- }
98
+ ): SuiClientRegistration<ClientWithCoreApi, Name, PromiseFace<MisoService> & ExtensionFace> => {
99
+ // `options.chainId` falls back to a custom deployment's own
100
+ // `chainIdentifier` (B5/B6, misofm/sdks#35 verification): a caller who
101
+ // names a custom network's deployment, with its own `chainIdentifier`, does
102
+ // not also have to repeat that id via `chainId` for `warm` to build
103
+ // synchronously `docs/extensions.md` §7's "thread the chain id through
104
+ // your registration options" applies equally to an id the deployment
105
+ // already carries.
106
+ const chainId = options.chainId ?? options.deployment?.chainIdentifier;
107
+ return SuiExtension.fromService(Miso, {
108
+ name: (options.name ?? "miso") as Name,
109
+ layer: Layer.unwrap(
110
+ Effect.gen(function* () {
111
+ const sui = yield* Sui;
112
+ if (options.deployment) return Miso.layer(options.deployment);
113
+ // `getMisoPlatformDeployment` throws a plain `Error` for a network
114
+ // with no bundled manifest; `Effect.try` turns that into a typed
115
+ // `MisoPlatformDeploymentInvalidError` instead of an unhandled defect
116
+ // out of `Layer.unwrap` (B5, misofm/sdks#35 verification) — the same
117
+ // mapping `Miso.layerConfig` already applies to the same function.
118
+ const deployment = yield* Effect.try({
119
+ try: () => getMisoPlatformDeployment(sui.network),
120
+ catch: (cause) => new MisoPlatformDeploymentInvalidError({ message: cause instanceof Error ? cause.message : String(cause) }),
121
+ });
122
+ return Miso.layer(deployment);
123
+ }),
124
+ ).pipe(Layer.provide(options.graphqlClient ? SuiGraphQL.layer(options.graphqlClient) : SuiGraphQL.layerUnavailable)),
125
+ ...(chainId === undefined ? {} : { sui: { chainId } }),
126
+ warm: { chainId },
127
+ });
128
+ };