@misofm/platform 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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/pressing.ts CHANGED
@@ -10,17 +10,8 @@ import {
10
10
  normalizeSuiAddress,
11
11
  parseStructTag,
12
12
  } from "@mysten/sui/utils";
13
- import { Effect, Schema } from "effect";
14
- import {
15
- assertObjectType,
16
- decodeBcs,
17
- getObjectsContent,
18
- getOptionalObjectContent,
19
- ObjectTypeMismatchError,
20
- type SuiClient,
21
- } from "@misofm/effect";
22
- import type { BcsDecodeError, SuiRpcError } from "@misofm/effect";
23
- import type { TxThunk } from "./transactions.ts";
13
+ import { Effect, Option, Result, Schema } from "effect";
14
+ import { DecodeError, ObjectId, Sui, type ObjectDeleted, type ObjectUnavailable, type TransportError, type Recipe } from "@unconfirmed/sui-effect";
24
15
  import { asU64, type U64Input } from "./vault.ts";
25
16
  import * as pressingContract from "./contracts/record/pressing.ts";
26
17
  import * as recordContract from "./contracts/record/record.ts";
@@ -145,7 +136,7 @@ export function deriveSaleIds(
145
136
  };
146
137
  }
147
138
 
148
- type Tx = Parameters<TxThunk>[0];
139
+ type Tx = Parameters<Recipe>[0];
149
140
 
