@mysten/kiosk 0.2.0 → 0.3.1

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.
package/CHANGELOG.md CHANGED
@@ -1,14 +1,38 @@
1
1
  # @mysten/kiosk
2
2
 
3
+ ## 0.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 6a2a42d779: Add `getOwnedKiosks` query to easily get owned kiosks and their ownerCaps for an address
8
+ - abf6ad381e: Refactor the fetchKiosk function to return all content instead of paginating, to prevent missing data
9
+ - d72fdb5a5c: Fix on createTransferPolicy method. Updated type arguments for public_share_object command.
10
+ - Updated dependencies [3ea9adb71a]
11
+ - Updated dependencies [1cfb1c9da3]
12
+ - Updated dependencies [1cfb1c9da3]
13
+ - Updated dependencies [fb3bb9118a]
14
+ - @mysten/sui.js@0.36.0
15
+
16
+ ## 0.3.0
17
+
18
+ ### Minor Changes
19
+
20
+ - 968304368d: Support kiosk_lock_rule and environment support for rules package. Breaks `purchaseAndResolvePolicies` as it changes signature and return format.
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [09d77325a9]
25
+ - @mysten/sui.js@0.35.1
26
+
3
27
  ## 0.2.0
4
28
 
5
29
  ### Minor Changes
6
30
 
7
31
  - c322a230da: Fix fetchKiosk consistency/naming, include locked state in items
8
32
 
9
- ## 1.0.0
33
+ ## 0.1.0
10
34
 
11
- ### Major Changes
35
+ ### Minor Changes
12
36
 
13
37
  - 4ea96d909a: Kiosk SDK for managing, querying and interacting with Kiosk and TransferPolicy objects
14
38
 
