@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["SUI_FRAMEWORK_ADDRESS","val"],"sources":["../../../src/contracts/utils/index.ts"],"sourcesContent":["import {\n\tbcs,\n\tBcsType,\n\tTypeTag,\n\tTypeTagSerializer,\n\tBcsStruct,\n\tBcsEnum,\n\tBcsTuple,\n} from '@mysten/sui/bcs';\nimport { normalizeSuiAddress } from '@mysten/sui/utils';\nimport { TransactionArgument, isArgument } from '@mysten/sui/transactions';\nimport { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\n\nconst MOVE_STDLIB_ADDRESS = normalizeSuiAddress('0x1');\nconst SUI_FRAMEWORK_ADDRESS = normalizeSuiAddress('0x2');\n\nexport type RawTransactionArgument<T> = T | TransactionArgument;\n\nexport interface GetOptions<\n\tInclude extends Omit<SuiClientTypes.ObjectInclude, 'content'> = {},\n> extends SuiClientTypes.GetObjectOptions<Include> {\n\tclient: ClientWithCoreApi;\n}\n\nexport interface GetManyOptions<\n\tInclude extends Omit<SuiClientTypes.ObjectInclude, 'content'> = {},\n> extends SuiClientTypes.GetObjectsOptions<Include> {\n\tclient: ClientWithCoreApi;\n}\n\nexport function getPureBcsSchema(typeTag: string | TypeTag): BcsType<any> | null {\n\tconst parsedTag = typeof typeTag === 'string' ? TypeTagSerializer.parseFromStr(typeTag) : typeTag;\n\n\tif ('u8' in parsedTag) {\n\t\treturn bcs.U8;\n\t} else if ('u16' in parsedTag) {\n\t\treturn bcs.U16;\n\t} else if ('u32' in parsedTag) {\n\t\treturn bcs.U32;\n\t} else if ('u64' in parsedTag) {\n\t\treturn bcs.U64;\n\t} else if ('u128' in parsedTag) {\n\t\treturn bcs.U128;\n\t} else if ('u256' in parsedTag) {\n\t\treturn bcs.U256;\n\t} else if ('address' in parsedTag) {\n\t\treturn bcs.Address;\n\t} else if ('bool' in parsedTag) {\n\t\treturn bcs.Bool;\n\t} else if ('vector' in parsedTag) {\n\t\tconst type = getPureBcsSchema(parsedTag.vector);\n\t\treturn type ? bcs.vector(type) : null;\n\t} else if ('struct' in parsedTag) {\n\t\tconst structTag = parsedTag.struct;\n\t\tconst pkg = normalizeSuiAddress(structTag.address);\n\n\t\tif (pkg === MOVE_STDLIB_ADDRESS) {\n\t\t\tif (\n\t\t\t\t(structTag.module === 'ascii' || structTag.module === 'string') &&\n\t\t\t\tstructTag.name === 'String'\n\t\t\t) {\n\t\t\t\treturn bcs.String;\n\t\t\t}\n\n\t\t\tif (structTag.module === 'option' && structTag.name === 'Option') {\n\t\t\t\tconst type = getPureBcsSchema(structTag.typeParams[0]);\n\t\t\t\treturn type ? bcs.option(type) : null;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tpkg === SUI_FRAMEWORK_ADDRESS &&\n\t\t\tstructTag.module === 'object' &&\n\t\t\t(structTag.name === 'ID' || structTag.name === 'UID')\n\t\t) {\n\t\t\treturn bcs.Address;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function normalizeMoveArguments(\n\targs: unknown[] | object,\n\targTypes: readonly (string | null)[],\n\tparameterNames?: string[],\n) {\n\tconst argLen = Array.isArray(args) ? args.length : Object.keys(args).length;\n\tif (parameterNames && argLen !== parameterNames.length) {\n\t\tthrow new Error(\n\t\t\t`Invalid number of arguments, expected ${parameterNames.length}, got ${argLen}`,\n\t\t);\n\t}\n\n\tconst normalizedArgs: TransactionArgument[] = [];\n\n\tlet index = 0;\n\tfor (const [i, argType] of argTypes.entries()) {\n\t\tif (argType === '0x2::clock::Clock') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.clock());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x2::random::Random') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.random());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x2::deny_list::DenyList') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.denyList());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x3::sui_system::SuiSystemState') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.system());\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet arg;\n\t\tif (Array.isArray(args)) {\n\t\t\tif (index >= args.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid number of arguments, expected at least ${index + 1}, got ${args.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\targ = args[index];\n\t\t} else {\n\t\t\tif (!parameterNames) {\n\t\t\t\tthrow new Error(`Expected arguments to be passed as an array`);\n\t\t\t}\n\t\t\tconst name = parameterNames[index];\n\t\t\targ = args[name as keyof typeof args];\n\n\t\t\tif (arg === undefined) {\n\t\t\t\tthrow new Error(`Parameter ${name} is required`);\n\t\t\t}\n\t\t}\n\n\t\tindex += 1;\n\n\t\tif (typeof arg === 'function' || isArgument(arg)) {\n\t\t\tnormalizedArgs.push(arg as TransactionArgument);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst type = argTypes[i];\n\t\tconst bcsType = type === null ? null : getPureBcsSchema(type);\n\n\t\tif (bcsType) {\n\t\t\tconst bytes = bcsType.serialize(arg as never);\n\t\t\tnormalizedArgs.push((tx) => tx.pure(bytes));\n\t\t\tcontinue;\n\t\t} else if (typeof arg === 'string') {\n\t\t\tnormalizedArgs.push((tx) => tx.object(arg));\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(`Invalid argument ${stringify(arg)} for type ${type}`);\n\t}\n\n\treturn normalizedArgs;\n}\n\nexport class MoveStruct<\n\tT extends Record<string, BcsType<any>>,\n\tconst Name extends string = string,\n> extends BcsStruct<T, Name> {\n\tasync get<Include extends Omit<SuiClientTypes.ObjectInclude, 'content' | 'json'> = {}>({\n\t\tobjectId,\n\t\t...options\n\t}: GetOptions<Include>): Promise<\n\t\tSuiClientTypes.Object<Include & { content: true; json: true }> & {\n\t\t\tjson: BcsStruct<T>['$inferType'];\n\t\t}\n\t> {\n\t\tconst [res] = await this.getMany<Include>({\n\t\t\t...options,\n\t\t\tobjectIds: [objectId],\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tasync getMany<Include extends Omit<SuiClientTypes.ObjectInclude, 'content' | 'json'> = {}>({\n\t\tclient,\n\t\t...options\n\t}: GetManyOptions<Include>): Promise<\n\t\tArray<\n\t\t\tSuiClientTypes.Object<Include & { content: true; json: true }> & {\n\t\t\t\tjson: BcsStruct<T>['$inferType'];\n\t\t\t}\n\t\t>\n\t> {\n\t\tconst response = (await client.core.getObjects({\n\t\t\t...options,\n\t\t\tinclude: {\n\t\t\t\t...options.include,\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t})) as SuiClientTypes.GetObjectsResponse<Include & { content: true }>;\n\n\t\treturn response.objects.map((obj) => {\n\t\t\tif (obj instanceof Error) {\n\t\t\t\tthrow obj;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...obj,\n\t\t\t\tjson: this.parse(obj.content),\n\t\t\t};\n\t\t});\n\t}\n}\n\nexport class MoveEnum<\n\tT extends Record<string, BcsType<any> | null>,\n\tconst Name extends string,\n> extends BcsEnum<T, Name> {}\n\nexport class MoveTuple<\n\tT extends readonly BcsType<any>[],\n\tconst Name extends string,\n> extends BcsTuple<T, Name> {}\n\nfunction stringify(val: unknown) {\n\tif (typeof val === 'object') {\n\t\treturn JSON.stringify(val, (val: unknown) => val);\n\t}\n\tif (typeof val === 'bigint') {\n\t\treturn val.toString();\n\t}\n\n\treturn val;\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BaseRulePackageIds, FLOOR_PRICE_RULE_ADDRESS, KIOSK_LOCK_RULE_ADDRESS, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE_ADDRESS, TransferPolicyRule, getBaseRules, mainnetRules, rules, testnetRules } from "./constants.mjs";
2
+ import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./types/kiosk.mjs";
3
+ import { KioskClient, KioskExtensionOptions, kiosk } from "./client/kiosk-client.mjs";
4
+ import { KIOSK_LOCK_RULE, ROYALTY_RULE, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyCap, TransferPolicyCreated } from "./types/transfer-policy.mjs";
5
+ import { KioskClientOptions, ObjectArgument } from "./types/index.mjs";
6
+ import { DynamicFieldInfo, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
7
+ import { TransferPolicyBaseParams, TransferPolicyTransaction, TransferPolicyTransactionParams } from "./client/tp-transaction.mjs";
8
+ import { KioskTransaction, KioskTransactionParams } from "./client/kiosk-transaction.mjs";
9
+ export { BaseRulePackageIds, DynamicFieldInfo, FLOOR_PRICE_RULE_ADDRESS, FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskClient, KioskClientOptions, KioskData, KioskExtension, KioskExtensionOptions, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, KioskTransaction, KioskTransactionParams, ObjectArgument, OwnedKiosks, PERSONAL_KIOSK_RULE_ADDRESS, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyBaseParams, TransferPolicyCap, TransferPolicyCreated, TransferPolicyRule, TransferPolicyTransaction, TransferPolicyTransactionParams, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
2
+ import { KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE } from "./types/kiosk.mjs";
3
+ import { KIOSK_LOCK_RULE, ROYALTY_RULE, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE } from "./types/transfer-policy.mjs";
4
+ import { FLOOR_PRICE_RULE_ADDRESS, KIOSK_LOCK_RULE_ADDRESS, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE_ADDRESS, getBaseRules, mainnetRules, rules, testnetRules } from "./constants.mjs";
5
+ import { KioskClient, kiosk } from "./client/kiosk-client.mjs";
6
+ import { TransferPolicyTransaction } from "./client/tp-transaction.mjs";
7
+ import { KioskTransaction } from "./client/kiosk-transaction.mjs";
8
+
9
+ export { FLOOR_PRICE_RULE_ADDRESS, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, KioskClient, KioskTransaction, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicyTransaction, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
@@ -0,0 +1,30 @@
1
+ import { graphql } from "@mysten/sui/graphql/schema";
2
+ import { isSuiGraphQLClient } from "@mysten/sui/graphql";
3
+ import { isSuiJsonRpcClient } from "@mysten/sui/jsonRpc";
4
+
5
+ //#region src/query/client-utils.ts
6
+ async function queryEvents(client, eventType) {
7
+ if (isSuiGraphQLClient(client)) {
8
+ const query = graphql(`
9
+ query QueryEvents($eventType: String!) {
10
+ events(filter: { eventType: $eventType }, first: 50) {
11
+ nodes {
12
+ contents {
13
+ json
14
+ }
15
+ }
16
+ }
17
+ }
18
+ `);
19
+ return (await client.query({
20
+ query,
21
+ variables: { eventType }
22
+ })).data?.events?.nodes.map((event) => ({ json: event.contents?.json })) ?? [];
23
+ }
24
+ if (isSuiJsonRpcClient(client)) return (await client.queryEvents({ query: { MoveEventType: eventType } })).data?.map((d) => ({ json: d.parsedJson })) ?? [];
25
+ throw new Error("Event querying is not supported by this client type. JSON-RPC and GraphQL clients support event querying, but gRPC does not. Please use a JSON-RPC or GraphQL client, or provide the required IDs directly.");
26
+ }
27
+
28
+ //#endregion
29
+ export { queryEvents };
30
+ //# sourceMappingURL=client-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-utils.mjs","names":[],"sources":["../../src/query/client-utils.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ClientWithCoreApi } from '@mysten/sui/client';\nimport { graphql } from '@mysten/sui/graphql/schema';\nimport { isSuiGraphQLClient } from '@mysten/sui/graphql';\nimport { isSuiJsonRpcClient } from '@mysten/sui/jsonRpc';\n\nexport async function queryEvents(\n\tclient: ClientWithCoreApi,\n\teventType: string,\n): Promise<{ json: unknown }[]> {\n\tif (isSuiGraphQLClient(client)) {\n\t\tconst query = graphql(`\n\t\t\tquery QueryEvents($eventType: String!) {\n\t\t\t\tevents(filter: { eventType: $eventType }, first: 50) {\n\t\t\t\t\tnodes {\n\t\t\t\t\t\tcontents {\n\t\t\t\t\t\t\tjson\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tconst result = await client.query({\n\t\t\tquery,\n\t\t\tvariables: { eventType },\n\t\t});\n\n\t\treturn (\n\t\t\tresult.data?.events?.nodes.map((event) => ({\n\t\t\t\tjson: event.contents?.json,\n\t\t\t})) ?? []\n\t\t);\n\t}\n\n\tif (isSuiJsonRpcClient(client)) {\n\t\tconst events = await client.queryEvents({\n\t\t\tquery: { MoveEventType: eventType },\n\t\t});\n\n\t\treturn events.data?.map((d) => ({ json: d.parsedJson })) ?? [];\n\t}\n\n\tthrow new Error(\n\t\t'Event querying is not supported by this client type. ' +\n\t\t\t'JSON-RPC and GraphQL clients support event querying, but gRPC does not. ' +\n\t\t\t'Please use a JSON-RPC or GraphQL client, or provide the required IDs directly.',\n\t);\n}\n"],"mappings":";;;;;AAQA,eAAsB,YACrB,QACA,WAC+B;AAC/B,KAAI,mBAAmB,OAAO,EAAE;EAC/B,MAAM,QAAQ,QAAQ;;;;;;;;;;IAUpB;AAOF,UALe,MAAM,OAAO,MAAM;GACjC;GACA,WAAW,EAAE,WAAW;GACxB,CAAC,EAGM,MAAM,QAAQ,MAAM,KAAK,WAAW,EAC1C,MAAM,MAAM,UAAU,MACtB,EAAE,IAAI,EAAE;;AAIX,KAAI,mBAAmB,OAAO,CAK7B,SAJe,MAAM,OAAO,YAAY,EACvC,OAAO,EAAE,eAAe,WAAW,EACnC,CAAC,EAEY,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE;AAG/D,OAAM,IAAI,MACT,8MAGA"}
@@ -0,0 +1,154 @@
1
+ import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject } from "../utils.mjs";
2
+ import { KIOSK_OWNER_CAP } from "../types/kiosk.mjs";
3
+ import { Extension, ExtensionKey } from "../contracts/0x2/kiosk_extension.mjs";
4
+ import { PersonalKioskCap } from "../contracts/kiosk/personal_kiosk.mjs";
5
+ import { isValidSuiAddress } from "@mysten/sui/utils";
6
+
7
+ //#region src/query/kiosk.ts
8
+ async function fetchKiosk(client, kioskId, pagination, options) {
9
+ const data = await getAllDynamicFields(client, kioskId, pagination);
10
+ const listings = [];
11
+ const lockedItemIds = [];
12
+ const kioskData = extractKioskData(data, listings, lockedItemIds, kioskId);
13
+ const [kiosk, listingObjects, items] = await Promise.all([
14
+ options.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(void 0),
15
+ options.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),
16
+ options.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([])
17
+ ]);
18
+ if (options.withKioskFields) kioskData.kiosk = kiosk;
19
+ attachListingsAndPrices(kioskData, listings, listingObjects);
20
+ attachLockedItems(kioskData, lockedItemIds);
21
+ attachObjects(kioskData, items);
22
+ return {
23
+ data: kioskData,
24
+ nextCursor: null,
25
+ hasNextPage: false
26
+ };
27
+ }
28
+ /**
29
+ * A function to fetch all the user's kiosk Caps
30
+ * And a list of the kiosk address ids.
31
+ * Returns a list of `kioskOwnerCapIds` and `kioskIds`.
32
+ * Extra options allow pagination.
33
+ */
34
+ const DEFAULT_PAGE_SIZE = 50;
35
+ const PERSON_KIOSK_CURSOR = "personal";
36
+ const OWNED_KIOSKS_CURSOR = "owned";
37
+ async function getOwnedKiosks(client, address, options) {
38
+ if (!isValidSuiAddress(address)) return {
39
+ nextCursor: null,
40
+ hasNextPage: false,
41
+ kioskOwnerCaps: [],
42
+ kioskIds: []
43
+ };
44
+ const limit = options?.pagination?.limit ?? DEFAULT_PAGE_SIZE;
45
+ const [cursorType, cursor] = options?.pagination?.cursor?.split(":") ?? [PERSON_KIOSK_CURSOR, null];
46
+ if (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {
47
+ const personalResult = await client.core.listOwnedObjects({
48
+ owner: address,
49
+ type: options.personalKioskType,
50
+ cursor,
51
+ limit,
52
+ include: { content: true }
53
+ });
54
+ const personalKioskResponse = formatOwnedKioskResponse({
55
+ data: personalResult.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
56
+ return {
57
+ obj,
58
+ kioskId: PersonalKioskCap.parse(obj.content).cap?.for
59
+ };
60
+ }).filter((item) => item.kioskId !== void 0),
61
+ hasNextPage: personalResult.hasNextPage,
62
+ nextCursor: personalResult.cursor
63
+ }, PERSON_KIOSK_CURSOR);
64
+ if (personalKioskResponse.hasNextPage) return personalKioskResponse;
65
+ const remainingLimit = limit - personalKioskResponse.kioskOwnerCaps.length;
66
+ if (remainingLimit < 1) return {
67
+ nextCursor: `${OWNED_KIOSKS_CURSOR}:`,
68
+ hasNextPage: true,
69
+ kioskOwnerCaps: personalKioskResponse.kioskOwnerCaps,
70
+ kioskIds: personalKioskResponse.kioskIds
71
+ };
72
+ const ownedResult = await client.core.listOwnedObjects({
73
+ owner: address,
74
+ type: KIOSK_OWNER_CAP,
75
+ cursor: null,
76
+ limit: remainingLimit,
77
+ include: { content: true }
78
+ });
79
+ const { KioskOwnerCap: KioskOwnerCapParser$1 } = await import("../contracts/0x2/kiosk.mjs");
80
+ const ownedKiosksResponse = formatOwnedKioskResponse({
81
+ data: ownedResult.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
82
+ return {
83
+ obj,
84
+ kioskId: KioskOwnerCapParser$1.parse(obj.content).for
85
+ };
86
+ }).filter((item) => item.kioskId !== void 0),
87
+ hasNextPage: ownedResult.hasNextPage,
88
+ nextCursor: ownedResult.cursor
89
+ }, OWNED_KIOSKS_CURSOR);
90
+ return {
91
+ nextCursor: ownedKiosksResponse.nextCursor,
92
+ hasNextPage: ownedKiosksResponse.hasNextPage,
93
+ kioskOwnerCaps: [...personalKioskResponse.kioskOwnerCaps, ...ownedKiosksResponse.kioskOwnerCaps],
94
+ kioskIds: [...personalKioskResponse.kioskIds, ...ownedKiosksResponse.kioskIds]
95
+ };
96
+ }
97
+ const result = await client.core.listOwnedObjects({
98
+ owner: address,
99
+ type: KIOSK_OWNER_CAP,
100
+ cursor: cursor || null,
101
+ limit,
102
+ include: { content: true }
103
+ });
104
+ const { KioskOwnerCap: KioskOwnerCapParser } = await import("../contracts/0x2/kiosk.mjs");
105
+ return formatOwnedKioskResponse({
106
+ data: result.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
107
+ return {
108
+ obj,
109
+ kioskId: KioskOwnerCapParser.parse(obj.content).for
110
+ };
111
+ }).filter((item) => item.kioskId !== void 0),
112
+ hasNextPage: result.hasNextPage,
113
+ nextCursor: result.cursor
114
+ }, OWNED_KIOSKS_CURSOR);
115
+ }
116
+ function formatOwnedKioskResponse(response, cursorType) {
117
+ const { data, hasNextPage, nextCursor } = response;
118
+ return {
119
+ nextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,
120
+ hasNextPage,
121
+ kioskOwnerCaps: data.map((item) => {
122
+ return {
123
+ isPersonal: item.obj.type?.includes("PersonalKioskCap") || false,
124
+ digest: item.obj.digest,
125
+ version: item.obj.version,
126
+ objectId: item.obj.objectId,
127
+ kioskId: item.kioskId
128
+ };
129
+ }),
130
+ kioskIds: data.map((item) => item.kioskId)
131
+ };
132
+ }
133
+ async function fetchKioskExtension(client, kioskId, extensionType) {
134
+ const { dynamicField } = await client.core.getDynamicField({
135
+ parentId: kioskId,
136
+ name: {
137
+ type: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,
138
+ bcs: ExtensionKey.serialize({ dummy_field: false }).toBytes()
139
+ }
140
+ });
141
+ const extension = Extension.parse(dynamicField.value.bcs);
142
+ return {
143
+ objectId: dynamicField.fieldId,
144
+ type: extensionType,
145
+ isEnabled: extension.is_enabled,
146
+ permissions: extension.permissions.toString(),
147
+ storageId: extension.storage.id,
148
+ storageSize: Number(extension.storage.size)
149
+ };
150
+ }
151
+
152
+ //#endregion
153
+ export { fetchKiosk, fetchKioskExtension, getOwnedKiosks };
154
+ //# sourceMappingURL=kiosk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiosk.mjs","names":["KioskOwnerCapParser"],"sources":["../../src/query/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PaginationArguments } from '@mysten/sui/jsonRpc';\nimport type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\nimport { isValidSuiAddress } from '@mysten/sui/utils';\n\nimport { Extension, ExtensionKey } from '../contracts/0x2/kiosk_extension.js';\nimport type {\n\tFetchKioskOptions,\n\tKioskExtension,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types/index.js';\nimport { KIOSK_OWNER_CAP } from '../types/index.js';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\tattachObjects,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetAllObjects,\n\tgetKioskObject,\n} from '../utils.js';\nimport { PersonalKioskCap } from '../contracts/kiosk/personal_kiosk.js';\n\nexport async function fetchKiosk(\n\tclient: ClientWithCoreApi,\n\tkioskId: string,\n\tpagination: PaginationArguments<string>,\n\toptions: FetchKioskOptions,\n): Promise<PagedKioskData> {\n\t// TODO: Replace the `getAllDynamicFields` with a paginated\n\t// response, once we have better RPC support for\n\t// type filtering & batch fetching.\n\t// This can't work with pagination currently.\n\tconst data = await getAllDynamicFields(client, kioskId, pagination);\n\n\tconst listings: KioskListing[] = [];\n\tconst lockedItemIds: string[] = [];\n\n\t// extracted kiosk data.\n\tconst kioskData = extractKioskData(data, listings, lockedItemIds, kioskId);\n\n\t// split the fetching in two queries as we are most likely passing different options for each kind.\n\t// For items, we usually seek the Display.\n\t// For listings we usually seek the DF value (price) / exclusivity.\n\tconst [kiosk, listingObjects, items] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),\n\t\toptions.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([]),\n\t]);\n\n\tif (options.withKioskFields) kioskData.kiosk = kiosk;\n\t// attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n\tattachListingsAndPrices(kioskData, listings, listingObjects);\n\t// add `locked` status to items that are locked.\n\tattachLockedItems(kioskData, lockedItemIds);\n\n\t// Attach the objects for the queried items.\n\tattachObjects(kioskData, items);\n\n\treturn {\n\t\tdata: kioskData,\n\t\tnextCursor: null,\n\t\thasNextPage: false,\n\t};\n}\n\n/**\n * A function to fetch all the user's kiosk Caps\n * And a list of the kiosk address ids.\n * Returns a list of `kioskOwnerCapIds` and `kioskIds`.\n * Extra options allow pagination.\n */\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst PERSON_KIOSK_CURSOR = 'personal';\nconst OWNED_KIOSKS_CURSOR = 'owned';\nexport async function getOwnedKiosks(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t\tpersonalKioskType: string;\n\t},\n): Promise<OwnedKiosks> {\n\t// TODO: this should throw an error, but I am not going to change it right now incase it breaks existing code.\n\tif (!isValidSuiAddress(address)) {\n\t\treturn {\n\t\t\tnextCursor: null,\n\t\t\thasNextPage: false,\n\t\t\tkioskOwnerCaps: [],\n\t\t\tkioskIds: [],\n\t\t};\n\t}\n\n\tconst limit = options?.pagination?.limit ?? DEFAULT_PAGE_SIZE;\n\tconst [cursorType, cursor] = options?.pagination?.cursor?.split(':') ?? [\n\t\tPERSON_KIOSK_CURSOR,\n\t\tnull,\n\t];\n\n\tif (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {\n\t\tconst personalResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: options.personalKioskType,\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst personalKioskData = personalResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: PersonalKioskCap.parse(obj.content).cap?.for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst personalKioskResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: personalKioskData,\n\t\t\t\thasNextPage: personalResult.hasNextPage,\n\t\t\t\tnextCursor: personalResult.cursor,\n\t\t\t},\n\t\t\tPERSON_KIOSK_CURSOR,\n\t\t);\n\n\t\tif (personalKioskResponse.hasNextPage) {\n\t\t\treturn personalKioskResponse;\n\t\t}\n\n\t\tconst remainingLimit = limit - personalKioskResponse.kioskOwnerCaps.length;\n\n\t\t// If we have all personal kiosks, but don't have space for the owned kiosks\n\t\t// we need to start loading owned kiosks for the next page, but don't have a real cursor\n\t\tif (remainingLimit < 1) {\n\t\t\treturn {\n\t\t\t\tnextCursor: `${OWNED_KIOSKS_CURSOR}:`,\n\t\t\t\thasNextPage: true,\n\t\t\t\tkioskOwnerCaps: personalKioskResponse.kioskOwnerCaps,\n\t\t\t\tkioskIds: personalKioskResponse.kioskIds,\n\t\t\t};\n\t\t}\n\n\t\tconst ownedResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: KIOSK_OWNER_CAP,\n\t\t\tcursor: null,\n\t\t\tlimit: remainingLimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\t\tconst ownedKioskData = ownedResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst ownedKiosksResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: ownedKioskData,\n\t\t\t\thasNextPage: ownedResult.hasNextPage,\n\t\t\t\tnextCursor: ownedResult.cursor,\n\t\t\t},\n\t\t\tOWNED_KIOSKS_CURSOR,\n\t\t);\n\n\t\treturn {\n\t\t\tnextCursor: ownedKiosksResponse.nextCursor,\n\t\t\thasNextPage: ownedKiosksResponse.hasNextPage,\n\t\t\tkioskOwnerCaps: [\n\t\t\t\t...personalKioskResponse.kioskOwnerCaps,\n\t\t\t\t...ownedKiosksResponse.kioskOwnerCaps,\n\t\t\t],\n\t\t\tkioskIds: [...personalKioskResponse.kioskIds, ...ownedKiosksResponse.kioskIds],\n\t\t};\n\t}\n\n\tconst result = await client.core.listOwnedObjects({\n\t\towner: address,\n\t\ttype: KIOSK_OWNER_CAP,\n\t\tcursor: cursor || null,\n\t\tlimit,\n\t\tinclude: {\n\t\t\tcontent: true,\n\t\t},\n\t});\n\n\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\tconst ownedKioskData = result.objects\n\t\t.filter((obj) => !(obj instanceof Error))\n\t\t.map((obj) => {\n\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t})\n\t\t.filter(\n\t\t\t(\n\t\t\t\titem,\n\t\t\t): item is {\n\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\tkioskId: string;\n\t\t\t} => item.kioskId !== undefined,\n\t\t);\n\n\treturn formatOwnedKioskResponse(\n\t\t{\n\t\t\tdata: ownedKioskData,\n\t\t\thasNextPage: result.hasNextPage,\n\t\t\tnextCursor: result.cursor,\n\t\t},\n\t\tOWNED_KIOSKS_CURSOR,\n\t);\n}\n\nfunction formatOwnedKioskResponse(\n\tresponse: {\n\t\tdata: {\n\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\tkioskId: string;\n\t\t}[];\n\t\thasNextPage: boolean;\n\t\tnextCursor: string | null;\n\t},\n\tcursorType: string,\n): OwnedKiosks {\n\tconst { data, hasNextPage, nextCursor } = response;\n\n\treturn {\n\t\tnextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: data.map((item) => {\n\t\t\tconst isPersonal = item.obj.type?.includes('PersonalKioskCap') || false;\n\t\t\treturn {\n\t\t\t\tisPersonal,\n\t\t\t\tdigest: item.obj.digest,\n\t\t\t\tversion: item.obj.version,\n\t\t\t\tobjectId: item.obj.objectId,\n\t\t\t\tkioskId: item.kioskId,\n\t\t\t};\n\t\t}),\n\t\tkioskIds: data.map((item) => item.kioskId),\n\t};\n}\n\n// Get a kiosk extension data for a given kioskId and extensionType.\nexport async function fetchKioskExtension(\n\tclient: ClientWithCoreApi,\n\tkioskId: string,\n\textensionType: string,\n): Promise<KioskExtension | null> {\n\tconst { dynamicField } = await client.core.getDynamicField({\n\t\tparentId: kioskId,\n\t\tname: {\n\t\t\ttype: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,\n\t\t\tbcs: ExtensionKey.serialize({ dummy_field: false }).toBytes(),\n\t\t},\n\t});\n\n\tconst extension = Extension.parse(dynamicField.value.bcs);\n\n\treturn {\n\t\tobjectId: dynamicField.fieldId,\n\t\ttype: extensionType,\n\t\tisEnabled: extension.is_enabled,\n\t\tpermissions: extension.permissions.toString(),\n\t\tstorageId: extension.storage.id,\n\t\tstorageSize: Number(extension.storage.size),\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE } from "../types/transfer-policy.mjs";
2
+ import { TransferPolicy, TransferPolicyCap } from "../contracts/0x2/transfer_policy.mjs";
3
+ import { queryEvents } from "./client-utils.mjs";
4
+ import { isValidSuiAddress } from "@mysten/sui/utils";
5
+
6
+ //#region src/query/transfer-policy.ts
7
+ /**
8
+ * Searches the `TransferPolicy`-s for the given type. The search is performed via
9
+ * the `TransferPolicyCreated` event. The policy can either be owned or shared,
10
+ * and the caller needs to filter the results accordingly (ie single owner can not
11
+ * be accessed by anyone but the owner).
12
+ *
13
+ * This method requires event querying support (JSON-RPC or GraphQL clients).
14
+ * gRPC clients do not support event querying and will throw an error.
15
+ *
16
+ * @param client - The Sui client (must support event querying)
17
+ * @param type - The type of the asset (e.g., "0x123::nft::NFT")
18
+ * @throws Error if the client doesn't support event querying
19
+ */
20
+ async function queryTransferPolicy(client, type) {
21
+ const search = (await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`)).map((event) => event.json);
22
+ const { objects } = await client.core.getObjects({
23
+ objectIds: search.map((policy) => policy.id),
24
+ include: { content: true }
25
+ });
26
+ return objects.filter((obj) => !(obj instanceof Error) && obj.content).map((obj) => {
27
+ if (obj instanceof Error) throw obj;
28
+ if (!obj.content) throw new Error(`Invalid policy: ${obj.objectId}, expected object with content`);
29
+ const parsed = TransferPolicy.parse(obj.content);
30
+ return {
31
+ id: obj.objectId,
32
+ type: `${TRANSFER_POLICY_TYPE}<${type}>`,
33
+ owner: obj.owner,
34
+ rules: parsed.rules.contents.map((rule) => rule.name),
35
+ balance: parsed.balance.value.toString()
36
+ };
37
+ });
38
+ }
39
+ /**
40
+ * Fetches all TransferPolicyCap objects owned by an address for a specific type.
41
+ *
42
+ * @param client - The Sui client
43
+ * @param address - The owner address
44
+ * @param type - The type of the asset
45
+ * @returns Array of TransferPolicyCap objects
46
+ */
47
+ async function queryTransferPolicyCapsByType(client, address, type) {
48
+ if (!isValidSuiAddress(address)) return [];
49
+ const policies = [];
50
+ let hasNextPage = true;
51
+ let cursor = null;
52
+ while (hasNextPage) {
53
+ const result = await client.core.listOwnedObjects({
54
+ owner: address,
55
+ type: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,
56
+ cursor,
57
+ limit: 50,
58
+ include: { content: true }
59
+ });
60
+ for (const obj of result.objects) if (obj.content) policies.push({
61
+ policyId: TransferPolicyCap.parse(obj.content).policy_id,
62
+ policyCapId: obj.objectId,
63
+ type
64
+ });
65
+ hasNextPage = result.hasNextPage;
66
+ cursor = result.cursor;
67
+ }
68
+ return policies;
69
+ }
70
+ /**
71
+ * Fetches all TransferPolicyCap objects owned by an address (all types).
72
+ *
73
+ * Uses struct-level filtering (without type parameters) to efficiently query
74
+ * only TransferPolicyCap objects. This matches all generic instantiations
75
+ * (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.
76
+ *
77
+ * @param client - The Sui client
78
+ * @param address - The owner address
79
+ * @returns Array of TransferPolicyCap objects or undefined if address is invalid
80
+ */
81
+ async function queryOwnedTransferPolicies(client, address) {
82
+ if (!isValidSuiAddress(address)) return;
83
+ let hasNextPage = true;
84
+ let cursor = null;
85
+ const policies = [];
86
+ while (hasNextPage) {
87
+ const result = await client.core.listOwnedObjects({
88
+ owner: address,
89
+ type: TRANSFER_POLICY_CAP_TYPE,
90
+ cursor,
91
+ limit: 50,
92
+ include: { content: true }
93
+ });
94
+ for (const obj of result.objects) if (obj.content) {
95
+ const objectType = obj.type.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, "").slice(0, -1);
96
+ policies.push({
97
+ policyId: TransferPolicyCap.parse(obj.content).policy_id,
98
+ policyCapId: obj.objectId,
99
+ type: objectType
100
+ });
101
+ }
102
+ hasNextPage = result.hasNextPage;
103
+ cursor = result.cursor;
104
+ }
105
+ return policies;
106
+ }
107
+
108
+ //#endregion
109
+ export { queryOwnedTransferPolicies, queryTransferPolicy, queryTransferPolicyCapsByType };
110
+ //# sourceMappingURL=transfer-policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-policy.mjs","names":["TransferPolicyStruct","TransferPolicyCapStruct"],"sources":["../../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isValidSuiAddress } from '@mysten/sui/utils';\nimport type { ClientWithCoreApi } from '@mysten/sui/client';\n\nimport {\n\tTransferPolicyCap as TransferPolicyCapStruct,\n\tTransferPolicy as TransferPolicyStruct,\n} from '../contracts/0x2/transfer_policy.js';\nimport type { TransferPolicy, TransferPolicyCap } from '../types/index.js';\nimport {\n\tTRANSFER_POLICY_CAP_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from '../types/index.js';\nimport { queryEvents } from './client-utils.js';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The search is performed via\n * the `TransferPolicyCreated` event. The policy can either be owned or shared,\n * and the caller needs to filter the results accordingly (ie single owner can not\n * be accessed by anyone but the owner).\n *\n * This method requires event querying support (JSON-RPC or GraphQL clients).\n * gRPC clients do not support event querying and will throw an error.\n *\n * @param client - The Sui client (must support event querying)\n * @param type - The type of the asset (e.g., \"0x123::nft::NFT\")\n * @throws Error if the client doesn't support event querying\n */\nexport async function queryTransferPolicy(\n\tclient: ClientWithCoreApi,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\tconst data = await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\n\tconst search = data.map((event) => event.json as { id: string });\n\n\tconst { objects } = await client.core.getObjects({\n\t\tobjectIds: search.map((policy: { id: string }) => policy.id),\n\t\tinclude: { content: true },\n\t});\n\n\treturn objects\n\t\t.filter((obj) => !(obj instanceof Error) && obj.content)\n\t\t.map((obj) => {\n\t\t\tif (obj instanceof Error) {\n\t\t\t\tthrow obj;\n\t\t\t}\n\n\t\t\tif (!obj.content) {\n\t\t\t\tthrow new Error(`Invalid policy: ${obj.objectId}, expected object with content`);\n\t\t\t}\n\n\t\t\tconst parsed = TransferPolicyStruct.parse(obj.content);\n\n\t\t\treturn {\n\t\t\t\tid: obj.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: obj.owner,\n\t\t\t\trules: parsed.rules.contents.map((rule) => rule.name),\n\t\t\t\tbalance: parsed.balance.value.toString(),\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address for a specific type.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @param type - The type of the asset\n * @returns Array of TransferPolicyCap objects\n */\nexport async function queryTransferPolicyCapsByType(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n\ttype: string,\n): Promise<TransferPolicyCap[]> {\n\tif (!isValidSuiAddress(address)) return [];\n\n\tconst policies = [];\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address (all types).\n *\n * Uses struct-level filtering (without type parameters) to efficiently query\n * only TransferPolicyCap objects. This matches all generic instantiations\n * (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @returns Array of TransferPolicyCap objects or undefined if address is invalid\n */\nexport async function queryOwnedTransferPolicies(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n): Promise<TransferPolicyCap[] | undefined> {\n\tif (!isValidSuiAddress(address)) return;\n\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\tconst policies: TransferPolicyCap[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: TRANSFER_POLICY_CAP_TYPE,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t// All results are TransferPolicyCap objects, extract the type parameter\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\t// Extract the type parameter T from \"0x2::transfer_policy::TransferPolicyCap<T>\"\n\t\t\t\tconst objectType = obj.type!.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, '').slice(0, -1);\n\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype: objectType,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,oBACrB,QACA,MAC4B;CAG5B,MAAM,UAFO,MAAM,YAAY,QAAQ,GAAG,8BAA8B,GAAG,KAAK,GAAG,EAE/D,KAAK,UAAU,MAAM,KAAuB;CAEhE,MAAM,EAAE,YAAY,MAAM,OAAO,KAAK,WAAW;EAChD,WAAW,OAAO,KAAK,WAA2B,OAAO,GAAG;EAC5D,SAAS,EAAE,SAAS,MAAM;EAC1B,CAAC;AAEF,QAAO,QACL,QAAQ,QAAQ,EAAE,eAAe,UAAU,IAAI,QAAQ,CACvD,KAAK,QAAQ;AACb,MAAI,eAAe,MAClB,OAAM;AAGP,MAAI,CAAC,IAAI,QACR,OAAM,IAAI,MAAM,mBAAmB,IAAI,SAAS,gCAAgC;EAGjF,MAAM,SAASA,eAAqB,MAAM,IAAI,QAAQ;AAEtD,SAAO;GACN,IAAI,IAAI;GACR,MAAM,GAAG,qBAAqB,GAAG,KAAK;GACtC,OAAO,IAAI;GACX,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,KAAK,KAAK;GACrD,SAAS,OAAO,QAAQ,MAAM,UAAU;GACxC;GACA;;;;;;;;;;AAWJ,eAAsB,8BACrB,QACA,SACA,MAC+B;AAC/B,KAAI,CAAC,kBAAkB,QAAQ,CAAE,QAAO,EAAE;CAE1C,MAAM,WAAW,EAAE;CACnB,IAAI,cAAc;CAClB,IAAI,SAAwB;AAE5B,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM,GAAG,yBAAyB,GAAG,KAAK;GAC1C;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAEH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,QACP,UAAS,KAAK;GACb,UAAUC,kBAAwB,MAAM,IAAI,QAAQ,CAAC;GACrD,aAAa,IAAI;GACjB;GACA,CAAC;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO;;;;;;;;;;;;;AAcR,eAAsB,2BACrB,QACA,SAC2C;AAC3C,KAAI,CAAC,kBAAkB,QAAQ,CAAE;CAEjC,IAAI,cAAc;CAClB,IAAI,SAAwB;CAC5B,MAAM,WAAgC,EAAE;AAExC,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM;GACN;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAGH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,SAAS;GAEhB,MAAM,aAAa,IAAI,KAAM,QAAQ,GAAG,yBAAyB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;AAErF,YAAS,KAAK;IACb,UAAUA,kBAAwB,MAAM,IAAI,QAAQ,CAAC;IACrD,aAAa,IAAI;IACjB,MAAM;IACN,CAAC;;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO"}
@@ -0,0 +1,20 @@
1
+ import { _new } from "../contracts/0x2/kiosk.mjs";
2
+
3
+ //#region src/tx/kiosk.ts
4
+ /**
5
+ * Calls the `kiosk::new()` function and shares the kiosk.
6
+ * Returns the `kioskOwnerCap` object.
7
+ */
8
+ function createKioskAndShare(tx) {
9
+ const [kioskObj, kioskOwnerCap] = tx.add(_new({}));
10
+ tx.moveCall({
11
+ target: "0x2::transfer::public_share_object",
12
+ arguments: [kioskObj],
13
+ typeArguments: ["0x2::kiosk::Kiosk"]
14
+ });
15
+ return kioskOwnerCap;
16
+ }
17
+
18
+ //#endregion
19
+ export { createKioskAndShare };
20
+ //# sourceMappingURL=kiosk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiosk.mjs","names":["kiosk._new"],"sources":["../../src/tx/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionObjectArgument } from '@mysten/sui/transactions';\nimport * as kiosk from '../contracts/0x2/kiosk.js';\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: Transaction): TransactionObjectArgument {\n\tconst [kioskObj, kioskOwnerCap] = tx.add(kiosk._new({}));\n\ttx.moveCall({\n\t\ttarget: '0x2::transfer::public_share_object',\n\t\targuments: [kioskObj],\n\t\ttypeArguments: ['0x2::kiosk::Kiosk'],\n\t});\n\treturn kioskOwnerCap;\n}\n"],"mappings":";;;;;;;AAUA,SAAgB,oBAAoB,IAA4C;CAC/E,MAAM,CAAC,UAAU,iBAAiB,GAAG,IAAIA,KAAW,EAAE,CAAC,CAAC;AACxD,IAAG,SAAS;EACX,QAAQ;EACR,WAAW,CAAC,SAAS;EACrB,eAAe,CAAC,oBAAoB;EACpC,CAAC;AACF,QAAO"}
@@ -0,0 +1,114 @@
1
+ import { lock } from "../../contracts/0x2/kiosk.mjs";
2
+ import { feeAmount, pay } from "../../contracts/kiosk/royalty_rule.mjs";
3
+ import { prove } from "../../contracts/kiosk/kiosk_lock_rule.mjs";
4
+ import { prove as prove$1 } from "../../contracts/kiosk/personal_kiosk_rule.mjs";
5
+ import { prove as prove$2 } from "../../contracts/kiosk/floor_price_rule.mjs";
6
+ import { bcs } from "@mysten/sui/bcs";
7
+ import { normalizeSuiAddress } from "@mysten/sui/utils";
8
+ import { Transaction } from "@mysten/sui/transactions";
9
+
10
+ //#region src/tx/rules/resolve.ts
11
+ /**
12
+ * A helper to resolve the royalty rule.
13
+ */
14
+ async function resolveRoyaltyRule(params) {
15
+ const { transaction: tx, itemType, price, packageId, transferRequest, policyId, kioskClient } = params;
16
+ const feeTx = new Transaction();
17
+ feeTx.add(feeAmount({
18
+ package: packageId,
19
+ arguments: {
20
+ policy: feeTx.object(policyId),
21
+ paid: BigInt(price || "0")
22
+ },
23
+ typeArguments: [itemType]
24
+ }));
25
+ const policyObj = tx.object(policyId);
26
+ let amount = null;
27
+ try {
28
+ feeTx.setSender(tx.getData().sender || normalizeSuiAddress("0x0"));
29
+ const txBytes = await feeTx.build({ client: kioskClient.client });
30
+ const result = await kioskClient.client.core.simulateTransaction({
31
+ transaction: txBytes,
32
+ include: { commandResults: true }
33
+ });
34
+ if (result.commandResults && result.commandResults.length > 0) {
35
+ const returnedAmount = result.commandResults[0]?.returnValues?.[0]?.bcs;
36
+ if (returnedAmount) amount = BigInt(bcs.U64.parse(returnedAmount));
37
+ }
38
+ } catch {}
39
+ if (!amount) [amount] = tx.add(feeAmount({
40
+ package: packageId,
41
+ arguments: {
42
+ policy: policyObj,
43
+ paid: BigInt(price || "0")
44
+ },
45
+ typeArguments: [itemType]
46
+ }));
47
+ const feeCoin = tx.splitCoins(tx.gas, [amount]);
48
+ tx.add(pay({
49
+ package: packageId,
50
+ arguments: {
51
+ policy: policyObj,
52
+ request: transferRequest,
53
+ payment: feeCoin
54
+ },
55
+ typeArguments: [itemType]
56
+ }));
57
+ }
58
+ function resolveKioskLockRule(params) {
59
+ const { transaction: tx, packageId, itemType, kiosk: kioskId, kioskCap, policyId, purchasedItem, transferRequest } = params;
60
+ if (!kioskId || !kioskCap) throw new Error("Missing Owned Kiosk or Owned Kiosk Cap");
61
+ tx.add(lock({
62
+ arguments: [
63
+ kioskId,
64
+ kioskCap,
65
+ policyId,
66
+ purchasedItem
67
+ ],
68
+ typeArguments: [itemType]
69
+ }));
70
+ tx.add(prove({
71
+ package: packageId,
72
+ arguments: {
73
+ request: transferRequest,
74
+ kiosk: tx.object(kioskId)
75
+ },
76
+ typeArguments: [itemType]
77
+ }));
78
+ }
79
+ /**
80
+ * A helper to resolve the personalKioskRule.
81
+ * @param params
82
+ */
83
+ function resolvePersonalKioskRule(params) {
84
+ const { transaction: tx, packageId, itemType, kiosk, transferRequest } = params;
85
+ if (!kiosk) throw new Error("Missing owned Kiosk.");
86
+ tx.add(prove$1({
87
+ package: packageId,
88
+ arguments: {
89
+ kiosk: tx.object(kiosk),
90
+ request: transferRequest
91
+ },
92
+ typeArguments: [itemType]
93
+ }));
94
+ }
95
+ /**
96
+ * A helper to resolve the floor price rule.
97
+ * The floor price rule verifies that the paid amount meets the minimum price.
98
+ * @param params
99
+ */
100
+ function resolveFloorPriceRule(params) {
101
+ const { transaction: tx, packageId, itemType, policyId, transferRequest } = params;
102
+ tx.add(prove$2({
103
+ package: packageId,
104
+ arguments: {
105
+ policy: tx.object(policyId),
106
+ request: transferRequest
107
+ },
108
+ typeArguments: [itemType]
109
+ }));
110
+ }
111
+
112
+ //#endregion
113
+ export { resolveFloorPriceRule, resolveKioskLockRule, resolvePersonalKioskRule, resolveRoyaltyRule };
114
+ //# sourceMappingURL=resolve.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.mjs","names":["royaltyRule.feeAmount","royaltyRule.pay","kiosk.lock","kioskLockRule.prove","personalKioskRule.prove","floorPriceRule.prove"],"sources":["../../../src/tx/rules/resolve.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { bcs } from '@mysten/sui/bcs';\nimport { normalizeSuiAddress } from '@mysten/sui/utils';\n\nimport type { RuleResolvingParams } from '../../types/index.js';\nimport * as kiosk from '../../contracts/0x2/kiosk.js';\nimport * as royaltyRule from '../../contracts/kiosk/royalty_rule.js';\nimport * as kioskLockRule from '../../contracts/kiosk/kiosk_lock_rule.js';\nimport * as personalKioskRule from '../../contracts/kiosk/personal_kiosk_rule.js';\nimport * as floorPriceRule from '../../contracts/kiosk/floor_price_rule.js';\n/**\n * A helper to resolve the royalty rule.\n */\nexport async function resolveRoyaltyRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\titemType,\n\t\tprice,\n\t\tpackageId,\n\t\ttransferRequest,\n\t\tpolicyId,\n\t\tkioskClient,\n\t} = params;\n\n\t// We attempt to resolve the fee amount outside of the PTB so that the split amount is known before the transaction is sent.\n\t// This improves the display of the transaction within the wallet.\n\n\tconst feeTx = new Transaction();\n\n\t// calculates the amount\n\tfeeTx.add(\n\t\troyaltyRule.feeAmount({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: feeTx.object(policyId),\n\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\tconst policyObj = tx.object(policyId);\n\n\tlet amount: TransactionArgument | bigint | null = null;\n\n\ttry {\n\t\tfeeTx.setSender(tx.getData().sender || normalizeSuiAddress('0x0'));\n\t\tconst txBytes = await feeTx.build({ client: kioskClient.client });\n\n\t\tconst result = await kioskClient.client.core.simulateTransaction({\n\t\t\ttransaction: txBytes,\n\t\t\tinclude: { commandResults: true },\n\t\t});\n\n\t\tif (result.commandResults && result.commandResults.length > 0) {\n\t\t\tconst returnedAmount = result.commandResults[0]?.returnValues?.[0]?.bcs;\n\t\t\tif (returnedAmount) {\n\t\t\t\tamount = BigInt(bcs.U64.parse(returnedAmount));\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// If simulate fails, fall back to resolving within the PTB\n\t}\n\n\t// We were not able to calculate the amount outside of the transaction, so fall back to resolving it within the PTB\n\tif (!amount) {\n\t\t[amount] = tx.add(\n\t\t\troyaltyRule.feeAmount({\n\t\t\t\tpackage: packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tpolicy: policyObj,\n\t\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t\t},\n\t\t\t\ttypeArguments: [itemType],\n\t\t\t}),\n\t\t);\n\t}\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.add(\n\t\troyaltyRule.pay({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: policyObj,\n\t\t\t\trequest: transferRequest,\n\t\t\t\tpayment: feeCoin,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\nexport function resolveKioskLockRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\tpackageId,\n\t\titemType,\n\t\tkiosk: kioskId,\n\t\tkioskCap,\n\t\tpolicyId,\n\t\tpurchasedItem,\n\t\ttransferRequest,\n\t} = params;\n\n\tif (!kioskId || !kioskCap) throw new Error('Missing Owned Kiosk or Owned Kiosk Cap');\n\n\ttx.add(\n\t\tkiosk.lock({\n\t\t\targuments: [kioskId, kioskCap, policyId, purchasedItem],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.add(\n\t\tkioskLockRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\trequest: transferRequest,\n\t\t\t\tkiosk: tx.object(kioskId),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the personalKioskRule.\n * @param params\n */\nexport function resolvePersonalKioskRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, kiosk, transferRequest } = params;\n\n\tif (!kiosk) throw new Error('Missing owned Kiosk.');\n\n\t// proves that the destination kiosk is personal.\n\ttx.add(\n\t\tpersonalKioskRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tkiosk: tx.object(kiosk),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the floor price rule.\n * The floor price rule verifies that the paid amount meets the minimum price.\n * @param params\n */\nexport function resolveFloorPriceRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, policyId, transferRequest } = params;\n\n\t// proves that the paid amount meets the floor price requirement\n\ttx.add(\n\t\tfloorPriceRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: tx.object(policyId),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,eAAsB,mBAAmB,QAA6B;CACrE,MAAM,EACL,aAAa,IACb,UACA,OACA,WACA,iBACA,UACA,gBACG;CAKJ,MAAM,QAAQ,IAAI,aAAa;AAG/B,OAAM,IACLA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ,MAAM,OAAO,SAAS;GAC9B,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAED,MAAM,YAAY,GAAG,OAAO,SAAS;CAErC,IAAI,SAA8C;AAElD,KAAI;AACH,QAAM,UAAU,GAAG,SAAS,CAAC,UAAU,oBAAoB,MAAM,CAAC;EAClE,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,QAAQ,YAAY,QAAQ,CAAC;EAEjE,MAAM,SAAS,MAAM,YAAY,OAAO,KAAK,oBAAoB;GAChE,aAAa;GACb,SAAS,EAAE,gBAAgB,MAAM;GACjC,CAAC;AAEF,MAAI,OAAO,kBAAkB,OAAO,eAAe,SAAS,GAAG;GAC9D,MAAM,iBAAiB,OAAO,eAAe,IAAI,eAAe,IAAI;AACpE,OAAI,eACH,UAAS,OAAO,IAAI,IAAI,MAAM,eAAe,CAAC;;SAGzC;AAKR,KAAI,CAAC,OACJ,EAAC,UAAU,GAAG,IACbA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ;GACR,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAIF,MAAM,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;AAG/C,IAAG,IACFC,IAAgB;EACf,SAAS;EACT,WAAW;GACV,QAAQ;GACR,SAAS;GACT,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;AAGF,SAAgB,qBAAqB,QAA6B;CACjE,MAAM,EACL,aAAa,IACb,WACA,UACA,OAAO,SACP,UACA,UACA,eACA,oBACG;AAEJ,KAAI,CAAC,WAAW,CAAC,SAAU,OAAM,IAAI,MAAM,yCAAyC;AAEpF,IAAG,IACFC,KAAW;EACV,WAAW;GAAC;GAAS;GAAU;GAAU;GAAc;EACvD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAGD,IAAG,IACFC,MAAoB;EACnB,SAAS;EACT,WAAW;GACV,SAAS;GACT,OAAO,GAAG,OAAO,QAAQ;GACzB;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;AAOF,SAAgB,yBAAyB,QAA6B;CACrE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,OAAO,oBAAoB;AAEzE,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,uBAAuB;AAGnD,IAAG,IACFC,QAAwB;EACvB,SAAS;EACT,WAAW;GACV,OAAO,GAAG,OAAO,MAAM;GACvB,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;;AAQF,SAAgB,sBAAsB,QAA6B;CAClE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,UAAU,oBAAoB;AAG5E,IAAG,IACFC,QAAqB;EACpB,SAAS;EACT,WAAW;GACV,QAAQ,GAAG,OAAO,SAAS;GAC3B,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF"}
@@ -0,0 +1,38 @@
1
+ import { _new, withdraw } from "../contracts/0x2/transfer_policy.mjs";
2
+
3
+ //#region src/tx/transfer-policy.ts
4
+ /**
5
+ * Call the `transfer_policy::new` function to create a new transfer policy.
6
+ * Returns `transferPolicyCap`
7
+ */
8
+ function createTransferPolicy(tx, itemType, publisher) {
9
+ const [policy, policyCap] = tx.add(_new({
10
+ arguments: [publisher],
11
+ typeArguments: [itemType]
12
+ }));
13
+ tx.moveCall({
14
+ target: "0x2::transfer::public_share_object",
15
+ arguments: [policy],
16
+ typeArguments: [`0x2::transfer_policy::TransferPolicy<${itemType}>`]
17
+ });
18
+ return policyCap;
19
+ }
20
+ /**
21
+ * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.
22
+ */
23
+ function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
24
+ const amountArg = amount ? typeof amount === "string" ? BigInt(amount) : amount : null;
25
+ const [profits] = tx.add(withdraw({
26
+ arguments: [
27
+ policy,
28
+ policyCap,
29
+ amountArg
30
+ ],
31
+ typeArguments: [itemType]
32
+ }));
33
+ return profits;
34
+ }
35
+
36
+ //#endregion
37
+ export { createTransferPolicy, withdrawFromPolicy };
38
+ //# sourceMappingURL=transfer-policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-policy.mjs","names":["transferPolicy._new","transferPolicy.withdraw"],"sources":["../../src/tx/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionObjectArgument } from '@mysten/sui/transactions';\n\nimport type { ObjectArgument } from '../types/index.js';\nimport * as transferPolicy from '../contracts/0x2/transfer_policy.js';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: Transaction,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionObjectArgument {\n\tconst [policy, policyCap] = tx.add(\n\t\ttransferPolicy._new({\n\t\t\targuments: [publisher],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\ttx.moveCall({\n\t\ttarget: '0x2::transfer::public_share_object',\n\t\targuments: [policy],\n\t\ttypeArguments: [`0x2::transfer_policy::TransferPolicy<${itemType}>`],\n\t});\n\n\treturn policyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: Transaction,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount?: string | bigint | null,\n): TransactionObjectArgument {\n\t// Convert string to bigint if needed for the generated function\n\tconst amountArg: bigint | null = amount\n\t\t? typeof amount === 'string'\n\t\t\t? BigInt(amount)\n\t\t\t: amount\n\t\t: null;\n\n\tconst [profits] = tx.add(\n\t\ttransferPolicy.withdraw({\n\t\t\targuments: [policy, policyCap, amountArg],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\treturn profits;\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,qBACf,IACA,UACA,WAC4B;CAC5B,MAAM,CAAC,QAAQ,aAAa,GAAG,IAC9BA,KAAoB;EACnB,WAAW,CAAC,UAAU;EACtB,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAED,IAAG,SAAS;EACX,QAAQ;EACR,WAAW,CAAC,OAAO;EACnB,eAAe,CAAC,wCAAwC,SAAS,GAAG;EACpE,CAAC;AAEF,QAAO;;;;;AAMR,SAAgB,mBACf,IACA,UACA,QACA,WACA,QAC4B;CAE5B,MAAM,YAA2B,SAC9B,OAAO,WAAW,WACjB,OAAO,OAAO,GACd,SACD;CAEH,MAAM,CAAC,WAAW,GAAG,IACpBC,SAAwB;EACvB,WAAW;GAAC;GAAQ;GAAW;GAAU;EACzC,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAED,QAAO"}
@@ -0,0 +1,23 @@
1
+ import { BaseRulePackageIds } from "../constants.mjs";
2
+ import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./kiosk.mjs";
3
+ import { KIOSK_LOCK_RULE, ROYALTY_RULE, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyCap, TransferPolicyCreated } from "./transfer-policy.mjs";
4
+ import { TransactionObjectArgument } from "@mysten/sui/transactions";
5
+ import { ClientWithCoreApi, SuiClientTypes } from "@mysten/sui/client";
6
+
7
+ //#region src/types/index.d.ts
8
+
9
+ /**
10
+ * A valid argument for any of the Kiosk functions.
11
+ */
12
+ type ObjectArgument = string | TransactionObjectArgument;
13
+ /**
14
+ * The Client Options for Both KioskClient & TransferPolicyManager.
15
+ */
16
+ type KioskClientOptions = {
17
+ client: ClientWithCoreApi;
18
+ network: SuiClientTypes.Network;
19
+ packageIds?: BaseRulePackageIds;
20
+ };
21
+ //#endregion
22
+ export { KioskClientOptions, ObjectArgument };
23
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAcA;AAKY,KALA,cAAA,GAKkB,MAAA,GALQ,yBAKR;;;;AAGE,KAHpB,kBAAA,GAGoB;UAFvB;WACC,cAAA,CAAe;eACX"}