@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
@@ -10,7 +10,7 @@
10
10
  // credits → recordings); the same work happens once here, inside one datacenter,
11
11
  // and every subsequent visitor is served from cache.
12
12
 
13
- import { Effect } from "effect";
13
+ import { Effect, Result } from "effect";
14
14
  import {
15
15
  deriveListingId,
16
16
  getListing,
@@ -45,17 +45,19 @@ import {
45
45
  type RecordingEngineSessionView,
46
46
  } from "../recording-extensions.ts";
47
47
  import { getTrackCreditsByRecordingIds } from "../catalog.ts";
48
- import { getReleaseById, getReleasesByIds } from "@misofm/musicos";
48
+ import { Musicos, type MusicosDeploymentInvalid, type MusicosService, type MusicosWorkNotFound, type ReadError } from "@misofm/musicos";
49
49
  import type { Release } from "@misofm/musicos";
50
50
  import {
51
- getObjectsContent,
52
- ObjectTypeMismatchError,
53
- type BcsDecodeError,
54
- type ObjectNotFoundError,
55
- type SuiClient,
56
- type SuiGraphQL,
57
- type SuiRpcError,
58
- } from "@misofm/effect";
51
+ DecodeError,
52
+ ObjectId,
53
+ Sui,
54
+ SuiGraphQL,
55
+ type BatchItemError,
56
+ type GraphQLUnavailable,
57
+ type ObjectDeleted,
58
+ type ObjectUnavailable,
59
+ type TransportError,
60
+ } from "@unconfirmed/sui-effect";
59
61
  import { ReleaseNotFoundError } from "../errors.ts";
60
62
  import type { MisoConfig } from "./config.ts";
61
63
  import { getRecordingTitles, parseReleaseObject } from "./works.ts";
@@ -85,6 +87,21 @@ import type {
85
87
  WorkState,
86
88
  } from "./types.ts";
87
89
 
90
+ /**
91
+ * Builds `Musicos.layer({ deployment: { packageId } })`, provides it, and
92
+ * hands back the effect it wraps — see `../catalog.ts`'s `withMusicos` for
93
+ * the same idiom (kept file-local; see `docs/CONVERSION-STATUS.md`).
94
+ */
95
+ function withMusicos<A, E>(
96
+ packageId: string,
97
+ effect: (musicos: MusicosService) => Effect.Effect<A, E, Sui>,
98
+ ): Effect.Effect<A, E | MusicosDeploymentInvalid, Sui> {
99
+ return Effect.gen(function* () {
100
+ const musicos = yield* Musicos;
101
+ return yield* effect(musicos);
102
+ }).pipe(Effect.provide(Musicos.layer({ deployment: { packageId } })));
103
+ }
104
+
88
105
  // ── Walrus URLs ──────────────────────────────────────────────────────────────
89
106
 
90
107
  /** Aggregator URL for a cover image ref (a standalone Walrus blob). */