150
141
  function priceArg(tx: Tx, packageId: string, price: ListingPrice) {
151
142
  const fn =
@@ -187,7 +178,7 @@ export interface OpenPressingParams {
187
178
 
188
179
  /** Initial setup: create the Pressing, authorize Record Shop, open/share Listings,
189
180
  * share the Pressing, and transfer its admin capability. */
190
- export function openPressing(p: OpenPressingParams): TxThunk {
181
+ export function openPressing(p: OpenPressingParams): Recipe {
191
182
  return (tx) => {
192
183
  const [pressing, cap] = tx.add(
193
184
  pressingContract._new({
@@ -257,7 +248,7 @@ export interface PressingAdministrationParams {
257
248
  recordShopPackageId: string;
258
249
  }
259
250
 
260
- export function authorizeRecordShop(p: PressingAdministrationParams): TxThunk {
251
+ export function authorizeRecordShop(p: PressingAdministrationParams): Recipe {
261
252
  return (tx) => {
262
253
  tx.add(
263
254
  pressingContract.authorizeDistributor({
@@ -269,7 +260,7 @@ export function authorizeRecordShop(p: PressingAdministrationParams): TxThunk {
269
260
  };
270
261
  }
271
262
 
272
- export function revokeRecordShop(p: PressingAdministrationParams): TxThunk {
263
+ export function revokeRecordShop(p: PressingAdministrationParams): Recipe {
273
264
  return (tx) => {
274
265
  tx.add(
275
266
  pressingContract.revokeDistributor({
@@ -289,7 +280,7 @@ export interface OpenListingParams {
289
280
  }
290
281
 
291
282
  /** Add one permanent currency Listing. Authorization is deliberately separate. */
292
- export function openListing(p: OpenListingParams): TxThunk {
283
+ export function openListing(p: OpenListingParams): Recipe {
293
284
  return (tx) => {
294
285
  const listing = tx.add(
295
286
  listingContract._new({
@@ -333,7 +324,7 @@ export interface SetListingPriceParams {
333
324
  recordShopPackageId: string;
334
325
  }
335
326
 
336
- export function setListingPrice(p: SetListingPriceParams): TxThunk {
327
+ export function setListingPrice(p: SetListingPriceParams): Recipe {
337
328
  return (tx) => {
338
329
  tx.add(
339
330
  listingContract.setPrice({
@@ -357,7 +348,7 @@ export interface SetListingStateParams {
357
348
  recordShopPackageId: string;
358
349
  }
359
350
 
360
- export function setListingState(p: SetListingStateParams): TxThunk {
351
+ export function setListingState(p: SetListingStateParams): Recipe {
361
352
  return (tx) => {
362
353
  tx.add(
363
354
  listingContract.setState({
@@ -384,7 +375,7 @@ export interface PurchaseRecordParams {
384
375
  recordShopPackageId: string;
385
376
  }
386
377
 
387
- export function purchaseRecord(p: PurchaseRecordParams): TxThunk {
378
+ export function purchaseRecord(p: PurchaseRecordParams): Recipe {
388
379
  return (tx) => {
389
380
  const { pressingId, listingId } = deriveSaleIds(
390
381
  p.releaseId,
@@ -463,6 +454,20 @@ function requireId(label: string, actual: string, expected: string): void {
463
454
  throw new Error(`${label} ${actual} does not match expected ${expected}`);
464
455
  }
465
456
 
457
+ /**
458
+ * `requireId`, as a typed `DecodeError` instead of a throw — for a
459
+ * consistency check made directly inside an `Effect.gen` body (`getSale`),
460
+ * where a bare throw would become an unrecoverable defect rather than a
461
+ * typed failure a caller can `catchTag` (B9, misofm/sdks#35 verification).
462
+ * `requireId` itself stays throwing: every other call site is already inside
463
+ * `decodeInto`'s `Effect.try`-wrapped mapper, where the throw is the
464
+ * intended, already-safe idiom.
465
+ */
466
+ function requireIdOrFail(label: string, actual: string, expected: string, objectId: string): Effect.Effect<void, DecodeError> {
467
+ if (sameId(actual, expected)) return Effect.void;
468
+ return Effect.fail(new DecodeError({ objectId: ObjectId.make(objectId), issue: `${label} ${actual} does not match expected ${expected}` }));
469
+ }
470
+
466
471
  function requireListingCurrency(
467
472
  type: string,
468
473
  recordShopPackageId: string,
@@ -565,58 +570,89 @@ function mapRecord(recordId: string, recordPackageId: string, content: Uint8Arra
565
570
  };
566
571
  }
567
572
 
568
- /** Fails with `ObjectTypeMismatchError` unless `type` is `recordShopPackageId`'s `listing::Listing<Currency>`; returns the currency type argument. */
569
- function assertListingType(
570
- objectId: string,
571
- type: string,
572
- recordShopPackageId: string,
573
- ): Effect.Effect<string, ObjectTypeMismatchError> {
573
+ /** Fails with a typed `DecodeError` unless `actualType` is `expectedType` (both normalized). */
574
+ function checkType(objectId: string, actualType: string, expectedType: string): Effect.Effect<void, DecodeError> {
575
+ const actual = normalizeStructTag(actualType);
576
+ const expected = normalizeStructTag(expectedType);
577
+ if (actual === expected) return Effect.void;
578
+ return Effect.fail(
579
+ new DecodeError({ objectId: ObjectId.make(objectId), expectedType: expected, issue: `expected ${expected}, found ${actual}` }),
580
+ );
581
+ }
582
+
583
+ /**
584
+ * Fails with a typed `DecodeError` unless `type` is `recordShopPackageId`'s
585
+ * `listing::Listing<Currency>`; returns the currency type argument.
586
+ */
587
+ function assertListingType(objectId: string, type: string, recordShopPackageId: string): Effect.Effect<string, DecodeError> {
574
588
  return Effect.try({
575
589
  try: () => requireListingCurrency(type, recordShopPackageId),
576
590
  catch: () =>
577
- new ObjectTypeMismatchError({
578
- objectId,
579
- expected: `${normalizeSuiAddress(recordShopPackageId)}::listing::Listing<Currency>`,
580
- actual: normalizeStructTag(type),
591
+ new DecodeError({
592
+ objectId: ObjectId.make(objectId),
593
+ expectedType: `${normalizeSuiAddress(recordShopPackageId)}::listing::Listing<Currency>`,
594
+ issue: `actual type ${normalizeStructTag(type)} is not a Listing<Currency> of this Record Shop package`,
581
595
  }),
582
596
  });
583
597
  }
584
598
 
599
+ /**
600
+ * Wraps a possibly-throwing raw-bytes mapper (BCS parse plus the internal
601
+ * derived-id consistency checks `require Id` performs) into a typed
602
+ * `DecodeError`, then validates the mapped shape against the domain
603
+ * `Schema`. Mirrors the predecessor `@misofm/effect`-era `decodeBcs`'s two
604
+ * stages, now producing sui-effect's `DecodeError` instead of
605
+ * `BcsDecodeError`.
606
+ */
607
+ function decodeInto<A, I>(map: () => I, domain: Schema.Codec<A, I>, objectId: string, expectedType: string): Effect.Effect<A, DecodeError> {
608
+ return Effect.try({
609
+ try: map,
610
+ catch: (cause) => new DecodeError({ objectId: ObjectId.make(objectId), expectedType, issue: cause instanceof Error ? cause.message : String(cause) }),
611
+ }).pipe(
612
+ Effect.flatMap((encoded) =>
613
+ Schema.decodeUnknownEffect(domain)(encoded).pipe(
614
+ Effect.mapError(
615
+ (issue) =>
616
+ new DecodeError({
617
+ objectId: ObjectId.make(objectId),
618
+ expectedType,
619
+ issue: issue instanceof Error ? issue.message : String(issue),
620
+ }),
621
+ ),
622
+ ),
623
+ ),
624
+ );
625
+ }
626
+
585
627
  /** One permanent pressing by id, or `null` when no such Pressing exists. */
586
628
  export const getPressing = Effect.fn("getPressing")(function* (
587
629
  pressingId: string,
588
630
  recordPackageId: string,
589
- ): Effect.fn.Return<Pressing | null, ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
590
- const found = yield* getOptionalObjectContent(pressingId);
591
- if (found._tag === "None") return null;
631
+ ): Effect.fn.Return<Pressing | null, DecodeError | ObjectUnavailable | TransportError, Sui> {
632
+ const sui = yield* Sui;
633
+ const found = yield* sui.getObjectOption(ObjectId.make(pressingId));
634
+ if (Option.isNone(found)) return null;
592
635
  const { content, type } = found.value;
593
- yield* assertObjectType(
594
- pressingId,
595
- normalizeStructTag(type),
596
- normalizeStructTag(`${recordPackageId}::pressing::Pressing`),
597
- );
598
- return yield* decodeBcs(
599
- { parse: (bytes) => mapPressing(pressingId, recordPackageId, bytes) },
600
- Pressing,
601
- content,
602
- { type: "Pressing", objectId: pressingId },
603
- );
636
+ const expectedType = `${recordPackageId}::pressing::Pressing`;
637
+ yield* checkType(pressingId, type, expectedType);
638
+ return yield* decodeInto(() => mapPressing(pressingId, recordPackageId, content), Pressing, pressingId, expectedType);
604
639
  });
605
640
 
606
641
  /** One currency-specific listing by id, or `null` when no such Listing exists. */
607
642
  export const getListing = Effect.fn("getListing")(function* (
608
643
  listingId: string,
609
644
  recordShopPackageId: string,
610
- ): Effect.fn.Return<Listing | null, ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
611
- const found = yield* getOptionalObjectContent(listingId);
612
- if (found._tag === "None") return null;
645
+ ): Effect.fn.Return<Listing | null, DecodeError | ObjectUnavailable | TransportError, Sui> {
646
+ const sui = yield* Sui;
647
+ const found = yield* sui.getObjectOption(ObjectId.make(listingId));
648
+ if (Option.isNone(found)) return null;
613
649
  const { content, type } = found.value;
614
650
  const currencyType = yield* assertListingType(listingId, type, recordShopPackageId);
615
- return yield* decodeBcs(
616
- { parse: (bytes) => mapListing(listingId, recordShopPackageId, currencyType, bytes) },
651
+ return yield* decodeInto(
652
+ () => mapListing(listingId, recordShopPackageId, currencyType, content),
617
653
  Listing,
618
- content,
619
- { type: "Listing", objectId: listingId },
654
+ listingId,
655
+ `${recordShopPackageId}::listing::Listing<Currency>`,
620
656
  );
621
657
  });
622
658
 
@@ -624,17 +660,14 @@ export const getListing = Effect.fn("getListing")(function* (
624
660
  export const getRecord = Effect.fn("getRecord")(function* (
625
661
  recordId: string,
626
662
  recordPackageId: string,
627
- ): Effect.fn.Return<PressingRecord | null, ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
628
- const found = yield* getOptionalObjectContent(recordId);
629
- if (found._tag === "None") return null;
663
+ ): Effect.fn.Return<PressingRecord | null, DecodeError | ObjectUnavailable | TransportError, Sui> {
664
+ const sui = yield* Sui;
665
+ const found = yield* sui.getObjectOption(ObjectId.make(recordId));
666
+ if (Option.isNone(found)) return null;
630
667
  const { content, type } = found.value;
631
- yield* assertObjectType(recordId, normalizeStructTag(type), normalizeStructTag(`${recordPackageId}::record::Record`));
632
- return yield* decodeBcs(
633
- { parse: (bytes) => mapRecord(recordId, recordPackageId, bytes) },
634
- PressingRecord,
635
- content,
636
- { type: "Record", objectId: recordId },
637
- );
668
+ const expectedType = `${recordPackageId}::record::Record`;
669
+ yield* checkType(recordId, type, expectedType);
670
+ return yield* decodeInto(() => mapRecord(recordId, recordPackageId, content), PressingRecord, recordId, expectedType);
638
671
  });
639
672
 
640
673
  export interface GetSaleParams {
@@ -645,14 +678,28 @@ export interface GetSaleParams {
645
678
  recordShopPackageId: string;
646
679
  }
647
680
 
648
- /** A Pressing and its currency-specific Listing, read in one Core batch. Either half may be `null`. */
681
+ /**
682
+ * A missing/deleted object is a legitimate `null` half of a sale (the
683
+ * Pressing has not been made yet, or that currency was never listed); any
684
+ * other per-item failure (`ObjectUnavailable`) is not — it means the node
685
+ * could not say what happened, and misofm/sdks#35's WP2 names this exact
686
+ * behaviour change: unlike the predecessor's `getObjectsContent` (which
687
+ * silently dropped every kind of per-item failure into "missing"), that now
688
+ * fails the whole read typed instead of being folded into `null`.
689
+ */
690
+ function nullableObject<E extends { readonly _tag: string }>(
691
+ result: Result.Result<{ readonly content: Uint8Array; readonly type: string }, E>,
692
+ ): Effect.Effect<{ readonly content: Uint8Array; readonly type: string } | null, Exclude<E, { readonly _tag: "ObjectNotFound" | "ObjectDeleted" }>> {
693
+ if (Result.isSuccess(result)) return Effect.succeed(result.success);
694
+ const failure = result.failure;
695
+ if (failure._tag === "ObjectNotFound" || failure._tag === "ObjectDeleted") return Effect.succeed(null);
696
+ return Effect.fail(failure as never);
697
+ }
698
+
699
+ /** A Pressing and its currency-specific Listing, read in one chunked `sui.getObjects`. Either half may be `null`. */
649
700
  export const getSale = Effect.fn("getSale")(function* (
650
701
  p: GetSaleParams,
651
- ): Effect.fn.Return<
652
- { pressing: Pressing | null; listing: Listing | null },
653
- ObjectTypeMismatchError | BcsDecodeError | SuiRpcError,
654
- SuiClient
655
- > {
702
+ ): Effect.fn.Return<{ pressing: Pressing | null; listing: Listing | null }, DecodeError | ObjectDeleted | ObjectUnavailable | TransportError, Sui> {
656
703
  const { pressingId, listingId } = deriveSaleIds(
657
704
  p.releaseId,
658
705
  p.edition,
@@ -660,40 +707,36 @@ export const getSale = Effect.fn("getSale")(function* (
660
707
  p.recordPackageId,
661
708
  p.recordShopPackageId,
662
709
  );
663
- const contentById = yield* getObjectsContent([pressingId, listingId]);
710
+ const sui = yield* Sui;
711
+ const [pressingResult, listingResult] = yield* sui.getObjects([ObjectId.make(pressingId), ObjectId.make(listingId)]);
664
712
 
665
- const pressingFound = contentById.get(pressingId);
713
+ const pressingFound = yield* nullableObject(pressingResult!);
666
714
  let pressing: Pressing | null = null;
667
715
  if (pressingFound) {
668
- yield* assertObjectType(
669
- pressingId,
670
- normalizeStructTag(pressingFound.type),
671
- normalizeStructTag(`${p.recordPackageId}::pressing::Pressing`),
672
- );
673
- pressing = yield* decodeBcs(
674
- { parse: (bytes) => mapPressing(pressingId, p.recordPackageId, bytes) },
675
- Pressing,
676
- pressingFound.content,
677
- { type: "Pressing", objectId: pressingId },
678
- );
679
- requireId("Sale pressing release", pressing.releaseId, p.releaseId);
716
+ const expectedType = `${p.recordPackageId}::pressing::Pressing`;
717
+ yield* checkType(pressingId, pressingFound.type, expectedType);
718
+ pressing = yield* decodeInto(() => mapPressing(pressingId, p.recordPackageId, pressingFound.content), Pressing, pressingId, expectedType);
719
+ yield* requireIdOrFail("Sale pressing release", pressing.releaseId, p.releaseId, pressingId);
680
720
  }
681
721
 
682
- const listingFound = contentById.get(listingId);
722
+ const listingFound = yield* nullableObject(listingResult!);
683
723
  let listing: Listing | null = null;
684
724
  if (listingFound) {
685
725
  const currencyType = yield* assertListingType(listingId, listingFound.type, p.recordShopPackageId);
686
- listing = yield* decodeBcs(
687
- { parse: (bytes) => mapListing(listingId, p.recordShopPackageId, currencyType, bytes) },
726
+ listing = yield* decodeInto(
727
+ () => mapListing(listingId, p.recordShopPackageId, currencyType, listingFound.content),
688
728
  Listing,
689
- listingFound.content,
690
- { type: "Listing", objectId: listingId },
729
+ listingId,
730
+ `${p.recordShopPackageId}::listing::Listing<Currency>`,
691
731
  );
692
- requireId("Sale listing release", listing.releaseId, p.releaseId);
693
- requireId("Sale listing pressing", listing.pressingId, pressingId);
732
+ yield* requireIdOrFail("Sale listing release", listing.releaseId, p.releaseId, listingId);
733
+ yield* requireIdOrFail("Sale listing pressing", listing.pressingId, pressingId, listingId);
694
734
  if (listing.currencyType !== normalizeStructTag(p.currencyType)) {
695
- throw new Error(
696
- `Sale listing currency ${listing.currencyType} does not match requested ${normalizeStructTag(p.currencyType)}`,
735
+ return yield* Effect.fail(
736
+ new DecodeError({
737
+ objectId: ObjectId.make(listingId),
738
+ issue: `Sale listing currency ${listing.currencyType} does not match requested ${normalizeStructTag(p.currencyType)}`,
739
+ }),
697
740
  );
698
741
  }
699
742
  }
@@ -29,7 +29,6 @@ import {
29
29
  type AvailableOperationsDeployment,
30
30
  type MisoPlatformDeployment,
31
31
  } from "./deployments.ts";
32
- import type { TxThunk } from "./transactions.ts";
33
32
  import {
34
33
  createShareStakes,
35
34
  disperseShares,
@@ -88,7 +87,7 @@ import {
88
87
  type ListingPrice,
89
88
  } from "./pressing.ts";
90
89
  import { requireRecordSalesDeployment } from "./deployments.ts";
91
- import { allCreatedByType, createdByExactType, type PlatformExecResult } from "./execute.ts";
90
+ import { Executed, type Recipe } from "@unconfirmed/sui-effect";
92
91
  import * as pressingContract from "./contracts/record/pressing.ts";
93
92
  import * as listingContract from "./contracts/record_shop/listing.ts";
94
93
 
@@ -658,7 +657,7 @@ function publishReleaseObject(
658
657
  }
659
658
 
660
659
  /** Build the complete post-share catalog graph as one atomic PTB. */
661
- export function publishAtomicCatalog(p: AtomicPublicationParams): TxThunk {
660
+ export function publishAtomicCatalog(p: AtomicPublicationParams): Recipe {
662
661
  if (
663
662
  p.recordings.some((node) => node.streamingTranscodeQuiltId !== undefined) &&
664
663
  !p.deployment.packages.recordingStreamingTranscode
@@ -1091,7 +1090,8 @@ export type PublicationAuthorityOut =
1091
1090
 
1092
1091
  export interface AtomicPublicationResult {
1093
1092
  digest: string;
1094
- gasUsed: number;
1093
+ /** Computation + storage - storage rebate, in MIST (`Executed.gasUsedTotal`). Can be negative. */
1094
+ gasUsed: bigint;
1095
1095
  parties: Record<string, { id: string; adminCapId: string; created: boolean; authority?: PublicationAuthorityOut }>;
1096
1096
  compositions: Record<string, { id: string; adminCapId: string; shareType: string; authority: PublicationAuthorityOut; royaltyPoolId?: string }>;
1097
1097
  recordings: Record<string, { id: string; adminCapId: string; shareType: string; compositionShareType: string; authority: PublicationAuthorityOut; royaltyPoolId?: string; routedStakeId?: string }>;
@@ -1099,22 +1099,14 @@ export interface AtomicPublicationResult {
1099
1099
  pressing?: { id: string; adminCapId: string; authority: PublicationAuthorityOut };
1100
1100
  }
1101
1101
 
1102
- function compactType(type: string): string {
1103
- return type.replace(/\s+/g, "");
1102
+ /** The single object of `type` this transaction created (`Executed.created`, exact tag). */
1103
+ function expectOneCreated(result: Executed, type: string, description: string): string {
1104
+ const matches = result.created(type);
1105
+ if (matches.length !== 1) throw new Error(`Expected one ${description} for ${type}; found ${matches.length}`);
1106
+ return String(matches[0]!.id);
1104
1107
  }
1105
1108
 
1106
- function findByShareType(
1107
- created: { objectId: string; objectType: string }[],
1108
- shareType: string,
1109
- description: string,
1110
- ): string {
1111
- const wanted = compactType(shareType);
1112
- const matches = created.filter((item) => compactType(item.objectType).includes(wanted));
1113
- if (matches.length !== 1) throw new Error(`Expected one ${description} for ${shareType}; found ${matches.length}`);
1114
- return matches[0]!.objectId;
1115
- }
1116
-
1117
- function vaultsByCap(result: PlatformExecResult, vaultPackageId: string) {
1109
+ function vaultsByCap(result: Executed, vaultPackageId: string) {
1118
1110
  const out = new Map<string, { vaultId: string; vaultAdminCapId: string }>();
1119
1111
  for (const event of result.events) {
1120
1112
  if (!event.eventType.includes("::vault::VaultCreatedEvent<")) continue;
@@ -1128,7 +1120,7 @@ function vaultsByCap(result: PlatformExecResult, vaultPackageId: string) {
1128
1120
  }
1129
1121
 
1130
1122
  function authorityOut(
1131
- result: PlatformExecResult,
1123
+ result: Executed,
1132
1124
  vaults: ReturnType<typeof vaultsByCap>,
1133
1125
  selected: PublicationCustody,
1134
1126
  adminCapId: string,
@@ -1141,19 +1133,23 @@ function authorityOut(
1141
1133
  return { kind: "vault", ...found, capType, vaultPackageId };
1142
1134
  }
1143
1135
 
1144
- /** Parse one atomic publication using type identity plus lifecycle event payloads. */
1136
+ /**
1137
+ * Parse one atomic publication using type identity plus lifecycle event
1138
+ * payloads.
1139
+ *
1140
+ * `result` is a sui-effect `Executed` (`Tx.run`'s success value) rather than
1141
+ * the predecessor's `PlatformExecResult` — never fails; a mismatch between
1142
+ * `p` and what the transaction actually did throws, exactly as it did before.
1143
+ */
1145
1144
  export function parseAtomicPublicationResult(
1146
1145
  p: AtomicPublicationParams,
1147
- result: PlatformExecResult,
1146
+ result: Executed,
1148
1147
  ): AtomicPublicationResult {
1149
1148
  const available = publicationUsesVault(p) ? operations(p) : undefined;
1150
1149
  const vaultPackageId = available?.vault.packageId ?? "";
1151
1150
  const vaults = available
1152
1151
  ? vaultsByCap(result, vaultPackageId)
1153
1152
  : new Map<string, { vaultId: string; vaultAdminCapId: string }>();
1154
- const createdCompositions = allCreatedByType(result, "::composition::Composition<");
1155
- const createdRecordings = allCreatedByType(result, "::recording::Recording<");
1156
- const createdPools = allCreatedByType(result, "::pool::RoyaltyPool<");
1157
1153
 
1158
1154
  const createdPartyNodes = p.parties.filter((node): node is Extract<PublicationParty, { create: string }> => "create" in node);
1159
1155
  const partyEvents = result.events.filter((event) => event.eventType.endsWith("::party::PartyCreatedEvent"));
@@ -1184,20 +1180,22 @@ export function parseAtomicPublicationResult(
1184
1180
 
1185
1181
  const compositions: AtomicPublicationResult["compositions"] = {};
1186
1182
  p.compositions.forEach((node) => {
1187
- const id = findByShareType(createdCompositions, node.shareType, "Composition");
1183
+ const id = expectOneCreated(result, `${p.deployment.protocol.musicos}::composition::Composition<${node.shareType}>`, "Composition");
1188
1184
  const adminCapId = deriveCompositionAdminCapId(id, p.deployment.protocol.musicos);
1189
1185
  compositions[node.ref] = {
1190
1186
  id,
1191
1187
  adminCapId,
1192
1188
  shareType: node.shareType,
1193
1189
  authority: authorityOut(result, vaults, node.custody, adminCapId, compositionCapType(p, node.shareType), vaultPackageId),
1194
- royaltyPoolId: node.royaltyPool ? findByShareType(createdPools, node.shareType, "Composition RoyaltyPool") : undefined,
1190
+ royaltyPoolId: node.royaltyPool
1191
+ ? expectOneCreated(result, `${p.deployment.packages.royaltyPool}::pool::RoyaltyPool<${node.shareType},${node.royaltyPool.currencyType}>`, "Composition RoyaltyPool")
1192
+ : undefined,
1195
1193
  };
1196
1194
  });
1197
1195
 
1198
1196
  const recordings: AtomicPublicationResult["recordings"] = {};
1199
1197
  p.recordings.forEach((node) => {
1200
- const id = findByShareType(createdRecordings, node.shareType, "Recording");
1198
+ const id = expectOneCreated(result, `${p.deployment.protocol.musicos}::recording::Recording<${node.shareType},${node.compositionShareType}>`, "Recording");
1201
1199
  const adminCapId = deriveRecordingAdminCapId(id, p.deployment.protocol.musicos);
1202
1200
  recordings[node.ref] = {
1203
1201
  id,
@@ -1205,11 +1203,14 @@ export function parseAtomicPublicationResult(
1205
1203
  shareType: node.shareType,
1206
1204
  compositionShareType: node.compositionShareType,
1207
1205
  authority: authorityOut(result, vaults, node.custody, adminCapId, recordingCapType(p, node.shareType), vaultPackageId),
1208
- royaltyPoolId: node.royaltyPool ? findByShareType(createdPools, node.shareType, "Recording RoyaltyPool") : undefined,
1206
+ royaltyPoolId: node.royaltyPool
1207
+ ? expectOneCreated(result, `${p.deployment.packages.royaltyPool}::pool::RoyaltyPool<${node.shareType},${node.royaltyPool.currencyType}>`, "Recording RoyaltyPool")
1208
+ : undefined,
1209
1209
  routedStakeId: node.routedStake
1210
- ? createdByExactType(
1210
+ ? expectOneCreated(
1211
1211
  result,
1212
1212
  `${p.deployment.packages.routedStake}::routed_stake::RoutedStake<${node.shareType},${node.compositionShareType}>`,
1213
+ "RoutedStake",
1213
1214
  )
1214
1215
  : undefined,
1215
1216
  };
@@ -1217,7 +1218,7 @@ export function parseAtomicPublicationResult(
1217
1218
 
1218
1219
  let releaseOut: AtomicPublicationResult["release"];
1219
1220
  if (p.release) {
1220
- const id = createdByExactType(result, `${p.deployment.protocol.musicos}::release::Release`);
1221
+ const id = expectOneCreated(result, `${p.deployment.protocol.musicos}::release::Release`, "Release");
1221
1222
  const adminCapId = deriveReleaseAdminCapId(id, p.deployment.protocol.musicos);
1222
1223
  releaseOut = {
1223
1224
  id,
@@ -1239,8 +1240,8 @@ export function parseAtomicPublicationResult(
1239
1240
  }
1240
1241
 
1241
1242
  return {
1242
- digest: result.digest,
1243
- gasUsed: result.gasUsed,
1243
+ digest: String(result.digest),
1244
+ gasUsed: result.gasUsedTotal,
1244
1245
  parties,
1245
1246
  compositions,
1246
1247
  recordings,
package/src/queries.ts CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  // Shared read plumbing for the platform reads.
5
5
  //
6
- // Not-found is a typed `ObjectNotFoundError` (see `@misofm/effect/errors`),
7
- // matched with `Effect.catchTag("ObjectNotFoundError", ...)` — there is no
8
- // `isNotFound` predicate to re-export anymore.
6
+ // Not-found is a typed `ObjectNotFound`/`ObjectDeleted` (see
7
+ // `@unconfirmed/sui-effect`), matched with `Effect.catchTag("ObjectNotFound", ...)`
8
+ // — there is no `isNotFound` predicate to re-export anymore.
9
9
  export {};
@@ -10,9 +10,9 @@
10
10
  //
11
11
  // `roles` and `tags` are opt-in via `include`.
12
12
 
13
- import { Effect, Option } from "effect";
14
- import { getPartiesByIds, getPartyById } from "@misofm/partyos";
15
- import type { BcsDecodeError, ObjectNotFoundError, ObjectTypeMismatchError, SuiClient, SuiRpcError } from "@misofm/effect";
13
+ import { Effect, Option, Result } from "effect";
14
+ import { ObjectId, Sui, type TransportError } from "@unconfirmed/sui-effect";
15
+ import { Partyos, type PartyosDeploymentError, type PartyReadError } from "@misofm/partyos";
16
16
  import { getCtas, getGenres, getLinks, getProfile, getRoles, getTags } from "../party/queries.ts";
17
17
  import { resolveGenreNames } from "./genres.ts";
18
18
  import type { MisoConfig } from "./config.ts";
@@ -34,6 +34,23 @@ export function partyAvatarUrl(apiBaseUrl: string, partyId: string): string {
34
34
  return `${apiBaseUrl.replace(/\/$/, "")}/media/avatar/${partyId}`;
35
35
  }
36
36
 
37
+ /**
38
+ * Builds the bound `Partyos` for `config.partyos`, provides it, and hands
39
+ * back the effect it wraps — the "converting an existing facade" idiom from
40
+ * sui-effect's `docs/extensions.md`, applied at function granularity: a
41
+ * standalone read composes a sibling extension's own `layer(...)` internally
42
+ * so its own requirement channel stays `Sui`, not `Sui | Partyos`.
43
+ */
44
+ function withPartyos<A, E>(
45
+ config: MisoConfig,
46
+ effect: (partyos: Partyos["Service"]) => Effect.Effect<A, E, Sui>,
47
+ ): Effect.Effect<A, E | PartyosDeploymentError, Sui> {
48
+ return Effect.gen(function* () {
49
+ const partyos = yield* Partyos;
50
+ return yield* effect(partyos);
51
+ }).pipe(Effect.provide(Partyos.layer({ deployment: config.partyos })));
52
+ }
53
+
37
54
  /**
38
55
  * An artist page, fully resolved. Fails only if the PARTY itself can't be read —
39
56
  * every extension is optional by design (a party with no profile set is a new
@@ -43,11 +60,7 @@ export const getArtistProfile = Effect.fn("getArtistProfile")(function* (
43
60
  partyId: string,
44
61
  config: MisoConfig,
45
62
  options: GetArtistOptions = {},
46
- ): Effect.fn.Return<
47
- ArtistProfile,
48
- ObjectNotFoundError | ObjectTypeMismatchError | BcsDecodeError | SuiRpcError,
49
- SuiClient
50
- > {
63
+ ): Effect.fn.Return<ArtistProfile, PartyReadError | PartyosDeploymentError, Sui> {
51
64
  const include = new Set(options.include ?? []);
52
65
  const party = config.party;
53
66
 
@@ -62,13 +75,13 @@ export const getArtistProfile = Effect.fn("getArtistProfile")(function* (
62
75
  include.has("tags")
63
76
  ? getTags(partyId, party.partyTags).pipe(Effect.catch(() => Effect.succeed([] as string[])))
64
77
  : Effect.succeed(undefined),
65
- getPartyById(partyId, config.partyos.partyos),
78
+ withPartyos(config, (partyos) => partyos.getPartyById(ObjectId.make(partyId))),
66
79
  ]);
67
80
  const profile = Option.getOrNull(profileOpt);
68
81
 
69
82
  const [genres, members] = yield* Effect.all([
70
83
  resolveGenreNames(genreIds),
71
- resolveMembers(entity.kind === "group" ? (entity.members ?? []) : [], config),
84
+ resolveMembers(entity.kind === "group" ? [...(entity.members ?? [])] : [], config),
72
85
  ]);
73
86
 
74
87
  return {
@@ -98,13 +111,16 @@ export const getArtistProfile = Effect.fn("getArtistProfile")(function* (
98
111
  const resolveMembers = Effect.fn("resolveMembers")(function* (
99
112
  memberIds: readonly string[],
100
113
  config: MisoConfig,
101
- ): Effect.fn.Return<PartyMember[], never, SuiClient> {
114
+ ): Effect.fn.Return<PartyMember[], never, Sui> {
102
115
  if (memberIds.length === 0) return [];
103
- const parties = yield* getPartiesByIds([...memberIds], config.partyos.partyos).pipe(
104
- Effect.catch(() => Effect.succeed({} as Record<string, undefined>)),
116
+ const results = yield* withPartyos(config, (partyos) => partyos.getPartiesByIds(memberIds.map((id) => ObjectId.make(id)))).pipe(
117
+ Effect.catch(() => Effect.succeed([] as ReadonlyArray<never>)),
118
+ );
119
+ const byId = new Map(
120
+ results.flatMap((result, index) => (Result.isSuccess(result) ? [[memberIds[index]!, result.success] as const] : [])),
105
121
  );
106
122
  return memberIds.flatMap((id) => {
107
- const p = parties[id];
123
+ const p = byId.get(id);
108
124
  return p ? [{ id, name: p.name }] : [];
109
125
  });
110
126
  });
@@ -113,11 +129,14 @@ const resolveMembers = Effect.fn("resolveMembers")(function* (
113
129
  export const getPartySummaries = Effect.fn("getPartySummaries")(function* (
114
130
  ids: readonly string[],
115
131
  config: MisoConfig,
116
- ): Effect.fn.Return<PartySummary[], ObjectTypeMismatchError | BcsDecodeError | SuiRpcError, SuiClient> {
132
+ ): Effect.fn.Return<PartySummary[], TransportError | PartyosDeploymentError, Sui> {
117
133
  if (ids.length === 0) return [];
118
- const parties = yield* getPartiesByIds([...ids], config.partyos.partyos);
134
+ const results = yield* withPartyos(config, (partyos) => partyos.getPartiesByIds(ids.map((id) => ObjectId.make(id))));
135
+ const byId = new Map(
136
+ results.flatMap((result, index) => (Result.isSuccess(result) ? [[ids[index]!, result.success] as const] : [])),
137
+ );
119
138
  return ids.flatMap((id) => {
120
- const p = parties[id];
139
+ const p = byId.get(id);
121
140
  return p ? [{ id, name: p.name, kind: p.kind }] : [];
122
141
  });
123
142
  });