@mysten/kiosk 0.14.6 → 1.0.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 (267) hide show
  1. package/CHANGELOG.md +105 -2
  2. package/dist/client/kiosk-client.d.mts +126 -0
  3. package/dist/client/kiosk-client.d.mts.map +1 -0
  4. package/dist/client/kiosk-client.mjs +124 -0
  5. package/dist/client/kiosk-client.mjs.map +1 -0
  6. package/dist/client/kiosk-transaction.d.mts +236 -0
  7. package/dist/client/kiosk-transaction.d.mts.map +1 -0
  8. package/dist/client/kiosk-transaction.mjs +472 -0
  9. package/dist/client/kiosk-transaction.mjs.map +1 -0
  10. package/dist/client/tp-transaction.d.mts +139 -0
  11. package/dist/client/tp-transaction.d.mts.map +1 -0
  12. package/dist/client/tp-transaction.mjs +273 -0
  13. package/dist/client/tp-transaction.mjs.map +1 -0
  14. package/dist/constants.d.mts +42 -0
  15. package/dist/constants.d.mts.map +1 -0
  16. package/dist/constants.mjs +62 -0
  17. package/dist/constants.mjs.map +1 -0
  18. package/dist/contracts/0x2/bag.mjs +19 -0
  19. package/dist/contracts/0x2/bag.mjs.map +1 -0
  20. package/dist/contracts/0x2/balance.mjs +20 -0
  21. package/dist/contracts/0x2/balance.mjs.map +1 -0
  22. package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs +16 -0
  23. package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs.map +1 -0
  24. package/dist/contracts/0x2/kiosk.mjs +244 -0
  25. package/dist/contracts/0x2/kiosk.mjs.map +1 -0
  26. package/dist/contracts/0x2/kiosk_extension.mjs +25 -0
  27. package/dist/contracts/0x2/kiosk_extension.mjs.map +1 -0
  28. package/dist/contracts/0x2/transfer_policy.mjs +99 -0
  29. package/dist/contracts/0x2/transfer_policy.mjs.map +1 -0
  30. package/dist/contracts/0x2/vec_set.mjs +18 -0
  31. package/dist/contracts/0x2/vec_set.mjs.map +1 -0
  32. package/dist/contracts/kiosk/deps/sui/kiosk.mjs +98 -0
  33. package/dist/contracts/kiosk/deps/sui/kiosk.mjs.map +1 -0
  34. package/dist/contracts/kiosk/floor_price_rule.mjs +70 -0
  35. package/dist/contracts/kiosk/floor_price_rule.mjs.map +1 -0
  36. package/dist/contracts/kiosk/kiosk_lock_rule.mjs +72 -0
  37. package/dist/contracts/kiosk/kiosk_lock_rule.mjs.map +1 -0
  38. package/dist/contracts/kiosk/personal_kiosk.mjs +102 -0
  39. package/dist/contracts/kiosk/personal_kiosk.mjs.map +1 -0
  40. package/dist/contracts/kiosk/personal_kiosk_rule.mjs +66 -0
  41. package/dist/contracts/kiosk/personal_kiosk_rule.mjs.map +1 -0
  42. package/dist/contracts/kiosk/royalty_rule.mjs +115 -0
  43. package/dist/contracts/kiosk/royalty_rule.mjs.map +1 -0
  44. package/dist/contracts/utils/index.mjs +118 -0
  45. package/dist/contracts/utils/index.mjs.map +1 -0
  46. package/dist/index.d.mts +9 -0
  47. package/dist/index.mjs +9 -0
  48. package/dist/query/client-utils.mjs +30 -0
  49. package/dist/query/client-utils.mjs.map +1 -0
  50. package/dist/query/kiosk.mjs +154 -0
  51. package/dist/query/kiosk.mjs.map +1 -0
  52. package/dist/query/transfer-policy.mjs +110 -0
  53. package/dist/query/transfer-policy.mjs.map +1 -0
  54. package/dist/tx/kiosk.mjs +20 -0
  55. package/dist/tx/kiosk.mjs.map +1 -0
  56. package/dist/tx/rules/resolve.mjs +114 -0
  57. package/dist/tx/rules/resolve.mjs.map +1 -0
  58. package/dist/tx/transfer-policy.mjs +38 -0
  59. package/dist/tx/transfer-policy.mjs.map +1 -0
  60. package/dist/types/index.d.mts +23 -0
  61. package/dist/types/index.d.mts.map +1 -0
  62. package/dist/types/kiosk.d.mts +165 -0
  63. package/dist/types/kiosk.d.mts.map +1 -0
  64. package/dist/types/kiosk.mjs +21 -0
  65. package/dist/types/kiosk.mjs.map +1 -0
  66. package/dist/types/transfer-policy.d.mts +56 -0
  67. package/dist/types/transfer-policy.d.mts.map +1 -0
  68. package/dist/types/transfer-policy.mjs +19 -0
  69. package/dist/types/transfer-policy.mjs.map +1 -0
  70. package/dist/utils.d.mts +45 -0
  71. package/dist/utils.d.mts.map +1 -0
  72. package/dist/utils.mjs +156 -0
  73. package/dist/utils.mjs.map +1 -0
  74. package/package.json +31 -20
  75. package/src/client/kiosk-client.ts +42 -5
  76. package/src/client/kiosk-transaction.ts +144 -65
  77. package/src/client/tp-transaction.ts +149 -95
  78. package/src/constants.ts +19 -24
  79. package/src/contracts/0x2/accumulator.ts +24 -0
  80. package/src/contracts/0x2/accumulator_metadata.ts +38 -0
  81. package/src/contracts/0x2/accumulator_settlement.ts +14 -0
  82. package/src/contracts/0x2/address.ts +145 -0
  83. package/src/contracts/0x2/address_alias.ts +92 -0
  84. package/src/contracts/0x2/authenticator_state.ts +44 -0
  85. package/src/contracts/0x2/bag.ts +192 -0
  86. package/src/contracts/0x2/balance.ts +269 -0
  87. package/src/contracts/0x2/bcs.ts +495 -0
  88. package/src/contracts/0x2/bls12381.ts +717 -0
  89. package/src/contracts/0x2/borrow.ts +99 -0
  90. package/src/contracts/0x2/clock.ts +30 -0
  91. package/src/contracts/0x2/coin.ts +977 -0
  92. package/src/contracts/0x2/coin_registry.ts +874 -0
  93. package/src/contracts/0x2/config.ts +30 -0
  94. package/src/contracts/0x2/deny_list.ts +55 -0
  95. package/src/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.ts +12 -0
  96. package/src/contracts/0x2/derived_object.ts +95 -0
  97. package/src/contracts/0x2/display.ts +258 -0
  98. package/src/contracts/0x2/dynamic_field.ts +171 -0
  99. package/src/contracts/0x2/dynamic_object_field.ts +167 -0
  100. package/src/contracts/0x2/ecdsa_k1.ts +65 -0
  101. package/src/contracts/0x2/ecdsa_r1.ts +49 -0
  102. package/src/contracts/0x2/ecvrf.ts +29 -0
  103. package/src/contracts/0x2/ed25519.ts +25 -0
  104. package/src/contracts/0x2/event.ts +42 -0
  105. package/src/contracts/0x2/funds_accumulator.ts +86 -0
  106. package/src/contracts/0x2/groth16.ts +171 -0
  107. package/src/contracts/0x2/group_ops.ts +49 -0
  108. package/src/contracts/0x2/hash.ts +37 -0
  109. package/src/contracts/0x2/hex.ts +37 -0
  110. package/src/contracts/0x2/hmac.ts +21 -0
  111. package/src/contracts/0x2/kiosk.ts +797 -0
  112. package/src/contracts/0x2/kiosk_extension.ts +270 -0
  113. package/src/contracts/0x2/linked_table.ts +354 -0
  114. package/src/contracts/0x2/math.ts +117 -0
  115. package/src/contracts/0x2/nitro_attestation.ts +186 -0
  116. package/src/contracts/0x2/object.ts +249 -0
  117. package/src/contracts/0x2/object_bag.ts +210 -0
  118. package/src/contracts/0x2/object_table.ts +200 -0
  119. package/src/contracts/0x2/package.ts +414 -0
  120. package/src/contracts/0x2/party.ts +37 -0
  121. package/src/contracts/0x2/pay.ts +153 -0
  122. package/src/contracts/0x2/poseidon.ts +21 -0
  123. package/src/contracts/0x2/priority_queue.ts +139 -0
  124. package/src/contracts/0x2/random.ts +294 -0
  125. package/src/contracts/0x2/sui.ts +29 -0
  126. package/src/contracts/0x2/table.ts +200 -0
  127. package/src/contracts/0x2/table_vec.ts +232 -0
  128. package/src/contracts/0x2/token.ts +873 -0
  129. package/src/contracts/0x2/transfer.ts +216 -0
  130. package/src/contracts/0x2/transfer_policy.ts +400 -0
  131. package/src/contracts/0x2/tx_context.ts +129 -0
  132. package/src/contracts/0x2/types.ts +24 -0
  133. package/src/contracts/0x2/url.ts +77 -0
  134. package/src/contracts/0x2/vdf.ts +45 -0
  135. package/src/contracts/0x2/vec_map.ts +401 -0
  136. package/src/contracts/0x2/vec_set.ts +211 -0
  137. package/src/contracts/0x2/versioned.ts +153 -0
  138. package/src/contracts/0x2/zklogin_verified_id.ts +172 -0
  139. package/src/contracts/0x2/zklogin_verified_issuer.ts +99 -0
  140. package/src/contracts/kiosk/deps/sui/kiosk.ts +94 -0
  141. package/src/contracts/kiosk/deps/sui/object.ts +15 -0
  142. package/src/contracts/kiosk/floor_price_rule.ts +92 -0
  143. package/src/contracts/kiosk/kiosk_lock_rule.ts +97 -0
  144. package/src/contracts/kiosk/personal_kiosk.ts +295 -0
  145. package/src/contracts/kiosk/personal_kiosk_rule.ts +89 -0
  146. package/src/contracts/kiosk/royalty_rule.ts +144 -0
  147. package/src/contracts/kiosk/witness_rule.ts +92 -0
  148. package/src/contracts/utils/index.ts +234 -0
  149. package/src/query/client-utils.ts +51 -0
  150. package/src/query/kiosk.ts +128 -100
  151. package/src/query/transfer-policy.ts +112 -78
  152. package/src/tx/kiosk.ts +7 -231
  153. package/src/tx/rules/resolve.ts +97 -48
  154. package/src/tx/transfer-policy.ts +25 -86
  155. package/src/types/index.ts +3 -14
  156. package/src/types/kiosk.ts +10 -12
  157. package/src/types/transfer-policy.ts +4 -4
  158. package/src/utils.ts +90 -128
  159. package/dist/cjs/bcs.d.ts +0 -23
  160. package/dist/cjs/bcs.js +0 -50
  161. package/dist/cjs/bcs.js.map +0 -7
  162. package/dist/cjs/client/kiosk-client.d.ts +0 -76
  163. package/dist/cjs/client/kiosk-client.js +0 -123
  164. package/dist/cjs/client/kiosk-client.js.map +0 -7
  165. package/dist/cjs/client/kiosk-transaction.d.ts +0 -186
  166. package/dist/cjs/client/kiosk-transaction.js +0 -462
  167. package/dist/cjs/client/kiosk-transaction.js.map +0 -7
  168. package/dist/cjs/client/tp-transaction.d.ts +0 -114
  169. package/dist/cjs/client/tp-transaction.js +0 -307
  170. package/dist/cjs/client/tp-transaction.js.map +0 -7
  171. package/dist/cjs/constants.d.ts +0 -31
  172. package/dist/cjs/constants.js +0 -102
  173. package/dist/cjs/constants.js.map +0 -7
  174. package/dist/cjs/index.d.ts +0 -6
  175. package/dist/cjs/index.js +0 -24
  176. package/dist/cjs/index.js.map +0 -7
  177. package/dist/cjs/package.json +0 -5
  178. package/dist/cjs/query/kiosk.d.ts +0 -8
  179. package/dist/cjs/query/kiosk.js +0 -181
  180. package/dist/cjs/query/kiosk.js.map +0 -7
  181. package/dist/cjs/query/transfer-policy.d.ts +0 -29
  182. package/dist/cjs/query/transfer-policy.js +0 -92
  183. package/dist/cjs/query/transfer-policy.js.map +0 -7
  184. package/dist/cjs/tx/kiosk.d.ts +0 -71
  185. package/dist/cjs/tx/kiosk.js +0 -130
  186. package/dist/cjs/tx/kiosk.js.map +0 -7
  187. package/dist/cjs/tx/personal-kiosk.d.ts +0 -7
  188. package/dist/cjs/tx/personal-kiosk.js +0 -38
  189. package/dist/cjs/tx/personal-kiosk.js.map +0 -7
  190. package/dist/cjs/tx/rules/attach.d.ts +0 -7
  191. package/dist/cjs/tx/rules/attach.js +0 -62
  192. package/dist/cjs/tx/rules/attach.js.map +0 -7
  193. package/dist/cjs/tx/rules/resolve.d.ts +0 -15
  194. package/dist/cjs/tx/rules/resolve.js +0 -109
  195. package/dist/cjs/tx/rules/resolve.js.map +0 -7
  196. package/dist/cjs/tx/transfer-policy.d.ts +0 -29
  197. package/dist/cjs/tx/transfer-policy.js +0 -78
  198. package/dist/cjs/tx/transfer-policy.js.map +0 -7
  199. package/dist/cjs/types/index.d.ts +0 -27
  200. package/dist/cjs/types/index.js +0 -33
  201. package/dist/cjs/types/index.js.map +0 -7
  202. package/dist/cjs/types/kiosk.d.ts +0 -160
  203. package/dist/cjs/types/kiosk.js +0 -37
  204. package/dist/cjs/types/kiosk.js.map +0 -7
  205. package/dist/cjs/types/transfer-policy.d.ts +0 -53
  206. package/dist/cjs/types/transfer-policy.js +0 -35
  207. package/dist/cjs/types/transfer-policy.js.map +0 -7
  208. package/dist/cjs/utils.d.ts +0 -51
  209. package/dist/cjs/utils.js +0 -198
  210. package/dist/cjs/utils.js.map +0 -7
  211. package/dist/esm/bcs.d.ts +0 -23
  212. package/dist/esm/bcs.js +0 -35
  213. package/dist/esm/bcs.js.map +0 -7
  214. package/dist/esm/client/kiosk-client.d.ts +0 -76
  215. package/dist/esm/client/kiosk-client.js +0 -114
  216. package/dist/esm/client/kiosk-client.js.map +0 -7
  217. package/dist/esm/client/kiosk-transaction.d.ts +0 -186
  218. package/dist/esm/client/kiosk-transaction.js +0 -432
  219. package/dist/esm/client/kiosk-transaction.js.map +0 -7
  220. package/dist/esm/client/tp-transaction.d.ts +0 -114
  221. package/dist/esm/client/tp-transaction.js +0 -298
  222. package/dist/esm/client/tp-transaction.js.map +0 -7
  223. package/dist/esm/constants.d.ts +0 -31
  224. package/dist/esm/constants.js +0 -87
  225. package/dist/esm/constants.js.map +0 -7
  226. package/dist/esm/index.d.ts +0 -6
  227. package/dist/esm/index.js +0 -7
  228. package/dist/esm/index.js.map +0 -7
  229. package/dist/esm/package.json +0 -5
  230. package/dist/esm/query/kiosk.d.ts +0 -8
  231. package/dist/esm/query/kiosk.js +0 -169
  232. package/dist/esm/query/kiosk.js.map +0 -7
  233. package/dist/esm/query/transfer-policy.d.ts +0 -29
  234. package/dist/esm/query/transfer-policy.js +0 -76
  235. package/dist/esm/query/transfer-policy.js.map +0 -7
  236. package/dist/esm/tx/kiosk.d.ts +0 -71
  237. package/dist/esm/tx/kiosk.js +0 -110
  238. package/dist/esm/tx/kiosk.js.map +0 -7
  239. package/dist/esm/tx/personal-kiosk.d.ts +0 -7
  240. package/dist/esm/tx/personal-kiosk.js +0 -18
  241. package/dist/esm/tx/personal-kiosk.js.map +0 -7
  242. package/dist/esm/tx/rules/attach.d.ts +0 -7
  243. package/dist/esm/tx/rules/attach.js +0 -42
  244. package/dist/esm/tx/rules/attach.js.map +0 -7
  245. package/dist/esm/tx/rules/resolve.d.ts +0 -15
  246. package/dist/esm/tx/rules/resolve.js +0 -89
  247. package/dist/esm/tx/rules/resolve.js.map +0 -7
  248. package/dist/esm/tx/transfer-policy.d.ts +0 -29
  249. package/dist/esm/tx/transfer-policy.js +0 -58
  250. package/dist/esm/tx/transfer-policy.js.map +0 -7
  251. package/dist/esm/types/index.d.ts +0 -27
  252. package/dist/esm/types/index.js +0 -12
  253. package/dist/esm/types/index.js.map +0 -7
  254. package/dist/esm/types/kiosk.d.ts +0 -160
  255. package/dist/esm/types/kiosk.js +0 -17
  256. package/dist/esm/types/kiosk.js.map +0 -7
  257. package/dist/esm/types/transfer-policy.d.ts +0 -53
  258. package/dist/esm/types/transfer-policy.js +0 -15
  259. package/dist/esm/types/transfer-policy.js.map +0 -7
  260. package/dist/esm/utils.d.ts +0 -51
  261. package/dist/esm/utils.js +0 -183
  262. package/dist/esm/utils.js.map +0 -7
  263. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  264. package/dist/tsconfig.tsbuildinfo +0 -1
  265. package/src/bcs.ts +0 -39
  266. package/src/tx/personal-kiosk.ts +0 -34
  267. package/src/tx/rules/attach.ts +0 -73
