@misofm/sdk 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +37 -5
  2. package/dist/catalog.d.ts +30 -0
  3. package/dist/catalog.d.ts.map +1 -1
  4. package/dist/catalog.js +60 -1
  5. package/dist/catalog.js.map +1 -1
  6. package/dist/contracts/miso_drop/drop.d.ts +550 -0
  7. package/dist/contracts/miso_drop/drop.d.ts.map +1 -0
  8. package/dist/contracts/miso_drop/drop.js +523 -0
  9. package/dist/contracts/miso_drop/drop.js.map +1 -0
  10. package/dist/contracts.d.ts +1 -0
  11. package/dist/contracts.d.ts.map +1 -1
  12. package/dist/contracts.js +3 -0
  13. package/dist/contracts.js.map +1 -1
  14. package/dist/credits.d.ts.map +1 -1
  15. package/dist/credits.js +4 -2
  16. package/dist/credits.js.map +1 -1
  17. package/dist/drop.d.ts +120 -0
  18. package/dist/drop.d.ts.map +1 -0
  19. package/dist/drop.js +152 -0
  20. package/dist/drop.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/read/artist.d.ts +24 -0
  26. package/dist/read/artist.d.ts.map +1 -0
  27. package/dist/read/artist.js +114 -0
  28. package/dist/read/artist.js.map +1 -0
  29. package/dist/read/catalog.d.ts +63 -0
  30. package/dist/read/catalog.d.ts.map +1 -0
  31. package/dist/read/catalog.js +252 -0
  32. package/dist/read/catalog.js.map +1 -0
  33. package/dist/read/client.d.ts +36 -0
  34. package/dist/read/client.d.ts.map +1 -0
  35. package/dist/read/client.js +46 -0
  36. package/dist/read/client.js.map +1 -0
  37. package/dist/read/config.d.ts +83 -0
  38. package/dist/read/config.d.ts.map +1 -0
  39. package/dist/read/config.js +76 -0
  40. package/dist/read/config.js.map +1 -0
  41. package/dist/read/genres.d.ts +7 -0
  42. package/dist/read/genres.d.ts.map +1 -0
  43. package/dist/read/genres.js +38 -0
  44. package/dist/read/genres.js.map +1 -0
  45. package/dist/read/index.d.ts +12 -0
  46. package/dist/read/index.d.ts.map +1 -0
  47. package/dist/read/index.js +23 -0
  48. package/dist/read/index.js.map +1 -0
  49. package/dist/read/internal/scalars.d.ts +23 -0
  50. package/dist/read/internal/scalars.d.ts.map +1 -0
  51. package/dist/read/internal/scalars.js +56 -0
  52. package/dist/read/internal/scalars.js.map +1 -0
  53. package/dist/read/internal/walrus.d.ts +4 -0
  54. package/dist/read/internal/walrus.d.ts.map +1 -0
  55. package/dist/read/internal/walrus.js +23 -0
  56. package/dist/read/internal/walrus.js.map +1 -0
  57. package/dist/read/receipts.d.ts +22 -0
  58. package/dist/read/receipts.d.ts.map +1 -0
  59. package/dist/read/receipts.js +233 -0
  60. package/dist/read/receipts.js.map +1 -0
  61. package/dist/read/types.d.ts +279 -0
  62. package/dist/read/types.d.ts.map +1 -0
  63. package/dist/read/types.js +21 -0
  64. package/dist/read/types.js.map +1 -0
  65. package/dist/read/wallet.d.ts +58 -0
  66. package/dist/read/wallet.d.ts.map +1 -0
  67. package/dist/read/wallet.js +325 -0
  68. package/dist/read/wallet.js.map +1 -0
  69. package/dist/read/works.d.ts +31 -0
  70. package/dist/read/works.d.ts.map +1 -0
  71. package/dist/read/works.js +106 -0
  72. package/dist/read/works.js.map +1 -0
  73. package/package.json +16 -3
  74. package/src/catalog.ts +118 -0
  75. package/src/contracts/miso_drop/drop.ts +798 -0
  76. package/src/contracts.ts +4 -0
  77. package/src/credits.ts +26 -12
  78. package/src/drop.ts +266 -0
  79. package/src/index.ts +5 -0
  80. package/src/read/artist.ts +136 -0
  81. package/src/read/catalog.ts +293 -0
  82. package/src/read/client.ts +79 -0
  83. package/src/read/config.ts +164 -0
  84. package/src/read/genres.ts +37 -0
  85. package/src/read/index.ts +53 -0
  86. package/src/read/internal/scalars.ts +57 -0
  87. package/src/read/internal/walrus.ts +32 -0
  88. package/src/read/receipts.ts +266 -0
  89. package/src/read/types.ts +361 -0
  90. package/src/read/wallet.ts +360 -0
  91. package/src/read/works.ts +164 -0
package/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # @misofm/sdk
2
2
 
