@mysten/kiosk 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @mysten/kiosk
2
2
 
3
+ ## 0.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 6a2a42d779: Add `getOwnedKiosks` query to easily get owned kiosks and their ownerCaps for an address
8
+ - abf6ad381e: Refactor the fetchKiosk function to return all content instead of paginating, to prevent missing data
9
+ - d72fdb5a5c: Fix on createTransferPolicy method. Updated type arguments for public_share_object command.
10
+ - Updated dependencies [3ea9adb71a]
11
+ - Updated dependencies [1cfb1c9da3]
12
+ - Updated dependencies [1cfb1c9da3]
13
+ - Updated dependencies [fb3bb9118a]
14
+ - @mysten/sui.js@0.36.0
15
+
3
16
  ## 0.3.0
4
17
 
5
18
  ### Minor Changes
package/README.md CHANGED
@@ -33,20 +33,14 @@ const provider = new JsonRpcProvider(
33
33
  const getKiosk = async () => {
34
34
  const kioskAddress = `0xSomeKioskAddress`;
35
35
 
36
- const {
37
- data: res,
38
- nextCursor,
39
- hasNextPage,
40
- } = await fetchKiosk(
36
+ const { data } = await fetchKiosk(
41
37
  provider,
42
38
  kioskAddress,
43
- { limit: 100 },
39
+ {}, // empty pagination, currently disabled.
44
40
  { withListingPrices: true, withKioskFields: true },
45
- ); // could also add `cursor` for pagination
41
+ );
46
42
 
47
- console.log(res); // { items: [], itemIds: [], listingIds: [], kiosk: {...} }
48
- console.log(nextCursor); // null
49
- console.log(hasNextPage); // false
43
+ console.log(data); // { items: [], itemIds: [], listingIds: [], kiosk: {...} }
50
44
  };
51
45
  ```
52
46
 
package/dist/index.js CHANGED
@@ -48,7 +48,9 @@ __export(src_exports, {
48
48
  delist: () => delist,
49
49
  extractKioskData: () => extractKioskData,
50
50
  fetchKiosk: () => fetchKiosk,
51
+ getAllDynamicFields: () => getAllDynamicFields,
51
52
  getKioskObject: () => getKioskObject,
53
+ getOwnedKiosks: () => getOwnedKiosks,
52
54
  getRulePackageAddress: () => getRulePackageAddress,
53
55
  getTypeWithoutPackageAddress: () => getTypeWithoutPackageAddress,
54
56
  list: () => list,
@@ -232,6 +234,22 @@ function getRulePackageAddress(environment) {
232
234
  }
233
235
  return rulesPackageAddresses[environment.env];
234
236
  }
237
+ async function getAllDynamicFields(provider, parentId, pagination) {
238
+ let hasNextPage = true;
239
+ let cursor = void 0;
240
+ const data = [];
241
+ while (hasNextPage) {
242
+ const result = await provider.getDynamicFields({
243
+ parentId,
244
+ limit: pagination.limit || void 0,
245
+ cursor
246
+ });
247
+ data.push(...result.data);
248
+ hasNextPage = result.hasNextPage;
249
+ cursor = result.nextCursor;
250
+ }
251
+ return data;
252
+ }
235
253
 
236
254
  // src/tx/transfer-policy.ts
237
255
  function createTransferPolicy(tx, itemType, publisher) {
@@ -242,7 +260,7 @@ function createTransferPolicy(tx, itemType, publisher) {
242
260
  });
243
261
  tx.moveCall({
244
262
  target: `0x2::transfer::public_share_object`,
245
- typeArguments: [itemType],
263
+ typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],
246
264
  arguments: [transferPolicy]
247
265
  });
248
266
  return transferPolicyCap;
@@ -499,11 +517,9 @@ function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy,
499
517
  }
500
518
 
501
519
  // src/query/kiosk.ts
520
+ var import_sui3 = require("@mysten/sui.js");
502
521
  async function fetchKiosk(provider, kioskId, pagination, options) {
503
- const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({
504
- parentId: kioskId,
505
- ...pagination
506
- });
522
+ const data = await getAllDynamicFields(provider, kioskId, pagination);
507
523
  const listings = [];
508
524
  const lockedItemIds = [];
509
525
  const kioskData = extractKioskData(data, listings, lockedItemIds);
@@ -522,8 +538,40 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
522
538
  attachLockedItems(kioskData, lockedItemIds);
523
539
  return {
524
540
  data: kioskData,
541
+ nextCursor: null,
542
+ hasNextPage: false
543
+ };
544
+ }
545
+ async function getOwnedKiosks(provider, address, options) {
546
+ if (!(0, import_sui3.isValidSuiAddress)(address))
547
+ return {
548
+ nextCursor: null,
549
+ hasNextPage: false,
550
+ kioskOwnerCaps: [],
551
+ kioskIds: []
552
+ };
553
+ const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({
554
+ owner: address,
555
+ filter: { StructType: KIOSK_OWNER_CAP },
556
+ options: {
557
+ showContent: true
558
+ },
559
+ ...options?.pagination || {}
560
+ });
561
+ const kioskIdList = data?.map(
562
+ (x) => (0, import_sui3.getObjectFields)(x)?.for
563
+ );
564
+ const filteredData = data.filter((x) => "data" in x).map((x) => x.data);
565
+ return {
525
566
  nextCursor,
526
- hasNextPage
567
+ hasNextPage,
568
+ kioskOwnerCaps: filteredData.map((x, idx) => ({
569
+ digest: x.digest,
570
+ version: x.version,
571
+ objectId: x.objectId,
572
+ kioskId: kioskIdList[idx]
573
+ })),
574
+ kioskIds: kioskIdList
527
575
  };
528
576
  }
529
577
 
@@ -585,7 +633,9 @@ async function queryTransferPolicy(provider, type) {
585
633
  delist,
586
634
  extractKioskData,
587
635
  fetchKiosk,
636
+ getAllDynamicFields,
588
637
  getKioskObject,
638
+ getOwnedKiosks,
589
639
  getRulePackageAddress,
590
640
  getTypeWithoutPackageAddress,
591
641
  list,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.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 {\n JsonRpcProvider,\n ObjectId,\n SharedObjectRef,\n SuiObjectRef,\n SuiObjectResponse,\n TransactionArgument,\n TransactionBlock,\n getObjectFields,\n} from '@mysten/sui.js';\nimport { KioskData, KioskListing } from './query/kiosk';\nimport { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, RulesEnvironmentParam } from './types';\nimport {\n MAINNET_RULES_PACKAGE_ADDRESS,\n TESTNET_RULES_PACKAGE_ADDRESS,\n} from './constants';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n mainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n testnet: TESTNET_RULES_PACKAGE_ADDRESS,\n devnet: '',\n custom: 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 tx: TransactionBlock,\n arg: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n if (typeof arg === 'string') {\n return tx.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return tx.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return tx.sharedObjectRef(arg);\n }\n\n if ('kind' in arg) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(\n provider: JsonRpcProvider,\n id: string,\n): Promise<Kiosk> {\n const queryRes = await provider.getObject({ id, options: { showBcs: true } });\n\n if (!queryRes || queryRes.error || !queryRes.data) {\n throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n }\n\n if (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n }\n\n return bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n data: DynamicFieldInfo[],\n listings: KioskListing[],\n lockedItemIds: string[],\n): KioskData {\n return data.reduce<KioskData>(\n (acc: KioskData, val: DynamicFieldInfo) => {\n const type = getTypeWithoutPackageAddress(val.name.type);\n\n switch (type) {\n case 'kiosk::Item':\n acc.itemIds.push(val.objectId);\n acc.items.push({\n objectId: val.objectId,\n type: val.objectType,\n isLocked: false,\n });\n break;\n case 'kiosk::Listing':\n acc.listingIds.push(val.objectId);\n listings.push({\n objectId: val.name.value.id,\n listingId: val.objectId,\n isExclusive: val.name.value.is_exclusive,\n });\n break;\n case 'kiosk::Lock':\n lockedItemIds?.push(val.name.value.id);\n break;\n }\n return acc;\n },\n { items: [], itemIds: [], listingIds: [], extensions: [] },\n );\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n return type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n kioskData: KioskData,\n listings: KioskListing[],\n listingObjects: SuiObjectResponse[],\n) {\n // map item listings as {item_id: KioskListing}\n // for easier mapping on the nex\n const itemListings = listings.reduce<Record<ObjectId, KioskListing>>(\n (acc: Record<ObjectId, KioskListing>, item, idx) => {\n acc[item.objectId] = { ...item };\n\n // return in case we don't have any listing objects.\n // that's the case when we don't have the `listingPrices` included.\n if (listingObjects.length === 0) return acc;\n\n const data = getObjectFields(listingObjects[idx]);\n if (!data) return acc;\n\n acc[item.objectId].price = data.value;\n return acc;\n },\n {},\n );\n\n kioskData.items.map((item) => {\n item.listing = itemListings[item.objectId] || undefined;\n });\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(\n kioskData: KioskData,\n lockedItemIds: ObjectId[],\n) {\n // map lock status in an array of type { item_id: true }\n const lockedStatuses = lockedItemIds.reduce<Record<ObjectId, boolean>>(\n (acc: Record<ObjectId, boolean>, item: string) => {\n acc[item] = true;\n return acc;\n },\n {},\n );\n\n // parse lockedItemIds and attach their locked status.\n kioskData.items.map((item) => {\n item.isLocked = lockedStatuses[item.objectId] || false;\n });\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(\n environment: RulesEnvironmentParam,\n): string {\n // if we have custom environment, we return it.\n if (environment.env === 'custom') {\n if (!environment.address)\n throw new Error('Please supply the custom package address for rules.');\n return environment.address;\n }\n return rulesPackageAddresses[environment.env];\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js';\nimport {\n KIOSK_PURCHASE_CAP,\n KIOSK_TYPE,\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n id: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n id: 'address',\n balance: 'u64',\n rules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument } from '@mysten/sui.js';\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 id: string;\n profits: string;\n owner: string;\n itemCount: number;\n allowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n id: string;\n kioskId: string;\n itemId: string;\n minPrice: 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 item: TransactionArgument;\n canTransfer: 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 ownedKiosk?: ObjectArgument;\n ownedKioskCap?: ObjectArgument;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js';\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 id: string;\n type: string;\n balance: string;\n rules: string[];\n owner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiAddress } from '@mysten/sui.js';\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support enivronments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: SuiAddress };\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 env: 'custom',\n address,\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 'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n '0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument, TransactionBlock } from '@mysten/sui.js';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n ObjectArgument,\n RulesEnvironmentParam,\n TRANSFER_POLICY_MODULE,\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 tx: TransactionBlock,\n itemType: string,\n publisher: ObjectArgument,\n): TransactionArgument {\n let [transferPolicy, transferPolicyCap] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::new`,\n typeArguments: [itemType],\n arguments: [objArg(tx, publisher)],\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [itemType],\n arguments: [transferPolicy],\n });\n\n return transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n policyCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure({ Some: amount }, 'Option<u64>')\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [profits] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::withdraw`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n });\n\n return profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n request: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), request],\n });\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 tx: TransactionBlock,\n itemType: string,\n ruleType: string,\n configType: string,\n policy: ObjectArgument,\n policyCap: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n typeArguments: [itemType, ruleType, configType],\n arguments: [objArg(tx, policy), policyCap],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n const policyObj = objArg(tx, policyId);\n // calculates the amount\n const [amount] = tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n typeArguments: [itemType],\n arguments: [policyObj, objArg(tx, price)],\n });\n\n // splits the coin.\n const feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n // pays the policy\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n typeArguments: [itemType],\n arguments: [policyObj, transferRequest, feeCoin],\n });\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 tx: TransactionBlock,\n itemType: string,\n item: TransactionArgument,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n // lock item in the kiosk.\n lock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n // proves that the item is locked in the kiosk to the TP.\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n typeArguments: [itemType],\n arguments: [transferRequest, objArg(tx, kiosk)],\n });\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n SuiAddress,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport {\n confirmRequest,\n resolveKioskLockRule,\n resolveRoyaltyRule,\n} from './transfer-policy';\nimport {\n KIOSK_LOCK_RULE,\n KIOSK_MODULE,\n KIOSK_TYPE,\n ObjectArgument,\n PurchaseAndResolvePoliciesResponse,\n PurchaseOptionalParams,\n ROYALTY_RULE,\n RulesEnvironmentParam,\n TransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(\n tx: TransactionBlock,\n): [TransactionArgument, TransactionArgument] {\n let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n return [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 let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [KIOSK_TYPE],\n arguments: [kiosk],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policy: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::lock`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, policy),\n objArg(tx, item),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::take`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::delist`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place_and_list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, item),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n payment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n let [item, transferRequest] = tx.moveCall({\n target: `${KIOSK_MODULE}::purchase`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n tx.pure(itemId, 'address'),\n objArg(tx, payment),\n ],\n });\n\n return [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 tx: TransactionBlock,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure(\n {\n Some: amount,\n },\n 'Option<u64>',\n )\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [coin] = tx.moveCall({\n target: `${KIOSK_MODULE}::withdraw`,\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_mut`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): [TransactionArgument, TransactionArgument] {\n let [item, promise] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_val`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return [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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n item: TransactionArgument,\n promise: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::return_val`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), item, promise],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n policy: TransferPolicy,\n environment: RulesEnvironmentParam,\n extraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n // if we don't pass the listing or the listing doens't have a price, return.\n if (price === undefined || typeof price !== 'string')\n throw new Error(`Price of the listing is not supplied.`);\n\n // Split the coin for the amount of the listing.\n const coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n // initialize the purchase `kiosk::purchase`\n const [purchasedItem, transferRequest] = purchase(\n tx,\n itemType,\n kiosk,\n itemId,\n coin,\n );\n\n // Start resolving rules.\n // Right now we support `kiosk_lock_rule` and `royalty_rule`.\n // They can also be supplied in parallel (supports combination).\n let hasKioskLockRule = false;\n\n for (let rule of policy.rules) {\n const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n switch (ruleWithoutAddr) {\n case ROYALTY_RULE:\n resolveRoyaltyRule(\n tx,\n itemType,\n price,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n case KIOSK_LOCK_RULE:\n if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n throw new Error(\n `This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n );\n hasKioskLockRule = true;\n resolveKioskLockRule(\n tx,\n itemType,\n purchasedItem,\n extraParams.ownedKiosk,\n extraParams.ownedKioskCap,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n default:\n break;\n }\n }\n\n // confirm the Transfer Policy request.\n confirmRequest(tx, itemType, policy.id, transferRequest);\n\n return {\n item: purchasedItem,\n canTransfer: !hasKioskLockRule,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n JsonRpcProvider,\n ObjectId,\n ObjectType,\n PaginationArguments,\n SuiAddress,\n} from '@mysten/sui.js';\nimport {\n attachListingsAndPrices,\n attachLockedItems,\n extractKioskData,\n getKioskObject,\n} from '../utils';\nimport { Kiosk } from '../types';\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 /** The ID of the Item */\n objectId: ObjectId;\n /**\n * Whether or not there's a `PurchaseCap` issued. `true` means that\n * the listing is controlled by some logic and can't be purchased directly.\n *\n * TODO: consider renaming the field for better indication.\n */\n isExclusive: boolean;\n /** The ID of the listing */\n listingId: ObjectId;\n price?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /** The type of the Item */\n type: ObjectType;\n /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n isLocked: boolean;\n /** Optional listing */\n listing?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n items: KioskItem[];\n itemIds: ObjectId[];\n listingIds: ObjectId[];\n kiosk?: Kiosk;\n extensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n data: KioskData;\n nextCursor: string | null;\n hasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n withKioskFields?: boolean;\n withListingPrices?: boolean;\n};\n\nexport async function fetchKiosk(\n provider: JsonRpcProvider,\n kioskId: SuiAddress,\n pagination: PaginationArguments<string>,\n options: FetchKioskOptions,\n): Promise<PagedKioskData> {\n const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({\n parentId: kioskId,\n ...pagination,\n });\n\n const listings: KioskListing[] = [];\n const lockedItemIds: ObjectId[] = [];\n\n // extracted kiosk data.\n const kioskData = extractKioskData(data, listings, lockedItemIds);\n\n // split the fetching in two queries as we are most likely passing different options for each kind.\n // For items, we usually seek the Display.\n // For listings we usually seek the DF value (price) / exclusivity.\n const [kiosk, listingObjects] = await Promise.all([\n options.withKioskFields\n ? getKioskObject(provider, kioskId)\n : Promise.resolve(undefined),\n options.withListingPrices\n ? provider.multiGetObjects({\n ids: kioskData.listingIds,\n options: {\n showContent: true,\n },\n })\n : Promise.resolve([]),\n ]);\n\n if (options.withKioskFields) kioskData.kiosk = kiosk;\n // attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n attachListingsAndPrices(kioskData, listings, listingObjects);\n // add `locked` status to items that are locked.\n attachLockedItems(kioskData, lockedItemIds);\n\n return {\n data: kioskData,\n nextCursor,\n hasNextPage,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { JsonRpcProvider } from '@mysten/sui.js';\nimport { bcs } from '../bcs';\nimport {\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n TransferPolicy,\n} 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 provider: JsonRpcProvider,\n type: string,\n): Promise<TransferPolicy[]> {\n // console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n const { data } = await provider.queryEvents({\n query: {\n MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n },\n });\n\n const search = data.map((event) => event.parsedJson as { id: string });\n const policies = await provider.multiGetObjects({\n ids: search.map((policy) => policy.id),\n options: { showBcs: true, showOwner: true },\n });\n\n return policies\n .filter((policy) => !!policy && 'data' in policy)\n .map(({ data: policy }) => {\n // should never happen; policies are objects and fetched via an event.\n // policies are filtered for null and undefined above.\n if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n throw new Error(\n `Invalid policy: ${policy?.objectId}, expected object, got package`,\n );\n }\n\n let parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n return {\n id: policy?.objectId,\n type: `${TRANSFER_POLICY_TYPE}<${type}>`,\n owner: policy?.owner!,\n rules: parsed.rules,\n balance: parsed.balance,\n } as TransferPolicy;\n });\n}\n"],"mappings":"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","names":["import_sui"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.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 {\n JsonRpcProvider,\n ObjectId,\n PaginationArguments,\n SharedObjectRef,\n SuiObjectRef,\n SuiObjectResponse,\n TransactionArgument,\n TransactionBlock,\n getObjectFields,\n} from '@mysten/sui.js';\nimport { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';\nimport { bcs } from './bcs';\nimport {\n KIOSK_TYPE,\n Kiosk,\n KioskData,\n KioskListing,\n RulesEnvironmentParam,\n} from './types';\nimport {\n MAINNET_RULES_PACKAGE_ADDRESS,\n TESTNET_RULES_PACKAGE_ADDRESS,\n} from './constants';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n mainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n testnet: TESTNET_RULES_PACKAGE_ADDRESS,\n devnet: '',\n custom: 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 tx: TransactionBlock,\n arg: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n if (typeof arg === 'string') {\n return tx.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return tx.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return tx.sharedObjectRef(arg);\n }\n\n if ('kind' in arg) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(\n provider: JsonRpcProvider,\n id: string,\n): Promise<Kiosk> {\n const queryRes = await provider.getObject({ id, options: { showBcs: true } });\n\n if (!queryRes || queryRes.error || !queryRes.data) {\n throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n }\n\n if (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n }\n\n return bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n data: DynamicFieldInfo[],\n listings: KioskListing[],\n lockedItemIds: string[],\n): KioskData {\n return data.reduce<KioskData>(\n (acc: KioskData, val: DynamicFieldInfo) => {\n const type = getTypeWithoutPackageAddress(val.name.type);\n\n switch (type) {\n case 'kiosk::Item':\n acc.itemIds.push(val.objectId);\n acc.items.push({\n objectId: val.objectId,\n type: val.objectType,\n isLocked: false,\n });\n break;\n case 'kiosk::Listing':\n acc.listingIds.push(val.objectId);\n listings.push({\n objectId: val.name.value.id,\n listingId: val.objectId,\n isExclusive: val.name.value.is_exclusive,\n });\n break;\n case 'kiosk::Lock':\n lockedItemIds?.push(val.name.value.id);\n break;\n }\n return acc;\n },\n { items: [], itemIds: [], listingIds: [], extensions: [] },\n );\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n return type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n kioskData: KioskData,\n listings: KioskListing[],\n listingObjects: SuiObjectResponse[],\n) {\n // map item listings as {item_id: KioskListing}\n // for easier mapping on the nex\n const itemListings = listings.reduce<Record<ObjectId, KioskListing>>(\n (acc: Record<ObjectId, KioskListing>, item, idx) => {\n acc[item.objectId] = { ...item };\n\n // return in case we don't have any listing objects.\n // that's the case when we don't have the `listingPrices` included.\n if (listingObjects.length === 0) return acc;\n\n const data = getObjectFields(listingObjects[idx]);\n if (!data) return acc;\n\n acc[item.objectId].price = data.value;\n return acc;\n },\n {},\n );\n\n kioskData.items.map((item) => {\n item.listing = itemListings[item.objectId] || undefined;\n });\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(\n kioskData: KioskData,\n lockedItemIds: ObjectId[],\n) {\n // map lock status in an array of type { item_id: true }\n const lockedStatuses = lockedItemIds.reduce<Record<ObjectId, boolean>>(\n (acc: Record<ObjectId, boolean>, item: string) => {\n acc[item] = true;\n return acc;\n },\n {},\n );\n\n // parse lockedItemIds and attach their locked status.\n kioskData.items.map((item) => {\n item.isLocked = lockedStatuses[item.objectId] || false;\n });\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(\n environment: RulesEnvironmentParam,\n): string {\n // if we have custom environment, we return it.\n if (environment.env === 'custom') {\n if (!environment.address)\n throw new Error('Please supply the custom package address for rules.');\n return environment.address;\n }\n return 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 provider: JsonRpcProvider,\n parentId: ObjectId,\n pagination: PaginationArguments<string>,\n) {\n let hasNextPage = true;\n let cursor = undefined;\n const data: DynamicFieldInfo[] = [];\n\n while (hasNextPage) {\n const result = await provider.getDynamicFields({\n parentId,\n limit: pagination.limit || undefined,\n cursor,\n });\n data.push(...result.data);\n hasNextPage = result.hasNextPage;\n cursor = result.nextCursor;\n }\n\n return data;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js';\nimport {\n KIOSK_PURCHASE_CAP,\n KIOSK_TYPE,\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n id: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n id: 'address',\n balance: 'u64',\n rules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ObjectDigest,\n ObjectId,\n ObjectType,\n PaginatedObjectsResponse,\n TransactionArgument,\n} from '@mysten/sui.js';\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 id: string;\n profits: string;\n owner: string;\n itemCount: number;\n allowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n id: string;\n kioskId: string;\n itemId: string;\n minPrice: 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 item: TransactionArgument;\n canTransfer: 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 ownedKiosk?: ObjectArgument;\n ownedKioskCap?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /**\n * Whether or not there's a `PurchaseCap` issued. `true` means that\n * the listing is controlled by some logic and can't be purchased directly.\n *\n * TODO: consider renaming the field for better indication.\n */\n isExclusive: boolean;\n /** The ID of the listing */\n listingId: ObjectId;\n price?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /** The type of the Item */\n type: ObjectType;\n /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n isLocked: boolean;\n /** Optional listing */\n listing?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n items: KioskItem[];\n itemIds: ObjectId[];\n listingIds: ObjectId[];\n kiosk?: Kiosk;\n extensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n data: KioskData;\n nextCursor: string | null;\n hasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n withKioskFields?: boolean;\n withListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n kioskOwnerCaps: KioskOwnerCap[];\n kioskIds: ObjectId[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n objectId: ObjectId;\n kioskId: ObjectId;\n digest: ObjectDigest;\n version: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js';\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 id: string;\n type: string;\n balance: string;\n rules: string[];\n owner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiAddress } from '@mysten/sui.js';\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support enivronments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: SuiAddress };\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 env: 'custom',\n address,\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 'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n '0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument, TransactionBlock } from '@mysten/sui.js';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n ObjectArgument,\n RulesEnvironmentParam,\n TRANSFER_POLICY_MODULE,\n TRANSFER_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 tx: TransactionBlock,\n itemType: string,\n publisher: ObjectArgument,\n): TransactionArgument {\n let [transferPolicy, transferPolicyCap] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::new`,\n typeArguments: [itemType],\n arguments: [objArg(tx, publisher)],\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n arguments: [transferPolicy],\n });\n\n return transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n policyCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure({ Some: amount }, 'Option<u64>')\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [profits] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::withdraw`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n });\n\n return profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n request: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), request],\n });\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 tx: TransactionBlock,\n itemType: string,\n ruleType: string,\n configType: string,\n policy: ObjectArgument,\n policyCap: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n typeArguments: [itemType, ruleType, configType],\n arguments: [objArg(tx, policy), policyCap],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n const policyObj = objArg(tx, policyId);\n // calculates the amount\n const [amount] = tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n typeArguments: [itemType],\n arguments: [policyObj, objArg(tx, price)],\n });\n\n // splits the coin.\n const feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n // pays the policy\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n typeArguments: [itemType],\n arguments: [policyObj, transferRequest, feeCoin],\n });\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 tx: TransactionBlock,\n itemType: string,\n item: TransactionArgument,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n // lock item in the kiosk.\n lock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n // proves that the item is locked in the kiosk to the TP.\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n typeArguments: [itemType],\n arguments: [transferRequest, objArg(tx, kiosk)],\n });\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n SuiAddress,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport {\n confirmRequest,\n resolveKioskLockRule,\n resolveRoyaltyRule,\n} from './transfer-policy';\nimport {\n KIOSK_LOCK_RULE,\n KIOSK_MODULE,\n KIOSK_TYPE,\n ObjectArgument,\n PurchaseAndResolvePoliciesResponse,\n PurchaseOptionalParams,\n ROYALTY_RULE,\n RulesEnvironmentParam,\n TransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(\n tx: TransactionBlock,\n): [TransactionArgument, TransactionArgument] {\n let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n return [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 let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [KIOSK_TYPE],\n arguments: [kiosk],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policy: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::lock`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, policy),\n objArg(tx, item),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::take`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::delist`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place_and_list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, item),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n payment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n let [item, transferRequest] = tx.moveCall({\n target: `${KIOSK_MODULE}::purchase`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n tx.pure(itemId, 'address'),\n objArg(tx, payment),\n ],\n });\n\n return [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 tx: TransactionBlock,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure(\n {\n Some: amount,\n },\n 'Option<u64>',\n )\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [coin] = tx.moveCall({\n target: `${KIOSK_MODULE}::withdraw`,\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_mut`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): [TransactionArgument, TransactionArgument] {\n let [item, promise] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_val`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return [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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n item: TransactionArgument,\n promise: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::return_val`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), item, promise],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n policy: TransferPolicy,\n environment: RulesEnvironmentParam,\n extraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n // if we don't pass the listing or the listing doens't have a price, return.\n if (price === undefined || typeof price !== 'string')\n throw new Error(`Price of the listing is not supplied.`);\n\n // Split the coin for the amount of the listing.\n const coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n // initialize the purchase `kiosk::purchase`\n const [purchasedItem, transferRequest] = purchase(\n tx,\n itemType,\n kiosk,\n itemId,\n coin,\n );\n\n // Start resolving rules.\n // Right now we support `kiosk_lock_rule` and `royalty_rule`.\n // They can also be supplied in parallel (supports combination).\n let hasKioskLockRule = false;\n\n for (let rule of policy.rules) {\n const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n switch (ruleWithoutAddr) {\n case ROYALTY_RULE:\n resolveRoyaltyRule(\n tx,\n itemType,\n price,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n case KIOSK_LOCK_RULE:\n if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n throw new Error(\n `This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n );\n hasKioskLockRule = true;\n resolveKioskLockRule(\n tx,\n itemType,\n purchasedItem,\n extraParams.ownedKiosk,\n extraParams.ownedKioskCap,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n default:\n break;\n }\n }\n\n // confirm the Transfer Policy request.\n confirmRequest(tx, itemType, policy.id, transferRequest);\n\n return {\n item: purchasedItem,\n canTransfer: !hasKioskLockRule,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n JsonRpcProvider,\n ObjectId,\n PaginationArguments,\n SuiAddress,\n SuiObjectData,\n SuiObjectResponse,\n getObjectFields,\n isValidSuiAddress,\n} from '@mysten/sui.js';\nimport {\n attachListingsAndPrices,\n attachLockedItems,\n extractKioskData,\n getAllDynamicFields,\n getKioskObject,\n} from '../utils';\nimport {\n FetchKioskOptions,\n KIOSK_OWNER_CAP,\n KioskListing,\n OwnedKiosks,\n PagedKioskData,\n} from '../types';\n\nexport async function fetchKiosk(\n provider: JsonRpcProvider,\n kioskId: SuiAddress,\n pagination: PaginationArguments<string>,\n options: FetchKioskOptions,\n): Promise<PagedKioskData> {\n // TODO: Replace the `getAllDynamicFields` with a paginated\n // response, once we have better RPC support for\n // type filtering & batch fetching.\n // This can't work with pagination currently.\n const data = await getAllDynamicFields(provider, kioskId, pagination);\n\n const listings: KioskListing[] = [];\n const lockedItemIds: ObjectId[] = [];\n\n // extracted kiosk data.\n const kioskData = extractKioskData(data, listings, lockedItemIds);\n\n // split the fetching in two queries as we are most likely passing different options for each kind.\n // For items, we usually seek the Display.\n // For listings we usually seek the DF value (price) / exclusivity.\n const [kiosk, listingObjects] = await Promise.all([\n options.withKioskFields\n ? getKioskObject(provider, kioskId)\n : Promise.resolve(undefined),\n options.withListingPrices\n ? provider.multiGetObjects({\n ids: kioskData.listingIds,\n options: {\n showContent: true,\n },\n })\n : Promise.resolve([]),\n ]);\n\n if (options.withKioskFields) kioskData.kiosk = kiosk;\n // attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n attachListingsAndPrices(kioskData, listings, listingObjects);\n // add `locked` status to items that are locked.\n attachLockedItems(kioskData, lockedItemIds);\n\n return {\n data: kioskData,\n nextCursor: null,\n hasNextPage: false,\n };\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 provider: JsonRpcProvider,\n address: SuiAddress,\n options?: {\n pagination?: PaginationArguments<string>;\n },\n): Promise<OwnedKiosks> {\n if (!isValidSuiAddress(address))\n return {\n nextCursor: null,\n hasNextPage: false,\n kioskOwnerCaps: [],\n kioskIds: [],\n };\n\n // fetch owned kiosk caps, paginated.\n const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({\n owner: address,\n filter: { StructType: KIOSK_OWNER_CAP },\n options: {\n showContent: true,\n },\n ...(options?.pagination || {}),\n });\n\n // get kioskIds from the OwnerCaps.\n const kioskIdList = data?.map(\n (x: SuiObjectResponse) => getObjectFields(x)?.for,\n );\n\n // clean up data that might have an error in them.\n // only return valid objects.\n const filteredData = data\n .filter((x) => 'data' in x)\n .map((x) => x.data) as SuiObjectData[];\n\n return {\n nextCursor,\n hasNextPage,\n kioskOwnerCaps: filteredData.map((x, idx) => ({\n digest: x.digest,\n version: x.version,\n objectId: x.objectId,\n kioskId: kioskIdList[idx],\n })),\n kioskIds: kioskIdList,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { JsonRpcProvider } from '@mysten/sui.js';\nimport { bcs } from '../bcs';\nimport {\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n TransferPolicy,\n} 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 provider: JsonRpcProvider,\n type: string,\n): Promise<TransferPolicy[]> {\n // console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n const { data } = await provider.queryEvents({\n query: {\n MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n },\n });\n\n const search = data.map((event) => event.parsedJson as { id: string });\n const policies = await provider.multiGetObjects({\n ids: search.map((policy) => policy.id),\n options: { showBcs: true, showOwner: true },\n });\n\n return policies\n .filter((policy) => !!policy && 'data' in policy)\n .map(({ data: policy }) => {\n // should never happen; policies are objects and fetched via an event.\n // policies are filtered for null and undefined above.\n if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n throw new Error(\n `Invalid policy: ${policy?.objectId}, expected object, got package`,\n );\n }\n\n let parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n return {\n id: policy?.objectId,\n type: `${TRANSFER_POLICY_TYPE}<${type}>`,\n owner: policy?.owner!,\n rules: parsed.rules,\n balance: parsed.balance,\n } as TransferPolicy;\n });\n}\n"],"mappings":"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","names":["import_sui","import_sui"]}
package/dist/index.mjs CHANGED
@@ -160,6 +160,22 @@ function getRulePackageAddress(environment) {
160
160
  }
161
161
  return rulesPackageAddresses[environment.env];
162
162
  }
163
+ async function getAllDynamicFields(provider, parentId, pagination) {
164
+ let hasNextPage = true;
165
+ let cursor = void 0;
166
+ const data = [];
167
+ while (hasNextPage) {
168
+ const result = await provider.getDynamicFields({
169
+ parentId,
170
+ limit: pagination.limit || void 0,
171
+ cursor
172
+ });
173
+ data.push(...result.data);
174
+ hasNextPage = result.hasNextPage;
175
+ cursor = result.nextCursor;
176
+ }
177
+ return data;
178
+ }
163
179
 
164
180
  // src/tx/transfer-policy.ts
165
181
  function createTransferPolicy(tx, itemType, publisher) {
@@ -170,7 +186,7 @@ function createTransferPolicy(tx, itemType, publisher) {
170
186
  });
171
187
  tx.moveCall({
172
188
  target: `0x2::transfer::public_share_object`,
173
- typeArguments: [itemType],
189
+ typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],
174
190
  arguments: [transferPolicy]
175
191
  });
