{"version":3,"file":"resolve.mjs","names":["royaltyRule.feeAmount","royaltyRule.pay","kiosk.lock","kioskLockRule.prove","personalKioskRule.prove","floorPriceRule.prove"],"sources":["../../../src/tx/rules/resolve.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { bcs } from '@mysten/sui/bcs';\nimport { normalizeSuiAddress } from '@mysten/sui/utils';\n\nimport type { RuleResolvingParams } from '../../types/index.js';\nimport * as kiosk from '../../contracts/0x2/kiosk.js';\nimport * as royaltyRule from '../../contracts/kiosk/royalty_rule.js';\nimport * as kioskLockRule from '../../contracts/kiosk/kiosk_lock_rule.js';\nimport * as personalKioskRule from '../../contracts/kiosk/personal_kiosk_rule.js';\nimport * as floorPriceRule from '../../contracts/kiosk/floor_price_rule.js';\n/**\n * A helper to resolve the royalty rule.\n */\nexport async function resolveRoyaltyRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\titemType,\n\t\tprice,\n\t\tpackageId,\n\t\ttransferRequest,\n\t\tpolicyId,\n\t\tkioskClient,\n\t} = params;\n\n\t// We attempt to resolve the fee amount outside of the PTB so that the split amount is known before the transaction is sent.\n\t// This improves the display of the transaction within the wallet.\n\n\tconst feeTx = new Transaction();\n\n\t// calculates the amount\n\tfeeTx.add(\n\t\troyaltyRule.feeAmount({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: feeTx.object(policyId),\n\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\tconst policyObj = tx.object(policyId);\n\n\tlet amount: TransactionArgument | bigint | null = null;\n\n\ttry {\n\t\tfeeTx.setSender(tx.getData().sender || normalizeSuiAddress('0x0'));\n\t\tconst txBytes = await feeTx.build({ client: kioskClient.client });\n\n\t\tconst result = await kioskClient.client.core.simulateTransaction({\n\t\t\ttransaction: txBytes,\n\t\t\tinclude: { commandResults: true },\n\t\t});\n\n\t\tif (result.commandResults && result.commandResults.length > 0) {\n\t\t\tconst returnedAmount = result.commandResults[0]?.returnValues?.[0]?.bcs;\n\t\t\tif (returnedAmount) {\n\t\t\t\tamount = BigInt(bcs.U64.parse(returnedAmount));\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// If simulate fails, fall back to resolving within the PTB\n\t}\n\n\t// We were not able to calculate the amount outside of the transaction, so fall back to resolving it within the PTB\n\tif (!amount) {\n\t\t[amount] = tx.add(\n\t\t\troyaltyRule.feeAmount({\n\t\t\t\tpackage: packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tpolicy: policyObj,\n\t\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t\t},\n\t\t\t\ttypeArguments: [itemType],\n\t\t\t}),\n\t\t);\n\t}\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.add(\n\t\troyaltyRule.pay({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: policyObj,\n\t\t\t\trequest: transferRequest,\n\t\t\t\tpayment: feeCoin,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\nexport function resolveKioskLockRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\tpackageId,\n\t\titemType,\n\t\tkiosk: kioskId,\n\t\tkioskCap,\n\t\tpolicyId,\n\t\tpurchasedItem,\n\t\ttransferRequest,\n\t} = params;\n\n\tif (!kioskId || !kioskCap) throw new Error('Missing Owned Kiosk or Owned Kiosk Cap');\n\n\ttx.add(\n\t\tkiosk.lock({\n\t\t\targuments: [kioskId, kioskCap, policyId, purchasedItem],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.add(\n\t\tkioskLockRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\trequest: transferRequest,\n\t\t\t\tkiosk: tx.object(kioskId),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the personalKioskRule.\n * @param params\n */\nexport function resolvePersonalKioskRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, kiosk, transferRequest } = params;\n\n\tif (!kiosk) throw new Error('Missing owned Kiosk.');\n\n\t// proves that the destination kiosk is personal.\n\ttx.add(\n\t\tpersonalKioskRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tkiosk: tx.object(kiosk),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the floor price rule.\n * The floor price rule verifies that the paid amount meets the minimum price.\n * @param params\n */\nexport function resolveFloorPriceRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, policyId, transferRequest } = params;\n\n\t// proves that the paid amount meets the floor price requirement\n\ttx.add(\n\t\tfloorPriceRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: tx.object(policyId),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,eAAsB,mBAAmB,QAA6B;CACrE,MAAM,EACL,aAAa,IACb,UACA,OACA,WACA,iBACA,UACA,gBACG;CAKJ,MAAM,QAAQ,IAAI,aAAa;AAG/B,OAAM,IACLA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ,MAAM,OAAO,SAAS;GAC9B,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAED,MAAM,YAAY,GAAG,OAAO,SAAS;CAErC,IAAI,SAA8C;AAElD,KAAI;AACH,QAAM,UAAU,GAAG,SAAS,CAAC,UAAU,oBAAoB,MAAM,CAAC;EAClE,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,QAAQ,YAAY,QAAQ,CAAC;EAEjE,MAAM,SAAS,MAAM,YAAY,OAAO,KAAK,oBAAoB;GAChE,aAAa;GACb,SAAS,EAAE,gBAAgB,MAAM;GACjC,CAAC;AAEF,MAAI,OAAO,kBAAkB,OAAO,eAAe,SAAS,GAAG;GAC9D,MAAM,iBAAiB,OAAO,eAAe,IAAI,eAAe,IAAI;AACpE,OAAI,eACH,UAAS,OAAO,IAAI,IAAI,MAAM,eAAe,CAAC;;SAGzC;AAKR,KAAI,CAAC,OACJ,EAAC,UAAU,GAAG,IACbA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ;GACR,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAIF,MAAM,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;AAG/C,IAAG,IACFC,IAAgB;EACf,SAAS;EACT,WAAW;GACV,QAAQ;GACR,SAAS;GACT,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;AAGF,SAAgB,qBAAqB,QAA6B;CACjE,MAAM,EACL,aAAa,IACb,WACA,UACA,OAAO,SACP,UACA,UACA,eACA,oBACG;AAEJ,KAAI,CAAC,WAAW,CAAC,SAAU,OAAM,IAAI,MAAM,yCAAyC;AAEpF,IAAG,IACFC,KAAW;EACV,WAAW;GAAC;GAAS;GAAU;GAAU;GAAc;EACvD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAGD,IAAG,IACFC,MAAoB;EACnB,SAAS;EACT,WAAW;GACV,SAAS;GACT,OAAO,GAAG,OAAO,QAAQ;GACzB;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;AAOF,SAAgB,yBAAyB,QAA6B;CACrE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,OAAO,oBAAoB;AAEzE,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,uBAAuB;AAGnD,IAAG,IACFC,QAAwB;EACvB,SAAS;EACT,WAAW;GACV,OAAO,GAAG,OAAO,MAAM;GACvB,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;;AAQF,SAAgB,sBAAsB,QAA6B;CAClE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,UAAU,oBAAoB;AAG5E,IAAG,IACFC,QAAqB;EACpB,SAAS;EACT,WAAW;GACV,QAAQ,GAAG,OAAO,SAAS;GAC3B,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF"}