@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.
- package/README.md +309 -204
- package/dist/Miso.d.ts +403 -0
- package/dist/Miso.d.ts.map +1 -0
- package/dist/Miso.js +455 -0
- package/dist/Miso.js.map +1 -0
- package/dist/auth.d.ts +11 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +16 -3
- package/dist/auth.js.map +1 -1
- package/dist/catalog.d.ts +8 -5
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +36 -19
- package/dist/catalog.js.map +1 -1
- package/dist/client.d.ts +52 -443
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +58 -775
- package/dist/client.js.map +1 -1
- package/dist/contracts/composition_credits/composition_credits.d.ts +38 -48
- package/dist/contracts/composition_credits/composition_credits.d.ts.map +1 -1
- package/dist/contracts/composition_credits/composition_credits.js +20 -4
- package/dist/contracts/composition_credits/composition_credits.js.map +1 -1
- package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts +64 -1
- package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts.map +1 -1
- package/dist/contracts/composition_routed_stake/composition_routed_stake.js +66 -1
- package/dist/contracts/composition_routed_stake/composition_routed_stake.js.map +1 -1
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +52 -4
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -1
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +52 -4
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -1
- package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.d.ts +63 -1
- package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.d.ts.map +1 -1
- package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.js +63 -1
- package/dist/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.js.map +1 -1
- package/dist/contracts/genre/genre.d.ts +10 -1
- package/dist/contracts/genre/genre.d.ts.map +1 -1
- package/dist/contracts/genre/genre.js +8 -1
- package/dist/contracts/genre/genre.js.map +1 -1
- package/dist/contracts/miso_pay/deps/std/type_name.d.ts.map +1 -0
- package/dist/contracts/miso_pay/deps/std/type_name.js.map +1 -0
- package/dist/contracts/miso_pay/pay.d.ts +209 -0
- package/dist/contracts/miso_pay/pay.d.ts.map +1 -0
- package/dist/contracts/miso_pay/pay.js +195 -0
- package/dist/contracts/miso_pay/pay.js.map +1 -0
- package/dist/contracts/party_cta/party_cta.d.ts +49 -3
- package/dist/contracts/party_cta/party_cta.d.ts.map +1 -1
- package/dist/contracts/party_cta/party_cta.js +27 -5
- package/dist/contracts/party_cta/party_cta.js.map +1 -1
- package/dist/contracts/party_genre/party_genre.d.ts +25 -0
- package/dist/contracts/party_genre/party_genre.d.ts.map +1 -1
- package/dist/contracts/party_genre/party_genre.js +14 -3
- package/dist/contracts/party_genre/party_genre.js.map +1 -1
- package/dist/contracts/party_media/party_media.d.ts +19 -3
- package/dist/contracts/party_media/party_media.d.ts.map +1 -1
- package/dist/contracts/party_media/party_media.js +20 -4
- package/dist/contracts/party_media/party_media.js.map +1 -1
- package/dist/contracts/party_platform_link/party_platform_link.d.ts +15 -7
- package/dist/contracts/party_platform_link/party_platform_link.d.ts.map +1 -1
- package/dist/contracts/party_platform_link/party_platform_link.js +15 -7
- package/dist/contracts/party_platform_link/party_platform_link.js.map +1 -1
- package/dist/contracts/party_profile/party_profile.d.ts +63 -8
- package/dist/contracts/party_profile/party_profile.d.ts.map +1 -1
- package/dist/contracts/party_profile/party_profile.js +33 -8
- package/dist/contracts/party_profile/party_profile.js.map +1 -1
- package/dist/contracts/party_roles/party_roles.d.ts +28 -3
- package/dist/contracts/party_roles/party_roles.d.ts.map +1 -1
- package/dist/contracts/party_roles/party_roles.js +19 -4
- package/dist/contracts/party_roles/party_roles.js.map +1 -1
- package/dist/contracts/party_tags/party_tags.d.ts +23 -3
- package/dist/contracts/party_tags/party_tags.d.ts.map +1 -1
- package/dist/contracts/party_tags/party_tags.js +16 -4
- package/dist/contracts/party_tags/party_tags.js.map +1 -1
- package/dist/contracts/party_wallet/party_wallet.d.ts +4 -1
- package/dist/contracts/party_wallet/party_wallet.d.ts.map +1 -1
- package/dist/contracts/party_wallet/party_wallet.js +2 -1
- package/dist/contracts/party_wallet/party_wallet.js.map +1 -1
- package/dist/contracts/platform_link/platform_link.d.ts +207 -0
- package/dist/contracts/platform_link/platform_link.d.ts.map +1 -0
- package/dist/contracts/platform_link/platform_link.js +209 -0
- package/dist/contracts/platform_link/platform_link.js.map +1 -0
- package/dist/contracts/record/pressing.d.ts +53 -7
- package/dist/contracts/record/pressing.d.ts.map +1 -1
- package/dist/contracts/record/pressing.js +50 -4
- package/dist/contracts/record/pressing.js.map +1 -1
- package/dist/contracts/record/record.d.ts +14 -0
- package/dist/contracts/record/record.d.ts.map +1 -1
- package/dist/contracts/record/record.js +15 -1
- package/dist/contracts/record/record.js.map +1 -1
- package/dist/contracts/record_shop/listing.d.ts +80 -35
- package/dist/contracts/record_shop/listing.d.ts.map +1 -1
- package/dist/contracts/record_shop/listing.js +76 -13
- package/dist/contracts/record_shop/listing.js.map +1 -1
- package/dist/contracts/recording_advisory/recording_advisory.d.ts +15 -15
- package/dist/contracts/recording_advisory/recording_advisory.d.ts.map +1 -1
- package/dist/contracts/recording_advisory/recording_advisory.js +15 -8
- package/dist/contracts/recording_advisory/recording_advisory.js.map +1 -1
- package/dist/contracts/recording_credits/recording_credits.d.ts +95 -1350
- package/dist/contracts/recording_credits/recording_credits.d.ts.map +1 -1
- package/dist/contracts/recording_credits/recording_credits.js +63 -12
- package/dist/contracts/recording_credits/recording_credits.js.map +1 -1
- package/dist/contracts/recording_engine_session/recording_engine_session.d.ts +30 -49
- package/dist/contracts/recording_engine_session/recording_engine_session.d.ts.map +1 -1
- package/dist/contracts/recording_engine_session/recording_engine_session.js +19 -4
- package/dist/contracts/recording_engine_session/recording_engine_session.js.map +1 -1
- package/dist/contracts/recording_genre/recording_genre.d.ts +67 -9
- package/dist/contracts/recording_genre/recording_genre.d.ts.map +1 -1
- package/dist/contracts/recording_genre/recording_genre.js +53 -9
- package/dist/contracts/recording_genre/recording_genre.js.map +1 -1
- package/dist/contracts/recording_language/recording_language.d.ts +29 -5
- package/dist/contracts/recording_language/recording_language.d.ts.map +1 -1
- package/dist/contracts/recording_language/recording_language.js +18 -5
- package/dist/contracts/recording_language/recording_language.js.map +1 -1
- package/dist/contracts/recording_master_reference/recording_master_reference.d.ts +25 -15
- package/dist/contracts/recording_master_reference/recording_master_reference.d.ts.map +1 -1
- package/dist/contracts/recording_master_reference/recording_master_reference.js +18 -5
- package/dist/contracts/recording_master_reference/recording_master_reference.js.map +1 -1
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +55 -4
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -1
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +55 -4
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -1
- package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.d.ts +66 -1
- package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.d.ts.map +1 -1
- package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.js +66 -1
- package/dist/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.js.map +1 -1
- package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.d.ts +12 -9
- package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.d.ts.map +1 -1
- package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.js +11 -4
- package/dist/contracts/recording_streaming_transcode/recording_streaming_transcode.js.map +1 -1
- package/dist/contracts/release_cover_art/release_cover_art.d.ts +168 -74
- package/dist/contracts/release_cover_art/release_cover_art.d.ts.map +1 -1
- package/dist/contracts/release_cover_art/release_cover_art.js +126 -10
- package/dist/contracts/release_cover_art/release_cover_art.js.map +1 -1
- package/dist/contracts/release_credits/release_credits.d.ts +24 -28
- package/dist/contracts/release_credits/release_credits.d.ts.map +1 -1
- package/dist/contracts/release_credits/release_credits.js +18 -4
- package/dist/contracts/release_credits/release_credits.js.map +1 -1
- package/dist/contracts/release_description/release_description.d.ts +16 -5
- package/dist/contracts/release_description/release_description.d.ts.map +1 -1
- package/dist/contracts/release_description/release_description.js +9 -4
- package/dist/contracts/release_description/release_description.js.map +1 -1
- package/dist/contracts/release_dsp_link/release_dsp_link.d.ts +130 -160
- package/dist/contracts/release_dsp_link/release_dsp_link.d.ts.map +1 -1
- package/dist/contracts/release_dsp_link/release_dsp_link.js +74 -19
- package/dist/contracts/release_dsp_link/release_dsp_link.js.map +1 -1
- package/dist/contracts/release_genre/release_genre.d.ts +66 -11
- package/dist/contracts/release_genre/release_genre.d.ts.map +1 -1
- package/dist/contracts/release_genre/release_genre.js +52 -11
- package/dist/contracts/release_genre/release_genre.js.map +1 -1
- package/dist/contracts/release_kind/release_kind.d.ts +28 -5
- package/dist/contracts/release_kind/release_kind.d.ts.map +1 -1
- package/dist/contracts/release_kind/release_kind.js +19 -4
- package/dist/contracts/release_kind/release_kind.js.map +1 -1
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts +17 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts.map +1 -1
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js +15 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js.map +1 -1
- package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.d.ts +37 -1
- package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.d.ts.map +1 -1
- package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.js +37 -1
- package/dist/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.js.map +1 -1
- package/dist/contracts/routed_stake/routed_stake.d.ts +78 -6
- package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -1
- package/dist/contracts/routed_stake/routed_stake.js +79 -7
- package/dist/contracts/routed_stake/routed_stake.js.map +1 -1
- package/dist/contracts/royalty_pool/pool.d.ts +117 -27
- package/dist/contracts/royalty_pool/pool.d.ts.map +1 -1
- package/dist/contracts/royalty_pool/pool.js +117 -28
- package/dist/contracts/royalty_pool/pool.js.map +1 -1
- package/dist/contracts/royalty_pool/stake.d.ts +3 -0
- package/dist/contracts/royalty_pool/stake.d.ts.map +1 -1
- package/dist/contracts/royalty_pool/stake.js +5 -2
- package/dist/contracts/royalty_pool/stake.js.map +1 -1
- package/dist/contracts/share/share.d.ts +80 -0
- package/dist/contracts/share/share.d.ts.map +1 -0
- package/dist/contracts/share/share.js +72 -0
- package/dist/contracts/share/share.js.map +1 -0
- package/dist/contracts/vault/vault.d.ts +51 -0
- package/dist/contracts/vault/vault.d.ts.map +1 -1
- package/dist/contracts/vault/vault.js +55 -4
- package/dist/contracts/vault/vault.js.map +1 -1
- package/dist/contracts.d.ts +60 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +17 -0
- package/dist/contracts.js.map +1 -1
- package/dist/cover.d.ts +5 -6
- package/dist/cover.d.ts.map +1 -1
- package/dist/cover.js +10 -10
- package/dist/cover.js.map +1 -1
- package/dist/credits.d.ts +12 -13
- package/dist/credits.d.ts.map +1 -1
- package/dist/credits.js +16 -10
- package/dist/credits.js.map +1 -1
- package/dist/deployments.d.ts +3 -3
- package/dist/deployments.d.ts.map +1 -1
- package/dist/deployments.js +2 -3
- package/dist/deployments.js.map +1 -1
- package/dist/errors.d.ts +24 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +43 -16
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +1687 -835
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +258 -39
- package/dist/events.js.map +1 -1
- package/dist/genre.d.ts +11 -12
- package/dist/genre.d.ts.map +1 -1
- package/dist/genre.js +5 -3
- package/dist/genre.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/packages.d.ts +1047 -1695
- package/dist/packages.d.ts.map +1 -1
- package/dist/party/client.d.ts +113 -296
- package/dist/party/client.d.ts.map +1 -1
- package/dist/party/client.js +93 -178
- package/dist/party/client.js.map +1 -1
- package/dist/party/extensions/ctas.d.ts +3 -3
- package/dist/party/extensions/ctas.d.ts.map +1 -1
- package/dist/party/extensions/genres.d.ts +4 -4
- package/dist/party/extensions/genres.d.ts.map +1 -1
- package/dist/party/extensions/links.d.ts +5 -5
- package/dist/party/extensions/links.d.ts.map +1 -1
- package/dist/party/extensions/links.js.map +1 -1
- package/dist/party/extensions/media.d.ts +3 -3
- package/dist/party/extensions/media.d.ts.map +1 -1
- package/dist/party/extensions/profile.d.ts +3 -3
- package/dist/party/extensions/profile.d.ts.map +1 -1
- package/dist/party/extensions/roles.d.ts +4 -4
- package/dist/party/extensions/roles.d.ts.map +1 -1
- package/dist/party/extensions/roles.js.map +1 -1
- package/dist/party/extensions/tags.d.ts +4 -4
- package/dist/party/extensions/tags.d.ts.map +1 -1
- package/dist/party/index.d.ts +1 -1
- package/dist/party/index.d.ts.map +1 -1
- package/dist/party/index.js.map +1 -1
- package/dist/party/queries.d.ts +8 -8
- package/dist/party/queries.d.ts.map +1 -1
- package/dist/party/queries.js +83 -56
- package/dist/party/queries.js.map +1 -1
- package/dist/pressing.d.ts +13 -15
- package/dist/pressing.d.ts.map +1 -1
- package/dist/pressing.js +99 -29
- package/dist/pressing.js.map +1 -1
- package/dist/publication.d.ts +13 -6
- package/dist/publication.d.ts.map +1 -1
- package/dist/publication.js +26 -21
- package/dist/publication.js.map +1 -1
- package/dist/queries.js +3 -3
- package/dist/queries.js.map +1 -1
- package/dist/read/artist.d.ts +4 -3
- package/dist/read/artist.d.ts.map +1 -1
- package/dist/read/artist.js +24 -8
- package/dist/read/artist.js.map +1 -1
- package/dist/read/catalog.d.ts +17 -16
- package/dist/read/catalog.d.ts.map +1 -1
- package/dist/read/catalog.js +25 -11
- package/dist/read/catalog.js.map +1 -1
- package/dist/read/client.d.ts +41 -20
- package/dist/read/client.d.ts.map +1 -1
- package/dist/read/client.js +20 -12
- package/dist/read/client.js.map +1 -1
- package/dist/read/config.d.ts +25 -3
- package/dist/read/config.d.ts.map +1 -1
- package/dist/read/config.js +42 -25
- package/dist/read/config.js.map +1 -1
- package/dist/read/genres.d.ts +8 -3
- package/dist/read/genres.d.ts.map +1 -1
- package/dist/read/genres.js +23 -17
- package/dist/read/genres.js.map +1 -1
- package/dist/read/index.d.ts +1 -1
- package/dist/read/index.d.ts.map +1 -1
- package/dist/read/index.js +8 -6
- package/dist/read/index.js.map +1 -1
- package/dist/read/receipts.d.ts +5 -4
- package/dist/read/receipts.d.ts.map +1 -1
- package/dist/read/receipts.js +94 -46
- package/dist/read/receipts.js.map +1 -1
- package/dist/read/royalties.d.ts +6 -5
- package/dist/read/royalties.d.ts.map +1 -1
- package/dist/read/royalties.js +16 -9
- package/dist/read/royalties.js.map +1 -1
- package/dist/read/wallet.d.ts +23 -12
- package/dist/read/wallet.d.ts.map +1 -1
- package/dist/read/wallet.js +158 -177
- package/dist/read/wallet.js.map +1 -1
- package/dist/read/works.d.ts +6 -6
- package/dist/read/works.d.ts.map +1 -1
- package/dist/read/works.js +40 -26
- package/dist/read/works.js.map +1 -1
- package/dist/recording-extensions.d.ts +15 -16
- package/dist/recording-extensions.d.ts.map +1 -1
- package/dist/recording-extensions.js +12 -8
- package/dist/recording-extensions.js.map +1 -1
- package/dist/release-extensions.d.ts +5 -6
- package/dist/release-extensions.d.ts.map +1 -1
- package/dist/release-extensions.js +3 -2
- package/dist/release-extensions.js.map +1 -1
- package/dist/release-graph.d.ts +2 -2
- package/dist/release-graph.d.ts.map +1 -1
- package/dist/release-graph.js.map +1 -1
- package/dist/royalty.d.ts +4 -4
- package/dist/royalty.d.ts.map +1 -1
- package/dist/royalty.js +16 -7
- package/dist/royalty.js.map +1 -1
- package/dist/share.d.ts +58 -24
- package/dist/share.d.ts.map +1 -1
- package/dist/share.js +167 -92
- package/dist/share.js.map +1 -1
- package/dist/transactions.d.ts +15 -6
- package/dist/transactions.d.ts.map +1 -1
- package/dist/transactions.js +1 -0
- package/dist/transactions.js.map +1 -1
- package/dist/vault.d.ts +13 -3
- package/dist/vault.d.ts.map +1 -1
- package/dist/vault.js +22 -16
- package/dist/vault.js.map +1 -1
- package/package.json +9 -8
- package/src/Miso.ts +951 -0
- package/src/auth.ts +16 -3
- package/src/catalog.ts +58 -25
- package/src/client.ts +98 -1359
- package/src/contracts/composition_credits/composition_credits.ts +20 -4
- package/src/contracts/composition_routed_stake/composition_routed_stake.ts +67 -1
- package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +53 -4
- package/src/contracts/composition_royalty_pool_plugin/composition_royalty_pool_plugin.ts +64 -1
- package/src/contracts/genre/genre.ts +8 -1
- package/src/contracts/miso_pay/pay.ts +356 -0
- package/src/contracts/party_cta/party_cta.ts +27 -5
- package/src/contracts/party_genre/party_genre.ts +14 -3
- package/src/contracts/party_media/party_media.ts +20 -4
- package/src/contracts/party_platform_link/party_platform_link.ts +15 -7
- package/src/contracts/party_profile/party_profile.ts +33 -8
- package/src/contracts/party_roles/party_roles.ts +19 -4
- package/src/contracts/party_tags/party_tags.ts +16 -4
- package/src/contracts/party_wallet/party_wallet.ts +2 -1
- package/src/contracts/platform_link/platform_link.ts +322 -0
- package/src/contracts/record/pressing.ts +50 -4
- package/src/contracts/record/record.ts +15 -1
- package/src/contracts/record_shop/listing.ts +76 -13
- package/src/contracts/recording_advisory/recording_advisory.ts +15 -8
- package/src/contracts/recording_credits/recording_credits.ts +63 -12
- package/src/contracts/recording_engine_session/recording_engine_session.ts +19 -4
- package/src/contracts/recording_genre/recording_genre.ts +53 -9
- package/src/contracts/recording_language/recording_language.ts +18 -5
- package/src/contracts/recording_master_reference/recording_master_reference.ts +18 -5
- package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +56 -4
- package/src/contracts/recording_royalty_pool_plugin/recording_royalty_pool_plugin.ts +67 -1
- package/src/contracts/recording_streaming_transcode/recording_streaming_transcode.ts +11 -4
- package/src/contracts/release_cover_art/release_cover_art.ts +126 -10
- package/src/contracts/release_credits/release_credits.ts +18 -4
- package/src/contracts/release_description/release_description.ts +9 -4
- package/src/contracts/release_dsp_link/release_dsp_link.ts +74 -19
- package/src/contracts/release_genre/release_genre.ts +52 -11
- package/src/contracts/release_kind/release_kind.ts +19 -4
- package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +15 -0
- package/src/contracts/release_revenue_distributor_plugin/release_revenue_distributor_plugin.ts +38 -1
- package/src/contracts/routed_stake/routed_stake.ts +79 -7
- package/src/contracts/royalty_pool/pool.ts +140 -38
- package/src/contracts/royalty_pool/stake.ts +5 -2
- package/src/contracts/share/share.ts +97 -0
- package/src/contracts/vault/vault.ts +55 -4
- package/src/contracts.ts +18 -0
- package/src/cover.ts +14 -15
- package/src/credits.ts +27 -22
- package/src/deployments.ts +3 -4
- package/src/errors.ts +64 -34
- package/src/events.ts +260 -39
- package/src/genre.ts +15 -14
- package/src/index.ts +19 -10
- package/src/party/client.ts +217 -208
- package/src/party/extensions/ctas.ts +3 -3
- package/src/party/extensions/genres.ts +4 -4
- package/src/party/extensions/links.ts +7 -7
- package/src/party/extensions/media.ts +3 -3
- package/src/party/extensions/profile.ts +3 -3
- package/src/party/extensions/roles.ts +5 -5
- package/src/party/extensions/tags.ts +4 -4
- package/src/party/index.ts +0 -1
- package/src/party/queries.ts +90 -87
- package/src/pressing.ts +132 -89
- package/src/publication.ts +33 -32
- package/src/queries.ts +3 -3
- package/src/read/artist.ts +36 -17
- package/src/read/catalog.ts +68 -36
- package/src/read/client.ts +55 -30
- package/src/read/config.ts +55 -30
- package/src/read/genres.ts +22 -18
- package/src/read/index.ts +8 -6
- package/src/read/receipts.ts +130 -67
- package/src/read/royalties.ts +22 -10
- package/src/read/wallet.ts +226 -216
- package/src/read/works.ts +51 -44
- package/src/recording-extensions.ts +27 -24
- package/src/release-extensions.ts +7 -7
- package/src/release-graph.ts +2 -1
- package/src/royalty.ts +19 -25
- package/src/share.ts +197 -128
- package/src/transactions.ts +15 -8
- package/src/vault.ts +24 -31
- package/dist/contracts/record_shop/deps/std/type_name.d.ts.map +0 -1
- package/dist/contracts/record_shop/deps/std/type_name.js.map +0 -1
- package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +0 -6
- package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +0 -1
- package/dist/contracts/recording_language/deps/language_code/language_code.js +0 -8
- package/dist/contracts/recording_language/deps/language_code/language_code.js.map +0 -1
- package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts +0 -24
- package/dist/contracts/recording_master_reference/deps/ori/confidentiality.d.ts.map +0 -1
- package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js +0 -24
- package/dist/contracts/recording_master_reference/deps/ori/confidentiality.js.map +0 -1
- package/dist/contracts/recording_master_reference/deps/ori/data.d.ts +0 -16
- package/dist/contracts/recording_master_reference/deps/ori/data.d.ts.map +0 -1
- package/dist/contracts/recording_master_reference/deps/ori/data.js +0 -12
- package/dist/contracts/recording_master_reference/deps/ori/data.js.map +0 -1
- package/dist/execute.d.ts +0 -32
- package/dist/execute.d.ts.map +0 -1
- package/dist/execute.js +0 -36
- package/dist/execute.js.map +0 -1
- package/src/contracts/recording_language/deps/language_code/language_code.ts +0 -8
- package/src/contracts/recording_master_reference/deps/ori/confidentiality.ts +0 -24
- package/src/contracts/recording_master_reference/deps/ori/data.ts +0 -12
- package/src/execute.ts +0 -56
- /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.d.ts +0 -0
- /package/dist/contracts/{record_shop → miso_pay}/deps/std/type_name.js +0 -0
- /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<
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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):
|
|
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 `
|
|
569
|
-
function
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
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
|
|
578
|
-
objectId,
|
|
579
|
-
|
|
580
|
-
|
|
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,
|
|
590
|
-
const
|
|
591
|
-
|
|
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
|
-
|
|
594
|
-
|
|
595
|
-
|
|
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,
|
|
611
|
-
const
|
|
612
|
-
|
|
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*
|
|
616
|
-
|
|
651
|
+
return yield* decodeInto(
|
|
652
|
+
() => mapListing(listingId, recordShopPackageId, currencyType, content),
|
|
617
653
|
Listing,
|
|
618
|
-
|
|
619
|
-
{
|
|
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,
|
|
628
|
-
const
|
|
629
|
-
|
|
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
|
-
|
|
632
|
-
|
|
633
|
-
|
|
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
|
-
/**
|
|
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
|
|
710
|
+
const sui = yield* Sui;
|
|
711
|
+
const [pressingResult, listingResult] = yield* sui.getObjects([ObjectId.make(pressingId), ObjectId.make(listingId)]);
|
|
664
712
|
|
|
665
|
-
const pressingFound =
|
|
713
|
+
const pressingFound = yield* nullableObject(pressingResult!);
|
|
666
714
|
let pressing: Pressing | null = null;
|
|
667
715
|
if (pressingFound) {
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
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 =
|
|
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*
|
|
687
|
-
|
|
726
|
+
listing = yield* decodeInto(
|
|
727
|
+
() => mapListing(listingId, p.recordShopPackageId, currencyType, listingFound.content),
|
|
688
728
|
Listing,
|
|
689
|
-
|
|
690
|
-
{
|
|
729
|
+
listingId,
|
|
730
|
+
`${p.recordShopPackageId}::listing::Listing<Currency>`,
|
|
691
731
|
);
|
|
692
|
-
|
|
693
|
-
|
|
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
|
-
|
|
696
|
-
|
|
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
|
}
|
package/src/publication.ts
CHANGED
|
@@ -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 {
|
|
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):
|
|
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
|
-
|
|
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
|
-
|
|
1103
|
-
|
|
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
|
|
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:
|
|
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
|
-
/**
|
|
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:
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
?
|
|
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 =
|
|
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.
|
|
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 `
|
|
7
|
-
// matched with `Effect.catchTag("
|
|
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 {};
|
package/src/read/artist.ts
CHANGED
|
@@ -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 {
|
|
15
|
-
import
|
|
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
|
-
|
|
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,
|
|
114
|
+
): Effect.fn.Return<PartyMember[], never, Sui> {
|
|
102
115
|
if (memberIds.length === 0) return [];
|
|
103
|
-
const
|
|
104
|
-
Effect.catch(() => Effect.succeed(
|
|
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 =
|
|
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[],
|
|
132
|
+
): Effect.fn.Return<PartySummary[], TransportError | PartyosDeploymentError, Sui> {
|
|
117
133
|
if (ids.length === 0) return [];
|
|
118
|
-
const
|
|
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 =
|
|
139
|
+
const p = byId.get(id);
|
|
121
140
|
return p ? [{ id, name: p.name, kind: p.kind }] : [];
|
|
122
141
|
});
|
|
123
142
|
});
|