@misofm/platform 0.0.0 → 0.18.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 (168) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +686 -3
  3. package/dist/auth.d.ts +73 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +193 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/catalog.d.ts +48 -0
  8. package/dist/catalog.d.ts.map +1 -0
  9. package/dist/catalog.js +92 -0
  10. package/dist/catalog.js.map +1 -0
  11. package/dist/client.d.ts +462 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +788 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/contracts.d.ts +34 -0
  16. package/dist/contracts.d.ts.map +1 -0
  17. package/dist/contracts.js +49 -0
  18. package/dist/contracts.js.map +1 -0
  19. package/dist/cover.d.ts +69 -0
  20. package/dist/cover.d.ts.map +1 -0
  21. package/dist/cover.js +132 -0
  22. package/dist/cover.js.map +1 -0
  23. package/dist/credits.d.ts +200 -0
  24. package/dist/credits.d.ts.map +1 -0
  25. package/dist/credits.js +465 -0
  26. package/dist/credits.js.map +1 -0
  27. package/dist/deployments.d.ts +224 -0
  28. package/dist/deployments.d.ts.map +1 -0
  29. package/dist/deployments.js +177 -0
  30. package/dist/deployments.js.map +1 -0
  31. package/dist/execute.d.ts +30 -0
  32. package/dist/execute.d.ts.map +1 -0
  33. package/dist/execute.js +31 -0
  34. package/dist/execute.js.map +1 -0
  35. package/dist/index.d.ts +21 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +52 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal.d.ts +13 -0
  40. package/dist/internal.d.ts.map +1 -0
  41. package/dist/internal.js +41 -0
  42. package/dist/internal.js.map +1 -0
  43. package/dist/mix.d.ts +144 -0
  44. package/dist/mix.d.ts.map +1 -0
  45. package/dist/mix.js +656 -0
  46. package/dist/mix.js.map +1 -0
  47. package/dist/pressing.d.ts +137 -0
  48. package/dist/pressing.d.ts.map +1 -0
  49. package/dist/pressing.js +390 -0
  50. package/dist/pressing.js.map +1 -0
  51. package/dist/publication.d.ts +216 -0
  52. package/dist/publication.d.ts.map +1 -0
  53. package/dist/publication.js +872 -0
  54. package/dist/publication.js.map +1 -0
  55. package/dist/queries.d.ts +2 -0
  56. package/dist/queries.d.ts.map +1 -0
  57. package/dist/queries.js +8 -0
  58. package/dist/queries.js.map +1 -0
  59. package/dist/read/artist.d.ts +18 -0
  60. package/dist/read/artist.d.ts.map +1 -0
  61. package/dist/read/artist.js +86 -0
  62. package/dist/read/artist.js.map +1 -0
  63. package/dist/read/catalog.d.ts +93 -0
  64. package/dist/read/catalog.d.ts.map +1 -0
  65. package/dist/read/catalog.js +441 -0
  66. package/dist/read/catalog.js.map +1 -0
  67. package/dist/read/client.d.ts +37 -0
  68. package/dist/read/client.d.ts.map +1 -0
  69. package/dist/read/client.js +50 -0
  70. package/dist/read/client.js.map +1 -0
  71. package/dist/read/config.d.ts +68 -0
  72. package/dist/read/config.d.ts.map +1 -0
  73. package/dist/read/config.js +63 -0
  74. package/dist/read/config.js.map +1 -0
  75. package/dist/read/genres.d.ts +7 -0
  76. package/dist/read/genres.d.ts.map +1 -0
  77. package/dist/read/genres.js +38 -0
  78. package/dist/read/genres.js.map +1 -0
  79. package/dist/read/index.d.ts +14 -0
  80. package/dist/read/index.d.ts.map +1 -0
  81. package/dist/read/index.js +23 -0
  82. package/dist/read/index.js.map +1 -0
  83. package/dist/read/internal/scalars.d.ts +23 -0
  84. package/dist/read/internal/scalars.d.ts.map +1 -0
  85. package/dist/read/internal/scalars.js +57 -0
  86. package/dist/read/internal/scalars.js.map +1 -0
  87. package/dist/read/internal/walrus.d.ts +6 -0
  88. package/dist/read/internal/walrus.d.ts.map +1 -0
  89. package/dist/read/internal/walrus.js +29 -0
  90. package/dist/read/internal/walrus.js.map +1 -0
  91. package/dist/read/receipts.d.ts +41 -0
  92. package/dist/read/receipts.d.ts.map +1 -0
  93. package/dist/read/receipts.js +398 -0
  94. package/dist/read/receipts.js.map +1 -0
  95. package/dist/read/types.d.ts +328 -0
  96. package/dist/read/types.d.ts.map +1 -0
  97. package/dist/read/types.js +21 -0
  98. package/dist/read/types.js.map +1 -0
  99. package/dist/read/wallet.d.ts +74 -0
  100. package/dist/read/wallet.d.ts.map +1 -0
  101. package/dist/read/wallet.js +578 -0
  102. package/dist/read/wallet.js.map +1 -0
  103. package/dist/read/works.d.ts +29 -0
  104. package/dist/read/works.d.ts.map +1 -0
  105. package/dist/read/works.js +191 -0
  106. package/dist/read/works.js.map +1 -0
  107. package/dist/recording-extensions.d.ts +62 -0
  108. package/dist/recording-extensions.d.ts.map +1 -0
  109. package/dist/recording-extensions.js +159 -0
  110. package/dist/recording-extensions.js.map +1 -0
  111. package/dist/release-extensions.d.ts +93 -0
  112. package/dist/release-extensions.d.ts.map +1 -0
  113. package/dist/release-extensions.js +190 -0
  114. package/dist/release-extensions.js.map +1 -0
  115. package/dist/release-graph.d.ts +65 -0
  116. package/dist/release-graph.d.ts.map +1 -0
  117. package/dist/release-graph.js +136 -0
  118. package/dist/release-graph.js.map +1 -0
  119. package/dist/share-template.d.ts +3 -0
  120. package/dist/share-template.d.ts.map +1 -0
  121. package/dist/share-template.js +46 -0
  122. package/dist/share-template.js.map +1 -0
  123. package/dist/share.d.ts +67 -0
  124. package/dist/share.d.ts.map +1 -0
  125. package/dist/share.js +157 -0
  126. package/dist/share.js.map +1 -0
  127. package/dist/transactions.d.ts +216 -0
  128. package/dist/transactions.d.ts.map +1 -0
  129. package/dist/transactions.js +314 -0
  130. package/dist/transactions.js.map +1 -0
  131. package/dist/vault.d.ts +364 -0
  132. package/dist/vault.d.ts.map +1 -0
  133. package/dist/vault.js +507 -0
  134. package/dist/vault.js.map +1 -0
  135. package/package.json +145 -5
  136. package/src/auth.ts +275 -0
  137. package/src/catalog.ts +189 -0
  138. package/src/client.ts +1320 -0
  139. package/src/contracts.ts +54 -0
  140. package/src/cover.ts +240 -0
  141. package/src/credits.ts +906 -0
  142. package/src/deployments.ts +357 -0
  143. package/src/execute.ts +52 -0
  144. package/src/index.ts +69 -0
  145. package/src/internal.ts +46 -0
  146. package/src/mix.ts +910 -0
  147. package/src/pressing.ts +705 -0
  148. package/src/publication.ts +1214 -0
  149. package/src/queries.ts +9 -0
  150. package/src/read/artist.ts +118 -0
  151. package/src/read/catalog.ts +668 -0
  152. package/src/read/client.ts +87 -0
  153. package/src/read/config.ts +138 -0
  154. package/src/read/genres.ts +37 -0
  155. package/src/read/index.ts +85 -0
  156. package/src/read/internal/scalars.ts +59 -0
  157. package/src/read/internal/walrus.ts +42 -0
  158. package/src/read/receipts.ts +476 -0
  159. package/src/read/types.ts +415 -0
  160. package/src/read/wallet.ts +687 -0
  161. package/src/read/works.ts +297 -0
  162. package/src/recording-extensions.ts +256 -0
  163. package/src/release-extensions.ts +311 -0
  164. package/src/release-graph.ts +219 -0
  165. package/src/share-template.ts +55 -0
  166. package/src/share.ts +261 -0
  167. package/src/transactions.ts +542 -0
  168. package/src/vault.ts +1009 -0