176
192
  return transferPolicyCap;
@@ -427,11 +443,12 @@ function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy,
427
443
  }
428
444
 
429
445
  // src/query/kiosk.ts
446
+ import {
447
+ getObjectFields as getObjectFields2,
448
+ isValidSuiAddress
449
+ } from "@mysten/sui.js";
430
450
  async function fetchKiosk(provider, kioskId, pagination, options) {
431
- const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({
432
- parentId: kioskId,
433
- ...pagination
434
- });
451
+ const data = await getAllDynamicFields(provider, kioskId, pagination);
435
452
  const listings = [];
436
453
  const lockedItemIds = [];
437
454
  const kioskData = extractKioskData(data, listings, lockedItemIds);
@@ -450,8 +467,40 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
450
467
  attachLockedItems(kioskData, lockedItemIds);
451
468
  return {
452
469
  data: kioskData,
470
+ nextCursor: null,
471
+ hasNextPage: false
472
+ };
473
+ }
474
+ async function getOwnedKiosks(provider, address, options) {
475
+ if (!isValidSuiAddress(address))
476
+ return {
477
+ nextCursor: null,
478
+ hasNextPage: false,
479
+ kioskOwnerCaps: [],
480
+ kioskIds: []
481
+ };
482
+ const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({
483
+ owner: address,
484
+ filter: { StructType: KIOSK_OWNER_CAP },
485
+ options: {
486
+ showContent: true
487
+ },
488
+ ...options?.pagination || {}
489
+ });
490
+ const kioskIdList = data?.map(
491
+ (x) => getObjectFields2(x)?.for
492
+ );
493
+ const filteredData = data.filter((x) => "data" in x).map((x) => x.data);
494
+ return {
453
495
  nextCursor,
454
- hasNextPage
496
+ hasNextPage,
497
+ kioskOwnerCaps: filteredData.map((x, idx) => ({
498
+ digest: x.digest,
499
+ version: x.version,
500
+ objectId: x.objectId,
501
+ kioskId: kioskIdList[idx]
502
+ })),
503
+ kioskIds: kioskIdList
455
504
  };
456
505
  }
