@minswap/noodles-sdk 0.1.2-beta.0 → 0.2.0

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/dist/pay.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ADMIN_CAP_ID:()=>ADMIN_CAP_ID,BOOSTING_PACKAGE_ID:()=>BOOSTING_PACKAGE_ID,BoostingModule:()=>BoostingModule,CONFIG_ID:()=>CONFIG_ID,NoodlesPaySdk:()=>NoodlesPaySdk,SUBSCRIPTION_CONFIG:()=>SUBSCRIPTION_CONFIG,SubscriptionModule:()=>SubscriptionModule});const tiny_invariant_namespaceObject=require("@minswap/tiny-invariant");var tiny_invariant_default=__webpack_require__.n(tiny_invariant_namespaceObject);const transactions_namespaceObject=require("@mysten/sui/transactions"),utils_namespaceObject=require("@mysten/sui/utils"),BASE_BPS=1e4;function getSplitCoinsAfterFee(e,t){let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return[n.toString()];let a=n*i/BigInt(1e4);return[(n-a).toString(),a.toString()]}function getAmountAfterFee(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return n;let a=n*i/BigInt(1e4);return n-a}async function getNeededGasFee(e,t,n,i){t.setSenderIfNotSet(n);let a=await e.simulateTransaction({transaction:t,include:{effects:!0},checksEnabled:!1}),{gasUsed:s,status:r}=("Transaction"===a.$kind?a.Transaction:a.FailedTransaction).effects;if(!r.success)throw Error(`Transaction failed during simulation: ${r.error?.message??""}`);let d=BigInt(s.computationCost)+BigInt(s.storageCost)-BigInt(s.storageRebate),o=BigInt(1e4*Number(i));return d*(BigInt(1e4)+o)/BigInt(1e4)}const SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",SUI_ADDRESS_ZERO="0x0000000000000000000000000000000000000000000000000000000000000000";function isSuiCoinType(e){return"0x2::sui::SUI"===e||e===SUI_FULL_TYPE}const orderByKey=(e,t,n)=>{let i;if(e?.length){do{i=!1;for(let a=0;a<e.length-1;a++){let s=BigInt(e[a][t]),r=BigInt(e[a+1][t]);if("desc"===n?s<r:s>r){let t=e[a];e[a]=e[a+1],e[a+1]=t,i=!0}}}while(i);return e}},getCoinObjectIdsByAmount=async(e,t,n,i)=>{let a,s=[],r=!0;for(;r;)try{let n=await e.listCoins({owner:t,coinType:i,cursor:a});s=[...s,...n.objects.map(e=>({coinObjectId:e.objectId,version:e.version,digest:e.digest,balance:e.balance}))],r=n.hasNextPage,a=n.cursor}catch(e){console.error("Error fetching data:",e),r=!1}let d=orderByKey(s.map(e=>({...e,balance:e.balance})),"balance","desc")??[],o="0",c=[],u=[];for(let e of d)if(o=(BigInt(e.balance)+BigInt(o)).toString(10),c.push(e.coinObjectId),u.push(e),BigInt(o)>=BigInt(n))break;return{objectIds:c,balance:o,objectCoins:u}};async function addGasFee(e,t){let{inheritTx:n,sender:i,feeAmount:a,suiInputAmount:s}=e,r=n||new transactions_namespaceObject.Transaction;a>BigInt(0)&&r.setGasBudget(a);let{objectCoins:d}=await getCoinObjectIdsByAmount(t,i,(BigInt(s||"0")+a).toString(),SUI_FULL_TYPE);return r.setGasPayment(d.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),r}const BOOSTING_PACKAGE_ID="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",CONFIG_ID="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",ADMIN_CAP_ID="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26",getObjectId=(e,t)=>"string"==typeof e?e:(tiny_invariant_default()("string"==typeof e?.id,`${t} id is missing`),e.id),getFields=e=>e?.fields??e,getRequiredField=(e,t,n)=>{let i=getFields(e),a=i?.[t];return tiny_invariant_default()(null!=a,`${n} missing ${t}`),a},getDynamicFieldContents=(e,t)=>{let n=getFields(e),i=n?.contents;return tiny_invariant_default()(Array.isArray(i),`${t} contents are missing`),i};class BoostingModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({objectId:CONFIG_ID,include:{json:!0}});tiny_invariant_default()(e.object,"Config object not found"),tiny_invariant_default()(e.object.json,"Config object has no content");let t=e.object.json,n=getObjectId(t.id,"Boosting config"),i=t.fee_receiver;tiny_invariant_default()("string"==typeof i,"Boosting config fee_receiver is missing");let a=getDynamicFieldContents(t.tiers,"Boosting config tiers"),s={};for(let e of a){let t=getRequiredField(e,"key","Boosting tier"),n=getRequiredField(e,"value","Boosting tier"),i=getRequiredField(n,"duration",`Boosting tier ${t}`),a=getRequiredField(n,"amount",`Boosting tier ${t}`),r=getRequiredField(n,"point",`Boosting tier ${t}`),d=getRequiredField(n,"original_amount",`Boosting tier ${t}`);s[t]={duration:BigInt(i),amount:BigInt(a),point:BigInt(r),originalAmount:BigInt(d)}}return{id:n,receiverAddress:i,tiers:s}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:i}){let a=await this.getConfig();tiny_invariant_default()(t in a.tiers,"Invalid tier ID");let s=a.tiers[t].amount,r=i||new transactions_namespaceObject.Transaction,d=r.splitCoins(r.gas,[r.pure.u64(s)]);r.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(n)],arguments:[r.object(CONFIG_ID),r.pure.u64(t),d]}),r.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:o},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:i,originalAmount:a,amount:s,currentTx:r}){let d=r||new transactions_namespaceObject.Transaction;d.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::add_tier`,typeArguments:[],arguments:[d.object(CONFIG_ID),d.object(ADMIN_CAP_ID),d.pure.u64(t),d.pure.u64(i),d.pure.u64(n),d.pure.u64(a),d.pure.u64(s)]}),d.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:i,originalAmount:a,point:s,currentTx:r}){let d=r||new transactions_namespaceObject.Transaction;d.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_tier`,typeArguments:[],arguments:[d.object(CONFIG_ID),d.object(ADMIN_CAP_ID),d.pure.u64(t),d.pure.u64(n),d.pure.u64(i),d.pure.u64(s),d.pure.u64(a)]}),d.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:o},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::remove_tier`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.u64(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:i,currentTx:a}){let s=a||new transactions_namespaceObject.Transaction,r=s.splitCoins(s.gas,[s.pure.u64(n)]);s.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay_with_admin`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(i)],arguments:[s.object(ADMIN_CAP_ID),s.object(CONFIG_ID),s.pure.u64(t),s.pure.u64(n),r]}),s.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:d},this.sdk.suiClient)}}async function getSplitCoinForTx(e,t){let{account:n,amount:i,splits:a,coinType:s,inheritTx:r,inspecTransaction:d,isSponsored:o=!1}=e,c=r??new transactions_namespaceObject.Transaction,{objectIds:u,balance:_}=await getCoinObjectIdsByAmount(t,n,i,s);if(BigInt(_)<BigInt(i))throw Error(`Insufficient balance for type ${s}. Required: ${i}, Available: ${_}`);if(0===u.length)throw Error(`No coins found for type ${s} with sufficient balance. Required: ${i}`);let l=u[0];if((0,utils_namespaceObject.normalizeStructTag)(s)===(0,utils_namespaceObject.normalizeStructTag)(SUI_FULL_TYPE)&&!o){let e;return d?(u.length>1&&c.mergeCoins(c.object(l),u.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(l),a)):e=c.splitCoins(c.gas,a),{tx:c,coinData:e}}u.length>1&&c.mergeCoins(c.object(l),u.slice(1).map(e=>c.object(e)));let I=c.splitCoins(c.object(l),a);return{tx:c,coinData:I}}const SUBSCRIPTION_CONFIG={prod:{packageId:"0x3dd678c250a667f1551bc4b9e35fd070896f4775dd2900d5cb2910d2aea0b068",configId:"0x3eb7bd15f61b7cc1a9fd36151e9c3d05aa37bfadb0a58c3a26a6c02c2e99f3ca",adminCapId:"0xf375fcb3d95934143766cab2028ab49441fa04ef2ce27c08c01004c455bcbad4",paymentCoinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"},staging:{packageId:"0xa83cd093ce5142649adae10d21fe87d55fa2df4e52a4292c77ba039bb12bfe67",configId:"0x19fb8f91946e58c068fa4238bdd7a531216a0c4dcfaa279a8a02c60cb02f6711",adminCapId:"0xd8139544d054702dfab6de4e9c55f162c8a6f30465935af56cffed99c5e1c2bd",paymentCoinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"}};class SubscriptionModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({objectId:SUBSCRIPTION_CONFIG[this.sdk.env].configId,include:{json:!0}});tiny_invariant_default()(e.object,"Config object not found"),tiny_invariant_default()(e.object.json,"Config object has no content");let t=e.object.json,n=t.id.id,i=t.fee_receiver,a=t.paused,s=t.accepted_payment_type,r=t.plans.fields.contents,d={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.id,i=e.fields.value.fields.price,a=e.fields.value.fields.month_interval,s=e.fields.value.fields.ptype;d[t]={id:BigInt(n),price:BigInt(i),monthInterval:a,planType:s}}return{id:n,plans:d,feeReceiverWallet:i,paused:a,acceptedPaymentType:s}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:i=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:a}){let s=await this.getConfig();tiny_invariant_default()(!s.paused,"Contract is paused"),tiny_invariant_default()(t in s.plans,"Invalid plan ID");let r=s.plans[t],d=r.price*BigInt(r.monthInterval),{tx:o,coinData:c}=await getSplitCoinForTx({account:e,amount:d.toString(),splits:[d.toString()],coinType:i,inheritTx:a},this.sdk.suiClient);o.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::subscribe_cycle_plan`,typeArguments:[i],arguments:[o.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),o.pure.u64(t),o.pure.string(n),c]}),o.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,o,e,0);return addGasFee({inheritTx:o,sender:e,feeAmount:u},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:i,paymentCoinType:a=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused"),tiny_invariant_default()(t in r.plans,"Invalid plan ID");let{tx:d,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);d.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::buy_more_cu`,typeArguments:[a],arguments:[d.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),d.pure.u64(t),d.pure.string(n),d.pure.u64(i),o]}),d.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:c},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:i,paymentCoinType:a=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused");let{tx:d,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);d.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::subscribe_plan_with_admin`,typeArguments:[a],arguments:[d.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),d.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),d.pure.u64(t),d.pure.string(n),d.pure.u64(i),o]}),d.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:c},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::add_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),r.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),r.pure.u64(t),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:d},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::update_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),r.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),r.pure.u64(BigInt(t)),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:d},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::remove_plan`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.u64(BigInt(t))]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::set_paused`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.bool(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}}class NoodlesPaySdk{network;env;_suiClient;boostingModule;subscriptionModule;constructor(e,t="mainnet",n="prod"){this.network=t,this.env=n,this._suiClient=e,this.subscriptionModule=new SubscriptionModule(this),this.boostingModule=new BoostingModule(this)}get suiClient(){return this._suiClient}}for(var __rspack_i in exports.ADMIN_CAP_ID=__webpack_exports__.ADMIN_CAP_ID,exports.BOOSTING_PACKAGE_ID=__webpack_exports__.BOOSTING_PACKAGE_ID,exports.BoostingModule=__webpack_exports__.BoostingModule,exports.CONFIG_ID=__webpack_exports__.CONFIG_ID,exports.NoodlesPaySdk=__webpack_exports__.NoodlesPaySdk,exports.SUBSCRIPTION_CONFIG=__webpack_exports__.SUBSCRIPTION_CONFIG,exports.SubscriptionModule=__webpack_exports__.SubscriptionModule,__webpack_exports__)-1===["ADMIN_CAP_ID","BOOSTING_PACKAGE_ID","BoostingModule","CONFIG_ID","NoodlesPaySdk","SUBSCRIPTION_CONFIG","SubscriptionModule"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t,n)=>{var i=(t,n)=>{for(var i in t)__webpack_require__.o(t,i)&&!__webpack_require__.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,[n]:t[i]})};i(t,"get"),i(n,"value")},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ADMIN_CAP_ID:()=>ADMIN_CAP_ID,BOOSTING_PACKAGE_ID:()=>BOOSTING_PACKAGE_ID,BoostingModule:()=>BoostingModule,CONFIG_ID:()=>CONFIG_ID,NoodlesPaySdk:()=>NoodlesPaySdk,SUBSCRIPTION_CONFIG:()=>SUBSCRIPTION_CONFIG,SubscriptionModule:()=>SubscriptionModule});const tiny_invariant_namespaceObject=require("@minswap/tiny-invariant");var tiny_invariant_default=__webpack_require__.n(tiny_invariant_namespaceObject);const transactions_namespaceObject=require("@mysten/sui/transactions"),utils_namespaceObject=require("@mysten/sui/utils"),BASE_BPS=1e4;function getSplitCoinsAfterFee(e,t){let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return[n.toString()];let a=n*i/BigInt(1e4);return[(n-a).toString(),a.toString()]}function getAmountAfterFee(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return n;let a=n*i/BigInt(1e4);return n-a}async function getNeededGasFee(e,t,n,i){t.setSenderIfNotSet(n);let a=await e.simulateTransaction({transaction:t,include:{effects:!0},checksEnabled:!1}),{gasUsed:s,status:r}=("Transaction"===a.$kind?a.Transaction:a.FailedTransaction).effects;if(!r.success)throw Error(`Transaction failed during simulation: ${r.error?.message??""}`);let d=BigInt(s.computationCost)+BigInt(s.storageCost)-BigInt(s.storageRebate),o=BigInt(1e4*Number(i));return d*(BigInt(1e4)+o)/BigInt(1e4)}const SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",SUI_ADDRESS_ZERO="0x0000000000000000000000000000000000000000000000000000000000000000";function isSuiCoinType(e){return"0x2::sui::SUI"===e||e===SUI_FULL_TYPE}const SUI_RPC_URL="https://fullnode.mainnet.sui.io:443",SUI_GRAPHQL_URL="https://graphql.mainnet.sui.io/graphql",orderByKey=(e,t,n)=>{let i;if(e?.length){do{i=!1;for(let a=0;a<e.length-1;a++){let s=BigInt(e[a][t]),r=BigInt(e[a+1][t]);if("desc"===n?s<r:s>r){let t=e[a];e[a]=e[a+1],e[a+1]=t,i=!0}}}while(i);return e}},getCoinObjectIdsByAmount=async(e,t,n,i)=>{let a,s=[],r=!0;for(;r;)try{let n=await e.listCoins({owner:t,coinType:i,cursor:a});s=[...s,...n.objects.map(e=>({coinObjectId:e.objectId,version:e.version,digest:e.digest,balance:e.balance}))],r=n.hasNextPage,a=n.cursor}catch(e){console.error("Error fetching data:",e),r=!1}let d=orderByKey(s.map(e=>({...e,balance:e.balance})),"balance","desc")??[],o="0",c=[],u=[];for(let e of d)if(o=(BigInt(e.balance)+BigInt(o)).toString(10),c.push(e.coinObjectId),u.push(e),BigInt(o)>=BigInt(n))break;return{objectIds:c,balance:o,objectCoins:u}};async function addGasFee(e,t){let{inheritTx:n,sender:i,feeAmount:a,suiInputAmount:s}=e,r=n||new transactions_namespaceObject.Transaction;a>BigInt(0)&&r.setGasBudget(a);let{objectCoins:d}=await getCoinObjectIdsByAmount(t,i,(BigInt(s||"0")+a).toString(),SUI_FULL_TYPE);return r.setGasPayment(d.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),r}const BOOSTING_PACKAGE_ID="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",CONFIG_ID="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",ADMIN_CAP_ID="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26",getObjectId=(e,t)=>"string"==typeof e?e:(tiny_invariant_default()("string"==typeof e?.id,`${t} id is missing`),e.id),getFields=e=>e?.fields??e,getRequiredField=(e,t,n)=>{let i=getFields(e),a=i?.[t];return tiny_invariant_default()(null!=a,`${n} missing ${t}`),a},getDynamicFieldContents=(e,t)=>{let n=getFields(e),i=n?.contents;return tiny_invariant_default()(Array.isArray(i),`${t} contents are missing`),i};class BoostingModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({objectId:CONFIG_ID,include:{json:!0}});tiny_invariant_default()(e.object,"Config object not found"),tiny_invariant_default()(e.object.json,"Config object has no content");let t=e.object.json,n=getObjectId(t.id,"Boosting config"),i=t.fee_receiver;tiny_invariant_default()("string"==typeof i,"Boosting config fee_receiver is missing");let a=getDynamicFieldContents(t.tiers,"Boosting config tiers"),s={};for(let e of a){let t=getRequiredField(e,"key","Boosting tier"),n=getRequiredField(e,"value","Boosting tier"),i=getRequiredField(n,"duration",`Boosting tier ${t}`),a=getRequiredField(n,"amount",`Boosting tier ${t}`),r=getRequiredField(n,"point",`Boosting tier ${t}`),d=getRequiredField(n,"original_amount",`Boosting tier ${t}`);s[t]={duration:BigInt(i),amount:BigInt(a),point:BigInt(r),originalAmount:BigInt(d)}}return{id:n,receiverAddress:i,tiers:s}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:i}){let a=await this.getConfig();tiny_invariant_default()(t in a.tiers,"Invalid tier ID");let s=a.tiers[t].amount,r=i||new transactions_namespaceObject.Transaction,d=r.splitCoins(r.gas,[r.pure.u64(s)]);r.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(n)],arguments:[r.object(CONFIG_ID),r.pure.u64(t),d]}),r.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:o},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:i,originalAmount:a,amount:s,currentTx:r}){let d=r||new transactions_namespaceObject.Transaction;d.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::add_tier`,typeArguments:[],arguments:[d.object(CONFIG_ID),d.object(ADMIN_CAP_ID),d.pure.u64(t),d.pure.u64(i),d.pure.u64(n),d.pure.u64(a),d.pure.u64(s)]}),d.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:i,originalAmount:a,point:s,currentTx:r}){let d=r||new transactions_namespaceObject.Transaction;d.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_tier`,typeArguments:[],arguments:[d.object(CONFIG_ID),d.object(ADMIN_CAP_ID),d.pure.u64(t),d.pure.u64(n),d.pure.u64(i),d.pure.u64(s),d.pure.u64(a)]}),d.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:o},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::remove_tier`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.u64(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:i,currentTx:a}){let s=a||new transactions_namespaceObject.Transaction,r=s.splitCoins(s.gas,[s.pure.u64(n)]);s.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay_with_admin`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(i)],arguments:[s.object(ADMIN_CAP_ID),s.object(CONFIG_ID),s.pure.u64(t),s.pure.u64(n),r]}),s.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:d},this.sdk.suiClient)}}async function getSplitCoinForTx(e,t){let{account:n,amount:i,splits:a,coinType:s,inheritTx:r,inspecTransaction:d,isSponsored:o=!1}=e,c=r??new transactions_namespaceObject.Transaction,{objectIds:u,balance:_}=await getCoinObjectIdsByAmount(t,n,i,s);if(BigInt(_)<BigInt(i))throw Error(`Insufficient balance for type ${s}. Required: ${i}, Available: ${_}`);if(0===u.length)throw Error(`No coins found for type ${s} with sufficient balance. Required: ${i}`);let l=u[0];if((0,utils_namespaceObject.normalizeStructTag)(s)===(0,utils_namespaceObject.normalizeStructTag)(SUI_FULL_TYPE)&&!o){let e;return d?(u.length>1&&c.mergeCoins(c.object(l),u.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(l),a)):e=c.splitCoins(c.gas,a),{tx:c,coinData:e}}u.length>1&&c.mergeCoins(c.object(l),u.slice(1).map(e=>c.object(e)));let I=c.splitCoins(c.object(l),a);return{tx:c,coinData:I}}const SUBSCRIPTION_CONFIG={prod:{packageId:"0x3dd678c250a667f1551bc4b9e35fd070896f4775dd2900d5cb2910d2aea0b068",configId:"0x3eb7bd15f61b7cc1a9fd36151e9c3d05aa37bfadb0a58c3a26a6c02c2e99f3ca",adminCapId:"0xf375fcb3d95934143766cab2028ab49441fa04ef2ce27c08c01004c455bcbad4",paymentCoinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"},staging:{packageId:"0xa83cd093ce5142649adae10d21fe87d55fa2df4e52a4292c77ba039bb12bfe67",configId:"0x19fb8f91946e58c068fa4238bdd7a531216a0c4dcfaa279a8a02c60cb02f6711",adminCapId:"0xd8139544d054702dfab6de4e9c55f162c8a6f30465935af56cffed99c5e1c2bd",paymentCoinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"}};class SubscriptionModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({objectId:SUBSCRIPTION_CONFIG[this.sdk.env].configId,include:{json:!0}});tiny_invariant_default()(e.object,"Config object not found"),tiny_invariant_default()(e.object.json,"Config object has no content");let t=e.object.json,n=t.id.id,i=t.fee_receiver,a=t.paused,s=t.accepted_payment_type,r=t.plans.fields.contents,d={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.id,i=e.fields.value.fields.price,a=e.fields.value.fields.month_interval,s=e.fields.value.fields.ptype;d[t]={id:BigInt(n),price:BigInt(i),monthInterval:a,planType:s}}return{id:n,plans:d,feeReceiverWallet:i,paused:a,acceptedPaymentType:s}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:i=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:a}){let s=await this.getConfig();tiny_invariant_default()(!s.paused,"Contract is paused"),tiny_invariant_default()(t in s.plans,"Invalid plan ID");let r=s.plans[t],d=r.price*BigInt(r.monthInterval),{tx:o,coinData:c}=await getSplitCoinForTx({account:e,amount:d.toString(),splits:[d.toString()],coinType:i,inheritTx:a},this.sdk.suiClient);o.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::subscribe_cycle_plan`,typeArguments:[i],arguments:[o.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),o.pure.u64(t),o.pure.string(n),c]}),o.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,o,e,0);return addGasFee({inheritTx:o,sender:e,feeAmount:u},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:i,paymentCoinType:a=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused"),tiny_invariant_default()(t in r.plans,"Invalid plan ID");let{tx:d,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);d.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::buy_more_cu`,typeArguments:[a],arguments:[d.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),d.pure.u64(t),d.pure.string(n),d.pure.u64(i),o]}),d.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:c},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:i,paymentCoinType:a=SUBSCRIPTION_CONFIG[this.sdk.env].paymentCoinType,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused");let{tx:d,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);d.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::subscription::subscribe_plan_with_admin`,typeArguments:[a],arguments:[d.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),d.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),d.pure.u64(t),d.pure.string(n),d.pure.u64(i),o]}),d.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,d,e,0);return addGasFee({inheritTx:d,sender:e,feeAmount:c},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::add_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),r.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),r.pure.u64(t),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:d},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::update_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),r.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),r.pure.u64(BigInt(t)),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let d=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:d},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::remove_plan`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.u64(BigInt(t))]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::set_paused`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId),i.pure.bool(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_CONFIG[this.sdk.env].packageId}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[i.object(SUBSCRIPTION_CONFIG[this.sdk.env].configId),i.object(SUBSCRIPTION_CONFIG[this.sdk.env].adminCapId)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}}class NoodlesPaySdk{network;env;_suiClient;boostingModule;subscriptionModule;constructor(e,t="mainnet",n="prod"){this.network=t,this.env=n,this._suiClient=e,this.subscriptionModule=new SubscriptionModule(this),this.boostingModule=new BoostingModule(this)}get suiClient(){return this._suiClient}}for(var __rspack_i in exports.ADMIN_CAP_ID=__webpack_exports__.ADMIN_CAP_ID,exports.BOOSTING_PACKAGE_ID=__webpack_exports__.BOOSTING_PACKAGE_ID,exports.BoostingModule=__webpack_exports__.BoostingModule,exports.CONFIG_ID=__webpack_exports__.CONFIG_ID,exports.NoodlesPaySdk=__webpack_exports__.NoodlesPaySdk,exports.SUBSCRIPTION_CONFIG=__webpack_exports__.SUBSCRIPTION_CONFIG,exports.SubscriptionModule=__webpack_exports__.SubscriptionModule,__webpack_exports__)-1===["ADMIN_CAP_ID","BOOSTING_PACKAGE_ID","BoostingModule","CONFIG_ID","NoodlesPaySdk","SUBSCRIPTION_CONFIG","SubscriptionModule"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
package/dist/pay.d.ts CHANGED
@@ -39,10 +39,8 @@ export declare type AddTierRequest = {
39
39
  currentTx?: Transaction;
40
40
  };