@@ -1,15 +1,11 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import type {
5
- PaginatedObjectsResponse,
6
- PaginationArguments,
7
- SuiClient,
8
- SuiObjectData,
9
- SuiObjectResponse,
10
- } from '@mysten/sui/client';
4
+ import type { PaginationArguments } from '@mysten/sui/jsonRpc';
5
+ import type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';
11
6
  import { isValidSuiAddress } from '@mysten/sui/utils';
12
7
 
8
+ import { Extension, ExtensionKey } from '../contracts/0x2/kiosk_extension.js';
13
9
  import type {
14
10
  FetchKioskOptions,
15
11
  KioskExtension,
@@ -27,9 +23,10 @@ import {
27
23
  getAllObjects,
28
24
  getKioskObject,
29
25
  } from '../utils.js';
26
+ import { PersonalKioskCap } from '../contracts/kiosk/personal_kiosk.js';
30
27
 
31
28
  export async function fetchKiosk(
32
- client: SuiClient,
29
+ client: ClientWithCoreApi,
33
30
  kioskId: string,
34
31
  pagination: PaginationArguments<string>,
35
32
  options: FetchKioskOptions,
@@ -51,14 +48,8 @@ export async function fetchKiosk(
51
48
  // For listings we usually seek the DF value (price) / exclusivity.
52
49
  const [kiosk, listingObjects, items] = await Promise.all([
53
50
  options.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),
54
- options.withListingPrices
55
- ? getAllObjects(client, kioskData.listingIds, {
56
- showContent: true,
57
- })
58
- : Promise.resolve([]),
59
- options.withObjects
60
- ? getAllObjects(client, kioskData.itemIds, options.objectOptions || { showDisplay: true })
61
- : Promise.resolve([]),
51
+ options.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),
52
+ options.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([]),
62
53
  ]);
63
54
 
64
55
  if (options.withKioskFields) kioskData.kiosk = kiosk;
@@ -68,10 +59,7 @@ export async function fetchKiosk(
68
59
  attachLockedItems(kioskData, lockedItemIds);
69
60
 
70
61
  // Attach the objects for the queried items.
71
- attachObjects(
72
- kioskData,
73
- items.filter((x) => !!x.data).map((x) => x.data!),
74
- );
62
+ attachObjects(kioskData, items);
75
63
 
76
64
  return {
77
65
  data: kioskData,
@@ -91,7 +79,7 @@ const DEFAULT_PAGE_SIZE = 50;
91
79
  const PERSON_KIOSK_CURSOR = 'personal';
92
80
  const OWNED_KIOSKS_CURSOR = 'owned';
93
81
  export async function getOwnedKiosks(
94
- client: SuiClient,
82
+ client: ClientWithCoreApi,
95
83
  address: string,
96
84
  options?: {
97
85
  pagination?: PaginationArguments<string>;
@@ -115,19 +103,36 @@ export async function getOwnedKiosks(
115
103
  ];
116
104
 
117
105
  if (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {
106
+ const personalResult = await client.core.listOwnedObjects({
107
+ owner: address,
108
+ type: options.personalKioskType,
109
+ cursor,
110
+ limit,
111
+ include: {
112
+ content: true,
113
+ },
114
+ });
115
+
116
+ const personalKioskData = personalResult.objects
117
+ .filter((obj) => !(obj instanceof Error))
118
+ .map((obj) => {
119
+ return { obj, kioskId: PersonalKioskCap.parse(obj.content).cap?.for };
120
+ })
121
+ .filter(
122
+ (
123
+ item,
124
+ ): item is {
125
+ obj: SuiClientTypes.Object<{ content: true }>;
126
+ kioskId: string;
127
+ } => item.kioskId !== undefined,
128
+ );
129
+
118
130
  const personalKioskResponse = formatOwnedKioskResponse(
119
- await client.getOwnedObjects({
120
- owner: address,
121
- filter: {
122
- StructType: options.personalKioskType,
123
- },
124
- options: {
125
- showContent: true,
126
- showType: true,
127
- },
128
- cursor,
129
- limit,
130
- }),
131
+ {
132
+ data: personalKioskData,
133
+ hasNextPage: personalResult.hasNextPage,
134
+ nextCursor: personalResult.cursor,
135
+ },
131
136
  PERSON_KIOSK_CURSOR,
132
137
  );
133
138
 
@@ -148,18 +153,38 @@ export async function getOwnedKiosks(
148
153
  };
149
154
  }
150
155
 
156
+ const ownedResult = await client.core.listOwnedObjects({
157
+ owner: address,
158
+ type: KIOSK_OWNER_CAP,
159
+ cursor: null,
160
+ limit: remainingLimit,
161
+ include: {
162
+ content: true,
163
+ },
164
+ });
165
+
166
+ const { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');
167
+
168
+ const ownedKioskData = ownedResult.objects
169
+ .filter((obj) => !(obj instanceof Error))
170
+ .map((obj) => {
171
+ return { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };
172
+ })
173
+ .filter(
174
+ (
175
+ item,
176
+ ): item is {
177
+ obj: SuiClientTypes.Object<{ content: true }>;
178
+ kioskId: string;
179
+ } => item.kioskId !== undefined,
180
+ );
181
+
151
182
  const ownedKiosksResponse = formatOwnedKioskResponse(
152
- await client.getOwnedObjects({
153
- owner: address,
154
- filter: {
155
- StructType: KIOSK_OWNER_CAP,
156
- },
157
- options: {
158
- showContent: true,
159
- showType: true,
160
- },
161
- limit: remainingLimit,
162
- }),
183
+ {
184
+ data: ownedKioskData,
185
+ hasNextPage: ownedResult.hasNextPage,
186
+ nextCursor: ownedResult.cursor,
187
+ },
163
188
  OWNED_KIOSKS_CURSOR,
164
189
  );
165
190
 
@@ -174,91 +199,94 @@ export async function getOwnedKiosks(
174
199
  };
175
200
  }
176
201
 
202
+ const result = await client.core.listOwnedObjects({
203
+ owner: address,
204
+ type: KIOSK_OWNER_CAP,
205
+ cursor: cursor || null,
206
+ limit,
207
+ include: {
208
+ content: true,
209
+ },
210
+ });
211
+
212
+ const { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');
213
+
214
+ const ownedKioskData = result.objects
215
+ .filter((obj) => !(obj instanceof Error))
216
+ .map((obj) => {
217
+ return { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };
218
+ })
219
+ .filter(
220
+ (
221
+ item,
222
+ ): item is {
223
+ obj: SuiClientTypes.Object<{ content: true }>;
224
+ kioskId: string;
225
+ } => item.kioskId !== undefined,
226
+ );
227
+
177
228
  return formatOwnedKioskResponse(
178
- await client.getOwnedObjects({
179
- owner: address,
180
- filter: {
181
- StructType: KIOSK_OWNER_CAP,
182
- },
183
- options: {
184
- showContent: true,
185
- showType: true,
186
- },
187
- // cursor might be an empty string if the number of personal kiosks was a multiple of the limit.
188
- cursor: cursor ? cursor : null,
189
- limit,
190
- }),
229
+ {
230
+ data: ownedKioskData,
231
+ hasNextPage: result.hasNextPage,
232
+ nextCursor: result.cursor,
233
+ },
191
234
  OWNED_KIOSKS_CURSOR,
192
235
  );
193
236
  }
194
237
 
195
238
  function formatOwnedKioskResponse(
196
- response: PaginatedObjectsResponse,
239
+ response: {
240
+ data: {
241
+ obj: SuiClientTypes.Object<{ content: true }>;
242
+ kioskId: string;
243
+ }[];
244
+ hasNextPage: boolean;
245
+ nextCursor: string | null;
246
+ },
197
247
  cursorType: string,
198
248
  ): OwnedKiosks {
199
249
  const { data, hasNextPage, nextCursor } = response;
200
- // get kioskIds from the OwnerCaps.
201
- const kioskIdList = data?.map((x: SuiObjectResponse) => {
202
- const fields =
203
- x.data?.content?.dataType === 'moveObject'
204
- ? (x.data.content.fields as unknown as
205
- | {
206
- cap: { fields: { for: string } };
207
- for?: never;
208
- }
209
- | {
210
- cap?: never;
211
- for: string;
212
- })
213
- : null;
214
- return fields?.cap ? fields?.cap?.fields?.for : (fields?.for as string);
215
- });
216
-
217
- // clean up data that might have an error in them.
218
- // only return valid objects.
219
- const filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];
220
250
 
221
251
  return {
222
252
  nextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,
223
253
  hasNextPage,
224
- kioskOwnerCaps: filteredData.map((x, idx) => ({
225
- isPersonal: x.type !== KIOSK_OWNER_CAP,
226
- digest: x.digest,
227
- version: x.version,
228
- objectId: x.objectId,
229
- kioskId: kioskIdList[idx],
230
- })),
231
- kioskIds: kioskIdList,
254
+ kioskOwnerCaps: data.map((item) => {
255
+ const isPersonal = item.obj.type?.includes('PersonalKioskCap') || false;
256
+ return {
257
+ isPersonal,
258
+ digest: item.obj.digest,
259
+ version: item.obj.version,
260
+ objectId: item.obj.objectId,
261
+ kioskId: item.kioskId,
262
+ };
263
+ }),
264
+ kioskIds: data.map((item) => item.kioskId),
232
265
  };
233
266
  }
234
267
 
235
268
  // Get a kiosk extension data for a given kioskId and extensionType.
236
269
  export async function fetchKioskExtension(
237
- client: SuiClient,
270
+ client: ClientWithCoreApi,
238
271
  kioskId: string,
239
272
  extensionType: string,
240
273
  ): Promise<KioskExtension | null> {
241
- const extension = await client.getDynamicFieldObject({
274
+ const { dynamicField } = await client.core.getDynamicField({
242
275
  parentId: kioskId,
243
276
  name: {
244
277
  type: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,
245
- value: {
246
- dummy_field: false,
247
- },
278
+ bcs: ExtensionKey.serialize({ dummy_field: false }).toBytes(),
248
279
  },
249
280
  });
250
281
 
251
- if (!extension.data) return null;
252
-
253
- const fields = (extension?.data?.content as { fields: { [k: string]: any } })?.fields?.value
254
- ?.fields;
282
+ const extension = Extension.parse(dynamicField.value.bcs);
255
283
 
256
284
  return {
257
- objectId: extension.data.objectId,
285
+ objectId: dynamicField.fieldId,
258
286
  type: extensionType,
259
- isEnabled: fields?.is_enabled,
260
- permissions: fields?.permissions,
261
- storageId: fields?.storage?.fields?.id?.id,
262
- storageSize: fields?.storage?.fields?.size,
287
+ isEnabled: extension.is_enabled,
288
+ permissions: extension.permissions.toString(),
289
+ storageId: extension.storage.id,
290
+ storageSize: Number(extension.storage.size),
263
291
  };
264
292
  }
@@ -1,133 +1,167 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import type { SuiClient } from '@mysten/sui/client';
5
- import { fromBase64, isValidSuiAddress } from '@mysten/sui/utils';
4
+ import { isValidSuiAddress } from '@mysten/sui/utils';
5
+ import type { ClientWithCoreApi } from '@mysten/sui/client';
6
6
 
7
- import '../bcs.js';
8
-
9
- import { TransferPolicyType } from '../bcs.js';
7
+ import {
8
+ TransferPolicyCap as TransferPolicyCapStruct,
9
+ TransferPolicy as TransferPolicyStruct,
10
+ } from '../contracts/0x2/transfer_policy.js';
10
11
  import type { TransferPolicy, TransferPolicyCap } from '../types/index.js';
11
12
  import {
12
13
  TRANSFER_POLICY_CAP_TYPE,
13
14
  TRANSFER_POLICY_CREATED_EVENT,
14
15
  TRANSFER_POLICY_TYPE,
15
16
  } from '../types/index.js';
16
- import { getAllOwnedObjects, parseTransferPolicyCapObject } from '../utils.js';
17
+ import { queryEvents } from './client-utils.js';
17
18
 
18
19
  /**
19
- * Searches the `TransferPolicy`-s for the given type. The seach is performed via
20
+ * Searches the `TransferPolicy`-s for the given type. The search is performed via
20
21
  * the `TransferPolicyCreated` event. The policy can either be owned or shared,
21
22
  * and the caller needs to filter the results accordingly (ie single owner can not
22
23
  * be accessed by anyone but the owner).
23
24
  *
24
- * @param provider
25
- * @param type
25
+ * This method requires event querying support (JSON-RPC or GraphQL clients).
26
+ * gRPC clients do not support event querying and will throw an error.
27
+ *
28
+ * @param client - The Sui client (must support event querying)
29
+ * @param type - The type of the asset (e.g., "0x123::nft::NFT")
30
+ * @throws Error if the client doesn't support event querying
26
31
  */
27
32
  export async function queryTransferPolicy(
28
- client: SuiClient,
33
+ client: ClientWithCoreApi,
29
34
  type: string,
30
35
  ): Promise<TransferPolicy[]> {
31
- // console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);
32
- const { data } = await client.queryEvents({
33
- query: {
34
- MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,
35
- },
36
- });
36
+ const data = await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);
37
+
38
+ const search = data.map((event) => event.json as { id: string });
37
39
 
38
- const search = data.map((event) => event.parsedJson as { id: string });
39
- const policies = await client.multiGetObjects({
40
- ids: search.map((policy) => policy.id),
41
- options: { showBcs: true, showOwner: true },
40
+ const { objects } = await client.core.getObjects({
41
+ objectIds: search.map((policy: { id: string }) => policy.id),
42
+ include: { content: true },
42
43
  });
43
44
 
44
- return policies
45
- .filter((policy) => !!policy && 'data' in policy)
46
- .map(({ data: policy }) => {
47
- // should never happen; policies are objects and fetched via an event.
48
- // policies are filtered for null and undefined above.
49
- if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {
50
- throw new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);
45
+ return objects
46
+ .filter((obj) => !(obj instanceof Error) && obj.content)
47
+ .map((obj) => {
48
+ if (obj instanceof Error) {
49
+ throw obj;
51
50
  }
52
51
 
53
- const parsed = TransferPolicyType.parse(fromBase64(policy.bcs.bcsBytes));
52
+ if (!obj.content) {
53
+ throw new Error(`Invalid policy: ${obj.objectId}, expected object with content`);
54
+ }
55
+
56
+ const parsed = TransferPolicyStruct.parse(obj.content);
54
57
 
55
58
  return {
56
- id: policy?.objectId,
59
+ id: obj.objectId,
57
60
  type: `${TRANSFER_POLICY_TYPE}<${type}>`,
58
- owner: policy?.owner!,
59
- rules: parsed.rules,
60
- balance: parsed.balance,
61
+ owner: obj.owner,
62
+ rules: parsed.rules.contents.map((rule) => rule.name),
63
+ balance: parsed.balance.value.toString(),
61
64
  } as TransferPolicy;
62
65
  });
63
66
  }
64
67
 
65
68
  /**
66
- * A function to fetch all the user's kiosk Caps
67
- * And a list of the kiosk address ids.
68
- * Returns a list of `kioskOwnerCapIds` and `kioskIds`.
69
- * Extra options allow pagination.
70
- * @returns TransferPolicyCap Object ID | undefined if not found.
69
+ * Fetches all TransferPolicyCap objects owned by an address for a specific type.
70
+ *
71
+ * @param client - The Sui client
72
+ * @param address - The owner address
73
+ * @param type - The type of the asset
74
+ * @returns Array of TransferPolicyCap objects
71
75
  */
72
76
  export async function queryTransferPolicyCapsByType(
73
- client: SuiClient,
77
+ client: ClientWithCoreApi,
74
78
  address: string,
75
79
  type: string,
76
80
  ): Promise<TransferPolicyCap[]> {
77
81
  if (!isValidSuiAddress(address)) return [];
78
82
 
79
- const filter = {
80
- MatchAll: [
81
- {
82
- StructType: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,
83
- },
84
- ],
85
- };
86
-
87
- // fetch owned kiosk caps, paginated.
88
- const data = await getAllOwnedObjects({
89
- client,
90
- filter,
91
- owner: address,
92
- });
83
+ const policies = [];
84
+ let hasNextPage = true;
85
+ let cursor: string | null = null;
86
+
87
+ while (hasNextPage) {
88
+ const result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =
89
+ await client.core.listOwnedObjects({
90
+ owner: address,
91
+ type: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,
92
+ cursor,
93
+ limit: 50,
94
+ include: {
95
+ content: true,
96
+ },
97
+ });
98
+
99
+ for (const obj of result.objects) {
100
+ if (obj.content) {
101
+ policies.push({
102
+ policyId: TransferPolicyCapStruct.parse(obj.content).policy_id,
103
+ policyCapId: obj.objectId,
104
+ type,
105
+ });
106
+ }
107
+ }
93
108
 
94
- return data
95
- .map((item) => parseTransferPolicyCapObject(item))
96
- .filter((item) => !!item) as TransferPolicyCap[];
109
+ hasNextPage = result.hasNextPage;
110
+ cursor = result.cursor;
111
+ }
112
+
113
+ return policies;
97
114
  }
98
115
 
99
116
  /**
100
- * A function to fetch all the user's kiosk Caps
101
- * And a list of the kiosk address ids.
102
- * Returns a list of `kioskOwnerCapIds` and `kioskIds`.
103
- * Extra options allow pagination.
104
- * @returns TransferPolicyCap Object ID | undefined if not found.
117
+ * Fetches all TransferPolicyCap objects owned by an address (all types).
118
+ *
119
+ * Uses struct-level filtering (without type parameters) to efficiently query
120
+ * only TransferPolicyCap objects. This matches all generic instantiations
121
+ * (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.
122
+ *
123
+ * @param client - The Sui client
124
+ * @param address - The owner address
125
+ * @returns Array of TransferPolicyCap objects or undefined if address is invalid
105
126
  */
106
127
  export async function queryOwnedTransferPolicies(
107
- client: SuiClient,
128
+ client: ClientWithCoreApi,
108
129
  address: string,
109
130
  ): Promise<TransferPolicyCap[] | undefined> {
110
131
  if (!isValidSuiAddress(address)) return;
111
132
 
112
- const filter = {
113
- MatchAll: [
114
- {
115
- MoveModule: {
116
- module: 'transfer_policy',
117
- package: '0x2',
118
- },
119
- },
120
- ],
121
- };
122
-
123
- // fetch all owned kiosk caps, paginated.
124
- const data = await getAllOwnedObjects({ client, owner: address, filter });
125
-
133
+ let hasNextPage = true;
134
+ let cursor: string | null = null;
126
135
  const policies: TransferPolicyCap[] = [];
127
136
 
128
- for (const item of data) {
129
- const data = parseTransferPolicyCapObject(item);
130
- if (data) policies.push(data);
137
+ while (hasNextPage) {
138
+ const result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =
139
+ await client.core.listOwnedObjects({
140
+ owner: address,
141
+ type: TRANSFER_POLICY_CAP_TYPE,
142
+ cursor,
143
+ limit: 50,
144
+ include: {
145
+ content: true,
146
+ },
147
+ });
148
+
149
+ // All results are TransferPolicyCap objects, extract the type parameter
150
+ for (const obj of result.objects) {
151
+ if (obj.content) {
152
+ // Extract the type parameter T from "0x2::transfer_policy::TransferPolicyCap<T>"
153
+ const objectType = obj.type!.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, '').slice(0, -1);
154
+
155
+ policies.push({
156
+ policyId: TransferPolicyCapStruct.parse(obj.content).policy_id,
157
+ policyCapId: obj.objectId,
158
+ type: objectType,
159
+ });
160
+ }
161
+ }
162
+
163
+ hasNextPage = result.hasNextPage;
164
+ cursor = result.cursor;
131
165
  }
132
166
 
133
167
  return policies;