{"version":3,"file":"payments.mjs","names":["type_name.TypeName","vec_map.VecMap"],"sources":["../../../src/contracts/suins_payments/payments.ts"],"sourcesContent":["/**************************************************************\n * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *\n **************************************************************/\nimport {\n\tMoveTuple,\n\tMoveStruct,\n\tnormalizeMoveArguments,\n\ttype RawTransactionArgument,\n} from '../utils/index.js';\nimport { bcs } from '@mysten/sui/bcs';\nimport { type Transaction } from '@mysten/sui/transactions';\nimport * as type_name from './deps/std/type_name.js';\nimport * as vec_map from './deps/sui/vec_map.js';\nconst $moduleName = '@suins/payments::payments';\nexport const PaymentsApp = new MoveTuple({\n\tname: `${$moduleName}::PaymentsApp`,\n\tfields: [bcs.bool()],\n});\nexport const CoinTypeData = new MoveStruct({\n\tname: `${$moduleName}::CoinTypeData`,\n\tfields: {\n\t\t/** The coin's decimals. */\n\t\tdecimals: bcs.u8(),\n\t\tdiscount_percentage: bcs.u8(),\n\t\tprice_feed_id: bcs.vector(bcs.u8()),\n\t\ttype_name: type_name.TypeName,\n\t},\n});\nexport const PaymentsConfig = new MoveStruct({\n\tname: `${$moduleName}::PaymentsConfig`,\n\tfields: {\n\t\tcurrencies: vec_map.VecMap(type_name.TypeName, CoinTypeData),\n\t\tbase_currency: type_name.TypeName,\n\t\tmax_age: bcs.u64(),\n\t\t/** The percentage of the payment that gets burned, in basis points. */\n\t\tburn_bps: bcs.u64(),\n\t},\n});\nexport interface HandleBasePaymentArguments {\n\tsuins: RawTransactionArgument<string>;\n\tbbbVault: RawTransactionArgument<string>;\n\tintent: RawTransactionArgument<string>;\n\tpayment: RawTransactionArgument<string>;\n}\nexport interface HandleBasePaymentOptions {\n\tpackage?: string;\n\targuments:\n\t\t| HandleBasePaymentArguments\n\t\t| [\n\t\t\t\tsuins: RawTransactionArgument<string>,\n\t\t\t\tbbbVault: RawTransactionArgument<string>,\n\t\t\t\tintent: RawTransactionArgument<string>,\n\t\t\t\tpayment: RawTransactionArgument<string>,\n\t\t  ];\n\ttypeArguments: [string];\n}\n/**\n * This has to be called with our base payment currency. The payment has to be\n * equal to the base price of the domain. We do not need to check the price feed\n * for the base currency.\n */\nexport function handleBasePayment(options: HandleBasePaymentOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = [null, null, null, null] satisfies (string | null)[];\n\tconst parameterNames = ['suins', 'bbbVault', 'intent', 'payment'];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'handle_base_payment',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t\ttypeArguments: options.typeArguments,\n\t\t});\n}\nexport interface HandlePaymentArguments {\n\tsuins: RawTransactionArgument<string>;\n\tbbbVault: RawTransactionArgument<string>;\n\tintent: RawTransactionArgument<string>;\n\tpayment: RawTransactionArgument<string>;\n\tpriceInfoObject: RawTransactionArgument<string>;\n\tuserPriceGuard: RawTransactionArgument<number | bigint>;\n}\nexport interface HandlePaymentOptions {\n\tpackage?: string;\n\targuments:\n\t\t| HandlePaymentArguments\n\t\t| [\n\t\t\t\tsuins: RawTransactionArgument<string>,\n\t\t\t\tbbbVault: RawTransactionArgument<string>,\n\t\t\t\tintent: RawTransactionArgument<string>,\n\t\t\t\tpayment: RawTransactionArgument<string>,\n\t\t\t\tpriceInfoObject: RawTransactionArgument<string>,\n\t\t\t\tuserPriceGuard: RawTransactionArgument<number | bigint>,\n\t\t  ];\n\ttypeArguments: [string];\n}\n/**\n * Handles a payment done for a non-base currency payment. E.g. SUI, NS.\n *\n * The payment amount is derived from the base currency price and the Pyth price\n * feed.\n *\n * The `user_price_guard` is a value that the user expects to pay. If the payment\n * amount is higher than this value, the payment will be rejected. This is to\n * protect the user from paying more than they expected on their FEs. Ideally, this\n * number should be calculated on the FE based on the price that is being displayed\n * to the user (with a buffer determined by the FE).\n */\nexport function handlePayment(options: HandlePaymentOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = [null, null, null, null, '0x2::clock::Clock', null, 'u64'] satisfies (\n\t\t| string\n\t\t| null\n\t)[];\n\tconst parameterNames = [\n\t\t'suins',\n\t\t'bbbVault',\n\t\t'intent',\n\t\t'payment',\n\t\t'priceInfoObject',\n\t\t'userPriceGuard',\n\t];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'handle_payment',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t\ttypeArguments: options.typeArguments,\n\t\t});\n}\nexport interface CalculatePriceArguments {\n\tsuins: RawTransactionArgument<string>;\n\tbaseAmount: RawTransactionArgument<number | bigint>;\n\tpriceInfoObject: RawTransactionArgument<string>;\n}\nexport interface CalculatePriceOptions {\n\tpackage?: string;\n\targuments:\n\t\t| CalculatePriceArguments\n\t\t| [\n\t\t\t\tsuins: RawTransactionArgument<string>,\n\t\t\t\tbaseAmount: RawTransactionArgument<number | bigint>,\n\t\t\t\tpriceInfoObject: RawTransactionArgument<string>,\n\t\t  ];\n\ttypeArguments: [string];\n}\n/**\n * Calculates the amount that has to be paid in the target currency.\n *\n * Can be used to split the payment amount in a single PTB.\n *\n * 1.  const intent = function_to_get_intent();\n * 2.  const price = calculate_price<SUI>(suins, intent, ...);\n * 3.  const coin = txb.splitCoins(baseCoin, [price])\n * 4.  handle_payment<SUI>(suins, intent, coin, ...);\n */\nexport function calculatePrice(options: CalculatePriceOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = [null, 'u64', '0x2::clock::Clock', null] satisfies (string | null)[];\n\tconst parameterNames = ['suins', 'baseAmount', 'priceInfoObject'];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'calculate_price',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t\ttypeArguments: options.typeArguments,\n\t\t});\n}\nexport interface CalculatePriceAfterDiscountArguments {\n\tsuins: RawTransactionArgument<string>;\n\tintent: RawTransactionArgument<string>;\n}\nexport interface CalculatePriceAfterDiscountOptions {\n\tpackage?: string;\n\targuments:\n\t\t| CalculatePriceAfterDiscountArguments\n\t\t| [suins: RawTransactionArgument<string>, intent: RawTransactionArgument<string>];\n\ttypeArguments: [string];\n}\nexport function calculatePriceAfterDiscount(options: CalculatePriceAfterDiscountOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = [null, null] satisfies (string | null)[];\n\tconst parameterNames = ['suins', 'intent'];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'calculate_price_after_discount',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t\ttypeArguments: options.typeArguments,\n\t\t});\n}\nexport interface NewCoinTypeDataArguments {\n\tcoinMetadata: RawTransactionArgument<string>;\n\tdiscountPercentage: RawTransactionArgument<number>;\n\tpriceFeedId: RawTransactionArgument<number[]>;\n}\nexport interface NewCoinTypeDataOptions {\n\tpackage?: string;\n\targuments:\n\t\t| NewCoinTypeDataArguments\n\t\t| [\n\t\t\t\tcoinMetadata: RawTransactionArgument<string>,\n\t\t\t\tdiscountPercentage: RawTransactionArgument<number>,\n\t\t\t\tpriceFeedId: RawTransactionArgument<number[]>,\n\t\t  ];\n\ttypeArguments: [string];\n}\n/** Creates a new CoinTypeData struct. Leave price_feed_id empty for base currency. */\nexport function newCoinTypeData(options: NewCoinTypeDataOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = [null, 'u8', 'vector<u8>'] satisfies (string | null)[];\n\tconst parameterNames = ['coinMetadata', 'discountPercentage', 'priceFeedId'];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'new_coin_type_data',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t\ttypeArguments: options.typeArguments,\n\t\t});\n}\nexport interface NewPaymentsConfigArguments {\n\tsetups: RawTransactionArgument<string[]>;\n\tbaseCurrency: RawTransactionArgument<string>;\n\tmaxAge: RawTransactionArgument<number | bigint>;\n\tburnBps: RawTransactionArgument<number | bigint>;\n}\nexport interface NewPaymentsConfigOptions {\n\tpackage?: string;\n\targuments:\n\t\t| NewPaymentsConfigArguments\n\t\t| [\n\t\t\t\tsetups: RawTransactionArgument<string[]>,\n\t\t\t\tbaseCurrency: RawTransactionArgument<string>,\n\t\t\t\tmaxAge: RawTransactionArgument<number | bigint>,\n\t\t\t\tburnBps: RawTransactionArgument<number | bigint>,\n\t\t  ];\n}\n/**\n * Creates a new PaymentsConfig struct. Can be attached by the Admin to SuiNS to\n * allow the payments module to work.\n */\nexport function newPaymentsConfig(options: NewPaymentsConfigOptions) {\n\tconst packageAddress = options.package ?? '@suins/payments';\n\tconst argumentsTypes = ['vector<null>', null, 'u64', 'u64'] satisfies (string | null)[];\n\tconst parameterNames = ['setups', 'baseCurrency', 'maxAge', 'burnBps'];\n\treturn (tx: Transaction) =>\n\t\ttx.moveCall({\n\t\t\tpackage: packageAddress,\n\t\t\tmodule: 'payments',\n\t\t\tfunction: 'new_payments_config',\n\t\t\targuments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),\n\t\t});\n}\n"],"mappings":";;;;;;;;;AAaA,MAAM,cAAc;AACpB,MAAa,cAAc,IAAI,UAAU;CACxC,MAAM,GAAG,YAAY;CACrB,QAAQ,CAAC,IAAI,MAAM,CAAC;CACpB,CAAC;AACF,MAAa,eAAe,IAAI,WAAW;CAC1C,MAAM,GAAG,YAAY;CACrB,QAAQ;EAEP,UAAU,IAAI,IAAI;EAClB,qBAAqB,IAAI,IAAI;EAC7B,eAAe,IAAI,OAAO,IAAI,IAAI,CAAC;EACnC,WAAWA;EACX;CACD,CAAC;AACF,MAAa,iBAAiB,IAAI,WAAW;CAC5C,MAAM,GAAG,YAAY;CACrB,QAAQ;EACP,YAAYC,OAAeD,UAAoB,aAAa;EAC5D,eAAeA;EACf,SAAS,IAAI,KAAK;EAElB,UAAU,IAAI,KAAK;EACnB;CACD,CAAC;;;;;;AAwBF,SAAgB,kBAAkB,SAAmC;CACpE,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,MAAM,iBAAiB;EAAC;EAAM;EAAM;EAAM;EAAK;CAC/C,MAAM,iBAAiB;EAAC;EAAS;EAAY;EAAU;EAAU;AACjE,SAAQ,OACP,GAAG,SAAS;EACX,SAAS;EACT,QAAQ;EACR,UAAU;EACV,WAAW,uBAAuB,QAAQ,WAAW,gBAAgB,eAAe;EACpF,eAAe,QAAQ;EACvB,CAAC;;;;;;;;;;;;;;AAoCJ,SAAgB,cAAc,SAA+B;CAC5D,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,MAAM,iBAAiB;EAAC;EAAM;EAAM;EAAM;EAAM;EAAqB;EAAM;EAAM;CAIjF,MAAM,iBAAiB;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;AACD,SAAQ,OACP,GAAG,SAAS;EACX,SAAS;EACT,QAAQ;EACR,UAAU;EACV,WAAW,uBAAuB,QAAQ,WAAW,gBAAgB,eAAe;EACpF,eAAe,QAAQ;EACvB,CAAC;;;;;;;;;;;;AA4BJ,SAAgB,eAAe,SAAgC;CAC9D,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,MAAM,iBAAiB;EAAC;EAAM;EAAO;EAAqB;EAAK;CAC/D,MAAM,iBAAiB;EAAC;EAAS;EAAc;EAAkB;AACjE,SAAQ,OACP,GAAG,SAAS;EACX,SAAS;EACT,QAAQ;EACR,UAAU;EACV,WAAW,uBAAuB,QAAQ,WAAW,gBAAgB,eAAe;EACpF,eAAe,QAAQ;EACvB,CAAC;;AAaJ,SAAgB,4BAA4B,SAA6C;CACxF,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,MAAM,iBAAiB,CAAC,MAAM,KAAK;CACnC,MAAM,iBAAiB,CAAC,SAAS,SAAS;AAC1C,SAAQ,OACP,GAAG,SAAS;EACX,SAAS;EACT,QAAQ;EACR,UAAU;EACV,WAAW,uBAAuB,QAAQ,WAAW,gBAAgB,eAAe;EACpF,eAAe,QAAQ;EACvB,CAAC"}