@mysten/kiosk 0.0.0-experimental-20230530145812 → 0.0.0-experimental-20230602192304
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 +9 -3
- package/README.md +27 -9
- package/dist/bcs.d.ts +1 -32
- package/dist/constants.d.ts +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +136 -39
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +121 -38
- package/dist/index.mjs.map +1 -1
- package/dist/query/kiosk.d.ts +1 -1
- package/dist/query/transfer-policy.d.ts +1 -3
- package/dist/tx/kiosk.d.ts +6 -11
- package/dist/tx/transfer-policy.d.ts +8 -6
- package/dist/types/env.d.ts +13 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/kiosk.d.ts +52 -0
- package/dist/types/transfer-policy.d.ts +23 -0
- package/dist/utils.d.ts +14 -8
- package/package.json +1 -1
- package/src/bcs.ts +11 -40
- package/src/constants.ts +10 -0
- package/src/index.ts +2 -0
- package/src/query/kiosk.ts +1 -1
- package/src/query/transfer-policy.ts +8 -10
- package/src/tx/kiosk.ts +65 -28
- package/src/tx/transfer-policy.ts +38 -13
- package/src/types/env.ts +22 -0
- package/src/types/index.ts +21 -0
- package/src/types/kiosk.ts +66 -0
- package/src/types/transfer-policy.ts +33 -0
- package/src/utils.ts +39 -19
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/bcs.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';\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, Kiosk } from './bcs';\n\n/**\n * A valid argument for any of the Kiosk functions.\n */\nexport type ObjectArgument =\n | string\n | TransactionArgument\n | SharedObjectRef\n | SuiObjectRef;\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('0x2::kiosk::Kiosk', 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 const 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 const 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 const 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","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ObjectOwner, bcs } from '@mysten/sui.js';\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// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType('0x2::kiosk::Kiosk', {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\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// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType('0x2::kiosk::PurchaseCap', {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType('0x2::transfer_policy::TransferPolicyCreated', {\n id: 'address',\n});\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\nbcs.registerStructType('0x2::transfer_policy::TransferPolicy', {\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, TransactionBlock } from '@mysten/sui.js';\nimport { ObjectArgument, objArg } from '../utils';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** The Transer Policy Rules package address */\n// TODO: Figure out how we serve this for both testnet & mainnet (different package)\nexport const TRANSFER_POLICY_RULES_PACKAGE_ADDRESS =\n 'bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585';\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(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: string,\n transferRequest: TransactionArgument,\n) {\n const policyObj = objArg(tx, policyId);\n // calculates the amount\n const [amount] = tx.moveCall({\n target: `${TRANSFER_POLICY_RULES_PACKAGE_ADDRESS}::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: `${TRANSFER_POLICY_RULES_PACKAGE_ADDRESS}::royalty_rule::pay`,\n typeArguments: [itemType],\n arguments: [policyObj, transferRequest, feeCoin],\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 { ObjectArgument, getTypeWithoutPackageAddress, objArg } from '../utils';\nimport { KioskListing } from '../query/kiosk';\nimport { TransferPolicy } from '../bcs';\nimport { confirmRequest, resolveRoyaltyRule } from './transfer-policy';\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/**\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(amount, 'Option<u64>')\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 PurchasedItem OR places the item in the user's kiosk (if there's a kiosk lock policy).\n */\nexport function purchaseAndResolvePolicies(\n tx: TransactionBlock,\n itemType: string,\n listing: KioskListing,\n kioskId: string,\n itemId: string,\n policy: TransferPolicy,\n): TransactionArgument | null {\n // if we don't pass the listing or the listing doens't have a price, return.\n if (!listing || listing?.price === undefined) return null;\n\n // Split the coin for the amount of the listing.\n const coin = tx.splitCoins(tx.gas, [tx.pure(listing.price)]);\n\n // initialize the purchase `kiosk::purchase`\n const [purchasedItem, transferRequest] = purchase(\n tx,\n itemType,\n kioskId,\n itemId,\n coin,\n );\n\n // Start resolving rules.\n // For now, we only support royalty rule.\n // Will need some tweaking to make it function properly with the other\n // ruleset.\n for (let rule of policy.rules) {\n const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);\n\n switch (ruleWithoutAddr) {\n case 'royalty_rule::Rule':\n resolveRoyaltyRule(\n tx,\n itemType,\n listing.price,\n policy.id,\n transferRequest,\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 purchasedItem;\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 '../bcs';\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 { TransferPolicy, bcs } from '../bcs';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `0x2::transfer_policy::TransferPolicyCreated`;\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(\n '0x2::transfer_policy::TransferPolicy',\n policy.bcs.bcsBytes,\n 'base64',\n );\n\n return {\n id: policy?.objectId,\n type: `0x2::transfer_policy::TransferPolicy<${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 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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -5,29 +5,65 @@ import {
|
|
|
5
5
|
|
|
6
6
|
// src/bcs.ts
|
|
7
7
|
import { bcs } from "@mysten/sui.js";
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
// src/types/kiosk.ts
|
|
10
|
+
var KIOSK_MODULE = "0x2::kiosk";
|
|
11
|
+
var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
|
|
12
|
+
var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
|
|
13
|
+
var KIOSK_ITEM = `${KIOSK_MODULE}::Item`;
|
|
14
|
+
var KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;
|
|
15
|
+
var KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;
|
|
16
|
+
var KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;
|
|
17
|
+
|
|
18
|
+
// src/types/transfer-policy.ts
|
|
19
|
+
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
20
|
+
var TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;
|
|
21
|
+
var TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;
|
|
22
|
+
var KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
|
|
23
|
+
var ROYALTY_RULE = "royalty_rule::Rule";
|
|
24
|
+
|
|
25
|
+
// src/types/env.ts
|
|
26
|
+
var testnetEnvironment = { env: "testnet" };
|
|
27
|
+
var mainnetEnvironment = { env: "mainnet" };
|
|
28
|
+
var customEnvironment = (address) => ({
|
|
29
|
+
env: "custom",
|
|
30
|
+
address
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// src/bcs.ts
|
|
34
|
+
bcs.registerStructType(KIOSK_TYPE, {
|
|
9
35
|
id: "address",
|
|
10
36
|
profits: "u64",
|
|
11
37
|
owner: "address",
|
|
12
38
|
itemCount: "u32",
|
|
13
39
|
allowExtensions: "bool"
|
|
14
40
|
});
|
|
15
|
-
bcs.registerStructType(
|
|
41
|
+
bcs.registerStructType(KIOSK_PURCHASE_CAP, {
|
|
16
42
|
id: "address",
|
|
17
43
|
kioskId: "address",
|
|
18
44
|
itemId: "address",
|
|
19
45
|
minPrice: "u64"
|
|
20
46
|
});
|
|
21
|
-
bcs.registerStructType(
|
|
47
|
+
bcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {
|
|
22
48
|
id: "address"
|
|
23
49
|
});
|
|
24
|
-
bcs.registerStructType(
|
|
50
|
+
bcs.registerStructType(TRANSFER_POLICY_TYPE, {
|
|
25
51
|
id: "address",
|
|
26
52
|
balance: "u64",
|
|
27
53
|
rules: ["vector", "string"]
|
|
28
54
|
});
|
|
29
55
|
|
|
56
|
+
// src/constants.ts
|
|
57
|
+
var TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
58
|
+
var MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
|
|
59
|
+
|
|
30
60
|
// src/utils.ts
|
|
61
|
+
var rulesPackageAddresses = {
|
|
62
|
+
mainnet: MAINNET_RULES_PACKAGE_ADDRESS,
|
|
63
|
+
testnet: TESTNET_RULES_PACKAGE_ADDRESS,
|
|
64
|
+
devnet: "",
|
|
65
|
+
custom: null
|
|
66
|
+
};
|
|
31
67
|
function objArg(tx, arg) {
|
|
32
68
|
if (typeof arg === "string") {
|
|
33
69
|
return tx.object(arg);
|
|
@@ -51,7 +87,7 @@ async function getKioskObject(provider, id) {
|
|
|
51
87
|
if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
|
|
52
88
|
throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
|
|
53
89
|
}
|
|
54
|
-
return bcs.de(
|
|
90
|
+
return bcs.de(KIOSK_TYPE, queryRes.data.bcs.bcsBytes, "base64");
|
|
55
91
|
}
|
|
56
92
|
function extractKioskData(data, listings, lockedItemIds) {
|
|
57
93
|
return data.reduce(
|
|
@@ -83,10 +119,10 @@ function extractKioskData(data, listings, lockedItemIds) {
|
|
|
83
119
|
{ items: [], itemIds: [], listingIds: [], extensions: [] }
|
|
84
120
|
);
|
|
85
121
|
}
|
|
86
|
-
|
|
122
|
+
function getTypeWithoutPackageAddress(type) {
|
|
87
123
|
return type.split("::").slice(-2).join("::");
|
|
88
|
-
}
|
|
89
|
-
|
|
124
|
+
}
|
|
125
|
+
function attachListingsAndPrices(kioskData, listings, listingObjects) {
|
|
90
126
|
const itemListings = listings.reduce(
|
|
91
127
|
(acc, item, idx) => {
|
|
92
128
|
acc[item.objectId] = { ...item };
|
|
@@ -103,8 +139,8 @@ var attachListingsAndPrices = (kioskData, listings, listingObjects) => {
|
|
|
103
139
|
kioskData.items.map((item) => {
|
|
104
140
|
item.listing = itemListings[item.objectId] || void 0;
|
|
105
141
|
});
|
|
106
|
-
}
|
|
107
|
-
|
|
142
|
+
}
|
|
143
|
+
function attachLockedItems(kioskData, lockedItemIds) {
|
|
108
144
|
const lockedStatuses = lockedItemIds.reduce(
|
|
109
145
|
(acc, item) => {
|
|
110
146
|
acc[item] = true;
|
|
@@ -115,11 +151,17 @@ var attachLockedItems = (kioskData, lockedItemIds) => {
|
|
|
115
151
|
kioskData.items.map((item) => {
|
|
116
152
|
item.isLocked = lockedStatuses[item.objectId] || false;
|
|
117
153
|
});
|
|
118
|
-
}
|
|
154
|
+
}
|
|
155
|
+
function getRulePackageAddress(environment) {
|
|
156
|
+
if (environment.env === "custom") {
|
|
157
|
+
if (!environment.address)
|
|
158
|
+
throw new Error("Please supply the custom package address for rules.");
|
|
159
|
+
return environment.address;
|
|
160
|
+
}
|
|
161
|
+
return rulesPackageAddresses[environment.env];
|
|
162
|
+
}
|
|
119
163
|
|
|
120
164
|
// src/tx/transfer-policy.ts
|
|
121
|
-
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
122
|
-
var TRANSFER_POLICY_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
123
165
|
function createTransferPolicy(tx, itemType, publisher) {
|
|
124
166
|
let [transferPolicy, transferPolicyCap] = tx.moveCall({
|
|
125
167
|
target: `${TRANSFER_POLICY_MODULE}::new`,
|
|
@@ -134,7 +176,7 @@ function createTransferPolicy(tx, itemType, publisher) {
|
|
|
134
176
|
return transferPolicyCap;
|
|
135
177
|
}
|
|
136
178
|
function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
|
|
137
|
-
let amountArg = amount !== null ? tx.pure(amount, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
179
|
+
let amountArg = amount !== null ? tx.pure({ Some: amount }, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
138
180
|
let [profits] = tx.moveCall({
|
|
139
181
|
target: `${TRANSFER_POLICY_MODULE}::withdraw`,
|
|
140
182
|
typeArguments: [itemType],
|
|
@@ -156,25 +198,30 @@ function removeTransferPolicyRule(tx, itemType, ruleType, configType, policy, po
|
|
|
156
198
|
arguments: [objArg(tx, policy), policyCap]
|
|
157
199
|
});
|
|
158
200
|
}
|
|
159
|
-
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest) {
|
|
201
|
+
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest, environment) {
|
|
160
202
|
const policyObj = objArg(tx, policyId);
|
|
161
203
|
const [amount] = tx.moveCall({
|
|
162
|
-
target: `${
|
|
204
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,
|
|
163
205
|
typeArguments: [itemType],
|
|
164
206
|
arguments: [policyObj, objArg(tx, price)]
|
|
165
207
|
});
|
|
166
208
|
const feeCoin = tx.splitCoins(tx.gas, [amount]);
|
|
167
209
|
tx.moveCall({
|
|
168
|
-
target: `${
|
|
210
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,
|
|
169
211
|
typeArguments: [itemType],
|
|
170
212
|
arguments: [policyObj, transferRequest, feeCoin]
|
|
171
213
|
});
|
|
172
214
|
}
|
|
215
|
+
function resolveKioskLockRule(tx, itemType, item, kiosk, kioskCap, policyId, transferRequest, environment) {
|
|
216
|
+
lock(tx, itemType, kiosk, kioskCap, policyId, item);
|
|
217
|
+
tx.moveCall({
|
|
218
|
+
target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,
|
|
219
|
+
typeArguments: [itemType],
|
|
220
|
+
arguments: [transferRequest, objArg(tx, kiosk)]
|
|
221
|
+
});
|
|
222
|
+
}
|
|
173
223
|
|
|
174
224
|
// src/tx/kiosk.ts
|
|
175
|
-
var KIOSK_MODULE = "0x2::kiosk";
|
|
176
|
-
var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
|
|
177
|
-
var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
|
|
178
225
|
function createKiosk(tx) {
|
|
179
226
|
let [kiosk, kioskOwnerCap] = tx.moveCall({
|
|
180
227
|
target: `${KIOSK_MODULE}::new`
|
|
@@ -271,7 +318,12 @@ function purchase(tx, itemType, kiosk, itemId, payment) {
|
|
|
271
318
|
return [item, transferRequest];
|
|
272
319
|
}
|
|
273
320
|
function withdrawFromKiosk(tx, kiosk, kioskCap, amount) {
|
|
274
|
-
let amountArg = amount !== null ? tx.pure(
|
|
321
|
+
let amountArg = amount !== null ? tx.pure(
|
|
322
|
+
{
|
|
323
|
+
Some: amount
|
|
324
|
+
},
|
|
325
|
+
"Option<u64>"
|
|
326
|
+
) : tx.pure({ None: true }, "Option<u64>");
|
|
275
327
|
let [coin] = tx.moveCall({
|
|
276
328
|
target: `${KIOSK_MODULE}::withdraw`,
|
|
277
329
|
arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg]
|
|
@@ -321,27 +373,46 @@ function returnValue(tx, itemType, kiosk, item, promise) {
|
|
|
321
373
|
arguments: [objArg(tx, kiosk), item, promise]
|
|
322
374
|
});
|
|
323
375
|
}
|
|
324
|
-
function purchaseAndResolvePolicies(tx, itemType,
|
|
325
|
-
if (
|
|
326
|
-
|
|
327
|
-
const coin = tx.splitCoins(tx.gas, [tx.pure(
|
|
376
|
+
function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy, environment, extraParams) {
|
|
377
|
+
if (price === void 0 || typeof price !== "string")
|
|
378
|
+
throw new Error(`Price of the listing is not supplied.`);
|
|
379
|
+
const coin = tx.splitCoins(tx.gas, [tx.pure(price, "u64")]);
|
|
328
380
|
const [purchasedItem, transferRequest] = purchase(
|
|
329
381
|
tx,
|
|
330
382
|
itemType,
|
|
331
|
-
|
|
383
|
+
kiosk,
|
|
332
384
|
itemId,
|
|
333
385
|
coin
|
|
334
386
|
);
|
|
387
|
+
let hasKioskLockRule = false;
|
|
335
388
|
for (let rule of policy.rules) {
|
|
336
389
|
const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);
|
|
337
390
|
switch (ruleWithoutAddr) {
|
|
338
|
-
case
|
|
391
|
+
case ROYALTY_RULE:
|
|
339
392
|
resolveRoyaltyRule(
|
|
340
393
|
tx,
|
|
341
394
|
itemType,
|
|
342
|
-
|
|
395
|
+
price,
|
|
343
396
|
policy.id,
|
|
344
|
-
transferRequest
|
|
397
|
+
transferRequest,
|
|
398
|
+
environment
|
|
399
|
+
);
|
|
400
|
+
break;
|
|
401
|
+
case KIOSK_LOCK_RULE:
|
|
402
|
+
if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)
|
|
403
|
+
throw new Error(
|
|
404
|
+
`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`
|
|
405
|
+
);
|
|
406
|
+
hasKioskLockRule = true;
|
|
407
|
+
resolveKioskLockRule(
|
|
408
|
+
tx,
|
|
409
|
+
itemType,
|
|
410
|
+
purchasedItem,
|
|
411
|
+
extraParams.ownedKiosk,
|
|
412
|
+
extraParams.ownedKioskCap,
|
|
413
|
+
policy.id,
|
|
414
|
+
transferRequest,
|
|
415
|
+
environment
|
|
345
416
|
);
|
|
346
417
|
break;
|
|
347
418
|
default:
|
|
@@ -349,7 +420,10 @@ function purchaseAndResolvePolicies(tx, itemType, listing, kioskId, itemId, poli
|
|
|
349
420
|
}
|
|
350
421
|
}
|
|
351
422
|
confirmRequest(tx, itemType, policy.id, transferRequest);
|
|
352
|
-
return
|
|
423
|
+
return {
|
|
424
|
+
item: purchasedItem,
|
|
425
|
+
canTransfer: !hasKioskLockRule
|
|
426
|
+
};
|
|
353
427
|
}
|
|
354
428
|
|
|
355
429
|
// src/query/kiosk.ts
|
|
@@ -382,7 +456,6 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
|
|
|
382
456
|
}
|
|
383
457
|
|
|
384
458
|
// src/query/transfer-policy.ts
|
|
385
|
-
var TRANSFER_POLICY_CREATED_EVENT = `0x2::transfer_policy::TransferPolicyCreated`;
|
|
386
459
|
async function queryTransferPolicy(provider, type) {
|
|
387
460
|
const { data } = await provider.queryEvents({
|
|
388
461
|
query: {
|
|
@@ -400,14 +473,10 @@ async function queryTransferPolicy(provider, type) {
|
|
|
400
473
|
`Invalid policy: ${policy?.objectId}, expected object, got package`
|
|
401
474
|
);
|
|
402
475
|
}
|
|
403
|
-
let parsed = bcs.de(
|
|
404
|
-
"0x2::transfer_policy::TransferPolicy",
|
|
405
|
-
policy.bcs.bcsBytes,
|
|
406
|
-
"base64"
|
|
407
|
-
);
|
|
476
|
+
let parsed = bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, "base64");
|
|
408
477
|
return {
|
|
409
478
|
id: policy?.objectId,
|
|
410
|
-
type:
|
|
479
|
+
type: `${TRANSFER_POLICY_TYPE}<${type}>`,
|
|
411
480
|
owner: policy?.owner,
|
|
412
481
|
rules: parsed.rules,
|
|
413
482
|
balance: parsed.balance
|
|
@@ -415,12 +484,20 @@ async function queryTransferPolicy(provider, type) {
|
|
|
415
484
|
});
|
|
416
485
|
}
|
|
417
486
|
export {
|
|
487
|
+
KIOSK_ITEM,
|
|
488
|
+
KIOSK_LISTING,
|
|
489
|
+
KIOSK_LOCK,
|
|
490
|
+
KIOSK_LOCK_RULE,
|
|
418
491
|
KIOSK_MODULE,
|
|
419
492
|
KIOSK_OWNER_CAP,
|
|
493
|
+
KIOSK_PURCHASE_CAP,
|
|
420
494
|
KIOSK_TYPE,
|
|
495
|
+
MAINNET_RULES_PACKAGE_ADDRESS,
|
|
496
|
+
ROYALTY_RULE,
|
|
497
|
+
TESTNET_RULES_PACKAGE_ADDRESS,
|
|
421
498
|
TRANSFER_POLICY_CREATED_EVENT,
|
|
422
499
|
TRANSFER_POLICY_MODULE,
|
|
423
|
-
|
|
500
|
+
TRANSFER_POLICY_TYPE,
|
|
424
501
|
attachListingsAndPrices,
|
|
425
502
|
attachLockedItems,
|
|
426
503
|
bcs,
|
|
@@ -431,13 +508,16 @@ export {
|
|
|
431
508
|
createKiosk,
|
|
432
509
|
createKioskAndShare,
|
|
433
510
|
createTransferPolicy,
|
|
511
|
+
customEnvironment,
|
|
434
512
|
delist,
|
|
435
513
|
extractKioskData,
|
|
436
514
|
fetchKiosk,
|
|
437
515
|
getKioskObject,
|
|
516
|
+
getRulePackageAddress,
|
|
438
517
|
getTypeWithoutPackageAddress,
|
|
439
518
|
list,
|
|
440
519
|
lock,
|
|
520
|
+
mainnetEnvironment,
|
|
441
521
|
objArg,
|
|
442
522
|
place,
|
|
443
523
|
placeAndList,
|
|
@@ -445,9 +525,12 @@ export {
|
|
|
445
525
|
purchaseAndResolvePolicies,
|
|
446
526
|
queryTransferPolicy,
|
|
447
527
|
removeTransferPolicyRule,
|
|
528
|
+
resolveKioskLockRule,
|
|
448
529
|
resolveRoyaltyRule,
|
|
449
530
|
returnValue,
|
|
531
|
+
rulesPackageAddresses,
|
|
450
532
|
take,
|
|
533
|
+
testnetEnvironment,
|
|
451
534
|
withdrawFromKiosk,
|
|
452
535
|
withdrawFromPolicy
|
|
453
536
|
};
|