@mysten/kiosk 0.4.0 → 0.5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @mysten/kiosk
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 210bfac58: Adds support for attaching royalty rule and kiosk lock rule to a transfer policy.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [a503cad34]
12
+ - Updated dependencies [8281e3d25]
13
+ - @mysten/sui.js@0.40.0
14
+
15
+ ## 0.4.1
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [47ea5ec7c]
20
+ - @mysten/sui.js@0.39.0
21
+
3
22
  ## 0.4.0
4
23
 
5
24
  ### Minor Changes
package/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Kiosk SDK
2
2
 
3
- > **This package is still in active development. Use at your own risk**. Currently, the only
4
- > supported environment is **Sui Testnet**.
3
+ > **This package is still in active development. Use at your own risk**.
5
4
 
6
5
  This Kiosk SDK library provides different utilities to interact/create/manage a
7
6
  [Kiosk](https://github.com/MystenLabs/sui/tree/main/kiosk).
@@ -21,7 +20,29 @@ You can also use your preferred package manager, such as yarn or pnpm.
21
20
  Here are some indicative examples on how to use the kiosk SDK.
22
21
 
23
22
  <details>
24
- <summary>Getting the listings & items by the kiosk's id</summary>
23
+ <summary>Find the kiosks owned by an address</summary>
24
+
25
+ ```typescript
26
+ import { getOwnedKiosks } from '@mysten/kiosk';
27
+ import { SuiClient } from '@mysten/sui.js/client';
28
+
29
+ const client = new SuiClient(
30
+ url: 'https://fullnode.testnet.sui.io:443',
31
+ );
32
+
33
+
34
+ // You could use these to fetch the contents for each kiosk, or use the `kioskOwnerCap` data for other actions.
35
+ const getUserKiosks = async () => {
36
+ const address = `0xAddress`;
37
+ const { data } = await getOwnedKiosks(client, address);
38
+ console.log(data); // kioskOwnerCaps:[], kioskIds: []
39
+ };
40
+ ```
41
+
42
+ </details>
43
+
44
+ <details>
45
+ <summary>Getting the listings & items by the kiosk's ID</summary>
25
46
 
26
47
  ```typescript
27
48
  import { fetchKiosk } from '@mysten/kiosk';
@@ -183,3 +204,90 @@ const withdraw = async () => {
183
204
  ```
184
205
 
185
206
  </details>
207
+
208
+ <details>
209
+
210
+ <summary>Create a Transfer Policy for a Type</summary>
211
+
212
+ You can create a TransferPolicy only for packages for which you own the `publisher` object.
213
+
214
+ As a best practice, you should use a single Transfer policy per type (T). If you use more than one
215
+ policy for a type, and the rules for each differ, anyone that meets the conditions for any of the
216
+ attached policies can purchase an asset from a kiosk. You can't specify which policy applies to a
217
+ specific asset for the type when there is more than one policy attached. When someone meets the
218
+ conditions that are easiest to meet, they are allowed to purchase and transfer the asset.
219
+
220
+ Before you create a transfer policy, you can use the `queryTransferpolicy` function to check the
221
+ transfer policy associated with a type. This is similar to the `purchaseAndResolvePolicies` example
222
+ above.
223
+
224
+ ```typescript
225
+ import { createTransferPolicy } from '@mysten/kiosk';
226
+ import { TransactionBlock } from '@mysten/sui.js';
227
+
228
+ const createPolicyForType = async () => {
229
+ const type = 'SomePackageId::type::MyType'; // the Type for which we're creating a Transfer Policy.
230
+ const publisher = 'publisherObjectId'; // the publisher object id that you got when claiming the package that defines the Type.
231
+ const address = 'AddressToReceiveTheCap';
232
+
233
+ const tx = new TransactionBlock();
234
+ // create transfer policy
235
+ let transferPolicyCap = createTransferPolicy(tx, type, publisher);
236
+ // transfer the Cap to the address.
237
+ tx.transferObjects([transferPolicyCap], tx.pure(address, 'address'));
238
+
239
+ // ... continue to sign and execute the transaction
240
+ // ...
241
+ };
242
+ ```
243
+
244
+ </details>
245
+
246
+ <details>
247
+
248
+ <summary>Attach Royalty and Lock rules to a Transfer policy</summary>
249
+
250
+ ```typescript
251
+ import {
252
+ createTransferPolicy,
253
+ attachKioskLockRule,
254
+ attachRoyaltyRule,
255
+ testnetEnvironment,
256
+ percentageToBasisPoints,
257
+ } from '@mysten/kiosk';
258
+ import { TransactionBlock } from '@mysten/sui.js';
259
+
260
+ // Attaches a royalty rule of 1% or 0.1 SUI (whichever is bigger)
261
+ // as well as a kiosk lock, making the objects trade-able only from/to a kiosk.
262
+ const attachStrongRoyalties = async () => {
263
+ const type = 'SomePackageId::type::MyType'; // the Type for which we're attaching rules.
264
+ const policyId = 'policyObjectId'; // the transfer Policy ID that was created for that Type.
265
+ const transferPolicyCap = 'transferPolicyCapId'; // the transferPolicyCap for that policy.
266
+
267
+ // royalties configuration.
268
+ const percentage = 2.55; // 2.55%
269
+ const minAmount = 100_000_000; // 0.1 SUI.
270
+
271
+ // the environment on which we're referecing the rules package.
272
+ // use `mainnetEnvironment` for mainnet.
273
+ const enviroment = testnetEnvironment;
274
+
275
+ const tx = new TransactionBlock();
276
+
277
+ attachKioskLockRule(tx, type, policyId, policyCapId, enviroment);
278
+ attachRoyaltyRule(
279
+ tx,
280
+ type,
281
+ policyId,
282
+ policyCapId,
283
+ percentageToBasisPoints(percentage),
284
+ minAmount,
285
+ enviroment,
286
+ );
287
+
288
+ // ... continue to sign and execute the transaction
289
+ // ...
290
+ };
291
+ ```
292
+
293
+ </details>
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './tx/kiosk';
2
2
  export * from './tx/transfer-policy';
3
+ export * from './tx/rules';
3
4
  export * from './query/kiosk';
4
5
  export * from './bcs';
5
6
  export * from './utils';
package/dist/index.js CHANGED
@@ -34,8 +34,10 @@ __export(src_exports, {
34
34
  TRANSFER_POLICY_CREATED_EVENT: () => TRANSFER_POLICY_CREATED_EVENT,
35
35
  TRANSFER_POLICY_MODULE: () => TRANSFER_POLICY_MODULE,
36
36
  TRANSFER_POLICY_TYPE: () => TRANSFER_POLICY_TYPE,
37
+ attachKioskLockRule: () => attachKioskLockRule,
37
38
  attachListingsAndPrices: () => attachListingsAndPrices,
38
39
  attachLockedItems: () => attachLockedItems,
40
+ attachRoyaltyRule: () => attachRoyaltyRule,
39
41
  bcs: () => import_bcs.bcs,
40
42
  borrow: () => borrow,
41
43
  borrowMut: () => borrowMut,
@@ -57,6 +59,7 @@ __export(src_exports, {
57
59
  lock: () => lock,
58
60
  mainnetEnvironment: () => mainnetEnvironment,
59
61
  objArg: () => objArg,
62
+ percentageToBasisPoints: () => percentageToBasisPoints,
60
63
  place: () => place,
61
64
  placeAndList: () => placeAndList,
62
65
  purchase: () => purchase,
@@ -248,6 +251,11 @@ async function getAllDynamicFields(client, parentId, pagination) {
248
251
  }
249
252
  return data;
250
253
  }
254
+ function percentageToBasisPoints(percentage) {
255
+ if (percentage < 0 || percentage > 100)
256
+ throw new Error("Percentage needs to be in the [0,100] range.");
257
+ return Math.ceil(percentage * 100);
258
+ }
251
259
 
252
260
  // src/tx/transfer-policy.ts
253
261
  function createTransferPolicy(tx, itemType, publisher) {
@@ -467,8 +475,31 @@ function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy,
467
475
  };
468
476
  }
469
477
 
478
+ // src/tx/rules.ts
479
+ function attachRoyaltyRule(tx, type, policy, policyCap, percentageBps, minAmount, environment) {
480
+ if (Number(percentageBps) < 0 || Number(percentageBps) > 1e4)
481
+ throw new Error("Invalid basis point percentage. Use a value between [0,10000].");
482
+ tx.moveCall({
483
+ target: `${getRulePackageAddress(environment)}::royalty_rule::add`,
484
+ typeArguments: [type],
485
+ arguments: [
486
+ objArg(tx, policy),
487
+ objArg(tx, policyCap),
488
+ tx.pure(percentageBps, "u16"),
489
+ tx.pure(minAmount, "u64")
490
+ ]
491
+ });
492
+ }
493
+ function attachKioskLockRule(tx, type, policy, policyCap, environment) {
494
+ tx.moveCall({
495
+ target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::add`,
496
+ typeArguments: [type],
497
+ arguments: [objArg(tx, policy), objArg(tx, policyCap)]
498
+ });
499
+ }
500
+
470
501
  // src/query/kiosk.ts
471
- var import_utils3 = require("@mysten/sui.js/utils");
502
+ var import_utils4 = require("@mysten/sui.js/utils");
472
503
  async function fetchKiosk(client, kioskId, pagination, options) {
473
504
  const data = await getAllDynamicFields(client, kioskId, pagination);
474
505
  const listings = [];
@@ -494,7 +525,7 @@ async function fetchKiosk(client, kioskId, pagination, options) {
494
525
  };
495
526
  }
496
527
  async function getOwnedKiosks(client, address, options) {
497
- if (!(0, import_utils3.isValidSuiAddress)(address))
528
+ if (!(0, import_utils4.isValidSuiAddress)(address))
498
529
  return {
499
530
  nextCursor: null,
500
531
  hasNextPage: false,
@@ -569,8 +600,10 @@ async function queryTransferPolicy(client, type) {
569
600
  TRANSFER_POLICY_CREATED_EVENT,
570
601
  TRANSFER_POLICY_MODULE,
571
602
  TRANSFER_POLICY_TYPE,
603
+ attachKioskLockRule,
572
604
  attachListingsAndPrices,
573
605
  attachLockedItems,
606
+ attachRoyaltyRule,
574
607
  bcs,
575
608
  borrow,
576
609
  borrowMut,
@@ -592,6 +625,7 @@ async function queryTransferPolicy(client, type) {
592
625
  lock,
593
626
  mainnetEnvironment,
594
627
  objArg,
628
+ percentageToBasisPoints,
595
629
  place,
596
630
  placeAndList,
597
631
  purchase,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.ts","../src/utils.ts","../src/tx/transfer-policy.ts","../src/tx/kiosk.ts","../src/query/kiosk.ts","../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './tx/kiosk';\nexport * from './tx/transfer-policy';\nexport * from './query/kiosk';\nexport * from './bcs';\nexport * from './utils';\nexport * from './query/transfer-policy';\nexport * from './types';\nexport * from './constants';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js/bcs';\nimport {\n\tKIOSK_PURCHASE_CAP,\n\tKIOSK_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n\tid: 'address',\n\tprofits: 'u64',\n\towner: 'address',\n\titemCount: 'u32',\n\tallowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n\tid: 'address',\n\tkioskId: 'address',\n\titemId: 'address',\n\tminPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n\tid: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n\tid: 'address',\n\tbalance: 'u64',\n\trules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PaginatedObjectsResponse } from '@mysten/sui.js/client';\nimport { TransactionArgument } from '@mysten/sui.js/transactions';\nimport { ObjectArgument } from '.';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = '0x2::kiosk';\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\twithKioskFields?: boolean;\n\twithListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js/client';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;\n\n/** The Transfer Policy Type */\nexport const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;\n\n/** The Kiosk Lock Rule */\nexport const KIOSK_LOCK_RULE = 'kiosk_lock_rule::Rule';\n\n/** The Royalty rule */\nexport const ROYALTY_RULE = 'royalty_rule::Rule';\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n\tid: string;\n\ttype: string;\n\tbalance: string;\n\trules: string[];\n\towner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n\tid: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support environments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: string };\n\n/** A default Testnet Environment object */\nexport const testnetEnvironment: RulesEnvironmentParam = { env: 'testnet' };\n\n/** A default Mainnet Environment object */\nexport const mainnetEnvironment: RulesEnvironmentParam = { env: 'mainnet' };\n\n/** A helper to easily export a custom environment */\nexport const customEnvironment = (address: string): RulesEnvironmentParam => ({\n\tenv: 'custom',\n\taddress,\n});\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** The Transer Policy Rules package address on testnet */\nexport const TESTNET_RULES_PACKAGE_ADDRESS =\n\t'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n\t'0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SharedObjectRef } from '@mysten/sui.js/bcs';\nimport { SuiObjectRef, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { type DynamicFieldInfo } from '@mysten/sui.js/client';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, KioskData, KioskListing, RulesEnvironmentParam } from './types';\nimport { MAINNET_RULES_PACKAGE_ADDRESS, TESTNET_RULES_PACKAGE_ADDRESS } from './constants';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n\tmainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n\ttestnet: TESTNET_RULES_PACKAGE_ADDRESS,\n\tdevnet: '',\n\tcustom: null,\n};\n\n/**\n * Convert any valid input into a TransactionArgument.\n *\n * @param tx The transaction to use for creating the argument.\n * @param arg The argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function objArg(\n\ttx: TransactionBlock,\n\targ: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n\tif (typeof arg === 'string') {\n\t\treturn tx.object(arg);\n\t}\n\n\tif ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n\t\treturn tx.objectRef(arg);\n\t}\n\n\tif ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n\t\treturn tx.sharedObjectRef(arg);\n\t}\n\n\tif ('kind' in arg) {\n\t\treturn arg;\n\t}\n\n\tthrow new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(client: SuiClient, id: string): Promise<Kiosk> {\n\tconst queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n\tif (!queryRes || queryRes.error || !queryRes.data) {\n\t\tthrow new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n\t}\n\n\tif (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n\t\tthrow new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n\t}\n\n\treturn bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n\tdata: DynamicFieldInfo[],\n\tlistings: KioskListing[],\n\tlockedItemIds: string[],\n): KioskData {\n\treturn data.reduce<KioskData>(\n\t\t(acc: KioskData, val: DynamicFieldInfo) => {\n\t\t\tconst type = getTypeWithoutPackageAddress(val.name.type);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'kiosk::Item':\n\t\t\t\t\tacc.itemIds.push(val.objectId);\n\t\t\t\t\tacc.items.push({\n\t\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\t\ttype: val.objectType,\n\t\t\t\t\t\tisLocked: false,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Listing':\n\t\t\t\t\tacc.listingIds.push(val.objectId);\n\t\t\t\t\tlistings.push({\n\t\t\t\t\t\tobjectId: (val.name.value as { id: string }).id,\n\t\t\t\t\t\tlistingId: val.objectId,\n\t\t\t\t\t\tisExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Lock':\n\t\t\t\t\tlockedItemIds?.push((val.name.value as { id: string }).id);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{ items: [], itemIds: [], listingIds: [], extensions: [] },\n\t);\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n\treturn type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n\tkioskData: KioskData,\n\tlistings: KioskListing[],\n\tlistingObjects: SuiObjectResponse[],\n) {\n\t// map item listings as {item_id: KioskListing}\n\t// for easier mapping on the nex\n\tconst itemListings = listings.reduce<Record<string, KioskListing>>(\n\t\t(acc: Record<string, KioskListing>, item, idx) => {\n\t\t\tacc[item.objectId] = { ...item };\n\n\t\t\t// return in case we don't have any listing objects.\n\t\t\t// that's the case when we don't have the `listingPrices` included.\n\t\t\tif (listingObjects.length === 0) return acc;\n\n\t\t\tconst content = listingObjects[idx].data?.content;\n\t\t\tconst data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n\t\t\tif (!data) return acc;\n\n\t\t\tacc[item.objectId].price = (data as { value: string }).value;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.listing = itemListings[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n\t// map lock status in an array of type { item_id: true }\n\tconst lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n\t\t(acc: Record<string, boolean>, item: string) => {\n\t\t\tacc[item] = true;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\t// parse lockedItemIds and attach their locked status.\n\tkioskData.items.forEach((item) => {\n\t\titem.isLocked = lockedStatuses[item.objectId] || false;\n\t});\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(environment: RulesEnvironmentParam): string {\n\t// if we have custom environment, we return it.\n\tif (environment.env === 'custom') {\n\t\tif (!environment.address)\n\t\t\tthrow new Error('Please supply the custom package address for rules.');\n\t\treturn environment.address;\n\t}\n\treturn rulesPackageAddresses[environment.env];\n}\n\n/**\n * A helper to fetch all DF pages.\n * We need that to fetch the kiosk DFs consistently, until we have\n * RPC calls that allow filtering of Type / batch fetching of spec\n */\nexport async function getAllDynamicFields(\n\tclient: SuiClient,\n\tparentId: string,\n\tpagination: PaginationArguments<string>,\n) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: DynamicFieldInfo[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getDynamicFields({\n\t\t\tparentId,\n\t\t\tlimit: pagination.limit || undefined,\n\t\t\tcursor,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn data;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n\tObjectArgument,\n\tRulesEnvironmentParam,\n\tTRANSFER_POLICY_MODULE,\n\tTRANSFER_POLICY_TYPE,\n} from '../types';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionArgument {\n\tlet [transferPolicy, transferPolicyCap] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::new`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, publisher)],\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n\t\targuments: [transferPolicy],\n\t});\n\n\treturn transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure({ Some: amount }, 'Option<u64>')\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [profits] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::withdraw`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n\t});\n\n\treturn profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\trequest: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), request],\n\t});\n}\n\n/**\n * Calls the `transfer_policy::remove_rule` function to remove a Rule from the transfer policy's ruleset.\n */\nexport function removeTransferPolicyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\truleType: string,\n\tconfigType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n\t\ttypeArguments: [itemType, ruleType, configType],\n\t\targuments: [objArg(tx, policy), policyCap],\n\t});\n}\n\n/**\n * Calculates the amount to be paid for the royalty rule to be resolved,\n * splits the coin to pass the exact amount,\n * then calls the `royalty_rule::pay` function to resolve the royalty rule.\n */\nexport function resolveRoyaltyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tconst policyObj = objArg(tx, policyId);\n\t// calculates the amount\n\tconst [amount] = tx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, objArg(tx, price)],\n\t});\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, transferRequest, feeCoin],\n\t});\n}\n\n/**\n * Locks the item in the supplied kiosk and\n * proves to the `kiosk_lock` rule that the item was indeed locked,\n * by calling the `kiosk_lock_rule::prove` function to resolve it.\n */\nexport function resolveKioskLockRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\titem: TransactionArgument,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\t// lock item in the kiosk.\n\tlock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [transferRequest, objArg(tx, kiosk)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport { confirmRequest, resolveKioskLockRule, resolveRoyaltyRule } from './transfer-policy';\nimport {\n\tKIOSK_LOCK_RULE,\n\tKIOSK_MODULE,\n\tKIOSK_TYPE,\n\tObjectArgument,\n\tPurchaseAndResolvePoliciesResponse,\n\tPurchaseOptionalParams,\n\tROYALTY_RULE,\n\tRulesEnvironmentParam,\n\tTransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(tx: TransactionBlock): [TransactionArgument, TransactionArgument] {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\treturn [kiosk, kioskOwnerCap];\n}\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: TransactionBlock): TransactionArgument {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [KIOSK_TYPE],\n\t\targuments: [kiosk],\n\t});\n\n\treturn kioskOwnerCap;\n}\n\n/**\n * Call the `kiosk::place<T>(Kiosk, KioskOwnerCap, Item)` function.\n * Place an item to the Kiosk.\n */\nexport function place(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::lock<T>(Kiosk, KioskOwnerCap, TransferPolicy, Item)`\n * function. Lock an item in the Kiosk.\n *\n * Unlike `place` this function requires a `TransferPolicy` to exist\n * and be passed in. This is done to make sure the item does not get\n * locked without an option to take it out.\n */\nexport function lock(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicy: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::lock`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, policy), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::take<T>(Kiosk, KioskOwnerCap, ID)` function.\n * Take an item from the Kiosk.\n */\nexport function take(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::take`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function list(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [\n\t\t\tobjArg(tx, kiosk),\n\t\t\tobjArg(tx, kioskCap),\n\t\t\ttx.pure(itemId, 'address'),\n\t\t\ttx.pure(price, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function delist(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::delist`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n}\n\n/**\n * Call the `kiosk::place_and_list<T>(Kiosk, KioskOwnerCap, Item, u64)` function.\n * Place an item to the Kiosk and list it for sale.\n */\nexport function placeAndList(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place_and_list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item), tx.pure(price, 'u64')],\n\t});\n}\n\n/**\n * Call the `kiosk::purchase<T>(Kiosk, ID, Coin<SUI>)` function and receive an Item and\n * a TransferRequest which needs to be dealt with (via a matching TransferPolicy).\n */\nexport function purchase(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpayment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, transferRequest] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::purchase`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), tx.pure(itemId, 'address'), objArg(tx, payment)],\n\t});\n\n\treturn [item, transferRequest];\n}\n\n/**\n * Call the `kiosk::withdraw(Kiosk, KioskOwnerCap, Option<u64>)` function and receive a Coin<SUI>.\n * If the amount is null, then the entire balance will be withdrawn.\n */\nexport function withdrawFromKiosk(\n\ttx: TransactionBlock,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure(\n\t\t\t\t\t{\n\t\t\t\t\t\tSome: amount,\n\t\t\t\t\t},\n\t\t\t\t\t'Option<u64>',\n\t\t\t )\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [coin] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::withdraw`,\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n\t});\n\n\treturn coin;\n}\n\n/**\n * Call the `kiosk::borrow<T>(Kiosk, KioskOwnerCap, ID): &T` function.\n * Immutably borrow an item from the Kiosk.\n */\nexport function borrow(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_mut<T>(Kiosk, KioskOwnerCap, ID): &mut T` function.\n * Mutably borrow an item from the Kiosk.\n */\nexport function borrowMut(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_mut`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_value<T>(Kiosk, KioskOwnerCap, ID): T` function.\n * Immutably borrow an item from the Kiosk and return it in the end.\n *\n * Requires calling `returnValue` to return the item.\n */\nexport function borrowValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, promise] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn [item, promise];\n}\n\n/**\n * Call the `kiosk::return_value<T>(Kiosk, Item, Borrow)` function.\n * Return an item to the Kiosk after it was `borrowValue`-d.\n */\nexport function returnValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titem: TransactionArgument,\n\tpromise: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::return_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), item, promise],\n\t});\n}\n\n/**\n * Completes the full purchase flow that includes:\n * 1. Purchasing the item.\n * 2. Resolving all the transfer policies (if any).\n * 3. Returns the item and whether the user can transfer it or not.\n *\n * If the item can be transferred, there's an extra transaction required by the user\n * to transfer it to an address or place it in their kiosk.\n */\nexport function purchaseAndResolvePolicies(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpolicy: TransferPolicy,\n\tenvironment: RulesEnvironmentParam,\n\textraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n\t// if we don't pass the listing or the listing doens't have a price, return.\n\tif (price === undefined || typeof price !== 'string')\n\t\tthrow new Error(`Price of the listing is not supplied.`);\n\n\t// Split the coin for the amount of the listing.\n\tconst coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n\t// initialize the purchase `kiosk::purchase`\n\tconst [purchasedItem, transferRequest] = purchase(tx, itemType, kiosk, itemId, coin);\n\n\t// Start resolving rules.\n\t// Right now we support `kiosk_lock_rule` and `royalty_rule`.\n\t// They can also be supplied in parallel (supports combination).\n\tlet hasKioskLockRule = false;\n\n\tfor (let rule of policy.rules) {\n\t\tconst ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n\t\tswitch (ruleWithoutAddr) {\n\t\t\tcase ROYALTY_RULE:\n\t\t\t\tresolveRoyaltyRule(tx, itemType, price, policy.id, transferRequest, environment);\n\t\t\t\tbreak;\n\t\t\tcase KIOSK_LOCK_RULE:\n\t\t\t\tif (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n\t\t\t\t\t);\n\t\t\t\thasKioskLockRule = true;\n\t\t\t\tresolveKioskLockRule(\n\t\t\t\t\ttx,\n\t\t\t\t\titemType,\n\t\t\t\t\tpurchasedItem,\n\t\t\t\t\textraParams.ownedKiosk,\n\t\t\t\t\textraParams.ownedKioskCap,\n\t\t\t\t\tpolicy.id,\n\t\t\t\t\ttransferRequest,\n\t\t\t\t\tenvironment,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// confirm the Transfer Policy request.\n\tconfirmRequest(tx, itemType, policy.id, transferRequest);\n\n\treturn {\n\t\titem: purchasedItem,\n\t\tcanTransfer: !hasKioskLockRule,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiObjectData, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { isValidSuiAddress } from '@mysten/sui.js/utils';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetKioskObject,\n} from '../utils';\nimport {\n\tFetchKioskOptions,\n\tKIOSK_OWNER_CAP,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\nexport async function fetchKiosk(\n\tclient: SuiClient,\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);\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] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices\n\t\t\t? client.multiGetObjects({\n\t\t\t\t\tids: kioskData.listingIds,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tshowContent: true,\n\t\t\t\t\t},\n\t\t\t })\n\t\t\t: 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\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 */\nexport async function getOwnedKiosks(\n\tclient: SuiClient,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t},\n): Promise<OwnedKiosks> {\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\n\t// fetch owned kiosk caps, paginated.\n\tconst { data, hasNextPage, nextCursor } = await client.getOwnedObjects({\n\t\towner: address,\n\t\tfilter: { StructType: KIOSK_OWNER_CAP },\n\t\toptions: {\n\t\t\tshowContent: true,\n\t\t},\n\t\t...(options?.pagination || {}),\n\t});\n\n\t// get kioskIds from the OwnerCaps.\n\tconst kioskIdList = data?.map((x: SuiObjectResponse) => {\n\t\tconst fields = x.data?.content?.dataType === 'moveObject' ? x.data.content.fields : null;\n\t\treturn (fields as { for: string })?.for;\n\t});\n\n\t// clean up data that might have an error in them.\n\t// only return valid objects.\n\tconst filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];\n\n\treturn {\n\t\tnextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: filteredData.map((x, idx) => ({\n\t\t\tdigest: x.digest,\n\t\t\tversion: x.version,\n\t\t\tobjectId: x.objectId,\n\t\t\tkioskId: kioskIdList[idx],\n\t\t})),\n\t\tkioskIds: kioskIdList,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiClient } from '@mysten/sui.js/client';\nimport { bcs } from '../bcs';\nimport { TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE, TransferPolicy } from '../types';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The seach 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 * @param provider\n * @param type\n */\nexport async function queryTransferPolicy(\n\tclient: SuiClient,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\t// console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\tconst { data } = await client.queryEvents({\n\t\tquery: {\n\t\t\tMoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n\t\t},\n\t});\n\n\tconst search = data.map((event) => event.parsedJson as { id: string });\n\tconst policies = await client.multiGetObjects({\n\t\tids: search.map((policy) => policy.id),\n\t\toptions: { showBcs: true, showOwner: true },\n\t});\n\n\treturn policies\n\t\t.filter((policy) => !!policy && 'data' in policy)\n\t\t.map(({ data: policy }) => {\n\t\t\t// should never happen; policies are objects and fetched via an event.\n\t\t\t// policies are filtered for null and undefined above.\n\t\t\tif (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n\t\t\t\tthrow new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);\n\t\t\t}\n\n\t\t\tlet parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n\t\t\treturn {\n\t\t\t\tid: policy?.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: policy?.owner!,\n\t\t\t\trules: parsed.rules,\n\t\t\t\tbalance: parsed.balance,\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n"],"mappings":"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","names":["import_utils"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.ts","../src/utils.ts","../src/tx/transfer-policy.ts","../src/tx/kiosk.ts","../src/tx/rules.ts","../src/query/kiosk.ts","../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './tx/kiosk';\nexport * from './tx/transfer-policy';\nexport * from './tx/rules';\nexport * from './query/kiosk';\nexport * from './bcs';\nexport * from './utils';\nexport * from './query/transfer-policy';\nexport * from './types';\nexport * from './constants';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js/bcs';\nimport {\n\tKIOSK_PURCHASE_CAP,\n\tKIOSK_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n\tid: 'address',\n\tprofits: 'u64',\n\towner: 'address',\n\titemCount: 'u32',\n\tallowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n\tid: 'address',\n\tkioskId: 'address',\n\titemId: 'address',\n\tminPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n\tid: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n\tid: 'address',\n\tbalance: 'u64',\n\trules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PaginatedObjectsResponse } from '@mysten/sui.js/client';\nimport { TransactionArgument } from '@mysten/sui.js/transactions';\nimport { ObjectArgument } from '.';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = '0x2::kiosk';\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\twithKioskFields?: boolean;\n\twithListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js/client';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;\n\n/** The Transfer Policy Type */\nexport const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;\n\n/** The Kiosk Lock Rule */\nexport const KIOSK_LOCK_RULE = 'kiosk_lock_rule::Rule';\n\n/** The Royalty rule */\nexport const ROYALTY_RULE = 'royalty_rule::Rule';\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n\tid: string;\n\ttype: string;\n\tbalance: string;\n\trules: string[];\n\towner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n\tid: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support environments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: string };\n\n/** A default Testnet Environment object */\nexport const testnetEnvironment: RulesEnvironmentParam = { env: 'testnet' };\n\n/** A default Mainnet Environment object */\nexport const mainnetEnvironment: RulesEnvironmentParam = { env: 'mainnet' };\n\n/** A helper to easily export a custom environment */\nexport const customEnvironment = (address: string): RulesEnvironmentParam => ({\n\tenv: 'custom',\n\taddress,\n});\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** The Transer Policy Rules package address on testnet */\nexport const TESTNET_RULES_PACKAGE_ADDRESS =\n\t'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n\t'0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SharedObjectRef } from '@mysten/sui.js/bcs';\nimport { SuiObjectRef, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { type DynamicFieldInfo } from '@mysten/sui.js/client';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, KioskData, KioskListing, RulesEnvironmentParam } from './types';\nimport { MAINNET_RULES_PACKAGE_ADDRESS, TESTNET_RULES_PACKAGE_ADDRESS } from './constants';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n\tmainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n\ttestnet: TESTNET_RULES_PACKAGE_ADDRESS,\n\tdevnet: '',\n\tcustom: null,\n};\n\n/**\n * Convert any valid input into a TransactionArgument.\n *\n * @param tx The transaction to use for creating the argument.\n * @param arg The argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function objArg(\n\ttx: TransactionBlock,\n\targ: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n\tif (typeof arg === 'string') {\n\t\treturn tx.object(arg);\n\t}\n\n\tif ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n\t\treturn tx.objectRef(arg);\n\t}\n\n\tif ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n\t\treturn tx.sharedObjectRef(arg);\n\t}\n\n\tif ('kind' in arg) {\n\t\treturn arg;\n\t}\n\n\tthrow new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(client: SuiClient, id: string): Promise<Kiosk> {\n\tconst queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n\tif (!queryRes || queryRes.error || !queryRes.data) {\n\t\tthrow new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n\t}\n\n\tif (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n\t\tthrow new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n\t}\n\n\treturn bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n\tdata: DynamicFieldInfo[],\n\tlistings: KioskListing[],\n\tlockedItemIds: string[],\n): KioskData {\n\treturn data.reduce<KioskData>(\n\t\t(acc: KioskData, val: DynamicFieldInfo) => {\n\t\t\tconst type = getTypeWithoutPackageAddress(val.name.type);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'kiosk::Item':\n\t\t\t\t\tacc.itemIds.push(val.objectId);\n\t\t\t\t\tacc.items.push({\n\t\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\t\ttype: val.objectType,\n\t\t\t\t\t\tisLocked: false,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Listing':\n\t\t\t\t\tacc.listingIds.push(val.objectId);\n\t\t\t\t\tlistings.push({\n\t\t\t\t\t\tobjectId: (val.name.value as { id: string }).id,\n\t\t\t\t\t\tlistingId: val.objectId,\n\t\t\t\t\t\tisExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Lock':\n\t\t\t\t\tlockedItemIds?.push((val.name.value as { id: string }).id);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{ items: [], itemIds: [], listingIds: [], extensions: [] },\n\t);\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n\treturn type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n\tkioskData: KioskData,\n\tlistings: KioskListing[],\n\tlistingObjects: SuiObjectResponse[],\n) {\n\t// map item listings as {item_id: KioskListing}\n\t// for easier mapping on the nex\n\tconst itemListings = listings.reduce<Record<string, KioskListing>>(\n\t\t(acc: Record<string, KioskListing>, item, idx) => {\n\t\t\tacc[item.objectId] = { ...item };\n\n\t\t\t// return in case we don't have any listing objects.\n\t\t\t// that's the case when we don't have the `listingPrices` included.\n\t\t\tif (listingObjects.length === 0) return acc;\n\n\t\t\tconst content = listingObjects[idx].data?.content;\n\t\t\tconst data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n\t\t\tif (!data) return acc;\n\n\t\t\tacc[item.objectId].price = (data as { value: string }).value;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.listing = itemListings[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n\t// map lock status in an array of type { item_id: true }\n\tconst lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n\t\t(acc: Record<string, boolean>, item: string) => {\n\t\t\tacc[item] = true;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\t// parse lockedItemIds and attach their locked status.\n\tkioskData.items.forEach((item) => {\n\t\titem.isLocked = lockedStatuses[item.objectId] || false;\n\t});\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(environment: RulesEnvironmentParam): string {\n\t// if we have custom environment, we return it.\n\tif (environment.env === 'custom') {\n\t\tif (!environment.address)\n\t\t\tthrow new Error('Please supply the custom package address for rules.');\n\t\treturn environment.address;\n\t}\n\treturn rulesPackageAddresses[environment.env];\n}\n\n/**\n * A helper to fetch all DF pages.\n * We need that to fetch the kiosk DFs consistently, until we have\n * RPC calls that allow filtering of Type / batch fetching of spec\n */\nexport async function getAllDynamicFields(\n\tclient: SuiClient,\n\tparentId: string,\n\tpagination: PaginationArguments<string>,\n) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: DynamicFieldInfo[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getDynamicFields({\n\t\t\tparentId,\n\t\t\tlimit: pagination.limit || undefined,\n\t\t\tcursor,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn data;\n}\n\n/**\n * Converts a number to basis points.\n * Supports up to 2 decimal points.\n * E.g 9.95 -> 995\n * @param percentage A percentage amount in the range [0, 100] including decimals.\n */\nexport function percentageToBasisPoints(percentage: number) {\n\tif (percentage < 0 || percentage > 100)\n\t\tthrow new Error('Percentage needs to be in the [0,100] range.');\n\treturn Math.ceil(percentage * 100);\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n\tObjectArgument,\n\tRulesEnvironmentParam,\n\tTRANSFER_POLICY_MODULE,\n\tTRANSFER_POLICY_TYPE,\n} from '../types';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionArgument {\n\tlet [transferPolicy, transferPolicyCap] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::new`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, publisher)],\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n\t\targuments: [transferPolicy],\n\t});\n\n\treturn transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure({ Some: amount }, 'Option<u64>')\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [profits] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::withdraw`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n\t});\n\n\treturn profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\trequest: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), request],\n\t});\n}\n\n/**\n * Calls the `transfer_policy::remove_rule` function to remove a Rule from the transfer policy's ruleset.\n */\nexport function removeTransferPolicyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\truleType: string,\n\tconfigType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n\t\ttypeArguments: [itemType, ruleType, configType],\n\t\targuments: [objArg(tx, policy), policyCap],\n\t});\n}\n\n/**\n * Calculates the amount to be paid for the royalty rule to be resolved,\n * splits the coin to pass the exact amount,\n * then calls the `royalty_rule::pay` function to resolve the royalty rule.\n */\nexport function resolveRoyaltyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tconst policyObj = objArg(tx, policyId);\n\t// calculates the amount\n\tconst [amount] = tx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, objArg(tx, price)],\n\t});\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, transferRequest, feeCoin],\n\t});\n}\n\n/**\n * Locks the item in the supplied kiosk and\n * proves to the `kiosk_lock` rule that the item was indeed locked,\n * by calling the `kiosk_lock_rule::prove` function to resolve it.\n */\nexport function resolveKioskLockRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\titem: TransactionArgument,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\t// lock item in the kiosk.\n\tlock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [transferRequest, objArg(tx, kiosk)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport { confirmRequest, resolveKioskLockRule, resolveRoyaltyRule } from './transfer-policy';\nimport {\n\tKIOSK_LOCK_RULE,\n\tKIOSK_MODULE,\n\tKIOSK_TYPE,\n\tObjectArgument,\n\tPurchaseAndResolvePoliciesResponse,\n\tPurchaseOptionalParams,\n\tROYALTY_RULE,\n\tRulesEnvironmentParam,\n\tTransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(tx: TransactionBlock): [TransactionArgument, TransactionArgument] {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\treturn [kiosk, kioskOwnerCap];\n}\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: TransactionBlock): TransactionArgument {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [KIOSK_TYPE],\n\t\targuments: [kiosk],\n\t});\n\n\treturn kioskOwnerCap;\n}\n\n/**\n * Call the `kiosk::place<T>(Kiosk, KioskOwnerCap, Item)` function.\n * Place an item to the Kiosk.\n */\nexport function place(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::lock<T>(Kiosk, KioskOwnerCap, TransferPolicy, Item)`\n * function. Lock an item in the Kiosk.\n *\n * Unlike `place` this function requires a `TransferPolicy` to exist\n * and be passed in. This is done to make sure the item does not get\n * locked without an option to take it out.\n */\nexport function lock(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicy: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::lock`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, policy), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::take<T>(Kiosk, KioskOwnerCap, ID)` function.\n * Take an item from the Kiosk.\n */\nexport function take(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::take`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function list(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [\n\t\t\tobjArg(tx, kiosk),\n\t\t\tobjArg(tx, kioskCap),\n\t\t\ttx.pure(itemId, 'address'),\n\t\t\ttx.pure(price, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function delist(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::delist`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n}\n\n/**\n * Call the `kiosk::place_and_list<T>(Kiosk, KioskOwnerCap, Item, u64)` function.\n * Place an item to the Kiosk and list it for sale.\n */\nexport function placeAndList(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place_and_list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item), tx.pure(price, 'u64')],\n\t});\n}\n\n/**\n * Call the `kiosk::purchase<T>(Kiosk, ID, Coin<SUI>)` function and receive an Item and\n * a TransferRequest which needs to be dealt with (via a matching TransferPolicy).\n */\nexport function purchase(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpayment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, transferRequest] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::purchase`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), tx.pure(itemId, 'address'), objArg(tx, payment)],\n\t});\n\n\treturn [item, transferRequest];\n}\n\n/**\n * Call the `kiosk::withdraw(Kiosk, KioskOwnerCap, Option<u64>)` function and receive a Coin<SUI>.\n * If the amount is null, then the entire balance will be withdrawn.\n */\nexport function withdrawFromKiosk(\n\ttx: TransactionBlock,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure(\n\t\t\t\t\t{\n\t\t\t\t\t\tSome: amount,\n\t\t\t\t\t},\n\t\t\t\t\t'Option<u64>',\n\t\t\t )\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [coin] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::withdraw`,\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n\t});\n\n\treturn coin;\n}\n\n/**\n * Call the `kiosk::borrow<T>(Kiosk, KioskOwnerCap, ID): &T` function.\n * Immutably borrow an item from the Kiosk.\n */\nexport function borrow(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_mut<T>(Kiosk, KioskOwnerCap, ID): &mut T` function.\n * Mutably borrow an item from the Kiosk.\n */\nexport function borrowMut(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_mut`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_value<T>(Kiosk, KioskOwnerCap, ID): T` function.\n * Immutably borrow an item from the Kiosk and return it in the end.\n *\n * Requires calling `returnValue` to return the item.\n */\nexport function borrowValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, promise] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn [item, promise];\n}\n\n/**\n * Call the `kiosk::return_value<T>(Kiosk, Item, Borrow)` function.\n * Return an item to the Kiosk after it was `borrowValue`-d.\n */\nexport function returnValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titem: TransactionArgument,\n\tpromise: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::return_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), item, promise],\n\t});\n}\n\n/**\n * Completes the full purchase flow that includes:\n * 1. Purchasing the item.\n * 2. Resolving all the transfer policies (if any).\n * 3. Returns the item and whether the user can transfer it or not.\n *\n * If the item can be transferred, there's an extra transaction required by the user\n * to transfer it to an address or place it in their kiosk.\n */\nexport function purchaseAndResolvePolicies(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpolicy: TransferPolicy,\n\tenvironment: RulesEnvironmentParam,\n\textraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n\t// if we don't pass the listing or the listing doens't have a price, return.\n\tif (price === undefined || typeof price !== 'string')\n\t\tthrow new Error(`Price of the listing is not supplied.`);\n\n\t// Split the coin for the amount of the listing.\n\tconst coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n\t// initialize the purchase `kiosk::purchase`\n\tconst [purchasedItem, transferRequest] = purchase(tx, itemType, kiosk, itemId, coin);\n\n\t// Start resolving rules.\n\t// Right now we support `kiosk_lock_rule` and `royalty_rule`.\n\t// They can also be supplied in parallel (supports combination).\n\tlet hasKioskLockRule = false;\n\n\tfor (let rule of policy.rules) {\n\t\tconst ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n\t\tswitch (ruleWithoutAddr) {\n\t\t\tcase ROYALTY_RULE:\n\t\t\t\tresolveRoyaltyRule(tx, itemType, price, policy.id, transferRequest, environment);\n\t\t\t\tbreak;\n\t\t\tcase KIOSK_LOCK_RULE:\n\t\t\t\tif (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n\t\t\t\t\t);\n\t\t\t\thasKioskLockRule = true;\n\t\t\t\tresolveKioskLockRule(\n\t\t\t\t\ttx,\n\t\t\t\t\titemType,\n\t\t\t\t\tpurchasedItem,\n\t\t\t\t\textraParams.ownedKiosk,\n\t\t\t\t\textraParams.ownedKioskCap,\n\t\t\t\t\tpolicy.id,\n\t\t\t\t\ttransferRequest,\n\t\t\t\t\tenvironment,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// confirm the Transfer Policy request.\n\tconfirmRequest(tx, itemType, policy.id, transferRequest);\n\n\treturn {\n\t\titem: purchasedItem,\n\t\tcanTransfer: !hasKioskLockRule,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock } from '@mysten/sui.js';\nimport { ObjectArgument, RulesEnvironmentParam } from '../types';\nimport { getRulePackageAddress, objArg } from '../utils';\n\n/**\n * Adds the Kiosk Royalty rule to the Transfer Policy.\n * You can pass the percentage, as well as a minimum amount.\n * The royalty that will be paid is the MAX(percentage, minAmount).\n * \tYou can pass 0 in either value if you want only percentage royalty, or a fixed amount fee.\n * \t(but you should define at least one of them for the rule to make sense).\n *\n * \t@param percentageBps The royalty percentage in basis points. Use `percentageToBasisPoints` helper to convert from percentage [0,100].\n * \t@param minAmount The minimum royalty amount per request in MIST.\n */\nexport function attachRoyaltyRule(\n\ttx: TransactionBlock,\n\ttype: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tpercentageBps: number | string, // this is in basis points.\n\tminAmount: number | string,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tif (Number(percentageBps) < 0 || Number(percentageBps) > 10_000)\n\t\tthrow new Error('Invalid basis point percentage. Use a value between [0,10000].');\n\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::add`,\n\t\ttypeArguments: [type],\n\t\targuments: [\n\t\t\tobjArg(tx, policy),\n\t\t\tobjArg(tx, policyCap),\n\t\t\ttx.pure(percentageBps, 'u16'),\n\t\t\ttx.pure(minAmount, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Adds the Kiosk Lock Rule to the Transfer Policy.\n * This Rule forces buyer to lock the item in the kiosk, preserving strong royalties.\n */\nexport function attachKioskLockRule(\n\ttx: TransactionBlock,\n\ttype: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::add`,\n\t\ttypeArguments: [type],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiObjectData, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { isValidSuiAddress } from '@mysten/sui.js/utils';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetKioskObject,\n} from '../utils';\nimport {\n\tFetchKioskOptions,\n\tKIOSK_OWNER_CAP,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\nexport async function fetchKiosk(\n\tclient: SuiClient,\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);\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] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices\n\t\t\t? client.multiGetObjects({\n\t\t\t\t\tids: kioskData.listingIds,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tshowContent: true,\n\t\t\t\t\t},\n\t\t\t })\n\t\t\t: 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\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 */\nexport async function getOwnedKiosks(\n\tclient: SuiClient,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t},\n): Promise<OwnedKiosks> {\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\n\t// fetch owned kiosk caps, paginated.\n\tconst { data, hasNextPage, nextCursor } = await client.getOwnedObjects({\n\t\towner: address,\n\t\tfilter: { StructType: KIOSK_OWNER_CAP },\n\t\toptions: {\n\t\t\tshowContent: true,\n\t\t},\n\t\t...(options?.pagination || {}),\n\t});\n\n\t// get kioskIds from the OwnerCaps.\n\tconst kioskIdList = data?.map((x: SuiObjectResponse) => {\n\t\tconst fields = x.data?.content?.dataType === 'moveObject' ? x.data.content.fields : null;\n\t\treturn (fields as { for: string })?.for;\n\t});\n\n\t// clean up data that might have an error in them.\n\t// only return valid objects.\n\tconst filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];\n\n\treturn {\n\t\tnextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: filteredData.map((x, idx) => ({\n\t\t\tdigest: x.digest,\n\t\t\tversion: x.version,\n\t\t\tobjectId: x.objectId,\n\t\t\tkioskId: kioskIdList[idx],\n\t\t})),\n\t\tkioskIds: kioskIdList,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiClient } from '@mysten/sui.js/client';\nimport { bcs } from '../bcs';\nimport { TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE, TransferPolicy } from '../types';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The seach 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 * @param provider\n * @param type\n */\nexport async function queryTransferPolicy(\n\tclient: SuiClient,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\t// console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\tconst { data } = await client.queryEvents({\n\t\tquery: {\n\t\t\tMoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n\t\t},\n\t});\n\n\tconst search = data.map((event) => event.parsedJson as { id: string });\n\tconst policies = await client.multiGetObjects({\n\t\tids: search.map((policy) => policy.id),\n\t\toptions: { showBcs: true, showOwner: true },\n\t});\n\n\treturn policies\n\t\t.filter((policy) => !!policy && 'data' in policy)\n\t\t.map(({ data: policy }) => {\n\t\t\t// should never happen; policies are objects and fetched via an event.\n\t\t\t// policies are filtered for null and undefined above.\n\t\t\tif (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n\t\t\t\tthrow new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);\n\t\t\t}\n\n\t\t\tlet parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n\t\t\treturn {\n\t\t\t\tid: policy?.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: policy?.owner!,\n\t\t\t\trules: parsed.rules,\n\t\t\t\tbalance: parsed.balance,\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n"],"mappings":"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","names":["import_utils"]}
package/dist/index.mjs CHANGED
@@ -172,6 +172,11 @@ async function getAllDynamicFields(client, parentId, pagination) {
172
172
  }
173
173
  return data;
174
174
  }
175
+ function percentageToBasisPoints(percentage) {
176
+ if (percentage < 0 || percentage > 100)
177
+ throw new Error("Percentage needs to be in the [0,100] range.");
178
+ return Math.ceil(percentage * 100);
179
+ }
175
180
 
176
181
  // src/tx/transfer-policy.ts
177
182
  function createTransferPolicy(tx, itemType, publisher) {
@@ -391,6 +396,29 @@ function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy,
391
396
  };
392
397
  }
393
398
 
399
+ // src/tx/rules.ts
400
+ function attachRoyaltyRule(tx, type, policy, policyCap, percentageBps, minAmount, environment) {
401
+ if (Number(percentageBps) < 0 || Number(percentageBps) > 1e4)
402
+ throw new Error("Invalid basis point percentage. Use a value between [0,10000].");
403
+ tx.moveCall({
404
+ target: `${getRulePackageAddress(environment)}::royalty_rule::add`,
405
+ typeArguments: [type],
406
+ arguments: [
407
+ objArg(tx, policy),
408
+ objArg(tx, policyCap),
409
+ tx.pure(percentageBps, "u16"),
410
+ tx.pure(minAmount, "u64")
411
+ ]
412
+ });
413
+ }
414
+ function attachKioskLockRule(tx, type, policy, policyCap, environment) {
415
+ tx.moveCall({
416
+ target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::add`,
417
+ typeArguments: [type],
418
+ arguments: [objArg(tx, policy), objArg(tx, policyCap)]
419
+ });
420
+ }
421
+
394
422
  // src/query/kiosk.ts
395
423
  import { isValidSuiAddress } from "@mysten/sui.js/utils";
396
424
  async function fetchKiosk(client, kioskId, pagination, options) {
@@ -492,8 +520,10 @@ export {
492
520
  TRANSFER_POLICY_CREATED_EVENT,
493
521
  TRANSFER_POLICY_MODULE,
494
522
  TRANSFER_POLICY_TYPE,
523
+ attachKioskLockRule,
495
524
  attachListingsAndPrices,
496
525
  attachLockedItems,
526
+ attachRoyaltyRule,
497
527
  bcs,
498
528
  borrow,
499
529
  borrowMut,
@@ -515,6 +545,7 @@ export {
515
545
  lock,
516
546
  mainnetEnvironment,
517
547
  objArg,
548
+ percentageToBasisPoints,
518
549
  place,
519
550
  placeAndList,
520
551
  purchase,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.ts","../src/utils.ts","../src/tx/transfer-policy.ts","../src/tx/kiosk.ts","../src/query/kiosk.ts","../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js/bcs';\nimport {\n\tKIOSK_PURCHASE_CAP,\n\tKIOSK_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n\tid: 'address',\n\tprofits: 'u64',\n\towner: 'address',\n\titemCount: 'u32',\n\tallowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n\tid: 'address',\n\tkioskId: 'address',\n\titemId: 'address',\n\tminPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n\tid: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n\tid: 'address',\n\tbalance: 'u64',\n\trules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PaginatedObjectsResponse } from '@mysten/sui.js/client';\nimport { TransactionArgument } from '@mysten/sui.js/transactions';\nimport { ObjectArgument } from '.';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = '0x2::kiosk';\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\twithKioskFields?: boolean;\n\twithListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js/client';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;\n\n/** The Transfer Policy Type */\nexport const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;\n\n/** The Kiosk Lock Rule */\nexport const KIOSK_LOCK_RULE = 'kiosk_lock_rule::Rule';\n\n/** The Royalty rule */\nexport const ROYALTY_RULE = 'royalty_rule::Rule';\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n\tid: string;\n\ttype: string;\n\tbalance: string;\n\trules: string[];\n\towner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n\tid: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support environments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: string };\n\n/** A default Testnet Environment object */\nexport const testnetEnvironment: RulesEnvironmentParam = { env: 'testnet' };\n\n/** A default Mainnet Environment object */\nexport const mainnetEnvironment: RulesEnvironmentParam = { env: 'mainnet' };\n\n/** A helper to easily export a custom environment */\nexport const customEnvironment = (address: string): RulesEnvironmentParam => ({\n\tenv: 'custom',\n\taddress,\n});\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** The Transer Policy Rules package address on testnet */\nexport const TESTNET_RULES_PACKAGE_ADDRESS =\n\t'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n\t'0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SharedObjectRef } from '@mysten/sui.js/bcs';\nimport { SuiObjectRef, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { type DynamicFieldInfo } from '@mysten/sui.js/client';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, KioskData, KioskListing, RulesEnvironmentParam } from './types';\nimport { MAINNET_RULES_PACKAGE_ADDRESS, TESTNET_RULES_PACKAGE_ADDRESS } from './constants';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n\tmainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n\ttestnet: TESTNET_RULES_PACKAGE_ADDRESS,\n\tdevnet: '',\n\tcustom: null,\n};\n\n/**\n * Convert any valid input into a TransactionArgument.\n *\n * @param tx The transaction to use for creating the argument.\n * @param arg The argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function objArg(\n\ttx: TransactionBlock,\n\targ: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n\tif (typeof arg === 'string') {\n\t\treturn tx.object(arg);\n\t}\n\n\tif ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n\t\treturn tx.objectRef(arg);\n\t}\n\n\tif ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n\t\treturn tx.sharedObjectRef(arg);\n\t}\n\n\tif ('kind' in arg) {\n\t\treturn arg;\n\t}\n\n\tthrow new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(client: SuiClient, id: string): Promise<Kiosk> {\n\tconst queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n\tif (!queryRes || queryRes.error || !queryRes.data) {\n\t\tthrow new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n\t}\n\n\tif (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n\t\tthrow new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n\t}\n\n\treturn bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n\tdata: DynamicFieldInfo[],\n\tlistings: KioskListing[],\n\tlockedItemIds: string[],\n): KioskData {\n\treturn data.reduce<KioskData>(\n\t\t(acc: KioskData, val: DynamicFieldInfo) => {\n\t\t\tconst type = getTypeWithoutPackageAddress(val.name.type);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'kiosk::Item':\n\t\t\t\t\tacc.itemIds.push(val.objectId);\n\t\t\t\t\tacc.items.push({\n\t\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\t\ttype: val.objectType,\n\t\t\t\t\t\tisLocked: false,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Listing':\n\t\t\t\t\tacc.listingIds.push(val.objectId);\n\t\t\t\t\tlistings.push({\n\t\t\t\t\t\tobjectId: (val.name.value as { id: string }).id,\n\t\t\t\t\t\tlistingId: val.objectId,\n\t\t\t\t\t\tisExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Lock':\n\t\t\t\t\tlockedItemIds?.push((val.name.value as { id: string }).id);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{ items: [], itemIds: [], listingIds: [], extensions: [] },\n\t);\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n\treturn type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n\tkioskData: KioskData,\n\tlistings: KioskListing[],\n\tlistingObjects: SuiObjectResponse[],\n) {\n\t// map item listings as {item_id: KioskListing}\n\t// for easier mapping on the nex\n\tconst itemListings = listings.reduce<Record<string, KioskListing>>(\n\t\t(acc: Record<string, KioskListing>, item, idx) => {\n\t\t\tacc[item.objectId] = { ...item };\n\n\t\t\t// return in case we don't have any listing objects.\n\t\t\t// that's the case when we don't have the `listingPrices` included.\n\t\t\tif (listingObjects.length === 0) return acc;\n\n\t\t\tconst content = listingObjects[idx].data?.content;\n\t\t\tconst data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n\t\t\tif (!data) return acc;\n\n\t\t\tacc[item.objectId].price = (data as { value: string }).value;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.listing = itemListings[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n\t// map lock status in an array of type { item_id: true }\n\tconst lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n\t\t(acc: Record<string, boolean>, item: string) => {\n\t\t\tacc[item] = true;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\t// parse lockedItemIds and attach their locked status.\n\tkioskData.items.forEach((item) => {\n\t\titem.isLocked = lockedStatuses[item.objectId] || false;\n\t});\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(environment: RulesEnvironmentParam): string {\n\t// if we have custom environment, we return it.\n\tif (environment.env === 'custom') {\n\t\tif (!environment.address)\n\t\t\tthrow new Error('Please supply the custom package address for rules.');\n\t\treturn environment.address;\n\t}\n\treturn rulesPackageAddresses[environment.env];\n}\n\n/**\n * A helper to fetch all DF pages.\n * We need that to fetch the kiosk DFs consistently, until we have\n * RPC calls that allow filtering of Type / batch fetching of spec\n */\nexport async function getAllDynamicFields(\n\tclient: SuiClient,\n\tparentId: string,\n\tpagination: PaginationArguments<string>,\n) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: DynamicFieldInfo[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getDynamicFields({\n\t\t\tparentId,\n\t\t\tlimit: pagination.limit || undefined,\n\t\t\tcursor,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn data;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n\tObjectArgument,\n\tRulesEnvironmentParam,\n\tTRANSFER_POLICY_MODULE,\n\tTRANSFER_POLICY_TYPE,\n} from '../types';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionArgument {\n\tlet [transferPolicy, transferPolicyCap] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::new`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, publisher)],\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n\t\targuments: [transferPolicy],\n\t});\n\n\treturn transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure({ Some: amount }, 'Option<u64>')\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [profits] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::withdraw`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n\t});\n\n\treturn profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\trequest: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), request],\n\t});\n}\n\n/**\n * Calls the `transfer_policy::remove_rule` function to remove a Rule from the transfer policy's ruleset.\n */\nexport function removeTransferPolicyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\truleType: string,\n\tconfigType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n\t\ttypeArguments: [itemType, ruleType, configType],\n\t\targuments: [objArg(tx, policy), policyCap],\n\t});\n}\n\n/**\n * Calculates the amount to be paid for the royalty rule to be resolved,\n * splits the coin to pass the exact amount,\n * then calls the `royalty_rule::pay` function to resolve the royalty rule.\n */\nexport function resolveRoyaltyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tconst policyObj = objArg(tx, policyId);\n\t// calculates the amount\n\tconst [amount] = tx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, objArg(tx, price)],\n\t});\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, transferRequest, feeCoin],\n\t});\n}\n\n/**\n * Locks the item in the supplied kiosk and\n * proves to the `kiosk_lock` rule that the item was indeed locked,\n * by calling the `kiosk_lock_rule::prove` function to resolve it.\n */\nexport function resolveKioskLockRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\titem: TransactionArgument,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\t// lock item in the kiosk.\n\tlock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [transferRequest, objArg(tx, kiosk)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport { confirmRequest, resolveKioskLockRule, resolveRoyaltyRule } from './transfer-policy';\nimport {\n\tKIOSK_LOCK_RULE,\n\tKIOSK_MODULE,\n\tKIOSK_TYPE,\n\tObjectArgument,\n\tPurchaseAndResolvePoliciesResponse,\n\tPurchaseOptionalParams,\n\tROYALTY_RULE,\n\tRulesEnvironmentParam,\n\tTransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(tx: TransactionBlock): [TransactionArgument, TransactionArgument] {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\treturn [kiosk, kioskOwnerCap];\n}\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: TransactionBlock): TransactionArgument {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [KIOSK_TYPE],\n\t\targuments: [kiosk],\n\t});\n\n\treturn kioskOwnerCap;\n}\n\n/**\n * Call the `kiosk::place<T>(Kiosk, KioskOwnerCap, Item)` function.\n * Place an item to the Kiosk.\n */\nexport function place(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::lock<T>(Kiosk, KioskOwnerCap, TransferPolicy, Item)`\n * function. Lock an item in the Kiosk.\n *\n * Unlike `place` this function requires a `TransferPolicy` to exist\n * and be passed in. This is done to make sure the item does not get\n * locked without an option to take it out.\n */\nexport function lock(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicy: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::lock`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, policy), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::take<T>(Kiosk, KioskOwnerCap, ID)` function.\n * Take an item from the Kiosk.\n */\nexport function take(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::take`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function list(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [\n\t\t\tobjArg(tx, kiosk),\n\t\t\tobjArg(tx, kioskCap),\n\t\t\ttx.pure(itemId, 'address'),\n\t\t\ttx.pure(price, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function delist(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::delist`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n}\n\n/**\n * Call the `kiosk::place_and_list<T>(Kiosk, KioskOwnerCap, Item, u64)` function.\n * Place an item to the Kiosk and list it for sale.\n */\nexport function placeAndList(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place_and_list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item), tx.pure(price, 'u64')],\n\t});\n}\n\n/**\n * Call the `kiosk::purchase<T>(Kiosk, ID, Coin<SUI>)` function and receive an Item and\n * a TransferRequest which needs to be dealt with (via a matching TransferPolicy).\n */\nexport function purchase(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpayment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, transferRequest] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::purchase`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), tx.pure(itemId, 'address'), objArg(tx, payment)],\n\t});\n\n\treturn [item, transferRequest];\n}\n\n/**\n * Call the `kiosk::withdraw(Kiosk, KioskOwnerCap, Option<u64>)` function and receive a Coin<SUI>.\n * If the amount is null, then the entire balance will be withdrawn.\n */\nexport function withdrawFromKiosk(\n\ttx: TransactionBlock,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure(\n\t\t\t\t\t{\n\t\t\t\t\t\tSome: amount,\n\t\t\t\t\t},\n\t\t\t\t\t'Option<u64>',\n\t\t\t )\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [coin] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::withdraw`,\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n\t});\n\n\treturn coin;\n}\n\n/**\n * Call the `kiosk::borrow<T>(Kiosk, KioskOwnerCap, ID): &T` function.\n * Immutably borrow an item from the Kiosk.\n */\nexport function borrow(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_mut<T>(Kiosk, KioskOwnerCap, ID): &mut T` function.\n * Mutably borrow an item from the Kiosk.\n */\nexport function borrowMut(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_mut`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_value<T>(Kiosk, KioskOwnerCap, ID): T` function.\n * Immutably borrow an item from the Kiosk and return it in the end.\n *\n * Requires calling `returnValue` to return the item.\n */\nexport function borrowValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, promise] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn [item, promise];\n}\n\n/**\n * Call the `kiosk::return_value<T>(Kiosk, Item, Borrow)` function.\n * Return an item to the Kiosk after it was `borrowValue`-d.\n */\nexport function returnValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titem: TransactionArgument,\n\tpromise: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::return_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), item, promise],\n\t});\n}\n\n/**\n * Completes the full purchase flow that includes:\n * 1. Purchasing the item.\n * 2. Resolving all the transfer policies (if any).\n * 3. Returns the item and whether the user can transfer it or not.\n *\n * If the item can be transferred, there's an extra transaction required by the user\n * to transfer it to an address or place it in their kiosk.\n */\nexport function purchaseAndResolvePolicies(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpolicy: TransferPolicy,\n\tenvironment: RulesEnvironmentParam,\n\textraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n\t// if we don't pass the listing or the listing doens't have a price, return.\n\tif (price === undefined || typeof price !== 'string')\n\t\tthrow new Error(`Price of the listing is not supplied.`);\n\n\t// Split the coin for the amount of the listing.\n\tconst coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n\t// initialize the purchase `kiosk::purchase`\n\tconst [purchasedItem, transferRequest] = purchase(tx, itemType, kiosk, itemId, coin);\n\n\t// Start resolving rules.\n\t// Right now we support `kiosk_lock_rule` and `royalty_rule`.\n\t// They can also be supplied in parallel (supports combination).\n\tlet hasKioskLockRule = false;\n\n\tfor (let rule of policy.rules) {\n\t\tconst ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n\t\tswitch (ruleWithoutAddr) {\n\t\t\tcase ROYALTY_RULE:\n\t\t\t\tresolveRoyaltyRule(tx, itemType, price, policy.id, transferRequest, environment);\n\t\t\t\tbreak;\n\t\t\tcase KIOSK_LOCK_RULE:\n\t\t\t\tif (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n\t\t\t\t\t);\n\t\t\t\thasKioskLockRule = true;\n\t\t\t\tresolveKioskLockRule(\n\t\t\t\t\ttx,\n\t\t\t\t\titemType,\n\t\t\t\t\tpurchasedItem,\n\t\t\t\t\textraParams.ownedKiosk,\n\t\t\t\t\textraParams.ownedKioskCap,\n\t\t\t\t\tpolicy.id,\n\t\t\t\t\ttransferRequest,\n\t\t\t\t\tenvironment,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// confirm the Transfer Policy request.\n\tconfirmRequest(tx, itemType, policy.id, transferRequest);\n\n\treturn {\n\t\titem: purchasedItem,\n\t\tcanTransfer: !hasKioskLockRule,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiObjectData, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { isValidSuiAddress } from '@mysten/sui.js/utils';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetKioskObject,\n} from '../utils';\nimport {\n\tFetchKioskOptions,\n\tKIOSK_OWNER_CAP,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\nexport async function fetchKiosk(\n\tclient: SuiClient,\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);\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] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices\n\t\t\t? client.multiGetObjects({\n\t\t\t\t\tids: kioskData.listingIds,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tshowContent: true,\n\t\t\t\t\t},\n\t\t\t })\n\t\t\t: 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\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 */\nexport async function getOwnedKiosks(\n\tclient: SuiClient,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t},\n): Promise<OwnedKiosks> {\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\n\t// fetch owned kiosk caps, paginated.\n\tconst { data, hasNextPage, nextCursor } = await client.getOwnedObjects({\n\t\towner: address,\n\t\tfilter: { StructType: KIOSK_OWNER_CAP },\n\t\toptions: {\n\t\t\tshowContent: true,\n\t\t},\n\t\t...(options?.pagination || {}),\n\t});\n\n\t// get kioskIds from the OwnerCaps.\n\tconst kioskIdList = data?.map((x: SuiObjectResponse) => {\n\t\tconst fields = x.data?.content?.dataType === 'moveObject' ? x.data.content.fields : null;\n\t\treturn (fields as { for: string })?.for;\n\t});\n\n\t// clean up data that might have an error in them.\n\t// only return valid objects.\n\tconst filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];\n\n\treturn {\n\t\tnextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: filteredData.map((x, idx) => ({\n\t\t\tdigest: x.digest,\n\t\t\tversion: x.version,\n\t\t\tobjectId: x.objectId,\n\t\t\tkioskId: kioskIdList[idx],\n\t\t})),\n\t\tkioskIds: kioskIdList,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiClient } from '@mysten/sui.js/client';\nimport { bcs } from '../bcs';\nimport { TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE, TransferPolicy } from '../types';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The seach 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 * @param provider\n * @param type\n */\nexport async function queryTransferPolicy(\n\tclient: SuiClient,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\t// console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\tconst { data } = await client.queryEvents({\n\t\tquery: {\n\t\t\tMoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n\t\t},\n\t});\n\n\tconst search = data.map((event) => event.parsedJson as { id: string });\n\tconst policies = await client.multiGetObjects({\n\t\tids: search.map((policy) => policy.id),\n\t\toptions: { showBcs: true, showOwner: true },\n\t});\n\n\treturn policies\n\t\t.filter((policy) => !!policy && 'data' in policy)\n\t\t.map(({ data: policy }) => {\n\t\t\t// should never happen; policies are objects and fetched via an event.\n\t\t\t// policies are filtered for null and undefined above.\n\t\t\tif (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n\t\t\t\tthrow new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);\n\t\t\t}\n\n\t\t\tlet parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n\t\t\treturn {\n\t\t\t\tid: policy?.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: policy?.owner!,\n\t\t\t\trules: parsed.rules,\n\t\t\t\tbalance: parsed.balance,\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.ts","../src/utils.ts","../src/tx/transfer-policy.ts","../src/tx/kiosk.ts","../src/tx/rules.ts","../src/query/kiosk.ts","../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js/bcs';\nimport {\n\tKIOSK_PURCHASE_CAP,\n\tKIOSK_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n\tid: 'address',\n\tprofits: 'u64',\n\towner: 'address',\n\titemCount: 'u32',\n\tallowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n\tid: 'address',\n\tkioskId: 'address',\n\titemId: 'address',\n\tminPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n\tid: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n\tid: 'address',\n\tbalance: 'u64',\n\trules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PaginatedObjectsResponse } from '@mysten/sui.js/client';\nimport { TransactionArgument } from '@mysten/sui.js/transactions';\nimport { ObjectArgument } from '.';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = '0x2::kiosk';\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\twithKioskFields?: boolean;\n\twithListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js/client';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;\n\n/** The Transfer Policy Type */\nexport const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;\n\n/** The Kiosk Lock Rule */\nexport const KIOSK_LOCK_RULE = 'kiosk_lock_rule::Rule';\n\n/** The Royalty rule */\nexport const ROYALTY_RULE = 'royalty_rule::Rule';\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n\tid: string;\n\ttype: string;\n\tbalance: string;\n\trules: string[];\n\towner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n\tid: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support environments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: string };\n\n/** A default Testnet Environment object */\nexport const testnetEnvironment: RulesEnvironmentParam = { env: 'testnet' };\n\n/** A default Mainnet Environment object */\nexport const mainnetEnvironment: RulesEnvironmentParam = { env: 'mainnet' };\n\n/** A helper to easily export a custom environment */\nexport const customEnvironment = (address: string): RulesEnvironmentParam => ({\n\tenv: 'custom',\n\taddress,\n});\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** The Transer Policy Rules package address on testnet */\nexport const TESTNET_RULES_PACKAGE_ADDRESS =\n\t'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n\t'0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SharedObjectRef } from '@mysten/sui.js/bcs';\nimport { SuiObjectRef, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { type DynamicFieldInfo } from '@mysten/sui.js/client';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, KioskData, KioskListing, RulesEnvironmentParam } from './types';\nimport { MAINNET_RULES_PACKAGE_ADDRESS, TESTNET_RULES_PACKAGE_ADDRESS } from './constants';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n\tmainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n\ttestnet: TESTNET_RULES_PACKAGE_ADDRESS,\n\tdevnet: '',\n\tcustom: null,\n};\n\n/**\n * Convert any valid input into a TransactionArgument.\n *\n * @param tx The transaction to use for creating the argument.\n * @param arg The argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function objArg(\n\ttx: TransactionBlock,\n\targ: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n\tif (typeof arg === 'string') {\n\t\treturn tx.object(arg);\n\t}\n\n\tif ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n\t\treturn tx.objectRef(arg);\n\t}\n\n\tif ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n\t\treturn tx.sharedObjectRef(arg);\n\t}\n\n\tif ('kind' in arg) {\n\t\treturn arg;\n\t}\n\n\tthrow new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(client: SuiClient, id: string): Promise<Kiosk> {\n\tconst queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n\tif (!queryRes || queryRes.error || !queryRes.data) {\n\t\tthrow new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n\t}\n\n\tif (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n\t\tthrow new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n\t}\n\n\treturn bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n\tdata: DynamicFieldInfo[],\n\tlistings: KioskListing[],\n\tlockedItemIds: string[],\n): KioskData {\n\treturn data.reduce<KioskData>(\n\t\t(acc: KioskData, val: DynamicFieldInfo) => {\n\t\t\tconst type = getTypeWithoutPackageAddress(val.name.type);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'kiosk::Item':\n\t\t\t\t\tacc.itemIds.push(val.objectId);\n\t\t\t\t\tacc.items.push({\n\t\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\t\ttype: val.objectType,\n\t\t\t\t\t\tisLocked: false,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Listing':\n\t\t\t\t\tacc.listingIds.push(val.objectId);\n\t\t\t\t\tlistings.push({\n\t\t\t\t\t\tobjectId: (val.name.value as { id: string }).id,\n\t\t\t\t\t\tlistingId: val.objectId,\n\t\t\t\t\t\tisExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'kiosk::Lock':\n\t\t\t\t\tlockedItemIds?.push((val.name.value as { id: string }).id);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{ items: [], itemIds: [], listingIds: [], extensions: [] },\n\t);\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n\treturn type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n\tkioskData: KioskData,\n\tlistings: KioskListing[],\n\tlistingObjects: SuiObjectResponse[],\n) {\n\t// map item listings as {item_id: KioskListing}\n\t// for easier mapping on the nex\n\tconst itemListings = listings.reduce<Record<string, KioskListing>>(\n\t\t(acc: Record<string, KioskListing>, item, idx) => {\n\t\t\tacc[item.objectId] = { ...item };\n\n\t\t\t// return in case we don't have any listing objects.\n\t\t\t// that's the case when we don't have the `listingPrices` included.\n\t\t\tif (listingObjects.length === 0) return acc;\n\n\t\t\tconst content = listingObjects[idx].data?.content;\n\t\t\tconst data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n\t\t\tif (!data) return acc;\n\n\t\t\tacc[item.objectId].price = (data as { value: string }).value;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.listing = itemListings[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n\t// map lock status in an array of type { item_id: true }\n\tconst lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n\t\t(acc: Record<string, boolean>, item: string) => {\n\t\t\tacc[item] = true;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\t// parse lockedItemIds and attach their locked status.\n\tkioskData.items.forEach((item) => {\n\t\titem.isLocked = lockedStatuses[item.objectId] || false;\n\t});\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(environment: RulesEnvironmentParam): string {\n\t// if we have custom environment, we return it.\n\tif (environment.env === 'custom') {\n\t\tif (!environment.address)\n\t\t\tthrow new Error('Please supply the custom package address for rules.');\n\t\treturn environment.address;\n\t}\n\treturn rulesPackageAddresses[environment.env];\n}\n\n/**\n * A helper to fetch all DF pages.\n * We need that to fetch the kiosk DFs consistently, until we have\n * RPC calls that allow filtering of Type / batch fetching of spec\n */\nexport async function getAllDynamicFields(\n\tclient: SuiClient,\n\tparentId: string,\n\tpagination: PaginationArguments<string>,\n) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: DynamicFieldInfo[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getDynamicFields({\n\t\t\tparentId,\n\t\t\tlimit: pagination.limit || undefined,\n\t\t\tcursor,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn data;\n}\n\n/**\n * Converts a number to basis points.\n * Supports up to 2 decimal points.\n * E.g 9.95 -> 995\n * @param percentage A percentage amount in the range [0, 100] including decimals.\n */\nexport function percentageToBasisPoints(percentage: number) {\n\tif (percentage < 0 || percentage > 100)\n\t\tthrow new Error('Percentage needs to be in the [0,100] range.');\n\treturn Math.ceil(percentage * 100);\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n\tObjectArgument,\n\tRulesEnvironmentParam,\n\tTRANSFER_POLICY_MODULE,\n\tTRANSFER_POLICY_TYPE,\n} from '../types';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionArgument {\n\tlet [transferPolicy, transferPolicyCap] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::new`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, publisher)],\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n\t\targuments: [transferPolicy],\n\t});\n\n\treturn transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure({ Some: amount }, 'Option<u64>')\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [profits] = tx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::withdraw`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n\t});\n\n\treturn profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n\ttx: TransactionBlock,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\trequest: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, policy), request],\n\t});\n}\n\n/**\n * Calls the `transfer_policy::remove_rule` function to remove a Rule from the transfer policy's ruleset.\n */\nexport function removeTransferPolicyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\truleType: string,\n\tconfigType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n\t\ttypeArguments: [itemType, ruleType, configType],\n\t\targuments: [objArg(tx, policy), policyCap],\n\t});\n}\n\n/**\n * Calculates the amount to be paid for the royalty rule to be resolved,\n * splits the coin to pass the exact amount,\n * then calls the `royalty_rule::pay` function to resolve the royalty rule.\n */\nexport function resolveRoyaltyRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tconst policyObj = objArg(tx, policyId);\n\t// calculates the amount\n\tconst [amount] = tx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, objArg(tx, price)],\n\t});\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [policyObj, transferRequest, feeCoin],\n\t});\n}\n\n/**\n * Locks the item in the supplied kiosk and\n * proves to the `kiosk_lock` rule that the item was indeed locked,\n * by calling the `kiosk_lock_rule::prove` function to resolve it.\n */\nexport function resolveKioskLockRule(\n\ttx: TransactionBlock,\n\titemType: string,\n\titem: TransactionArgument,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicyId: ObjectArgument,\n\ttransferRequest: TransactionArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\t// lock item in the kiosk.\n\tlock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [transferRequest, objArg(tx, kiosk)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock, TransactionArgument } from '@mysten/sui.js/transactions';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport { confirmRequest, resolveKioskLockRule, resolveRoyaltyRule } from './transfer-policy';\nimport {\n\tKIOSK_LOCK_RULE,\n\tKIOSK_MODULE,\n\tKIOSK_TYPE,\n\tObjectArgument,\n\tPurchaseAndResolvePoliciesResponse,\n\tPurchaseOptionalParams,\n\tROYALTY_RULE,\n\tRulesEnvironmentParam,\n\tTransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(tx: TransactionBlock): [TransactionArgument, TransactionArgument] {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\treturn [kiosk, kioskOwnerCap];\n}\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: TransactionBlock): TransactionArgument {\n\tlet [kiosk, kioskOwnerCap] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::new`,\n\t});\n\n\ttx.moveCall({\n\t\ttarget: `0x2::transfer::public_share_object`,\n\t\ttypeArguments: [KIOSK_TYPE],\n\t\targuments: [kiosk],\n\t});\n\n\treturn kioskOwnerCap;\n}\n\n/**\n * Call the `kiosk::place<T>(Kiosk, KioskOwnerCap, Item)` function.\n * Place an item to the Kiosk.\n */\nexport function place(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::lock<T>(Kiosk, KioskOwnerCap, TransferPolicy, Item)`\n * function. Lock an item in the Kiosk.\n *\n * Unlike `place` this function requires a `TransferPolicy` to exist\n * and be passed in. This is done to make sure the item does not get\n * locked without an option to take it out.\n */\nexport function lock(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tpolicy: ObjectArgument,\n\titem: ObjectArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::lock`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, policy), objArg(tx, item)],\n\t});\n}\n\n/**\n * Call the `kiosk::take<T>(Kiosk, KioskOwnerCap, ID)` function.\n * Take an item from the Kiosk.\n */\nexport function take(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::take`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function list(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [\n\t\t\tobjArg(tx, kiosk),\n\t\t\tobjArg(tx, kioskCap),\n\t\t\ttx.pure(itemId, 'address'),\n\t\t\ttx.pure(price, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Call the `kiosk::list<T>(Kiosk, KioskOwnerCap, ID, u64)` function.\n * List an item for sale.\n */\nexport function delist(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::delist`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n}\n\n/**\n * Call the `kiosk::place_and_list<T>(Kiosk, KioskOwnerCap, Item, u64)` function.\n * Place an item to the Kiosk and list it for sale.\n */\nexport function placeAndList(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titem: ObjectArgument,\n\tprice: string | bigint,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::place_and_list`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item), tx.pure(price, 'u64')],\n\t});\n}\n\n/**\n * Call the `kiosk::purchase<T>(Kiosk, ID, Coin<SUI>)` function and receive an Item and\n * a TransferRequest which needs to be dealt with (via a matching TransferPolicy).\n */\nexport function purchase(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpayment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, transferRequest] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::purchase`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), tx.pure(itemId, 'address'), objArg(tx, payment)],\n\t});\n\n\treturn [item, transferRequest];\n}\n\n/**\n * Call the `kiosk::withdraw(Kiosk, KioskOwnerCap, Option<u64>)` function and receive a Coin<SUI>.\n * If the amount is null, then the entire balance will be withdrawn.\n */\nexport function withdrawFromKiosk(\n\ttx: TransactionBlock,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\tamount: string | bigint | null,\n): TransactionArgument {\n\tlet amountArg =\n\t\tamount !== null\n\t\t\t? tx.pure(\n\t\t\t\t\t{\n\t\t\t\t\t\tSome: amount,\n\t\t\t\t\t},\n\t\t\t\t\t'Option<u64>',\n\t\t\t )\n\t\t\t: tx.pure({ None: true }, 'Option<u64>');\n\n\tlet [coin] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::withdraw`,\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n\t});\n\n\treturn coin;\n}\n\n/**\n * Call the `kiosk::borrow<T>(Kiosk, KioskOwnerCap, ID): &T` function.\n * Immutably borrow an item from the Kiosk.\n */\nexport function borrow(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_mut<T>(Kiosk, KioskOwnerCap, ID): &mut T` function.\n * Mutably borrow an item from the Kiosk.\n */\nexport function borrowMut(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): TransactionArgument {\n\tlet [item] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_mut`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn item;\n}\n\n/**\n * Call the `kiosk::borrow_value<T>(Kiosk, KioskOwnerCap, ID): T` function.\n * Immutably borrow an item from the Kiosk and return it in the end.\n *\n * Requires calling `returnValue` to return the item.\n */\nexport function borrowValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\tkioskCap: ObjectArgument,\n\titemId: string,\n): [TransactionArgument, TransactionArgument] {\n\tlet [item, promise] = tx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::borrow_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), objArg(tx, kioskCap), tx.pure(itemId, 'address')],\n\t});\n\n\treturn [item, promise];\n}\n\n/**\n * Call the `kiosk::return_value<T>(Kiosk, Item, Borrow)` function.\n * Return an item to the Kiosk after it was `borrowValue`-d.\n */\nexport function returnValue(\n\ttx: TransactionBlock,\n\titemType: string,\n\tkiosk: ObjectArgument,\n\titem: TransactionArgument,\n\tpromise: TransactionArgument,\n): void {\n\ttx.moveCall({\n\t\ttarget: `${KIOSK_MODULE}::return_val`,\n\t\ttypeArguments: [itemType],\n\t\targuments: [objArg(tx, kiosk), item, promise],\n\t});\n}\n\n/**\n * Completes the full purchase flow that includes:\n * 1. Purchasing the item.\n * 2. Resolving all the transfer policies (if any).\n * 3. Returns the item and whether the user can transfer it or not.\n *\n * If the item can be transferred, there's an extra transaction required by the user\n * to transfer it to an address or place it in their kiosk.\n */\nexport function purchaseAndResolvePolicies(\n\ttx: TransactionBlock,\n\titemType: string,\n\tprice: string,\n\tkiosk: ObjectArgument,\n\titemId: string,\n\tpolicy: TransferPolicy,\n\tenvironment: RulesEnvironmentParam,\n\textraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n\t// if we don't pass the listing or the listing doens't have a price, return.\n\tif (price === undefined || typeof price !== 'string')\n\t\tthrow new Error(`Price of the listing is not supplied.`);\n\n\t// Split the coin for the amount of the listing.\n\tconst coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n\t// initialize the purchase `kiosk::purchase`\n\tconst [purchasedItem, transferRequest] = purchase(tx, itemType, kiosk, itemId, coin);\n\n\t// Start resolving rules.\n\t// Right now we support `kiosk_lock_rule` and `royalty_rule`.\n\t// They can also be supplied in parallel (supports combination).\n\tlet hasKioskLockRule = false;\n\n\tfor (let rule of policy.rules) {\n\t\tconst ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n\t\tswitch (ruleWithoutAddr) {\n\t\t\tcase ROYALTY_RULE:\n\t\t\t\tresolveRoyaltyRule(tx, itemType, price, policy.id, transferRequest, environment);\n\t\t\t\tbreak;\n\t\t\tcase KIOSK_LOCK_RULE:\n\t\t\t\tif (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n\t\t\t\t\t);\n\t\t\t\thasKioskLockRule = true;\n\t\t\t\tresolveKioskLockRule(\n\t\t\t\t\ttx,\n\t\t\t\t\titemType,\n\t\t\t\t\tpurchasedItem,\n\t\t\t\t\textraParams.ownedKiosk,\n\t\t\t\t\textraParams.ownedKioskCap,\n\t\t\t\t\tpolicy.id,\n\t\t\t\t\ttransferRequest,\n\t\t\t\t\tenvironment,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// confirm the Transfer Policy request.\n\tconfirmRequest(tx, itemType, policy.id, transferRequest);\n\n\treturn {\n\t\titem: purchasedItem,\n\t\tcanTransfer: !hasKioskLockRule,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionBlock } from '@mysten/sui.js';\nimport { ObjectArgument, RulesEnvironmentParam } from '../types';\nimport { getRulePackageAddress, objArg } from '../utils';\n\n/**\n * Adds the Kiosk Royalty rule to the Transfer Policy.\n * You can pass the percentage, as well as a minimum amount.\n * The royalty that will be paid is the MAX(percentage, minAmount).\n * \tYou can pass 0 in either value if you want only percentage royalty, or a fixed amount fee.\n * \t(but you should define at least one of them for the rule to make sense).\n *\n * \t@param percentageBps The royalty percentage in basis points. Use `percentageToBasisPoints` helper to convert from percentage [0,100].\n * \t@param minAmount The minimum royalty amount per request in MIST.\n */\nexport function attachRoyaltyRule(\n\ttx: TransactionBlock,\n\ttype: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tpercentageBps: number | string, // this is in basis points.\n\tminAmount: number | string,\n\tenvironment: RulesEnvironmentParam,\n) {\n\tif (Number(percentageBps) < 0 || Number(percentageBps) > 10_000)\n\t\tthrow new Error('Invalid basis point percentage. Use a value between [0,10000].');\n\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::royalty_rule::add`,\n\t\ttypeArguments: [type],\n\t\targuments: [\n\t\t\tobjArg(tx, policy),\n\t\t\tobjArg(tx, policyCap),\n\t\t\ttx.pure(percentageBps, 'u16'),\n\t\t\ttx.pure(minAmount, 'u64'),\n\t\t],\n\t});\n}\n\n/**\n * Adds the Kiosk Lock Rule to the Transfer Policy.\n * This Rule forces buyer to lock the item in the kiosk, preserving strong royalties.\n */\nexport function attachKioskLockRule(\n\ttx: TransactionBlock,\n\ttype: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tenvironment: RulesEnvironmentParam,\n) {\n\ttx.moveCall({\n\t\ttarget: `${getRulePackageAddress(environment)}::kiosk_lock_rule::add`,\n\t\ttypeArguments: [type],\n\t\targuments: [objArg(tx, policy), objArg(tx, policyCap)],\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiObjectData, SuiObjectResponse } from '@mysten/sui.js/client';\nimport { isValidSuiAddress } from '@mysten/sui.js/utils';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetKioskObject,\n} from '../utils';\nimport {\n\tFetchKioskOptions,\n\tKIOSK_OWNER_CAP,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types';\nimport { SuiClient, PaginationArguments } from '@mysten/sui.js/client';\n\nexport async function fetchKiosk(\n\tclient: SuiClient,\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);\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] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices\n\t\t\t? client.multiGetObjects({\n\t\t\t\t\tids: kioskData.listingIds,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tshowContent: true,\n\t\t\t\t\t},\n\t\t\t })\n\t\t\t: 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\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 */\nexport async function getOwnedKiosks(\n\tclient: SuiClient,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t},\n): Promise<OwnedKiosks> {\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\n\t// fetch owned kiosk caps, paginated.\n\tconst { data, hasNextPage, nextCursor } = await client.getOwnedObjects({\n\t\towner: address,\n\t\tfilter: { StructType: KIOSK_OWNER_CAP },\n\t\toptions: {\n\t\t\tshowContent: true,\n\t\t},\n\t\t...(options?.pagination || {}),\n\t});\n\n\t// get kioskIds from the OwnerCaps.\n\tconst kioskIdList = data?.map((x: SuiObjectResponse) => {\n\t\tconst fields = x.data?.content?.dataType === 'moveObject' ? x.data.content.fields : null;\n\t\treturn (fields as { for: string })?.for;\n\t});\n\n\t// clean up data that might have an error in them.\n\t// only return valid objects.\n\tconst filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];\n\n\treturn {\n\t\tnextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: filteredData.map((x, idx) => ({\n\t\t\tdigest: x.digest,\n\t\t\tversion: x.version,\n\t\t\tobjectId: x.objectId,\n\t\t\tkioskId: kioskIdList[idx],\n\t\t})),\n\t\tkioskIds: kioskIdList,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiClient } from '@mysten/sui.js/client';\nimport { bcs } from '../bcs';\nimport { TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE, TransferPolicy } from '../types';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The seach 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 * @param provider\n * @param type\n */\nexport async function queryTransferPolicy(\n\tclient: SuiClient,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\t// console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\tconst { data } = await client.queryEvents({\n\t\tquery: {\n\t\t\tMoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n\t\t},\n\t});\n\n\tconst search = data.map((event) => event.parsedJson as { id: string });\n\tconst policies = await client.multiGetObjects({\n\t\tids: search.map((policy) => policy.id),\n\t\toptions: { showBcs: true, showOwner: true },\n\t});\n\n\treturn policies\n\t\t.filter((policy) => !!policy && 'data' in policy)\n\t\t.map(({ data: policy }) => {\n\t\t\t// should never happen; policies are objects and fetched via an event.\n\t\t\t// policies are filtered for null and undefined above.\n\t\t\tif (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n\t\t\t\tthrow new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);\n\t\t\t}\n\n\t\t\tlet parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n\t\t\treturn {\n\t\t\t\tid: policy?.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: policy?.owner!,\n\t\t\t\trules: parsed.rules,\n\t\t\t\tbalance: parsed.balance,\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ import { TransactionBlock } from '@mysten/sui.js';
