@misonetwork/sdk 0.1.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 (238) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +644 -0
  3. package/dist/client.d.ts +197 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +218 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/contracts/composition_credits/composition_credits.d.ts +181 -0
  8. package/dist/contracts/composition_credits/composition_credits.d.ts.map +1 -0
  9. package/dist/contracts/composition_credits/composition_credits.js +109 -0
  10. package/dist/contracts/composition_credits/composition_credits.js.map +1 -0
  11. package/dist/contracts/composition_credits/composition_party_role.d.ts +119 -0
  12. package/dist/contracts/composition_credits/composition_party_role.d.ts.map +1 -0
  13. package/dist/contracts/composition_credits/composition_party_role.js +139 -0
  14. package/dist/contracts/composition_credits/composition_party_role.js.map +1 -0
  15. package/dist/contracts/composition_credits/deps/miso_credit/credit.d.ts +24 -0
  16. package/dist/contracts/composition_credits/deps/miso_credit/credit.d.ts.map +1 -0
  17. package/dist/contracts/composition_credits/deps/miso_credit/credit.js +23 -0
  18. package/dist/contracts/composition_credits/deps/miso_credit/credit.js.map +1 -0
  19. package/dist/contracts/composition_credits/deps/sui/vec_map.d.ts +37 -0
  20. package/dist/contracts/composition_credits/deps/sui/vec_map.d.ts.map +1 -0
  21. package/dist/contracts/composition_credits/deps/sui/vec_map.js +28 -0
  22. package/dist/contracts/composition_credits/deps/sui/vec_map.js.map +1 -0
  23. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +87 -0
  24. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -0
  25. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +80 -0
  26. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -0
  27. package/dist/contracts/cover_art/cover_art.d.ts +85 -0
  28. package/dist/contracts/cover_art/cover_art.d.ts.map +1 -0
  29. package/dist/contracts/cover_art/cover_art.js +68 -0
  30. package/dist/contracts/cover_art/cover_art.js.map +1 -0
  31. package/dist/contracts/cover_art/deps/ori/walrus_data.d.ts +52 -0
  32. package/dist/contracts/cover_art/deps/ori/walrus_data.d.ts.map +1 -0
  33. package/dist/contracts/cover_art/deps/ori/walrus_data.js +37 -0
  34. package/dist/contracts/cover_art/deps/ori/walrus_data.js.map +1 -0
  35. package/dist/contracts/miso/composition.d.ts +231 -0
  36. package/dist/contracts/miso/composition.d.ts.map +1 -0
  37. package/dist/contracts/miso/composition.js +231 -0
  38. package/dist/contracts/miso/composition.js.map +1 -0
  39. package/dist/contracts/miso/deal.d.ts +184 -0
  40. package/dist/contracts/miso/deal.d.ts.map +1 -0
  41. package/dist/contracts/miso/deal.js +184 -0
  42. package/dist/contracts/miso/deal.js.map +1 -0
  43. package/dist/contracts/miso/deps/bps/bps.d.ts +19 -0
  44. package/dist/contracts/miso/deps/bps/bps.d.ts.map +1 -0
  45. package/dist/contracts/miso/deps/bps/bps.js +21 -0
  46. package/dist/contracts/miso/deps/bps/bps.js.map +1 -0
  47. package/dist/contracts/miso/recording.d.ts +228 -0
  48. package/dist/contracts/miso/recording.d.ts.map +1 -0
  49. package/dist/contracts/miso/recording.js +221 -0
  50. package/dist/contracts/miso/recording.js.map +1 -0
  51. package/dist/contracts/miso/release.d.ts +280 -0
  52. package/dist/contracts/miso/release.d.ts.map +1 -0
  53. package/dist/contracts/miso/release.js +282 -0
  54. package/dist/contracts/miso/release.js.map +1 -0
  55. package/dist/contracts/miso/track.d.ts +118 -0
  56. package/dist/contracts/miso/track.d.ts.map +1 -0
  57. package/dist/contracts/miso/track.js +118 -0
  58. package/dist/contracts/miso/track.js.map +1 -0
  59. package/dist/contracts/recording_credits/deps/miso_credit/credit.d.ts +24 -0
  60. package/dist/contracts/recording_credits/deps/miso_credit/credit.d.ts.map +1 -0
  61. package/dist/contracts/recording_credits/deps/miso_credit/credit.js +23 -0
  62. package/dist/contracts/recording_credits/deps/miso_credit/credit.js.map +1 -0
  63. package/dist/contracts/recording_credits/deps/sui/vec_map.d.ts +37 -0
  64. package/dist/contracts/recording_credits/deps/sui/vec_map.d.ts.map +1 -0
  65. package/dist/contracts/recording_credits/deps/sui/vec_map.js +28 -0
  66. package/dist/contracts/recording_credits/deps/sui/vec_map.js.map +1 -0
  67. package/dist/contracts/recording_credits/deps/sui/vec_set.d.ts +21 -0
  68. package/dist/contracts/recording_credits/deps/sui/vec_set.d.ts.map +1 -0
  69. package/dist/contracts/recording_credits/deps/sui/vec_set.js +20 -0
  70. package/dist/contracts/recording_credits/deps/sui/vec_set.js.map +1 -0
  71. package/dist/contracts/recording_credits/recording_credits.d.ts +2313 -0
  72. package/dist/contracts/recording_credits/recording_credits.d.ts.map +1 -0
  73. package/dist/contracts/recording_credits/recording_credits.js +270 -0
  74. package/dist/contracts/recording_credits/recording_credits.js.map +1 -0
  75. package/dist/contracts/recording_credits/recording_party_role.d.ts +1174 -0
  76. package/dist/contracts/recording_credits/recording_party_role.d.ts.map +1 -0
  77. package/dist/contracts/recording_credits/recording_party_role.js +692 -0
  78. package/dist/contracts/recording_credits/recording_party_role.js.map +1 -0
  79. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +90 -0
  80. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -0
  81. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +80 -0
  82. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -0
  83. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.d.ts +52 -0
  84. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.d.ts.map +1 -0
  85. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.js +37 -0
  86. package/dist/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.js.map +1 -0
  87. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.d.ts +46 -0
  88. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.d.ts.map +1 -0
  89. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.js +21 -0
  90. package/dist/contracts/release_cover_art/deps/cover_art/cover_art.js.map +1 -0
  91. package/dist/contracts/release_cover_art/deps/per_track/per_track.d.ts +33 -0
  92. package/dist/contracts/release_cover_art/deps/per_track/per_track.d.ts.map +1 -0
  93. package/dist/contracts/release_cover_art/deps/per_track/per_track.js +32 -0
  94. package/dist/contracts/release_cover_art/deps/per_track/per_track.js.map +1 -0
  95. package/dist/contracts/release_cover_art/release_cover_art.d.ts +300 -0
  96. package/dist/contracts/release_cover_art/release_cover_art.d.ts.map +1 -0
  97. package/dist/contracts/release_cover_art/release_cover_art.js +168 -0
  98. package/dist/contracts/release_cover_art/release_cover_art.js.map +1 -0
  99. package/dist/contracts/release_credits/deps/miso_credit/credit.d.ts +24 -0
  100. package/dist/contracts/release_credits/deps/miso_credit/credit.d.ts.map +1 -0
  101. package/dist/contracts/release_credits/deps/miso_credit/credit.js +23 -0
  102. package/dist/contracts/release_credits/deps/miso_credit/credit.js.map +1 -0
  103. package/dist/contracts/release_credits/deps/sui/vec_map.d.ts +37 -0
  104. package/dist/contracts/release_credits/deps/sui/vec_map.d.ts.map +1 -0
  105. package/dist/contracts/release_credits/deps/sui/vec_map.js +28 -0
  106. package/dist/contracts/release_credits/deps/sui/vec_map.js.map +1 -0
  107. package/dist/contracts/release_credits/release_credits.d.ts +142 -0
  108. package/dist/contracts/release_credits/release_credits.d.ts.map +1 -0
  109. package/dist/contracts/release_credits/release_credits.js +108 -0
  110. package/dist/contracts/release_credits/release_credits.js.map +1 -0
  111. package/dist/contracts/release_credits/release_party_role.d.ts +58 -0
  112. package/dist/contracts/release_credits/release_party_role.d.ts.map +1 -0
  113. package/dist/contracts/release_credits/release_party_role.js +66 -0
  114. package/dist/contracts/release_credits/release_party_role.js.map +1 -0
  115. package/dist/contracts/royalty_pool/deps/std/type_name.d.ts +18 -0
  116. package/dist/contracts/royalty_pool/deps/std/type_name.d.ts.map +1 -0
  117. package/dist/contracts/royalty_pool/deps/std/type_name.js +20 -0
  118. package/dist/contracts/royalty_pool/deps/std/type_name.js.map +1 -0
  119. package/dist/contracts/royalty_pool/deps/sui/balance.d.ts +13 -0
  120. package/dist/contracts/royalty_pool/deps/sui/balance.d.ts.map +1 -0
  121. package/dist/contracts/royalty_pool/deps/sui/balance.js +15 -0
  122. package/dist/contracts/royalty_pool/deps/sui/balance.js.map +1 -0
  123. package/dist/contracts/royalty_pool/deps/sui/vec_map.d.ts +37 -0
  124. package/dist/contracts/royalty_pool/deps/sui/vec_map.d.ts.map +1 -0
  125. package/dist/contracts/royalty_pool/deps/sui/vec_map.js +28 -0
  126. package/dist/contracts/royalty_pool/deps/sui/vec_map.js.map +1 -0
  127. package/dist/contracts/royalty_pool/pool.d.ts +358 -0
  128. package/dist/contracts/royalty_pool/pool.d.ts.map +1 -0
  129. package/dist/contracts/royalty_pool/pool.js +352 -0
  130. package/dist/contracts/royalty_pool/pool.js.map +1 -0
  131. package/dist/contracts/royalty_pool/stake.d.ts +202 -0
  132. package/dist/contracts/royalty_pool/stake.d.ts.map +1 -0
  133. package/dist/contracts/royalty_pool/stake.js +197 -0
  134. package/dist/contracts/royalty_pool/stake.js.map +1 -0
  135. package/dist/contracts/utils/index.d.ts +31 -0
  136. package/dist/contracts/utils/index.d.ts.map +1 -0
  137. package/dist/contracts/utils/index.js +162 -0
  138. package/dist/contracts/utils/index.js.map +1 -0
  139. package/dist/contracts.d.ts +18 -0
  140. package/dist/contracts.d.ts.map +1 -0
  141. package/dist/contracts.js +26 -0
  142. package/dist/contracts.js.map +1 -0
  143. package/dist/cover.d.ts +48 -0
  144. package/dist/cover.d.ts.map +1 -0
  145. package/dist/cover.js +68 -0
  146. package/dist/cover.js.map +1 -0
  147. package/dist/credits.d.ts +171 -0
  148. package/dist/credits.d.ts.map +1 -0
  149. package/dist/credits.js +360 -0
  150. package/dist/credits.js.map +1 -0
  151. package/dist/execute.d.ts +49 -0
  152. package/dist/execute.d.ts.map +1 -0
  153. package/dist/execute.js +114 -0
  154. package/dist/execute.js.map +1 -0
  155. package/dist/extensions/royalty-pool.d.ts +32 -0
  156. package/dist/extensions/royalty-pool.d.ts.map +1 -0
  157. package/dist/extensions/royalty-pool.js +33 -0
  158. package/dist/extensions/royalty-pool.js.map +1 -0
  159. package/dist/index.d.ts +13 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +16 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/internal.d.ts +20 -0
  164. package/dist/internal.d.ts.map +1 -0
  165. package/dist/internal.js +48 -0
  166. package/dist/internal.js.map +1 -0
  167. package/dist/parsers.d.ts +9 -0
  168. package/dist/parsers.d.ts.map +1 -0
  169. package/dist/parsers.js +52 -0
  170. package/dist/parsers.js.map +1 -0
  171. package/dist/queries.d.ts +105 -0
  172. package/dist/queries.d.ts.map +1 -0
  173. package/dist/queries.js +380 -0
  174. package/dist/queries.js.map +1 -0
  175. package/dist/schemas.d.ts +99 -0
  176. package/dist/schemas.d.ts.map +1 -0
  177. package/dist/schemas.js +76 -0
  178. package/dist/schemas.js.map +1 -0
  179. package/dist/transactions.d.ts +158 -0
  180. package/dist/transactions.d.ts.map +1 -0
  181. package/dist/transactions.js +154 -0
  182. package/dist/transactions.js.map +1 -0
  183. package/dist/types.d.ts +204 -0
  184. package/dist/types.d.ts.map +1 -0
  185. package/dist/types.js +4 -0
  186. package/dist/types.js.map +1 -0
  187. package/dist/view.d.ts +21 -0
  188. package/dist/view.d.ts.map +1 -0
  189. package/dist/view.js +36 -0
  190. package/dist/view.js.map +1 -0
  191. package/package.json +111 -0
  192. package/src/client.ts +278 -0
  193. package/src/contracts/composition_credits/composition_credits.ts +169 -0
  194. package/src/contracts/composition_credits/composition_party_role.ts +189 -0
  195. package/src/contracts/composition_credits/deps/miso_credit/credit.ts +27 -0
  196. package/src/contracts/composition_credits/deps/sui/vec_map.ts +33 -0
  197. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +135 -0
  198. package/src/contracts/cover_art/cover_art.ts +99 -0
  199. package/src/contracts/cover_art/deps/ori/walrus_data.ts +36 -0
  200. package/src/contracts/miso/composition.ts +343 -0
  201. package/src/contracts/miso/deal.ts +257 -0
  202. package/src/contracts/miso/deps/bps/bps.ts +23 -0
  203. package/src/contracts/miso/recording.ts +298 -0
  204. package/src/contracts/miso/release.ts +392 -0
  205. package/src/contracts/miso/track.ts +153 -0
  206. package/src/contracts/recording_credits/deps/miso_credit/credit.ts +27 -0
  207. package/src/contracts/recording_credits/deps/sui/vec_map.ts +33 -0
  208. package/src/contracts/recording_credits/deps/sui/vec_set.ts +21 -0
  209. package/src/contracts/recording_credits/recording_credits.ts +458 -0
  210. package/src/contracts/recording_credits/recording_party_role.ts +1041 -0
  211. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +138 -0
  212. package/src/contracts/release_cover_art/deps/0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78/walrus_data.ts +36 -0
  213. package/src/contracts/release_cover_art/deps/cover_art/cover_art.ts +23 -0
  214. package/src/contracts/release_cover_art/deps/per_track/per_track.ts +36 -0
  215. package/src/contracts/release_cover_art/release_cover_art.ts +251 -0
  216. package/src/contracts/release_credits/deps/miso_credit/credit.ts +27 -0
  217. package/src/contracts/release_credits/deps/sui/vec_map.ts +33 -0
  218. package/src/contracts/release_credits/release_credits.ts +156 -0
  219. package/src/contracts/release_credits/release_party_role.ts +87 -0
  220. package/src/contracts/royalty_pool/deps/std/type_name.ts +22 -0
  221. package/src/contracts/royalty_pool/deps/sui/balance.ts +17 -0
  222. package/src/contracts/royalty_pool/deps/sui/vec_map.ts +33 -0
  223. package/src/contracts/royalty_pool/pool.ts +577 -0
  224. package/src/contracts/royalty_pool/stake.ts +317 -0
  225. package/src/contracts/utils/index.ts +229 -0
  226. package/src/contracts.ts +30 -0
  227. package/src/cover.ts +136 -0
  228. package/src/credits.ts +645 -0
  229. package/src/execute.ts +141 -0
  230. package/src/extensions/royalty-pool.ts +85 -0
  231. package/src/index.ts +17 -0
  232. package/src/internal.ts +85 -0
  233. package/src/parsers.ts +80 -0
  234. package/src/queries.ts +478 -0
  235. package/src/schemas.ts +96 -0
  236. package/src/transactions.ts +290 -0
  237. package/src/types.ts +244 -0
  238. package/src/view.ts +59 -0
