@misofm/sdk 0.15.10 → 0.16.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 (145) hide show
  1. package/README.md +153 -56
  2. package/dist/client.d.ts +175 -47
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +302 -47
  5. package/dist/client.js.map +1 -1
  6. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts +11 -11
  7. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.d.ts.map +1 -1
  8. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js +9 -9
  9. package/dist/contracts/composition_royalty_pool/composition_royalty_pool.js.map +1 -1
  10. package/dist/contracts/miso_record/deps/std/type_name.d.ts.map +1 -0
  11. package/dist/contracts/miso_record/deps/std/type_name.js.map +1 -0
  12. package/dist/contracts/miso_record/deps/sui/vec_set.d.ts +21 -0
  13. package/dist/contracts/miso_record/deps/sui/vec_set.d.ts.map +1 -0
  14. package/dist/contracts/miso_record/deps/sui/vec_set.js +20 -0
  15. package/dist/contracts/miso_record/deps/sui/vec_set.js.map +1 -0
  16. package/dist/contracts/miso_record/pressing.d.ts +327 -0
  17. package/dist/contracts/miso_record/pressing.d.ts.map +1 -0
  18. package/dist/contracts/miso_record/pressing.js +345 -0
  19. package/dist/contracts/miso_record/pressing.js.map +1 -0
  20. package/dist/contracts/miso_record/record.d.ts +190 -0
  21. package/dist/contracts/miso_record/record.d.ts.map +1 -0
  22. package/dist/contracts/miso_record/record.js +226 -0
  23. package/dist/contracts/miso_record/record.js.map +1 -0
  24. package/dist/contracts/miso_record_shop/deps/std/type_name.d.ts +18 -0
  25. package/dist/contracts/miso_record_shop/deps/std/type_name.d.ts.map +1 -0
  26. package/dist/contracts/miso_record_shop/deps/std/type_name.js +20 -0
  27. package/dist/contracts/miso_record_shop/deps/std/type_name.js.map +1 -0
  28. package/dist/contracts/miso_record_shop/listing.d.ts +387 -0
  29. package/dist/contracts/miso_record_shop/listing.d.ts.map +1 -0
  30. package/dist/contracts/miso_record_shop/listing.js +380 -0
  31. package/dist/contracts/miso_record_shop/listing.js.map +1 -0
  32. package/dist/contracts/miso_record_shop/witness.d.ts +7 -0
  33. package/dist/contracts/miso_record_shop/witness.d.ts.map +1 -0
  34. package/dist/contracts/miso_record_shop/witness.js +9 -0
  35. package/dist/contracts/miso_record_shop/witness.js.map +1 -0
  36. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts +10 -12
  37. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.d.ts.map +1 -1
  38. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js +8 -10
  39. package/dist/contracts/recording_royalty_pool/recording_royalty_pool.js.map +1 -1
  40. package/dist/contracts/vault/vault.d.ts +149 -23
  41. package/dist/contracts/vault/vault.d.ts.map +1 -1
  42. package/dist/contracts/vault/vault.js +144 -18
  43. package/dist/contracts/vault/vault.js.map +1 -1
  44. package/dist/contracts.d.ts +3 -3
  45. package/dist/contracts.d.ts.map +1 -1
  46. package/dist/contracts.js +5 -4
  47. package/dist/contracts.js.map +1 -1
  48. package/dist/deployments.d.ts +47 -11
  49. package/dist/deployments.d.ts.map +1 -1
  50. package/dist/deployments.js +48 -9
  51. package/dist/deployments.js.map +1 -1
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/mix.d.ts +144 -0
  57. package/dist/mix.d.ts.map +1 -0
  58. package/dist/mix.js +656 -0
  59. package/dist/mix.js.map +1 -0
  60. package/dist/pressing.d.ts +72 -156
  61. package/dist/pressing.d.ts.map +1 -1
  62. package/dist/pressing.js +269 -261
  63. package/dist/pressing.js.map +1 -1
  64. package/dist/publication.d.ts +5 -2
  65. package/dist/publication.d.ts.map +1 -1
  66. package/dist/publication.js +63 -34
  67. package/dist/publication.js.map +1 -1
  68. package/dist/read/catalog.d.ts +8 -5
  69. package/dist/read/catalog.d.ts.map +1 -1
  70. package/dist/read/catalog.js +47 -35
  71. package/dist/read/catalog.js.map +1 -1
  72. package/dist/read/config.d.ts +6 -4
  73. package/dist/read/config.d.ts.map +1 -1
  74. package/dist/read/config.js +1 -2
  75. package/dist/read/config.js.map +1 -1
  76. package/dist/read/index.d.ts +1 -1
  77. package/dist/read/index.d.ts.map +1 -1
  78. package/dist/read/index.js +1 -1
  79. package/dist/read/index.js.map +1 -1
  80. package/dist/read/internal/scalars.d.ts.map +1 -1
  81. package/dist/read/internal/scalars.js +4 -3
  82. package/dist/read/internal/scalars.js.map +1 -1
  83. package/dist/read/internal/walrus.d.ts.map +1 -1
  84. package/dist/read/internal/walrus.js +2 -1
  85. package/dist/read/internal/walrus.js.map +1 -1
  86. package/dist/read/receipts.d.ts +21 -12
  87. package/dist/read/receipts.d.ts.map +1 -1
  88. package/dist/read/receipts.js +159 -56
  89. package/dist/read/receipts.js.map +1 -1
  90. package/dist/read/types.d.ts +40 -26
  91. package/dist/read/types.d.ts.map +1 -1
  92. package/dist/read/wallet.d.ts +3 -4
  93. package/dist/read/wallet.d.ts.map +1 -1
  94. package/dist/read/wallet.js +72 -53
  95. package/dist/read/wallet.js.map +1 -1
  96. package/dist/vault.d.ts +71 -15
  97. package/dist/vault.d.ts.map +1 -1
  98. package/dist/vault.js +135 -29
  99. package/dist/vault.js.map +1 -1
  100. package/package.json +10 -3
  101. package/src/client.ts +404 -69
  102. package/src/contracts/composition_royalty_pool/composition_royalty_pool.ts +15 -15
  103. package/src/contracts/miso_record/deps/sui/vec_set.ts +21 -0
  104. package/src/contracts/miso_record/pressing.ts +522 -0
  105. package/src/contracts/miso_record/record.ts +338 -0
  106. package/src/contracts/miso_record_shop/deps/std/type_name.ts +22 -0
  107. package/src/contracts/miso_record_shop/listing.ts +602 -0
  108. package/src/contracts/miso_record_shop/witness.ts +11 -0
  109. package/src/contracts/recording_royalty_pool/recording_royalty_pool.ts +14 -16
  110. package/src/contracts/vault/vault.ts +226 -21
  111. package/src/contracts.ts +5 -4
  112. package/src/deployments.ts +134 -38
  113. package/src/index.ts +2 -0
  114. package/src/mix.ts +910 -0
  115. package/src/pressing.ts +428 -423
  116. package/src/publication.ts +69 -36
  117. package/src/read/catalog.ts +49 -34
  118. package/src/read/config.ts +7 -7
  119. package/src/read/index.ts +9 -1
  120. package/src/read/internal/scalars.ts +4 -2
  121. package/src/read/internal/walrus.ts +2 -1
  122. package/src/read/receipts.ts +181 -66
  123. package/src/read/types.ts +41 -24
  124. package/src/read/wallet.ts +70 -57
  125. package/src/vault.ts +228 -41
  126. package/dist/contracts/miso_pressing/certificate.d.ts +0 -89
  127. package/dist/contracts/miso_pressing/certificate.d.ts.map +0 -1
  128. package/dist/contracts/miso_pressing/certificate.js +0 -108
  129. package/dist/contracts/miso_pressing/certificate.js.map +0 -1
  130. package/dist/contracts/miso_pressing/deps/std/type_name.d.ts.map +0 -1
  131. package/dist/contracts/miso_pressing/deps/std/type_name.js.map +0 -1
  132. package/dist/contracts/miso_pressing/listing.d.ts +0 -434
  133. package/dist/contracts/miso_pressing/listing.d.ts.map +0 -1
  134. package/dist/contracts/miso_pressing/listing.js +0 -401
  135. package/dist/contracts/miso_pressing/listing.js.map +0 -1
  136. package/dist/contracts/miso_pressing/pressing.d.ts +0 -334
  137. package/dist/contracts/miso_pressing/pressing.d.ts.map +0 -1
  138. package/dist/contracts/miso_pressing/pressing.js +0 -298
  139. package/dist/contracts/miso_pressing/pressing.js.map +0 -1
  140. package/src/contracts/miso_pressing/certificate.ts +0 -164
  141. package/src/contracts/miso_pressing/listing.ts +0 -592
  142. package/src/contracts/miso_pressing/pressing.ts +0 -399
  143. /package/dist/contracts/{miso_pressing → miso_record}/deps/std/type_name.d.ts +0 -0
  144. /package/dist/contracts/{miso_pressing → miso_record}/deps/std/type_name.js +0 -0
  145. /package/src/contracts/{miso_pressing → miso_record}/deps/std/type_name.ts +0 -0