41
41
 
42
- /** Admin capability object ID for privileged operations */
43
42
  export declare const ADMIN_CAP_ID = "0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";
44
43
 
45
- /** Sui package ID for the boosting protocol */
46
44
  export declare const BOOSTING_PACKAGE_ID = "0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19";
47
45
 
48
46
  /**
@@ -67,13 +65,7 @@ export declare type BoostingConfig = {
67
65
  * - Updating fee receiver settings
68
66
  */
69
67
  export declare class BoostingModule implements IPayModule {
70
- /** Reference to the main SDK instance */
71
68
  sdk: NoodlesPaySdk;
72
- /**
73
- * Creates a new BoostingModule instance.
74
- *
75
- * @param sdk - The main Noodles Pay SDK instance
76
- */
77
69
  constructor(sdk: NoodlesPaySdk);
78
70
  /**
79
71
  * Retrieves the current boosting configuration from the blockchain.
@@ -157,7 +149,6 @@ export declare type BuyMoreCUPlanRequest = {
157
149
  currentTx?: Transaction;
158
150
  };
159
151
 
160
- /** Configuration object ID for boosting settings */
161
152
  export declare const CONFIG_ID = "0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb";
162
153
 
163
154
  declare enum Environment {
@@ -326,13 +317,7 @@ export declare type SubscriptionConfig = {
326
317
  * - Updating fee receiver wallet and pause settings
327
318
  */
328
319
  export declare class SubscriptionModule implements IPayModule {
329
- /** Reference to the main SDK instance */
330
320
  sdk: NoodlesPaySdk;
331
- /**
332
- * Creates a new SubscriptionModule instance.
333
- *
334
- * @param sdk - The main Noodles Pay SDK instance
335
- */
336
321
  constructor(sdk: NoodlesPaySdk);
337
322
  /**
338
323
  * Retrieves the current subscription configuration from the blockchain.
@@ -343,7 +328,8 @@ export declare class SubscriptionModule implements IPayModule {
343
328
  getConfig(): Promise<SubscriptionConfig>;
344
329
  /**
345
330
  * Builds a transaction for subscribing to a plan.
346
- * The payment amount is determined by the plan configuration.
331
+ * The payment amount is determined by the plan configuration (plan.price charged for
332
+ * every month in the plan's interval).
347
333
  *
348
334
  * @param request - Subscription request parameters
349
335
  * @reference order_id generated from your backend to identify the purchase
@@ -353,6 +339,7 @@ export declare class SubscriptionModule implements IPayModule {
353
339
  buildSubscribeCyclePlanTx({ walletAddress, planId, reference, paymentCoinType, currentTx, }: SubscribePlanRequest): Promise<Transaction>;
354
340
  /**
355
341
  * Builds a transaction for buying additional compute units (CU) for CUAddOn plans.
342
+ * Tops up compute units for an arbitrary paidAmount.
356
343
  *
357
344
  * @param request - Buy more CU request parameters
358
345
  * @reference order_id generated from your backend to identify the purchase
package/dist/pay.js CHANGED
@@ -1 +1 @@
1
- export{ADMIN_CAP_ID,BOOSTING_PACKAGE_ID,BoostingModule,CONFIG_ID,NoodlesPaySdk,SUBSCRIPTION_CONFIG,SubscriptionModule}from"./832.js";
1
+ export{ADMIN_CAP_ID,BOOSTING_PACKAGE_ID,BoostingModule,CONFIG_ID,NoodlesPaySdk,SUBSCRIPTION_CONFIG,SubscriptionModule}from"./263.js";
@@ -0,0 +1 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,r,t)=>{var o=(r,t)=>{for(var o in r)__webpack_require__.o(r,o)&&!__webpack_require__.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,[t]:r[o]})};o(r,"get"),o(t,"value")},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{InvalidSuiAddressError:()=>InvalidSuiAddressError,NoodlesPortfolioSdk:()=>NoodlesPortfolioSdk});const utils_namespaceObject=require("@mysten/sui/utils"),SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",SUI_ADDRESS_ZERO="0x0000000000000000000000000000000000000000000000000000000000000000";function isSuiCoinType(e){return"0x2::sui::SUI"===e||"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"===e}const SUI_RPC_URL="https://fullnode.mainnet.sui.io:443",SUI_GRAPHQL_URL="https://graphql.mainnet.sui.io/graphql",DEFAULT_SCALLOP_ADDRESS_ID="67c44a103fe1b8c454eb9699",COIN_AMOUNT_OUT_BATCH_SIZE=10;class InvalidSuiAddressError extends Error{constructor(e){super(`Invalid Sui address: ${e}`),this.name="InvalidSuiAddressError"}}class NoodlesPortfolioSdk{noodlesSdk;scallopAddressId;scallopQuery;alphalendClient;constructor(e){this.noodlesSdk=e.noodlesSdk,this.scallopAddressId=e.scallopAddressId??"67c44a103fe1b8c454eb9699"}assertValidAddress(e){if(!(0,utils_namespaceObject.isValidSuiAddress)(e))throw new InvalidSuiAddressError(e)}async getScallopQuery(){if(this.scallopQuery)return this.scallopQuery;let{Scallop:e}=await import("@scallop-io/sui-scallop-sdk"),r=new e({addressId:this.scallopAddressId,networkType:"mainnet"});return this.scallopQuery=await r.createScallopQuery(),this.scallopQuery}async getAlphalendClient(){if(this.alphalendClient)return this.alphalendClient;let{AlphalendClient:e}=await import("@alphafi/alphalend-sdk");return this.alphalendClient=new e("mainnet","https://graphql.mainnet.sui.io/graphql"),this.alphalendClient}async getScallopPosition(e){this.assertValidAddress(e);let r=await this.getScallopQuery();return await r.getUserPortfolio({walletAddress:e})}async getNaviPosition(e){this.assertValidAddress(e);let{getLendingPositions:r}=await import("@naviprotocol/lending"),t=await r(e,{env:"prod"}),o={borrows:[],supplies:[]};for(let e of t){let r=e["navi-lending-supply"]??e["navi-lending-emode-supply"],t=e["navi-lending-borrow"]??e["navi-lending-emode-borrow"];if(r){let e=Number(r.amount);e>0&&o.supplies.push({coinType:r.token.coinType,amount:e})}if(t){let e=Number(t.amount);e>0&&o.borrows.push({coinType:t.token.coinType,amount:e})}}return o}async getAlphalendPosition(e){this.assertValidAddress(e);let r=await this.getAlphalendClient(),[t,o]=await Promise.all([r.lendingProtocol.getAllMarkets(),r.getUserPortfolio(e)]);if(!o||0===o.length)return[];let i={};for(let e of t)i[e.market.marketId]=e.market.coinType;let s=[];for(let e of o){let r={positionId:e.positionId,netWorth:e.netWorth.toNumber(),dailyEarnings:e.dailyEarnings.toNumber(),netApr:e.netApr.toNumber(),safeBorrowLimit:e.safeBorrowLimit.toNumber(),borrowLimitUsed:e.borrowLimitUsed.toNumber(),liquidationThreshold:e.liquidationThreshold.toNumber(),totalSuppliedUsd:e.totalSuppliedUsd.toNumber(),aggregatedSupplyApr:e.aggregatedSupplyApr.toNumber(),totalBorrowedUsd:e.totalBorrowedUsd.toNumber(),aggregatedBorrowApr:e.aggregatedBorrowApr.toNumber(),suppliedAmounts:[],borrowedAmounts:[],rewardsToClaimUsd:e.rewardsToClaimUsd.toNumber(),rewardsToClaim:[]};for(let[t,o]of e.suppliedAmounts.entries()){let e=i[t];e&&r.suppliedAmounts.push({coinType:e,amount:o.toNumber()})}for(let[t,o]of e.borrowedAmounts.entries()){let e=i[t];e&&r.borrowedAmounts.push({coinType:e,amount:o.toNumber()})}for(let{coinType:t,rewardAmount:o}of e.rewardsToClaim)r.rewardsToClaim.push({coinType:t,rewardAmount:o.toNumber()});s.push(r)}return s}async getAllLendingPositions(e){this.assertValidAddress(e);let[r,t,o]=await Promise.all([this.getScallopPosition(e),this.getNaviPosition(e),this.getAlphalendPosition(e)]);return{scallop:r,navi:t,alphalend:o}}async getCoinAmountOut(e){if(0===e.length)return[];let r=[];for(let t=0;t<e.length;t+=10){let o=e.slice(t,t+10);if(0===o.length)break;for(let e of(await Promise.all(o.map(e=>this.noodlesSdk.aggregatorModule.getBestAmountOut({coinInType:e.coin_in_type,coinInAmount:BigInt(e.coin_in_amount),coinOutType:e.coin_out_type})))))r.push(null===e?"0":e.amountOut.toString())}return r}}for(var __rspack_i in exports.InvalidSuiAddressError=__webpack_exports__.InvalidSuiAddressError,exports.NoodlesPortfolioSdk=__webpack_exports__.NoodlesPortfolioSdk,__webpack_exports__)-1===["InvalidSuiAddressError","NoodlesPortfolioSdk"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});