@@ -0,0 +1,465 @@
1
+ // Copyright (c) Miso Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { bcs } from "@mysten/sui/bcs";
4
+ import { deriveDynamicFieldID } from "@mysten/sui/utils";
5
+ import { OPTION_NONE, OPTION_SOME } from "./internal.js";
6
+ import * as compositionCredits from "@misofm/protocol/contracts/composition_credits/composition_credits";
7
+ import * as compositionPartyRole from "@misofm/protocol/contracts/composition_credits/composition_party_role";
8
+ import * as recordingCredits from "@misofm/protocol/contracts/recording_credits/recording_credits";
9
+ import * as recordingPartyRole from "@misofm/protocol/contracts/recording_credits/recording_party_role";
10
+ import * as releaseCredits from "@misofm/protocol/contracts/release_credits/release_credits";
11
+ import * as releasePartyRole from "@misofm/protocol/contracts/release_credits/release_party_role";
12
+ import { directAdminCap, invokeWithAdminCap } from "./vault.js";
13
+ function object(tx, value) {
14
+ return typeof value === "string" ? tx.object(value) : value;
15
+ }
16
+ function compositionAuthorityOf(input) {
17
+ if (input.authority !== undefined)
18
+ return input.authority;
19
+ return directAdminCap(input.compositionAdminCapId);
20
+ }
21
+ function recordingAuthorityOf(input) {
22
+ if (input.authority !== undefined)
23
+ return input.authority;
24
+ return directAdminCap(input.recordingAdminCapId);
25
+ }
26
+ function releaseAuthorityOf(input) {
27
+ if (input.authority !== undefined)
28
+ return input.authority;
29
+ return directAdminCap(input.releaseAdminCapId);
30
+ }
31
+ const COMPOSITION_ROLE_CTOR = {
32
+ Adapter: compositionPartyRole.newAdapterRole,
33
+ Arranger: compositionPartyRole.newArrangerRole,
34
+ Composer: compositionPartyRole.newComposerRole,
35
+ Lyricist: compositionPartyRole.newLyricistRole,
36
+ Songwriter: compositionPartyRole.newSongwriterRole,
37
+ Translator: compositionPartyRole.newTranslatorRole,
38
+ };
39
+ const RECORDING_LEVEL_CTOR = {
40
+ Additional: recordingPartyRole.newAdditionalRoleLevel,
41
+ Assistant: recordingPartyRole.newAssistantRoleLevel,
42
+ Associate: recordingPartyRole.newAssociateRoleLevel,
43
+ Backing: recordingPartyRole.newBackingRoleLevel,
44
+ Executive: recordingPartyRole.newExecutiveRoleLevel,
45
+ Featured: recordingPartyRole.newFeaturedRoleLevel,
46
+ Lead: recordingPartyRole.newLeadRoleLevel,
47
+ Primary: recordingPartyRole.newPrimaryRoleLevel,
48
+ Principal: recordingPartyRole.newPrincipalRoleLevel,
49
+ };
50
+ const RECORDING_LEVELED_ROLE_CTOR = {
51
+ Actor: recordingPartyRole.newActorRole,
52
+ Arranger: recordingPartyRole.newArrangerRole,
53
+ BandLeader: recordingPartyRole.newBandLeaderRole,
54
+ Choir: recordingPartyRole.newChoirRole,
55
+ ChoirMaster: recordingPartyRole.newChoirMasterRole,
56
+ ConcertMaster: recordingPartyRole.newConcertMasterRole,
57
+ Conductor: recordingPartyRole.newConductorRole,
58
+ Contractor: recordingPartyRole.newContractorRole,
59
+ DJ: recordingPartyRole.newDjRole,
60
+ Editor: recordingPartyRole.newEditorRole,
61
+ Engineer: recordingPartyRole.newEngineerRole,
62
+ Ensemble: recordingPartyRole.newEnsembleRole,
63
+ MasteringEngineer: recordingPartyRole.newMasteringEngineerRole,
64
+ MixingEngineer: recordingPartyRole.newMixingEngineerRole,
65
+ MusicDirector: recordingPartyRole.newMusicDirectorRole,
66
+ MusicSupervisor: recordingPartyRole.newMusicSupervisorRole,
67
+ Narrator: recordingPartyRole.newNarratorRole,
68
+ Orchestra: recordingPartyRole.newOrchestraRole,
69
+ Orchestrator: recordingPartyRole.newOrchestratorRole,
70
+ Performer: recordingPartyRole.newPerformerRole,
71
+ Producer: recordingPartyRole.newProducerRole,
72
+ Programmer: recordingPartyRole.newProgrammerRole,
73
+ RecordingEngineer: recordingPartyRole.newRecordingEngineerRole,
74
+ RemixingEngineer: recordingPartyRole.newRemixingEngineerRole,
75
+ Soloist: recordingPartyRole.newSoloistRole,
76
+ SoundDesigner: recordingPartyRole.newSoundDesignerRole,
77
+ Speaker: recordingPartyRole.newSpeakerRole,
78
+ Vocalist: recordingPartyRole.newVocalistRole,
79
+ };
80
+ /** Builds an `Option<RecordingPartyRoleLevel>` argument for a role constructor. */
81
+ function levelOption(tx, pkg, level) {
82
+ const levelType = `${pkg}::recording_party_role::RecordingPartyRoleLevel`;
83
+ if (!level)
84
+ return tx.moveCall({ target: OPTION_NONE, typeArguments: [levelType] });
85
+ const lvl = tx.add(RECORDING_LEVEL_CTOR[level]({ package: pkg }));
86
+ return tx.moveCall({
87
+ target: OPTION_SOME,
88
+ typeArguments: [levelType],
89
+ arguments: [lvl],
90
+ });
91
+ }
92
+ /** Builds one `CompositionPartyRole` value in the PTB. */
93
+ function buildCompositionRole(tx, pkg, role) {
94
+ if (role.type === "Custom") {
95
+ return tx.add(compositionPartyRole.newCustomRole({
96
+ package: pkg,
97
+ arguments: [role.name],
98
+ }));
99
+ }
100
+ return tx.add(COMPOSITION_ROLE_CTOR[role.type]({ package: pkg }));
101
+ }
102
+ /** Builds one `RecordingPartyRole` value in the PTB. */
103
+ function buildRecordingRole(tx, pkg, role) {
104
+ switch (role.type) {
105
+ case "ArtistsAndRepertoire":
106
+ return tx.add(recordingPartyRole.newArtistsAndRepertoireRole({ package: pkg }));
107
+ case "Copyist":
108
+ return tx.add(recordingPartyRole.newCopyistRole({ package: pkg }));
109
+ case "Instrumentalist":
110
+ return tx.add(recordingPartyRole.newInstrumentalistRole({
111
+ package: pkg,
112
+ arguments: [role.instrument, levelOption(tx, pkg, role.level)],
113
+ }));
114
+ case "Custom":
115
+ return tx.add(recordingPartyRole.newCustomRole({
116
+ package: pkg,
117
+ arguments: [role.name, levelOption(tx, pkg, role.level)],
118
+ }));
119
+ default:
120
+ return tx.add(RECORDING_LEVELED_ROLE_CTOR[role.type]({
121
+ package: pkg,
122
+ arguments: [levelOption(tx, pkg, role.level)],
123
+ }));
124
+ }
125
+ }
126
+ /** Builds one `ReleasePartyRole` value in the PTB. */
127
+ function buildReleaseRole(tx, pkg, role) {
128
+ const ctor = role === "Primary"
129
+ ? releasePartyRole.newPrimaryRole
130
+ : releasePartyRole.newFeaturedRole;
131
+ return tx.add(ctor({ package: pkg }));
132
+ }
133
+ // ── Client-side validation ────────────────────────────────────────────────────
134
+ //
135
+ // Mirrors the Move aborts so bad params fail fast (and readably) at the writer
136
+ // call site instead of as an on-chain abort code:
137
+ // - miso_credit::credit::new — EEmptyString / EMaxDisplayNameLengthExceeded
138
+ // (display name non-empty, ≤200 BYTES of UTF-8) and ENoRoles / EDuplicateRoles.
139
+ // - composition_credits::add_credit — EMinRolesNotMet / EExceedsMaxRoles (1–5).
140
+ // - recording_credits::add_credit — EMinRolesNotMet / EExceedsMaxRoles (1–10).
141
+ const MAX_DISPLAY_NAME_BYTES = 200;
142
+ const MAX_COMPOSITION_ROLES = 5;
143
+ const MAX_RECORDING_ROLES = 10;
144
+ function assertDisplayName(fn, displayName) {
145
+ if (displayName.length === 0)
146
+ throw new Error(`${fn}: displayName must not be empty`);
147
+ const byteLength = new TextEncoder().encode(displayName).length;
148
+ if (byteLength > MAX_DISPLAY_NAME_BYTES) {
149
+ throw new Error(`${fn}: displayName must be at most ${MAX_DISPLAY_NAME_BYTES} bytes of UTF-8 (got ${byteLength})`);
150
+ }
151
+ }
152
+ // Move rejects duplicates by full struct equality, so the duplicate key is the
153
+ // role's complete identity: type + instrument + custom name + level.
154
+ function roleKey(role) {
155
+ return JSON.stringify([
156
+ role.type,
157
+ "instrument" in role ? role.instrument : null,
158
+ "name" in role ? role.name : null,
159
+ "level" in role && role.level !== undefined ? role.level : null,
160
+ ]);
161
+ }
162
+ function assertRoles(fn, roles, max) {
163
+ if (roles.length < 1)
164
+ throw new Error(`${fn}: at least one role is required`);
165
+ if (roles.length > max)
166
+ throw new Error(`${fn}: at most ${max} roles are allowed (got ${roles.length})`);
167
+ const seen = new Set();
168
+ for (const role of roles) {
169
+ const key = roleKey(role);
170
+ if (seen.has(key))
171
+ throw new Error(`${fn}: duplicate role ${key}`);
172
+ seen.add(key);
173
+ }
174
+ }
175
+ /** Wraps built role values in a `miso_credit::credit::Credit<Role>`. */
176
+ function buildCredit(tx, misoCreditPackageId, roleType, displayName, roleArgs) {
177
+ const roles = tx.makeMoveVec({ type: roleType, elements: roleArgs });
178
+ return tx.moveCall({
179
+ target: `${misoCreditPackageId}::credit::new`,
180
+ typeArguments: [roleType],
181
+ arguments: [tx.pure.string(displayName), roles],
182
+ });
183
+ }
184
+ /**
185
+ * Adds a writing credit for a party on a composition. Throws (client-side,
186
+ * mirroring the Move aborts) when `displayName` is empty or over 200 UTF-8
187
+ * bytes, or `roles` is empty, has more than 5 entries, or contains duplicates.
188
+ */
189
+ export function attachCompositionCredit(p) {
190
+ assertDisplayName("attachCompositionCredit", p.displayName);
191
+ assertRoles("attachCompositionCredit", p.roles, MAX_COMPOSITION_ROLES);
192
+ return (tx) => {
193
+ const roleType = `${p.compositionCreditsPackageId}::composition_party_role::CompositionPartyRole`;
194
+ const roleArgs = p.roles.map((r) => buildCompositionRole(tx, p.compositionCreditsPackageId, r));
195
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, roleArgs);
196
+ invokeWithAdminCap(tx, compositionAuthorityOf(p), {
197
+ target: `${p.compositionCreditsPackageId}::composition_credits::add_credit`,
198
+ typeArguments: [p.compositionShareType],
199
+ arguments: [object(tx, p.compositionId), object(tx, p.partyId), credit],
200
+ adminCapIndex: 1,
201
+ });
202
+ };
203
+ }
204
+ /**
205
+ * Adds a production/performance credit for a party on a recording. Throws
206
+ * (client-side, mirroring the Move aborts) when `displayName` is empty or over
207
+ * 200 UTF-8 bytes, or `roles` is empty, has more than 10 entries, or contains
208
+ * duplicates (same type + instrument + custom name + level).
209
+ */
210
+ export function attachRecordingCredit(p) {
211
+ assertDisplayName("attachRecordingCredit", p.displayName);
212
+ assertRoles("attachRecordingCredit", p.roles, MAX_RECORDING_ROLES);
213
+ return (tx) => {
214
+ const roleType = `${p.recordingCreditsPackageId}::recording_party_role::RecordingPartyRole`;
215
+ const roleArgs = p.roles.map((r) => buildRecordingRole(tx, p.recordingCreditsPackageId, r));
216
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, roleArgs);
217
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
218
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_credit`,
219
+ typeArguments: [p.recordingShareType, p.compositionShareType],
220
+ arguments: [object(tx, p.recordingId), object(tx, p.partyId), credit],
221
+ adminCapIndex: 1,
222
+ });
223
+ };
224
+ }
225
+ /**
226
+ * Designates an already-credited party as a primary artist on a recording. The
227
+ * party must be credited first (via `attachRecordingCredit`) and not already a
228
+ * primary or featured artist.
229
+ */
230
+ export function addRecordingPrimaryArtist(p) {
231
+ return (tx) => {
232
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
233
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_primary_artist`,
234
+ typeArguments: [p.recordingShareType, p.compositionShareType],
235
+ arguments: [object(tx, p.recordingId), object(tx, p.partyId)],
236
+ adminCapIndex: 1,
237
+ });
238
+ };
239
+ }
240
+ /**
241
+ * Designates an already-credited party as a featured artist on a recording. The
242
+ * party must be credited first (via `attachRecordingCredit`) and not already a
243
+ * primary or featured artist.
244
+ */
245
+ export function addRecordingFeaturedArtist(p) {
246
+ return (tx) => {
247
+ invokeWithAdminCap(tx, recordingAuthorityOf(p), {
248
+ target: `${p.recordingCreditsPackageId}::recording_credits::add_featured_artist`,
249
+ typeArguments: [p.recordingShareType, p.compositionShareType],
250
+ arguments: [object(tx, p.recordingId), object(tx, p.partyId)],
251
+ adminCapIndex: 1,
252
+ });
253
+ };
254
+ }
255
+ /**
256
+ * Adds a top-line billing credit (a single role) for a party on a release.
257
+ * Throws (client-side, mirroring the Move aborts) when `displayName` is empty
258
+ * or over 200 UTF-8 bytes. The single role is structural, so no role checks.
259
+ */
260
+ export function addReleaseCredit(p) {
261
+ assertDisplayName("addReleaseCredit", p.displayName);
262
+ return (tx) => {
263
+ const roleType = `${p.releaseCreditsPackageId}::release_party_role::ReleasePartyRole`;
264
+ const roleArg = buildReleaseRole(tx, p.releaseCreditsPackageId, p.role);
265
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, [roleArg]);
266
+ invokeWithAdminCap(tx, releaseAuthorityOf(p), {
267
+ target: `${p.releaseCreditsPackageId}::release_credits::add_credit`,
268
+ arguments: [object(tx, p.releaseId), object(tx, p.partyId), credit],
269
+ adminCapIndex: 1,
270
+ });
271
+ };
272
+ }
273
+ // Credits are stored as a dynamic field on the work's UID under the extension's
274
+ // `ExtensionKey()` — a positional struct with no fields, so Move's implicit
275
+ // `dummy_field: bool` serializes to a single `false` byte. The stored object is a
276
+ // `Field { id, name: <Key>, value: <Credits> }`.
277
+ const CompositionCreditsField = bcs.struct("Field", {
278
+ id: bcs.Address,
279
+ name: compositionCredits.ExtensionKey,
280
+ value: compositionCredits.CompositionCredits,
281
+ });
282
+ const RecordingCreditsField = bcs.struct("Field", {
283
+ id: bcs.Address,
284
+ name: recordingCredits.ExtensionKey,
285
+ value: recordingCredits.RecordingCredits,
286
+ });
287
+ const ReleaseCreditsField = bcs.struct("Field", {
288
+ id: bcs.Address,
289
+ name: releaseCredits.ExtensionKey,
290
+ value: releaseCredits.ReleaseCredits,
291
+ });
292
+ const COMPOSITION_CREDITS_KEY_BYTES = compositionCredits.ExtensionKey.serialize([false]).toBytes();
293
+ const RECORDING_CREDITS_KEY_BYTES = recordingCredits.ExtensionKey.serialize([
294
+ false,
295
+ ]).toBytes();
296
+ const RELEASE_CREDITS_KEY_BYTES = releaseCredits.ExtensionKey.serialize([
297
+ false,
298
+ ]).toBytes();
299
+ /** Fetch many derived credit fields through one Core bulk request. */
300
+ async function fetchCreditFields(client, targets) {
301
+ if (targets.length === 0)
302
+ return new Map();
303
+ const { objects } = await client.core.getObjects({
304
+ objectIds: targets.map((target) => target.fieldId),
305
+ include: { content: true },
306
+ });
307
+ const contents = new Map();
308
+ objects.forEach((object, index) => {
309
+ if (object instanceof Error || !object.content)
310
+ return;
311
+ const target = targets[index];
312
+ if (target)
313
+ contents.set(target.fieldId, object.content);
314
+ });
315
+ return contents;
316
+ }
317
+ function compositionCreditTargets(compositionIds, packageId) {
318
+ return compositionIds.map((workId) => ({
319
+ workId,
320
+ kind: "composition",
321
+ fieldId: deriveDynamicFieldID(workId, `${packageId}::composition_credits::ExtensionKey`, COMPOSITION_CREDITS_KEY_BYTES),
322
+ }));
323
+ }
324
+ function recordingCreditTargets(recordingIds, packageId) {
325
+ return recordingIds.map((workId) => ({
326
+ workId,
327
+ kind: "recording",
328
+ fieldId: deriveDynamicFieldID(workId, `${packageId}::recording_credits::ExtensionKey`, RECORDING_CREDITS_KEY_BYTES),
329
+ }));
330
+ }
331
+ function releaseCreditTargets(releaseIds, packageId) {
332
+ return releaseIds.map((workId) => ({
333
+ workId,
334
+ kind: "release",
335
+ fieldId: releaseCreditsFieldId(workId, packageId),
336
+ }));
337
+ }
338
+ /** Deterministic dynamic-field id for a release's billing credits. */
339
+ export function releaseCreditsFieldId(releaseId, releaseCreditsPackageId) {
340
+ return deriveDynamicFieldID(releaseId, `${releaseCreditsPackageId}::release_credits::ExtensionKey`, RELEASE_CREDITS_KEY_BYTES);
341
+ }
342
+ function creditViews(credits, roleLabel) {
343
+ return credits.contents.map((entry) => ({
344
+ partyId: entry.key,
345
+ displayName: entry.value.display_name,
346
+ roles: entry.value.roles.map(roleLabel),
347
+ }));
348
+ }
349
+ // `name()` semantics: the `$kind` is the canonical PascalCase token; `Custom`
350
+ // carries the user-supplied name in its payload.
351
+ function compositionRoleLabel(role) {
352
+ return role.$kind === "Custom" ? role.Custom : role.$kind;
353
+ }
354
+ function releaseRoleLabel(role) {
355
+ return role.$kind;
356
+ }
357
+ /** Parse a fetched release-credit dynamic field. */
358
+ export function parseReleaseCreditsContent(content) {
359
+ return creditViews(ReleaseCreditsField.parse(content).value.credits, releaseRoleLabel);
360
+ }
361
+ // `name()` semantics plus the recording extras: the instrument (for
362
+ // `Instrumentalist`) and the optional level, both surfaced into the label.
363
+ function recordingRoleLabel(role) {
364
+ let base;
365
+ let level = null;
366
+ switch (role.$kind) {
367
+ case "Instrumentalist": {
368
+ const [instrument, lvl] = role.Instrumentalist;
369
+ base = `Instrumentalist: ${instrument}`;
370
+ level = lvl;
371
+ break;
372
+ }
373
+ case "Custom": {
374
+ const [name, lvl] = role.Custom;
375
+ base = name;
376
+ level = lvl;
377
+ break;
378
+ }
379
+ case "ArtistsAndRepertoire":
380
+ case "Copyist":
381
+ base = role.$kind;
382
+ break;
383
+ default: {
384
+ // A leveled variant's payload is `Option<Level>`: `None` parses to `true`
385
+ // (the unit-payload convention), `Some(level)` to the level enum object.
386
+ base = role.$kind;
387
+ const payload = role[role.$kind];
388
+ level =
389
+ payload && typeof payload === "object" && "$kind" in payload
390
+ ? payload
391
+ : null;
392
+ break;
393
+ }
394
+ }
395
+ return level ? `${base} (${level.$kind})` : base;
396
+ }
397
+ /**
398
+ * Reads a composition's writing credits (the `composition_credits` extension), or
399
+ * `null` if no credits field is attached.
400
+ */
401
+ export async function getCompositionCredits(client, compositionId, compositionCreditsPackageId) {
402
+ return ((await getCompositionCreditsByIds(client, [compositionId], compositionCreditsPackageId))[compositionId] ?? null);
403
+ }
404
+ /** Composition credits for many works in one Core bulk request. */
405
+ export async function getCompositionCreditsByIds(client, compositionIdsInput, compositionCreditsPackageId) {
406
+ const compositionIds = [...new Set(compositionIdsInput)];
407
+ const targets = compositionCreditTargets(compositionIds, compositionCreditsPackageId);
408
+ const contents = await fetchCreditFields(client, targets);
409
+ const out = {};
410
+ for (const target of targets) {
411
+ const content = contents.get(target.fieldId);
412
+ if (content) {
413
+ out[target.workId] = creditViews(CompositionCreditsField.parse(content).value.credits, compositionRoleLabel);
414
+ }
415
+ }
416
+ return out;
417
+ }
418
+ /**
419
+ * Reads a recording's credits plus its primary/featured artist party ids (the
420
+ * `recording_credits` extension), or `null` if no credits field is attached.
421
+ */
422
+ export async function getRecordingCredits(client, recordingId, recordingCreditsPackageId) {
423
+ return ((await getRecordingCreditsByIds(client, [recordingId], recordingCreditsPackageId))[recordingId] ?? null);
424
+ }
425
+ /** Recording credits for many works in one Core bulk request. */
426
+ export async function getRecordingCreditsByIds(client, recordingIdsInput, recordingCreditsPackageId) {
427
+ const recordingIds = [...new Set(recordingIdsInput)];
428
+ const targets = recordingCreditTargets(recordingIds, recordingCreditsPackageId);
429
+ const contents = await fetchCreditFields(client, targets);
430
+ const out = {};
431
+ for (const target of targets) {
432
+ const content = contents.get(target.fieldId);
433
+ if (!content)
434
+ continue;
435
+ const value = RecordingCreditsField.parse(content).value;
436
+ out[target.workId] = {
437
+ credits: creditViews(value.credits, recordingRoleLabel),
438
+ primaryArtistIds: value.primary_artist_ids.contents,
439
+ featuredArtistIds: value.featured_artist_ids.contents,
440
+ };
441
+ }
442
+ return out;
443
+ }
444
+ /**
445
+ * Reads a release's top-line billing credits (the `release_credits` extension), or
446
+ * `null` if no credits field is attached. Each credit has exactly one role.
447
+ */
448
+ export async function getReleaseCredits(client, releaseId, releaseCreditsPackageId) {
449
+ return ((await getReleaseCreditsByIds(client, [releaseId], releaseCreditsPackageId))[releaseId] ?? null);
450
+ }
451
+ /** Release billing credits for many releases in one Core bulk request. */
452
+ export async function getReleaseCreditsByIds(client, releaseIdsInput, releaseCreditsPackageId) {
453
+ const releaseIds = [...new Set(releaseIdsInput)];
454
+ const targets = releaseCreditTargets(releaseIds, releaseCreditsPackageId);
455
+ const contents = await fetchCreditFields(client, targets);
456
+ const out = {};
457
+ for (const target of targets) {
458
+ const content = contents.get(target.fieldId);
459
+ if (content) {
460
+ out[target.workId] = parseReleaseCreditsContent(content);
461
+ }
462
+ }
463
+ return out;
464
+ }
465
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../src/credits.ts"],"names":[],"mappings":"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"}