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