@@ -6,32 +6,38 @@
6
6
  /**
7
7
  * Generic capability custody and plugin authorization.
8
8
  *
9
- * `Vault<Cap>` holds a capability in a Sui `Referent`. An authorized plugin
10
- * receives the whole capability temporarily, paired with a hot-potato `Borrow`
11
- * receipt that forces the same capability back into the same vault before the
12
- * transaction can finish. Plugin authorization is represented by a typed dynamic
13
- * field in the vault's `Bag`.
9
+ * `Vault<Cap>` is a permanent, deterministically addressed shell that can hold one
10
+ * exact capability in a Sui `Referent`. An authorized plugin receives the whole
11
+ * capability temporarily, paired with a hot-potato `Borrow` receipt that forces
12
+ * the same capability back into the same vault before the transaction can finish.
13
+ * Plugin authorization is represented by a typed dynamic field in the vault's
14
+ * `Bag`.
14
15
  */
15
16
 
16
- import { type BcsType, bcs } from '@mysten/sui/bcs';
17
17
  import { MoveStruct, MoveTuple, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js';
18
+ import { bcs, type BcsType } from '@mysten/sui/bcs';
18
19
  import { type Transaction, type TransactionArgument } from '@mysten/sui/transactions';
19
20
  import * as borrow from './deps/sui/borrow.js';
20
21
  import * as bag from './deps/sui/bag.js';
21
22
  const $moduleName = '@local-pkg/vault::vault';
23
+ export const VaultRegistry = new MoveStruct({ name: `${$moduleName}::VaultRegistry`, fields: {
24
+ id: bcs.Address
25
+ } });
22
26
  /**
23
27
  * Custodies one capability and the typed authorization records for plugins.
24
28
  *
25
- * `Vault` intentionally lacks `store`: only this module can share or destroy it.
26
- * The wrapped capability is never exposed except through a hot-potato borrow that
27
- * requires its exact return.
29
+ * `Vault` intentionally lacks `store`: only this module can share it, and no
30
+ * production API can delete it. `cap_id` permanently binds the shell to the exact
31
+ * capability from which its ID was derived. An empty Vault can only be restored
32
+ * with that same capability object.
28
33
  */
29
34
  export function Vault<Cap extends BcsType<any>>(...typeParameters: [
30
35
  Cap
31
36
  ]) {
32
37
  return new MoveStruct({ name: `${$moduleName}::Vault<${typeParameters[0].name as Cap['name']}>`, fields: {
33
38
  id: bcs.Address,
34
- cap: borrow.Referent(typeParameters[0]),
39
+ cap_id: bcs.Address,
40
+ cap: bcs.option(borrow.Referent(typeParameters[0])),
35
41
  authorized_plugins: bag.Bag
36
42
  } });
37
43
  }
@@ -39,11 +45,16 @@ export const VaultAdminCap = new MoveStruct({ name: `${$moduleName}::VaultAdminC
39
45
  id: bcs.Address,
40
46
  vault_id: bcs.Address
41
47
  } });
48
+ export const VaultKey = new MoveTuple({ name: `${$moduleName}::VaultKey<phantom Cap>`, fields: [bcs.Address] });
49
+ export const VaultAdminCapKey = new MoveTuple({ name: `${$moduleName}::VaultAdminCapKey`, fields: [bcs.bool()] });
42
50
  export const AuthorizedPluginKey = new MoveTuple({ name: `${$moduleName}::AuthorizedPluginKey<phantom Witness>`, fields: [bcs.bool()] });
51
+ export const VaultRegistryCreatedEvent = new MoveStruct({ name: `${$moduleName}::VaultRegistryCreatedEvent`, fields: {
52
+ registry_id: bcs.Address
53
+ } });
43
54
  export const VaultCreatedEvent = new MoveStruct({ name: `${$moduleName}::VaultCreatedEvent<phantom Cap>`, fields: {
44
55
  vault_id: bcs.Address,
45
56
  vault_admin_cap_id: bcs.Address,
46
- wrapped_cap_id: bcs.Address,
57
+ cap_id: bcs.Address,
47
58
  authorized_plugins_id: bcs.Address
48
59
  } });
49
60
  export const PluginAuthorizedEvent = new MoveStruct({ name: `${$moduleName}::PluginAuthorizedEvent<phantom Cap, phantom Witness>`, fields: {
@@ -52,29 +63,39 @@ export const PluginAuthorizedEvent = new MoveStruct({ name: `${$moduleName}::Plu
52
63
  export const PluginRevokedEvent = new MoveStruct({ name: `${$moduleName}::PluginRevokedEvent<phantom Cap, phantom Witness>`, fields: {
53
64
  vault_id: bcs.Address
54
65
  } });
55
- export const VaultDestroyedEvent = new MoveStruct({ name: `${$moduleName}::VaultDestroyedEvent<phantom Cap>`, fields: {
66
+ export const VaultCapabilityWithdrawnEvent = new MoveStruct({ name: `${$moduleName}::VaultCapabilityWithdrawnEvent<phantom Cap>`, fields: {
56
67
  vault_id: bcs.Address,
57
- wrapped_cap_id: bcs.Address
68
+ cap_id: bcs.Address
69
+ } });
70
+ export const VaultCapabilityRestoredEvent = new MoveStruct({ name: `${$moduleName}::VaultCapabilityRestoredEvent<phantom Cap>`, fields: {
71
+ vault_id: bcs.Address,
72
+ cap_id: bcs.Address
58
73
  } });
59
74
  export interface NewArguments<Cap extends BcsType<any>> {
75
+ registry: RawTransactionArgument<string>;
60
76
  cap: RawTransactionArgument<Cap>;
61
77
  }
62
78
  export interface NewOptions<Cap extends BcsType<any>> {
63
79
  package?: string;
64
80
  arguments: NewArguments<Cap> | [
81
+ registry: RawTransactionArgument<string>,
65
82
  cap: RawTransactionArgument<Cap>
66
83
  ];
67
84
  typeArguments: [
68
85
  string
69
86
  ];
70
87
  }
71
- /** Custody `cap` and create its vault-specific administrator capability. */
88
+ /**
89
+ * Custody `cap` in its canonical permanent Vault and create the canonical
90
+ * vault-specific administrator capability.
91
+ */
72
92
  export function _new<Cap extends BcsType<any>>(options: NewOptions<Cap>) {
73
93
  const packageAddress = options.package ?? '@local-pkg/vault';
74
94
  const argumentsTypes = [
95
+ null,
75
96
  `${options.typeArguments[0]}`
76
97
  ] satisfies (string | null)[];
77
- const parameterNames = ["cap"];
98
+ const parameterNames = ["registry", "cap"];
78
99
  return (tx: Transaction) => tx.moveCall({
79
100
  package: packageAddress,
80
101
  module: 'vault',
@@ -110,13 +131,46 @@ export function share(options: ShareOptions) {
110
131
  typeArguments: options.typeArguments
111
132
  });
112
133
  }
113
- export interface DestroyArguments {
134
+ export interface TransferAdminCapArguments {
135
+ adminCap: RawTransactionArgument<string>;
136
+ recipient: RawTransactionArgument<string>;
137
+ }
138
+ export interface TransferAdminCapOptions {
139
+ package?: string;
140
+ arguments: TransferAdminCapArguments | [
141
+ adminCap: RawTransactionArgument<string>,
142
+ recipient: RawTransactionArgument<string>
143
+ ];
144
+ typeArguments: [
145
+ string
146
+ ];
147
+ }
148
+ /**
149
+ * Transfer exclusive administration without exposing public freeze, share, or
150
+ * wrapping operations for the VaultAdminCap.
151
+ */
152
+ export function transferAdminCap(options: TransferAdminCapOptions) {
153
+ const packageAddress = options.package ?? '@local-pkg/vault';
154
+ const argumentsTypes = [
155
+ null,
156
+ 'address'
157
+ ] satisfies (string | null)[];
158
+ const parameterNames = ["adminCap", "recipient"];
159
+ return (tx: Transaction) => tx.moveCall({
160
+ package: packageAddress,
161
+ module: 'vault',
162
+ function: 'transfer_admin_cap',
163
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
164
+ typeArguments: options.typeArguments
165
+ });
166
+ }
167
+ export interface WithdrawCapArguments {
114
168
  self: RawTransactionArgument<string>;
115
169
  adminCap: RawTransactionArgument<string>;
116
170
  }
117
- export interface DestroyOptions {
171
+ export interface WithdrawCapOptions {
118
172
  package?: string;
119
- arguments: DestroyArguments | [
173
+ arguments: WithdrawCapArguments | [
120
174
  self: RawTransactionArgument<string>,
121
175
  adminCap: RawTransactionArgument<string>
122
176
  ];
@@ -124,8 +178,11 @@ export interface DestroyOptions {
124
178
  string
125
179
  ];
126
180
  }
127
- /** Destroy an empty vault and return the exact capability it custodied. */
128
- export function destroy(options: DestroyOptions) {
181
+ /**
182
+ * Withdraw the exact capability while leaving its canonical Vault and
183
+ * VaultAdminCap intact. Every plugin must be revoked first.
184
+ */
185
+ export function withdrawCap(options: WithdrawCapOptions) {
129
186
  const packageAddress = options.package ?? '@local-pkg/vault';
130
187
  const argumentsTypes = [
131
188
  null,
@@ -135,7 +192,43 @@ export function destroy(options: DestroyOptions) {
135
192
  return (tx: Transaction) => tx.moveCall({
136
193
  package: packageAddress,
137
194
  module: 'vault',
138
- function: 'destroy',
195
+ function: 'withdraw_cap',
196
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
197
+ typeArguments: options.typeArguments
198
+ });
199
+ }
200
+ export interface RestoreCapArguments<Cap extends BcsType<any>> {
201
+ self: RawTransactionArgument<string>;
202
+ adminCap: RawTransactionArgument<string>;
203
+ cap: RawTransactionArgument<Cap>;
204
+ }
205
+ export interface RestoreCapOptions<Cap extends BcsType<any>> {
206
+ package?: string;
207
+ arguments: RestoreCapArguments<Cap> | [
208
+ self: RawTransactionArgument<string>,
209
+ adminCap: RawTransactionArgument<string>,
210
+ cap: RawTransactionArgument<Cap>
211
+ ];
212
+ typeArguments: [
213
+ string
214
+ ];
215
+ }
216
+ /**
217
+ * Restore the exact capability used to derive this permanent Vault. Restoring
218
+ * always starts from a clean plugin-authorization slate.
219
+ */
220
+ export function restoreCap<Cap extends BcsType<any>>(options: RestoreCapOptions<Cap>) {
221
+ const packageAddress = options.package ?? '@local-pkg/vault';
222
+ const argumentsTypes = [
223
+ null,
224
+ null,
225
+ `${options.typeArguments[0]}`
226
+ ] satisfies (string | null)[];
227
+ const parameterNames = ["self", "adminCap", "cap"];
228
+ return (tx: Transaction) => tx.moveCall({
229
+ package: packageAddress,
230
+ module: 'vault',
231
+ function: 'restore_cap',
139
232
  arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
140
233
  typeArguments: options.typeArguments
141
234
  });
@@ -315,6 +408,59 @@ export function putBack<Cap extends BcsType<any>>(options: PutBackOptions<Cap>)
315
408
  typeArguments: options.typeArguments
316
409
  });
317
410
  }
411
+ export interface VaultAddressArguments {
412
+ registry: RawTransactionArgument<string>;
413
+ capId: RawTransactionArgument<string>;
414
+ }
415
+ export interface VaultAddressOptions {
416
+ package?: string;
417
+ arguments: VaultAddressArguments | [
418
+ registry: RawTransactionArgument<string>,
419
+ capId: RawTransactionArgument<string>
420
+ ];
421
+ typeArguments: [
422
+ string
423
+ ];
424
+ }
425
+ /** Derive the canonical Vault address for `cap_id` in this registry. */
426
+ export function vaultAddress(options: VaultAddressOptions) {
427
+ const packageAddress = options.package ?? '@local-pkg/vault';
428
+ const argumentsTypes = [
429
+ null,
430
+ '0x2::object::ID'
431
+ ] satisfies (string | null)[];
432
+ const parameterNames = ["registry", "capId"];
433
+ return (tx: Transaction) => tx.moveCall({
434
+ package: packageAddress,
435
+ module: 'vault',
436
+ function: 'vault_address',
437
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
438
+ typeArguments: options.typeArguments
439
+ });
440
+ }
441
+ export interface VaultAdminCapAddressArguments {
442
+ vaultId: RawTransactionArgument<string>;
443
+ }
444
+ export interface VaultAdminCapAddressOptions {
445
+ package?: string;
446
+ arguments: VaultAdminCapAddressArguments | [
447
+ vaultId: RawTransactionArgument<string>
448
+ ];
449
+ }
450
+ /** Derive the canonical VaultAdminCap address for a Vault ID. */
451
+ export function vaultAdminCapAddress(options: VaultAdminCapAddressOptions) {
452
+ const packageAddress = options.package ?? '@local-pkg/vault';
453
+ const argumentsTypes = [
454
+ '0x2::object::ID'
455
+ ] satisfies (string | null)[];
456
+ const parameterNames = ["vaultId"];
457
+ return (tx: Transaction) => tx.moveCall({
458
+ package: packageAddress,
459
+ module: 'vault',
460
+ function: 'vault_admin_cap_address',
461
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
462
+ });
463
+ }
318
464
  export interface VaultIdArguments {
319
465
  self: RawTransactionArgument<string>;
320
466
  }
@@ -341,6 +487,65 @@ export function vaultId(options: VaultIdOptions) {
341
487
  typeArguments: options.typeArguments
342
488
  });
343
489
  }
490
+ export interface CapIdArguments {
491
+ self: RawTransactionArgument<string>;
492
+ }
493
+ export interface CapIdOptions {
494
+ package?: string;
495
+ arguments: CapIdArguments | [
496
+ self: RawTransactionArgument<string>
497
+ ];
498
+ typeArguments: [
499
+ string
500
+ ];
501
+ }
502
+ /** The exact capability object permanently assigned to this Vault. */
503
+ export function capId(options: CapIdOptions) {
504
+ const packageAddress = options.package ?? '@local-pkg/vault';
505
+ const argumentsTypes = [
506
+ null
507
+ ] satisfies (string | null)[];
508
+ const parameterNames = ["self"];
509
+ return (tx: Transaction) => tx.moveCall({
510
+ package: packageAddress,
511
+ module: 'vault',
512
+ function: 'cap_id',
513
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
514
+ typeArguments: options.typeArguments
515
+ });
516
+ }
517
+ export interface IsOccupiedArguments {
518
+ self: RawTransactionArgument<string>;
519
+ }
520
+ export interface IsOccupiedOptions {
521
+ package?: string;
522
+ arguments: IsOccupiedArguments | [
523
+ self: RawTransactionArgument<string>
524
+ ];
525
+ typeArguments: [
526
+ string
527
+ ];
528
+ }
529
+ /**
530
+ * Whether the permanent outer capability slot is occupied.
531
+ *
532
+ * This is the persistent-state custody view. It remains true during a
533
+ * transaction-local lease even though the inner Referent is temporarily empty.
534
+ */
535
+ export function isOccupied(options: IsOccupiedOptions) {
536
+ const packageAddress = options.package ?? '@local-pkg/vault';
537
+ const argumentsTypes = [
538
+ null
539
+ ] satisfies (string | null)[];
540
+ const parameterNames = ["self"];
541
+ return (tx: Transaction) => tx.moveCall({
542
+ package: packageAddress,
543
+ module: 'vault',
544
+ function: 'is_occupied',
545
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
546
+ typeArguments: options.typeArguments
547
+ });
548
+ }
344
549
  export interface AuthorizedPluginsIdArguments {
345
550
  self: RawTransactionArgument<string>;
346
551
  }
package/src/contracts.ts CHANGED
@@ -9,10 +9,11 @@
9
9
  // re-exported from ITS `contracts` namespace — import it from there rather than
10
10
  // mirroring it here.
11
11
 
12
- // The record production line (pressing runs + their per-currency listings).
13
- export * as pressing from "./contracts/miso_pressing/pressing.ts";
14
- export * as listing from "./contracts/miso_pressing/listing.ts";
15
- export * as certificate from "./contracts/miso_pressing/certificate.ts";
12
+ // Record identity/issuance and Record Shop primary-sale mechanics. The
13
+ // package-restricted witness constructor is intentionally not exported here.
14
+ export * as record from "./contracts/miso_record/record.ts";
15
+ export * as pressing from "./contracts/miso_record/pressing.ts";
16
+ export * as listing from "./contracts/miso_record_shop/listing.ts";
16
17
 
17
18
  // Generic royalty-pool primitive plus vault-custodied business-logic plugins.
18
19
  export * as royaltyPool from "./contracts/royalty_pool/pool.ts";
@@ -1,11 +1,65 @@
1
1
  // Copyright (c) Miso Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import type {
5
- MisoDeployment,
6
- MisoNetwork,
7
- } from "@misonetwork/sdk/deployments";
4
+ import type { MisoDeployment, MisoNetwork } from "@misonetwork/sdk/deployments";
8
5
  import { MISO_DEPLOYMENTS } from "@misonetwork/sdk/deployments";
6
+ import { normalizeSuiObjectId } from "@mysten/sui/utils";
7
+
8
+ /** Primary Record sales are unavailable on legacy deployments until both new
9
+ * immutable packages have been freshly published and verified. */
10
+ export type RecordSalesDeployment =
11
+ | {
12
+ readonly status: "unavailable";
13
+ readonly reason: string;
14
+ readonly legacy?: {
15
+ readonly recordPackageId: string;
16
+ readonly pressingPackageId: string;
17
+ };
18
+ }
19
+ | {
20
+ readonly status: "available";
21
+ readonly recordPackageId: string;
22
+ readonly recordShopPackageId: string;
23
+ };
24
+
25
+ export class RecordSalesUnavailableError extends Error {
26
+ override readonly name = "RecordSalesUnavailableError";
27
+ constructor(readonly reason: string) {
28
+ super(`@misofm/sdk: Record sales are unavailable: ${reason}`);
29
+ }
30
+ }
31
+
32
+ export function requireRecordSalesDeployment(
33
+ deployment: RecordSalesDeployment | undefined,
34
+ ): Extract<RecordSalesDeployment, { status: "available" }> {
35
+ if (!deployment || deployment.status === "unavailable") {
36
+ throw new RecordSalesUnavailableError(
37
+ deployment?.reason ?? "no Record sales deployment was configured",
38
+ );
39
+ }
40
+ const canonicalPackageId = (value: string): boolean => {
41
+ if (!/^0x[0-9a-f]{64}$/.test(value)) return false;
42
+ try {
43
+ return normalizeSuiObjectId(value) === value;
44
+ } catch {
45
+ return false;
46
+ }
47
+ };
48
+ if (
49
+ !canonicalPackageId(deployment.recordPackageId) ||
50
+ !canonicalPackageId(deployment.recordShopPackageId)
51
+ ) {
52
+ throw new RecordSalesUnavailableError(
53
+ "Record and Record Shop package IDs must be canonical 32-byte Sui object IDs",
54
+ );
55
+ }
56
+ if (deployment.recordPackageId === deployment.recordShopPackageId) {
57
+ throw new RecordSalesUnavailableError(
58
+ "Record and Record Shop package IDs must be distinct",
59
+ );
60
+ }
61
+ return deployment;
62
+ }
9
63
 
10
64
  /** Complete on-chain identity used by the Miso platform SDK on one network. */
11
65
  export interface MisoPlatformDeployment {
@@ -15,9 +69,8 @@ export interface MisoPlatformDeployment {
15
69
  readonly chainIdentifier: string;
16
70
  /** The complete protocol and Party deployment this platform build targets. */
17
71
  readonly protocol: MisoDeployment;
72
+ readonly recordSales: RecordSalesDeployment;
18
73
  readonly packages: {
19
- readonly pressing: string;
20
- readonly record: string;
21
74
  readonly minato: string;
22
75
  readonly credit: string;
23
76
  readonly compositionCredits: string;
@@ -51,14 +104,22 @@ export interface MisoPlatformDeployment {
51
104
  readonly recordingAdvisory: string;
52
105
  readonly recordingLanguage: string;
53
106
  readonly recordingMasterReference: string;
107
+ /** Canonical plaintext session pointer extension; absent before publication. */
108
+ readonly recordingEngineSession?: string;
109
+ /** Original immutable Record-gated Seal policy; absent before publication. */
110
+ readonly recordSealPolicy?: string;
54
111
  readonly recordingPreview: string;
55
112
  /** External `ori::walrus_data::WalrusData` dependency used by cover art. */
56
113
  readonly ori: string;
57
114
  };
58
115
  readonly objects: {
59
116
  readonly releaseRegistry: string;
117
+ /** Shared parent used to derive canonical Vault object ids. */
118
+ readonly vaultRegistry: string;
60
119
  /** Shared parent used to derive canonical Genre object ids. */
61
120
  readonly genreRegistry: string;
121
+ /** Frozen namespace object embedded in Recording-session Seal identities. */
122
+ readonly recordGate?: string;
62
123
  };
63
124
  readonly legacy: {
64
125
  readonly releaseCoverArtPackages: readonly string[];
@@ -68,7 +129,7 @@ export interface MisoPlatformDeployment {
68
129
  /**
69
130
  * Platform deployments bundled with this SDK release.
70
131
  *
71
- * IDs come only from the verified output of the Ledger-backed deployment run.
132
+ * IDs come only from verified immutable deployment output.
72
133
  * Consumers may still pass an explicit complete deployment for custom networks.
73
134
  */
74
135
  export const MISO_PLATFORM_DEPLOYMENTS = {
@@ -76,46 +137,81 @@ export const MISO_PLATFORM_DEPLOYMENTS = {
76
137
  network: "testnet",
77
138
  chainIdentifier: "69WiPg3DAQiwdxfncX6wYQ2siKwAe6L9BZthQea3JNMD",
78
139
  protocol: MISO_DEPLOYMENTS.testnet,
140
+ recordSales: {
141
+ status: "unavailable",
142
+ reason:
143
+ "the finalized immutable miso_record and miso_record_shop packages have not been deployed",
144
+ legacy: {
145
+ pressingPackageId:
146
+ "0x95fba53c968978f75d6ca8a5e6f0f3ba83fdc3af301bc8419be354a3990af5b9",
147
+ recordPackageId:
148
+ "0x6150c474200f63bf73072642564886e5ecb1a4c0498ede31acd7908d94dbc83b",
149
+ },
150
+ },
79
151
  packages: {
80
- pressing: "0x95fba53c968978f75d6ca8a5e6f0f3ba83fdc3af301bc8419be354a3990af5b9",
81
- record: "0x6150c474200f63bf73072642564886e5ecb1a4c0498ede31acd7908d94dbc83b",
82
- minato: "0x8466e9864c1d947888e73b0e349b035bc22805579eef18f132966f56c8efe1d2",
83
- credit: "0x20d8e38f49445cbae45fd66c262c2cbc4bf4cccab487b3fb443a491dc24071cd",
84
- compositionCredits: "0x8b376967e9c32169727ec5341890f28c66d8577d7bfcecb83aa78aec3e84dce5",
85
- recordingCredits: "0x7096a47b0ba12063c037d6d417bffade758665a3f313574c8ba218823cfb159a",
86
- releaseCredits: "0xbe293700ef758c95b69838df6cfa8377b9cad1dd59cbf933974f68b1766d87b5",
87
- royaltyPool: "0x8021942b5e91c5ef5e383ad481102ee96f52dd77b9b3dbcdf06bb133cd7c91ed",
88
- vault: "0x7075ce4bfc2c738e774c94f1eeb7dc532a5f11ead9b4e3815d90dc16053eae9c",
89
- vaultCompositionRoyaltyPoolPlugin: "0xdd259821c97e887ec7ca20459ef98e3afbb36d2d613b537fbc0027e02c0eb378",
90
- vaultRecordingRoyaltyPoolPlugin: "0xbb873a4e285a8e987d8b5e53919f35172071493872a342ca4c02a941c2af44e3",
91
- vaultPartyWalletPlugin: "0xfb600cc71773f4b9a22921ba16906b4ccfef791540402dbd556b555ca7a305f7",
92
- routedStake: "0x7a55b1841043efea865d65a6601e057400a79a0aa7bb11e781a25dbe622cbe5f",
93
- vaultCompositionRoutedStakePlugin: "0x59a5aa190ed14c754ef292a23320bd5749bbb781c4990dcd4a8ad1dff60797d4",
94
- coverArt: "0x2dae28058b89df93224bacfb9af42fd3ab41f001c2c815fd57fd575024d9a50b",
95
- releaseCoverArt: "0x649b18f2bb3d94f6a611a8e4ad3a29dcf8b7bba3f684056d60897a8a5e835106",
96
- genre: "0x5091d30e893105abe24adf75223f587361034e90516c6e509897bb86d18d2387",
97
- releaseDescription: "0x3e26e4c4c5b3f51070d6d7bb1527eaa304f34ae5dfde078661e180e7594d6d28",
98
- releaseDspLink: "0x2b8e1d7be7a3cbc07e6167c5b5c6511059791b4a2116c1fa97d65cfd871d0bda",
99
- releaseGenre: "0x7882367d45efff41ef0cb9e937029a3f8a3cdf5908d83beeb5cbc0cff178d290",
100
- releaseKind: "0x3e74c960d9446ae2ebf228456ddc1b099d2090501c9cbcd284a999aa2e774e12",
101
- vaultReleaseRevenueDistributorPlugin: "0x23b214507e4b4c344916d10367eaceea1f0dd233b609d99329bb98d55d3c1363",
102
- recordingAdvisory: "0x28e0e72c5b892fc888a9007afa59ebe04ed8e47f12632ddb42cd685d09c4af2e",
103
- recordingLanguage: "0x4b284a9435cf4f48e3785e4485d16be2fcbcef5beaa2b44b6556d9c1028e2c0d",
104
- recordingMasterReference: "0x2b06ab58f2d5a915b42fc5879d52241fc72e804b3da782fa752b2d2f242170c0",
105
- recordingPreview: "0x449aafe29707adf249df7e90355ecb19d939ea77d9e19fd3e2fdb220e73e74f0",
152
+ minato:
153
+ "0x8466e9864c1d947888e73b0e349b035bc22805579eef18f132966f56c8efe1d2",
154
+ credit:
155
+ "0x20d8e38f49445cbae45fd66c262c2cbc4bf4cccab487b3fb443a491dc24071cd",
156
+ compositionCredits:
157
+ "0x8b376967e9c32169727ec5341890f28c66d8577d7bfcecb83aa78aec3e84dce5",
158
+ recordingCredits:
159
+ "0x7096a47b0ba12063c037d6d417bffade758665a3f313574c8ba218823cfb159a",
160
+ releaseCredits:
161
+ "0xbe293700ef758c95b69838df6cfa8377b9cad1dd59cbf933974f68b1766d87b5",
162
+ royaltyPool:
163
+ "0x8021942b5e91c5ef5e383ad481102ee96f52dd77b9b3dbcdf06bb133cd7c91ed",
164
+ vault:
165
+ "0xfe396139d500e4381adefea72da2e0157c54ee5c38cc8bdcbc4edd551d043230",
166
+ vaultCompositionRoyaltyPoolPlugin:
167
+ "0xbfd9b6c9d3e5635c0beb5472b45566b92f509ed67ae4a661bf928c359f3b438f",
168
+ vaultRecordingRoyaltyPoolPlugin:
169
+ "0x1643c188790a7e756310ce779b279159356a9bf7fe8237edf1e5b24a15422615",
170
+ vaultPartyWalletPlugin:
171
+ "0x0d869fe4291fec02821aed40c38349bac8547f0c690316f2a1a2273ac1f317ed",
172
+ routedStake:
173
+ "0x7a55b1841043efea865d65a6601e057400a79a0aa7bb11e781a25dbe622cbe5f",
174
+ vaultCompositionRoutedStakePlugin:
175
+ "0xf86994ebd0dabecda1b14efc02a2e71b3219a7c043841ad8097dc3683bd088dd",
176
+ coverArt:
177
+ "0x2dae28058b89df93224bacfb9af42fd3ab41f001c2c815fd57fd575024d9a50b",
178
+ releaseCoverArt:
179
+ "0x649b18f2bb3d94f6a611a8e4ad3a29dcf8b7bba3f684056d60897a8a5e835106",
180
+ genre:
181
+ "0x5091d30e893105abe24adf75223f587361034e90516c6e509897bb86d18d2387",
182
+ releaseDescription:
183
+ "0x3e26e4c4c5b3f51070d6d7bb1527eaa304f34ae5dfde078661e180e7594d6d28",
184
+ releaseDspLink:
185
+ "0x2b8e1d7be7a3cbc07e6167c5b5c6511059791b4a2116c1fa97d65cfd871d0bda",
186
+ releaseGenre:
187
+ "0x7882367d45efff41ef0cb9e937029a3f8a3cdf5908d83beeb5cbc0cff178d290",
188
+ releaseKind:
189
+ "0x3e74c960d9446ae2ebf228456ddc1b099d2090501c9cbcd284a999aa2e774e12",
190
+ vaultReleaseRevenueDistributorPlugin:
191
+ "0x2172dc326fbf226b6cf6eed610f217fb0ff2682d1938e8089f4d6ce21a4999b5",
192
+ recordingAdvisory:
193
+ "0x28e0e72c5b892fc888a9007afa59ebe04ed8e47f12632ddb42cd685d09c4af2e",
194
+ recordingLanguage:
195
+ "0x4b284a9435cf4f48e3785e4485d16be2fcbcef5beaa2b44b6556d9c1028e2c0d",
196
+ recordingMasterReference:
197
+ "0x2b06ab58f2d5a915b42fc5879d52241fc72e804b3da782fa752b2d2f242170c0",
198
+ recordingPreview:
199
+ "0x449aafe29707adf249df7e90355ecb19d939ea77d9e19fd3e2fdb220e73e74f0",
106
200
  ori: "0x340057f2174fb59e4626742dd2b46c662237837b6187450cb59e4976ce7eac78",
107
201
  },
108
202
  objects: {
109
- releaseRegistry: "0xf5941ae9640f6f24b75e921da16c95fd23d776b9e6518c275a50a5ce6337c8ba",
110
- genreRegistry: "0xa83f9c7a340b5b5b6387d1d5933019b45bcedebbae85bbb89bab855a56e90816",
203
+ releaseRegistry:
204
+ "0xf5941ae9640f6f24b75e921da16c95fd23d776b9e6518c275a50a5ce6337c8ba",
205
+ vaultRegistry:
206
+ "0xee17744a0c6f71bbde98d0c2b4cab58929000fd2f65e28a4676164d34758584b",
207
+ genreRegistry:
208
+ "0xa83f9c7a340b5b5b6387d1d5933019b45bcedebbae85bbb89bab855a56e90816",
111
209
  },
112
210
  legacy: {
113
211
  releaseCoverArtPackages: [],
114
212
  },
115
213
  },
116
- } as const satisfies Partial<
117
- Record<MisoNetwork, MisoPlatformDeployment>
118
- >;
214
+ } as const satisfies Partial<Record<MisoNetwork, MisoPlatformDeployment>>;
119
215
 
120
216
  /** Resolve a bundled platform deployment, failing closed when it is unavailable. */
121
217
  export function getMisoPlatformDeployment(
package/src/index.ts CHANGED
@@ -46,6 +46,7 @@ export * from "./share-template.ts";
46
46
  export * from "./release-graph.ts";
47
47
  export * from "./publication.ts";
48
48
  export * from "./catalog.ts";
49
+ export * from "./mix.ts";
49
50
 
50
51
  // High-level, JSON-safe platform projections used directly by clients and by
51
52
  // the thin HTTP read service. Namespaced because these composed view types are
@@ -58,6 +59,7 @@ export * from "./credits.ts";
58
59
  export * from "./cover.ts";
59
60
  export * from "./release-extensions.ts";
60
61
  export * from "./recording-extensions.ts";
62
+ export * from "./mix.ts";
61
63
  export * from "./vault.ts";
62
64
 
63
65
  // Generated, ABI-bound bindings (BCS structs + type-safe Move calls).