3
- Typed reads and transaction builders for the **Miso platform layer** on Sui: the
4
- record production line and the sale of copies off it, the first-party protocol
5
- extensions (credits, cover art, royalty pools), and the opinionated publish flow
6
- (share economics, minato dispersal, whole-graph orchestration) built on top of
7
- `@misonetwork/sdk`'s bare protocol primitives.
3
+ The complete client SDK for the **Miso platform layer** on Sui: composed catalog,
4
+ artist, wallet, and receipt reads; the record production line and sale of copies;
5
+ first-party protocol extensions (credits, cover art, royalty pools); and the
6
+ opinionated publish flow built on `@misonetwork/sdk`'s bare protocol primitives.
8
7
 
9
8
  ## The split
10
9
 
@@ -94,6 +93,37 @@ Holding the ids yourself? Every builder and reader is exported bare, taking
94
93
  import { buyRecord, getSale } from "@misofm/sdk/pressing";
95
94
  ```
96
95
 
96
+ ### High-level platform reads
97
+
98
+ `@misofm/sdk/read` turns protocol, pressing, PartyOS, credits, cover, and wallet
99
+ objects into the JSON-safe views a client actually renders. It works in browsers,
100
+ Workers, and servers. Miso's HTTP API is a thin validated and cached transport over
101
+ this same surface, not a separate domain implementation.
102
+
103
+ ```ts
104
+ import {
105
+ createMisoClient,
106
+ getDiscoverShelf,
107
+ getReleaseDetail,
108
+ getOwnedRecords,
109
+ } from "@misofm/sdk/read";
110
+
111
+ const miso = createMisoClient({ network: "testnet" });
112
+
113
+ const discover = await getDiscoverShelf(miso);
114
+ const release = await getReleaseDetail(miso, releaseId);
115
+ const library = await getOwnedRecords(miso, walletAddress);
116
+ ```
117
+
118
+ The package root also exposes the same functions under the `read` namespace:
119
+
120
+ ```ts
121
+ import { read } from "@misofm/sdk";
122
+
123
+ const miso = read.createMisoClient({ network: "testnet" });
124
+ const artist = await read.getArtistProfile(miso, partyId);
125
+ ```
126
+
97
127
  ### Payment
98
128
 
99
129
  `listing::buy` takes a bare `Balance<Currency>`, and `buyRecord` sources it with
@@ -321,6 +351,8 @@ src/
321
351
  share-template.ts embedded `share` package bytecode
322
352
  credits.ts EXTENSION: contributor credits + the three role vocabularies
323
353
  cover.ts EXTENSION: release cover art (Walrus blob via ori)
354
+ drop.ts existing launch-drop compatibility surface
355
+ read/ high-level catalog, artist, wallet, and receipt views
324
356
  extensions/
325
357
  royalty-pool.ts EXTENSION: create + share a RoyaltyPool<Share, Currency>
326
358
  execute.ts executeViaExecutor, layered on @misonetwork/sdk's buildTx/toExecResult
package/dist/catalog.d.ts CHANGED
@@ -1,6 +1,36 @@
1
1
  import type { ClientWithCoreApi } from "@mysten/sui/client";
2
2
  import type { SuiGraphQLClient } from "@mysten/sui/graphql";
3
3
  import { type Recording } from "@misonetwork/sdk";
4
+ import { type CreditView, type RecordingCreditsView } from "./credits.ts";
5
+ export interface GetReleaseTrackCreditsOptions {
6
+ /** Core Miso package that defines Composition and Recording. */
7
+ misoPackageId: string;
8
+ /** Package that defines the composition_credits extension key. */
9
+ compositionCreditsPackageId: string;
10
+ /** Package that defines the recording_credits extension key. */
11
+ recordingCreditsPackageId: string;
12
+ }
13
+ export interface ReleaseTrackCredits {
14
+ compositionCredits: CreditView[];
15
+ recordingCredits: RecordingCreditsView;
16
+ }
17
+ /**
18
+ * Composition and recording credits for every track on a release, keyed by
19
+ * recording id.
20
+ *
21
+ * The read follows the chain's actual object graph instead of release credits:
22
+ * Release -> Recording -> Composition. Recording credit fields and recording
23
+ * type parameters are fetched together for every track. Composition addresses
24
+ * are then resolved concurrently, deduplicated, and all composition credit
25
+ * fields are fetched concurrently as well.
26
+ */
27
+ export declare function getReleaseTrackCredits(client: ClientWithCoreApi, graphqlClient: SuiGraphQLClient, releaseId: string, options: GetReleaseTrackCreditsOptions): Promise<Record<string, ReleaseTrackCredits>>;
28
+ /**
29
+ * Composition and recording credits for the supplied recordings, keyed by
30
+ * recording id. This form is intended for consumers that already loaded a
31
+ * release and do not need to fetch it again.
32
+ */
33
+ export declare function getTrackCreditsByRecordingIds(client: ClientWithCoreApi, graphqlClient: SuiGraphQLClient, recordingIdsInput: readonly string[], options: GetReleaseTrackCreditsOptions): Promise<Record<string, ReleaseTrackCredits>>;
4
34
  export interface GetAdministeredRecordingsOptions {
5
35
  /**
6
36
  * Maximum lookups in flight at once. The traversal is one lookup per admin
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gCAAgC;IAC/C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,gBAAgB,EAC/B,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,SAAS,EAAE,CAAC,CAsBtB"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAML,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,6BAA6B;IAC5C,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,2BAA2B,EAAE,MAAM,CAAC;IACpC,gEAAgE;IAChE,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,UAAU,EAAE,CAAC;IACjC,gBAAgB,EAAE,oBAAoB,CAAC;CACxC;AAQD;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAQ9C;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,gBAAgB,EAC/B,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAoD9C;AAED,MAAM,WAAW,gCAAgC;IAC/C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,gBAAgB,EAC/B,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,SAAS,EAAE,CAAC,CAsBtB"}
package/dist/catalog.js CHANGED
@@ -1,6 +1,65 @@
1
1
  // Copyright (c) Miso Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { getOwnedRecordingAdminCaps, getRecordingByShareType, } from "@misonetwork/sdk";
3
+ import { getCompositionAddressByShareType, getOwnedRecordingAdminCaps, getRecordingByShareType, getRecordingShareTypes, getReleaseById, } from "@misonetwork/sdk";
4
+ import { getCompositionCredits, getRecordingCredits, } from "./credits.js";
5
+ const EMPTY_RECORDING_CREDITS = {
6
+ credits: [],
7
+ primaryArtistIds: [],
8
+ featuredArtistIds: [],
9
+ };
10
+ /**
11
+ * Composition and recording credits for every track on a release, keyed by
12
+ * recording id.
13
+ *
14
+ * The read follows the chain's actual object graph instead of release credits:
15
+ * Release -> Recording -> Composition. Recording credit fields and recording
16
+ * type parameters are fetched together for every track. Composition addresses
17
+ * are then resolved concurrently, deduplicated, and all composition credit
18
+ * fields are fetched concurrently as well.
19
+ */
20
+ export async function getReleaseTrackCredits(client, graphqlClient, releaseId, options) {
21
+ const release = await getReleaseById(client, releaseId);
22
+ return getTrackCreditsByRecordingIds(client, graphqlClient, release.tracks.map((track) => track.recordingId), options);
23
+ }
24
+ /**
25
+ * Composition and recording credits for the supplied recordings, keyed by
26
+ * recording id. This form is intended for consumers that already loaded a
27
+ * release and do not need to fetch it again.
28
+ */
29
+ export async function getTrackCreditsByRecordingIds(client, graphqlClient, recordingIdsInput, options) {
30
+ const recordingIds = [...new Set(recordingIdsInput)];
31
+ const recordingReads = await Promise.all(recordingIds.map(async (recordingId) => {
32
+ const [recordingCredits, [, compositionShareType]] = await Promise.all([
33
+ getRecordingCredits(client, recordingId, options.recordingCreditsPackageId),
34
+ getRecordingShareTypes(client, recordingId),
35
+ ]);
36
+ return { recordingId, recordingCredits, compositionShareType };
37
+ }));
38
+ const compositionShareTypes = [...new Set(recordingReads.map((read) => read.compositionShareType))];
39
+ const compositionAddressEntries = await Promise.all(compositionShareTypes.map(async (shareType) => {
40
+ const compositionId = await getCompositionAddressByShareType(graphqlClient, shareType, options.misoPackageId);
41
+ if (!compositionId)
42
+ throw new Error(`Composition not found for share type: ${shareType}`);
43
+ return [shareType, compositionId];
44
+ }));
45
+ const compositionAddressByShareType = new Map(compositionAddressEntries);
46
+ const compositionIds = [...new Set(compositionAddressEntries.map(([, compositionId]) => compositionId))];
47
+ const compositionCreditEntries = await Promise.all(compositionIds.map(async (compositionId) => {
48
+ const credits = await getCompositionCredits(client, compositionId, options.compositionCreditsPackageId);
49
+ return [compositionId, credits ?? []];
50
+ }));
51
+ const compositionCreditsById = new Map(compositionCreditEntries);
52
+ return Object.fromEntries(recordingReads.map((read) => {
53
+ const compositionId = compositionAddressByShareType.get(read.compositionShareType);
54
+ return [
55
+ read.recordingId,
56
+ {
57
+ compositionCredits: compositionCreditsById.get(compositionId) ?? [],
58
+ recordingCredits: read.recordingCredits ?? EMPTY_RECORDING_CREDITS,
59
+ },
60
+ ];
61
+ }));
62
+ }
4
63
  /**
5
64
  * Every `Recording` administered by `owner`.
6
65
  *
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC;AActC,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAW1B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAyB,EACzB,aAA+B,EAC/B,KAAa,EACb,aAAqB,EACrB,UAA4C,EAAE;IAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAE5E,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC5F,CAAC;YAAC,MAAM,CAAC;gBACP,kEAAkE;gBAClE,sEAAsE;gBACtE,4CAA4C;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,IAAI,GAAG;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}