@@ -165,7 +182,7 @@ function toSaleView(
165
182
  export const getPressingView = Effect.fn("getPressingView")(function* (
166
183
  pressingId: string,
167
184
  config: MisoConfig,
168
- ): Effect.fn.Return<PressingView | null, ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
185
+ ): Effect.fn.Return<PressingView | null, DecodeError | ObjectUnavailable | TransportError, Sui> {
169
186
  const sales = requireRecordSalesDeployment(config.recordSales);
170
187
  const pressing = yield* getPressing(pressingId, sales.recordPackageId);
171
188
  return pressing ? toPressingView(pressing) : null;
@@ -176,7 +193,7 @@ export const getListingView = Effect.fn("getListingView")(function* (
176
193
  pressingId: string,
177
194
  currencyType: string,
178
195
  config: MisoConfig,
179
- ): Effect.fn.Return<ListingView | null, ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
196
+ ): Effect.fn.Return<ListingView | null, DecodeError | ObjectUnavailable | TransportError, Sui> {
180
197
  const sales = requireRecordSalesDeployment(config.recordSales);
181
198
  const listingId = deriveListingId(pressingId, currencyType, sales.recordShopPackageId);
182
199
  const listing = yield* getListing(listingId, sales.recordShopPackageId);
@@ -262,7 +279,7 @@ function toTrackEngineSession(view: RecordingEngineSessionView): TrackEngineSess
262
279
  export const readReleaseCover = Effect.fn("readReleaseCover")(function* (
263
280
  releaseId: string,
264
281
  config: MisoConfig,
265
- ): Effect.fn.Return<Cover | null, never, SuiClient> {
282
+ ): Effect.fn.Return<Cover | null, never, Sui> {
266
283
  const { releaseCoverArt } = config.protocol;
267
284
  const covers = yield* getReleaseCoversByIds([releaseId], releaseCoverArt).pipe(
268
285
  Effect.catch(() => Effect.succeed({} as Partial<Record<string, ReleaseCoverView>>)),
@@ -280,15 +297,15 @@ export interface ReleaseResources {
280
297
  }
281
298
 
282
299
  /**
283
- * A release plus selected derived resources in one heterogeneous Core batch.
284
- * Every extension id is deterministic, so separate object calls only add
285
- * network round trips without discovering anything new.
300
+ * A release plus selected derived resources in one heterogeneous chunked
301
+ * `sui.getObjects`. Every extension id is deterministic, so separate object
302
+ * calls only add network round trips without discovering anything new.
286
303
  */
287
304
  export const getReleaseResources = Effect.fn("getReleaseResources")(function* (
288
305
  releaseId: string,
289
306
  config: MisoConfig,
290
307
  include: readonly ReleaseResourceInclude[] = [],
291
- ): Effect.fn.Return<ReleaseResources, ReleaseNotFoundError | BcsDecodeError | SuiRpcError, SuiClient> {
308
+ ): Effect.fn.Return<ReleaseResources, ReleaseNotFoundError | DecodeError | TransportError, Sui> {
292
309
  const wantsCover = include.includes("cover");
293
310
  const wantsCredits = include.includes("credits");
294
311
  const wantsKind = include.includes("kind");
@@ -301,7 +318,11 @@ export const getReleaseResources = Effect.fn("getReleaseResources")(function* (
301
318
  ...(creditsFieldId ? [creditsFieldId] : []),
302
319
  ...(kindFieldId ? [kindFieldId] : []),
303
320
  ];
304
- const contentById = yield* getObjectsContent(objectIds);
321
+ const sui = yield* Sui;
322
+ const results = yield* sui.getObjects(objectIds.map((id) => ObjectId.make(id)));
323
+ const contentById = new Map(
324
+ results.flatMap((result, index) => (Result.isSuccess(result) ? [[objectIds[index]!, result.success] as const] : [])),
325
+ );
305
326
 
306
327
  const releaseFound = contentById.get(releaseId);
307
328
  if (!releaseFound) return yield* new ReleaseNotFoundError({ releaseId });
@@ -368,7 +389,7 @@ export const getReleaseDetail = Effect.fn("getReleaseDetail")(function* (
368
389
  releaseId: string,
369
390
  config: MisoConfig,
370
391
  options: GetReleaseOptions = {},
371
- ): Effect.fn.Return<ReleaseDetail, ReleaseNotFoundError | BcsDecodeError | SuiRpcError, SuiClient | SuiGraphQL> {
392
+ ): Effect.fn.Return<ReleaseDetail, ReleaseNotFoundError | DecodeError | BatchItemError | GraphQLUnavailable | MusicosWorkNotFound | TransportError, Sui | SuiGraphQL> {
372
393
  const { release, cover, credits, kind } = yield* getReleaseResources(releaseId, config, [
373
394
  "cover",
374
395
  "credits",
@@ -429,7 +450,7 @@ export const getReleaseDetail = Effect.fn("getReleaseDetail")(function* (
429
450
  const getTrackCreditsForRecordingIds = Effect.fn("getTrackCreditsForRecordingIds")(function* (
430
451
  recordingIds: readonly string[],
431
452
  config: MisoConfig,
432
- ): Effect.fn.Return<Record<string, TrackCredits>, SuiRpcError | BcsDecodeError, SuiClient | SuiGraphQL> {
453
+ ): Effect.fn.Return<Record<string, TrackCredits>, BatchItemError | GraphQLUnavailable | MusicosWorkNotFound | TransportError, Sui | SuiGraphQL> {
433
454
  const { compositionCredits, recordingCredits } = config.protocol;
434
455
  const tracks = yield* getTrackCreditsByRecordingIds(recordingIds, {
435
456
  misoPackageId: config.deployment.musicos,
@@ -459,8 +480,12 @@ const getTrackCreditsForRecordingIds = Effect.fn("getTrackCreditsForRecordingIds
459
480
  export const getTrackCredits = Effect.fn("getTrackCredits")(function* (
460
481
  releaseId: string,
461
482
  config: MisoConfig,
462
- ): Effect.fn.Return<Record<string, TrackCredits>, ObjectNotFoundError | SuiRpcError | BcsDecodeError, SuiClient | SuiGraphQL> {
463
- const release = yield* getReleaseById(releaseId);
483
+ ): Effect.fn.Return<
484
+ Record<string, TrackCredits>,
485
+ ReadError | MusicosDeploymentInvalid | MusicosWorkNotFound | BatchItemError | GraphQLUnavailable | TransportError,
486
+ Sui | SuiGraphQL
487
+ > {
488
+ const release = yield* withMusicos(config.deployment.musicos, (musicos) => musicos.getReleaseById(ObjectId.make(releaseId)));
464
489
  const recordingIds = release.tracks.map((track) => track.recordingId);
465
490
  return yield* getTrackCreditsForRecordingIds(recordingIds, config);
466
491
  });
@@ -474,8 +499,8 @@ export const getPressingDetail = Effect.fn("getPressingDetail")(function* (
474
499
  options: GetReleaseOptions = {},
475
500
  ): Effect.fn.Return<
476
501
  PressingDetail | null,
477
- ObjectTypeMismatchError | ReleaseNotFoundError | BcsDecodeError | SuiRpcError,
478
- SuiClient | SuiGraphQL
502
+ DecodeError | ReleaseNotFoundError | MusicosWorkNotFound | BatchItemError | GraphQLUnavailable | TransportError,
503
+ Sui | SuiGraphQL
479
504
  > {
480
505
  const pressing = yield* getPressingView(pressingId, config);
481
506
  if (!pressing) return null;
@@ -495,8 +520,8 @@ export const getPressingSaleDetail = Effect.fn("getPressingSaleDetail")(function
495
520
  options: GetReleaseOptions = {},
496
521
  ): Effect.fn.Return<
497
522
  SaleDetail | null,
498
- ObjectTypeMismatchError | ReleaseNotFoundError | BcsDecodeError | SuiRpcError,
499
- SuiClient | SuiGraphQL
523
+ DecodeError | ReleaseNotFoundError | MusicosWorkNotFound | BatchItemError | GraphQLUnavailable | TransportError,
524
+ Sui | SuiGraphQL
500
525
  > {
501
526
  const pressing = yield* getPressingView(pressingId, config);
502
527
  if (!pressing) return null;
@@ -519,8 +544,8 @@ export const getPressingPreview = Effect.fn("getPressingPreview")(function* (
519
544
  config: MisoConfig,
520
545
  ): Effect.fn.Return<
521
546
  PressingPreview | null,
522
- ObjectTypeMismatchError | ReleaseNotFoundError | BcsDecodeError | SuiRpcError,
523
- SuiClient
547
+ DecodeError | ObjectUnavailable | ReleaseNotFoundError | TransportError,
548
+ Sui
524
549
  > {
525
550
  const pressing = yield* getPressingView(pressingId, config);
526
551
  if (!pressing) return null;
@@ -552,8 +577,8 @@ export const getSaleDetail = Effect.fn("getSaleDetail")(function* (
552
577
  options: GetReleaseOptions = {},
553
578
  ): Effect.fn.Return<
554
579
  SaleDetail | null,
555
- ObjectTypeMismatchError | ReleaseNotFoundError | BcsDecodeError | SuiRpcError,
556
- SuiClient | SuiGraphQL
580
+ DecodeError | ObjectDeleted | ObjectUnavailable | ReleaseNotFoundError | MusicosWorkNotFound | BatchItemError | GraphQLUnavailable | TransportError,
581
+ Sui | SuiGraphQL
557
582
  > {
558
583
  const sales = requireRecordSalesDeployment(config.recordSales);
559
584
  const sale = yield* getSale({
@@ -577,7 +602,11 @@ export const getSaleDetail = Effect.fn("getSaleDetail")(function* (
577
602
  */
578
603
  export const getDiscoverShelf = Effect.fn("getDiscoverShelf")(function* (
579
604
  config: MisoConfig,
580
- ): Effect.fn.Return<DiscoverItem[], ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
605
+ ): Effect.fn.Return<
606
+ DiscoverItem[],
607
+ DecodeError | ObjectDeleted | ObjectUnavailable | MusicosDeploymentInvalid | TransportError,
608
+ Sui
609
+ > {
581
610
  const configuredSales = [...config.discoverSales];
582
611
  const sales = requireRecordSalesDeployment(config.recordSales);
583
612
  const settled = yield* Effect.forEach(
@@ -598,8 +627,8 @@ export const getDiscoverShelf = Effect.fn("getDiscoverShelf")(function* (
598
627
  const releaseIds = [...new Set(available.map((item) => item.result.pressing.releaseId))];
599
628
  if (releaseIds.length === 0) return [];
600
629
 
601
- const [releases, coverViews, credits] = yield* Effect.all([
602
- getReleasesByIds(releaseIds),
630
+ const [releaseResults, coverViews, credits] = yield* Effect.all([
631
+ withMusicos(config.deployment.musicos, (musicos) => musicos.getReleasesByIds(releaseIds.map((id) => ObjectId.make(id)))),
603
632
  getReleaseCoversByIds(releaseIds, config.protocol.releaseCoverArt).pipe(
604
633
  Effect.catch(() => Effect.succeed({} as Partial<Record<string, ReleaseCoverView>>)),
605
634
  ),
@@ -607,10 +636,13 @@ export const getDiscoverShelf = Effect.fn("getDiscoverShelf")(function* (
607
636
  Effect.catch(() => Effect.succeed({} as Partial<Record<string, CreditView[]>>)),
608
637
  ),
609
638
  ]);
639
+ const releases = new Map(
640
+ releaseResults.flatMap((result, index) => (Result.isSuccess(result) ? [[releaseIds[index]!, result.success] as const] : [])),
641
+ );
610
642
 
611
643
  return available.flatMap(({ result }) => {
612
644
  const releaseId = result.pressing.releaseId;
613
- const release = releases[releaseId];
645
+ const release = releases.get(releaseId);
614
646
  if (!release) return [];
615
647
  const cover = toCover(config.walrusAggregatorUrl, coverViews[releaseId] ?? null);
616
648
  return [
@@ -645,8 +677,8 @@ export const getRecordAlbum = Effect.fn("getRecordAlbum")(function* (
645
677
  options: GetRecordAlbumOptions = {},
646
678
  ): Effect.fn.Return<
647
679
  RecordAlbum | null,
648
- ObjectTypeMismatchError | ReleaseNotFoundError | BcsDecodeError | SuiRpcError,
649
- SuiClient | SuiGraphQL
680
+ DecodeError | ObjectUnavailable | ReleaseNotFoundError | MusicosWorkNotFound | BatchItemError | GraphQLUnavailable | TransportError,
681
+ Sui | SuiGraphQL
650
682
  > {
651
683
  const sales = requireRecordSalesDeployment(config.recordSales);
652
684
  const record = yield* getRecord(recordId, sales.recordPackageId);
@@ -12,45 +12,43 @@
12
12
  //
13
13
  // It also carries the resolved `MisoConfig`, so a read function takes ONE argument
14
14
  // and never has a package id threaded through its signature.
15
- //
16
- // Party now shares the same network SDK registration and deployment as protocol
17
- // core, so every read hangs off one `sui.miso` namespace.
18
15
 
19
- import type { ClientWithCoreApi } from "@mysten/sui/client";
20
16
  import { SuiGrpcClient } from "@mysten/sui/grpc";
21
17
  import { SuiGraphQLClient } from "@mysten/sui/graphql";
22
- import { miso, type MisoProtocolClient } from "@misofm/musicos/client";
23
- import { PartyosClient } from "@misofm/partyos";
24
- import { PartyPlatformClient } from "../party/index.ts";
18
+ import { Layer } from "effect";
19
+ import { Sui, SuiCore, SuiGraphQL, type NetworkMismatch, type TransportError } from "@unconfirmed/sui-effect";
20
+ import { miso, type MisoClient as MisoExtensionClient } from "../client.ts";
21
+ import { Miso, type MisoLayerError } from "../Miso.ts";
22
+ import { getMisoPlatformDeployment, type MisoPlatformDeployment } from "../deployments.ts";
25
23
  import { misoConfig, networkFrom, type MisoConfig, type MisoConfigOverrides, type Network } from "./config.ts";
26
24
 
27
25
  function definedOverrides<T extends object>(value: T): Partial<T> {
28
26
  return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined)) as Partial<T>;
29
27
  }
30
28
 
31
- /**
32
- * The transport slice every `@misofm/platform/read` function needs to run its
33
- * `Effect`: `Effect.provide(SuiClient.layer(client.protocol))`. `sui` (below)
34
- * satisfies this structurally, since it is a real `ClientWithCoreApi`.
35
- */
36
- export type ProtocolClient = ClientWithCoreApi;
37
-
38
- /** A GraphQL client in the shape `@misofm/effect`'s `SuiGraphQL` service wants. */
39
- export type ProtocolGraphQLClient = SuiGraphQLClient;
40
-
41
29
  export interface MisoClient {
42
30
  config: MisoConfig;
43
- /** gRPC data plane (object-model core only; Party is `client.party`). */
44
- sui: SuiGrpcClient & { miso: MisoProtocolClient };
45
- /** The same client, for `Effect.provide(SuiClient.layer(client.protocol))`. */
46
- protocol: ProtocolClient;
31
+ /** gRPC data plane. */
32
+ sui: SuiGrpcClient;
47
33
  /** GraphQL RPC, for `Effect.provide(SuiGraphQL.layer(client.graphql))`. */
48
- graphql: ProtocolGraphQLClient;
34
+ graphql: SuiGraphQLClient;
49
35
  /** The raw GraphQL client — identical to `graphql`; both names are kept for
50
36
  * source compatibility with callers migrating from the pre-Effect client. */
51
37
  graphqlRaw: SuiGraphQLClient;
52
- /** Party identity and profile reads/builders, bound to `config.partyos`/`config.party`. */
53
- party: PartyPlatformClient;
38
+ /**
39
+ * The `client.$extend(miso({ deployment, graphqlClient }))` face — the
40
+ * documented app-edge entry point for a Promise consumer: `client.miso.*`.
41
+ */
42
+ client: SuiGrpcClient & { readonly miso: MisoExtensionClient };
43
+ /**
44
+ * `Miso | Sui | SuiCore | SuiGraphQL`, ready to provide to an Effect
45
+ * consumer that wants `yield* Miso` directly (the read service) instead of
46
+ * going through the Promise face — or to any of this package's standalone
47
+ * `read/*` functions, which only ever need the narrower `Sui | SuiGraphQL`
48
+ * a superset layer still satisfies:
49
+ * `Effect.provide(getReleaseDetail(id, config), client.layer)`.
50
+ */
51
+ layer: Layer.Layer<Miso | Sui | SuiCore | SuiGraphQL, MisoLayerError | NetworkMismatch | TransportError>;
54
52
  }
55
53
 
56
54
  export interface CreateMisoClientOptions extends MisoConfigOverrides {
@@ -58,13 +56,30 @@ export interface CreateMisoClientOptions extends MisoConfigOverrides {
58
56
  network?: Network | string;
59
57
  /** Complete verified configuration for a custom or unbundled deployment. */
60
58
  config?: MisoConfig;
59
+ /**
60
+ * The complete deployment `Miso`/`client.miso` build from. Defaults to the
61
+ * bundled manifest for `network` — required alongside a custom `config` on
62
+ * a network with no bundled entry, since `MisoConfig` alone (a package-id
63
+ * subset) cannot reconstruct the `operations`/`packages` sections
64
+ * `Miso.layer` needs.
65
+ */
66
+ deployment?: MisoPlatformDeployment;
67
+ /**
68
+ * The chain identifier the node must report — forwarded to both the
69
+ * standalone `layer` (`Sui.layerNoDepsWith({ chainId })`) and `client.miso`
70
+ * (`miso({ chainId })`), so the two transports this client builds (and the
71
+ * warm registration on `devnet`/`localnet`/a custom network) agree on the
72
+ * same pinned id rather than each asserting independently. Omit on
73
+ * `mainnet`/`testnet`, where both already have a built-in default.
74
+ */
75
+ chainId?: string;
61
76
  }
62
77
 
63
78
  /**
64
79
  * Build the client from a bundled network or a complete verified custom config.
65
80
  */
66
81
  export function createMisoClient(options: CreateMisoClientOptions = {}): MisoClient {
67
- const { network, config: providedConfig, ...overrides } = options;
82
+ const { network, config: providedConfig, deployment: providedDeployment, chainId, ...overrides } = options;
68
83
  const requestedNetwork = networkFrom(network);
69
84
  // A caller-supplied verified deployment may still override transport URLs or
70
85
  // the discover shelf; undefined fields never erase verified config values.
@@ -76,19 +91,29 @@ export function createMisoClient(options: CreateMisoClientOptions = {}): MisoCli
76
91
  `@misofm/platform/read: provided config is for ${config.network}, not ${requestedNetwork}.`,
77
92
  );
78
93
  }
94
+ const deployment = providedDeployment ?? getMisoPlatformDeployment(requestedNetwork);
79
95
 
80
- const grpc = new SuiGrpcClient({ baseUrl: config.grpcUrl, network: config.network });
96
+ const sui = new SuiGrpcClient({ baseUrl: config.grpcUrl, network: config.network });
81
97
  const graphqlRaw = new SuiGraphQLClient({ url: config.graphqlUrl, network: config.network });
82
98
 
83
- const sui = grpc.$extend(miso({ deployment: config.deployment }));
84
- const party = new PartyPlatformClient(sui, new PartyosClient(sui, config.partyos), config.party);
99
+ // Reuse the one gRPC client instance `client` itself extends below —
100
+ // `SuiCore.layerFromClient(sui)`, not a second `SuiCore.layerGrpc(...)`
101
+ // transport pointed at the same endpoint (C item, misofm/sdks#35
102
+ // verification): an Effect consumer using `layer` and a Promise consumer
103
+ // using `client` then share one connection, not two.
104
+ const suiLayer = chainId !== undefined ? Sui.layerNoDepsWith({ chainId }) : Sui.layerNoDeps;
105
+ const suiPlusCore = suiLayer.pipe(Layer.provideMerge(SuiCore.layerFromClient(sui)));
106
+ const base = Layer.merge(suiPlusCore, SuiGraphQL.layer(graphqlRaw));
107
+ const layer = Miso.layer(deployment).pipe(Layer.provideMerge(base));
108
+
109
+ const client = sui.$extend(miso({ deployment, graphqlClient: graphqlRaw, chainId }));
85
110
 
86
111
  return {
87
112
  config,
88
113
  sui,
89
- protocol: sui,
90
114
  graphql: graphqlRaw,
91
115
  graphqlRaw,
92
- party,
116
+ client,
117
+ layer,
93
118
  };
94
119
  }
@@ -13,7 +13,7 @@
13
13
 
14
14
  import type { MisoDeployment } from "@misofm/musicos/deployments";
15
15
  import type { PartyDeployment } from "@misofm/partyos/deployments";
16
- import { getMisoPlatformDeployment, type PartyExtensionsDeployment, type RecordSalesDeployment } from "../deployments.ts";
16
+ import { getMisoPlatformDeployment, type MisoPlatformDeployment, type PartyExtensionsDeployment, type RecordSalesDeployment } from "../deployments.ts";
17
17
  import { walrusAggregatorUrl } from "../walrus.ts";
18
18
 
19
19
  export type Network = "testnet" | "mainnet";
@@ -27,8 +27,17 @@ export function networkFrom(value: string | undefined): Network {
27
27
 
28
28
  /** Package ids for the miso protocol core and the extensions the read layer touches. */
29
29
  export interface ProtocolIds {
30
- /** `vault` — shared custody for protocol admin capabilities. */
31
- vault: string;
30
+ /**
31
+ * `vault` — shared custody for protocol admin capabilities, or `null` when
32
+ * this deployment's `operations` is unavailable AND carries no
33
+ * `legacy.vaultPackageId` fallback (misofm/sdks#35 verification, B1). A
34
+ * `MisoConfig` in that shape is still fully constructible; only the two
35
+ * `read/wallet.ts` members that classify a vaulted work admin cap
36
+ * (`getOwnedWorks`, `getWorkByCap`) fail typed `OperationsUnavailableError`
37
+ * when they actually need this field and find it `null` — every other
38
+ * `read.*` member is unaffected.
39
+ */
40
+ vault: string | null;
32
41
  /** `release_cover_art` — the release cover extension. */
33
42
  releaseCoverArt: string;
34
43
  /** `release_kind` — the Release's optional self-declared kind. */
@@ -100,38 +109,49 @@ export type MisoConfigOverrides = Partial<
100
109
  Pick<MisoConfig, "grpcUrl" | "graphqlUrl" | "walrusAggregatorUrl" | "apiBaseUrl" | "discoverSales">
101
110
  >;
102
111
 
103
- /** The config for `network`, derived from this SDK's verified deployment map. */
104
- export function misoConfig(network: Network, overrides: MisoConfigOverrides = {}): MisoConfig {
105
- const platform = getMisoPlatformDeployment(network);
112
+ /**
113
+ * The config for a complete `MisoPlatformDeployment` the same manifest
114
+ * `Miso.layer(deployment)` builds the service from — so `Miso`'s bound
115
+ * `read.*` namespace (misofm/sdks#35, WP6) and `misoConfig` share one
116
+ * derivation instead of two.
117
+ *
118
+ * TODO: `money`/`grpcUrl`/`graphqlUrl`/`apiBaseUrl` are still the fixed
119
+ * Testnet-shaped defaults the predecessor `misoConfig` hard-coded regardless
120
+ * of `deployment.network` (a pre-existing gap this stage's facade-derivation
121
+ * scope does not extend to fixing — see `docs/CONVERSION.md`); pass
122
+ * `overrides` for a Mainnet or custom deployment's real endpoints today.
123
+ */
124
+ export function configFromDeployment(deployment: MisoPlatformDeployment, overrides: MisoConfigOverrides = {}): MisoConfig {
125
+ // No current-or-legacy Vault package id is a real, expected deployment
126
+ // shape (an `operations: { status: "unavailable" }` deployment with no
127
+ // `legacy.vaultPackageId` fallback) — `vault: null` here, not a thrown
128
+ // error, so this function (and therefore `Miso.layer`, which calls it
129
+ // unconditionally to bind `read.*`) always succeeds for a structurally
130
+ // valid deployment. B1, misofm/sdks#35 verification: see `ProtocolIds.vault`.
106
131
  const vaultPackageId =
107
- platform.operations.status === "available"
108
- ? platform.operations.vault.packageId
109
- : platform.operations.legacy?.vaultPackageId;
110
- if (!vaultPackageId) {
111
- throw new Error(
112
- `@misofm/platform/read: no current or legacy Vault type metadata for "${network}".`,
113
- );
114
- }
132
+ (deployment.operations.status === "available"
133
+ ? deployment.operations.vault.packageId
134
+ : deployment.operations.legacy?.vaultPackageId) ?? null;
115
135
  const config: MisoConfig = {
116
- network,
117
- deployment: platform.protocol,
118
- partyos: platform.partyos,
119
- party: platform.party,
120
- recordSales: platform.recordSales,
136
+ network: deployment.network,
137
+ deployment: deployment.protocol,
138
+ partyos: deployment.partyos,
139
+ party: deployment.party,
140
+ recordSales: deployment.recordSales,
121
141
  protocol: {
122
142
  // Read-only legacy type discovery does not make this package an
123
143
  // executable operations ABI; client call surfaces remain fail closed.
124
144
  vault: vaultPackageId,
125
- releaseCoverArt: platform.packages.releaseCoverArt,
126
- releaseKind: platform.packages.releaseKind,
127
- recordingMasterReference: platform.packages.recordingMasterReference,
128
- recordingStreamingTranscode: platform.packages.recordingStreamingTranscode ?? null,
129
- recordingEngineSession: platform.packages.recordingEngineSession ?? null,
130
- compositionCredits: platform.packages.compositionCredits,
131
- recordingCredits: platform.packages.recordingCredits,
132
- releaseCredits: platform.packages.releaseCredits,
133
- credit: platform.packages.credit,
134
- royaltyPool: platform.packages.royaltyPool,
145
+ releaseCoverArt: deployment.packages.releaseCoverArt,
146
+ releaseKind: deployment.packages.releaseKind,
147
+ recordingMasterReference: deployment.packages.recordingMasterReference,
148
+ recordingStreamingTranscode: deployment.packages.recordingStreamingTranscode ?? null,
149
+ recordingEngineSession: deployment.packages.recordingEngineSession ?? null,
150
+ compositionCredits: deployment.packages.compositionCredits,
151
+ recordingCredits: deployment.packages.recordingCredits,
152
+ releaseCredits: deployment.packages.releaseCredits,
153
+ credit: deployment.packages.credit,
154
+ royaltyPool: deployment.packages.royaltyPool,
135
155
  },
136
156
  money: {
137
157
  usdCoinType:
@@ -140,13 +160,18 @@ export function misoConfig(network: Network, overrides: MisoConfigOverrides = {}
140
160
  },
141
161
  grpcUrl: "https://fullnode.testnet.sui.io",
142
162
  graphqlUrl: "https://graphql.testnet.sui.io/graphql",
143
- walrusAggregatorUrl: walrusAggregatorUrl(network),
163
+ walrusAggregatorUrl: walrusAggregatorUrl(deployment.network),
144
164
  apiBaseUrl: "https://api.testnet.miso.fm",
145
165
  discoverSales: [],
146
166
  };
147
167
  return { ...config, ...stripUndefined(overrides) };
148
168
  }
149
169
 
170
+ /** The config for `network`, derived from this SDK's verified deployment map. */
171
+ export function misoConfig(network: Network, overrides: MisoConfigOverrides = {}): MisoConfig {
172
+ return configFromDeployment(getMisoPlatformDeployment(network), overrides);
173
+ }
174
+
150
175
  /** `{ a: undefined }` must not clobber a real default when spread. */
151
176
  function stripUndefined<T extends object>(o: T): Partial<T> {
152
177
  return Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as Partial<T>;
@@ -5,8 +5,8 @@
5
5
  // object carries a screaming-snake name ("HIP_HOP"). There is no id→name table
6
6
  // anywhere off-chain, so the names are read from the objects and humanized.
7
7
 
8
- import { Effect } from "effect";
9
- import { getObjectsContent, type SuiClient } from "@misofm/effect";
8
+ import { Effect, Result } from "effect";
9
+ import { ObjectId, Sui, SuiSchema } from "@unconfirmed/sui-effect";
10
10
  import { Genre as GenreBcs } from "../contracts/genre/genre.ts";
11
11
 
12
12
  /** "HIP_HOP" → "Hip Hop". */
@@ -21,25 +21,29 @@ function humanize(name: string): string {
21
21
  /**
22
22
  * Resolve `Genre` object ids to display names. Best-effort: an id that fails to
23
23
  * read, or whose content does not parse as a `Genre`, is dropped rather than
24
- * failing the artist page around it.
24
+ * failing the artist page around it — the WP2 behaviour change named in
25
+ * misofm/sdks#35 ("`resolveGenreNames` on the same batch skips it") now comes
26
+ * for free from `sui.getObjects`' per-item `Result` instead of a hand-rolled
27
+ * `try`/`catch` around a `Map`.
28
+ *
29
+ * Never fails.
25
30
  */
26
31
  export const resolveGenreNames = Effect.fn("resolveGenreNames")(function* (
27
- ids: string[],
28
- ): Effect.fn.Return<string[], never, SuiClient> {
32
+ ids: ReadonlyArray<string>,
33
+ ): Effect.fn.Return<string[], never, Sui> {
29
34
  if (ids.length === 0) return [];
30
- return yield* getObjectsContent(ids).pipe(
31
- Effect.map((contentById) => {
32
- const out: string[] = [];
33
- for (const { content } of contentById.values()) {
34
- try {
35
- const name = GenreBcs.parse(content).name;
36
- if (name) out.push(humanize(name));
37
- } catch {
38
- // Malformed content — drop this genre rather than fail the page.
39
- }
40
- }
41
- return out;
42
- }),
35
+ const sui = yield* Sui;
36
+ const results = yield* sui.getObjects(ids.map((id) => ObjectId.make(id)), { schema: SuiSchema.bcs(GenreBcs) }).pipe(
37
+ // A transport failure across the whole batch is soft here too — a genre
38
+ // list that could not be read at all still must not fail the page it
39
+ // decorates.
43
40
  Effect.catch(() => Effect.succeed([])),
44
41
  );
42
+ const out: string[] = [];
43
+ for (const result of results) {
44
+ if (!Result.isSuccess(result)) continue;
45
+ const name = result.success.content.name;
46
+ if (name) out.push(humanize(name));
47
+ }
48
+ return out;
45
49
  });
package/src/read/index.ts CHANGED
@@ -10,20 +10,22 @@
10
10
  //
11
11
  // Browser- and server-compatible. The HTTP API is a thin cached transport over
12
12
  // this same surface; direct clients can use it without going through the API.
13
- // Every read returns `Effect<A, E, SuiClient | SuiGraphQL>`; `createMisoClient`
14
- // bundles the transport, config, and Party client — provide its `sui`/`graphqlRaw`
15
- // as the Effect services once, at your program's boundary:
13
+ // Every read returns `Effect<A, E, Sui | SuiGraphQL>`; `createMisoClient`
14
+ // (misofm/sdks#35) already builds that layer for you as `miso.layer` — provide
15
+ // it once, at your program's boundary:
16
16
  //
17
17
  // const miso = createMisoClient({ network: "testnet" })
18
- // const layer = Layer.mergeAll(SuiClient.layer(miso.sui), SuiGraphQL.layer(miso.graphqlRaw))
19
18
  // const pressing = await Effect.runPromise(
20
- // getPressingDetail(pressingId, miso.config).pipe(Effect.provide(layer)),
19
+ // getPressingDetail(pressingId, miso.config).pipe(Effect.provide(miso.layer)),
21
20
  // )
21
+ //
22
+ // Prefer the Promise face for one-off reads instead:
23
+ // `await miso.client.miso.read.getPressingDetail(pressingId)`.
22
24
 
23
25
  export { createMisoClient } from "./client.ts";
24
26
  export type { MisoClient, CreateMisoClientOptions } from "./client.ts";
25
27
 
26
- export { misoConfig, networkFrom } from "./config.ts";
28
+ export { configFromDeployment, misoConfig, networkFrom } from "./config.ts";
27
29
  export type {
28
30
  MisoConfig,
29
31
  MisoConfigOverrides,