@misofm/sdk 0.8.1 → 0.10.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 +88 -56
- package/dist/client.d.ts +126 -18
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +210 -44
- package/dist/client.js.map +1 -1
- package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts +205 -0
- package/dist/contracts/composition_routed_stake/composition_routed_stake.d.ts.map +1 -0
- package/dist/contracts/composition_routed_stake/composition_routed_stake.js +184 -0
- package/dist/contracts/composition_routed_stake/composition_routed_stake.js.map +1 -0
- package/dist/contracts/composition_routed_stake/witness.d.ts +7 -0
- package/dist/contracts/composition_routed_stake/witness.d.ts.map +1 -0
- package/dist/contracts/composition_routed_stake/witness.js +9 -0
- package/dist/contracts/composition_routed_stake/witness.js.map +1 -0
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +89 -28
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -1
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +84 -23
- package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -1
- package/dist/contracts/composition_royalty_pool/witness.d.ts +6 -0
- package/dist/contracts/composition_royalty_pool/witness.d.ts.map +1 -0
- package/dist/contracts/composition_royalty_pool/witness.js +8 -0
- package/dist/contracts/composition_royalty_pool/witness.js.map +1 -0
- package/dist/contracts/genre/genre.d.ts +96 -0
- package/dist/contracts/genre/genre.d.ts.map +1 -0
- package/dist/contracts/genre/genre.js +107 -0
- package/dist/contracts/genre/genre.js.map +1 -0
- package/dist/contracts/recording_advisory/recording_advisory.d.ts +194 -0
- package/dist/contracts/recording_advisory/recording_advisory.d.ts.map +1 -0
- package/dist/contracts/recording_advisory/recording_advisory.js +204 -0
- package/dist/contracts/recording_advisory/recording_advisory.js.map +1 -0
- package/dist/contracts/recording_language/deps/language_code/language_code.d.ts +6 -0
- package/dist/contracts/recording_language/deps/language_code/language_code.d.ts.map +1 -0
- package/dist/contracts/recording_language/deps/language_code/language_code.js +8 -0
- package/dist/contracts/recording_language/deps/language_code/language_code.js.map +1 -0
- package/dist/contracts/recording_language/recording_language.d.ts +152 -0
- package/dist/contracts/recording_language/recording_language.d.ts.map +1 -0
- package/dist/contracts/recording_language/recording_language.js +149 -0
- package/dist/contracts/recording_language/recording_language.js.map +1 -0
- package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts +52 -0
- package/dist/contracts/recording_master_reference/deps/ori/walrus_data.d.ts.map +1 -0
- package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js +37 -0
- package/dist/contracts/recording_master_reference/deps/ori/walrus_data.js.map +1 -0
- package/dist/contracts/recording_master_reference/recording_master_reference.d.ts +131 -0
- package/dist/contracts/recording_master_reference/recording_master_reference.d.ts.map +1 -0
- package/dist/contracts/recording_master_reference/recording_master_reference.js +121 -0
- package/dist/contracts/recording_master_reference/recording_master_reference.js.map +1 -0
- package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts +52 -0
- package/dist/contracts/recording_preview/deps/ori/walrus_data.d.ts.map +1 -0
- package/dist/contracts/recording_preview/deps/ori/walrus_data.js +37 -0
- package/dist/contracts/recording_preview/deps/ori/walrus_data.js.map +1 -0
- package/dist/contracts/recording_preview/recording_preview.d.ts +104 -0
- package/dist/contracts/recording_preview/recording_preview.d.ts.map +1 -0
- package/dist/contracts/recording_preview/recording_preview.js +94 -0
- package/dist/contracts/recording_preview/recording_preview.js.map +1 -0
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +90 -28
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -1
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +84 -23
- package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -1
- package/dist/contracts/recording_royalty_pool/witness.d.ts +6 -0
- package/dist/contracts/recording_royalty_pool/witness.d.ts.map +1 -0
- package/dist/contracts/recording_royalty_pool/witness.js +8 -0
- package/dist/contracts/recording_royalty_pool/witness.js.map +1 -0
- package/dist/contracts/release_description/release_description.d.ts +112 -0
- package/dist/contracts/release_description/release_description.d.ts.map +1 -0
- package/dist/contracts/release_description/release_description.js +123 -0
- package/dist/contracts/release_description/release_description.js.map +1 -0
- package/dist/contracts/release_dsp_link/release_dsp_link.d.ts +644 -0
- package/dist/contracts/release_dsp_link/release_dsp_link.d.ts.map +1 -0
- package/dist/contracts/release_dsp_link/release_dsp_link.js +556 -0
- package/dist/contracts/release_dsp_link/release_dsp_link.js.map +1 -0
- package/dist/contracts/release_genre/deps/per_track/per_track.d.ts +33 -0
- package/dist/contracts/release_genre/deps/per_track/per_track.d.ts.map +1 -0
- package/dist/contracts/release_genre/deps/per_track/per_track.js +32 -0
- package/dist/contracts/release_genre/deps/per_track/per_track.js.map +1 -0
- package/dist/contracts/release_genre/release_genre.d.ts +193 -0
- package/dist/contracts/release_genre/release_genre.d.ts.map +1 -0
- package/dist/contracts/release_genre/release_genre.js +207 -0
- package/dist/contracts/release_genre/release_genre.js.map +1 -0
- package/dist/contracts/release_kind/release_kind.d.ts +98 -0
- package/dist/contracts/release_kind/release_kind.d.ts.map +1 -0
- package/dist/contracts/release_kind/release_kind.js +109 -0
- package/dist/contracts/release_kind/release_kind.js.map +1 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts +106 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.d.ts.map +1 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js +113 -0
- package/dist/contracts/release_revenue_distributor/release_revenue_distributor.js.map +1 -0
- package/dist/contracts/release_revenue_distributor/witness.d.ts +7 -0
- package/dist/contracts/release_revenue_distributor/witness.d.ts.map +1 -0
- package/dist/contracts/release_revenue_distributor/witness.js +9 -0
- package/dist/contracts/release_revenue_distributor/witness.js.map +1 -0
- package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts +52 -0
- package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.d.ts.map +1 -0
- package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js +37 -0
- package/dist/contracts/release_snapshot_bundle/deps/ori/walrus_data.js.map +1 -0
- package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts +91 -0
- package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.d.ts.map +1 -0
- package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js +91 -0
- package/dist/contracts/release_snapshot_bundle/release_snapshot_bundle.js.map +1 -0
- package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts +54 -0
- package/dist/contracts/routed_stake/deps/royalty_pool/stake.d.ts.map +1 -0
- package/dist/contracts/routed_stake/deps/royalty_pool/stake.js +37 -0
- package/dist/contracts/routed_stake/deps/royalty_pool/stake.js.map +1 -0
- package/dist/contracts/routed_stake/deps/std/type_name.d.ts +18 -0
- package/dist/contracts/routed_stake/deps/std/type_name.d.ts.map +1 -0
- package/dist/contracts/routed_stake/deps/std/type_name.js +20 -0
- package/dist/contracts/routed_stake/deps/std/type_name.js.map +1 -0
- package/dist/contracts/routed_stake/deps/sui/balance.d.ts +13 -0
- package/dist/contracts/routed_stake/deps/sui/balance.d.ts.map +1 -0
- package/dist/contracts/routed_stake/deps/sui/balance.js +15 -0
- package/dist/contracts/routed_stake/deps/sui/balance.js.map +1 -0
- package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts +37 -0
- package/dist/contracts/routed_stake/deps/sui/vec_map.d.ts.map +1 -0
- package/dist/contracts/routed_stake/deps/sui/vec_map.js +28 -0
- package/dist/contracts/routed_stake/deps/sui/vec_map.js.map +1 -0
- package/dist/contracts/routed_stake/routed_stake.d.ts +356 -0
- package/dist/contracts/routed_stake/routed_stake.d.ts.map +1 -0
- package/dist/contracts/routed_stake/routed_stake.js +311 -0
- package/dist/contracts/routed_stake/routed_stake.js.map +1 -0
- package/dist/contracts/royalty_pool/pool.d.ts +27 -17
- package/dist/contracts/royalty_pool/pool.d.ts.map +1 -1
- package/dist/contracts/royalty_pool/pool.js +26 -17
- package/dist/contracts/royalty_pool/pool.js.map +1 -1
- package/dist/contracts/vault/deps/sui/bag.d.ts +35 -0
- package/dist/contracts/vault/deps/sui/bag.d.ts.map +1 -0
- package/dist/contracts/vault/deps/sui/bag.js +37 -0
- package/dist/contracts/vault/deps/sui/bag.js.map +1 -0
- package/dist/contracts/vault/deps/sui/borrow.d.ts +20 -0
- package/dist/contracts/vault/deps/sui/borrow.d.ts.map +1 -0
- package/dist/contracts/vault/deps/sui/borrow.js +21 -0
- package/dist/contracts/vault/deps/sui/borrow.js.map +1 -0
- package/dist/contracts/vault/vault.d.ts +276 -0
- package/dist/contracts/vault/vault.d.ts.map +1 -0
- package/dist/contracts/vault/vault.js +274 -0
- package/dist/contracts/vault/vault.js.map +1 -0
- package/dist/contracts.d.ts +14 -2
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +16 -7
- package/dist/contracts.js.map +1 -1
- package/dist/cover.d.ts +17 -3
- package/dist/cover.d.ts.map +1 -1
- package/dist/cover.js +43 -20
- package/dist/cover.js.map +1 -1
- package/dist/credits.d.ts +31 -12
- package/dist/credits.d.ts.map +1 -1
- package/dist/credits.js +41 -25
- package/dist/credits.js.map +1 -1
- package/dist/deployments.d.ts +31 -57
- package/dist/deployments.d.ts.map +1 -1
- package/dist/deployments.js +5 -53
- package/dist/deployments.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/pressing.d.ts +8 -7
- package/dist/pressing.d.ts.map +1 -1
- package/dist/pressing.js +91 -32
- package/dist/pressing.js.map +1 -1
- package/dist/read/artist.js +3 -3
- package/dist/read/artist.js.map +1 -1
- package/dist/read/catalog.d.ts +14 -9
- package/dist/read/catalog.d.ts.map +1 -1
- package/dist/read/catalog.js +72 -37
- package/dist/read/catalog.js.map +1 -1
- package/dist/read/client.d.ts +4 -2
- package/dist/read/client.d.ts.map +1 -1
- package/dist/read/client.js +15 -4
- package/dist/read/client.js.map +1 -1
- package/dist/read/config.d.ts +14 -11
- package/dist/read/config.d.ts.map +1 -1
- package/dist/read/config.js +10 -37
- package/dist/read/config.js.map +1 -1
- package/dist/read/index.d.ts +2 -2
- package/dist/read/index.d.ts.map +1 -1
- package/dist/read/index.js +1 -1
- package/dist/read/index.js.map +1 -1
- package/dist/read/receipts.d.ts +24 -7
- package/dist/read/receipts.d.ts.map +1 -1
- package/dist/read/receipts.js +78 -25
- package/dist/read/receipts.js.map +1 -1
- package/dist/read/types.d.ts +45 -25
- package/dist/read/types.d.ts.map +1 -1
- package/dist/read/types.js +2 -2
- package/dist/read/types.js.map +1 -1
- package/dist/read/works.d.ts.map +1 -1
- package/dist/read/works.js +6 -1
- package/dist/read/works.js.map +1 -1
- package/dist/recording-extensions.d.ts +37 -0
- package/dist/recording-extensions.d.ts.map +1 -0
- package/dist/recording-extensions.js +61 -0
- package/dist/recording-extensions.js.map +1 -0
- package/dist/release-extensions.d.ts +92 -0
- package/dist/release-extensions.d.ts.map +1 -0
- package/dist/release-extensions.js +175 -0
- package/dist/release-extensions.js.map +1 -0
- package/dist/release-graph.d.ts +17 -32
- package/dist/release-graph.d.ts.map +1 -1
- package/dist/release-graph.js +57 -57
- package/dist/release-graph.js.map +1 -1
- package/dist/transactions.d.ts +43 -26
- package/dist/transactions.d.ts.map +1 -1
- package/dist/transactions.js +50 -31
- package/dist/transactions.js.map +1 -1
- package/dist/vault.d.ts +268 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +389 -0
- package/dist/vault.js.map +1 -0
- package/package.json +21 -11
- package/src/client.ts +428 -61
- package/src/contracts/composition_routed_stake/composition_routed_stake.ts +346 -0
- package/src/contracts/composition_routed_stake/witness.ts +11 -0
- package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +151 -35
- package/src/contracts/composition_royalty_pool/witness.ts +7 -0
- package/src/contracts/genre/genre.ts +151 -0
- package/src/contracts/recording_advisory/recording_advisory.ts +315 -0
- package/src/contracts/recording_language/deps/language_code/language_code.ts +7 -0
- package/src/contracts/recording_language/recording_language.ts +237 -0
- package/src/contracts/recording_master_reference/deps/ori/walrus_data.ts +36 -0
- package/src/contracts/recording_master_reference/recording_master_reference.ts +181 -0
- package/src/contracts/recording_preview/deps/ori/walrus_data.ts +36 -0
- package/src/contracts/recording_preview/recording_preview.ts +154 -0
- package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +152 -35
- package/src/contracts/recording_royalty_pool/witness.ts +7 -0
- package/src/contracts/release_description/release_description.ts +167 -0
- package/src/contracts/release_dsp_link/release_dsp_link.ts +813 -0
- package/src/contracts/release_genre/deps/per_track/per_track.ts +36 -0
- package/src/contracts/release_genre/release_genre.ts +314 -0
- package/src/contracts/release_kind/release_kind.ts +153 -0
- package/src/contracts/release_revenue_distributor/release_revenue_distributor.ts +178 -0
- package/src/contracts/release_revenue_distributor/witness.ts +11 -0
- package/src/contracts/release_snapshot_bundle/deps/ori/walrus_data.ts +36 -0
- package/src/contracts/release_snapshot_bundle/release_snapshot_bundle.ts +124 -0
- package/src/contracts/routed_stake/deps/royalty_pool/stake.ts +39 -0
- package/src/contracts/routed_stake/deps/std/type_name.ts +22 -0
- package/src/contracts/routed_stake/deps/sui/balance.ts +17 -0
- package/src/contracts/routed_stake/deps/sui/vec_map.ts +33 -0
- package/src/contracts/routed_stake/routed_stake.ts +508 -0
- package/src/contracts/royalty_pool/pool.ts +34 -24
- package/src/contracts/vault/deps/sui/bag.ts +39 -0
- package/src/contracts/vault/deps/sui/borrow.ts +25 -0
- package/src/contracts/vault/vault.ts +454 -0
- package/src/contracts.ts +17 -9
- package/src/cover.ts +62 -37
- package/src/credits.ts +64 -51
- package/src/deployments.ts +36 -97
- package/src/index.ts +11 -5
- package/src/pressing.ts +135 -39
- package/src/read/artist.ts +3 -3
- package/src/read/catalog.ts +100 -44
- package/src/read/client.ts +20 -4
- package/src/read/config.ts +23 -49
- package/src/read/index.ts +3 -1
- package/src/read/receipts.ts +103 -26
- package/src/read/types.ts +46 -27
- package/src/read/works.ts +6 -1
- package/src/recording-extensions.ts +102 -0
- package/src/release-extensions.ts +286 -0
- package/src/release-graph.ts +70 -96
- package/src/transactions.ts +81 -59
- package/src/vault.ts +777 -0
- package/dist/contracts/miso_drop/drop.d.ts +0 -550
- package/dist/contracts/miso_drop/drop.d.ts.map +0 -1
- package/dist/contracts/miso_drop/drop.js +0 -523
- package/dist/contracts/miso_drop/drop.js.map +0 -1
- package/dist/contracts/release_registry/release_registry.d.ts +0 -114
- package/dist/contracts/release_registry/release_registry.d.ts.map +0 -1
- package/dist/contracts/release_registry/release_registry.js +0 -119
- package/dist/contracts/release_registry/release_registry.js.map +0 -1
- package/dist/drop.d.ts +0 -127
- package/dist/drop.d.ts.map +0 -1
- package/dist/drop.js +0 -202
- package/dist/drop.js.map +0 -1
- package/dist/extensions/royalty-pool.d.ts +0 -32
- package/dist/extensions/royalty-pool.d.ts.map +0 -1
- package/dist/extensions/royalty-pool.js +0 -33
- package/dist/extensions/royalty-pool.js.map +0 -1
- package/src/contracts/miso_drop/drop.ts +0 -798
- package/src/contracts/release_registry/release_registry.ts +0 -160
- package/src/drop.ts +0 -376
- package/src/extensions/royalty-pool.ts +0 -90
package/src/read/config.ts
CHANGED
|
@@ -4,13 +4,12 @@
|
|
|
4
4
|
// Per-network on-chain identity: which packages the reads address, which objects
|
|
5
5
|
// they read, and which endpoints they read through. Every id that used to be a
|
|
6
6
|
// hard-coded constant inside miso-app (`lib/party.ts`, `lib/release.ts`,
|
|
7
|
-
// `lib/money.ts`, `lib/
|
|
7
|
+
// `lib/money.ts`, `lib/pressing.ts`) lives here instead, so a redeploy is a change
|
|
8
8
|
// in ONE file that every surface picks up.
|
|
9
9
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
import { MISO_PLATFORM_DEPLOYMENTS } from "../deployments.ts";
|
|
10
|
+
// There are intentionally no baked network IDs while the immutable stack is
|
|
11
|
+
// republished. A read client must receive a complete verified configuration from
|
|
12
|
+
// its caller; silently retaining the old ABI would be unsafe.
|
|
14
13
|
|
|
15
14
|
export type Network = "testnet" | "mainnet";
|
|
16
15
|
|
|
@@ -25,15 +24,12 @@ export function networkFrom(value: string | undefined): Network {
|
|
|
25
24
|
export interface ProtocolIds {
|
|
26
25
|
/** `miso` core — Composition / Recording / Release, and the origin of every derived admin cap. */
|
|
27
26
|
miso: string;
|
|
28
|
-
/** `
|
|
29
|
-
|
|
27
|
+
/** `miso_pressing` — permanent Pressing runs and per-currency Listings. */
|
|
28
|
+
pressing: string;
|
|
30
29
|
/** `miso_record` package — the exact owner/type namespace for `record::Record`. */
|
|
31
30
|
record: string;
|
|
32
31
|
/** `miso_record` shared `Settings` object — the mint witness authorizer. */
|
|
33
32
|
recordSettings: string;
|
|
34
|
-
/** Release coordinator package and its shared derivation-parent object. */
|
|
35
|
-
releaseRegistry: string;
|
|
36
|
-
releaseRegistryId: string;
|
|
37
33
|
/** `release_cover_art` — the release cover extension. */
|
|
38
34
|
releaseCoverArt: string;
|
|
39
35
|
/** `composition_credits` / `recording_credits` / `release_credits` extensions. */
|
|
@@ -65,7 +61,7 @@ export interface PartyIds {
|
|
|
65
61
|
|
|
66
62
|
/** The currency the app prices records in, and where test dollars come from. */
|
|
67
63
|
export interface MoneyIds {
|
|
68
|
-
/** Coin type balances,
|
|
64
|
+
/** Coin type balances, listings, and purchases are denominated in. */
|
|
69
65
|
usdCoinType: string;
|
|
70
66
|
usdDecimals: number;
|
|
71
67
|
}
|
|
@@ -91,54 +87,32 @@ export interface MisoConfig {
|
|
|
91
87
|
* public host to hand back a URL a browser can actually fetch.
|
|
92
88
|
*/
|
|
93
89
|
apiBaseUrl: string;
|
|
94
|
-
/**
|
|
95
|
-
|
|
90
|
+
/** Explicit currency offers on the Discover shelf, in display order. */
|
|
91
|
+
discoverSales: readonly DiscoverSale[];
|
|
96
92
|
}
|
|
97
93
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
record: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.record,
|
|
104
|
-
recordSettings: MISO_PLATFORM_DEPLOYMENTS.testnet.objects.recordSettings,
|
|
105
|
-
releaseRegistry: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.releaseRegistry,
|
|
106
|
-
releaseRegistryId: MISO_PLATFORM_DEPLOYMENTS.testnet.objects.releaseRegistry,
|
|
107
|
-
releaseCoverArt: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.releaseCoverArt,
|
|
108
|
-
compositionCredits: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.compositionCredits,
|
|
109
|
-
recordingCredits: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.recordingCredits,
|
|
110
|
-
releaseCredits: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.releaseCredits,
|
|
111
|
-
credit: MISO_PLATFORM_DEPLOYMENTS.testnet.packages.credit,
|
|
112
|
-
},
|
|
113
|
-
party: MISO_PLATFORM_DEPLOYMENTS.testnet.party,
|
|
114
|
-
money: {
|
|
115
|
-
usdCoinType: "0x77774cb7b8cb5622b4ef2658101bf5f1e965418297fe874b683df8f760b6e749::fakeusd::FakeUsd",
|
|
116
|
-
usdDecimals: 6,
|
|
117
|
-
},
|
|
118
|
-
grpcUrl: "https://fullnode.testnet.sui.io",
|
|
119
|
-
graphqlUrl: "https://graphql.testnet.sui.io/graphql",
|
|
120
|
-
walrusAggregatorUrl: "https://aggregator.walrus-testnet.walrus.space",
|
|
121
|
-
apiBaseUrl: "https://api.testnet.miso.fm",
|
|
122
|
-
// Content from the retired deployment is intentionally not carried forward.
|
|
123
|
-
discoverReleaseIds: [],
|
|
124
|
-
};
|
|
94
|
+
/** One release/currency pair to resolve by Pressing and Listing derived address. */
|
|
95
|
+
export interface DiscoverSale {
|
|
96
|
+
releaseId: string;
|
|
97
|
+
currencyType: string;
|
|
98
|
+
}
|
|
125
99
|
|
|
126
100
|
/** Fields a deployment may override without forking the whole config (endpoints, shelf). */
|
|
127
101
|
export type MisoConfigOverrides = Partial<
|
|
128
|
-
Pick<MisoConfig, "grpcUrl" | "graphqlUrl" | "walrusAggregatorUrl" | "apiBaseUrl" | "
|
|
102
|
+
Pick<MisoConfig, "grpcUrl" | "graphqlUrl" | "walrusAggregatorUrl" | "apiBaseUrl" | "discoverSales">
|
|
129
103
|
>;
|
|
130
104
|
|
|
131
105
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
106
|
+
* Bundled read configuration is disabled until the admin-cli publish flow has
|
|
107
|
+
* recorded every new immutable package and singleton object. This is fail-closed
|
|
108
|
+
* by design: old testnet types cannot be mistaken for the current ABI.
|
|
134
109
|
*/
|
|
135
110
|
export function misoConfig(network: Network, overrides: MisoConfigOverrides = {}): MisoConfig {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return { ...TESTNET, ...stripUndefined(overrides) };
|
|
111
|
+
void overrides;
|
|
112
|
+
throw new Error(
|
|
113
|
+
`@misofm/sdk/read: no bundled Miso platform deployment for network "${network}". ` +
|
|
114
|
+
"Pass a complete verified MisoConfig to createMisoClient instead.",
|
|
115
|
+
);
|
|
142
116
|
}
|
|
143
117
|
|
|
144
118
|
/** `{ a: undefined }` must not clobber a real default when spread. */
|
package/src/read/index.ts
CHANGED
|
@@ -21,6 +21,7 @@ export { misoConfig, networkFrom } from "./config.ts";
|
|
|
21
21
|
export type {
|
|
22
22
|
MisoConfig,
|
|
23
23
|
MisoConfigOverrides,
|
|
24
|
+
DiscoverSale,
|
|
24
25
|
MoneyIds,
|
|
25
26
|
Network,
|
|
26
27
|
PartyIds,
|
|
@@ -30,12 +31,13 @@ export type {
|
|
|
30
31
|
export {
|
|
31
32
|
currencyInfo,
|
|
32
33
|
getDiscoverShelf,
|
|
33
|
-
getDropPreview,
|
|
34
34
|
getPressingDetail,
|
|
35
|
+
getPressingPreview,
|
|
35
36
|
getRecordAlbum,
|
|
36
37
|
getReleaseDetail,
|
|
37
38
|
getReleaseResources,
|
|
38
39
|
getTrackCredits,
|
|
40
|
+
getSaleDetail,
|
|
39
41
|
primaryArtistNames,
|
|
40
42
|
readReleaseCover,
|
|
41
43
|
} from "./catalog.ts";
|
package/src/read/receipts.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
//
|
|
6
6
|
// The transaction digest is the receipt's identity: everything shown is
|
|
7
7
|
// re-derived from chain state, so a receipt link survives a refresh, a deep link,
|
|
8
|
-
// or a share to another device. `
|
|
8
|
+
// or a share to another device. `listing::buy` emits ONE `RecordSoldEvent` carrying
|
|
9
9
|
// the copy that was minted, its number in the run, and what the buyer paid.
|
|
10
10
|
//
|
|
11
11
|
// Two reads, in order, because a receipt is opened at two very different ages:
|
|
@@ -20,21 +20,22 @@
|
|
|
20
20
|
// read walks. We show the buyer that arithmetic, in the same truncating integer
|
|
21
21
|
// math the chain does.
|
|
22
22
|
|
|
23
|
-
import * as
|
|
23
|
+
import * as listingContract from "../contracts/miso_pressing/listing.ts";
|
|
24
24
|
import {
|
|
25
25
|
extractTypeParams2,
|
|
26
26
|
getCompositionsByIds,
|
|
27
27
|
} from "@misonetwork/sdk";
|
|
28
|
+
import { normalizeStructTag, normalizeSuiAddress } from "@mysten/sui/utils";
|
|
28
29
|
import { getPressingDetail } from "./catalog.ts";
|
|
29
30
|
import type { MisoClient } from "./client.ts";
|
|
30
31
|
import { int, u64 } from "./internal/scalars.ts";
|
|
31
|
-
import type { PressingDetail, PurchaseReceipt, RecordSale, TrackRoyalty } from "./types.ts";
|
|
32
|
+
import type { Price, PressingDetail, PurchaseReceipt, RecordSale, TrackRoyalty } from "./types.ts";
|
|
32
33
|
import { getWorkAddressesByShareTypes } from "./works.ts";
|
|
33
34
|
|
|
34
35
|
const BPS = 10_000n;
|
|
35
36
|
|
|
36
|
-
/**
|
|
37
|
-
const
|
|
37
|
+
/** `miso_pressing::listing::RecordSoldEvent<Currency>` — emitted by `listing::buy`. */
|
|
38
|
+
const RECORD_SOLD_EVENT_NAME = "listing::RecordSoldEvent";
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
41
|
* How long to wait for the fullnode to have the transaction before falling back
|
|
@@ -53,6 +54,24 @@ function coerceBigInt(v: unknown): bigint | null {
|
|
|
53
54
|
return null;
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
function priceFromUnknown(value: unknown): Price | null {
|
|
58
|
+
if (!value || typeof value !== "object") return null;
|
|
59
|
+
const variants = value as {
|
|
60
|
+
$kind?: string;
|
|
61
|
+
Fixed?: { amount?: unknown };
|
|
62
|
+
Floor?: { amount?: unknown };
|
|
63
|
+
fixed?: { amount?: unknown };
|
|
64
|
+
floor?: { amount?: unknown };
|
|
65
|
+
};
|
|
66
|
+
const fixed = variants.$kind === "Fixed" || variants.Fixed != null || variants.fixed != null;
|
|
67
|
+
const amount = coerceBigInt(
|
|
68
|
+
fixed
|
|
69
|
+
? (variants.Fixed ?? variants.fixed)?.amount
|
|
70
|
+
: (variants.Floor ?? variants.floor)?.amount,
|
|
71
|
+
);
|
|
72
|
+
return amount == null ? null : { kind: fixed ? "fixed" : "floor", amount: amount.toString() };
|
|
73
|
+
}
|
|
74
|
+
|
|
56
75
|
/**
|
|
57
76
|
* The event's JSON projection — the fallback for transports that surface `json`
|
|
58
77
|
* but no BCS. Field names are the Move ones (snake_case).
|
|
@@ -61,35 +80,83 @@ function saleFromJson(json: Record<string, unknown>): RecordSale | null {
|
|
|
61
80
|
const number = coerceBigInt(json.number);
|
|
62
81
|
const paid = coerceBigInt(json.paid);
|
|
63
82
|
const recordId = json.record_id;
|
|
64
|
-
|
|
83
|
+
const price = priceFromUnknown(json.price);
|
|
84
|
+
if (number == null || paid == null || !price || typeof recordId !== "string") return null;
|
|
65
85
|
return {
|
|
66
|
-
|
|
86
|
+
listingId: typeof json.listing_id === "string" ? json.listing_id : "",
|
|
87
|
+
pressingId: typeof json.pressing_id === "string" ? json.pressing_id : "",
|
|
67
88
|
releaseId: typeof json.release_id === "string" ? json.release_id : "",
|
|
68
|
-
edition: int(coerceBigInt(json.edition) ?? 0n),
|
|
69
89
|
recordId,
|
|
70
90
|
number: number.toString(),
|
|
71
91
|
paid: paid.toString(),
|
|
92
|
+
price,
|
|
72
93
|
buyer: typeof json.buyer === "string" ? json.buyer : "",
|
|
73
94
|
};
|
|
74
95
|
}
|
|
75
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Whether `eventType` is this deployment's `listing::RecordSoldEvent<Currency>`.
|
|
99
|
+
*
|
|
100
|
+
* Event BCS is structural, so a same-shaped event from another package must never
|
|
101
|
+
* be decoded as a Miso sale. Normalize both package/type tags and require exactly
|
|
102
|
+
* one (possibly nested) currency type argument.
|
|
103
|
+
*/
|
|
104
|
+
export function isRecordSoldEventType(
|
|
105
|
+
eventType: string,
|
|
106
|
+
misoPressingPackageId: string,
|
|
107
|
+
): boolean {
|
|
108
|
+
let tag: string;
|
|
109
|
+
try {
|
|
110
|
+
tag = normalizeStructTag(eventType);
|
|
111
|
+
} catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const prefix = `${normalizeSuiAddress(misoPressingPackageId)}::${RECORD_SOLD_EVENT_NAME}`;
|
|
116
|
+
if (!tag.startsWith(`${prefix}<`) || !tag.endsWith(">")) return false;
|
|
117
|
+
|
|
118
|
+
const typeArgument = tag.slice(prefix.length + 1, -1);
|
|
119
|
+
if (!typeArgument) return false;
|
|
120
|
+
let depth = 0;
|
|
121
|
+
for (const char of typeArgument) {
|
|
122
|
+
if (char === "<") depth += 1;
|
|
123
|
+
else if (char === ">") {
|
|
124
|
+
depth -= 1;
|
|
125
|
+
if (depth < 0) return false;
|
|
126
|
+
} else if (char === "," && depth === 0) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return depth === 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
76
133
|
/**
|
|
77
134
|
* The sale a transaction recorded, or null if it emitted none. BCS is the stable
|
|
78
135
|
* shape (a JSON projection's field names vary by transport), so it is tried first.
|
|
79
136
|
*/
|
|
80
|
-
function
|
|
137
|
+
export function findRecordSale(
|
|
138
|
+
events: {
|
|
139
|
+
eventType: string;
|
|
140
|
+
bcs: Uint8Array;
|
|
141
|
+
json: Record<string, unknown> | null;
|
|
142
|
+
}[],
|
|
143
|
+
misoPressingPackageId: string,
|
|
144
|
+
): RecordSale | null {
|
|
81
145
|
for (const e of events) {
|
|
82
|
-
if (!e.eventType
|
|
146
|
+
if (!isRecordSoldEventType(e.eventType, misoPressingPackageId)) continue;
|
|
83
147
|
try {
|
|
84
148
|
// The generated struct decodes addresses to 0x-hex and u64s to decimal strings.
|
|
85
|
-
const s =
|
|
149
|
+
const s = listingContract.RecordSoldEvent.parse(e.bcs);
|
|
150
|
+
const price = priceFromUnknown(s.price);
|
|
151
|
+
if (!price) continue;
|
|
86
152
|
return {
|
|
87
|
-
|
|
153
|
+
listingId: s.listing_id,
|
|
154
|
+
pressingId: s.pressing_id,
|
|
88
155
|
releaseId: s.release_id,
|
|
89
|
-
edition: int(s.edition),
|
|
90
156
|
recordId: s.record_id,
|
|
91
157
|
number: u64(s.number),
|
|
92
158
|
paid: u64(s.paid),
|
|
159
|
+
price,
|
|
93
160
|
buyer: s.buyer,
|
|
94
161
|
};
|
|
95
162
|
} catch {
|
|
@@ -111,7 +178,10 @@ async function saleFromFullnode(client: MisoClient, txDigest: string): Promise<R
|
|
|
111
178
|
if (result.$kind !== "Transaction" || !result.Transaction.status.success) {
|
|
112
179
|
throw new Error(`Transaction did not succeed: ${txDigest}`);
|
|
113
180
|
}
|
|
114
|
-
const sale =
|
|
181
|
+
const sale = findRecordSale(
|
|
182
|
+
result.Transaction.events,
|
|
183
|
+
client.config.protocol.pressing,
|
|
184
|
+
);
|
|
115
185
|
if (!sale) throw new Error(`No record purchase in transaction ${txDigest}`);
|
|
116
186
|
return sale;
|
|
117
187
|
}
|
|
@@ -148,7 +218,15 @@ async function saleFromIndexer(client: MisoClient, txDigest: string): Promise<Re
|
|
|
148
218
|
|
|
149
219
|
for (const node of effects.events?.nodes ?? []) {
|
|
150
220
|
const contents = node.contents;
|
|
151
|
-
if (
|
|
221
|
+
if (
|
|
222
|
+
!contents ||
|
|
223
|
+
!isRecordSoldEventType(
|
|
224
|
+
contents.type.repr,
|
|
225
|
+
client.config.protocol.pressing,
|
|
226
|
+
)
|
|
227
|
+
) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
152
230
|
const sale =
|
|
153
231
|
typeof contents.json === "object" && contents.json !== null
|
|
154
232
|
? saleFromJson(contents.json as Record<string, unknown>)
|
|
@@ -233,22 +311,21 @@ export function breakdown(
|
|
|
233
311
|
}
|
|
234
312
|
|
|
235
313
|
/**
|
|
236
|
-
* The receipt for `txDigest
|
|
314
|
+
* The receipt for `txDigest`. The event identifies the exact immutable Pressing
|
|
315
|
+
* and Listing; callers cannot accidentally reinterpret a Pressing id as a
|
|
316
|
+
* retired drop id.
|
|
237
317
|
*
|
|
238
|
-
* The sale
|
|
239
|
-
*
|
|
240
|
-
* exists (a superseded edition), which the caller renders as "not found" rather
|
|
241
|
-
* than as an error.
|
|
318
|
+
* The sale identifies the Pressing before its detail is fetched. `null` only when
|
|
319
|
+
* that immutable Pressing cannot be read; it is never superseded or destroyed.
|
|
242
320
|
*/
|
|
243
321
|
export async function getPurchaseReceipt(
|
|
244
322
|
client: MisoClient,
|
|
245
|
-
pressingId: string,
|
|
246
323
|
txDigest: string,
|
|
247
324
|
): Promise<PurchaseReceipt | null> {
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
325
|
+
const sale = await saleFromFullnode(client, txDigest).catch(() =>
|
|
326
|
+
saleFromIndexer(client, txDigest),
|
|
327
|
+
);
|
|
328
|
+
const detail = await getPressingDetail(client, sale.pressingId);
|
|
252
329
|
if (!detail) return null;
|
|
253
330
|
|
|
254
331
|
// Best-effort: a failed composition lookup costs the sub-rows, not the page.
|
|
@@ -260,7 +337,7 @@ export async function getPurchaseReceipt(
|
|
|
260
337
|
return {
|
|
261
338
|
sale,
|
|
262
339
|
detail,
|
|
263
|
-
price:
|
|
340
|
+
price: sale.price.amount,
|
|
264
341
|
tracks: breakdown(detail.release.tracks, sale.paid, rates),
|
|
265
342
|
};
|
|
266
343
|
}
|
package/src/read/types.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
//
|
|
6
6
|
// ONE RULE GOVERNS THIS FILE: these shapes must survive `JSON.stringify`.
|
|
7
7
|
//
|
|
8
|
-
// The protocol SDK hands back `bigint` for every u64/u128 (
|
|
9
|
-
//
|
|
8
|
+
// The protocol SDK hands back `bigint` for every u64/u128 (pressing supply, listing
|
|
9
|
+
// prices, timestamps, balances). `JSON.stringify` THROWS on a bigint, so a
|
|
10
10
|
// view type that carries one cannot cross an HTTP boundary — it would work in the
|
|
11
11
|
// browser-direct world these shapes came from and fail the moment an API serves
|
|
12
12
|
// them. Every such field is therefore a DECIMAL STRING here, converted once at the
|
|
@@ -69,6 +69,8 @@ export interface TrackView {
|
|
|
69
69
|
no: string;
|
|
70
70
|
title: string;
|
|
71
71
|
recordingId: string;
|
|
72
|
+
/** ID of the composition underlying this track's recording. */
|
|
73
|
+
compositionId: string;
|
|
72
74
|
/** This track's share of the release's revenue, in basis points. */
|
|
73
75
|
splitBps: number;
|
|
74
76
|
/** 1-based disc this track sits on. */
|
|
@@ -102,28 +104,40 @@ export interface Price {
|
|
|
102
104
|
|
|
103
105
|
/** Symbol + decimals for a pressing's currency, resolved from its coin type. */
|
|
104
106
|
export interface Currency {
|
|
105
|
-
/** Full Move coin type, or null when the
|
|
107
|
+
/** Full Move coin type, or null when the Listing type tag was unreadable. */
|
|
106
108
|
type: string | null;
|
|
107
109
|
symbol: string;
|
|
108
110
|
decimals: number;
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
/** A
|
|
113
|
+
/** A permanent record-production run derived from a release. */
|
|
112
114
|
export interface PressingView {
|
|
113
115
|
id: string;
|
|
114
116
|
releaseId: string;
|
|
115
|
-
|
|
117
|
+
/** The one run-wide sale switch. Scheduled carries its opening time. */
|
|
118
|
+
state:
|
|
119
|
+
| { kind: "scheduled"; startTimestampMs: number }
|
|
120
|
+
| { kind: "active" }
|
|
121
|
+
| { kind: "paused" };
|
|
122
|
+
/** Records pressed so far, decimal string. The run is intentionally uncapped. */
|
|
123
|
+
supply: string;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** One permanent currency offer derived from a Pressing. */
|
|
127
|
+
export interface ListingView {
|
|
128
|
+
id: string;
|
|
129
|
+
pressingId: string;
|
|
130
|
+
releaseId: string;
|
|
116
131
|
price: Price;
|
|
117
132
|
currency: Currency;
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
soldOut: boolean;
|
|
133
|
+
/** The per-currency switch; the Pressing state still governs every purchase. */
|
|
134
|
+
state: "enabled" | "disabled";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** A Pressing plus the requested currency's Listing. */
|
|
138
|
+
export interface SaleView {
|
|
139
|
+
pressing: PressingView;
|
|
140
|
+
listing: ListingView;
|
|
127
141
|
}
|
|
128
142
|
|
|
129
143
|
/** Everything the pressing buy page renders. */
|
|
@@ -132,9 +146,15 @@ export interface PressingDetail {
|
|
|
132
146
|
release: ReleaseDetail;
|
|
133
147
|
}
|
|
134
148
|
|
|
149
|
+
/** Everything a currency-specific buy page renders. */
|
|
150
|
+
export interface SaleDetail {
|
|
151
|
+
sale: SaleView;
|
|
152
|
+
release: ReleaseDetail;
|
|
153
|
+
}
|
|
154
|
+
|
|
135
155
|
/** One tile on the Discover shelf. */
|
|
136
156
|
export interface DiscoverItem {
|
|
137
|
-
|
|
157
|
+
sale: SaleView;
|
|
138
158
|
releaseId: string;
|
|
139
159
|
title: string;
|
|
140
160
|
/** Primary artists, joined for display. Empty when no credits are set. */
|
|
@@ -151,14 +171,14 @@ export interface RecordAlbum {
|
|
|
151
171
|
release?: ReleaseDetail | null;
|
|
152
172
|
}
|
|
153
173
|
|
|
154
|
-
/** The confirmation preview shown when an owner pastes a
|
|
155
|
-
export interface
|
|
174
|
+
/** The confirmation preview shown when an owner pastes a Pressing id to pin. */
|
|
175
|
+
export interface PressingPreview {
|
|
156
176
|
pressingId: string;
|
|
157
|
-
currency: Currency;
|
|
158
177
|
title: string;
|
|
159
178
|
subtitle: string | null;
|
|
160
179
|
coverUrl: string | null;
|
|
161
|
-
|
|
180
|
+
state: PressingView["state"];
|
|
181
|
+
supply: string;
|
|
162
182
|
trackCount: number;
|
|
163
183
|
}
|
|
164
184
|
|
|
@@ -247,7 +267,7 @@ export interface ArtistProfile {
|
|
|
247
267
|
avatarUrl: string;
|
|
248
268
|
}
|
|
249
269
|
|
|
250
|
-
/** A party's pinned
|
|
270
|
+
/** A party's pinned Pressing, fully resolved. Null when nothing is pinned. */
|
|
251
271
|
export interface FeaturedRelease {
|
|
252
272
|
pressingId: string;
|
|
253
273
|
releaseId: string;
|
|
@@ -343,15 +363,17 @@ export interface Ownership {
|
|
|
343
363
|
|
|
344
364
|
/** The sale itself, as the chain recorded it. */
|
|
345
365
|
export interface RecordSale {
|
|
346
|
-
|
|
366
|
+
listingId: string;
|
|
367
|
+
pressingId: string;
|
|
347
368
|
releaseId: string;
|
|
348
|
-
edition: number;
|
|
349
369
|
/** The `Record` object minted to the buyer. */
|
|
350
370
|
recordId: string;
|
|
351
|
-
/** This copy's number in the
|
|
371
|
+
/** This copy's number in the Pressing run (1-based), decimal string. */
|
|
352
372
|
number: string;
|
|
353
373
|
/** What the buyer actually paid, in the currency's base units. */
|
|
354
374
|
paid: string;
|
|
375
|
+
/** The fixed or floor price that the Listing accepted at this sale. */
|
|
376
|
+
price: Price;
|
|
355
377
|
buyer: string;
|
|
356
378
|
}
|
|
357
379
|
|
|
@@ -376,10 +398,7 @@ export interface PurchaseReceipt {
|
|
|
376
398
|
sale: RecordSale;
|
|
377
399
|
/** The pressing/release the copy came from — cover, title, tracklist. */
|
|
378
400
|
detail: PressingDetail;
|
|
379
|
-
/**
|
|
380
|
-
* The drop's list price. Differs from `sale.paid` when the buyer paid over a
|
|
381
|
-
* floor price, or when the price changed in a later edition.
|
|
382
|
-
*/
|
|
401
|
+
/** The Listing price captured at sale time, not its mutable current value. */
|
|
383
402
|
price: string;
|
|
384
403
|
tracks: TrackRoyalty[];
|
|
385
404
|
}
|
package/src/read/works.ts
CHANGED
|
@@ -173,7 +173,11 @@ function parseComposition(id: string, content: Uint8Array): Composition {
|
|
|
173
173
|
|
|
174
174
|
function parseRecording(id: string, content: Uint8Array): Recording {
|
|
175
175
|
const value = contracts.recording.Recording.parse(content) as Parsed;
|
|
176
|
-
return {
|
|
176
|
+
return {
|
|
177
|
+
id,
|
|
178
|
+
state: workState(value.state),
|
|
179
|
+
compositionId: String(value.composition_id),
|
|
180
|
+
};
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
export function parseReleaseObject(
|
|
@@ -187,6 +191,7 @@ export function parseReleaseObject(
|
|
|
187
191
|
title: String(value.title),
|
|
188
192
|
tracks: (value.tracks ?? []).map((track: Parsed) => ({
|
|
189
193
|
state: (track.state?.$kind ?? "Unassigned") as TrackState,
|
|
194
|
+
compositionId: String(track.composition_id),
|
|
190
195
|
recordingId: String(track.recording_id),
|
|
191
196
|
splitBps: {
|
|
192
197
|
value: Number(
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Copyright (c) Miso Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/** Cap-authorized builders for data-only Recording metadata extensions. */
|
|
5
|
+
|
|
6
|
+
import type { TransactionArgument } from "@mysten/sui/transactions";
|
|
7
|
+
import type { TxThunk } from "./transactions.ts";
|
|
8
|
+
import { invokeWithAdminCap, type AdminCapAuthority } from "./vault.ts";
|
|
9
|
+
import * as advisory from "./contracts/recording_advisory/recording_advisory.ts";
|
|
10
|
+
import * as language from "./contracts/recording_language/recording_language.ts";
|
|
11
|
+
import * as masterReference from "./contracts/recording_master_reference/recording_master_reference.ts";
|
|
12
|
+
import * as preview from "./contracts/recording_preview/recording_preview.ts";
|
|
13
|
+
|
|
14
|
+
export interface RecordingExtensionTarget {
|
|
15
|
+
readonly recordingId: string;
|
|
16
|
+
readonly authority: AdminCapAuthority;
|
|
17
|
+
readonly recordingShareType: string;
|
|
18
|
+
readonly compositionShareType: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Rating = "Explicit" | "NotExplicit" | "Cleaned";
|
|
22
|
+
export interface SetRecordingAdvisoryParams extends RecordingExtensionTarget {
|
|
23
|
+
readonly recordingAdvisoryPackageId: string;
|
|
24
|
+
readonly rating: Rating;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function setRecordingAdvisory(p: SetRecordingAdvisoryParams): TxThunk {
|
|
28
|
+
return (tx) => {
|
|
29
|
+
const rating = tx.add(
|
|
30
|
+
p.rating === "Explicit" ? advisory.explicit({ package: p.recordingAdvisoryPackageId })
|
|
31
|
+
: p.rating === "NotExplicit" ? advisory.notExplicit({ package: p.recordingAdvisoryPackageId })
|
|
32
|
+
: advisory.cleaned({ package: p.recordingAdvisoryPackageId }),
|
|
33
|
+
);
|
|
34
|
+
invokeWithAdminCap(tx, p.authority, {
|
|
35
|
+
target: `${p.recordingAdvisoryPackageId}::recording_advisory::set_rating`,
|
|
36
|
+
typeArguments: [p.recordingShareType, p.compositionShareType],
|
|
37
|
+
arguments: [tx.object(p.recordingId), rating],
|
|
38
|
+
adminCapIndex: 1,
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface SetRecordingLanguagesParams extends RecordingExtensionTarget {
|
|
44
|
+
readonly recordingLanguagePackageId: string;
|
|
45
|
+
/** A vector<LanguageCode> built by the language-code package in this PTB. */
|
|
46
|
+
readonly languages: TransactionArgument;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function setRecordingLanguages(p: SetRecordingLanguagesParams): TxThunk {
|
|
50
|
+
return (tx) => {
|
|
51
|
+
invokeWithAdminCap(tx, p.authority, {
|
|
52
|
+
target: `${p.recordingLanguagePackageId}::recording_language::set_languages`,
|
|
53
|
+
typeArguments: [p.recordingShareType, p.compositionShareType],
|
|
54
|
+
arguments: [tx.object(p.recordingId), p.languages],
|
|
55
|
+
adminCapIndex: 1,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function setRecordingInstrumental(p: Omit<SetRecordingLanguagesParams, "languages">): TxThunk {
|
|
61
|
+
return (tx) => {
|
|
62
|
+
invokeWithAdminCap(tx, p.authority, {
|
|
63
|
+
target: `${p.recordingLanguagePackageId}::recording_language::set_instrumental`,
|
|
64
|
+
typeArguments: [p.recordingShareType, p.compositionShareType],
|
|
65
|
+
arguments: [tx.object(p.recordingId)],
|
|
66
|
+
adminCapIndex: 1,
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface RecordingWalrusReferenceParams extends RecordingExtensionTarget {
|
|
72
|
+
/** An ori::WalrusData value assembled in the same PTB (must be a standalone blob on chain). */
|
|
73
|
+
readonly reference: TransactionArgument;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface SetRecordingMasterReferenceParams extends RecordingWalrusReferenceParams {
|
|
77
|
+
readonly recordingMasterReferencePackageId: string;
|
|
78
|
+
}
|
|
79
|
+
export function setRecordingMasterReference(p: SetRecordingMasterReferenceParams): TxThunk {
|
|
80
|
+
return (tx) => {
|
|
81
|
+
invokeWithAdminCap(tx, p.authority, {
|
|
82
|
+
target: `${p.recordingMasterReferencePackageId}::recording_master_reference::set_master_reference`,
|
|
83
|
+
typeArguments: [p.recordingShareType, p.compositionShareType],
|
|
84
|
+
arguments: [tx.object(p.recordingId), p.reference],
|
|
85
|
+
adminCapIndex: 1,
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface SetRecordingPreviewParams extends RecordingWalrusReferenceParams {
|
|
91
|
+
readonly recordingPreviewPackageId: string;
|
|
92
|
+
}
|
|
93
|
+
export function setRecordingPreview(p: SetRecordingPreviewParams): TxThunk {
|
|
94
|
+
return (tx) => {
|
|
95
|
+
invokeWithAdminCap(tx, p.authority, {
|
|
96
|
+
target: `${p.recordingPreviewPackageId}::recording_preview::set_preview`,
|
|
97
|
+
typeArguments: [p.recordingShareType, p.compositionShareType],
|
|
98
|
+
arguments: [tx.object(p.recordingId), p.reference],
|
|
99
|
+
adminCapIndex: 1,
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
}
|