package/README.md CHANGED
@@ -33,30 +33,24 @@ const provider = new JsonRpcProvider(
33
33
  const getKiosk = async () => {
34
34
  const kioskAddress = `0xSomeKioskAddress`;
35
35
 
36
- const {
37
- data: res,
38
- nextCursor,
39
- hasNextPage,
40
- } = await fetchKiosk(
36
+ const { data } = await fetchKiosk(
41
37
  provider,
42
38
  kioskAddress,
43
- { limit: 100 },
39
+ {}, // empty pagination, currently disabled.
44
40
  { withListingPrices: true, withKioskFields: true },
45
- ); // could also add `cursor` for pagination
41
+ );
46
42
 
47
- console.log(res); // { items: [], itemIds: [], listingIds: [], kiosk: {...} }
48
- console.log(nextCursor); // null
49
- console.log(hasNextPage); // false
43
+ console.log(data); // { items: [], itemIds: [], listingIds: [], kiosk: {...} }
50
44
  };
51
45
  ```
52
46
 
53
47
  </details>
54
48
 
55
49
  <details>
56
- <summary>Purchasing an item (currently supports royalty rule deployed on testnet or no rules)</summary>
50
+ <summary>Purchasing an item (currently supports royalty rule, kiosk_lock_rule, no rules, (combination works too))</summary>
57
51
 
58
52
  ```typescript
59
- import { fetchKiosk } from '@mysten/kiosk';
53
+ import { queryTransferPolicy, purchaseAndResolvePolicies, place, testnetEnvironment } from '@mysten/kiosk';
60
54
  import { Connection, JsonRpcProvider } from '@mysten/sui.js';
61
55
 
62
56
  const provider = new JsonRpcProvider(
@@ -76,6 +70,9 @@ const item = {
76
70
  price: "20000000000" // in MIST
77
71
  }
78
72
  }
73
+ const ownedKiosk = `0xMyKioskAddress`;
74
+ const ownedKioskCap = `0xMyKioskOwnerCap`;
75
+
79
76
  const purchaseItem = async (item, kioskId) => {
80
77
 
81
78
  // fetch the policy of the item (could be an array, if there's more than one transfer policy)
@@ -85,14 +82,25 @@ const purchaseItem = async (item, kioskId) => {
85
82
  // initialize tx block.
86
83
  const tx = new TransactionBlock();
87
84
 
88
- // Purchases the item. Right now it also resolves a royalty rule, if one exists.
89
- // There will be some additional work to support further rules & custom ones soon.
90
- const purchasedItem = purchaseAndResolvePolicies(tx, item.type, item.listing, kioskId, item.objectId, policy[0]);
85
+ // Both are required if you there is a `kiosk_lock_rule`.
86
+ // Optional otherwise. Function will throw an error if there's a kiosk_lock_rule and these are missing.
87
+ const extraParams = {
88
+ ownedKiosk,
89
+ ownedKioskCap
90
+ }
91
+ // Define the environment.
92
+ // To use a custom package address for rules, you could call:
93
+ // const environment = customEnvironment('<PackageAddress>');
94
+ const environment = testnetEnvironment;
91
95
 
92
- // now we need to decide what to do with the item
93
- // ... e.g. place() // places the item to the user's kiosk.
94
- // (NOT YET SUPPORTED BUT WORTH MENTIONING if the item has the `kiosk_lock` rule, the resolver will place it in the kiosk automatically.
95
- // For now, to support this rule, we need to manually resolve the `kiosk_lock` rule and place it in our owned kiosk.)
96
+ // Extra params. Optional, but required if the user tries to resolve a `kiosk_lock_rule`.
97
+ // Purchases the item. Supports `kiosk_lock_rule`, `royalty_rule` (accepts combination too).
98
+ const result = purchaseAndResolvePolicies(tx, item.type, item.listing.price, kioskId, item.objectId, policy[0], environment, extraParams);
99
+
100
+ // result = {item: <the_purchased_item>, canTransfer: true/false // depending on whether there was a kiosk lock rule }
101
+ // if the item didn't have a kiosk_lock_rule, we need to do something with it.
102
+ // for e..g place it in our own kiosk. (demonstrated below)
103
+ if(result.canTransfer) place(tx, item.type, ownedKiosk, ownedKioskCap , result.item);
96
104
 
97
105
  // ...finally, sign PTB & execute it.
98
106
 
@@ -158,12 +166,16 @@ import { TransactionBlock } from '@mysten/sui.js';
158
166
  const withdraw = async () => {
159
167
  const kiosk = 'SomeKioskId';
160
168
  const kioskCap = 'KioskCapObjectId';
169
+ const address = '0xSomeAddressThatReceivesTheFunds';
161
170
  const amount = '100000';
162
171
 
163
172
  const tx = new TransactionBlock();
164
173
 
165
174
  withdrawFromKiosk(tx, kiosk, kioskCap, amount);
166
175
 
176
+ // transfer the Coin to self or any other address.
177
+ tx.transferObjects([coin], tx.pure(address, 'address'));
178
+
167
179
  // ... continue to sign and execute the transaction
168
180
  // ...
169
181
  };
package/dist/bcs.d.ts CHANGED
@@ -1,33 +1,2 @@
1
- import { ObjectOwner, bcs } from '@mysten/sui.js';
2
- /**
3
- * The Kiosk object fields (for BCS queries).
4
- */
5
- export type Kiosk = {
6
- id: string;
7
- profits: string;
8
- owner: string;
9
- itemCount: number;
10
- allowExtensions: boolean;
11
- };
12
- /**
13
- * PurchaseCap object fields (for BCS queries).
14
- */
15
- export type PurchaseCap = {
16
- id: string;
17
- kioskId: string;
18
- itemId: string;
19
- minPrice: string;
20
- };
21
- /** Event emitted when a TransferPolicy is created. */
22
- export type TransferPolicyCreated = {
23
- id: string;
24
- };
25
- /** The `TransferPolicy` object */
26
- export type TransferPolicy = {
27
- id: string;
28
- type: string;
29
- balance: string;
30
- rules: string[];
31
- owner: ObjectOwner;
32
- };
1
+ import { bcs } from '@mysten/sui.js';
33
2
  export { bcs };
@@ -0,0 +1,4 @@
1
+ /** The Transer Policy Rules package address on testnet */
2
+ export declare const TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
3
+ /** The transfer policy rules package address on mainnet */
4
+ export declare const MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
package/dist/index.d.ts CHANGED
@@ -4,3 +4,5 @@ export * from './query/kiosk';
4
4
  export * from './bcs';
5
5
  export * from './utils';
6
6
  export * from './query/transfer-policy';
7
+ export * from './types';
8
+ export * from './constants';
package/dist/index.js CHANGED
@@ -20,12 +20,20 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ KIOSK_ITEM: () => KIOSK_ITEM,
24
+ KIOSK_LISTING: () => KIOSK_LISTING,
25
+ KIOSK_LOCK: () => KIOSK_LOCK,
26
+ KIOSK_LOCK_RULE: () => KIOSK_LOCK_RULE,
23
27
  KIOSK_MODULE: () => KIOSK_MODULE,
24
28
  KIOSK_OWNER_CAP: () => KIOSK_OWNER_CAP,
29
+ KIOSK_PURCHASE_CAP: () => KIOSK_PURCHASE_CAP,
25
30
  KIOSK_TYPE: () => KIOSK_TYPE,
31
+ MAINNET_RULES_PACKAGE_ADDRESS: () => MAINNET_RULES_PACKAGE_ADDRESS,
32
+ ROYALTY_RULE: () => ROYALTY_RULE,
33
+ TESTNET_RULES_PACKAGE_ADDRESS: () => TESTNET_RULES_PACKAGE_ADDRESS,
26
34
  TRANSFER_POLICY_CREATED_EVENT: () => TRANSFER_POLICY_CREATED_EVENT,
27
35
  TRANSFER_POLICY_MODULE: () => TRANSFER_POLICY_MODULE,
28
- TRANSFER_POLICY_RULES_PACKAGE_ADDRESS: () => TRANSFER_POLICY_RULES_PACKAGE_ADDRESS,
36
+ TRANSFER_POLICY_TYPE: () => TRANSFER_POLICY_TYPE,
29
37
  attachListingsAndPrices: () => attachListingsAndPrices,
30
38
  attachLockedItems: () => attachLockedItems,
31
39
  bcs: () => import_sui.bcs,
@@ -36,13 +44,18 @@ __export(src_exports, {
36
44
  createKiosk: () => createKiosk,
37
45
  createKioskAndShare: () => createKioskAndShare,
38
46
  createTransferPolicy: () => createTransferPolicy,
47
+ customEnvironment: () => customEnvironment,
39
48
  delist: () => delist,
40
49
  extractKioskData: () => extractKioskData,
41
50
  fetchKiosk: () => fetchKiosk,
51
+ getAllDynamicFields: () => getAllDynamicFields,
42
52
  getKioskObject: () => getKioskObject,
53
+ getOwnedKiosks: () => getOwnedKiosks,
54
+ getRulePackageAddress: () => getRulePackageAddress,
43
55
  getTypeWithoutPackageAddress: () => getTypeWithoutPackageAddress,
44
56
  list: () => list,
45
57
  lock: () => lock,
58
+ mainnetEnvironment: () => mainnetEnvironment,
46
59
  objArg: () => objArg,
47
60
  place: () => place,
48
61
  placeAndList: () => placeAndList,
@@ -50,9 +63,12 @@ __export(src_exports, {
50
63
  purchaseAndResolvePolicies: () => purchaseAndResolvePolicies,
51
64
  queryTransferPolicy: () => queryTransferPolicy,
52
65
  removeTransferPolicyRule: () => removeTransferPolicyRule,
66
+ resolveKioskLockRule: () => resolveKioskLockRule,
53
67
  resolveRoyaltyRule: () => resolveRoyaltyRule,
54
68
  returnValue: () => returnValue,
69
+ rulesPackageAddresses: () => rulesPackageAddresses,
55
70
  take: () => take,
71
+ testnetEnvironment: () => testnetEnvironment,
56
72
  withdrawFromKiosk: () => withdrawFromKiosk,
57
73
  withdrawFromPolicy: () => withdrawFromPolicy
58
74
  });
@@ -63,29 +79,65 @@ var import_sui2 = require("@mysten/sui.js");
63
79
 
64
80
  // src/bcs.ts
65
81
  var import_sui = require("@mysten/sui.js");
66
- import_sui.bcs.registerStructType("0x2::kiosk::Kiosk", {
82
+
83
+ // src/types/kiosk.ts
84
+ var KIOSK_MODULE = "0x2::kiosk";
85
+ var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
86
+ var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
87
+ var KIOSK_ITEM = `${KIOSK_MODULE}::Item`;
88
+ var KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;
89
+ var KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;
90
+ var KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;
91
+
92
+ // src/types/transfer-policy.ts
93
+ var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
94
+ var TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;
95
+ var TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;
96
+ var KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
97
+ var ROYALTY_RULE = "royalty_rule::Rule";
98
+
99
+ // src/types/env.ts
100
+ var testnetEnvironment = { env: "testnet" };
101
+ var mainnetEnvironment = { env: "mainnet" };
102
+ var customEnvironment = (address) => ({
103
+ env: "custom",
104
+ address
105
+ });
106
+
107
+ // src/bcs.ts
108
+ import_sui.bcs.registerStructType(KIOSK_TYPE, {
67
109
  id: "address",
68
110
  profits: "u64",
69
111
  owner: "address",
70
112
  itemCount: "u32",
71
113
  allowExtensions: "bool"
72
114
  });
73
- import_sui.bcs.registerStructType("0x2::kiosk::PurchaseCap", {
115
+ import_sui.bcs.registerStructType(KIOSK_PURCHASE_CAP, {
74
116
  id: "address",
75
117
  kioskId: "address",
76
118
  itemId: "address",
77
119
  minPrice: "u64"
78
120
  });
79
- import_sui.bcs.registerStructType("0x2::transfer_policy::TransferPolicyCreated", {
121
+ import_sui.bcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {
80
122
  id: "address"
81
123
  });
82
- import_sui.bcs.registerStructType("0x2::transfer_policy::TransferPolicy", {
124
+ import_sui.bcs.registerStructType(TRANSFER_POLICY_TYPE, {
83
125
  id: "address",
84
126
  balance: "u64",
85
127
  rules: ["vector", "string"]
86
128
  });
87
129
 
130
+ // src/constants.ts
131
+ var TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
132
+ var MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
133
+
88
134
  // src/utils.ts
135
+ var rulesPackageAddresses = {
136
+ mainnet: MAINNET_RULES_PACKAGE_ADDRESS,
137
+ testnet: TESTNET_RULES_PACKAGE_ADDRESS,
138
+ devnet: "",
139
+ custom: null
140
+ };
89
141
  function objArg(tx, arg) {
90
142
  if (typeof arg === "string") {
91
143
  return tx.object(arg);
@@ -109,7 +161,7 @@ async function getKioskObject(provider, id) {
109
161
  if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
110
162
  throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
111
163
  }
112
- return import_sui.bcs.de("0x2::kiosk::Kiosk", queryRes.data.bcs.bcsBytes, "base64");
164
+ return import_sui.bcs.de(KIOSK_TYPE, queryRes.data.bcs.bcsBytes, "base64");
113
165
  }
114
166
  function extractKioskData(data, listings, lockedItemIds) {
115
167
  return data.reduce(
@@ -141,10 +193,10 @@ function extractKioskData(data, listings, lockedItemIds) {
141
193
  { items: [], itemIds: [], listingIds: [], extensions: [] }
142
194
  );
143
195
  }
144
- var getTypeWithoutPackageAddress = (type) => {
196
+ function getTypeWithoutPackageAddress(type) {
145
197
  return type.split("::").slice(-2).join("::");
146
- };
147
- var attachListingsAndPrices = (kioskData, listings, listingObjects) => {
198
+ }
199
+ function attachListingsAndPrices(kioskData, listings, listingObjects) {
148
200
  const itemListings = listings.reduce(
149
201
  (acc, item, idx) => {
150
202
  acc[item.objectId] = { ...item };
@@ -161,8 +213,8 @@ var attachListingsAndPrices = (kioskData, listings, listingObjects) => {
161
213
  kioskData.items.map((item) => {
162
214
  item.listing = itemListings[item.objectId] || void 0;
163
215
  });
164
- };
165
- var attachLockedItems = (kioskData, lockedItemIds) => {
216
+ }
217
+ function attachLockedItems(kioskData, lockedItemIds) {
166
218
  const lockedStatuses = lockedItemIds.reduce(
167
219
  (acc, item) => {
168
220
  acc[item] = true;
@@ -173,11 +225,33 @@ var attachLockedItems = (kioskData, lockedItemIds) => {
173
225
  kioskData.items.map((item) => {
174
226
  item.isLocked = lockedStatuses[item.objectId] || false;
175
227
  });
176
- };
228
+ }
229
+ function getRulePackageAddress(environment) {
230
+ if (environment.env === "custom") {
231
+ if (!environment.address)
232
+ throw new Error("Please supply the custom package address for rules.");
233
+ return environment.address;
234
+ }
235
+ return rulesPackageAddresses[environment.env];
236
+ }
237
+ async function getAllDynamicFields(provider, parentId, pagination) {
238
+ let hasNextPage = true;
239
+ let cursor = void 0;
240
+ const data = [];
241
+ while (hasNextPage) {
242
+ const result = await provider.getDynamicFields({
243
+ parentId,
244
+ limit: pagination.limit || void 0,
245
+ cursor
246
+ });
247
+ data.push(...result.data);
248
+ hasNextPage = result.hasNextPage;
249
+ cursor = result.nextCursor;
250
+ }
251
+ return data;
252
+ }
177
253
 
178
254
  // src/tx/transfer-policy.ts
179
- var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
180
- var TRANSFER_POLICY_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
181
255
  function createTransferPolicy(tx, itemType, publisher) {
182
256
  let [transferPolicy, transferPolicyCap] = tx.moveCall({
183
257
  target: `${TRANSFER_POLICY_MODULE}::new`,
@@ -186,13 +260,13 @@ function createTransferPolicy(tx, itemType, publisher) {
186
260
  });
187
261
  tx.moveCall({
188
262
  target: `0x2::transfer::public_share_object`,
189
- typeArguments: [itemType],
263
+ typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],
190
264
  arguments: [transferPolicy]
191
265
  });
192
266
  return transferPolicyCap;
193
267
  }
194
268
  function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
195
- let amountArg = amount !== null ? tx.pure(amount, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
269
+ let amountArg = amount !== null ? tx.pure({ Some: amount }, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
196
270
  let [profits] = tx.moveCall({
197
271
  target: `${TRANSFER_POLICY_MODULE}::withdraw`,
198
272
  typeArguments: [itemType],
@@ -214,25 +288,30 @@ function removeTransferPolicyRule(tx, itemType, ruleType, configType, policy, po
214
288
  arguments: [objArg(tx, policy), policyCap]
215
289
  });
216
290
  }
217
- function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest) {
291
+ function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest, environment) {
218
292
  const policyObj = objArg(tx, policyId);
219
293
  const [amount] = tx.moveCall({
220
- target: `${TRANSFER_POLICY_RULES_PACKAGE_ADDRESS}::royalty_rule::fee_amount`,
294
+ target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,
221
295
  typeArguments: [itemType],
222
296
  arguments: [policyObj, objArg(tx, price)]
223
297
  });
224
298
  const feeCoin = tx.splitCoins(tx.gas, [amount]);
225
299
  tx.moveCall({
226
- target: `${TRANSFER_POLICY_RULES_PACKAGE_ADDRESS}::royalty_rule::pay`,
300
+ target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,
227
301
  typeArguments: [itemType],
228
302
  arguments: [policyObj, transferRequest, feeCoin]
229
303
  });
230
304
  }
305
+ function resolveKioskLockRule(tx, itemType, item, kiosk, kioskCap, policyId, transferRequest, environment) {
306
+ lock(tx, itemType, kiosk, kioskCap, policyId, item);
307
+ tx.moveCall({
308
+ target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,
309
+ typeArguments: [itemType],
310
+ arguments: [transferRequest, objArg(tx, kiosk)]
311
+ });
312
+ }
231
313
 
232
314
  // src/tx/kiosk.ts
233
- var KIOSK_MODULE = "0x2::kiosk";
234
- var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
235
- var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
236
315
  function createKiosk(tx) {
237
316
  let [kiosk, kioskOwnerCap] = tx.moveCall({
238
317
  target: `${KIOSK_MODULE}::new`
@@ -329,7 +408,12 @@ function purchase(tx, itemType, kiosk, itemId, payment) {
329
408
  return [item, transferRequest];
330
409
  }
331
410
  function withdrawFromKiosk(tx, kiosk, kioskCap, amount) {
332
- let amountArg = amount !== null ? tx.pure(amount, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
411
+ let amountArg = amount !== null ? tx.pure(
412
+ {
413
+ Some: amount
414
+ },
415
+ "Option<u64>"
416
+ ) : tx.pure({ None: true }, "Option<u64>");
333
417
  let [coin] = tx.moveCall({
334
418
  target: `${KIOSK_MODULE}::withdraw`,
335
419
  arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg]
@@ -379,27 +463,46 @@ function returnValue(tx, itemType, kiosk, item, promise) {
379
463
  arguments: [objArg(tx, kiosk), item, promise]
380
464
  });
381
465
  }
382
- function purchaseAndResolvePolicies(tx, itemType, listing, kioskId, itemId, policy) {
383
- if (!listing || listing?.price === void 0)
384
- return null;
385
- const coin = tx.splitCoins(tx.gas, [tx.pure(listing.price)]);
466
+ function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy, environment, extraParams) {
467
+ if (price === void 0 || typeof price !== "string")
468
+ throw new Error(`Price of the listing is not supplied.`);
469
+ const coin = tx.splitCoins(tx.gas, [tx.pure(price, "u64")]);
386
470
  const [purchasedItem, transferRequest] = purchase(
387
471
  tx,
388
472
  itemType,
389
- kioskId,
473
+ kiosk,
390
474
  itemId,
391
475
  coin
392
476
  );
477
+ let hasKioskLockRule = false;
393
478
  for (let rule of policy.rules) {
394
479
  const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);
395
480
  switch (ruleWithoutAddr) {
396
- case "royalty_rule::Rule":
481
+ case ROYALTY_RULE:
397
482
  resolveRoyaltyRule(
398
483
  tx,
399
484
  itemType,
400
- listing.price,
485
+ price,
486
+ policy.id,
487
+ transferRequest,
488
+ environment
489
+ );
490
+ break;
491
+ case KIOSK_LOCK_RULE:
492
+ if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)
493
+ throw new Error(
494
+ `This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`
495
+ );
496
+ hasKioskLockRule = true;
497
+ resolveKioskLockRule(
498
+ tx,
499
+ itemType,
500
+ purchasedItem,
501
+ extraParams.ownedKiosk,
502
+ extraParams.ownedKioskCap,
401
503
  policy.id,
402
- transferRequest
504
+ transferRequest,
505
+ environment
403
506
  );
404
507
  break;
405
508
  default:
@@ -407,15 +510,16 @@ function purchaseAndResolvePolicies(tx, itemType, listing, kioskId, itemId, poli
407
510
  }
408
511
  }
409
512
  confirmRequest(tx, itemType, policy.id, transferRequest);
410
- return purchasedItem;
513
+ return {
514
+ item: purchasedItem,
515
+ canTransfer: !hasKioskLockRule
516
+ };
411
517
  }
412
518
 
413
519
  // src/query/kiosk.ts
520
+ var import_sui3 = require("@mysten/sui.js");
414
521
  async function fetchKiosk(provider, kioskId, pagination, options) {
415
- const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({
416
- parentId: kioskId,
417
- ...pagination
418
- });
522
+ const data = await getAllDynamicFields(provider, kioskId, pagination);
419
523
  const listings = [];
420
524
  const lockedItemIds = [];
421
525
  const kioskData = extractKioskData(data, listings, lockedItemIds);
@@ -434,13 +538,44 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
434
538
  attachLockedItems(kioskData, lockedItemIds);
435
539
  return {
436
540
  data: kioskData,
541
+ nextCursor: null,
542
+ hasNextPage: false
543
+ };
544
+ }
545
+ async function getOwnedKiosks(provider, address, options) {
546
+ if (!(0, import_sui3.isValidSuiAddress)(address))
547
+ return {
548
+ nextCursor: null,
549
+ hasNextPage: false,
550
+ kioskOwnerCaps: [],
551
+ kioskIds: []
552
+ };
553
+ const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({
554
+ owner: address,
555
+ filter: { StructType: KIOSK_OWNER_CAP },
556
+ options: {
557
+ showContent: true
558
+ },
559
+ ...options?.pagination || {}
560
+ });
561
+ const kioskIdList = data?.map(
562
+ (x) => (0, import_sui3.getObjectFields)(x)?.for
563
+ );
564
+ const filteredData = data.filter((x) => "data" in x).map((x) => x.data);
565
+ return {
437
566
  nextCursor,
438
- hasNextPage
567
+ hasNextPage,
568
+ kioskOwnerCaps: filteredData.map((x, idx) => ({
569
+ digest: x.digest,
570
+ version: x.version,
571
+ objectId: x.objectId,
572
+ kioskId: kioskIdList[idx]
573
+ })),
574
+ kioskIds: kioskIdList
439
575
  };
440
576
  }
441
577
 
442
578
  // src/query/transfer-policy.ts
443
- var TRANSFER_POLICY_CREATED_EVENT = `0x2::transfer_policy::TransferPolicyCreated`;
444
579
  async function queryTransferPolicy(provider, type) {
445
580
  const { data } = await provider.queryEvents({
446
581
  query: {
@@ -458,14 +593,10 @@ async function queryTransferPolicy(provider, type) {
458
593
  `Invalid policy: ${policy?.objectId}, expected object, got package`
459
594
  );
460
595
  }
461
- let parsed = import_sui.bcs.de(
462
- "0x2::transfer_policy::TransferPolicy",
463
- policy.bcs.bcsBytes,
464
- "base64"
465
- );
596
+ let parsed = import_sui.bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, "base64");
466
597
  return {
467
598
  id: policy?.objectId,
468
- type: `0x2::transfer_policy::TransferPolicy<${type}>`,
599
+ type: `${TRANSFER_POLICY_TYPE}<${type}>`,
469
600
  owner: policy?.owner,
470
601
  rules: parsed.rules,
471
602
  balance: parsed.balance
@@ -474,12 +605,20 @@ async function queryTransferPolicy(provider, type) {
474
605
  }
475
606
  // Annotate the CommonJS export names for ESM import in node:
476
607
  0 && (module.exports = {
608
+ KIOSK_ITEM,
609
+ KIOSK_LISTING,
610
+ KIOSK_LOCK,
611
+ KIOSK_LOCK_RULE,
477
612
  KIOSK_MODULE,
478
613
  KIOSK_OWNER_CAP,
614
+ KIOSK_PURCHASE_CAP,
479
615
  KIOSK_TYPE,
616
+ MAINNET_RULES_PACKAGE_ADDRESS,
617
+ ROYALTY_RULE,
618
+ TESTNET_RULES_PACKAGE_ADDRESS,
480
619
  TRANSFER_POLICY_CREATED_EVENT,
481
620
  TRANSFER_POLICY_MODULE,
482
- TRANSFER_POLICY_RULES_PACKAGE_ADDRESS,
621
+ TRANSFER_POLICY_TYPE,
483
622
  attachListingsAndPrices,
484
623
  attachLockedItems,
485
624
  bcs,
@@ -490,13 +629,18 @@ async function queryTransferPolicy(provider, type) {
490
629
  createKiosk,
491
630
  createKioskAndShare,
492
631
  createTransferPolicy,
632
+ customEnvironment,
493
633
  delist,
494
634
  extractKioskData,
495
635
  fetchKiosk,
636
+ getAllDynamicFields,
496
637
  getKioskObject,
638
+ getOwnedKiosks,
639
+ getRulePackageAddress,
497
640
  getTypeWithoutPackageAddress,
498
641
  list,
499
642
  lock,
643
+ mainnetEnvironment,
500
644
  objArg,
501
645
  place,
502
646
  placeAndList,
@@ -504,9 +648,12 @@ async function queryTransferPolicy(provider, type) {
504
648
  purchaseAndResolvePolicies,
505
649
  queryTransferPolicy,
506
650
  removeTransferPolicyRule,
651
+ resolveKioskLockRule,
507
652
  resolveRoyaltyRule,
508
653
  returnValue,
654
+ rulesPackageAddresses,
509
655
  take,
656
+ testnetEnvironment,
510
657
  withdrawFromKiosk,
511
658
  withdrawFromPolicy
512
659
  });