2
+ import { ObjectArgument, RulesEnvironmentParam } from '../types';
3
+ /**
4
+ * Adds the Kiosk Royalty rule to the Transfer Policy.
5
+ * You can pass the percentage, as well as a minimum amount.
6
+ * The royalty that will be paid is the MAX(percentage, minAmount).
7
+ * You can pass 0 in either value if you want only percentage royalty, or a fixed amount fee.
8
+ * (but you should define at least one of them for the rule to make sense).
9
+ *
10
+ * @param percentageBps The royalty percentage in basis points. Use `percentageToBasisPoints` helper to convert from percentage [0,100].
11
+ * @param minAmount The minimum royalty amount per request in MIST.
12
+ */
13
+ export declare function attachRoyaltyRule(tx: TransactionBlock, type: string, policy: ObjectArgument, policyCap: ObjectArgument, percentageBps: number | string, // this is in basis points.
14
+ minAmount: number | string, environment: RulesEnvironmentParam): void;
15
+ /**
16
+ * Adds the Kiosk Lock Rule to the Transfer Policy.
17
+ * This Rule forces buyer to lock the item in the kiosk, preserving strong royalties.
18
+ */
19
+ export declare function attachKioskLockRule(tx: TransactionBlock, type: string, policy: ObjectArgument, policyCap: ObjectArgument, environment: RulesEnvironmentParam): void;
package/dist/utils.d.ts CHANGED
@@ -39,3 +39,10 @@ export declare function getRulePackageAddress(environment: RulesEnvironmentParam
39
39
  * RPC calls that allow filtering of Type / batch fetching of spec
40
40
  */
41
41
  export declare function getAllDynamicFields(client: SuiClient, parentId: string, pagination: PaginationArguments<string>): Promise<DynamicFieldInfo[]>;
42
+ /**
43
+ * Converts a number to basis points.
44
+ * Supports up to 2 decimal points.
45
+ * E.g 9.95 -> 995
46
+ * @param percentage A percentage amount in the range [0, 100] including decimals.
47
+ */
48
+ export declare function percentageToBasisPoints(percentage: number): number;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@mysten/kiosk",
3
3
  "author": "Mysten Labs <build@mystenlabs.com>",
4
4
  "description": "Sui Kiosk library",
5
- "version": "0.4.0",
5
+ "version": "0.5.0",
6
6
  "license": "Apache-2.0",
7
7
  "main": "./dist/index.js",
8
8
  "module": "./dist/index.mjs",
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "@mysten/sui.js": "0.38.0"
27
+ "@mysten/sui.js": "0.40.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "tsup": "^7.1.0",
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  export * from './tx/kiosk';
5
5
  export * from './tx/transfer-policy';
6
+ export * from './tx/rules';
6
7
  export * from './query/kiosk';
7
8
  export * from './bcs';
8
9
  export * from './utils';
@@ -0,0 +1,58 @@
1
+ // Copyright (c) Mysten Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { TransactionBlock } from '@mysten/sui.js';
5
+ import { ObjectArgument, RulesEnvironmentParam } from '../types';
6
+ import { getRulePackageAddress, objArg } from '../utils';
7
+
8
+ /**
9
+ * Adds the Kiosk Royalty rule to the Transfer Policy.
10
+ * You can pass the percentage, as well as a minimum amount.
11
+ * The royalty that will be paid is the MAX(percentage, minAmount).
12
+ * You can pass 0 in either value if you want only percentage royalty, or a fixed amount fee.
13
+ * (but you should define at least one of them for the rule to make sense).
14
+ *
15
+ * @param percentageBps The royalty percentage in basis points. Use `percentageToBasisPoints` helper to convert from percentage [0,100].
16
+ * @param minAmount The minimum royalty amount per request in MIST.
17
+ */
18
+ export function attachRoyaltyRule(
19
+ tx: TransactionBlock,
20
+ type: string,
21
+ policy: ObjectArgument,
22
+ policyCap: ObjectArgument,
23
+ percentageBps: number | string, // this is in basis points.
24
+ minAmount: number | string,
25
+ environment: RulesEnvironmentParam,
26
+ ) {
27
+ if (Number(percentageBps) < 0 || Number(percentageBps) > 10_000)
28
+ throw new Error('Invalid basis point percentage. Use a value between [0,10000].');
29
+
30
+ tx.moveCall({
31
+ target: `${getRulePackageAddress(environment)}::royalty_rule::add`,
32
+ typeArguments: [type],
33
+ arguments: [
34
+ objArg(tx, policy),
35
+ objArg(tx, policyCap),
36
+ tx.pure(percentageBps, 'u16'),
37
+ tx.pure(minAmount, 'u64'),
38
+ ],
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Adds the Kiosk Lock Rule to the Transfer Policy.
44
+ * This Rule forces buyer to lock the item in the kiosk, preserving strong royalties.
45
+ */
46
+ export function attachKioskLockRule(
47
+ tx: TransactionBlock,
48
+ type: string,
49
+ policy: ObjectArgument,
50
+ policyCap: ObjectArgument,
51
+ environment: RulesEnvironmentParam,
52
+ ) {
53
+ tx.moveCall({
54
+ target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::add`,
55
+ typeArguments: [type],
56
+ arguments: [objArg(tx, policy), objArg(tx, policyCap)],
57
+ });
58
+ }
package/src/utils.ts CHANGED
@@ -198,3 +198,15 @@ export async function getAllDynamicFields(
198
198
 
199
199
  return data;
200
200
  }
201
+
202
+ /**
203
+ * Converts a number to basis points.
204
+ * Supports up to 2 decimal points.
205
+ * E.g 9.95 -> 995
206
+ * @param percentage A percentage amount in the range [0, 100] including decimals.
207
+ */
208
+ export function percentageToBasisPoints(percentage: number) {
209
+ if (percentage < 0 || percentage > 100)
210
+ throw new Error('Percentage needs to be in the [0,100] range.');
211
+ return Math.ceil(percentage * 100);
212
+ }