@@ -0,0 +1,171 @@
1
+ import type { ClientWithCoreApi } from "@mysten/sui/client";
2
+ import type { TxThunk } from "./transactions.ts";
3
+ /** A composition writing role. `Custom` carries a free-form (validated) name. */
4
+ export type CompositionRole = {
5
+ type: "Adapter" | "Arranger" | "Composer" | "Lyricist" | "Songwriter" | "Translator";
6
+ } | {
7
+ type: "Custom";
8
+ name: string;
9
+ };
10
+ /** Seniority/prominence level for a recording role. */
11
+ export type RecordingRoleLevel = "Additional" | "Assistant" | "Associate" | "Backing" | "Executive" | "Featured" | "Lead" | "Primary" | "Principal";
12
+ /** Recording role base names that carry an optional level. */
13
+ export type RecordingLeveledRoleType = "Actor" | "Arranger" | "BandLeader" | "Choir" | "ChoirMaster" | "ConcertMaster" | "Conductor" | "Contractor" | "DJ" | "Editor" | "Engineer" | "Ensemble" | "MasteringEngineer" | "MixingEngineer" | "MusicDirector" | "MusicSupervisor" | "Narrator" | "Orchestra" | "Orchestrator" | "Performer" | "Producer" | "Programmer" | "RecordingEngineer" | "RemixingEngineer" | "Soloist" | "SoundDesigner" | "Speaker" | "Vocalist";
14
+ /**
15
+ * A recording production/performance role. Most roles take an optional `level`;
16
+ * `Instrumentalist` also carries the instrument name; `Custom` carries a free-form
17
+ * (validated) name; `ArtistsAndRepertoire` and `Copyist` are clerical and take no
18
+ * level.
19
+ */
20
+ export type RecordingRole = {
21
+ type: RecordingLeveledRoleType;
22
+ level?: RecordingRoleLevel;
23
+ } | {
24
+ type: "Instrumentalist";
25
+ instrument: string;
26
+ level?: RecordingRoleLevel;
27
+ } | {
28
+ type: "Custom";
29
+ name: string;
30
+ level?: RecordingRoleLevel;
31
+ } | {
32
+ type: "ArtistsAndRepertoire";
33
+ } | {
34
+ type: "Copyist";
35
+ };
36
+ /** A release billing role — a release credit carries exactly one of these. */
37
+ export type ReleaseRole = "Primary" | "Featured";
38
+ export interface AttachCompositionCreditParams {
39
+ /** The `Composition` object to credit on. */
40
+ compositionId: string;
41
+ /** The composition's `CompositionAdminCap`. */
42
+ compositionAdminCapId: string;
43
+ /** The `Party` being credited. */
44
+ partyId: string;
45
+ /** Human-readable name for the credit (≤200 bytes, non-empty). */
46
+ displayName: string;
47
+ /** 1–5 writing roles; duplicates are rejected on-chain. */
48
+ roles: CompositionRole[];
49
+ /** The composition's share coin type (the `CompositionShare` phantom). */
50
+ compositionShareType: string;
51
+ /** `composition_credits` package id (roles + `add_credit`). */
52
+ compositionCreditsPackageId: string;
53
+ /** `miso_credit` package id (home of `credit::new`). */
54
+ misoCreditPackageId: string;
55
+ }
56
+ /**
57
+ * Adds a writing credit for a party on a composition. Throws (client-side,
58
+ * mirroring the Move aborts) when `displayName` is empty or over 200 UTF-8
59
+ * bytes, or `roles` is empty, has more than 5 entries, or contains duplicates.
60
+ */
61
+ export declare function attachCompositionCredit(p: AttachCompositionCreditParams): TxThunk;
62
+ export interface AttachRecordingCreditParams {
63
+ /** The `Recording` object to credit on. */
64
+ recordingId: string;
65
+ /** The recording's `RecordingAdminCap`. */
66
+ recordingAdminCapId: string;
67
+ /** The `Party` being credited. */
68
+ partyId: string;
69
+ /** Human-readable name for the credit (≤200 bytes, non-empty). */
70
+ displayName: string;
71
+ /** 1–10 production/performance roles; duplicates are rejected on-chain. */
72
+ roles: RecordingRole[];
73
+ /** The recording's own share coin type (the `RecordingShare` phantom). */
74
+ recordingShareType: string;
75
+ /** The parent composition's share coin type (the `CompositionShare` phantom). */
76
+ compositionShareType: string;
77
+ /** `recording_credits` package id (roles + `add_credit`). */
78
+ recordingCreditsPackageId: string;
79
+ /** `miso_credit` package id (home of `credit::new`). */
80
+ misoCreditPackageId: string;
81
+ }
82
+ /**
83
+ * Adds a production/performance credit for a party on a recording. Throws
84
+ * (client-side, mirroring the Move aborts) when `displayName` is empty or over
85
+ * 200 UTF-8 bytes, or `roles` is empty, has more than 10 entries, or contains
86
+ * duplicates (same type + instrument + custom name + level).
87
+ */
88
+ export declare function attachRecordingCredit(p: AttachRecordingCreditParams): TxThunk;
89
+ export interface AddRecordingArtistParams {
90
+ /** The `Recording` object. */
91
+ recordingId: string;
92
+ /** The recording's `RecordingAdminCap`. */
93
+ recordingAdminCapId: string;
94
+ /** The `Party` to designate. Must already be credited on the recording. */
95
+ partyId: string;
96
+ /** The recording's own share coin type (the `RecordingShare` phantom). */
97
+ recordingShareType: string;
98
+ /** The parent composition's share coin type (the `CompositionShare` phantom). */
99
+ compositionShareType: string;
100
+ /** `recording_credits` package id. */
101
+ recordingCreditsPackageId: string;
102
+ }
103
+ /**
104
+ * Designates an already-credited party as a primary artist on a recording. The
105
+ * party must be credited first (via `attachRecordingCredit`) and not already a
106
+ * primary or featured artist.
107
+ */
108
+ export declare function addRecordingPrimaryArtist(p: AddRecordingArtistParams): TxThunk;
109
+ /**
110
+ * Designates an already-credited party as a featured artist on a recording. The
111
+ * party must be credited first (via `attachRecordingCredit`) and not already a
112
+ * primary or featured artist.
113
+ */
114
+ export declare function addRecordingFeaturedArtist(p: AddRecordingArtistParams): TxThunk;
115
+ export interface AddReleaseCreditParams {
116
+ /** The `Release` object to credit on. */
117
+ releaseId: string;
118
+ /** The release's `ReleaseAdminCap`. */
119
+ releaseAdminCapId: string;
120
+ /** The `Party` being credited. */
121
+ partyId: string;
122
+ /** Human-readable name for the credit (≤200 bytes, non-empty). */
123
+ displayName: string;
124
+ /** The single billing role: `"Primary"` or `"Featured"`. */
125
+ role: ReleaseRole;
126
+ /** `release_credits` package id (roles + `add_credit`). */
127
+ releaseCreditsPackageId: string;
128
+ /** `miso_credit` package id (home of `credit::new`). */
129
+ misoCreditPackageId: string;
130
+ }
131
+ /**
132
+ * Adds a top-line billing credit (a single role) for a party on a release.
133
+ * Throws (client-side, mirroring the Move aborts) when `displayName` is empty
134
+ * or over 200 UTF-8 bytes. The single role is structural, so no role checks.
135
+ */
136
+ export declare function addReleaseCredit(p: AddReleaseCreditParams): TxThunk;
137
+ /** A normalized credit: the party, its display name, and its role labels. */
138
+ export interface CreditView {
139
+ /** Object id of the credited `Party`. */
140
+ partyId: string;
141
+ /** Human-readable name for the credit. */
142
+ displayName: string;
143
+ /**
144
+ * Role labels (the `name()` semantics). For a recording `Instrumentalist` the
145
+ * instrument is included (`"Instrumentalist: Guitar"`); a recording role's level
146
+ * is appended in parentheses (`"Producer (Lead)"`).
147
+ */
148
+ roles: string[];
149
+ }
150
+ /** A recording's credits, plus its primary/featured artist party ids. */
151
+ export interface RecordingCreditsView {
152
+ credits: CreditView[];
153
+ primaryArtistIds: string[];
154
+ featuredArtistIds: string[];
155
+ }
156
+ /**
157
+ * Reads a composition's writing credits (the `composition_credits` extension), or
158
+ * `null` if no credits field is attached.
159
+ */
160
+ export declare function getCompositionCredits(client: ClientWithCoreApi, compositionId: string, compositionCreditsPackageId: string): Promise<CreditView[] | null>;
161
+ /**
162
+ * Reads a recording's credits plus its primary/featured artist party ids (the
163
+ * `recording_credits` extension), or `null` if no credits field is attached.
164
+ */
165
+ export declare function getRecordingCredits(client: ClientWithCoreApi, recordingId: string, recordingCreditsPackageId: string): Promise<RecordingCreditsView | null>;
166
+ /**
167
+ * Reads a release's top-line billing credits (the `release_credits` extension), or
168
+ * `null` if no credits field is attached. Each credit has exactly one role.
169
+ */
170
+ export declare function getReleaseCredits(client: ClientWithCoreApi, releaseId: string, releaseCreditsPackageId: string): Promise<CreditView[] | null>;
171
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../src/credits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,360 @@
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 { isNotFound } from "./queries.js";
7
+ import * as compositionCredits from "./contracts/composition_credits/composition_credits.js";
8
+ import * as compositionPartyRole from "./contracts/composition_credits/composition_party_role.js";
9
+ import * as recordingCredits from "./contracts/recording_credits/recording_credits.js";
10
+ import * as recordingPartyRole from "./contracts/recording_credits/recording_party_role.js";
11
+ import * as releaseCredits from "./contracts/release_credits/release_credits.js";
12
+ import * as releasePartyRole from "./contracts/release_credits/release_party_role.js";
13
+ const COMPOSITION_ROLE_CTOR = {
14
+ Adapter: compositionPartyRole.newAdapterRole,
15
+ Arranger: compositionPartyRole.newArrangerRole,
16
+ Composer: compositionPartyRole.newComposerRole,
17
+ Lyricist: compositionPartyRole.newLyricistRole,
18
+ Songwriter: compositionPartyRole.newSongwriterRole,
19
+ Translator: compositionPartyRole.newTranslatorRole,
20
+ };
21
+ const RECORDING_LEVEL_CTOR = {
22
+ Additional: recordingPartyRole.newAdditionalRoleLevel,
23
+ Assistant: recordingPartyRole.newAssistantRoleLevel,
24
+ Associate: recordingPartyRole.newAssociateRoleLevel,
25
+ Backing: recordingPartyRole.newBackingRoleLevel,
26
+ Executive: recordingPartyRole.newExecutiveRoleLevel,
27
+ Featured: recordingPartyRole.newFeaturedRoleLevel,
28
+ Lead: recordingPartyRole.newLeadRoleLevel,
29
+ Primary: recordingPartyRole.newPrimaryRoleLevel,
30
+ Principal: recordingPartyRole.newPrincipalRoleLevel,
31
+ };
32
+ const RECORDING_LEVELED_ROLE_CTOR = {
33
+ Actor: recordingPartyRole.newActorRole,
34
+ Arranger: recordingPartyRole.newArrangerRole,
35
+ BandLeader: recordingPartyRole.newBandLeaderRole,
36
+ Choir: recordingPartyRole.newChoirRole,
37
+ ChoirMaster: recordingPartyRole.newChoirMasterRole,
38
+ ConcertMaster: recordingPartyRole.newConcertMasterRole,
39
+ Conductor: recordingPartyRole.newConductorRole,
40
+ Contractor: recordingPartyRole.newContractorRole,
41
+ DJ: recordingPartyRole.newDjRole,
42
+ Editor: recordingPartyRole.newEditorRole,
43
+ Engineer: recordingPartyRole.newEngineerRole,
44
+ Ensemble: recordingPartyRole.newEnsembleRole,
45
+ MasteringEngineer: recordingPartyRole.newMasteringEngineerRole,
46
+ MixingEngineer: recordingPartyRole.newMixingEngineerRole,
47
+ MusicDirector: recordingPartyRole.newMusicDirectorRole,
48
+ MusicSupervisor: recordingPartyRole.newMusicSupervisorRole,
49
+ Narrator: recordingPartyRole.newNarratorRole,
50
+ Orchestra: recordingPartyRole.newOrchestraRole,
51
+ Orchestrator: recordingPartyRole.newOrchestratorRole,
52
+ Performer: recordingPartyRole.newPerformerRole,
53
+ Producer: recordingPartyRole.newProducerRole,
54
+ Programmer: recordingPartyRole.newProgrammerRole,
55
+ RecordingEngineer: recordingPartyRole.newRecordingEngineerRole,
56
+ RemixingEngineer: recordingPartyRole.newRemixingEngineerRole,
57
+ Soloist: recordingPartyRole.newSoloistRole,
58
+ SoundDesigner: recordingPartyRole.newSoundDesignerRole,
59
+ Speaker: recordingPartyRole.newSpeakerRole,
60
+ Vocalist: recordingPartyRole.newVocalistRole,
61
+ };
62
+ /** Builds an `Option<RecordingPartyRoleLevel>` argument for a role constructor. */
63
+ function levelOption(tx, pkg, level) {
64
+ const levelType = `${pkg}::recording_party_role::RecordingPartyRoleLevel`;
65
+ if (!level)
66
+ return tx.moveCall({ target: OPTION_NONE, typeArguments: [levelType] });
67
+ const lvl = tx.add(RECORDING_LEVEL_CTOR[level]({ package: pkg }));
68
+ return tx.moveCall({ target: OPTION_SOME, typeArguments: [levelType], arguments: [lvl] });
69
+ }
70
+ /** Builds one `CompositionPartyRole` value in the PTB. */
71
+ function buildCompositionRole(tx, pkg, role) {
72
+ if (role.type === "Custom") {
73
+ return tx.add(compositionPartyRole.newCustomRole({ package: pkg, arguments: [role.name] }));
74
+ }
75
+ return tx.add(COMPOSITION_ROLE_CTOR[role.type]({ package: pkg }));
76
+ }
77
+ /** Builds one `RecordingPartyRole` value in the PTB. */
78
+ function buildRecordingRole(tx, pkg, role) {
79
+ switch (role.type) {
80
+ case "ArtistsAndRepertoire":
81
+ return tx.add(recordingPartyRole.newArtistsAndRepertoireRole({ package: pkg }));
82
+ case "Copyist":
83
+ return tx.add(recordingPartyRole.newCopyistRole({ package: pkg }));
84
+ case "Instrumentalist":
85
+ return tx.add(recordingPartyRole.newInstrumentalistRole({
86
+ package: pkg,
87
+ arguments: [role.instrument, levelOption(tx, pkg, role.level)],
88
+ }));
89
+ case "Custom":
90
+ return tx.add(recordingPartyRole.newCustomRole({
91
+ package: pkg,
92
+ arguments: [role.name, levelOption(tx, pkg, role.level)],
93
+ }));
94
+ default:
95
+ return tx.add(RECORDING_LEVELED_ROLE_CTOR[role.type]({
96
+ package: pkg,
97
+ arguments: [levelOption(tx, pkg, role.level)],
98
+ }));
99
+ }
100
+ }
101
+ /** Builds one `ReleasePartyRole` value in the PTB. */
102
+ function buildReleaseRole(tx, pkg, role) {
103
+ const ctor = role === "Primary" ? releasePartyRole.newPrimaryRole : releasePartyRole.newFeaturedRole;
104
+ return tx.add(ctor({ package: pkg }));
105
+ }
106
+ // ── Client-side validation ────────────────────────────────────────────────────
107
+ //
108
+ // Mirrors the Move aborts so bad params fail fast (and readably) at the writer
109
+ // call site instead of as an on-chain abort code:
110
+ // - miso_credit::credit::new — EEmptyString / EMaxDisplayNameLengthExceeded
111
+ // (display name non-empty, ≤200 BYTES of UTF-8) and ENoRoles / EDuplicateRoles.
112
+ // - composition_credits::add_credit — EMinRolesNotMet / EExceedsMaxRoles (1–5).
113
+ // - recording_credits::add_credit — EMinRolesNotMet / EExceedsMaxRoles (1–10).
114
+ const MAX_DISPLAY_NAME_BYTES = 200;
115
+ const MAX_COMPOSITION_ROLES = 5;
116
+ const MAX_RECORDING_ROLES = 10;
117
+ function assertDisplayName(fn, displayName) {
118
+ if (displayName.length === 0)
119
+ throw new Error(`${fn}: displayName must not be empty`);
120
+ const byteLength = new TextEncoder().encode(displayName).length;
121
+ if (byteLength > MAX_DISPLAY_NAME_BYTES) {
122
+ throw new Error(`${fn}: displayName must be at most ${MAX_DISPLAY_NAME_BYTES} bytes of UTF-8 (got ${byteLength})`);
123
+ }
124
+ }
125
+ // Move rejects duplicates by full struct equality, so the duplicate key is the
126
+ // role's complete identity: type + instrument + custom name + level.
127
+ function roleKey(role) {
128
+ return JSON.stringify([
129
+ role.type,
130
+ "instrument" in role ? role.instrument : null,
131
+ "name" in role ? role.name : null,
132
+ "level" in role && role.level !== undefined ? role.level : null,
133
+ ]);
134
+ }
135
+ function assertRoles(fn, roles, max) {
136
+ if (roles.length < 1)
137
+ throw new Error(`${fn}: at least one role is required`);
138
+ if (roles.length > max)
139
+ throw new Error(`${fn}: at most ${max} roles are allowed (got ${roles.length})`);
140
+ const seen = new Set();
141
+ for (const role of roles) {
142
+ const key = roleKey(role);
143
+ if (seen.has(key))
144
+ throw new Error(`${fn}: duplicate role ${key}`);
145
+ seen.add(key);
146
+ }
147
+ }
148
+ /** Wraps built role values in a `miso_credit::credit::Credit<Role>`. */
149
+ function buildCredit(tx, misoCreditPackageId, roleType, displayName, roleArgs) {
150
+ const roles = tx.makeMoveVec({ type: roleType, elements: roleArgs });
151
+ return tx.moveCall({
152
+ target: `${misoCreditPackageId}::credit::new`,
153
+ typeArguments: [roleType],
154
+ arguments: [tx.pure.string(displayName), roles],
155
+ });
156
+ }
157
+ /**
158
+ * Adds a writing credit for a party on a composition. Throws (client-side,
159
+ * mirroring the Move aborts) when `displayName` is empty or over 200 UTF-8
160
+ * bytes, or `roles` is empty, has more than 5 entries, or contains duplicates.
161
+ */
162
+ export function attachCompositionCredit(p) {
163
+ assertDisplayName("attachCompositionCredit", p.displayName);
164
+ assertRoles("attachCompositionCredit", p.roles, MAX_COMPOSITION_ROLES);
165
+ return (tx) => {
166
+ const roleType = `${p.compositionCreditsPackageId}::composition_party_role::CompositionPartyRole`;
167
+ const roleArgs = p.roles.map((r) => buildCompositionRole(tx, p.compositionCreditsPackageId, r));
168
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, roleArgs);
169
+ tx.add(compositionCredits.addCredit({
170
+ package: p.compositionCreditsPackageId,
171
+ typeArguments: [p.compositionShareType],
172
+ arguments: [p.compositionId, p.compositionAdminCapId, p.partyId, credit],
173
+ }));
174
+ };
175
+ }
176
+ /**
177
+ * Adds a production/performance credit for a party on a recording. Throws
178
+ * (client-side, mirroring the Move aborts) when `displayName` is empty or over
179
+ * 200 UTF-8 bytes, or `roles` is empty, has more than 10 entries, or contains
180
+ * duplicates (same type + instrument + custom name + level).
181
+ */
182
+ export function attachRecordingCredit(p) {
183
+ assertDisplayName("attachRecordingCredit", p.displayName);
184
+ assertRoles("attachRecordingCredit", p.roles, MAX_RECORDING_ROLES);
185
+ return (tx) => {
186
+ const roleType = `${p.recordingCreditsPackageId}::recording_party_role::RecordingPartyRole`;
187
+ const roleArgs = p.roles.map((r) => buildRecordingRole(tx, p.recordingCreditsPackageId, r));
188
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, roleArgs);
189
+ tx.add(recordingCredits.addCredit({
190
+ package: p.recordingCreditsPackageId,
191
+ typeArguments: [p.recordingShareType, p.compositionShareType],
192
+ arguments: [p.recordingId, p.recordingAdminCapId, p.partyId, credit],
193
+ }));
194
+ };
195
+ }
196
+ /**
197
+ * Designates an already-credited party as a primary artist on a recording. The
198
+ * party must be credited first (via `attachRecordingCredit`) and not already a
199
+ * primary or featured artist.
200
+ */
201
+ export function addRecordingPrimaryArtist(p) {
202
+ return (tx) => {
203
+ tx.add(recordingCredits.addPrimaryArtist({
204
+ package: p.recordingCreditsPackageId,
205
+ typeArguments: [p.recordingShareType, p.compositionShareType],
206
+ arguments: [p.recordingId, p.recordingAdminCapId, p.partyId],
207
+ }));
208
+ };
209
+ }
210
+ /**
211
+ * Designates an already-credited party as a featured artist on a recording. The
212
+ * party must be credited first (via `attachRecordingCredit`) and not already a
213
+ * primary or featured artist.
214
+ */
215
+ export function addRecordingFeaturedArtist(p) {
216
+ return (tx) => {
217
+ tx.add(recordingCredits.addFeaturedArtist({
218
+ package: p.recordingCreditsPackageId,
219
+ typeArguments: [p.recordingShareType, p.compositionShareType],
220
+ arguments: [p.recordingId, p.recordingAdminCapId, p.partyId],
221
+ }));
222
+ };
223
+ }
224
+ /**
225
+ * Adds a top-line billing credit (a single role) for a party on a release.
226
+ * Throws (client-side, mirroring the Move aborts) when `displayName` is empty
227
+ * or over 200 UTF-8 bytes. The single role is structural, so no role checks.
228
+ */
229
+ export function addReleaseCredit(p) {
230
+ assertDisplayName("addReleaseCredit", p.displayName);
231
+ return (tx) => {
232
+ const roleType = `${p.releaseCreditsPackageId}::release_party_role::ReleasePartyRole`;
233
+ const roleArg = buildReleaseRole(tx, p.releaseCreditsPackageId, p.role);
234
+ const credit = buildCredit(tx, p.misoCreditPackageId, roleType, p.displayName, [roleArg]);
235
+ tx.add(releaseCredits.addCredit({
236
+ package: p.releaseCreditsPackageId,
237
+ arguments: [p.releaseId, p.releaseAdminCapId, p.partyId, credit],
238
+ }));
239
+ };
240
+ }
241
+ // Credits are stored as a dynamic field on the work's UID under the extension's
242
+ // `ExtensionKey()` — a positional struct with no fields, so Move's implicit
243
+ // `dummy_field: bool` serializes to a single `false` byte. The stored object is a
244
+ // `Field { id, name: <Key>, value: <Credits> }`.
245
+ const CompositionCreditsField = bcs.struct("Field", {
246
+ id: bcs.Address,
247
+ name: compositionCredits.ExtensionKey,
248
+ value: compositionCredits.CompositionCredits,
249
+ });
250
+ const RecordingCreditsField = bcs.struct("Field", {
251
+ id: bcs.Address,
252
+ name: recordingCredits.ExtensionKey,
253
+ value: recordingCredits.RecordingCredits,
254
+ });
255
+ const ReleaseCreditsField = bcs.struct("Field", {
256
+ id: bcs.Address,
257
+ name: releaseCredits.ExtensionKey,
258
+ value: releaseCredits.ReleaseCredits,
259
+ });
260
+ const COMPOSITION_CREDITS_KEY_BYTES = compositionCredits.ExtensionKey.serialize([false]).toBytes();
261
+ const RECORDING_CREDITS_KEY_BYTES = recordingCredits.ExtensionKey.serialize([false]).toBytes();
262
+ const RELEASE_CREDITS_KEY_BYTES = releaseCredits.ExtensionKey.serialize([false]).toBytes();
263
+ /** Fetches the BCS content of a work's credits dynamic field, or `null` if none. */
264
+ async function fetchCreditsField(client, workId, keyType, keyBytes) {
265
+ const fieldId = deriveDynamicFieldID(workId, keyType, keyBytes);
266
+ try {
267
+ const { object } = await client.core.getObject({ objectId: fieldId, include: { content: true } });
268
+ return object?.content ?? null;
269
+ }
270
+ catch (e) {
271
+ if (isNotFound(e))
272
+ return null;
273
+ throw e;
274
+ }
275
+ }
276
+ function creditViews(credits, roleLabel) {
277
+ return credits.contents.map((entry) => ({
278
+ partyId: entry.key,
279
+ displayName: entry.value.display_name,
280
+ roles: entry.value.roles.map(roleLabel),
281
+ }));
282
+ }
283
+ // `name()` semantics: the `$kind` is the canonical PascalCase token; `Custom`
284
+ // carries the user-supplied name in its payload.
285
+ function compositionRoleLabel(role) {
286
+ return role.$kind === "Custom" ? role.Custom : role.$kind;
287
+ }
288
+ function releaseRoleLabel(role) {
289
+ return role.$kind;
290
+ }
291
+ // `name()` semantics plus the recording extras: the instrument (for
292
+ // `Instrumentalist`) and the optional level, both surfaced into the label.
293
+ function recordingRoleLabel(role) {
294
+ let base;
295
+ let level = null;
296
+ switch (role.$kind) {
297
+ case "Instrumentalist": {
298
+ const [instrument, lvl] = role.Instrumentalist;
299
+ base = `Instrumentalist: ${instrument}`;
300
+ level = lvl;
301
+ break;
302
+ }
303
+ case "Custom": {
304
+ const [name, lvl] = role.Custom;
305
+ base = name;
306
+ level = lvl;
307
+ break;
308
+ }
309
+ case "ArtistsAndRepertoire":
310
+ case "Copyist":
311
+ base = role.$kind;
312
+ break;
313
+ default: {
314
+ // A leveled variant's payload is `Option<Level>`: `None` parses to `true`
315
+ // (the unit-payload convention), `Some(level)` to the level enum object.
316
+ base = role.$kind;
317
+ const payload = role[role.$kind];
318
+ level =
319
+ payload && typeof payload === "object" && "$kind" in payload ? payload : null;
320
+ break;
321
+ }
322
+ }
323
+ return level ? `${base} (${level.$kind})` : base;
324
+ }
325
+ /**
326
+ * Reads a composition's writing credits (the `composition_credits` extension), or
327
+ * `null` if no credits field is attached.
328
+ */
329
+ export async function getCompositionCredits(client, compositionId, compositionCreditsPackageId) {
330
+ const content = await fetchCreditsField(client, compositionId, `${compositionCreditsPackageId}::composition_credits::ExtensionKey`, COMPOSITION_CREDITS_KEY_BYTES);
331
+ if (!content)
332
+ return null;
333
+ return creditViews(CompositionCreditsField.parse(content).value.credits, compositionRoleLabel);
334
+ }
335
+ /**
336
+ * Reads a recording's credits plus its primary/featured artist party ids (the
337
+ * `recording_credits` extension), or `null` if no credits field is attached.
338
+ */
339
+ export async function getRecordingCredits(client, recordingId, recordingCreditsPackageId) {
340
+ const content = await fetchCreditsField(client, recordingId, `${recordingCreditsPackageId}::recording_credits::ExtensionKey`, RECORDING_CREDITS_KEY_BYTES);
341
+ if (!content)
342
+ return null;
343
+ const value = RecordingCreditsField.parse(content).value;
344
+ return {
345
+ credits: creditViews(value.credits, recordingRoleLabel),
346
+ primaryArtistIds: value.primary_artist_ids.contents,
347
+ featuredArtistIds: value.featured_artist_ids.contents,
348
+ };
349
+ }
350
+ /**
351
+ * Reads a release's top-line billing credits (the `release_credits` extension), or
352
+ * `null` if no credits field is attached. Each credit has exactly one role.
353
+ */
354
+ export async function getReleaseCredits(client, releaseId, releaseCreditsPackageId) {
355
+ const content = await fetchCreditsField(client, releaseId, `${releaseCreditsPackageId}::release_credits::ExtensionKey`, RELEASE_CREDITS_KEY_BYTES);
356
+ if (!content)
357
+ return null;
358
+ return creditViews(ReleaseCreditsField.parse(content).value.credits, releaseRoleLabel);
359
+ }
360
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../src/credits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { Transaction } from "@mysten/sui/transactions";
2
+ import type { ClientWithCoreApi, SuiClientTypes } from "@mysten/sui/client";
3
+ import type { Signer } from "@mysten/sui/cryptography";
4
+ import type { TxThunk } from "./transactions.ts";
5
+ /** The effect fields every submit path requests, so extraction is uniform. */
6
+ export declare const FULL_INCLUDE: {
7
+ readonly effects: true;
8
+ readonly objectTypes: true;
9
+ readonly balanceChanges: true;
10
+ };
11
+ type FullInclude = typeof FULL_INCLUDE;
12
+ export interface ExecResult {
13
+ digest: string;
14
+ /** Objects created/mutated/deleted by the transaction. */
15
+ changedObjects: SuiClientTypes.ChangedObject[];
16
+ /** Map of changed objectId → fully-qualified type. */
17
+ objectTypes: Record<string, string>;
18
+ /** Net coin balance deltas by address. */
19
+ balanceChanges: SuiClientTypes.BalanceChange[];
20
+ /** Net gas cost in MIST (computation + storage − rebate). */
21
+ gasUsed: number;
22
+ }
23
+ /** Builds a fresh Transaction from one or more thunks (awaiting async ones). */
24
+ export declare function buildTx(...thunks: TxThunk[]): Promise<Transaction>;
25
+ /** Normalizes the `{ $kind }` transaction-result envelope into an {@link ExecResult}. */
26
+ export declare function toExecResult(res: SuiClientTypes.TransactionResult<FullInclude>): ExecResult;
27
+ /** Signs, executes, and waits for a transaction; returns changes, types, gas. */
28
+ export declare function signAndExecute(client: ClientWithCoreApi, signer: Signer, tx: Transaction): Promise<ExecResult>;
29
+ /** Convenience: build from thunks, then sign+execute in one call. */
30
+ export declare function execThunks(client: ClientWithCoreApi, signer: Signer, ...thunks: TxThunk[]): Promise<ExecResult>;
31
+ /** The package id from the (single) newly-published package. */
32
+ export declare function publishedPackageId(r: ExecResult): string;
33
+ /** All package ids newly published by the transaction (up to 5 per PTB). */
34
+ export declare function allPublishedPackageIds(r: ExecResult): string[];
35
+ /** The first newly-created object whose type contains `substr`. */
36
+ export declare function createdByType(r: ExecResult, substr: string): string;
37
+ /** Like {@link createdByType} but returns undefined instead of throwing. */
38
+ export declare function maybeCreatedByType(r: ExecResult, substr: string): string | undefined;
39
+ /** The first newly-created object whose type is EXACTLY `type` (for non-generic types). */
40
+ export declare function createdByExactType(r: ExecResult, type: string): string;
41
+ /** All newly-created objects whose type contains `substr`. */
42
+ export declare function allCreatedByType(r: ExecResult, substr: string): {
43
+ objectId: string;
44
+ objectType: string;
45
+ }[];
46
+ /** The signed balance delta for `address` in `coinType`, or "0" if absent. */
47
+ export declare function balanceDelta(r: ExecResult, address: string, coinType: string): string;
48
+ export {};
49
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;CAAsE,CAAC;AAChG,KAAK,WAAW,GAAG,OAAO,YAAY,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,cAAc,EAAE,cAAc,CAAC,aAAa,EAAE,CAAC;IAC/C,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,0CAA0C;IAC1C,cAAc,EAAE,cAAc,CAAC,aAAa,EAAE,CAAC;IAC/C,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,wBAAsB,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAIxE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,UAAU,CAqB3F;AAED,iFAAiF;AACjF,wBAAsB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAKpH;AAED,qEAAqE;AACrE,wBAAsB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAErH;AAID,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAI9D;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpF;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAO1G;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrF"}