UNPKG

@mysten/suins

Version:
1 lines 28.5 kB
{"version":3,"file":"suins-transaction.mjs","names":["payment.initRegistration","payment.initRenewal","paymentsModule.calculatePrice","paymentsModule.handleBasePayment","paymentsModule.handlePayment","payment.register","payment.renew","paymentsModule.calculatePriceAfterDiscount","couponHouse.applyCoupon","freeClaims.freeClaim","discounts.applyPercentageDiscount","controller.setReverseLookup","controller.burnExpiredSubname","controller.burnExpired"],"sources":["../src/suins-transaction.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui/bcs';\nimport type {\n\tTransaction,\n\tTransactionObjectArgument,\n\tTransactionObjectInput,\n} from '@mysten/sui/transactions';\nimport { isValidSuiNSName, normalizeSuiNSName, SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils';\n\nimport { ALLOWED_METADATA, MAX_U64 } from './constants.js';\nimport { isNestedSubName, isSubName, zeroCoin } from './helpers.js';\nimport type { SuinsClient } from './suins-client.js';\nimport type { DiscountInfo, ReceiptParams, RegistrationParams, RenewalParams } from './types.js';\n\nimport * as payment from './contracts/suins/payment.js';\nimport * as controller from './contracts/suins/controller.js';\nimport * as paymentsModule from './contracts/suins_payments/payments.js';\nimport * as couponHouse from './contracts/suins_coupons/coupon_house.js';\nimport * as discounts from './contracts/suins_discounts/discounts.js';\nimport * as freeClaims from './contracts/suins_discounts/free_claims.js';\n\nexport class SuinsTransaction {\n\tsuinsClient: SuinsClient;\n\ttransaction: Transaction;\n\n\tconstructor(client: SuinsClient, transaction: Transaction) {\n\t\tthis.suinsClient = client;\n\t\tthis.transaction = transaction;\n\t}\n\n\t/**\n\t * Registers a domain for a number of years.\n\t */\n\tregister(params: RegistrationParams): TransactionObjectArgument {\n\t\tif (params.couponCode && params.discountInfo) {\n\t\t\tthrow new Error('Cannot apply both coupon and discount NFT');\n\t\t}\n\n\t\tconst paymentIntent = this.initRegistration(params.domain);\n\t\tif (params.couponCode) {\n\t\t\tthis.applyCoupon(paymentIntent, params.couponCode);\n\t\t}\n\t\tif (params.discountInfo) {\n\t\t\tthis.applyDiscount(paymentIntent, params.discountInfo);\n\t\t}\n\t\tconst priceAfterDiscount = this.calculatePriceAfterDiscount(\n\t\t\tpaymentIntent,\n\t\t\tparams.coinConfig.type,\n\t\t);\n\t\tconst receipt = this.generateReceipt({\n\t\t\tpaymentIntent,\n\t\t\tpriceAfterDiscount,\n\t\t\tcoinConfig: params.coinConfig,\n\t\t\tcoin: params.coin,\n\t\t\tmaxAmount: params.maxAmount,\n\t\t\tpriceInfoObjectId: params.priceInfoObjectId,\n\t\t});\n\t\tconst nft = this.finalizeRegister(receipt);\n\n\t\tif (params.years > 1) {\n\t\t\tthis.renew({\n\t\t\t\tnft,\n\t\t\t\tyears: params.years - 1,\n\t\t\t\tcoinConfig: params.coinConfig,\n\t\t\t\tcoin: params.coin,\n\t\t\t\tcouponCode: params.couponCode,\n\t\t\t\tdiscountInfo: params.discountInfo,\n\t\t\t\tmaxAmount: params.maxAmount,\n\t\t\t\tpriceInfoObjectId: params.priceInfoObjectId,\n\t\t\t});\n\t\t}\n\n\t\treturn nft as TransactionObjectArgument;\n\t}\n\n\t/**\n\t * Renews an NFT for a number of years.\n\t */\n\trenew(params: RenewalParams): void {\n\t\tif (params.couponCode && params.discountInfo) {\n\t\t\tthrow new Error('Cannot apply both coupon and discount NFT');\n\t\t}\n\n\t\tconst paymentIntent = this.initRenewal(params.nft, params.years);\n\t\tif (params.couponCode) {\n\t\t\tthis.applyCoupon(paymentIntent, params.couponCode);\n\t\t}\n\t\tif (params.discountInfo) {\n\t\t\tthis.applyDiscount(paymentIntent, params.discountInfo);\n\t\t}\n\t\tconst priceAfterDiscount = this.calculatePriceAfterDiscount(\n\t\t\tpaymentIntent,\n\t\t\tparams.coinConfig.type,\n\t\t);\n\t\tconst receipt = this.generateReceipt({\n\t\t\tpaymentIntent,\n\t\t\tpriceAfterDiscount,\n\t\t\tcoinConfig: params.coinConfig,\n\t\t\tcoin: params.coin,\n\t\t\tmaxAmount: params.maxAmount,\n\t\t\tpriceInfoObjectId: params.priceInfoObjectId,\n\t\t});\n\t\tthis.finalizeRenew(receipt, params.nft);\n\t}\n\n\tinitRegistration(domain: string): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpayment.initRegistration({\n\t\t\t\tpackage: config.packageId,\n\t\t\t\targuments: { suins: config.suins, domain },\n\t\t\t}),\n\t\t);\n\t}\n\n\tinitRenewal(nft: TransactionObjectInput, years: number): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpayment.initRenewal({\n\t\t\t\tpackage: config.packageId,\n\t\t\t\targuments: { suins: config.suins, nft: this.transaction.object(nft), years },\n\t\t\t}),\n\t\t);\n\t}\n\n\tcalculatePrice(\n\t\tbaseAmount: TransactionObjectArgument,\n\t\tpaymentType: string,\n\t\tpriceInfoObjectId: string,\n\t): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpaymentsModule.calculatePrice({\n\t\t\t\tpackage: config.payments.packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tsuins: config.suins,\n\t\t\t\t\tbaseAmount,\n\t\t\t\t\tpriceInfoObject: priceInfoObjectId,\n\t\t\t\t},\n\t\t\t\ttypeArguments: [paymentType],\n\t\t\t}),\n\t\t);\n\t}\n\n\thandleBasePayment(\n\t\tpaymentIntent: TransactionObjectArgument,\n\t\tpaymentArg: TransactionObjectArgument,\n\t\tpaymentType: string,\n\t): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpaymentsModule.handleBasePayment({\n\t\t\t\tpackage: config.payments.packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tsuins: config.suins,\n\t\t\t\t\tbbbVault: config.bbb.vault,\n\t\t\t\t\tintent: paymentIntent,\n\t\t\t\t\tpayment: paymentArg,\n\t\t\t\t},\n\t\t\t\ttypeArguments: [paymentType],\n\t\t\t}),\n\t\t);\n\t}\n\n\thandlePayment(\n\t\tpaymentIntent: TransactionObjectArgument,\n\t\tpaymentArg: TransactionObjectArgument,\n\t\tpaymentType: string,\n\t\tpriceInfoObjectId: string,\n\t\tmaxAmount: bigint = MAX_U64,\n\t): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpaymentsModule.handlePayment({\n\t\t\t\tpackage: config.payments.packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tsuins: config.suins,\n\t\t\t\t\tbbbVault: config.bbb.vault,\n\t\t\t\t\tintent: paymentIntent,\n\t\t\t\t\tpayment: paymentArg,\n\t\t\t\t\tpriceInfoObject: priceInfoObjectId,\n\t\t\t\t\tuserPriceGuard: maxAmount,\n\t\t\t\t},\n\t\t\t\ttypeArguments: [paymentType],\n\t\t\t}),\n\t\t);\n\t}\n\n\tfinalizeRegister(receipt: TransactionObjectArgument): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpayment.register({\n\t\t\t\tpackage: config.packageId,\n\t\t\t\targuments: { receipt, suins: config.suins },\n\t\t\t}),\n\t\t);\n\t}\n\n\tfinalizeRenew(\n\t\treceipt: TransactionObjectArgument,\n\t\tnft: TransactionObjectInput,\n\t): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpayment.renew({\n\t\t\t\tpackage: config.packageId,\n\t\t\t\targuments: { receipt, suins: config.suins, nft: this.transaction.object(nft) },\n\t\t\t}),\n\t\t);\n\t}\n\n\tcalculatePriceAfterDiscount(\n\t\tpaymentIntent: TransactionObjectArgument,\n\t\tpaymentType: string,\n\t): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tpaymentsModule.calculatePriceAfterDiscount({\n\t\t\t\tpackage: config.payments.packageId,\n\t\t\t\targuments: { suins: config.suins, intent: paymentIntent },\n\t\t\t\ttypeArguments: [paymentType],\n\t\t\t}),\n\t\t);\n\t}\n\n\tgenerateReceipt(params: ReceiptParams): TransactionObjectArgument {\n\t\tconst baseAssetPurchase = params.coinConfig.feed === '';\n\t\tif (baseAssetPurchase) {\n\t\t\tconst payment = params.coin\n\t\t\t\t? this.transaction.splitCoins(this.transaction.object(params.coin), [\n\t\t\t\t\t\tparams.priceAfterDiscount,\n\t\t\t\t\t])\n\t\t\t\t: zeroCoin(this.transaction, params.coinConfig.type);\n\t\t\tconst receipt = this.handleBasePayment(params.paymentIntent, payment, params.coinConfig.type);\n\t\t\treturn receipt;\n\t\t} else {\n\t\t\tconst priceInfoObjectId = params.priceInfoObjectId;\n\t\t\tif (!priceInfoObjectId)\n\t\t\t\tthrow new Error('Price info object ID is required for non-base asset purchases');\n\t\t\tconst price = this.calculatePrice(\n\t\t\t\tparams.priceAfterDiscount,\n\t\t\t\tparams.coinConfig.type,\n\t\t\t\tpriceInfoObjectId,\n\t\t\t);\n\t\t\tif (!params.coin) throw new Error('coin input is required');\n\t\t\tconst payment = this.transaction.splitCoins(this.transaction.object(params.coin!), [price]);\n\t\t\tconst receipt = this.handlePayment(\n\t\t\t\tparams.paymentIntent,\n\t\t\t\tpayment,\n\t\t\t\tparams.coinConfig.type,\n\t\t\t\tpriceInfoObjectId,\n\t\t\t\tparams.maxAmount,\n\t\t\t);\n\t\t\treturn receipt;\n\t\t}\n\t}\n\n\t/**\n\t * Applies a coupon to the payment intent.\n\t */\n\tapplyCoupon(intent: TransactionObjectArgument, couponCode: string): TransactionObjectArgument {\n\t\tconst config = this.suinsClient.config;\n\t\treturn this.transaction.add(\n\t\t\tcouponHouse.applyCoupon({\n\t\t\t\tpackage: config.coupons.packageId,\n\t\t\t\targuments: { suins: config.suins, intent, couponCode },\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Applies a discount to the payment intent.\n\t */\n\tapplyDiscount(intent: TransactionObjectArgument, discountInfo: DiscountInfo): void {\n\t\tconst config = this.suinsClient.config;\n\n\t\tif (discountInfo.isFreeClaim) {\n\t\t\tthis.transaction.add(\n\t\t\t\tfreeClaims.freeClaim({\n\t\t\t\t\tpackage: config.discountsPackage.packageId,\n\t\t\t\t\targuments: {\n\t\t\t\t\t\tself: config.discountsPackage.discountHouseId,\n\t\t\t\t\t\tsuins: config.suins,\n\t\t\t\t\t\tintent,\n\t\t\t\t\t\tobject: this.transaction.object(discountInfo.discountNft),\n\t\t\t\t\t},\n\t\t\t\t\ttypeArguments: [discountInfo.type],\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tthis.transaction.add(\n\t\t\t\tdiscounts.applyPercentageDiscount({\n\t\t\t\t\tpackage: config.discountsPackage.packageId,\n\t\t\t\t\targuments: {\n\t\t\t\t\t\tself: config.discountsPackage.discountHouseId,\n\t\t\t\t\t\tintent,\n\t\t\t\t\t\tsuins: config.suins,\n\t\t\t\t\t\t_: this.transaction.object(discountInfo.discountNft),\n\t\t\t\t\t},\n\t\t\t\t\ttypeArguments: [discountInfo.type],\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a subdomain.\n\t */\n\tcreateSubName({\n\t\tparentNft,\n\t\tname,\n\t\texpirationTimestampMs,\n\t\tallowChildCreation,\n\t\tallowTimeExtension,\n\t}: {\n\t\tparentNft: TransactionObjectInput;\n\t\tname: string;\n\t\texpirationTimestampMs: number;\n\t\tallowChildCreation: boolean;\n\t\tallowTimeExtension: boolean;\n\t}) {\n\t\tif (!isValidSuiNSName(name)) throw new Error('Invalid SuiNS name');\n\t\tconst isParentSubdomain = isNestedSubName(name);\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (!this.suinsClient.config.subNamesPackageId)\n\t\t\tthrow new Error('Subnames package ID not found');\n\t\tif (isParentSubdomain && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tconst subNft = this.transaction.moveCall({\n\t\t\ttarget: isParentSubdomain\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::new`\n\t\t\t\t: `${this.suinsClient.config.subNamesPackageId}::subdomains::new`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(parentNft),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t\tthis.transaction.pure.string(normalizeSuiNSName(name, 'dot')),\n\t\t\t\tthis.transaction.pure.u64(expirationTimestampMs),\n\t\t\t\tthis.transaction.pure.bool(!!allowChildCreation),\n\t\t\t\tthis.transaction.pure.bool(!!allowTimeExtension),\n\t\t\t],\n\t\t});\n\n\t\treturn subNft;\n\t}\n\n\t/**\n\t * Builds the PTB to create a leaf subdomain.\n\t * Parent can be a `SuinsRegistration` or a `SubDomainRegistration` object.\n\t * Can be passed in as an ID or a TransactionArgument.\n\t */\n\tcreateLeafSubName({\n\t\tparentNft,\n\t\tname,\n\t\ttargetAddress,\n\t}: {\n\t\tparentNft: TransactionObjectInput;\n\t\tname: string;\n\t\ttargetAddress: string;\n\t}) {\n\t\tif (!isValidSuiNSName(name)) throw new Error('Invalid SuiNS name');\n\t\tconst isParentSubdomain = isNestedSubName(name);\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (!this.suinsClient.config.subNamesPackageId)\n\t\t\tthrow new Error('Subnames package ID not found');\n\t\tif (isParentSubdomain && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: isParentSubdomain\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::new_leaf`\n\t\t\t\t: `${this.suinsClient.config.subNamesPackageId}::subdomains::new_leaf`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(parentNft),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t\tthis.transaction.pure.string(normalizeSuiNSName(name, 'dot')),\n\t\t\t\tthis.transaction.pure.address(targetAddress),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Removes a leaf subname.\n\t */\n\tremoveLeafSubName({ parentNft, name }: { parentNft: TransactionObjectInput; name: string }) {\n\t\tif (!isValidSuiNSName(name)) throw new Error('Invalid SuiNS name');\n\t\tconst isParentSubdomain = isNestedSubName(name);\n\t\tif (!isSubName(name)) throw new Error('This can only be invoked for subnames');\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (!this.suinsClient.config.subNamesPackageId)\n\t\t\tthrow new Error('Subnames package ID not found');\n\t\tif (isParentSubdomain && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: isParentSubdomain\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::remove_leaf`\n\t\t\t\t: `${this.suinsClient.config.subNamesPackageId}::subdomains::remove_leaf`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(parentNft),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t\tthis.transaction.pure.string(normalizeSuiNSName(name, 'dot')),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Sets the target address of an NFT.\n\t */\n\tsetTargetAddress({\n\t\tnft, // Can be string or argument\n\t\taddress,\n\t\tisSubname,\n\t}: {\n\t\tnft: TransactionObjectInput;\n\t\taddress?: string;\n\t\tisSubname?: boolean;\n\t}) {\n\t\tif (isSubname && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: isSubname\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::set_target_address`\n\t\t\t\t: `${this.suinsClient.config.packageId}::controller::set_target_address`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(nft),\n\t\t\t\tthis.transaction.pure(bcs.option(bcs.Address).serialize(address).toBytes()),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Sets a default name for the user.\n\t */\n\tsetDefault(name: string) {\n\t\tif (!isValidSuiNSName(name)) throw new Error('Invalid SuiNS name');\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\n\t\tthis.transaction.add(\n\t\t\tcontroller.setReverseLookup({\n\t\t\t\tpackage: this.suinsClient.config.packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tsuins: this.suinsClient.config.suins,\n\t\t\t\t\tdomainName: normalizeSuiNSName(name, 'dot'),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Edits the setup of a subname.\n\t */\n\teditSetup({\n\t\tparentNft,\n\t\tname,\n\t\tallowChildCreation,\n\t\tallowTimeExtension,\n\t}: {\n\t\tparentNft: TransactionObjectInput;\n\t\tname: string;\n\t\tallowChildCreation: boolean;\n\t\tallowTimeExtension: boolean;\n\t}) {\n\t\tif (!isValidSuiNSName(name)) throw new Error('Invalid SuiNS name');\n\t\tconst isParentSubdomain = isNestedSubName(name);\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (!isParentSubdomain && !this.suinsClient.config.subNamesPackageId)\n\t\t\tthrow new Error('Subnames package ID not found');\n\t\tif (isParentSubdomain && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: isParentSubdomain\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::edit_setup`\n\t\t\t\t: `${this.suinsClient.config.subNamesPackageId}::subdomains::edit_setup`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(parentNft),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t\tthis.transaction.pure.string(normalizeSuiNSName(name, 'dot')),\n\t\t\t\tthis.transaction.pure.bool(!!allowChildCreation),\n\t\t\t\tthis.transaction.pure.bool(!!allowTimeExtension),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Extends the expiration of a subname.\n\t */\n\textendExpiration({\n\t\tnft,\n\t\texpirationTimestampMs,\n\t}: {\n\t\tnft: TransactionObjectInput;\n\t\texpirationTimestampMs: number;\n\t}) {\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (!this.suinsClient.config.subNamesPackageId)\n\t\t\tthrow new Error('Subnames package ID not found');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: `${this.suinsClient.config.subNamesPackageId}::subdomains::extend_expiration`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(nft),\n\t\t\t\tthis.transaction.pure.u64(expirationTimestampMs),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Sets the user data of an NFT.\n\t */\n\tsetUserData({\n\t\tnft,\n\t\tvalue,\n\t\tkey,\n\t\tisSubname,\n\t}: {\n\t\tnft: TransactionObjectInput;\n\t\tvalue: string;\n\t\tkey: string;\n\t\tisSubname?: boolean;\n\t}) {\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\t\tif (isSubname && !this.suinsClient.config.tempSubdomainsProxyPackageId)\n\t\t\tthrow new Error('Subnames proxy package ID not found');\n\n\t\tif (!Object.values(ALLOWED_METADATA).some((x) => x === key)) throw new Error('Invalid key');\n\n\t\tthis.transaction.moveCall({\n\t\t\ttarget: isSubname\n\t\t\t\t? `${this.suinsClient.config.tempSubdomainsProxyPackageId}::subdomain_proxy::set_user_data`\n\t\t\t\t: `${this.suinsClient.config.packageId}::controller::set_user_data`,\n\t\t\targuments: [\n\t\t\t\tthis.transaction.object(this.suinsClient.config.suins),\n\t\t\t\tthis.transaction.object(nft),\n\t\t\t\tthis.transaction.pure.string(key),\n\t\t\t\tthis.transaction.pure.string(value),\n\t\t\t\tthis.transaction.object(SUI_CLOCK_OBJECT_ID),\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Burns an expired NFT to collect storage rebates.\n\t */\n\tburnExpired({ nft, isSubname }: { nft: TransactionObjectInput; isSubname?: boolean }) {\n\t\tif (!this.suinsClient.config.suins) throw new Error('SuiNS Object ID not found');\n\n\t\tif (isSubname) {\n\t\t\tthis.transaction.add(\n\t\t\t\tcontroller.burnExpiredSubname({\n\t\t\t\t\tpackage: this.suinsClient.config.packageId,\n\t\t\t\t\targuments: {\n\t\t\t\t\t\tsuins: this.suinsClient.config.suins,\n\t\t\t\t\t\tnft: this.transaction.object(nft),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tthis.transaction.add(\n\t\t\t\tcontroller.burnExpired({\n\t\t\t\t\tpackage: this.suinsClient.config.packageId,\n\t\t\t\t\targuments: {\n\t\t\t\t\t\tsuins: this.suinsClient.config.suins,\n\t\t\t\t\t\tnft: this.transaction.object(nft),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n"],"mappings":"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"}