457
506
 
@@ -512,7 +561,9 @@ export {
512
561
  delist,
513
562
  extractKioskData,
514
563
  fetchKiosk,
564
+ getAllDynamicFields,
515
565
  getKioskObject,
566
+ getOwnedKiosks,
516
567
  getRulePackageAddress,
517
568
  getTypeWithoutPackageAddress,
518
569
  list,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.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 {\n JsonRpcProvider,\n ObjectId,\n SharedObjectRef,\n SuiObjectRef,\n SuiObjectResponse,\n TransactionArgument,\n TransactionBlock,\n getObjectFields,\n} from '@mysten/sui.js';\nimport { KioskData, KioskListing } from './query/kiosk';\nimport { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';\nimport { bcs } from './bcs';\nimport { KIOSK_TYPE, Kiosk, RulesEnvironmentParam } from './types';\nimport {\n MAINNET_RULES_PACKAGE_ADDRESS,\n TESTNET_RULES_PACKAGE_ADDRESS,\n} from './constants';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n mainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n testnet: TESTNET_RULES_PACKAGE_ADDRESS,\n devnet: '',\n custom: 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 tx: TransactionBlock,\n arg: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n if (typeof arg === 'string') {\n return tx.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return tx.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return tx.sharedObjectRef(arg);\n }\n\n if ('kind' in arg) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(\n provider: JsonRpcProvider,\n id: string,\n): Promise<Kiosk> {\n const queryRes = await provider.getObject({ id, options: { showBcs: true } });\n\n if (!queryRes || queryRes.error || !queryRes.data) {\n throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n }\n\n if (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n }\n\n return bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n data: DynamicFieldInfo[],\n listings: KioskListing[],\n lockedItemIds: string[],\n): KioskData {\n return data.reduce<KioskData>(\n (acc: KioskData, val: DynamicFieldInfo) => {\n const type = getTypeWithoutPackageAddress(val.name.type);\n\n switch (type) {\n case 'kiosk::Item':\n acc.itemIds.push(val.objectId);\n acc.items.push({\n objectId: val.objectId,\n type: val.objectType,\n isLocked: false,\n });\n break;\n case 'kiosk::Listing':\n acc.listingIds.push(val.objectId);\n listings.push({\n objectId: val.name.value.id,\n listingId: val.objectId,\n isExclusive: val.name.value.is_exclusive,\n });\n break;\n case 'kiosk::Lock':\n lockedItemIds?.push(val.name.value.id);\n break;\n }\n return acc;\n },\n { items: [], itemIds: [], listingIds: [], extensions: [] },\n );\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n return type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n kioskData: KioskData,\n listings: KioskListing[],\n listingObjects: SuiObjectResponse[],\n) {\n // map item listings as {item_id: KioskListing}\n // for easier mapping on the nex\n const itemListings = listings.reduce<Record<ObjectId, KioskListing>>(\n (acc: Record<ObjectId, KioskListing>, item, idx) => {\n acc[item.objectId] = { ...item };\n\n // return in case we don't have any listing objects.\n // that's the case when we don't have the `listingPrices` included.\n if (listingObjects.length === 0) return acc;\n\n const data = getObjectFields(listingObjects[idx]);\n if (!data) return acc;\n\n acc[item.objectId].price = data.value;\n return acc;\n },\n {},\n );\n\n kioskData.items.map((item) => {\n item.listing = itemListings[item.objectId] || undefined;\n });\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(\n kioskData: KioskData,\n lockedItemIds: ObjectId[],\n) {\n // map lock status in an array of type { item_id: true }\n const lockedStatuses = lockedItemIds.reduce<Record<ObjectId, boolean>>(\n (acc: Record<ObjectId, boolean>, item: string) => {\n acc[item] = true;\n return acc;\n },\n {},\n );\n\n // parse lockedItemIds and attach their locked status.\n kioskData.items.map((item) => {\n item.isLocked = lockedStatuses[item.objectId] || false;\n });\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(\n environment: RulesEnvironmentParam,\n): string {\n // if we have custom environment, we return it.\n if (environment.env === 'custom') {\n if (!environment.address)\n throw new Error('Please supply the custom package address for rules.');\n return environment.address;\n }\n return rulesPackageAddresses[environment.env];\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js';\nimport {\n KIOSK_PURCHASE_CAP,\n KIOSK_TYPE,\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n id: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n id: 'address',\n balance: 'u64',\n rules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument } from '@mysten/sui.js';\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 id: string;\n profits: string;\n owner: string;\n itemCount: number;\n allowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n id: string;\n kioskId: string;\n itemId: string;\n minPrice: 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 item: TransactionArgument;\n canTransfer: 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 ownedKiosk?: ObjectArgument;\n ownedKioskCap?: ObjectArgument;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js';\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 id: string;\n type: string;\n balance: string;\n rules: string[];\n owner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiAddress } from '@mysten/sui.js';\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support enivronments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: SuiAddress };\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 env: 'custom',\n address,\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 'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n '0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument, TransactionBlock } from '@mysten/sui.js';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n ObjectArgument,\n RulesEnvironmentParam,\n TRANSFER_POLICY_MODULE,\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 tx: TransactionBlock,\n itemType: string,\n publisher: ObjectArgument,\n): TransactionArgument {\n let [transferPolicy, transferPolicyCap] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::new`,\n typeArguments: [itemType],\n arguments: [objArg(tx, publisher)],\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [itemType],\n arguments: [transferPolicy],\n });\n\n return transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n policyCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure({ Some: amount }, 'Option<u64>')\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [profits] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::withdraw`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n });\n\n return profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n request: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), request],\n });\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 tx: TransactionBlock,\n itemType: string,\n ruleType: string,\n configType: string,\n policy: ObjectArgument,\n policyCap: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n typeArguments: [itemType, ruleType, configType],\n arguments: [objArg(tx, policy), policyCap],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n const policyObj = objArg(tx, policyId);\n // calculates the amount\n const [amount] = tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n typeArguments: [itemType],\n arguments: [policyObj, objArg(tx, price)],\n });\n\n // splits the coin.\n const feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n // pays the policy\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n typeArguments: [itemType],\n arguments: [policyObj, transferRequest, feeCoin],\n });\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 tx: TransactionBlock,\n itemType: string,\n item: TransactionArgument,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n // lock item in the kiosk.\n lock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n // proves that the item is locked in the kiosk to the TP.\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n typeArguments: [itemType],\n arguments: [transferRequest, objArg(tx, kiosk)],\n });\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n SuiAddress,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport {\n confirmRequest,\n resolveKioskLockRule,\n resolveRoyaltyRule,\n} from './transfer-policy';\nimport {\n KIOSK_LOCK_RULE,\n KIOSK_MODULE,\n KIOSK_TYPE,\n ObjectArgument,\n PurchaseAndResolvePoliciesResponse,\n PurchaseOptionalParams,\n ROYALTY_RULE,\n RulesEnvironmentParam,\n TransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(\n tx: TransactionBlock,\n): [TransactionArgument, TransactionArgument] {\n let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n return [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 let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [KIOSK_TYPE],\n arguments: [kiosk],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policy: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::lock`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, policy),\n objArg(tx, item),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::take`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::delist`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place_and_list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, item),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n payment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n let [item, transferRequest] = tx.moveCall({\n target: `${KIOSK_MODULE}::purchase`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n tx.pure(itemId, 'address'),\n objArg(tx, payment),\n ],\n });\n\n return [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 tx: TransactionBlock,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure(\n {\n Some: amount,\n },\n 'Option<u64>',\n )\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [coin] = tx.moveCall({\n target: `${KIOSK_MODULE}::withdraw`,\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_mut`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): [TransactionArgument, TransactionArgument] {\n let [item, promise] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_val`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return [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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n item: TransactionArgument,\n promise: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::return_val`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), item, promise],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n policy: TransferPolicy,\n environment: RulesEnvironmentParam,\n extraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n // if we don't pass the listing or the listing doens't have a price, return.\n if (price === undefined || typeof price !== 'string')\n throw new Error(`Price of the listing is not supplied.`);\n\n // Split the coin for the amount of the listing.\n const coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n // initialize the purchase `kiosk::purchase`\n const [purchasedItem, transferRequest] = purchase(\n tx,\n itemType,\n kiosk,\n itemId,\n coin,\n );\n\n // Start resolving rules.\n // Right now we support `kiosk_lock_rule` and `royalty_rule`.\n // They can also be supplied in parallel (supports combination).\n let hasKioskLockRule = false;\n\n for (let rule of policy.rules) {\n const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n switch (ruleWithoutAddr) {\n case ROYALTY_RULE:\n resolveRoyaltyRule(\n tx,\n itemType,\n price,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n case KIOSK_LOCK_RULE:\n if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n throw new Error(\n `This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n );\n hasKioskLockRule = true;\n resolveKioskLockRule(\n tx,\n itemType,\n purchasedItem,\n extraParams.ownedKiosk,\n extraParams.ownedKioskCap,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n default:\n break;\n }\n }\n\n // confirm the Transfer Policy request.\n confirmRequest(tx, itemType, policy.id, transferRequest);\n\n return {\n item: purchasedItem,\n canTransfer: !hasKioskLockRule,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n JsonRpcProvider,\n ObjectId,\n ObjectType,\n PaginationArguments,\n SuiAddress,\n} from '@mysten/sui.js';\nimport {\n attachListingsAndPrices,\n attachLockedItems,\n extractKioskData,\n getKioskObject,\n} from '../utils';\nimport { Kiosk } from '../types';\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 /** The ID of the Item */\n objectId: ObjectId;\n /**\n * Whether or not there's a `PurchaseCap` issued. `true` means that\n * the listing is controlled by some logic and can't be purchased directly.\n *\n * TODO: consider renaming the field for better indication.\n */\n isExclusive: boolean;\n /** The ID of the listing */\n listingId: ObjectId;\n price?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /** The type of the Item */\n type: ObjectType;\n /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n isLocked: boolean;\n /** Optional listing */\n listing?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n items: KioskItem[];\n itemIds: ObjectId[];\n listingIds: ObjectId[];\n kiosk?: Kiosk;\n extensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n data: KioskData;\n nextCursor: string | null;\n hasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n withKioskFields?: boolean;\n withListingPrices?: boolean;\n};\n\nexport async function fetchKiosk(\n provider: JsonRpcProvider,\n kioskId: SuiAddress,\n pagination: PaginationArguments<string>,\n options: FetchKioskOptions,\n): Promise<PagedKioskData> {\n const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({\n parentId: kioskId,\n ...pagination,\n });\n\n const listings: KioskListing[] = [];\n const lockedItemIds: ObjectId[] = [];\n\n // extracted kiosk data.\n const kioskData = extractKioskData(data, listings, lockedItemIds);\n\n // split the fetching in two queries as we are most likely passing different options for each kind.\n // For items, we usually seek the Display.\n // For listings we usually seek the DF value (price) / exclusivity.\n const [kiosk, listingObjects] = await Promise.all([\n options.withKioskFields\n ? getKioskObject(provider, kioskId)\n : Promise.resolve(undefined),\n options.withListingPrices\n ? provider.multiGetObjects({\n ids: kioskData.listingIds,\n options: {\n showContent: true,\n },\n })\n : Promise.resolve([]),\n ]);\n\n if (options.withKioskFields) kioskData.kiosk = kiosk;\n // attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n attachListingsAndPrices(kioskData, listings, listingObjects);\n // add `locked` status to items that are locked.\n attachLockedItems(kioskData, lockedItemIds);\n\n return {\n data: kioskData,\n nextCursor,\n hasNextPage,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { JsonRpcProvider } from '@mysten/sui.js';\nimport { bcs } from '../bcs';\nimport {\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n TransferPolicy,\n} 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 provider: JsonRpcProvider,\n type: string,\n): Promise<TransferPolicy[]> {\n // console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n const { data } = await provider.queryEvents({\n query: {\n MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n },\n });\n\n const search = data.map((event) => event.parsedJson as { id: string });\n const policies = await provider.multiGetObjects({\n ids: search.map((policy) => policy.id),\n options: { showBcs: true, showOwner: true },\n });\n\n return policies\n .filter((policy) => !!policy && 'data' in policy)\n .map(({ data: policy }) => {\n // should never happen; policies are objects and fetched via an event.\n // policies are filtered for null and undefined above.\n if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n throw new Error(\n `Invalid policy: ${policy?.objectId}, expected object, got package`,\n );\n }\n\n let parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n return {\n id: policy?.objectId,\n type: `${TRANSFER_POLICY_TYPE}<${type}>`,\n owner: policy?.owner!,\n rules: parsed.rules,\n balance: parsed.balance,\n } as TransferPolicy;\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/bcs.ts","../src/types/kiosk.ts","../src/types/transfer-policy.ts","../src/types/env.ts","../src/constants.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 {\n JsonRpcProvider,\n ObjectId,\n PaginationArguments,\n SharedObjectRef,\n SuiObjectRef,\n SuiObjectResponse,\n TransactionArgument,\n TransactionBlock,\n getObjectFields,\n} from '@mysten/sui.js';\nimport { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';\nimport { bcs } from './bcs';\nimport {\n KIOSK_TYPE,\n Kiosk,\n KioskData,\n KioskListing,\n RulesEnvironmentParam,\n} from './types';\nimport {\n MAINNET_RULES_PACKAGE_ADDRESS,\n TESTNET_RULES_PACKAGE_ADDRESS,\n} from './constants';\n\n/* A simple map to the rule package addresses */\n// TODO: Supply the mainnet and devnet addresses.\nexport const rulesPackageAddresses = {\n mainnet: MAINNET_RULES_PACKAGE_ADDRESS,\n testnet: TESTNET_RULES_PACKAGE_ADDRESS,\n devnet: '',\n custom: 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 tx: TransactionBlock,\n arg: string | SharedObjectRef | SuiObjectRef | TransactionArgument,\n): TransactionArgument {\n if (typeof arg === 'string') {\n return tx.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return tx.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return tx.sharedObjectRef(arg);\n }\n\n if ('kind' in arg) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport async function getKioskObject(\n provider: JsonRpcProvider,\n id: string,\n): Promise<Kiosk> {\n const queryRes = await provider.getObject({ id, options: { showBcs: true } });\n\n if (!queryRes || queryRes.error || !queryRes.data) {\n throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n }\n\n if (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n }\n\n return bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n data: DynamicFieldInfo[],\n listings: KioskListing[],\n lockedItemIds: string[],\n): KioskData {\n return data.reduce<KioskData>(\n (acc: KioskData, val: DynamicFieldInfo) => {\n const type = getTypeWithoutPackageAddress(val.name.type);\n\n switch (type) {\n case 'kiosk::Item':\n acc.itemIds.push(val.objectId);\n acc.items.push({\n objectId: val.objectId,\n type: val.objectType,\n isLocked: false,\n });\n break;\n case 'kiosk::Listing':\n acc.listingIds.push(val.objectId);\n listings.push({\n objectId: val.name.value.id,\n listingId: val.objectId,\n isExclusive: val.name.value.is_exclusive,\n });\n break;\n case 'kiosk::Lock':\n lockedItemIds?.push(val.name.value.id);\n break;\n }\n return acc;\n },\n { items: [], itemIds: [], listingIds: [], extensions: [] },\n );\n}\n\n// e.g. 0x2::kiosk::Item -> kiosk::Item\nexport function getTypeWithoutPackageAddress(type: string) {\n return type.split('::').slice(-2).join('::');\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n kioskData: KioskData,\n listings: KioskListing[],\n listingObjects: SuiObjectResponse[],\n) {\n // map item listings as {item_id: KioskListing}\n // for easier mapping on the nex\n const itemListings = listings.reduce<Record<ObjectId, KioskListing>>(\n (acc: Record<ObjectId, KioskListing>, item, idx) => {\n acc[item.objectId] = { ...item };\n\n // return in case we don't have any listing objects.\n // that's the case when we don't have the `listingPrices` included.\n if (listingObjects.length === 0) return acc;\n\n const data = getObjectFields(listingObjects[idx]);\n if (!data) return acc;\n\n acc[item.objectId].price = data.value;\n return acc;\n },\n {},\n );\n\n kioskData.items.map((item) => {\n item.listing = itemListings[item.objectId] || undefined;\n });\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(\n kioskData: KioskData,\n lockedItemIds: ObjectId[],\n) {\n // map lock status in an array of type { item_id: true }\n const lockedStatuses = lockedItemIds.reduce<Record<ObjectId, boolean>>(\n (acc: Record<ObjectId, boolean>, item: string) => {\n acc[item] = true;\n return acc;\n },\n {},\n );\n\n // parse lockedItemIds and attach their locked status.\n kioskData.items.map((item) => {\n item.isLocked = lockedStatuses[item.objectId] || false;\n });\n}\n\n/**\n * A helper to get a rule's environment address.\n */\nexport function getRulePackageAddress(\n environment: RulesEnvironmentParam,\n): string {\n // if we have custom environment, we return it.\n if (environment.env === 'custom') {\n if (!environment.address)\n throw new Error('Please supply the custom package address for rules.');\n return environment.address;\n }\n return 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 provider: JsonRpcProvider,\n parentId: ObjectId,\n pagination: PaginationArguments<string>,\n) {\n let hasNextPage = true;\n let cursor = undefined;\n const data: DynamicFieldInfo[] = [];\n\n while (hasNextPage) {\n const result = await provider.getDynamicFields({\n parentId,\n limit: pagination.limit || undefined,\n cursor,\n });\n data.push(...result.data);\n hasNextPage = result.hasNextPage;\n cursor = result.nextCursor;\n }\n\n return data;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui.js';\nimport {\n KIOSK_PURCHASE_CAP,\n KIOSK_TYPE,\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n} from './types';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n id: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n id: 'address',\n balance: 'u64',\n rules: ['vector', 'string'],\n});\n\nexport { bcs };\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ObjectDigest,\n ObjectId,\n ObjectType,\n PaginatedObjectsResponse,\n TransactionArgument,\n} from '@mysten/sui.js';\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 id: string;\n profits: string;\n owner: string;\n itemCount: number;\n allowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n id: string;\n kioskId: string;\n itemId: string;\n minPrice: 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 item: TransactionArgument;\n canTransfer: 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 ownedKiosk?: ObjectArgument;\n ownedKioskCap?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /**\n * Whether or not there's a `PurchaseCap` issued. `true` means that\n * the listing is controlled by some logic and can't be purchased directly.\n *\n * TODO: consider renaming the field for better indication.\n */\n isExclusive: boolean;\n /** The ID of the listing */\n listingId: ObjectId;\n price?: 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 /** The ID of the Item */\n objectId: ObjectId;\n /** The type of the Item */\n type: ObjectType;\n /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n isLocked: boolean;\n /** Optional listing */\n listing?: KioskListing;\n};\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n items: KioskItem[];\n itemIds: ObjectId[];\n listingIds: ObjectId[];\n kiosk?: Kiosk;\n extensions: any[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n data: KioskData;\n nextCursor: string | null;\n hasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n withKioskFields?: boolean;\n withListingPrices?: boolean;\n};\n\nexport type OwnedKiosks = {\n kioskOwnerCaps: KioskOwnerCap[];\n kioskIds: ObjectId[];\n} & Omit<PaginatedObjectsResponse, 'data'>;\n\nexport type KioskOwnerCap = {\n objectId: ObjectId;\n kioskId: ObjectId;\n digest: ObjectDigest;\n version: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner } from '@mysten/sui.js';\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 id: string;\n type: string;\n balance: string;\n rules: string[];\n owner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SuiAddress } from '@mysten/sui.js';\n\n/* A list of environments. */\nexport type Environment = 'mainnet' | 'testnet' | 'devnet' | 'custom';\n\n/** A Parameter to support enivronments for rules. */\nexport type RulesEnvironmentParam = { env: Environment; address?: SuiAddress };\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 env: 'custom',\n address,\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 'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\n\n/** The transfer policy rules package address on mainnet */\nexport const MAINNET_RULES_PACKAGE_ADDRESS =\n '0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879';\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TransactionArgument, TransactionBlock } from '@mysten/sui.js';\nimport { getRulePackageAddress, objArg } from '../utils';\nimport { lock } from './kiosk';\nimport {\n ObjectArgument,\n RulesEnvironmentParam,\n TRANSFER_POLICY_MODULE,\n TRANSFER_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 tx: TransactionBlock,\n itemType: string,\n publisher: ObjectArgument,\n): TransactionArgument {\n let [transferPolicy, transferPolicyCap] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::new`,\n typeArguments: [itemType],\n arguments: [objArg(tx, publisher)],\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],\n arguments: [transferPolicy],\n });\n\n return transferPolicyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n policyCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure({ Some: amount }, 'Option<u64>')\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [profits] = tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::withdraw`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), objArg(tx, policyCap), amountArg],\n });\n\n return profits;\n}\n\n/**\n * Call the `transfer_policy::confirm_request` function to unblock the\n * transaction.\n */\nexport function confirmRequest(\n tx: TransactionBlock,\n itemType: string,\n policy: ObjectArgument,\n request: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::confirm_request`,\n typeArguments: [itemType],\n arguments: [objArg(tx, policy), request],\n });\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 tx: TransactionBlock,\n itemType: string,\n ruleType: string,\n configType: string,\n policy: ObjectArgument,\n policyCap: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${TRANSFER_POLICY_MODULE}::remove_rule`,\n typeArguments: [itemType, ruleType, configType],\n arguments: [objArg(tx, policy), policyCap],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n const policyObj = objArg(tx, policyId);\n // calculates the amount\n const [amount] = tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,\n typeArguments: [itemType],\n arguments: [policyObj, objArg(tx, price)],\n });\n\n // splits the coin.\n const feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n // pays the policy\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,\n typeArguments: [itemType],\n arguments: [policyObj, transferRequest, feeCoin],\n });\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 tx: TransactionBlock,\n itemType: string,\n item: TransactionArgument,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policyId: ObjectArgument,\n transferRequest: TransactionArgument,\n environment: RulesEnvironmentParam,\n) {\n // lock item in the kiosk.\n lock(tx, itemType, kiosk, kioskCap, policyId, item);\n\n // proves that the item is locked in the kiosk to the TP.\n tx.moveCall({\n target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,\n typeArguments: [itemType],\n arguments: [transferRequest, objArg(tx, kiosk)],\n });\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n SuiAddress,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\n\nimport { getTypeWithoutPackageAddress, objArg } from '../utils';\nimport {\n confirmRequest,\n resolveKioskLockRule,\n resolveRoyaltyRule,\n} from './transfer-policy';\nimport {\n KIOSK_LOCK_RULE,\n KIOSK_MODULE,\n KIOSK_TYPE,\n ObjectArgument,\n PurchaseAndResolvePoliciesResponse,\n PurchaseOptionalParams,\n ROYALTY_RULE,\n RulesEnvironmentParam,\n TransferPolicy,\n} from '../types';\n\n/**\n * Create a new shared Kiosk and returns the [kiosk, kioskOwnerCap] tuple.\n */\nexport function createKiosk(\n tx: TransactionBlock,\n): [TransactionArgument, TransactionArgument] {\n let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n return [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 let [kiosk, kioskOwnerCap] = tx.moveCall({\n target: `${KIOSK_MODULE}::new`,\n });\n\n tx.moveCall({\n target: `0x2::transfer::public_share_object`,\n typeArguments: [KIOSK_TYPE],\n arguments: [kiosk],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), objArg(tx, item)],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n policy: ObjectArgument,\n item: ObjectArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::lock`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, policy),\n objArg(tx, item),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::take`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::delist`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n item: ObjectArgument,\n price: string | bigint,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::place_and_list`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n objArg(tx, item),\n tx.pure(price, 'u64'),\n ],\n });\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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n payment: ObjectArgument,\n): [TransactionArgument, TransactionArgument] {\n let [item, transferRequest] = tx.moveCall({\n target: `${KIOSK_MODULE}::purchase`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n tx.pure(itemId, 'address'),\n objArg(tx, payment),\n ],\n });\n\n return [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 tx: TransactionBlock,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n amount: string | bigint | null,\n): TransactionArgument {\n let amountArg =\n amount !== null\n ? tx.pure(\n {\n Some: amount,\n },\n 'Option<u64>',\n )\n : tx.pure({ None: true }, 'Option<u64>');\n\n let [coin] = tx.moveCall({\n target: `${KIOSK_MODULE}::withdraw`,\n arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): TransactionArgument {\n let [item] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_mut`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return 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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n kioskCap: ObjectArgument,\n itemId: SuiAddress,\n): [TransactionArgument, TransactionArgument] {\n let [item, promise] = tx.moveCall({\n target: `${KIOSK_MODULE}::borrow_val`,\n typeArguments: [itemType],\n arguments: [\n objArg(tx, kiosk),\n objArg(tx, kioskCap),\n tx.pure(itemId, 'address'),\n ],\n });\n\n return [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 tx: TransactionBlock,\n itemType: string,\n kiosk: ObjectArgument,\n item: TransactionArgument,\n promise: TransactionArgument,\n): void {\n tx.moveCall({\n target: `${KIOSK_MODULE}::return_val`,\n typeArguments: [itemType],\n arguments: [objArg(tx, kiosk), item, promise],\n });\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 tx: TransactionBlock,\n itemType: string,\n price: string,\n kiosk: ObjectArgument,\n itemId: SuiAddress,\n policy: TransferPolicy,\n environment: RulesEnvironmentParam,\n extraParams?: PurchaseOptionalParams,\n): PurchaseAndResolvePoliciesResponse {\n // if we don't pass the listing or the listing doens't have a price, return.\n if (price === undefined || typeof price !== 'string')\n throw new Error(`Price of the listing is not supplied.`);\n\n // Split the coin for the amount of the listing.\n const coin = tx.splitCoins(tx.gas, [tx.pure(price, 'u64')]);\n\n // initialize the purchase `kiosk::purchase`\n const [purchasedItem, transferRequest] = purchase(\n tx,\n itemType,\n kiosk,\n itemId,\n coin,\n );\n\n // Start resolving rules.\n // Right now we support `kiosk_lock_rule` and `royalty_rule`.\n // They can also be supplied in parallel (supports combination).\n let hasKioskLockRule = false;\n\n for (let rule of policy.rules) {\n const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n switch (ruleWithoutAddr) {\n case ROYALTY_RULE:\n resolveRoyaltyRule(\n tx,\n itemType,\n price,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n case KIOSK_LOCK_RULE:\n if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)\n throw new Error(\n `This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`,\n );\n hasKioskLockRule = true;\n resolveKioskLockRule(\n tx,\n itemType,\n purchasedItem,\n extraParams.ownedKiosk,\n extraParams.ownedKioskCap,\n policy.id,\n transferRequest,\n environment,\n );\n break;\n default:\n break;\n }\n }\n\n // confirm the Transfer Policy request.\n confirmRequest(tx, itemType, policy.id, transferRequest);\n\n return {\n item: purchasedItem,\n canTransfer: !hasKioskLockRule,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n JsonRpcProvider,\n ObjectId,\n PaginationArguments,\n SuiAddress,\n SuiObjectData,\n SuiObjectResponse,\n getObjectFields,\n isValidSuiAddress,\n} from '@mysten/sui.js';\nimport {\n attachListingsAndPrices,\n attachLockedItems,\n extractKioskData,\n getAllDynamicFields,\n getKioskObject,\n} from '../utils';\nimport {\n FetchKioskOptions,\n KIOSK_OWNER_CAP,\n KioskListing,\n OwnedKiosks,\n PagedKioskData,\n} from '../types';\n\nexport async function fetchKiosk(\n provider: JsonRpcProvider,\n kioskId: SuiAddress,\n pagination: PaginationArguments<string>,\n options: FetchKioskOptions,\n): Promise<PagedKioskData> {\n // TODO: Replace the `getAllDynamicFields` with a paginated\n // response, once we have better RPC support for\n // type filtering & batch fetching.\n // This can't work with pagination currently.\n const data = await getAllDynamicFields(provider, kioskId, pagination);\n\n const listings: KioskListing[] = [];\n const lockedItemIds: ObjectId[] = [];\n\n // extracted kiosk data.\n const kioskData = extractKioskData(data, listings, lockedItemIds);\n\n // split the fetching in two queries as we are most likely passing different options for each kind.\n // For items, we usually seek the Display.\n // For listings we usually seek the DF value (price) / exclusivity.\n const [kiosk, listingObjects] = await Promise.all([\n options.withKioskFields\n ? getKioskObject(provider, kioskId)\n : Promise.resolve(undefined),\n options.withListingPrices\n ? provider.multiGetObjects({\n ids: kioskData.listingIds,\n options: {\n showContent: true,\n },\n })\n : Promise.resolve([]),\n ]);\n\n if (options.withKioskFields) kioskData.kiosk = kiosk;\n // attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n attachListingsAndPrices(kioskData, listings, listingObjects);\n // add `locked` status to items that are locked.\n attachLockedItems(kioskData, lockedItemIds);\n\n return {\n data: kioskData,\n nextCursor: null,\n hasNextPage: false,\n };\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 provider: JsonRpcProvider,\n address: SuiAddress,\n options?: {\n pagination?: PaginationArguments<string>;\n },\n): Promise<OwnedKiosks> {\n if (!isValidSuiAddress(address))\n return {\n nextCursor: null,\n hasNextPage: false,\n kioskOwnerCaps: [],\n kioskIds: [],\n };\n\n // fetch owned kiosk caps, paginated.\n const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({\n owner: address,\n filter: { StructType: KIOSK_OWNER_CAP },\n options: {\n showContent: true,\n },\n ...(options?.pagination || {}),\n });\n\n // get kioskIds from the OwnerCaps.\n const kioskIdList = data?.map(\n (x: SuiObjectResponse) => getObjectFields(x)?.for,\n );\n\n // clean up data that might have an error in them.\n // only return valid objects.\n const filteredData = data\n .filter((x) => 'data' in x)\n .map((x) => x.data) as SuiObjectData[];\n\n return {\n nextCursor,\n hasNextPage,\n kioskOwnerCaps: filteredData.map((x, idx) => ({\n digest: x.digest,\n version: x.version,\n objectId: x.objectId,\n kioskId: kioskIdList[idx],\n })),\n kioskIds: kioskIdList,\n };\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { JsonRpcProvider } from '@mysten/sui.js';\nimport { bcs } from '../bcs';\nimport {\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n TransferPolicy,\n} 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 provider: JsonRpcProvider,\n type: string,\n): Promise<TransferPolicy[]> {\n // console.log('event type: %s', `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n const { data } = await provider.queryEvents({\n query: {\n MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,\n },\n });\n\n const search = data.map((event) => event.parsedJson as { id: string });\n const policies = await provider.multiGetObjects({\n ids: search.map((policy) => policy.id),\n options: { showBcs: true, showOwner: true },\n });\n\n return policies\n .filter((policy) => !!policy && 'data' in policy)\n .map(({ data: policy }) => {\n // should never happen; policies are objects and fetched via an event.\n // policies are filtered for null and undefined above.\n if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {\n throw new Error(\n `Invalid policy: ${policy?.objectId}, expected object, got package`,\n );\n }\n\n let parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, 'base64');\n\n return {\n id: policy?.objectId,\n type: `${TRANSFER_POLICY_TYPE}<${type}>`,\n owner: policy?.owner!,\n rules: parsed.rules,\n balance: parsed.balance,\n } as TransferPolicy;\n });\n}\n"],"mappings":"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","names":["getObjectFields","getObjectFields"]}
@@ -1,54 +1,12 @@
1
- import { JsonRpcProvider, ObjectId, ObjectType, PaginationArguments, SuiAddress } from '@mysten/sui.js';
2
- import { Kiosk } from '../types';
3
- /**
4
- * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.
5
- * Holds a `u64` value - the price of the item.
6
- */
7
- export type KioskListing = {
8
- /** The ID of the Item */
9
- objectId: ObjectId;
10
- /**
11
- * Whether or not there's a `PurchaseCap` issued. `true` means that
12
- * the listing is controlled by some logic and can't be purchased directly.
13
- *
14
- * TODO: consider renaming the field for better indication.
15
- */
16
- isExclusive: boolean;
17
- /** The ID of the listing */
18
- listingId: ObjectId;
19
- price?: string;
20
- };
21
- /**
22
- * A dynamic field `Item { ID }` attached to the Kiosk.
23
- * Holds an Item `T`. The type of the item is known upfront.
24
- */
25
- export type KioskItem = {
26
- /** The ID of the Item */
27
- objectId: ObjectId;
28
- /** The type of the Item */
29
- type: ObjectType;
30
- /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */
31
- isLocked: boolean;
32
- /** Optional listing */
33
- listing?: KioskListing;
34
- };
1
+ import { JsonRpcProvider, PaginationArguments, SuiAddress } from '@mysten/sui.js';
2
+ import { FetchKioskOptions, OwnedKiosks, PagedKioskData } from '../types';
3
+ export declare function fetchKiosk(provider: JsonRpcProvider, kioskId: SuiAddress, pagination: PaginationArguments<string>, options: FetchKioskOptions): Promise<PagedKioskData>;
35
4
  /**
36
- * Aggregated data from the Kiosk.
5
+ * A function to fetch all the user's kiosk Caps
6
+ * And a list of the kiosk address ids.
7
+ * Returns a list of `kioskOwnerCapIds` and `kioskIds`.
8
+ * Extra options allow pagination.
37
9
  */
38
- export type KioskData = {
39
- items: KioskItem[];
40
- itemIds: ObjectId[];
41
- listingIds: ObjectId[];
42
- kiosk?: Kiosk;
43
- extensions: any[];
44
- };
45
- export type PagedKioskData = {
46
- data: KioskData;
47
- nextCursor: string | null;
48
- hasNextPage: boolean;
49
- };
50
- export type FetchKioskOptions = {
51
- withKioskFields?: boolean;
52
- withListingPrices?: boolean;
53
- };
54
- export declare function fetchKiosk(provider: JsonRpcProvider, kioskId: SuiAddress, pagination: PaginationArguments<string>, options: FetchKioskOptions): Promise<PagedKioskData>;
10
+ export declare function getOwnedKiosks(provider: JsonRpcProvider, address: SuiAddress, options?: {
11
+ pagination?: PaginationArguments<string>;
12
+ }): Promise<OwnedKiosks>;
@@ -1,4 +1,4 @@
1
- import { TransactionArgument } from '@mysten/sui.js';
1
+ import { ObjectDigest, ObjectId, ObjectType, PaginatedObjectsResponse, TransactionArgument } from '@mysten/sui.js';
2
2
  import { ObjectArgument } from '.';
3
3
  /** The Kiosk module. */
4
4
  export declare const KIOSK_MODULE = "0x2::kiosk";
@@ -50,3 +50,64 @@ export type PurchaseOptionalParams = {
50
50
  ownedKiosk?: ObjectArgument;
51
51
  ownedKioskCap?: ObjectArgument;
52
52
  };
53
+ /**
54
+ * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.
55
+ * Holds a `u64` value - the price of the item.
56
+ */
57
+ export type KioskListing = {
58
+ /** The ID of the Item */
59
+ objectId: ObjectId;
60
+ /**
61
+ * Whether or not there's a `PurchaseCap` issued. `true` means that
62
+ * the listing is controlled by some logic and can't be purchased directly.
63
+ *
64
+ * TODO: consider renaming the field for better indication.
65
+ */
66
+ isExclusive: boolean;
67
+ /** The ID of the listing */
68
+ listingId: ObjectId;
69
+ price?: string;
70
+ };
71
+ /**
72
+ * A dynamic field `Item { ID }` attached to the Kiosk.
73
+ * Holds an Item `T`. The type of the item is known upfront.
74
+ */
75
+ export type KioskItem = {
76
+ /** The ID of the Item */
77
+ objectId: ObjectId;
78
+ /** The type of the Item */
79
+ type: ObjectType;
80
+ /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */
81
+ isLocked: boolean;
82
+ /** Optional listing */
83
+ listing?: KioskListing;
84
+ };
85
+ /**
86
+ * Aggregated data from the Kiosk.
87
+ */
88
+ export type KioskData = {
89
+ items: KioskItem[];
90
+ itemIds: ObjectId[];
91
+ listingIds: ObjectId[];
92
+ kiosk?: Kiosk;
93
+ extensions: any[];
94
+ };
95
+ export type PagedKioskData = {
96
+ data: KioskData;
97
+ nextCursor: string | null;
98
+ hasNextPage: boolean;
99
+ };
100
+ export type FetchKioskOptions = {
101
+ withKioskFields?: boolean;
102
+ withListingPrices?: boolean;
103
+ };
104
+ export type OwnedKiosks = {
105
+ kioskOwnerCaps: KioskOwnerCap[];
106
+ kioskIds: ObjectId[];
107
+ } & Omit<PaginatedObjectsResponse, 'data'>;
108
+ export type KioskOwnerCap = {
109
+ objectId: ObjectId;
110
+ kioskId: ObjectId;
111
+ digest: ObjectDigest;
112
+ version: string;
113
+ };
package/dist/utils.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { JsonRpcProvider, ObjectId, SharedObjectRef, SuiObjectRef, SuiObjectResponse, TransactionArgument, TransactionBlock } from '@mysten/sui.js';
2
- import { KioskData, KioskListing } from './query/kiosk';
1
+ import { JsonRpcProvider, ObjectId, PaginationArguments, SharedObjectRef, SuiObjectRef, SuiObjectResponse, TransactionArgument, TransactionBlock } from '@mysten/sui.js';
3
2
  import { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';
4
- import { Kiosk, RulesEnvironmentParam } from './types';
3
+ import { Kiosk, KioskData, KioskListing, RulesEnvironmentParam } from './types';
5
4
  export declare const rulesPackageAddresses: {
6
5
  mainnet: string;
7
6
  testnet: string;
@@ -31,3 +30,20 @@ export declare function attachLockedItems(kioskData: KioskData, lockedItemIds: O
31
30
  * A helper to get a rule's environment address.
32
31
  */
33
32
  export declare function getRulePackageAddress(environment: RulesEnvironmentParam): string;
33
+ /**
34
+ * A helper to fetch all DF pages.
35
+ * We need that to fetch the kiosk DFs consistently, until we have
36
+ * RPC calls that allow filtering of Type / batch fetching of spec
37
+ */
38
+ export declare function getAllDynamicFields(provider: JsonRpcProvider, parentId: ObjectId, pagination: PaginationArguments<string>): Promise<{
39
+ type: "DynamicField" | "DynamicObject";
40
+ objectType: string;
41
+ objectId: string;
42
+ version: number;
43
+ digest: string;
44
+ name: {
45
+ type: string;
46
+ value?: any;
47
+ };
48
+ bcsName: string;
49
+ }[]>;
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.3.0",
5
+ "version": "0.3.1",
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.35.1"
27
+ "@mysten/sui.js": "0.36.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "eslint": "^8.38.0",
@@ -4,72 +4,27 @@
4
4
  import {
5
5
  JsonRpcProvider,
6
6
  ObjectId,
7
- ObjectType,
8
7
  PaginationArguments,
9
8
  SuiAddress,
9
+ SuiObjectData,
10
+ SuiObjectResponse,
11
+ getObjectFields,
12
+ isValidSuiAddress,
10
13
  } from '@mysten/sui.js';
11
14
  import {
12
15
  attachListingsAndPrices,
13
16
  attachLockedItems,
14
17
  extractKioskData,
18
+ getAllDynamicFields,
15
19
  getKioskObject,
16
20
  } from '../utils';
17
- import { Kiosk } from '../types';
18
-
19
- /**
20
- * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.
21
- * Holds a `u64` value - the price of the item.
22
- */
23
- export type KioskListing = {
24
- /** The ID of the Item */
25
- objectId: ObjectId;
26
- /**
27
- * Whether or not there's a `PurchaseCap` issued. `true` means that
28
- * the listing is controlled by some logic and can't be purchased directly.
29
- *
30
- * TODO: consider renaming the field for better indication.
31
- */
32
- isExclusive: boolean;
33
- /** The ID of the listing */
34
- listingId: ObjectId;
35
- price?: string;
36
- };
37
-
38
- /**
39
- * A dynamic field `Item { ID }` attached to the Kiosk.
40
- * Holds an Item `T`. The type of the item is known upfront.
41
- */
42
- export type KioskItem = {
43
- /** The ID of the Item */
44
- objectId: ObjectId;
45
- /** The type of the Item */
46
- type: ObjectType;
47
- /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */
48
- isLocked: boolean;
49
- /** Optional listing */
50
- listing?: KioskListing;
51
- };
52
- /**
53
- * Aggregated data from the Kiosk.
54
- */
55
- export type KioskData = {
56
- items: KioskItem[];
57
- itemIds: ObjectId[];
58
- listingIds: ObjectId[];
59
- kiosk?: Kiosk;
60
- extensions: any[]; // type will be defined on later versions of the SDK.
61
- };
62
-
63
- export type PagedKioskData = {
64
- data: KioskData;
65
- nextCursor: string | null;
66
- hasNextPage: boolean;
67
- };
68
-
69
- export type FetchKioskOptions = {
70
- withKioskFields?: boolean;
71
- withListingPrices?: boolean;
72
- };
21
+ import {
22
+ FetchKioskOptions,
23
+ KIOSK_OWNER_CAP,
24
+ KioskListing,
25
+ OwnedKiosks,
26
+ PagedKioskData,
27
+ } from '../types';
73
28
 
74
29
  export async function fetchKiosk(
75
30
  provider: JsonRpcProvider,
@@ -77,10 +32,11 @@ export async function fetchKiosk(
77
32
  pagination: PaginationArguments<string>,
78
33
  options: FetchKioskOptions,
79
34
  ): Promise<PagedKioskData> {
80
- const { data, nextCursor, hasNextPage } = await provider.getDynamicFields({
81
- parentId: kioskId,
82
- ...pagination,
83
- });
35
+ // TODO: Replace the `getAllDynamicFields` with a paginated
36
+ // response, once we have better RPC support for
37
+ // type filtering & batch fetching.
38
+ // This can't work with pagination currently.
39
+ const data = await getAllDynamicFields(provider, kioskId, pagination);
84
40
 
85
41
  const listings: KioskListing[] = [];
86
42
  const lockedItemIds: ObjectId[] = [];
@@ -113,7 +69,62 @@ export async function fetchKiosk(
113
69
 
114
70
  return {
115
71
  data: kioskData,
72
+ nextCursor: null,
73
+ hasNextPage: false,
74
+ };
75
+ }
76
+
77
+ /**
78
+ * A function to fetch all the user's kiosk Caps
79
+ * And a list of the kiosk address ids.
80
+ * Returns a list of `kioskOwnerCapIds` and `kioskIds`.
81
+ * Extra options allow pagination.
82
+ */
83
+ export async function getOwnedKiosks(
84
+ provider: JsonRpcProvider,
85
+ address: SuiAddress,
86
+ options?: {
87
+ pagination?: PaginationArguments<string>;
88
+ },
89
+ ): Promise<OwnedKiosks> {
90
+ if (!isValidSuiAddress(address))
91
+ return {
92
+ nextCursor: null,
93
+ hasNextPage: false,
94
+ kioskOwnerCaps: [],
95
+ kioskIds: [],
96
+ };
97
+
98
+ // fetch owned kiosk caps, paginated.
99
+ const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({
100
+ owner: address,
101
+ filter: { StructType: KIOSK_OWNER_CAP },
102
+ options: {
103
+ showContent: true,
104
+ },
105
+ ...(options?.pagination || {}),
106
+ });
107
+
108
+ // get kioskIds from the OwnerCaps.
109
+ const kioskIdList = data?.map(
110
+ (x: SuiObjectResponse) => getObjectFields(x)?.for,
111
+ );
112
+
113
+ // clean up data that might have an error in them.
114
+ // only return valid objects.
115
+ const filteredData = data
116
+ .filter((x) => 'data' in x)
117
+ .map((x) => x.data) as SuiObjectData[];
118
+
119
+ return {
116
120
  nextCursor,
117
121
  hasNextPage,
122
+ kioskOwnerCaps: filteredData.map((x, idx) => ({
123
+ digest: x.digest,
124
+ version: x.version,
125
+ objectId: x.objectId,
126
+ kioskId: kioskIdList[idx],
127
+ })),
128
+ kioskIds: kioskIdList,
118
129
  };
119
130
  }
@@ -8,6 +8,7 @@ import {
8
8
  ObjectArgument,
9
9
  RulesEnvironmentParam,
10
10
  TRANSFER_POLICY_MODULE,
11
+ TRANSFER_POLICY_TYPE,
11
12
  } from '../types';
12
13
 
13
14
  /**
@@ -27,7 +28,7 @@ export function createTransferPolicy(
27
28
 
28
29
  tx.moveCall({
29
30
  target: `0x2::transfer::public_share_object`,
30
- typeArguments: [itemType],
31
+ typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],
31
32
  arguments: [transferPolicy],
32
33
  });
33
34
 
@@ -1,7 +1,13 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { TransactionArgument } from '@mysten/sui.js';
4
+ import {
5
+ ObjectDigest,
6
+ ObjectId,
7
+ ObjectType,
8
+ PaginatedObjectsResponse,
9
+ TransactionArgument,
10
+ } from '@mysten/sui.js';
5
11
  import { ObjectArgument } from '.';
6
12
 
7
13
  /** The Kiosk module. */
@@ -64,3 +70,70 @@ export type PurchaseOptionalParams = {
64
70
  ownedKiosk?: ObjectArgument;
65
71
  ownedKioskCap?: ObjectArgument;
66
72
  };
73
+
74
+ /**
75
+ * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.
76
+ * Holds a `u64` value - the price of the item.
77
+ */
78
+ export type KioskListing = {
79
+ /** The ID of the Item */
80
+ objectId: ObjectId;
81
+ /**
82
+ * Whether or not there's a `PurchaseCap` issued. `true` means that
83
+ * the listing is controlled by some logic and can't be purchased directly.
84
+ *
85
+ * TODO: consider renaming the field for better indication.
86
+ */
87
+ isExclusive: boolean;
88
+ /** The ID of the listing */
89
+ listingId: ObjectId;
90
+ price?: string;
91
+ };
92
+
93
+ /**
94
+ * A dynamic field `Item { ID }` attached to the Kiosk.
95
+ * Holds an Item `T`. The type of the item is known upfront.
96
+ */
97
+ export type KioskItem = {
98
+ /** The ID of the Item */
99
+ objectId: ObjectId;
100
+ /** The type of the Item */
101
+ type: ObjectType;
102
+ /** Whether the item is Locked (there must be a `Lock` Dynamic Field) */
103
+ isLocked: boolean;
104
+ /** Optional listing */
105
+ listing?: KioskListing;
106
+ };
107
+ /**
108
+ * Aggregated data from the Kiosk.
109
+ */
110
+ export type KioskData = {
111
+ items: KioskItem[];
112
+ itemIds: ObjectId[];
113
+ listingIds: ObjectId[];
114
+ kiosk?: Kiosk;
115
+ extensions: any[]; // type will be defined on later versions of the SDK.
116
+ };
117
+
118
+ export type PagedKioskData = {
119
+ data: KioskData;
120
+ nextCursor: string | null;
121
+ hasNextPage: boolean;
122
+ };
123
+
124
+ export type FetchKioskOptions = {
125
+ withKioskFields?: boolean;
126
+ withListingPrices?: boolean;
127
+ };
128
+
129
+ export type OwnedKiosks = {
130
+ kioskOwnerCaps: KioskOwnerCap[];
131
+ kioskIds: ObjectId[];
132
+ } & Omit<PaginatedObjectsResponse, 'data'>;
133
+
134
+ export type KioskOwnerCap = {
135
+ objectId: ObjectId;
136
+ kioskId: ObjectId;
137
+ digest: ObjectDigest;
138
+ version: string;
139
+ };
package/src/utils.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  import {
5
5
  JsonRpcProvider,
6
6
  ObjectId,
7
+ PaginationArguments,
7
8
  SharedObjectRef,
8
9
  SuiObjectRef,
9
10
  SuiObjectResponse,
@@ -11,10 +12,15 @@ import {
11
12
  TransactionBlock,
12
13
  getObjectFields,
13
14
  } from '@mysten/sui.js';
14
- import { KioskData, KioskListing } from './query/kiosk';
15
15
  import { DynamicFieldInfo } from '@mysten/sui.js/dist/types/dynamic_fields';
16
16
  import { bcs } from './bcs';
17
- import { KIOSK_TYPE, Kiosk, RulesEnvironmentParam } from './types';
17
+ import {
18
+ KIOSK_TYPE,
19
+ Kiosk,
20
+ KioskData,
21
+ KioskListing,
22
+ RulesEnvironmentParam,
23
+ } from './types';
18
24
  import {
19
25
  MAINNET_RULES_PACKAGE_ADDRESS,
20
26
  TESTNET_RULES_PACKAGE_ADDRESS,
@@ -186,3 +192,31 @@ export function getRulePackageAddress(
186
192
  }
187
193
  return rulesPackageAddresses[environment.env];
188
194
  }
195
+
196
+ /**
197
+ * A helper to fetch all DF pages.
198
+ * We need that to fetch the kiosk DFs consistently, until we have
199
+ * RPC calls that allow filtering of Type / batch fetching of spec
200
+ */
201
+ export async function getAllDynamicFields(
202
+ provider: JsonRpcProvider,
203
+ parentId: ObjectId,
204
+ pagination: PaginationArguments<string>,
205
+ ) {
206
+ let hasNextPage = true;
207
+ let cursor = undefined;
208
+ const data: DynamicFieldInfo[] = [];
209
+
210
+ while (hasNextPage) {
211
+ const result = await provider.getDynamicFields({
212
+ parentId,
213
+ limit: pagination.limit || undefined,
214
+ cursor,
215
+ });
216
+ data.push(...result.data);
217
+ hasNextPage = result.hasNextPage;
218
+ cursor = result.nextCursor;
219
+ }
220
+
221
+ return data;
222
+ }