@cetusprotocol/deepbook-utils 1.0.5 → 1.1.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/index.js CHANGED
@@ -1 +1,15 @@
1
- "use strict";var Pe=Object.create;var G=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,Fe=Object.prototype.hasOwnProperty;var Ne=(i,e,t)=>e in i?G(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var $e=(i,e)=>{for(var t in e)G(i,t,{get:e[t],enumerable:!0})},be=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of qe(e))!Fe.call(i,n)&&n!==t&&G(i,n,{get:()=>e[n],enumerable:!(s=Ie(e,n))||s.enumerable});return i};var he=(i,e,t)=>(t=i!=null?Pe(Ue(i)):{},be(e||!i||!i.__esModule?G(t,"default",{value:i,enumerable:!0}):t,i)),Ve=i=>be(G({},"__esModule",{value:!0}),i);var _e=(i,e,t)=>(Ne(i,typeof e!="symbol"?e+"":e,t),t);var Lt={};$e(Lt,{CLOCK_ADDRESS:()=>jt,CachedContent:()=>F,CetusClmmSDK:()=>Z,ClmmExpectSwapModule:()=>Rt,ClmmFetcherModule:()=>Mt,ClmmIntegratePoolModule:()=>Bt,ClmmIntegratePoolV2Module:()=>vt,ClmmIntegrateRouterModule:()=>Dt,ClmmIntegrateRouterWithPartnerModule:()=>Et,ClmmIntegrateUtilsModule:()=>Pt,CoinAssist:()=>T,CoinInfoAddress:()=>It,CoinStoreAddress:()=>qt,DEEP_SCALAR:()=>ne,DEFAULT_GAS_BUDGET_FOR_MERGE:()=>He,DEFAULT_GAS_BUDGET_FOR_SPLIT:()=>Ke,DEFAULT_GAS_BUDGET_FOR_STAKE:()=>ze,DEFAULT_GAS_BUDGET_FOR_TRANSFER:()=>Qe,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI:()=>Ze,DEFAULT_NFT_TRANSFER_GAS_FEE:()=>Je,DeepbookClobV2Moudle:()=>Ft,DeepbookCustodianV2Moudle:()=>Ut,DeepbookEndpointsV2Moudle:()=>Nt,DeepbookUtilsModule:()=>Q,FLOAT_SCALAR:()=>v,GAS_SYMBOL:()=>We,GAS_TYPE_ARG:()=>W,GAS_TYPE_ARG_LONG:()=>re,NORMALIZED_SUI_COIN_TYPE:()=>dt,OrderType:()=>Re,RpcModule:()=>H,SUI_SYSTEM_STATE_OBJECT_ID:()=>Ye,TransactionUtil:()=>M,addHexPrefix:()=>ie,asIntN:()=>wt,asUintN:()=>St,bufferToHex:()=>nt,cacheTime24h:()=>P,cacheTime5min:()=>se,checkAddress:()=>tt,composeType:()=>oe,d:()=>a,decimalsMultiplier:()=>X,default:()=>Vt,extractAddressFromType:()=>ut,extractStructTagFromType:()=>D,fixCoinType:()=>lt,fixDown:()=>q,fixSuiObjectId:()=>we,fromDecimalsAmount:()=>U,getDefaultSuiInputType:()=>$t,getFutureTime:()=>N,getMoveObject:()=>te,getMoveObjectType:()=>je,getMovePackageContent:()=>bt,getObjectDeletedResponse:()=>Oe,getObjectDisplay:()=>yt,getObjectFields:()=>le,getObjectId:()=>ue,getObjectNotExistsResponse:()=>Te,getObjectOwner:()=>ft,getObjectPreviousTransactionDigest:()=>_t,getObjectReference:()=>ce,getObjectType:()=>ht,getObjectVersion:()=>gt,getSuiObjectData:()=>$,hasPublicTransfer:()=>Ct,hexToNumber:()=>st,hexToString:()=>rt,isSortedSymbols:()=>ct,isSuiObjectResponse:()=>xe,maxDecimal:()=>ee,normalizeCoinType:()=>z,patchFixSuiObjectId:()=>Y,printTransaction:()=>pt,removeHexPrefix:()=>J,secretKeyToEd25519Keypair:()=>At,secretKeyToSecp256k1Keypair:()=>Ot,shortAddress:()=>et,shortString:()=>fe,toBuffer:()=>ye,toDecimalsAmount:()=>kt,utf8to16:()=>Ce});module.exports=Ve(Lt);var se=5*60*1e3,P=24*60*60*1e3;function N(i){return Date.parse(new Date().toString())+i}var F=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};var I=require("@mysten/sui/utils");var Le="0x2::coin::Coin",Ge=/^0x2::coin::Coin<(.+)>$/,Ke=1e3,He=500,Qe=100,Ze=100,ze=1e3,W="0x2::sui::SUI",re="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",We="SUI",Je=450,Ye="0x0000000000000000000000000000000000000005",T=class{static getCoinTypeArg(e){let t=e.type.match(Ge);return t?t[1]:null}static isSUI(e){let t=T.getCoinTypeArg(e);return t?T.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let s=BigInt(0);return e.forEach(n=>{t===n.coinAddress&&(s+=BigInt(n.balance))}),s}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${Le}<${e}>`}static getCoinAssets(e,t){let s=[];return t.forEach(n=>{z(n.coinAddress)===z(e)&&s.push(n)}),s}static isSuiCoin(e){return D(e).full_address===W}static selectCoinObjectIdGreaterThanOrEqual(e,t,s=[]){let n=T.selectCoinAssetGreaterThanOrEqual(e,t,s),r=n.selectedCoins.map(u=>u.coinObjectId),o=n.remainingCoins,c=n.selectedCoins.map(u=>u.balance.toString());return{objectArray:r,remainCoins:o,amountArray:c}}static selectCoinAssetGreaterThanOrEqual(e,t,s=[]){let n=T.sortByBalance(e.filter(l=>!s.includes(l.coinObjectId))),r=T.calculateTotalBalance(n);if(r<t)return{selectedCoins:[],remainingCoins:n};if(r===t)return{selectedCoins:n,remainingCoins:[]};let o=BigInt(0),c=[],u=[...n];for(;o<r;){let l=t-o,p=u.findIndex(d=>d.balance>=l);if(p!==-1){c.push(u[p]),u.splice(p,1);break}let g=u.pop();g.balance>0&&(c.push(g),o+=g.balance)}return{selectedCoins:T.sortByBalance(c),remainingCoins:T.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,s)=>t.balance<s.balance?-1:t.balance>s.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,s)=>t.balance>s.balance?-1:t.balance<s.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,s)=>t+s.balance,BigInt(0))}};var Xe=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function ie(i){return i.startsWith("0x")?i:`0x${i}`}function J(i){return i.startsWith("0x")?`${i.slice(2)}`:i}function fe(i,e=4,t=4){let s=Math.max(e,1),n=Math.max(t,1);return`${i.slice(0,s+2)} ... ${i.slice(-n)}`}function et(i,e=4,t=4){return fe(ie(i),e,t)}function tt(i,e={leadingZero:!0}){if(typeof i!="string")return!1;let t=i;if(e.leadingZero){if(!i.startsWith("0x"))return!1;t=t.substring(2)}return Xe.test(t)}function ye(i){if(!Buffer.isBuffer(i))if(Array.isArray(i))i=Buffer.from(i);else if(typeof i=="string")exports.isHexString(i)?i=Buffer.from(exports.padToEven(exports.stripHexPrefix(i)),"hex"):i=Buffer.from(i);else if(typeof i=="number")i=exports.intToBuffer(i);else if(i==null)i=Buffer.allocUnsafe(0);else if(i.toArray)i=Buffer.from(i.toArray());else throw new Error("invalid type");return i}function nt(i){return ie(ye(i).toString("hex"))}function st(i){let e=new ArrayBuffer(4),t=new DataView(e);for(let n=0;n<i.length;n++)t.setUint8(n,i.charCodeAt(n));return t.getUint32(0,!0)}function Ce(i){let e,t,s,n,r;e="";let o=i.length;for(t=0;t<o;)switch(s=i.charCodeAt(t++),s>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=i.charAt(t-1);break;case 12:case 13:n=i.charCodeAt(t++),e+=String.fromCharCode((s&31)<<6|n&63);break;case 14:n=i.charCodeAt(t++),r=i.charCodeAt(t++),e+=String.fromCharCode((s&15)<<12|(n&63)<<6|(r&63)<<0);break}return e}function rt(i){let e="",t=J(i),s=t.length/2;for(let n=0;n<s;n++)e+=String.fromCharCode(parseInt(t.substr(n*2,2),16));return Ce(e)}var it=0,Se=1,ot=2;function ke(i,e){return i===e?it:i<e?Se:ot}function at(i,e){let t=0,s=i.length<=e.length?i.length:e.length,n=ke(i.length,e.length);for(;t<s;){let r=ke(i.charCodeAt(t),e.charCodeAt(t));if(t+=1,r!==0)return r}return n}function ct(i,e){return at(i,e)===Se}function oe(i,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],n=[i,...e].filter(Boolean).join("::");return t&&t.length&&(n+=`<${t.join(", ")}>`),n}function ut(i){return i.split("::")[0]}function D(i){try{let e=i.replace(/\s/g,""),s=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(s){e=e.slice(0,e.indexOf("<"));let u={...D(e),type_arguments:s.map(l=>D(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>T.isSuiCoin(l)?l:D(l).source_address),u.source_address=oe(u.full_address,u.type_arguments),u}let n=e.split("::"),o={full_address:e,address:e===W||e===re?"0x2":(0,I.normalizeSuiObjectId)(n[0]),module:n[1],name:n[2],type_arguments:[],source_address:""};return o.full_address=`${o.address}::${o.module}::${o.name}`,o.source_address=oe(o.full_address,o.type_arguments),o}catch{return{full_address:i,address:"",module:"",name:"",type_arguments:[],source_address:i}}}function z(i){return D(i).source_address}function we(i){return i.toLowerCase().startsWith("0x")?(0,I.normalizeSuiObjectId)(i):i}var lt=(i,e=!0)=>{let t=i.split("::"),s=t.shift(),n=(0,I.normalizeSuiObjectId)(s);return e&&(n=J(n)),`${n}::${t.join("::")}`};function Y(i){for(let e in i){let t=typeof i[e];if(t==="object")Y(i[e]);else if(t==="string"){let s=i[e];i[e]=we(s)}}}var dt=(0,I.normalizeStructTag)(I.SUI_TYPE_ARG);var ae=he(require("decimal.js"));ae.default.config({precision:64,rounding:ae.default.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var K=he(require("decimal.js"));function a(i){return K.default.isDecimal(i)?i:new K.default(i===void 0?0:i)}function X(i){return a(10).pow(a(i).abs())}var q=(i,e)=>{try{return a(i).toDP(e,K.default.ROUND_DOWN).toString()}catch{return i}},ee=(i,e)=>K.default.max(a(i),a(e));var Ae=require("@mysten/sui/transactions");async function pt(i,e=!0){i.blockData.transactions.forEach((t,s)=>{})}var R=class{static async adjustTransactionForGas(e,t,s,n){n.setSender(e.senderAddress);let r=T.selectCoinAssetGreaterThanOrEqual(t,s).selectedCoins;if(r.length===0)throw new Error("Insufficient balance");let o=T.calculateTotalBalance(t);if(o-s>1e9)return{fixAmount:s};let c=await e.fullClient.calculationTxGas(n);if(T.selectCoinAssetGreaterThanOrEqual(t,BigInt(c),r.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(c)+BigInt(500);if(o-s<l){if(s-=l,s<0)throw new Error("gas Insufficient balance");let p=new Ae.Transaction;return{fixAmount:s,newTx:p}}}return{fixAmount:s}}static buildCoinForAmount(e,t,s,n,r=!0,o=!1){let c=T.getCoinAssets(n,t);if(s===BigInt(0)&&c.length===0)return R.buildZeroValueCoin(t,e,n,r);let u=T.calculateTotalBalance(c);if(u<s)throw new Error(`The amount(${u}) is Insufficient balance for ${n} , expect ${s} `);return R.buildCoin(e,t,c,s,n,r,o)}static buildCoin(e,t,s,n,r,o=!0,c=!1){if(T.isSuiCoin(r)){if(o){let _=e.splitCoins(e.gas,[e.pure.u64(n)]);return{targetCoin:e.makeMoveVec({elements:[_]}),remainCoins:t,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(n===0n&&s.length>1){let _=T.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.object(_.objectArray[0]),remainCoins:_.remainCoins,tragetCoinAmount:_.amountArray[0],isMintZeroCoin:!1}}let y=T.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(n)]),remainCoins:y.remainCoins,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=T.selectCoinObjectIdGreaterThanOrEqual(s,n),l=u.amountArray.reduce((y,C)=>Number(y)+Number(C),0).toString(),p=u.objectArray;if(o)return{targetCoin:e.makeMoveVec({elements:p.map(y=>e.object(y))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((y,C)=>Number(y)+Number(C),0).toString(),isMintZeroCoin:!1};let[g,...d]=p,m=e.object(g),h=m,b=u.amountArray.reduce((y,C)=>Number(y)+Number(C),0).toString(),S;return d.length>0&&e.mergeCoins(m,d.map(y=>e.object(y))),c&&Number(l)>Number(n)&&(h=e.splitCoins(m,[e.pure.u64(n)]),b=n.toString(),S=m),{targetCoin:h,remainCoins:u.remainCoins,originalSplitedCoin:S,tragetCoinAmount:b,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,s,n=!0){let r=R.callMintZeroValueCoin(t,s),o;return n?o=t.makeMoveVec({elements:[r]}):o=r,{targetCoin:o,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,s,n,r=!0){let o=T.getCoinAssets(n,t);if(s.amountFirst===BigInt(0))return o.length>0?R.buildCoin(e,[...t],[...o],s.amountFirst,n,r):R.buildZeroValueCoin(t,e,n,r);let c=T.calculateTotalBalance(o);if(c>=s.amountFirst)return R.buildCoin(e,[...t],[...o],s.amountFirst,n,r);if(c<s.amountSecond)throw new Error(`The amount(${c}) is Insufficient balance for ${n} , expect ${s.amountSecond} `);return R.buildCoin(e,[...t],[...o],s.amountSecond,n,r)}static buildCoinTypePair(e,t){let s=[];if(e.length===2){let n=[];n.push(e[0],e[1]),s.push(n)}else{let n=[];n.push(e[0],e[e.length-1]),s.push(n);for(let r=1;r<e.length-1;r+=1){if(t[r-1]===0)continue;let o=[];o.push(e[0],e[r],e[e.length-1]),s.push(o)}}return s}},M=R;_e(M,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));function $(i){return i.data}function Oe(i){if(i.error&&"object_id"in i.error&&"version"in i.error&&"digest"in i.error){let{error:e}=i;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Te(i){if(i.error&&"object_id"in i.error&&!("version"in i.error)&&!("digest"in i.error))return i.error.object_id}function ce(i){if("reference"in i)return i.reference;let e=$(i);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:Oe(i)}function ue(i){return"objectId"in i?i.objectId:ce(i)?.objectId??Te(i)}function gt(i){return"version"in i?i.version:ce(i)?.version}function xe(i){return i.data!==void 0}function mt(i){return i.content!==void 0}function bt(i){let e=$(i);if(e?.content?.dataType==="package")return e.content.disassembled}function te(i){let e="data"in i?$(i):i;if(!(!e||!mt(e)||e.content.dataType!=="moveObject"))return e.content}function je(i){return te(i)?.type}function ht(i){let e=xe(i)?i.data:i;return!e?.type&&"data"in i?e?.content?.dataType==="package"?"package":je(i):e?.type}function _t(i){return $(i)?.previousTransaction}function ft(i){return $(i)?.owner}function yt(i){let e=$(i)?.display;return e||{data:null,error:null}}function le(i){let e=te(i)?.fields;if(e)return"fields"in e?e.fields:e}function Ct(i){return te(i)?.hasPublicTransfer??!1}var V=require("@mysten/bcs"),de=require("@mysten/sui/keypairs/ed25519"),pe=require("@mysten/sui/keypairs/secp256k1");function kt(i,e){let t=X(a(e));return Number(a(i).mul(t))}function St(i,e=32){return BigInt.asUintN(e,BigInt(i)).toString()}function wt(i,e=32){return Number(BigInt.asIntN(e,BigInt(i)))}function U(i,e){let t=X(a(e));return Number(a(i).div(t))}function At(i,e="hex"){if(i instanceof Uint8Array){let s=Buffer.from(i);return de.Ed25519Keypair.fromSecretKey(s)}let t=e==="hex"?(0,V.fromHEX)(i):(0,V.fromB64)(i);return de.Ed25519Keypair.fromSecretKey(t)}function Ot(i,e="hex"){if(i instanceof Uint8Array){let s=Buffer.from(i);return pe.Secp256k1Keypair.fromSecretKey(s)}let t=e==="hex"?(0,V.fromHEX)(i):(0,V.fromB64)(i);return pe.Secp256k1Keypair.fromSecretKey(t)}var Be=require("@mysten/sui/client"),H=class extends Be.SuiClient{async queryEventsByPage(e,t="all"){let s=[],n=!0,r=t==="all",o=r?null:t.cursor;do{let c=await this.queryEvents({query:e,cursor:o,limit:r?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(r&&n);return{data:s,nextCursor:o,hasNextPage:n}}async getOwnedObjectsByPage(e,t,s="all"){let n=[],r=!0,o=s==="all",c=o?null:s.cursor;do{let u=await this.getOwnedObjects({owner:e,...t,cursor:c,limit:o?null:s.limit});u.data?(n=[...n,...u.data],r=u.hasNextPage,c=u.nextCursor):r=!1}while(o&&r);return{data:n,nextCursor:c,hasNextPage:r}}async getDynamicFieldsByPage(e,t="all"){let s=[],n=!0,r=t==="all",o=r?null:t.cursor;do{let c=await this.getDynamicFields({parentId:e,cursor:o,limit:r?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(r&&n);return{data:s,nextCursor:o,hasNextPage:n}}async batchGetObjects(e,t,s=50){let n=[];try{for(let r=0;r<Math.ceil(e.length/s);r++){let o=await this.multiGetObjects({ids:e.slice(r*s,s*(r+1)),options:t});n=[...n,...o]}}catch{}return n}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let s=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:n}=s.effects;return Number(n.computationCost)+Number(n.storageCost)-Number(n.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};var Ee=require("@mysten/deepbook-v3"),f=require("@mysten/sui/bcs"),Me=require("js-base64"),A=require("@mysten/sui/transactions"),O=require("@mysten/sui/utils");function ve(...i){let e="DeepbookV3_Utils_Sdk###"}var ne=1e6,v=1e9,Tt={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},xt={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},De=1e3*60*60*24*365*100,Q=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?xt:Tt}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new A.Transaction,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}createAndDepsit({account:e,coin:t,amountToDeposit:s}){let n=new A.Transaction;n.setSenderIfNotSet(e);let r=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),o=(0,A.coinWithBalance)({type:t.coinType,balance:BigInt(s)});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[r,o],typeArguments:[t.coinType]}),n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),r],typeArguments:[]}),n.moveCall({target:"0x2::transfer::public_share_object",arguments:[r],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),n}depositIntoManager({account:e,balanceManager:t,coin:s,amountToDeposit:n,tx:r}){let o=r||new A.Transaction;if(t){o.setSenderIfNotSet(e);let c=(0,A.coinWithBalance)({type:s.coinType,balance:BigInt(n)});return o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[o.object(t),c],typeArguments:[s.coinType]}),o}return null}withdrawFromManager({account:e,balanceManager:t,coin:s,amountToWithdraw:n,returnAssets:r,txb:o}){let c=o||new A.Transaction,u=c.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[c.object(t),c.pure.u64(n)],typeArguments:[s.coinType]});return r?u:(c.transferObjects([u],e),c)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:s=new A.Transaction}){for(let n in t)t[n].forEach(o=>{let c=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[s.object(n),s.pure.u64(o.amount)],typeArguments:[o.coinType]});s.transferObjects([c],e)});return s}async getBalanceManager(e,t=!0){let s=`getBalanceManager_${e}`,n=this.getCache(s,t);if(!t&&n!==void 0)return n;try{let r=new A.Transaction;r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),r.pure.address(e)],typeArguments:[]});let u=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}))?.events?.filter(p=>p.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],l=[];return u.forEach(p=>{l.push({balanceManager:p,cetusBalanceManager:""})}),this.updateCache(s,l,P),l||[]}catch(r){throw r instanceof Error?r:new Error(String(r))}}withdrawSettledAmounts({poolInfo:e,balanceManager:t}){let s=new A.Transaction,n=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[s.object(t)]});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[s.object(e.address),s.object(t),n],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),s}async getManagerBalance({account:e,balanceManager:t,coins:s}){try{let n=new A.Transaction;s.forEach(c=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[n.object(t)],typeArguments:[c.coinType]})});let r=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n}),o={};return r.results?.forEach((c,u)=>{let l=s[u],p=c.returnValues[0][0],g=f.bcs.U64.parse(new Uint8Array(p)),d=a(g),m=d.eq(0)?"0":d.div(Math.pow(10,l.decimals)).toString();o[l.coinType]={adjusted_balance:m,balance:d.toString()}}),o}catch(n){throw n instanceof Error?n:new Error(String(n))}}async getAccountAllManagerBalance({account:e,coins:t}){try{let s=new A.Transaction,n=await this.getBalanceManager(e,!0);if(!Array.isArray(n)||n.length===0)return{};n.forEach(c=>{t.forEach(u=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[s.object(c.balanceManager)],typeArguments:[u.coinType]})})});let r=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}),o={};return n.forEach((c,u)=>{let l={},p=u*t.length;t.forEach((g,d)=>{let m=p+d,h=r.results?.[m];if(h){let b=h.returnValues[0][0],S=f.bcs.U64.parse(new Uint8Array(b)),y=a(S),C=y.eq(0)?"0":y.div(Math.pow(10,g.decimals)).toString();l[g.coinType]={adjusted_balance:C,balance:y.toString()}}}),o[c.balanceManager]=l}),o}catch(s){throw s instanceof Error?s:new Error(String(s))}}async getMarketPrice(e){try{let t=new A.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],r=Number(f.bcs.U64.parse(new Uint8Array(n))),o=Math.pow(10,e.baseCoin.decimals).toString(),c=Math.pow(10,e.quoteCoin.decimals).toString();return a(r).mul(o).div(c).div(v).toString()}catch(t){return ve("getMarketPrice ~ error:",t),"0"}}async getPools(){let e=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),t=/<([^>]+)>/,s=[];return e?.data?.forEach(n=>{let r=n?.parsedJson,o=n.type.match(t);if(o){let u=o[1].split(", ");s.push({...r,baseCoinType:u[0],quoteCoinType:u[1]})}}),s}async getQuoteQuantityOut(e,t,s){let n=new A.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),c=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(ne).toString(),baseQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getBaseQuantityOut(e,t,s){let n=new A.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),c=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(f.bcs.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{quoteQuantityDisplay:a(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(ne).toString(),quoteQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getQuantityOut(e,t,s,n){let r=new A.Transaction;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[r.object(e.address),r.pure.u64(t),r.pure.u64(s),r.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:r}),c=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[0][0]))),u=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[1][0]))),l=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:a(s).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(c).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(l).div(ne).toString(),baseQuantity:t,quoteQuantity:s,baseOut:c,quoteOut:u,deepRequired:l}}async estimatedMaxFee(e,t,s,n,r,o,c){let u=this.deepCoin;try{let{taker_fee:l,maker_fee:p}=e,g=a(l).div(v).toString(),d=a(p).div(v).toString(),m=await this.getMarketPrice(e),h=o?s:m!=="0"?m:c;if(h==="0")throw new Error("Cannot get market price");let b=Math.pow(10,e.baseCoin.decimals).toString(),S=Math.pow(10,e.quoteCoin.decimals).toString(),y=a(h).div(b).mul(S).mul(v).toString();if(n){let w=await this.getMarketPrice(e),k=a(o?s:w!=="0"?w:c).div(b).mul(S).mul(v).toString(),x=await this.getOrderDeepPrice(e);if(!x)throw new Error("Cannot get deep price");let j=ee(k,s),L=a(t).mul(a(g)).mul(a(x.deep_per_asset)).div(a(v)),E=a(t).mul(a(d)).mul(a(x.deep_per_asset)).div(a(v));x.asset_is_base||(L=L.mul(j).div(a(v)),E=E.mul(j).div(a(v)));let ge=L.ceil().toString(),me=E.ceil().toString();return{takerFee:ge,makerFee:me,takerFeeDisplay:U(ge,u.decimals).toString(),makerFeeDisplay:U(me,u.decimals).toString(),feeType:u.coinType}}if(r){let w=ee(y,s),B=a(t).mul(w).mul(a(g).mul(1.25)).div(a(v)).ceil().toFixed(0),k=a(t).mul(w).mul(a(d).mul(1.25)).div(a(v)).ceil().toFixed(0);return{takerFee:B,makerFee:k,takerFeeDisplay:U(B,e.quoteCoin.decimals).toString(),makerFeeDisplay:U(k,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}let C=a(t).mul(a(g).mul(1.25)).ceil().toFixed(0),_=a(t).mul(a(d).mul(1.25)).ceil().toFixed(0);return{takerFee:C,makerFee:_,takerFeeDisplay:U(C,e.baseCoin.decimals).toString(),makerFeeDisplay:U(_,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}catch(l){throw l instanceof Error?l:new Error(String(l))}}async getOrderDeepPrice(e){try{let t=new A.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[t.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0];return this.parseOrderDeepPrice(new Uint8Array(n))}catch{return null}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),s=t.getUint8(0)!==0,n=Number(t.getBigUint64(1,!0));return{asset_is_base:s,deep_per_asset:n}}getCoinAssets(e,t,s,n){return M.buildCoinForAmount(n,s,BigInt(a(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,s,n,r,o,c){let u=this.deepCoin;if(!c)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};try{let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];n&&l.push(u);let p=await this.getManagerBalance({account:r,balanceManager:c,coins:l}),g=p?.[t]?.balance||"0",d=p?.[s]?.balance||"0",m=o&&p?.[u.coinType]?.balance||"0";return{baseManagerBlance:g,quoteManagerBlance:d,feeManaerBalance:m}}catch(l){throw l instanceof Error?l:new Error(String(l))}}getFeeAsset(e,t,s,n,r,o,c,u,l,p){let g=a(e).gt(0)&&l,d="0";if(!g)return{feeAsset:this.getEmptyCoin(p,t),haveDepositFee:"0"};if(o||c){let m=a(r).sub(o?n:s);d=m.lte(0)?e:m.sub(e).lt(0)?m.sub(e).toString():"0"}else d=a(r).sub(e).lt("0")?a(r).sub(e).abs().toString():"0";return{feeAsset:a(d).gt("0")?this.getCoinAssets(t,d,u,p):this.getEmptyCoin(p,t),haveDepositFee:d}}async getTransactionRelatedAssets(e,t,s,n,r,o,c,u,l){try{let p=this.deepCoin,g=(0,O.normalizeStructTag)(e.baseCoin.coinType),d=(0,O.normalizeStructTag)(e.quoteCoin.coinType),m=g===p.coinType,h=d===p.coinType,b=!m&&!h,{baseManagerBlance:S,quoteManagerBlance:y,feeManaerBalance:C}=await this.getTransactionRelatedBalance(e,g,d,b,o,c,u),_,w,B=!1,k=await this._sdk.getOwnerCoinAssets(o);if(r){c||(s=a(s).add(a(n)).toString());let j=a(y).sub(s).toString();a(j).lt(0)?(B=!0,w=this.getCoinAssets(d,j,k,l)):w=this.getEmptyCoin(l,d),_=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let j=a(S).sub(t).toString();a(j).lt(0)?(B=!0,_=this.getCoinAssets(g,j,k,l)):_=this.getEmptyCoin(l,g),w=this.getEmptyCoin(l,d)}let x=this.getFeeAsset(n,p.coinType,t,s,C,h,m,k,c,l);return{baseAsset:_,quoteAsset:w,feeAsset:x,haveDeposit:B}}catch(p){throw p instanceof Error?p:new Error(String(p))}}async getMarketTransactionRelatedAssets(e,t,s,n,r,o,c,u,l){try{let p=this.deepCoin,g=(0,O.normalizeStructTag)(e.baseCoin.coinType),d=(0,O.normalizeStructTag)(e.quoteCoin.coinType),m=g===p.coinType,h=d===p.coinType,b=!m&&!h,{baseManagerBlance:S,quoteManagerBlance:y}=await this.getTransactionRelatedBalance(e,g,d,b,o,c,u),C,_,w=await this._sdk.getOwnerCoinAssets(o);if(r){c||(s=a(s).add(a(n)).toString());let k=a(y).sub(s).toString();if(a(k).lt(0)){let x;a(y).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:y,returnAssets:!0,txb:l}));let j=this.getCoinAssets(d,k,w,l);x&&l.mergeCoins(j,[x]),_=j}else _=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:s,returnAssets:!0,txb:l});C=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let k=a(S).sub(t).toString();if(a(k).lt(0)){let x;a(S).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:S,returnAssets:!0,txb:l}));let j=this.getCoinAssets(g,k,w,l);x&&l.mergeCoins(j,[x]),C=j}else C=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});_=this.getEmptyCoin(l,d)}let B=this.getEmptyCoin(l,p.coinType);return{baseAsset:C,quoteAsset:_,feeAsset:B}}catch(p){throw p instanceof Error?p:new Error(String(p))}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:s,orderType:n,isBid:r,maxFee:o,account:c,payWithDeep:u,expirationTimestamp:l=Date.now()+De}){try{let p=this.deepCoin,g=e.address,d=e.baseCoin.decimals,m=e.quoteCoin.decimals,h=e.baseCoin.coinType,b=e.quoteCoin.coinType,S=a(t).mul(10**(m-d+9)).toString(),y=(0,O.normalizeStructTag)(h),C=(0,O.normalizeStructTag)(b),_=new A.Transaction,w,B,k=await this._sdk.getOwnerCoinAssets(c);if(r){let E=a(t).mul(a(s).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();u||(E=a(E).add(a(o)).toString()),B=M.buildCoinForAmount(_,k,BigInt(E),C,!1,!0)?.targetCoin}else{let E=s;u||(E=a(s).abs().add(a(o)).toString()),w=M.buildCoinForAmount(_,k,BigInt(a(E).abs().toString()),y,!1,!0)?.targetCoin}let x=u?a(o).gt(0)?M.buildCoinForAmount(_,k,BigInt(a(o).abs().ceil().toString()),p.coinType,!1,!0).targetCoin:this.getEmptyCoin(_,p.coinType):this.getEmptyCoin(_,p.coinType),j=_.moveCall({typeArguments:[r?h:b],target:"0x2::coin::zero",arguments:[]}),L=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(g),r?j:w,r?B:j,x,_.pure.u8(n),_.pure.u8(0),_.pure.u64(S),_.pure.u64(s),_.pure.bool(r),_.pure.bool(!1),_.pure.u64(l),_.object(O.SUI_CLOCK_OBJECT_ID)];return _.moveCall({typeArguments:[y,C],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:L}),_}catch(p){throw p instanceof Error?p:new Error(String(p))}}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:s,maxFee:n,account:r,payWithDeep:o,slippage:c=.01}){try{let u=e.address,l=e.baseCoin.coinType,p=e.quoteCoin.coinType,g=(0,O.normalizeStructTag)(l),d=(0,O.normalizeStructTag)(p),m=new A.Transaction,h,b,S=t,y,C=await this.getOrderBook(e,"all",6);if(s){let k=C?.ask?.[0]?.price||"0",x=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();y=a(x).plus(a(x).mul(c)).ceil().toString()}else{let k=await C?.bid?.[0]?.price||"0",x=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();y=a(x).minus(a(x).mul(c)).floor().toString()}let _=await this._sdk.getOwnerCoinAssets(r);s?(o||(y=a(y).add(a(n)).toString()),b=this.getCoinAssets(d,y,_,m),h=this.getEmptyCoin(m,g)):(o||(S=a(S).add(a(n)).toString()),b=this.getEmptyCoin(m,d),h=this.getCoinAssets(g,S,_,m));let w=o?a(n).gt(0)?M.buildCoinForAmount(m,_,BigInt(a(n).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(m,this.deepCoin.coinType):this.getEmptyCoin(m,this.deepCoin.coinType),B=[m.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),m.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),m.object(u),h,b,w,m.pure.u8(0),m.pure.u64(t),m.pure.bool(s),m.pure.bool(o),m.pure.u64(y),m.object(O.SUI_CLOCK_OBJECT_ID)];return m.moveCall({typeArguments:[g,d],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:B}),m}catch(u){throw u instanceof Error?u:new Error(String(u))}}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:s,quantity:n,isBid:r,orderType:o,maxFee:c,account:u,payWithDeep:l,expirationTimestamp:p=Date.now()+De}){try{let g=this.deepCoin,d=a(s).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),m=t.baseCoin.coinType,h=t.quoteCoin.coinType,b=new A.Transaction,S=r?a(s).mul(a(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",y=r?"0":n,{baseAsset:C,quoteAsset:_,feeAsset:w,haveDeposit:B}=await this.getTransactionRelatedAssets(t,y,S,c,r,u,l,e,b);if(B){let j=[b.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),b.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),b.object(t.address),b.object(e),C,_,w.feeAsset,b.pure.u8(o),b.pure.u8(0),b.pure.u64(d),b.pure.u64(n),b.pure.bool(r),b.pure.bool(l),b.pure.u64(p),b.object(O.SUI_CLOCK_OBJECT_ID)];return b.moveCall({typeArguments:[m,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:j}),b}let k=new A.Transaction;a(w.haveDepositFee).gt(0)&&this.depositIntoManager({account:u,balanceManager:e,coin:g,amountToDeposit:w.haveDepositFee,tx:k});let x=[k.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),k.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),k.object(t.address),k.object(e),k.pure.u8(o),k.pure.u8(0),k.pure.u64(d),k.pure.u64(n),k.pure.bool(r),k.pure.bool(l),k.pure.u64(p),k.object(O.SUI_CLOCK_OBJECT_ID)];return k.moveCall({typeArguments:[m,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:x}),k}catch(g){throw g instanceof Error?g:new Error(String(g))}}modifyOrder({balanceManager:e,poolInfo:t,orderId:s,newOrderQuantity:n}){let r=new A.Transaction;return r.moveCall({typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::modify_order`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),r.object(e),r.object(t.address),r.pure.u128(s),r.pure.u64(n),r.object(O.SUI_CLOCK_OBJECT_ID)]}),r}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new A.Transaction,r=await this.getMarketPrice(e),o=a(r).gt(0)?r:Math.pow(10,-1),c=Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(u),n.pure.u64(l),n.pure.bool(!1),n.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,s.coinType]});let p=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:n}),d=[],m=g.results[0].returnValues[0][0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(m)),b=g.results[0].returnValues[1][0],S=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(b));return h.forEach((y,C)=>{let _=a(y).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),w=a(S[C]).div(Math.pow(10,t.decimals)).toString();d.push({price:_,quantity:w})}),d?.[0]?.price||0}catch{return 0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new A.Transaction,r=await this.getMarketPrice(e),o=a(r).gt(0)?a(r).div(3).toNumber():Math.pow(10,-6),c=a(r).gt(0)?r:Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(q(u,0)),n.pure.u64(q(l,0)),n.pure.bool(!0),n.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,s.coinType]});let p=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:n}),d=[],m=g.results[0].returnValues[0][0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(m)),b=g.results[0].returnValues[1][0],S=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(b));return h.forEach((y,C)=>{let _=a(y).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),w=a(S[C]).div(Math.pow(10,t.decimals)).toString();d.push({price:_,quantity:w})}),d?.[0]?.price||0}catch{return 0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:s,quoteCoin:n}=e,r=new A.Transaction,o=await this.getMarketPrice(e),c,u;t?(c=a(o).gt(0)?a(o).div(3).toNumber():Math.pow(10,-6),u=a(o).gt(0)?o:Math.pow(10,6)):(c=a(o).gt(0)?o:Math.pow(10,-1),u=a(o).gt(0)?a(o).mul(3).toNumber():Math.pow(10,6));let l=a(c).mul(Math.pow(10,9+n.decimals-s.decimals)).toString(),p=a(u).mul(Math.pow(10,9+n.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(q(l,0)),r.pure.u64(q(p,0)),r.pure.bool(t),r.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,n.coinType]});let g=this._sdk.sdkOptions.simulationAccount.address,d=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:r}),m=[],h=d.results[0].returnValues[0][0],b=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(h)),S=d.results[0].returnValues[1][0],y=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(S));return b.forEach((C,_)=>{let w=a(C).div(Math.pow(10,9+n.decimals-s.decimals)).toString(),B=a(y[_]).div(Math.pow(10,s.decimals)).toString();m.push({price:w,quantity:B})}),m?.[0]?.price||0}catch{return 0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:s,quoteQuantity:n,isBid:r,maxFee:o,account:c,payWithDeep:u,slippage:l=.01}){try{let p=(0,O.normalizeStructTag)(t.baseCoin.coinType),g=(0,O.normalizeStructTag)(t.quoteCoin.coinType),d=new A.Transaction,{baseAsset:m,quoteAsset:h,feeAsset:b}=await this.getMarketTransactionRelatedAssets(t,s,n,o,r,c,u,e,d),S=await this.getOrderBook(t,"all",6);if(r){let _=S?.ask?.[0]?.price||"0",w=a(_).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(w).plus(a(w).mul(l)).ceil().toString()}else{let _=await S?.bid?.[0]?.price||"0",w=a(_).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(w).minus(a(w).mul(l)).floor().toString()}let y=n,C=[d.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),d.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),d.object(t.address),d.object(e),m,h,b,d.pure.u8(0),d.pure.u64(s),d.pure.bool(r),d.pure.bool(u),d.pure.u64(y),d.object(O.SUI_CLOCK_OBJECT_ID)];return d.setSenderIfNotSet(c),d.moveCall({typeArguments:[p,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:C}),d}catch(p){throw p instanceof Error?p:new Error(String(p))}}async getOrderInfoList(e,t,s){try{let n=new A.Transaction;t.forEach(p=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[n.object(e.address),n.pure.u128(p)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]})});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=f.bcs.struct("ID",{bytes:f.bcs.Address}),c=f.bcs.struct("OrderDeepPrice",{asset_is_base:f.bcs.bool(),deep_per_asset:f.bcs.u64()}),u=f.bcs.struct("Order",{balance_manager_id:o,order_id:f.bcs.u128(),client_order_id:f.bcs.u64(),quantity:f.bcs.u64(),filled_quantity:f.bcs.u64(),fee_is_deep:f.bcs.bool(),order_deep_price:c,epoch:f.bcs.u64(),status:f.bcs.u8(),expire_timestamp:f.bcs.u64()}),l=[];return r?.results?.forEach(p=>{let g=p.returnValues[0][0],d=u.parse(new Uint8Array(g));l.push(d)}),l}catch{return[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),s=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),n=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:s,orderId:n}}async getOpenOrder(e,t,s,n){let r;if(n)r=n;else{let u=new A.Transaction;u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(e.address),u.object(s)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let p=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:u})).results[0].returnValues[0][0];r=f.bcs.struct("VecSet",{constants:f.bcs.vector(f.bcs.U128)}).parse(new Uint8Array(p)).constants}let o=await this.getOrderInfoList(e,r,t)||[],c=[];return o.forEach(u=>{let l=this.decodeOrderId(BigInt(u.order_id));c.push({...u,price:l.price,isBid:l.isBid})}),c}cancelOrders(e,t){let s=new A.Transaction;return e.forEach(n=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),s.object(t),s.object(n.poolInfo.address),s.pure.u128(n.orderId),s.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.poolInfo.baseCoin.coinType,n.poolInfo.quoteCoin.coinType]})}),s}async getDeepbookOrderBook(e,t,s,n,r,o){let c=this._sdk.fullClient,l=await new Ee.DeepBookClient({client:c,address:r,env:"testnet",balanceManagers:{test1:{address:o,tradeCap:""}}}).getLevel2Range(e,t,s,n)}processOrderBookData(e,t,s,n){let r=e.returnValues[0][0],o=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(r)),c=e.returnValues[1][0],u=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(c)),l={};return o.forEach((g,d)=>{let m=a(g).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),h=a(u[d]).div(Math.pow(10,t.decimals)).toString();l[m]?l[m]={price:m,quantity:a(l[m].quantity).add(h).toString()}:l[m]={price:m,quantity:h}}),Object.values(l)}getLevel2RangeTx(e,t,s,n,r=new A.Transaction){let{baseCoin:o,quoteCoin:c}=e,u=q(a(s).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0),l=q(a(n).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0);return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(u),r.pure.u64(l),r.pure.bool(t),r.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[o.coinType,c.coinType]}),r}async fetchOrderBook(e,t,s,n,r,o){let c=new A.Transaction,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let h=n,b=s==="0"?r:s;c=this.getLevel2RangeTx(e,!0,h,b,c)}if(t==="ask"||t==="all"){let h=s==="0"?n:s,b=r;c=this.getLevel2RangeTx(e,!1,h,b,c)}let p=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:c}),d=[];(t==="bid"||t==="all")&&(d=g.results?.[0]?this.processOrderBookData(g.results[0],u,l,o):[]);let m=[];if(t==="ask"||t==="all"){let h=t==="ask"?0:1;m=g.results?.[h]?this.processOrderBookData(g.results[h],u,l,o):[]}return{bid:d.sort((h,b)=>b.price-h.price),ask:m.sort((h,b)=>h.price-b.price)}}catch{let g=this._sdk.sdkOptions.simulationAccount.address,d=[],m=[];try{let h=this.getLevel2RangeTx(e,!0,n,s),b=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});d=b.results?.[0]?this.processOrderBookData(b.results[0],u,l,o):[]}catch{d=[]}try{let h=this.getLevel2RangeTx(e,!1,n,s),b=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});m=b.results?.[0]?this.processOrderBookData(b.results[0],u,l,o):[]}catch{m=[]}return{bid:d,ask:m}}}async getOrderBook(e,t,s){let n={bid:[],ask:[]};try{let r=await this.getMarketPrice(e),o=t,c=Math.pow(10,-s),u=Math.pow(10,s),l=await this.fetchOrderBook(e,o,r,c,u,s);return{bid:l?.bid,ask:l?.ask}}catch{return n}}async getOrderBookOrigin(e,t){try{let s=new A.Transaction,n=await this.getMarketPrice(e),{baseCoin:r,quoteCoin:o}=e;if(t==="bid"||t==="all"){let g=Math.pow(10,-6),d=n,m=a(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(m),s.pure.u64(h),s.pure.bool(!0),s.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,o.coinType]})}if(t==="ask"||t==="all"){let g=n,d=Math.pow(10,6),m=a(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(m),s.pure.u64(h),s.pure.bool(!1),s.object(O.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,o.coinType]})}let c=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:c,transactionBlock:s}),l=[];if(t==="bid"||t==="all"){let g=u.results[0]?.returnValues[0]?.[0],d=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(g)),m=u.results[0]?.returnValues[1]?.[0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(m));d.forEach((b,S)=>{let y=a(b).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),C=a(h[S]).div(Math.pow(10,r.decimals)).toString();l.push({price:y,quantity:C})})}let p=[];if(t==="ask"||t==="all"){let g=t==="ask"?0:1,d=u.results[g]?.returnValues[0]?.[0],m=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(d)),h=u.results[g]?.returnValues[1]?.[0],b=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(h));m.forEach((S,y)=>{let C=a(S).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),_=a(b[y]).div(Math.pow(10,r.decimals)).toString();p.push({price:C,quantity:_})})}return{bid:l,ask:p}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((n,r)=>[(0,O.normalizeStructTag)(n.coinType),n]))}async getAccount(e,t){let s=new A.Transaction;for(let c=0;c<t.length;c++){let u=t[c];s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[s.object(u.address),s.object(e)],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:s}),r;if(n?.events.length===0)return null;let o=[];return n?.events?.forEach((c,u)=>{r=c?.parsedJson;let l=r.account.open_orders.contents,p=r.account.owed_balances,g=r.account.settled_balances,d=r.account.unclaimed_rebates,m=r.account.taker_volume;o.push({balance_manager_id:e,open_orders:l,owed_balances:p,settled_balances:g,unclaimed_rebates:d,taker_volume:m,poolInfo:t[u]})}),o}async getSuiTransactionResponse(e,t=!1){let s=`${e}_getSuiTransactionResponse`,n=this.getCache(s,t);if(n!==void 0)return n;let r;try{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(s,r,P),r}transformExtensions(e,t,s=!0){let n=[];for(let r of t){let{key:o}=r.fields,{value:c}=r.fields;if(o==="labels")try{c=JSON.parse(decodeURIComponent(Me.Base64.decode(c)))}catch{}s&&(e[o]=c),n.push({key:o,value:c})}delete e.extension_fields,s||(e.extensions=n)}async getCoinConfigs(e=!1,t=!0){let s=this.sdk.sdkOptions.coinlist.handle,n=`${s}_getCoinConfigs`,r=this.getCache(n,e);if(r)return r;let c=(await this._sdk.fullClient.getDynamicFieldsByPage(s)).data.map(p=>p.objectId),u=await this._sdk.fullClient.batchGetObjects(c,{showContent:!0}),l=[];return u.forEach(p=>{let g=this.buildCoinConfig(p,t);this.updateCache(`${s}_${g.address}_getCoinConfig`,g,P),l.push({...g})}),this.updateCache(n,l,P),l}buildCoinConfig(e,t=!0){let s=le(e);s=s.value.fields;let n={...s};return n.id=ue(e),n.address=D(s.coin_type.fields.name).full_address,s.pyth_id&&(n.pyth_id=(0,O.normalizeSuiObjectId)(s.pyth_id)),this.transformExtensions(n,s.extension_fields.fields.contents,t),delete n.coin_type,n}updateCache(e,t,s=se){let n=this._cache[e];n?(n.overdueTime=N(s),n.value=t):n=new F(t,N(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var Z=class{_cache={};_rpcModule;_deepbookUtils;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new H({url:e.fullRpcUrl}),this._deepbookUtils=new Q(this),Y(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get fullClient(){return this._rpcModule}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,s=!0){let n=[],r=null,o=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,c=this.getCache(o,s);if(c)return c;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:r}):this.fullClient.getAllCoins({owner:e,cursor:r}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&n.push({coinAddress:D(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),r=u.nextCursor,!u.hasNextPage)break}return this.updateCache(o,n,30*1e3),n}async getOwnerCoinBalances(e,t){let s=[];return t?s=[await this.fullClient.getBalance({owner:e,coinType:t})]:s=[...await this.fullClient.getAllBalances({owner:e})],s}updateCache(e,t,s=P){let n=this._cache[e];n?(n.overdueTime=N(s),n.value=t):n=new F(t,N(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var jt="0x0000000000000000000000000000000000000000000000000000000000000006",Bt="pool_script",vt="pool_script_v2",Dt="router",Et="router_with_partner",Mt="fetcher_script",Rt="expect_swap",Pt="utils",It="0x1::coin::CoinInfo",qt="0x1::coin::CoinStore",Ut="custodian_v2",Ft="clob_v2",Nt="endpoints_v2",$t=i=>{if(typeof i=="string"&&i.startsWith("0x"))return"object";if(typeof i=="number"||typeof i=="bigint")return"u64";if(typeof i=="boolean")return"bool";throw new Error(`Unknown type for value: ${i}`)};var Re=(n=>(n[n.NO_RESTRICTION=0]="NO_RESTRICTION",n[n.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",n[n.FILL_OR_KILL=2]="FILL_OR_KILL",n[n.POST_ONLY=3]="POST_ONLY",n))(Re||{});var Vt=Z;0&&(module.exports={CLOCK_ADDRESS,CachedContent,CetusClmmSDK,ClmmExpectSwapModule,ClmmFetcherModule,ClmmIntegratePoolModule,ClmmIntegratePoolV2Module,ClmmIntegrateRouterModule,ClmmIntegrateRouterWithPartnerModule,ClmmIntegrateUtilsModule,CoinAssist,CoinInfoAddress,CoinStoreAddress,DEEP_SCALAR,DEFAULT_GAS_BUDGET_FOR_MERGE,DEFAULT_GAS_BUDGET_FOR_SPLIT,DEFAULT_GAS_BUDGET_FOR_STAKE,DEFAULT_GAS_BUDGET_FOR_TRANSFER,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,DEFAULT_NFT_TRANSFER_GAS_FEE,DeepbookClobV2Moudle,DeepbookCustodianV2Moudle,DeepbookEndpointsV2Moudle,DeepbookUtilsModule,FLOAT_SCALAR,GAS_SYMBOL,GAS_TYPE_ARG,GAS_TYPE_ARG_LONG,NORMALIZED_SUI_COIN_TYPE,OrderType,RpcModule,SUI_SYSTEM_STATE_OBJECT_ID,TransactionUtil,addHexPrefix,asIntN,asUintN,bufferToHex,cacheTime24h,cacheTime5min,checkAddress,composeType,d,decimalsMultiplier,extractAddressFromType,extractStructTagFromType,fixCoinType,fixDown,fixSuiObjectId,fromDecimalsAmount,getDefaultSuiInputType,getFutureTime,getMoveObject,getMoveObjectType,getMovePackageContent,getObjectDeletedResponse,getObjectDisplay,getObjectFields,getObjectId,getObjectNotExistsResponse,getObjectOwner,getObjectPreviousTransactionDigest,getObjectReference,getObjectType,getObjectVersion,getSuiObjectData,hasPublicTransfer,hexToNumber,hexToString,isSortedSymbols,isSuiObjectResponse,maxDecimal,normalizeCoinType,patchFixSuiObjectId,printTransaction,removeHexPrefix,secretKeyToEd25519Keypair,secretKeyToSecp256k1Keypair,shortAddress,shortString,toBuffer,toDecimalsAmount,utf8to16});
1
+ "use strict";var it=Object.create;var J=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var dt=(c,e,t)=>e in c?J(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t;var lt=(c,e)=>{for(var t in e)J(c,t,{get:e[t],enumerable:!0})},Pe=(c,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of at(e))!ut.call(c,n)&&n!==t&&J(c,n,{get:()=>e[n],enumerable:!(r=ot(e,n))||r.enumerable});return c};var qe=(c,e,t)=>(t=c!=null?it(ct(c)):{},Pe(e||!c||!c.__esModule?J(t,"default",{value:c,enumerable:!0}):t,c)),pt=c=>Pe(J({},"__esModule",{value:!0}),c);var De=(c,e,t)=>(dt(c,typeof e!="symbol"?e+"":e,t),t);var _r={};lt(_r,{CLOCK_ADDRESS:()=>tr,CachedContent:()=>K,CetusClmmSDK:()=>re,ClmmExpectSwapModule:()=>ar,ClmmFetcherModule:()=>or,ClmmIntegratePoolModule:()=>rr,ClmmIntegratePoolV2Module:()=>nr,ClmmIntegrateRouterModule:()=>sr,ClmmIntegrateRouterWithPartnerModule:()=>ir,ClmmIntegrateUtilsModule:()=>cr,CoinAssist:()=>B,CoinInfoAddress:()=>ur,CoinStoreAddress:()=>dr,DEEP_SCALAR:()=>le,DEFAULT_GAS_BUDGET_FOR_MERGE:()=>Bt,DEFAULT_GAS_BUDGET_FOR_SPLIT:()=>Et,DEFAULT_GAS_BUDGET_FOR_STAKE:()=>Pt,DEFAULT_GAS_BUDGET_FOR_TRANSFER:()=>vt,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI:()=>Mt,DEFAULT_NFT_TRANSFER_GAS_FEE:()=>Dt,DeepbookClobV2Moudle:()=>pr,DeepbookCustodianV2Moudle:()=>lr,DeepbookEndpointsV2Moudle:()=>gr,DeepbookUtilsModule:()=>X,FLOAT_SCALAR:()=>U,FLOAT_SCALING:()=>$,GAS_SYMBOL:()=>qt,GAS_TYPE_ARG:()=>ae,GAS_TYPE_ARG_LONG:()=>_e,MarginUtilsModule:()=>ee,NORMALIZED_SUI_COIN_TYPE:()=>Ot,OrderType:()=>nt,RpcModule:()=>te,SUI_SYSTEM_STATE_OBJECT_ID:()=>It,SelfMatchingOption:()=>st,TransactionUtil:()=>F,YEAR_MS:()=>Ye,addHexPrefix:()=>me,asIntN:()=>Rt,asUintN:()=>Ut,bufferToHex:()=>_t,cacheTime1min:()=>ye,cacheTime24h:()=>V,cacheTime5min:()=>fe,calc100PercentRepay:()=>er,calcDebtDetail:()=>tt,calcInterestRate:()=>et,calcUtilizationRate:()=>Xe,calculateRiskRatio:()=>Jt,checkAddress:()=>bt,composeType:()=>be,d:()=>d,decimalsMultiplier:()=>ce,default:()=>br,extractAddressFromType:()=>Tt,extractStructTagFromType:()=>R,fixCoinType:()=>At,fixDown:()=>L,fixSuiObjectId:()=>Ve,fromDecimalsAmount:()=>G,getDefaultSuiInputType:()=>mr,getFutureTime:()=>z,getMoveObject:()=>de,getMoveObjectType:()=>Qe,getMovePackageContent:()=>xt,getObjectDeletedResponse:()=>Ge,getObjectDisplay:()=>zt,getObjectFields:()=>Oe,getObjectId:()=>Ae,getObjectNotExistsResponse:()=>Ke,getObjectOwner:()=>Kt,getObjectPreviousTransactionDigest:()=>Gt,getObjectReference:()=>Te,getObjectType:()=>Lt,getObjectVersion:()=>Vt,getSuiObjectData:()=>Q,hasPublicTransfer:()=>Qt,hexToNumber:()=>ht,hexToString:()=>yt,isSortedSymbols:()=>Ct,isSuiObjectResponse:()=>ze,maxDecimal:()=>ue,mulRoundUp:()=>Me,normalizeCoinType:()=>ie,patchFixSuiObjectId:()=>oe,printTransaction:()=>Ht,removeHexPrefix:()=>se,secretKeyToEd25519Keypair:()=>$t,secretKeyToSecp256k1Keypair:()=>Ft,shortAddress:()=>mt,shortString:()=>Ie,sleepTime:()=>Ce,toBuffer:()=>Ue,toDecimalsAmount:()=>W,utf8to16:()=>Re,wrapDeepBookMarginPoolInfo:()=>je,wrapDeepBookPoolInfo:()=>Se});module.exports=pt(_r);var rt=require("@mysten/sui/graphql");var We=require("@mysten/deepbook-v3"),h=require("@mysten/sui/bcs"),T=require("@mysten/sui/transactions"),S=require("@mysten/sui/utils"),Ze=require("js-base64");var he=require("@mysten/sui/transactions");var x=require("@mysten/sui/utils");var gt=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function me(c){return c.startsWith("0x")?c:`0x${c}`}function se(c){return c.startsWith("0x")?`${c.slice(2)}`:c}function Ie(c,e=4,t=4){let r=Math.max(e,1),n=Math.max(t,1);return`${c.slice(0,r+2)} ... ${c.slice(-n)}`}function mt(c,e=4,t=4){return Ie(me(c),e,t)}function bt(c,e={leadingZero:!0}){if(typeof c!="string")return!1;let t=c;if(e.leadingZero){if(!c.startsWith("0x"))return!1;t=t.substring(2)}return gt.test(t)}function Ue(c){if(!Buffer.isBuffer(c))if(Array.isArray(c))c=Buffer.from(c);else if(typeof c=="string")exports.isHexString(c)?c=Buffer.from(exports.padToEven(exports.stripHexPrefix(c)),"hex"):c=Buffer.from(c);else if(typeof c=="number")c=exports.intToBuffer(c);else if(c==null)c=Buffer.allocUnsafe(0);else if(c.toArray)c=Buffer.from(c.toArray());else throw new Error("invalid type");return c}function _t(c){return me(Ue(c).toString("hex"))}function ht(c){let e=new ArrayBuffer(4),t=new DataView(e);for(let n=0;n<c.length;n++)t.setUint8(n,c.charCodeAt(n));return t.getUint32(0,!0)}function Re(c){let e,t,r,n,i;e="";let s=c.length;for(t=0;t<s;)switch(r=c.charCodeAt(t++),r>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=c.charAt(t-1);break;case 12:case 13:n=c.charCodeAt(t++),e+=String.fromCharCode((r&31)<<6|n&63);break;case 14:n=c.charCodeAt(t++),i=c.charCodeAt(t++),e+=String.fromCharCode((r&15)<<12|(n&63)<<6|(i&63)<<0);break}return e}function yt(c){let e="",t=se(c),r=t.length/2;for(let n=0;n<r;n++)e+=String.fromCharCode(Number.parseInt(t.substr(n*2,2),16));return Re(e)}var ft=0,Fe=1,wt=2;function $e(c,e){return c===e?ft:c<e?Fe:wt}function kt(c,e){let t=0,r=c.length<=e.length?c.length:e.length,n=$e(c.length,e.length);for(;t<r;){let i=$e(c.charCodeAt(t),e.charCodeAt(t));if(t+=1,i!==0)return i}return n}function Ct(c,e){return kt(c,e)===Fe}function be(c,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],n=[c,...e].filter(Boolean).join("::");return t&&t.length&&(n+=`<${t.join(", ")}>`),n}function Tt(c){return c.split("::")[0]}function R(c){try{let e=c.replace(/\s/g,""),r=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(r){e=e.slice(0,e.indexOf("<"));let a={...R(e),type_arguments:r.map(u=>R(u).source_address)};return a.type_arguments=a.type_arguments.map(u=>B.isSuiCoin(u)?u:R(u).source_address),a.source_address=be(a.full_address,a.type_arguments),a}let n=e.split("::"),s={full_address:e,address:e===ae||e===_e?"0x2":(0,x.normalizeSuiObjectId)(n[0]),module:n[1],name:n[2],type_arguments:[],source_address:""};return s.full_address=`${s.address}::${s.module}::${s.name}`,s.source_address=be(s.full_address,s.type_arguments),s}catch{return{full_address:c,address:"",module:"",name:"",type_arguments:[],source_address:c}}}function ie(c){return R(c).source_address}function Ve(c){return c.toLowerCase().startsWith("0x")?(0,x.normalizeSuiObjectId)(c):c}var At=(c,e=!0)=>{let t=c.split("::"),r=t.shift(),n=(0,x.normalizeSuiObjectId)(r);return e&&(n=se(n)),`${n}::${t.join("::")}`};function oe(c){for(let e in c){let t=typeof c[e];if(t==="object")oe(c[e]);else if(t==="string"){let r=c[e];c[e]=Ve(r)}}}var Ot=(0,x.normalizeStructTag)(x.SUI_TYPE_ARG);var St="0x2::coin::Coin",jt=/^0x2::coin::Coin<(.+)>$/,Et=1e3,Bt=500,vt=100,Mt=100,Pt=1e3,ae="0x2::sui::SUI",_e="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",qt="SUI",Dt=450,It="0x0000000000000000000000000000000000000005",B=class{static getCoinTypeArg(e){let t=e.type.match(jt);return t?t[1]:null}static isSUI(e){let t=B.getCoinTypeArg(e);return t?B.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let r=BigInt(0);return e.forEach(n=>{t===n.coinAddress&&(r+=BigInt(n.balance))}),r}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${St}<${e}>`}static getCoinAssets(e,t){let r=[];return t.forEach(n=>{ie(n.coinAddress)===ie(e)&&r.push(n)}),r}static isSuiCoin(e){return R(e).full_address===ae}static selectCoinObjectIdGreaterThanOrEqual(e,t,r=[]){let n=B.selectCoinAssetGreaterThanOrEqual(e,t,r),i=n.selectedCoins.map(a=>a.coinObjectId),s=n.remainingCoins,o=n.selectedCoins.map(a=>a.balance.toString());return{objectArray:i,remainCoins:s,amountArray:o}}static selectCoinAssetGreaterThanOrEqual(e,t,r=[]){let n=B.sortByBalance(e.filter(u=>!r.includes(u.coinObjectId))),i=B.calculateTotalBalance(n);if(i<t)return{selectedCoins:[],remainingCoins:n};if(i===t)return{selectedCoins:n,remainingCoins:[]};let s=BigInt(0),o=[],a=[...n];for(;s<i;){let u=t-s,p=a.findIndex(m=>m.balance>=u);if(p!==-1){o.push(a[p]),a.splice(p,1);break}let l=a.pop();l.balance>0&&(o.push(l),s+=l.balance)}return{selectedCoins:B.sortByBalance(o),remainingCoins:B.sortByBalance(a)}}static sortByBalance(e){return e.sort((t,r)=>t.balance<r.balance?-1:t.balance>r.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,r)=>t.balance>r.balance?-1:t.balance<r.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,r)=>t+r.balance,BigInt(0))}static buildCoinWithBalance(e,t,r){return e===BigInt(0)&&B.isSuiCoin(t)?r.add((0,he.coinWithBalance)({balance:e,useGasCoin:!1})):r.add((0,he.coinWithBalance)({balance:e,type:t}))}};var ye=6e4,fe=3e5,V=864e5;function z(c){return Date.parse(new Date().toString())+c}var K=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};var H=require("@mysten/bcs"),we=require("@mysten/sui/keypairs/ed25519"),ke=require("@mysten/sui/keypairs/secp256k1");var Y=qe(require("decimal.js"));function d(c){return Y.default.isDecimal(c)?c:new Y.default(c===void 0?0:c)}function ce(c){return d(10).pow(d(c).abs())}var L=(c,e)=>{try{return d(c).toDP(e,Y.default.ROUND_DOWN).toString()}catch{return c}},ue=(c,e)=>Y.default.max(d(c),d(e));function W(c,e){let t=ce(d(e));return Number(d(c).mul(t))}function Ut(c,e=32){return BigInt.asUintN(e,BigInt(c)).toString()}function Rt(c,e=32){return Number(BigInt.asIntN(e,BigInt(c)))}function G(c,e){let t=ce(d(e));return Number(d(c).div(t))}function $t(c,e="hex"){if(c instanceof Uint8Array){let r=Buffer.from(c);return we.Ed25519Keypair.fromSecretKey(r)}let t=e==="hex"?(0,H.fromHEX)(c):(0,H.fromB64)(c);return we.Ed25519Keypair.fromSecretKey(t)}function Ft(c,e="hex"){if(c instanceof Uint8Array){let r=Buffer.from(c);return ke.Secp256k1Keypair.fromSecretKey(r)}let t=e==="hex"?(0,H.fromHEX)(c):(0,H.fromB64)(c);return ke.Secp256k1Keypair.fromSecretKey(t)}var Ce=async c=>new Promise(e=>{setTimeout(()=>{e(1)},c)});var Ne={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},xe={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6};function Le(...c){let e="DeepbookV3_Utils_Sdk###"}function Q(c){return c.data}function Ge(c){if(c.error&&"object_id"in c.error&&"version"in c.error&&"digest"in c.error){let{error:e}=c;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Ke(c){if(c.error&&"object_id"in c.error&&!("version"in c.error)&&!("digest"in c.error))return c.error.object_id}function Te(c){if("reference"in c)return c.reference;let e=Q(c);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:Ge(c)}function Ae(c){return"objectId"in c?c.objectId:Te(c)?.objectId??Ke(c)}function Vt(c){return"version"in c?c.version:Te(c)?.version}function ze(c){return c.data!==void 0}function Nt(c){return c.content!==void 0}function xt(c){let e=Q(c);if(e?.content?.dataType==="package")return e.content.disassembled}function de(c){let e="data"in c?Q(c):c;if(!(!e||!Nt(e)||e.content.dataType!=="moveObject"))return e.content}function Qe(c){return de(c)?.type}function Lt(c){let e=ze(c)?c.data:c;return!e?.type&&"data"in c?e?.content?.dataType==="package"?"package":Qe(c):e?.type}function Gt(c){return Q(c)?.previousTransaction}function Kt(c){return Q(c)?.owner}function zt(c){let e=Q(c)?.display;return e||{data:null,error:null}}function Oe(c){let e=de(c)?.fields;if(e)return"fields"in e?e.fields:e}function Qt(c){return de(c)?.hasPublicTransfer??!1}var He=require("@mysten/sui/transactions");async function Ht(c,e=!0){c.blockData.transactions.forEach((t,r)=>{})}var N=class{static async adjustTransactionForGas(e,t,r,n){n.setSender(e.senderAddress);let i=B.selectCoinAssetGreaterThanOrEqual(t,r).selectedCoins;if(i.length===0)throw new Error("Insufficient balance");let s=B.calculateTotalBalance(t);if(s-r>1e9)return{fixAmount:r};let o=await e.fullClient.calculationTxGas(n);if(B.selectCoinAssetGreaterThanOrEqual(t,BigInt(o),i.map(u=>u.coinObjectId)).selectedCoins.length===0){let u=BigInt(o)+BigInt(500);if(s-r<u){if(r-=u,r<0)throw new Error("gas Insufficient balance");let p=new He.Transaction;return{fixAmount:r,newTx:p}}}return{fixAmount:r}}static buildCoinForAmount(e,t,r,n,i=!0,s=!1){let o=B.getCoinAssets(n,t);if(r===BigInt(0)&&o.length===0)return N.buildZeroValueCoin(t,e,n,i);let a=B.calculateTotalBalance(o);if(a<r)throw new Error(`The amount(${a}) is Insufficient balance for ${n} , expect ${r} `);return N.buildCoin(e,t,o,r,n,i,s)}static buildCoin(e,t,r,n,i,s=!0,o=!1){if(B.isSuiCoin(i)){if(s){let y=e.splitCoins(e.gas,[e.pure.u64(n)]);return{targetCoin:e.makeMoveVec({elements:[y]}),remainCoins:t,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(n===0n&&r.length>1){let y=B.selectCoinObjectIdGreaterThanOrEqual(r,n);return{targetCoin:e.object(y.objectArray[0]),remainCoins:y.remainCoins,tragetCoinAmount:y.amountArray[0],isMintZeroCoin:!1}}let f=B.selectCoinObjectIdGreaterThanOrEqual(r,n);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(n)]),remainCoins:f.remainCoins,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let a=B.selectCoinObjectIdGreaterThanOrEqual(r,n),u=a.amountArray.reduce((f,w)=>Number(f)+Number(w),0).toString(),p=a.objectArray;if(s)return{targetCoin:e.makeMoveVec({elements:p.map(f=>e.object(f))}),remainCoins:a.remainCoins,tragetCoinAmount:a.amountArray.reduce((f,w)=>Number(f)+Number(w),0).toString(),isMintZeroCoin:!1};let[l,...m]=p,g=e.object(l),b=g,_=a.amountArray.reduce((f,w)=>Number(f)+Number(w),0).toString(),O;return m.length>0&&e.mergeCoins(g,m.map(f=>e.object(f))),o&&Number(u)>Number(n)&&(b=e.splitCoins(g,[e.pure.u64(n)]),_=n.toString(),O=g),{targetCoin:b,remainCoins:a.remainCoins,originalSplitedCoin:O,tragetCoinAmount:_,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,r,n=!0){let i=N.callMintZeroValueCoin(t,r),s;return n?s=t.makeMoveVec({elements:[i]}):s=i,{targetCoin:s,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,r,n,i=!0){let s=B.getCoinAssets(n,t);if(r.amountFirst===BigInt(0))return s.length>0?N.buildCoin(e,[...t],[...s],r.amountFirst,n,i):N.buildZeroValueCoin(t,e,n,i);let o=B.calculateTotalBalance(s);if(o>=r.amountFirst)return N.buildCoin(e,[...t],[...s],r.amountFirst,n,i);if(o<r.amountSecond)throw new Error(`The amount(${o}) is Insufficient balance for ${n} , expect ${r.amountSecond} `);return N.buildCoin(e,[...t],[...s],r.amountSecond,n,i)}static buildCoinTypePair(e,t){let r=[];if(e.length===2){let n=[];n.push(e[0],e[1]),r.push(n)}else{let n=[];n.push(e[0],e[e.length-1]),r.push(n);for(let i=1;i<e.length-1;i+=1){if(t[i-1]===0)continue;let s=[];s.push(e[0],e[i],e[e.length-1]),r.push(s)}}return r}},F=N;De(F,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));var le=1e6,U=1e9,Wt={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Zt={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},X=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?Zt:Wt}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new T.Transaction,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}createAndDepsit({account:e,coin:t,amountToDeposit:r}){let n=new T.Transaction;n.setSenderIfNotSet(e);let i=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),s=(0,T.coinWithBalance)({type:t.coinType,balance:BigInt(r)});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[i,s],typeArguments:[t.coinType]}),n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),i],typeArguments:[]}),n.moveCall({target:"0x2::transfer::public_share_object",arguments:[i],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),n}depositIntoManager({account:e,balanceManager:t,coin:r,amountToDeposit:n,tx:i}){let s=i||new T.Transaction;if(t){s.setSenderIfNotSet(e);let o=(0,T.coinWithBalance)({type:r.coinType,balance:BigInt(n)});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[s.object(t),o],typeArguments:[r.coinType]}),s}return null}withdrawFromManager({account:e,balanceManager:t,coin:r,amountToWithdraw:n,returnAssets:i,txb:s}){let o=s||new T.Transaction,a=o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[o.object(t),o.pure.u64(n)],typeArguments:[r.coinType]});return i?a:(o.transferObjects([a],e),o)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:r=new T.Transaction}){for(let n in t)t[n].forEach(s=>{let o=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[r.object(n),r.pure.u64(s.amount)],typeArguments:[s.coinType]});r.transferObjects([o],e)});return r}async getBalanceManager(e,t=!0){let r=`getBalanceManager_${e}`,n=this.getCache(r,t);if(!t&&n!==void 0)return n;try{let i=new T.Transaction;i.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[i.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),i.pure.address(e)],typeArguments:[]});let a=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i}))?.events?.filter(p=>p.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],u=[];return a.forEach(p=>{u.push({balanceManager:p,cetusBalanceManager:""})}),this.updateCache(r,u,864e5),u||[]}catch(i){throw i instanceof Error?i:new Error(String(i))}}withdrawSettledAmounts({poolInfo:e,balanceManager:t},r=new T.Transaction){let n=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[r.object(t)]});return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[r.object(e.address),r.object(t),n],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}async getManagerBalance({account:e,balanceManager:t,coins:r}){try{let n=new T.Transaction;r.forEach(o=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[n.object(t)],typeArguments:[o.coinType]})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n}),s={};return i.results?.forEach((o,a)=>{let u=r[a],p=o.returnValues[0][0],l=h.bcs.U64.parse(new Uint8Array(p)),m=d(l),g=m.eq(0)?"0":m.div(Math.pow(10,u.decimals)).toString();s[u.coinType]={adjusted_balance:g,balance:m.toString()}}),s}catch(n){throw n instanceof Error?n:new Error(String(n))}}async getAccountAllManagerBalance({account:e,coins:t}){try{let r=new T.Transaction,n=await this.getBalanceManager(e,!0);if(!Array.isArray(n)||n.length===0)return{};n.forEach(o=>{t.forEach(a=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[r.object(o.balanceManager)],typeArguments:[a.coinType]})})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}),s={};return n.forEach((o,a)=>{let u={},p=a*t.length;t.forEach((l,m)=>{let g=p+m,b=i.results?.[g];if(b){let _=b.returnValues[0][0],O=h.bcs.U64.parse(new Uint8Array(_)),f=d(O),w=f.eq(0)?"0":f.div(Math.pow(10,l.decimals)).toString();u[l.coinType]={adjusted_balance:w,balance:f.toString()}}}),s[o.balanceManager]=u}),s}catch(r){throw r instanceof Error?r:new Error(String(r))}}async getMarketPrice(e){try{let t=new T.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],i=Number(h.bcs.U64.parse(new Uint8Array(n))),s=Math.pow(10,e.baseCoin.decimals).toString(),o=Math.pow(10,e.quoteCoin.decimals).toString();return d(i).mul(s).div(o).div(U).toString()}catch(t){return Le("getMarketPrice ~ error:",t),"0"}}async getPools(e=!1){let t="Deepbook_getPools",r=this.getCache(t,e);if(r!==void 0)return r;let n=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),i=/<([^>]+)>/,s=[];return n?.data?.forEach(o=>{let a=o?.parsedJson,u=o.type.match(i);if(u){let l=u[1].split(", ");s.push({...a,baseCoinType:l[0],quoteCoinType:l[1]})}}),this.updateCache(t,s,864e5),s}async getQuoteQuantityOut(e,t,r){let n=new T.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:n}),s=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),o=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),a=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{baseQuantityDisplay:d(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:d(s).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:d(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:d(a).div(le).toString(),baseQuantity:t,baseOut:s,quoteOut:o,deepRequired:a}}async getBaseQuantityOut(e,t,r){let n=new T.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:n}),s=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),o=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),a=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{quoteQuantityDisplay:d(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:d(s).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:d(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:d(a).div(le).toString(),quoteQuantity:t,baseOut:s,quoteOut:o,deepRequired:a}}async getQuantityOut(e,t,r,n){let i=new T.Transaction;i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[i.object(e.address),i.pure.u64(t),i.pure.u64(r),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:i}),o=Number(h.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),a=Number(h.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]))),u=Number(h.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[2][0])));return{baseQuantityDisplay:d(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:d(r).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:d(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:d(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:d(u).div(le).toString(),baseQuantity:t,quoteQuantity:r,baseOut:o,quoteOut:a,deepRequired:u}}async getReferencePool(e){let t=await this.getPools(),r=e.baseCoin.coinType,n=e.quoteCoin.coinType,i=this._deep.coinType;for(let s=0;s<t.length;s++){let o=t[s];if(o.address===e.address)continue;let a=[o.baseCoinType,o.quoteCoinType];if(o.baseCoinType===i&&(a.includes(r)||a.includes(n)))return o}return null}async updateDeepPrice(e,t){let r=await this.getReferencePool(e);return r?(t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::add_deep_price_point`,arguments:[t.object(e.address),t.object(r.pool_id),t.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType,r.baseCoinType,r.quoteCoinType]}),t):null}async estimatedMaxFee(e,t,r,n,i,s,o){let a=this.deepCoin;try{let{taker_fee:u,maker_fee:p}=e,l=d(u).div(U).toString(),m=d(p).div(U).toString(),g=await this.getMarketPrice(e),b=s?r:g!=="0"?g:o;if(b==="0")throw new Error("Cannot get market price");let _=Math.pow(10,e.baseCoin.decimals).toString(),O=Math.pow(10,e.quoteCoin.decimals).toString(),f=d(b).div(_).mul(O).mul(U).toString();if(n){let A=await this.getMarketPrice(e),k=d(s?r:A!=="0"?A:o).div(_).mul(O).mul(U).toString(),M=await this.getOrderDeepPrice(e);if(!M)throw new Error("Cannot get deep price");let P=ue(k,r),D=d(t).mul(d(l)).mul(d(M.deep_per_asset)).div(d(U)),q=d(t).mul(d(m)).mul(d(M.deep_per_asset)).div(d(U));M.asset_is_base||(D=D.mul(P).div(d(U)),q=q.mul(P).div(d(U)));let I=D.ceil().toString(),ne=q.ceil().toString();return{takerFee:I,makerFee:ne,takerFeeDisplay:G(I,a.decimals).toString(),makerFeeDisplay:G(ne,a.decimals).toString(),feeType:a.coinType}}if(i){let A=ue(f,r),E=d(t).mul(A).mul(d(l).mul(1.25)).div(d(U)).ceil().toFixed(0),k=d(t).mul(A).mul(d(m).mul(1.25)).div(d(U)).ceil().toFixed(0);return{takerFee:E,makerFee:k,takerFeeDisplay:G(E,e.quoteCoin.decimals).toString(),makerFeeDisplay:G(k,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}let w=d(t).mul(d(l).mul(1.25)).ceil().toFixed(0),y=d(t).mul(d(m).mul(1.25)).ceil().toFixed(0);return{takerFee:w,makerFee:y,takerFeeDisplay:G(w,e.baseCoin.decimals).toString(),makerFeeDisplay:G(y,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}catch(u){throw u instanceof Error?u:new Error(String(u))}}async getOrderDeepPrice(e,t=!0){let r=`getOrderDeepPrice_${e.address}}`,n=this.getCache(r);if(n!==void 0)return n;try{let i=new T.Transaction,s=!1;t&&e?.baseCoin?.coinType!==this._deep.coinType&&e?.quoteCoin?.coinType!==this._deep.coinType&&await this.updateDeepPrice(e,i)&&(s=!0),i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[i.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:i}),a=s?o.results[1]?.returnValues[0]?.[0]:o.results[0]?.returnValues[0]?.[0],u=this.parseOrderDeepPrice(new Uint8Array(a));return this.updateCache(r,u,6e4),u}catch{return await Ce(2e3),this.getOrderDeepPrice(e,!1)}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),r=t.getUint8(0)!==0,n=Number(t.getBigUint64(1,!0));return{asset_is_base:r,deep_per_asset:n}}getCoinAssets(e,t,r,n){return F.buildCoinForAmount(n,r,BigInt(d(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,r,n,i,s,o){let a=this.deepCoin;if(!o)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};try{let u=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];n&&u.push(a);let p=await this.getManagerBalance({account:i,balanceManager:o,coins:u}),l=p?.[t]?.balance||"0",m=p?.[r]?.balance||"0",g=s&&p?.[a.coinType]?.balance||"0";return{baseManagerBlance:l,quoteManagerBlance:m,feeManaerBalance:g}}catch(u){throw u instanceof Error?u:new Error(String(u))}}getFeeAsset(e,t,r,n,i,s,o,a,u,p){let l=d(e).gt(0)&&u,m="0";if(!l)return{feeAsset:this.getEmptyCoin(p,t),haveDepositFee:"0"};if(s||o){let g=d(i).sub(s?n:r);m=g.lte(0)?e:g.sub(e).lt(0)?g.sub(e).toString():"0"}else m=d(i).sub(e).lt("0")?d(i).sub(e).abs().toString():"0";return{feeAsset:d(m).gt("0")?this.getCoinAssets(t,m,a,p):this.getEmptyCoin(p,t),haveDepositFee:m}}async getTransactionRelatedAssets(e,t,r,n,i,s,o,a,u){try{let p=this.deepCoin,l=(0,S.normalizeStructTag)(e.baseCoin.coinType),m=(0,S.normalizeStructTag)(e.quoteCoin.coinType),g=l===p.coinType,b=m===p.coinType,_=!g&&!b,{baseManagerBlance:O,quoteManagerBlance:f,feeManaerBalance:w}=await this.getTransactionRelatedBalance(e,l,m,_,s,o,a);console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:897 ~ DeepbookUtilsModule ~ getTransactionRelatedAssets ~ quoteManagerBlance:",{baseManagerBlance:O,quoteManagerBlance:f});let y,A,E=!1,k=await this._sdk.getOwnerCoinAssets(s);if(i){o||(r=d(r).add(d(n)).toString());let P=d(f).sub(r).toString();d(P).lt(0)?(E=!0,A=this.getCoinAssets(m,P,k,u)):A=this.getEmptyCoin(u,m),y=this.getEmptyCoin(u,l)}else{o||(t=d(t).add(d(n)).toString());let P=d(O).sub(t).toString();d(P).lt(0)?(E=!0,y=this.getCoinAssets(l,P,k,u)):y=this.getEmptyCoin(u,l),A=this.getEmptyCoin(u,m)}let M=this.getFeeAsset(n,p.coinType,t,r,w,b,g,k,o,u);return{baseAsset:y,quoteAsset:A,feeAsset:M,haveDeposit:E}}catch(p){throw p instanceof Error?p:new Error(String(p))}}async getMarketTransactionRelatedAssets(e,t,r,n,i,s,o,a,u,p){try{let l=this.deepCoin,m=(0,S.normalizeStructTag)(e.baseCoin.coinType),g=(0,S.normalizeStructTag)(e.quoteCoin.coinType),b=m===l.coinType,_=g===l.coinType,O=!b&&!_,f=await this.getTransactionRelatedBalance(e,m,g,O,s,o,a),{feeManaerBalance:w}=f,y=d(f.baseManagerBlance).add(d(p?.base||"0")).toString(),A=d(f.quoteManagerBlance).add(d(p?.quote||"0")).toString(),E=await this._sdk.getOwnerCoinAssets(s),k;o&&d(w).lt(n)?k=this.getCoinAssets(l.coinType,d(n).sub(w).toString(),E,u):k=this.getEmptyCoin(u,l.coinType);let M,P;if(i){o||(r=d(r).add(d(n)).toString());let D=d(A).sub(r).toString();if(d(D).lt(0)){let q;d(A).gt(0)&&(q=this.withdrawFromManager({account:s,balanceManager:a,coin:e.quoteCoin,amountToWithdraw:A,returnAssets:!0,txb:u}));let I=this.getCoinAssets(g,D,E,u);q&&u.mergeCoins(I,[q]),P=I}else P=this.withdrawFromManager({account:s,balanceManager:a,coin:e.quoteCoin,amountToWithdraw:r,returnAssets:!0,txb:u});M=this.getEmptyCoin(u,m)}else{o||(t=d(t).add(d(n)).toString());let D=d(y).sub(t).toString();if(d(D).lt(0)){let q;d(y).gt(0)&&(q=this.withdrawFromManager({account:s,balanceManager:a,coin:e.baseCoin,amountToWithdraw:y,returnAssets:!0,txb:u}));let I=this.getCoinAssets(m,D,E,u);q&&u.mergeCoins(I,[q]),M=I}else M=this.withdrawFromManager({account:s,balanceManager:a,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:u});P=this.getEmptyCoin(u,g)}return{baseAsset:M,quoteAsset:P,feeAsset:k}}catch(l){throw l instanceof Error?l:new Error(String(l))}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:r,orderType:n,isBid:i,maxFee:s,account:o,payWithDeep:a,expirationTimestamp:u=Date.now()+31536e8}){try{let p=this.deepCoin,l=e.address,m=e.baseCoin.decimals,g=e.quoteCoin.decimals,b=e.baseCoin.coinType,_=e.quoteCoin.coinType,O=d(t).mul(10**(g-m+9)).toString(),f=(0,S.normalizeStructTag)(b),w=(0,S.normalizeStructTag)(_),y=new T.Transaction,A,E,k=await this._sdk.getOwnerCoinAssets(o);if(i){let q=d(t).mul(d(r).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();a||(q=d(q).add(d(s)).toString()),E=F.buildCoinForAmount(y,k,BigInt(q),w,!1,!0)?.targetCoin}else{let q=r;a||(q=d(r).abs().add(d(s)).toString()),A=F.buildCoinForAmount(y,k,BigInt(d(q).abs().toString()),f,!1,!0)?.targetCoin}let M=a?d(s).gt(0)?F.buildCoinForAmount(y,k,BigInt(d(s).abs().ceil().toString()),p.coinType,!1,!0).targetCoin:this.getEmptyCoin(y,p.coinType):this.getEmptyCoin(y,p.coinType),P=y.moveCall({typeArguments:[i?b:_],target:"0x2::coin::zero",arguments:[]}),D=[y.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),y.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),y.object(l),i?P:A,i?E:P,M,y.pure.u8(n),y.pure.u8(0),y.pure.u64(O),y.pure.u64(r),y.pure.bool(i),y.pure.bool(!1),y.pure.u64(u),y.object(S.SUI_CLOCK_OBJECT_ID)];return y.moveCall({typeArguments:[f,w],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:D}),y}catch(p){throw p instanceof Error?p:new Error(String(p))}}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:r,maxFee:n,account:i,payWithDeep:s,slippage:o=.01}){try{let a=e.address,u=e.baseCoin.coinType,p=e.quoteCoin.coinType,l=(0,S.normalizeStructTag)(u),m=(0,S.normalizeStructTag)(p),g=new T.Transaction,b,_,O=t,f,w=await this.getOrderBook(e,"all",6);if(r){let k=w?.ask?.[0]?.price||"0",M=d(k).mul(d(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();f=d(M).plus(d(M).mul(o)).ceil().toString()}else{let k=await w?.bid?.[0]?.price||"0",M=d(k).mul(d(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();f=d(M).minus(d(M).mul(o)).floor().toString()}let y=await this._sdk.getOwnerCoinAssets(i);r?(s||(f=d(f).add(d(n)).toString()),_=this.getCoinAssets(m,f,y,g),b=this.getEmptyCoin(g,l)):(s||(O=d(O).add(d(n)).toString()),_=this.getEmptyCoin(g,m),b=this.getCoinAssets(l,O,y,g));let A=s?d(n).gt(0)?F.buildCoinForAmount(g,y,BigInt(d(n).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(g,this.deepCoin.coinType):this.getEmptyCoin(g,this.deepCoin.coinType),E=[g.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),g.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),g.object(a),b,_,A,g.pure.u8(0),g.pure.u64(t),g.pure.bool(r),g.pure.bool(s),g.pure.u64(f),g.object(S.SUI_CLOCK_OBJECT_ID)];return g.moveCall({typeArguments:[l,m],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:E}),g}catch(a){throw a instanceof Error?a:new Error(String(a))}}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:r,quantity:n,isBid:i,orderType:s,maxFee:o,account:a,payWithDeep:u,expirationTimestamp:p=Date.now()+31536e8}){try{let l=this.deepCoin,m=d(r).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),g=t.baseCoin.coinType,b=t.quoteCoin.coinType,_=new T.Transaction,O=i?d(r).mul(d(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",f=i?"0":n,{baseAsset:w,quoteAsset:y,feeAsset:A,haveDeposit:E}=await this.getTransactionRelatedAssets(t,f,O,o,i,a,u,e,_);if(E){let P=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(t.address),_.object(e),w,y,A.feeAsset,_.pure.u8(s),_.pure.u8(0),_.pure.u64(m),_.pure.u64(n),_.pure.bool(i),_.pure.bool(u),_.pure.u64(p),_.object(S.SUI_CLOCK_OBJECT_ID)];return _.moveCall({typeArguments:[g,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:P}),_}let k=new T.Transaction;d(A.haveDepositFee).gt(0)&&this.depositIntoManager({account:a,balanceManager:e,coin:l,amountToDeposit:A.haveDepositFee,tx:k});let M=[k.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),k.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),k.object(t.address),k.object(e),k.pure.u8(s),k.pure.u8(0),k.pure.u64(m),k.pure.u64(n),k.pure.bool(i),k.pure.bool(u),k.pure.u64(p),k.object(S.SUI_CLOCK_OBJECT_ID)];return k.moveCall({typeArguments:[g,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:M}),k}catch(l){throw l instanceof Error?l:new Error(String(l))}}modifyOrder({balanceManager:e,poolInfo:t,orderId:r,newOrderQuantity:n}){let i=new T.Transaction;return i.moveCall({typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::modify_order`,arguments:[i.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),i.object(e),i.object(t.address),i.pure.u128(r),i.pure.u64(n),i.object(S.SUI_CLOCK_OBJECT_ID)]}),i}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:r}=e,n=new T.Transaction,i=await this.getMarketPrice(e),s=d(i).gt(0)?i:Math.pow(10,-1),o=Math.pow(10,6),a=d(s).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),u=d(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(a),n.pure.u64(u),n.pure.bool(!1),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType]});let p=this._sdk.sdkOptions.simulationAccount.address,l=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:n}),m=[],g=l.results[0].returnValues[0][0],b=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(g)),_=l.results[0].returnValues[1][0],O=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(_));return b.forEach((f,w)=>{let y=d(f).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),A=d(O[w]).div(Math.pow(10,t.decimals)).toString();m.push({price:y,quantity:A})}),m?.[0]?.price||0}catch{return 0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:r}=e,n=new T.Transaction,i=await this.getMarketPrice(e),s=d(i).gt(0)?d(i).div(3).toNumber():Math.pow(10,-6),o=d(i).gt(0)?i:Math.pow(10,6),a=d(s).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),u=d(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(L(a,0)),n.pure.u64(L(u,0)),n.pure.bool(!0),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType]});let p=this._sdk.sdkOptions.simulationAccount.address,l=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:n}),m=[],g=l.results[0].returnValues[0][0],b=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(g)),_=l.results[0].returnValues[1][0],O=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(_));return b.forEach((f,w)=>{let y=d(f).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),A=d(O[w]).div(Math.pow(10,t.decimals)).toString();m.push({price:y,quantity:A})}),m?.[0]?.price||0}catch{return 0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:r,quoteCoin:n}=e,i=new T.Transaction,s=await this.getMarketPrice(e),o,a;t?(o=d(s).gt(0)?d(s).div(3).toNumber():Math.pow(10,-6),a=d(s).gt(0)?s:Math.pow(10,6)):(o=d(s).gt(0)?s:Math.pow(10,-1),a=d(s).gt(0)?d(s).mul(3).toNumber():Math.pow(10,6));let u=d(o).mul(Math.pow(10,9+n.decimals-r.decimals)).toString(),p=d(a).mul(Math.pow(10,9+n.decimals-r.decimals)).toString();i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(L(u,0)),i.pure.u64(L(p,0)),i.pure.bool(t),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]});let l=this._sdk.sdkOptions.simulationAccount.address,m=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:i}),g=[],b=m.results[0].returnValues[0][0],_=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(b)),O=m.results[0].returnValues[1][0],f=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(O));return _.forEach((w,y)=>{let A=d(w).div(Math.pow(10,9+n.decimals-r.decimals)).toString(),E=d(f[y]).div(Math.pow(10,r.decimals)).toString();g.push({price:A,quantity:E})}),g?.[0]?.price||0}catch{return 0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:r,quoteQuantity:n,isBid:i,maxFee:s,account:o,payWithDeep:a,slippage:u=.01,settled_balances:p={base:"0",quote:"0"}}){try{let l=(0,S.normalizeStructTag)(t.baseCoin.coinType),m=(0,S.normalizeStructTag)(t.quoteCoin.coinType),g=new T.Transaction;p&&(d(p.base).gt(0)||d(p.quote).gt(0))&&this.withdrawSettledAmounts({poolInfo:t,balanceManager:e},g);let{baseAsset:b,quoteAsset:_,feeAsset:O}=await this.getMarketTransactionRelatedAssets(t,r,n,s,i,o,a,e,g,p),f=await this.getOrderBook(t,"all",6);if(i){let A=f?.ask?.[0]?.price||"0",E=d(A).mul(d(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=d(E).plus(d(E).mul(u)).ceil().toString()}else{let A=await f?.bid?.[0]?.price||"0",E=d(A).mul(d(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=d(E).minus(d(E).mul(u)).floor().toString()}let w=n,y=[g.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),g.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),g.object(t.address),g.object(e),b,_,O,g.pure.u8(0),g.pure.u64(r),g.pure.bool(i),g.pure.bool(a),g.pure.u64(w),g.object(S.SUI_CLOCK_OBJECT_ID)];return g.setSenderIfNotSet(o),g.moveCall({typeArguments:[l,m],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:y}),g}catch(l){throw l instanceof Error?l:new Error(String(l))}}async getOrderInfoList(e,t){try{let r=new T.Transaction;e.forEach(u=>{let p=u?.pool,l=u?.orderId;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[r.object(p.pool_id),r.pure.u128(BigInt(l))],typeArguments:[p.baseCoinType,p.quoteCoinType]})});let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:r}),i=h.bcs.struct("ID",{bytes:h.bcs.Address}),s=h.bcs.struct("OrderDeepPrice",{asset_is_base:h.bcs.bool(),deep_per_asset:h.bcs.u64()}),o=h.bcs.struct("Order",{balance_manager_id:i,order_id:h.bcs.u128(),client_order_id:h.bcs.u64(),quantity:h.bcs.u64(),filled_quantity:h.bcs.u64(),fee_is_deep:h.bcs.bool(),order_deep_price:s,epoch:h.bcs.u64(),status:h.bcs.u8(),expire_timestamp:h.bcs.u64()}),a=[];return n?.results?.forEach(u=>{let p=u.returnValues[0][0],l=o.parse(new Uint8Array(p));a.push(l)}),a}catch{return[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),r=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),n=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:r,orderId:n}}async getOpenOrder(e,t,r,n,i=!1,s=new T.Transaction){let o;if(n)o=n;else{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[s.object(e.address),i?r:s.object(r)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:s})).results[i?1:0].returnValues[0][0];o=h.bcs.struct("VecSet",{constants:h.bcs.vector(h.bcs.U128)}).parse(new Uint8Array(m)).constants}let a=o.map(l=>({pool:{pool_id:e.address,baseCoinType:e.baseCoin.coinType,quoteCoinType:e.quoteCoin.coinType},orderId:l})),u=await this.getOrderInfoList(a,t)||[],p=[];return u.forEach(l=>{let m=this.decodeOrderId(BigInt(l.order_id));p.push({...l,price:m.price,isBid:m.isBid,pool:e})}),p}async getAllMarketsOpenOrders(e,t){try{let r=await this.getPools(),n=new T.Transaction;r.forEach(l=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[n.object(l.pool_id),n.object(t)],typeArguments:[l.baseCoinType,l.quoteCoinType]})});let s=(await this._sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n})).results?.map(l=>l.returnValues?.[0]?.[0])||[],o=h.bcs.struct("VecSet",{constants:h.bcs.vector(h.bcs.U128)}),a=[];s.forEach((l,m)=>{let g=o.parse(new Uint8Array(l)).constants;g.length>0&&g.forEach(b=>{a.push({pool:r[m],orderId:b})})});let u=await this.getOrderInfoList(a,e)||[],p=[];return a.forEach((l,m)=>{let g=this.decodeOrderId(BigInt(l.orderId)),b=u.find(_=>_.order_id===l.orderId)||{};p.push({...l,...b,price:g.price,isBid:g.isBid})}),p}catch{return[]}}cancelOrders(e,t,r=new T.Transaction){return e.forEach(n=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),r.object(t),r.object(n.poolInfo.address),r.pure.u128(n.orderId),r.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.poolInfo.baseCoin.coinType,n.poolInfo.quoteCoin.coinType]})}),r}async getDeepbookOrderBook(e,t,r,n,i,s){let o=this._sdk.fullClient,u=await new We.DeepBookClient({client:o,address:i,env:"testnet",balanceManagers:{test1:{address:s,tradeCap:""}}}).getLevel2Range(e,t,r,n)}processOrderBookData(e,t,r,n){let i=e.returnValues[0][0],s=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(i)),o=e.returnValues[1][0],a=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(o)),u={};return s.forEach((l,m)=>{let g=d(l).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),b=d(a[m]).div(Math.pow(10,t.decimals)).toString();u[g]?u[g]={price:g,quantity:d(u[g].quantity).add(b).toString()}:u[g]={price:g,quantity:b}}),Object.values(u)}getLevel2RangeTx(e,t,r,n,i=new T.Transaction){let{baseCoin:s,quoteCoin:o}=e,a=L(d(r).mul(Math.pow(10,9+o.decimals-s.decimals)).toString(),0),u=L(d(n).mul(Math.pow(10,9+o.decimals-s.decimals)).toString(),0);return i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(a),i.pure.u64(u),i.pure.bool(t),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,o.coinType]}),i}async fetchOrderBook(e,t,r,n,i,s){let o=new T.Transaction,{baseCoin:a,quoteCoin:u}=e;try{if(t==="bid"||t==="all"){let b=n,_=r==="0"?i:r;o=this.getLevel2RangeTx(e,!0,b,_,o)}if(t==="ask"||t==="all"){let b=r==="0"?n:r,_=i;o=this.getLevel2RangeTx(e,!1,b,_,o)}let p=this._sdk.sdkOptions.simulationAccount.address,l=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:o}),m=[];(t==="bid"||t==="all")&&(m=l.results?.[0]?this.processOrderBookData(l.results[0],a,u,s):[]);let g=[];if(t==="ask"||t==="all"){let b=t==="ask"?0:1;g=l.results?.[b]?this.processOrderBookData(l.results[b],a,u,s):[]}return{bid:m.sort((b,_)=>_.price-b.price),ask:g.sort((b,_)=>b.price-_.price)}}catch{let l=this._sdk.sdkOptions.simulationAccount.address,m=[],g=[];try{let b=this.getLevel2RangeTx(e,!0,n,r),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:b});m=_.results?.[0]?this.processOrderBookData(_.results[0],a,u,s):[]}catch{m=[]}try{let b=this.getLevel2RangeTx(e,!1,n,r),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:b});g=_.results?.[0]?this.processOrderBookData(_.results[0],a,u,s):[]}catch{g=[]}return{bid:m,ask:g}}}async getOrderBook(e,t,r){let n={bid:[],ask:[]};try{let i=await this.getMarketPrice(e),s=t,o=Math.pow(10,-r),a=Math.pow(10,r),u=await this.fetchOrderBook(e,s,i,o,a,r);return{bid:u?.bid,ask:u?.ask}}catch{return n}}async getOrderBookOrigin(e,t){try{let r=new T.Transaction,n=await this.getMarketPrice(e),{baseCoin:i,quoteCoin:s}=e;if(t==="bid"||t==="all"){let l=Math.pow(10,-6),m=n,g=d(l).mul(Math.pow(10,9+s.decimals-i.decimals)).toString(),b=d(m).mul(Math.pow(10,9+s.decimals-i.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(g),r.pure.u64(b),r.pure.bool(!0),r.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,s.coinType]})}if(t==="ask"||t==="all"){let l=n,m=Math.pow(10,6),g=d(l).mul(Math.pow(10,9+s.decimals-i.decimals)).toString(),b=d(m).mul(Math.pow(10,9+s.decimals-i.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(g),r.pure.u64(b),r.pure.bool(!1),r.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,s.coinType]})}let o=this._sdk.sdkOptions.simulationAccount.address,a=await this._sdk.fullClient.devInspectTransactionBlock({sender:o,transactionBlock:r}),u=[];if(t==="bid"||t==="all"){let l=a.results[0]?.returnValues[0]?.[0],m=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(l)),g=a.results[0]?.returnValues[1]?.[0],b=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(g));m.forEach((_,O)=>{let f=d(_).div(Math.pow(10,9+s.decimals-i.decimals)).toString(),w=d(b[O]).div(Math.pow(10,i.decimals)).toString();u.push({price:f,quantity:w})})}let p=[];if(t==="ask"||t==="all"){let l=t==="ask"?0:1,m=a.results[l]?.returnValues[0]?.[0],g=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(m)),b=a.results[l]?.returnValues[1]?.[0],_=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(b));g.forEach((O,f)=>{let w=d(O).div(Math.pow(10,9+s.decimals-i.decimals)).toString(),y=d(_[f]).div(Math.pow(10,i.decimals)).toString();p.push({price:w,quantity:y})})}return{bid:u,ask:p}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((n,i)=>[(0,S.normalizeStructTag)(n.coinType),n]))}async getAccount(e,t,r=new T.Transaction){for(let o=0;o<t.length;o++){let a=t[o];r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[r.object(a.address),typeof e=="string"?r.object(e):e],typeArguments:[a.baseCoin.coinType,a.quoteCoin.coinType]})}let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.senderAddress,transactionBlock:r}),i;if(n?.events.length===0)return null;let s=[];return n?.events?.forEach((o,a)=>{i=o?.parsedJson;let u=i.account.open_orders.contents,p=i.account.owed_balances,l=i.account.settled_balances,m=i.account.unclaimed_rebates,g=i.account.taker_volume;s.push({balance_manager_id:e,open_orders:u,owed_balances:p,settled_balances:l,unclaimed_rebates:m,taker_volume:g,poolInfo:t[a]})}),s}async getSuiTransactionResponse(e,t=!1){let r=`${e}_getSuiTransactionResponse`,n=this.getCache(r,t);if(n!==void 0)return n;let i;try{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(r,i,864e5),i}transformExtensions(e,t,r=!0){let n=[];for(let i of t){let{key:s}=i.fields,{value:o}=i.fields;if(s==="labels")try{o=JSON.parse(decodeURIComponent(Ze.Base64.decode(o)))}catch{}r&&(e[s]=o),n.push({key:s,value:o})}delete e.extension_fields,r||(e.extensions=n)}async getCoinConfigs(e=!1,t=!0){let r=this.sdk.sdkOptions.coinlist.handle,n=`${r}_getCoinConfigs`,i=this.getCache(n,e);if(i)return i;let o=(await this._sdk.fullClient.getDynamicFieldsByPage(r)).data.map(p=>p.objectId),a=await this._sdk.fullClient.batchGetObjects(o,{showContent:!0}),u=[];return a.forEach(p=>{let l=this.buildCoinConfig(p,t);this.updateCache(`${r}_${l.address}_getCoinConfig`,l,864e5),u.push({...l})}),this.updateCache(n,u,864e5),u}buildCoinConfig(e,t=!0){let r=Oe(e);r=r.value.fields;let n={...r};return n.id=Ae(e),n.address=R(r.coin_type.fields.name).full_address,r.pyth_id&&(n.pyth_id=(0,S.normalizeSuiObjectId)(r.pyth_id)),this.transformExtensions(n,r.extension_fields.fields.contents,t),delete n.coin_type,n}updateCache(e,t,r=3e5){let n=this._cache[e];n?(n.overdueTime=z(r),n.value=t):n=new K(t,z(r)),this._cache[e]=n}getCache(e,t=!1){let r=this._cache[e],n=r?.isValid();if(!t&&n)return r.value;n||delete this._cache[e]}async createPermissionlessPool({tickSize:e,lotSize:t,minSize:r,baseCoinType:n,quoteCoinType:i}){let s=new T.Transaction,o=B.buildCoinWithBalance(BigInt(500*10**6),"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",s);s.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::create_permissionless_pool`,typeArguments:[n,i],arguments:[s.object(this.sdk.sdkOptions.deepbook.registry_id),s.pure.u64(e),s.pure.u64(t),s.pure.u64(r),o]});try{let a=await this._sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:s});if(a.effects.status.status==="success")return s;if(a.effects.status.status==="failure"&&a.effects.status.error&&a.effects.status.error.indexOf('Some("register_pool") }, 1)')>-1)throw new Error("Pool already exists")}catch(a){throw a instanceof Error?a:new Error(String(a))}return s}};var Be=require("@cetusprotocol/common-sdk"),j=require("@mysten/sui/bcs"),C=require("@mysten/sui/transactions"),v=require("@mysten/sui/utils");var Jt=({totalAssetsValue:c,totalDebtValue:e})=>d(e).eq(0)||d(c).eq(0)?"0":d(c).div(d(e)).toString(),Se=c=>{let{base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:n,user_liquidation_reward:i}=c.value.fields,{liquidation_risk_ratio:s,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:a,target_liquidation_risk_ratio:u}=c.value.fields.risk_ratios.fields;return{id:c.id.id,name:c.name,base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:n,user_liquidation_reward:i,liquidation_risk_ratio:s,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:a,target_liquidation_risk_ratio:u}},je=(c,e)=>{let{deposit_coin_type:t}=e,r=c.id.id,{max_utilization_rate:n,min_borrow:i,protocol_spread:s,supply_cap:o}=c.config.fields.margin_pool_config.fields,{maintainer_fees:a,protocol_fees:u}=c.protocol_fees.fields,{total_supply:p,total_borrow:l}=c.state.fields,m=d(o).sub(p).toString();return{deposit_coin_type:t,id:r,supply_cap:o,total_supply:p,total_borrow:l,available_supply:m,max_utilization_rate:n,min_borrow:i,protocol_spread:s,maintainer_fees:a,protocol_fees:u}};var ge=require("@pythnetwork/pyth-sui-js");var Ee=10n;function Yt(c,e){if(!Ee)throw new Error("oraclePriceMultiplierDecimal is required");if(c===0n)throw new Error("Invalid oracle price");if(e<0n){let t=10n**(Ee- -e);return c*t}return c/10n**(e+Ee)}var Z=class{_sdk;connection;suiPythClient;hasChangeConnection=!1;_cache={};constructor(e){this._sdk=e,this.connection=new ge.SuiPriceServiceConnection(this.sdk.sdkOptions.pythUrl),this.suiPythClient=new ge.SuiPythClient(this._sdk.fullClient,this._sdk.sdkOptions.margin_utils.pyth_state_id,this._sdk.sdkOptions.margin_utils.wormhole_state_id)}get sdk(){return this._sdk}async updatePythPriceIDs(e,t){let r=null,n=null;try{r=await this.connection.getPriceFeedsUpdateData(e)}catch(o){n=o}if(r==null)throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes. Detailed error: ${n?.message}`);let i=[];try{i=await this.suiPythClient.updatePriceFeeds(t,r,e)}catch(o){throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes in the pythUrls parameter when initializing AggregatorClient, for example: new AggregatorClient({ pythUrls: ["https://your-pyth-node-url"] }). Detailed error: ${o}`)}let s=new Map;for(let o=0;o<e.length;o++)s.set(e[o],i[o]);return s}priceCheck(e,t=60){let r=Math.floor(Date.now()/1e3);if(!(Math.abs(r-e.last_update_time)>t))return e}async getLatestPrice(e,t=!1){let r={},n=[];if(t?e.forEach(o=>{let a=this._sdk.getCache(`getLatestPrice_${o.coinType}`);a&&this.priceCheck(a,60)?r[o.coinType]=a:n.push(o.coinType)}):n=e.map(o=>o.coinType),n.length===0)return r;let i=e.map(o=>o.feed);return(await this.connection.getLatestPriceUpdates(i))?.parsed?.forEach((o,a)=>{let u=o.price;if(u){let{price:p,expo:l}=u,m=d(p).mul(d(10).pow(d(l))).toString(),b={coin_type:e[a].coinType,price:m,oracle_price:0n,last_update_time:u.publish_time};b.oracle_price=Yt(BigInt(p),BigInt(l)),r[n[a]]=b,this._sdk.updateCache(`getLatestPrice_${b.coin_type}`,b)}}),r}};var ee=class{_sdk;pythPrice;_deep;_cache={};constructor(e){if(!e)throw new Error("SDK instance is required");this._sdk=e,this.pythPrice=new Z(e),this._deep=e.sdkOptions.network==="mainnet"?xe:Ne}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareMarginManager(e,t=new C.Transaction){if(!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");if(!e.baseCoin?.coinType||!e.quoteCoin?.coinType)throw new Error("Base and quote coin types are required");let{baseCoin:r,quoteCoin:n}=e;try{let{margin_manager:i,initializer:s}=this.createMarginManager(e,t);return this.shareMarginManager({marginManager:i,initializer:s,baseCoin:r,quoteCoin:n},t),{tx:t,margin_manager:i,initializer:s}}catch(i){throw new Error(`Failed to create and share margin manager: ${i instanceof Error?i.message:String(i)}`)}}createMarginManager(e,t=new C.Transaction){if(!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");let{id:r,baseCoin:n,quoteCoin:i}=e;try{let[s,o]=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::create_margin_manager`,arguments:[t.object(this.sdk.sdkOptions.margin_utils.versioned_id),t.object(r),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),t.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.coinType,i.coinType]});return{tx:t,margin_manager:s,initializer:o}}catch(s){throw new Error(`Failed to create margin manager: ${s instanceof Error?s.message:String(s)}`)}}shareMarginManager({marginManager:e,initializer:t,baseCoin:r,quoteCoin:n},i=new C.Transaction){try{return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::share_margin_manager`,arguments:[e,t],typeArguments:[r.coinType,n.coinType]}),i}catch(s){throw new Error(`Failed to share margin manager: ${s instanceof Error?s.message:String(s)}`)}}async getBalanceManagerByMarginManager(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");let t=`
2
+ query Events($filter: EventFilter) {
3
+ events(filter: $filter) {
4
+ nodes {
5
+ transactionModule { name }
6
+ sender { address }
7
+ contents {
8
+ type { repr }
9
+ bcs
10
+ json
11
+ }
12
+ }
13
+ }
14
+ }
15
+ `,r={filter:{sender:e,type:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::BalanceManagerEvent`}};try{let n=await this.sdk.graphqlClient.query({query:t,variables:r});return n?.data?.events?.nodes?n.data.events.nodes.map(s=>s?.contents?.json):[]}catch(n){throw new Error(`Failed to query balance managers: ${n instanceof Error?n.message:String(n)}`)}}async getMarginManagerByAccount(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");try{return((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::CreateMarginManagerEvent`}))?.data||[]).filter(i=>i.parsedJson?.owner===e).map(i=>i?.parsedJson)}catch(t){throw new Error(`Failed to get margin managers by account: ${t instanceof Error?t.message:String(t)}`)}}async getBaseBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let i=new C.Transaction;try{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[i.object(t)],typeArguments:[r,n]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);return j.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])).toString()}catch(s){throw new Error(`Failed to get base balance: ${s instanceof Error?s.message:String(s)}`)}}async getQuoteBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let i=new C.Transaction;try{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[i.object(t)],typeArguments:[r,n]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);return j.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])).toString()}catch(s){throw new Error(`Failed to get quote balance: ${s instanceof Error?s.message:String(s)}`)}}async getDeepBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let i=new C.Transaction;try{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[i.object(t)],typeArguments:[r,n]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);return j.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])).toString()}catch(s){throw new Error(`Failed to get base balance: ${s instanceof Error?s.message:String(s)}`)}}async getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let i=new C.Transaction;try{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::borrowed_shares`,arguments:[i.object(t)],typeArguments:[r,n]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||s.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);let o=j.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])),a=j.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]));return{baseBorrowedShare:o,quoteBorrowedShare:a}}catch(s){throw new Error(`Failed to get borrowed shares: ${s instanceof Error?s.message:String(s)}`)}}managerState=({account:e,marginManager:t,baseCoin:r,quoteCoin:n,pool:i,baseMarginPool:s,quoteMarginPool:o,decimals:a=6,basePriceFeedObjectId:u,quotePriceFeedObjectId:p})=>l=>{l.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::manager_state`,arguments:[l.object(t),l.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),l.object(u),l.object(p),l.object(i),l.object(s),l.object(o),l.object.clock()],typeArguments:[r.coinType,n.coinType]})};async getManagerState(e,t=new C.Transaction){let{account:r,marginManager:n,baseCoin:i,quoteCoin:s,pool:o,baseMarginPool:a,quoteMarginPool:u,decimals:p=6}=e;if(!r||!n||!o||!a||!u)throw new Error("All required parameters must be provided");if(!i?.feed||!s?.feed)throw new Error("Base and quote coin feeds are required");if(!i.scalar||!s.scalar)throw new Error("Base and quote coin scalars are required");try{let l=await this.pythPrice.updatePythPriceIDs([i.feed,s.feed],t),m=l.get(i.feed),g=l.get(s.feed);if(!m||!g)throw new Error("Failed to get price feed object IDs");t.add(this.managerState({...e,basePriceFeedObjectId:m,quotePriceFeedObjectId:g}));let b=await this.sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:t});if(!b.results||!b.results[0]||!b.results[0].returnValues||b.results[0].returnValues.length<14)throw new Error(`Failed to get margin manager state: ${b.effects?.status?.error||"Unknown error"}`);let _=(0,v.normalizeSuiAddress)(j.bcs.Address.parse(new Uint8Array(b.results[0].returnValues[0][0]))),O=(0,v.normalizeSuiAddress)(j.bcs.Address.parse(new Uint8Array(b.results[0].returnValues[1][0]))),f=Number(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[2][0])))/1e9,w=this.#e(BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[3][0]))),i.scalar,p),y=this.#e(BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[4][0]))),s.scalar,p),A=this.#e(BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[5][0]))),i.scalar,p),E=this.#e(BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[6][0]))),s.scalar,p),k=j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[7][0])),M=Number(j.bcs.u8().parse(new Uint8Array(b.results[0].returnValues[8][0]))),P=j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[9][0])),D=Number(j.bcs.u8().parse(new Uint8Array(b.results[0].returnValues[10][0]))),q=BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[11][0]))),I=BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[12][0]))),ne=BigInt(j.bcs.U64.parse(new Uint8Array(b.results[0].returnValues[13][0])));return{managerId:_,deepbookPoolId:O,riskRatio:f,baseAsset:w,quoteAsset:y,baseDebt:A,quoteDebt:E,basePythPrice:k.toString(),basePythDecimals:M,quotePythPrice:P.toString(),quotePythDecimals:D,currentPrice:q,lowestTriggerAbovePrice:I,highestTriggerBelowPrice:ne}}catch(l){throw new Error(`Failed to get manager state: ${l instanceof Error?l.message:String(l)}`)}}async calculateAssets({account:e,marginManager:t,pool:r,baseCoin:n,quoteCoin:i,decimals:s=6}){if(!e||!t||!r)throw new Error("Account, marginManager, and pool are required");if(!n?.coinType||!i?.coinType)throw new Error("Base and quote coin types are required");let o=new C.Transaction;try{o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::calculate_assets`,arguments:[o.object(t),o.object(r)],typeArguments:[n.coinType,i.coinType]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:o});if(!a.results||!a.results[0]||!a.results[0].returnValues||a.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);let u=a.results[0].returnValues[0][0],p=a.results[0].returnValues[1][0];if(!n.scalar||!i.scalar)throw new Error("Base and quote coin scalars are required");let l=j.bcs.U64.parse(new Uint8Array(u)),m=j.bcs.U64.parse(new Uint8Array(p));return{baseAsset:l.toString(),quoteAsset:m.toString()}}catch(a){throw new Error(`Failed to calculate assets: ${a instanceof Error?a.message:String(a)}`)}}async getBorrowedAmount({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n,baseMarginPool:i,quoteMarginPool:s}){if(!e||!t||!r||!n||!i||!s)throw new Error("All parameters are required");try{let{baseBorrowedShare:o,quoteBorrowedShare:a}=await this.getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}),u=!!d(o).gt(d(a)),p=u?i:s,l=u?o:a,m=new C.Transaction;m.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_pool::borrow_shares_to_amount`,arguments:[m.object(p),m.pure.u64(BigInt(l)),m.object.clock()],typeArguments:[u?r:n]});let g=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:m});if(!g.results||!g.results[0]||!g.results[0].returnValues||!g.results[0].returnValues[0])throw new Error(`Transaction failed: ${g.effects?.status?.error||"Unknown error"}`);let b=j.bcs.U64.parse(new Uint8Array(g.results[0].returnValues[0][0]));return u?{baseBorrowedAmount:b.toString(),quoteBorrowedAmount:"0"}:{baseBorrowedAmount:"0",quoteBorrowedAmount:b.toString()}}catch(o){throw new Error(`Failed to get borrowed amount: ${o instanceof Error?o.message:String(o)}`)}}async deposit({marginManager:e,baseCoin:t,quoteCoin:r,amount:n,depositCoinType:i},s=new C.Transaction){if(!e)throw new Error("Margin manager is required");if(!t?.coinType||!r?.coinType)throw new Error("Base and quote coin types are required");if(!n||BigInt(n)<=0n)throw new Error("Valid deposit amount is required");if(!t.feed||!r.feed)throw new Error("Base and quote coin feeds are required");try{let o=Be.CoinAssist.buildCoinWithBalance(BigInt(n),i,s),a=await this.pythPrice.updatePythPriceIDs([t.feed,r.feed],s),u=a.get(t.feed),p=a.get(r.feed);if(!u||!p)throw new Error("Failed to get price feed object IDs");return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::deposit`,arguments:[s.object(this._sdk.sdkOptions.margin_utils.global_config_id),s.object(this._sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?s.object(e):e,s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(u),s.object(p),o,s.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType,i]}),s}catch(o){throw new Error(`Failed to deposit: ${o instanceof Error?o.message:String(o)}`)}}async withdraw({account:e,marginManager:t,baseMarginPool:r,quoteMarginPool:n,baseCoin:i,quoteCoin:s,pool:o,amount:a,withdrawCoinType:u},p=new C.Transaction){if(!e||!t||!r||!n||!o)throw new Error("All required parameters must be provided");if(!i?.coinType||!s?.coinType)throw new Error("Base and quote coin types are required");if(!a||BigInt(a)<=0n)throw new Error("Valid withdraw amount is required");if(!i.feed||!s.feed)throw new Error("Base and quote coin feeds are required");try{let l=await this.pythPrice.updatePythPriceIDs([i.feed,s.feed],p),m=l.get(i.feed),g=l.get(s.feed);if(!m||!g)throw new Error("Failed to get price feed object IDs");let b=p.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw`,arguments:[p.object(this._sdk.sdkOptions.margin_utils.global_config_id),p.object(this._sdk.sdkOptions.margin_utils.versioned_id),p.object(t),p.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),p.object(r),p.object(n),p.object(m),p.object(g),p.object(o),p.pure.u64(BigInt(a)),p.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,s.coinType,u]});return p.transferObjects([b],e),p}catch(l){throw new Error(`Failed to withdraw: ${l instanceof Error?l.message:String(l)}`)}}async borrowBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:n,pool:i,amount:s},o=new C.Transaction){if(!e||!t||!i)throw new Error("Margin manager, base margin pool, and pool are required");if(!r?.coinType||!n?.coinType)throw new Error("Base and quote coin types are required");if(!s||BigInt(s)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!n.feed)throw new Error("Base and quote coin feeds are required");try{let a=await this.pythPrice.updatePythPriceIDs([r.feed,n.feed],o),u=a.get(r.feed),p=a.get(n.feed);if(!u||!p)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_base`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(u),o.object(p),o.object(i),o.pure.u64(BigInt(s)),o.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),o}catch(a){throw new Error(`Failed to borrow base: ${a instanceof Error?a.message:String(a)}`)}}async borrowQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:n,pool:i,amount:s},o=new C.Transaction){if(!e||!t||!i)throw new Error("Margin manager, quote margin pool, and pool are required");if(!r?.coinType||!n?.coinType)throw new Error("Base and quote coin types are required");if(!s||BigInt(s)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!n.feed)throw new Error("Base and quote coin feeds are required");try{let a=await this.pythPrice.updatePythPriceIDs([r.feed,n.feed],o),u=a.get(r.feed),p=a.get(n.feed);if(!u||!p)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_quote`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?o.object(e):e,o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(u),o.object(p),o.object(i),o.pure.u64(BigInt(s)),o.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),o}catch(a){throw new Error(`Failed to borrow quote: ${a instanceof Error?a.message:String(a)}`)}}async repayBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:n,amount:i},s=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All required parameters (marginManager, baseMarginPool, baseCoin, quoteCoin) are required");if(i&&BigInt(i)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:n,amount:i,depositCoinType:r.coinType};await this.deposit(o,s);try{return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_base`,arguments:[s.object(this._sdk.sdkOptions.margin_utils.global_config_id),s.object(this._sdk.sdkOptions.margin_utils.versioned_id),s.object(e),s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(t),s.object.option({type:"u64",value:i?s.pure.u64(i):null}),s.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),s}catch(a){throw new Error(`Failed to repay base: ${a instanceof Error?a.message:String(a)}`)}}async repayQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:n,amount:i},s=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All required parameters (marginManager, quoteMarginPool, baseCoin, quoteCoin) are required");if(i&&BigInt(i)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:n,amount:i,depositCoinType:n.coinType};await this.deposit(o,s);try{return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_quote`,arguments:[s.object(this._sdk.sdkOptions.margin_utils.global_config_id),s.object(this._sdk.sdkOptions.margin_utils.versioned_id),s.object(e),s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(t),s.object.option({type:"u64",value:i?s.pure.u64(i):null}),s.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),s}catch(a){throw new Error(`Failed to repay quote: ${a instanceof Error?a.message:String(a)}`)}}async repay({marginManager:e,baseMarginPool:t,quoteMarginPool:r,baseCoin:n,quoteCoin:i,isBase:s,amount:o},a=new C.Transaction){try{let u=this.sdk.senderAddress,p,l=o;o||(p=await this.getBorrowedAmount({account:u,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:i?.coinType,baseMarginPool:t,quoteMarginPool:r}),l=s?p.baseBorrowedAmount:p.quoteBorrowedAmount);let m,g={marginManager:e,baseCoin:n,quoteCoin:i,depositCoinType:s?n.coinType:i.coinType};if(s){let b=await this.getBaseBalance({account:u,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:i?.coinType});m=d(l).sub(b).toString()}else{let b=await this.getQuoteBalance({account:u,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:i?.coinType});m=d(l).sub(b).toString()}d(m).gt(0)&&await this.deposit({...g,amount:m},a),a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::${s?"repay_base":"repay_quote"}`,arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(s?t:r),a.object.option({type:"u64",value:o?a.pure.u64(o):null}),a.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.coinType,i.coinType]})}catch{}return a}async placeMarginMarketOrder({marginManager:e,poolInfo:t,selfMatchingOption:r,quantity:n,amountLimit:i,isBid:s,payWithDeep:o},a=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!n||BigInt(W(n,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order quantity is required");if(!i||BigInt(W(i,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order amount limit is required");let{id:u,baseCoin:p,quoteCoin:l}=t;if(p.decimals===void 0||l.decimals===void 0)throw new Error("Base and quote coin decimals are required");try{return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_market_order`,arguments:[a.object(this.sdk.sdkOptions.margin_utils.global_config_id),a.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?a.object(e):e,a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(u),a.pure.u8(r),a.pure.u64(n),a.pure.bool(s),a.pure.bool(o),a.pure.bool(!s),a.pure.u64(i),a.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[p.coinType,l.coinType]}),a}catch(m){throw new Error(`Failed to place market order: ${m instanceof Error?m.message:String(m)}`)}}async placeMarginLimitOrder({marginManager:e,poolInfo:t,orderType:r,selfMatchingOption:n,priceInput:i,quantity:s,isBid:o,payWithDeep:a,expirationTimestamp:u=Date.now()+31536e8},p=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!i||!s)throw new Error("Price and quantity are required");let{id:l,baseCoin:m,quoteCoin:g}=t;if(m.decimals===void 0||g.decimals===void 0)throw new Error("Base and quote coin decimals are required");try{let b=BigInt(d(i).mul(10**(g.decimals-m.decimals+9)).toString()),_=BigInt(W(s,m.decimals));if(b<=0n||_<=0n)throw new Error("Price and quantity must be greater than zero");return p.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_limit_order`,arguments:[p.object(this.sdk.sdkOptions.margin_utils.global_config_id),p.object(this.sdk.sdkOptions.margin_utils.versioned_id),p.object(e),p.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),p.object(l),p.pure.u8(r),p.pure.u8(n),p.pure.u64(b),p.pure.u64(_),p.pure.bool(o),p.pure.bool(a),p.pure.u64(u),p.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[m.coinType,g.coinType]}),p}catch(b){throw new Error(`Failed to place limit order: ${b instanceof Error?b.message:String(b)}`)}}modifyMarginOrder({marginManager:e,poolInfo:t,orderId:r,newQuantity:n},i=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All parameters (marginManager, poolInfo, orderId, newQuantity) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(t.baseCoin.decimals===void 0)throw new Error("Base coin decimals are required");try{let s=BigInt(W(n,t.baseCoin.decimals));if(s<=0n)throw new Error("New quantity must be greater than zero");return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::modify_margin_order`,arguments:[i.object(this.sdk.sdkOptions.margin_utils.global_config_id),i.object(this.sdk.sdkOptions.margin_utils.versioned_id),i.object(e),i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(t.id),i.pure.u128(r),i.pure.u64(s),i.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),i}catch(s){throw new Error(`Failed to modify order: ${s instanceof Error?s.message:String(s)}`)}}cancelMarginOrder({marginManager:e,poolInfo:t,orderId:r},n=new C.Transaction){if(!e||!t||!r)throw new Error("All parameters (marginManager, poolInfo, orderId) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return n.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_margin_order`,arguments:[n.object(this.sdk.sdkOptions.margin_utils.global_config_id),n.object(this.sdk.sdkOptions.margin_utils.versioned_id),n.object(e),n.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),n.object(t.id),n.pure.u128(r),n.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),n}catch(i){throw new Error(`Failed to cancel order: ${i instanceof Error?i.message:String(i)}`)}}cancelAllMarginOrders({marginManager:e,poolInfo:t},r=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_all_margin_orders`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.global_config_id),r.object(this.sdk.sdkOptions.margin_utils.versioned_id),r.object(e),r.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t.id),r.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),r}catch(n){throw new Error(`Failed to cancel all orders: ${n instanceof Error?n.message:String(n)}`)}}placeReduceOnlyLimitOrder({marginManager:e,poolInfo:t,marginPoolId:r,orderType:n,selfMatchingOption:i,priceInput:s,quantity:o,isBid:a,payWithDeep:u,expirationTimestamp:p},l=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return l.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_limit_order`,arguments:[l.object(this.sdk.sdkOptions.margin_utils.global_config_id),l.object(this.sdk.sdkOptions.margin_utils.versioned_id),l.object(e),l.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),l.object(t.id),l.object(r),l.pure.u8(n),l.pure.u8(i),l.pure.u64(s),l.pure.u64(o),l.pure.bool(a),l.pure.bool(u),l.pure.u64(p),l.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,a?t.quoteCoin.coinType:t.baseCoin.coinType]}),l}catch(m){throw new Error(`Failed to place reduce only limit order: ${m instanceof Error?m.message:String(m)}`)}}placeReduceOnlyMarketOrder({marginManager:e,poolInfo:t,marginPoolId:r,selfMatchingOption:n,quantity:i,isBid:s,payWithDeep:o},a=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_market_order`,arguments:[a.object(this.sdk.sdkOptions.margin_utils.global_config_id),a.object(this.sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(t.id),a.object(r),a.pure.u8(n),a.pure.u64(i),a.pure.bool(s),a.pure.bool(o),a.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,s?t.quoteCoin.coinType:t.baseCoin.coinType]}),a}catch(u){throw new Error(`Failed to place reduce only market order: ${u instanceof Error?u.message:String(u)}`)}}async getAccountOpenOrders({poolInfo:e,marginManager:t}){try{let r=new C.Transaction,n=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(t)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getOpenOrder(e,this.sdk.senderAddress,n,void 0,!0,r)}catch(r){throw new Error(`Failed to get account open orders: ${r instanceof Error?r.message:String(r)}`)}}async getAccountAllMarketsOpenOrders(e,t){try{if(!e||!t||t.length===0)throw new Error("Account or pools are required");let r=[];for(let n=0;n<t.length;n++){let i=new C.Transaction,s=t[n];if(s.margin_manager_id){let o=await i.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[i.object(s.margin_manager_id)],typeArguments:[s.baseCoin.coinType,s.quoteCoin.coinType]}),a=await this.sdk.DeepbookUtils.getOpenOrder(s,this.sdk.senderAddress,o,void 0,!0,i);r.push(...a)}}return r}catch(r){throw new Error(`Failed to get account all markets open orders: ${r instanceof Error?r.message:String(r)}`)}}mintSupplierCap(e=new C.Transaction,t){let r=e.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::mint_supplier_cap`,arguments:[e.object(this._sdk.sdkOptions.margin_utils.versioned_id),e.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),e.object(v.SUI_CLOCK_OBJECT_ID)]});return t&&e.transferObjects([r],this.sdk.senderAddress),{tx:e,supplierCap:r}}async querySupplierCap(){try{return((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::SupplierCapCreatedEvent`}))?.data||[]).filter(n=>n.parsedJson?.owner===this.sdk.senderAddress)[0].parsedJson.supplier_cap_id}catch(e){throw new Error(`Failed to get account supplyCap: ${e instanceof Error?e.message:String(e)}`)}}mintSupplierCapAndSupply({marginPool:e,supplyCoinType:t,amount:r}){let n=new C.Transaction,{supplierCap:i}=this.mintSupplierCap(n,!1);return this.supply({marginPool:e,supplierCap:i,supplyCoinType:t,amount:r,tx:n}),n.transferObjects([i],this.sdk.senderAddress),n}supply({marginPool:e,supplierCap:t,supplyCoinType:r,amount:n,tx:i}){let s=i??new C.Transaction;if(!t)throw new Error("Either supplierCap must be provided");let o=Be.CoinAssist.buildCoinWithBalance(BigInt(n),r,s);return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supply`,typeArguments:[r],arguments:[s.object(this._sdk.sdkOptions.margin_utils.global_config_id),s.object(this._sdk.sdkOptions.margin_utils.versioned_id),s.object(e),s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(t),o,s.pure.option("address","0x0"),s.object(v.SUI_CLOCK_OBJECT_ID)]}),s}supplierWithdraw({marginPool:e,withdrawCoinType:t,amount:r,supplierCapId:n,hasSwap:i,withdrawAll:s,tx:o=new C.Transaction}){let a=o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supplier_withdraw`,typeArguments:[t],arguments:[o.object(this._sdk.sdkOptions.margin_utils.global_config_id),o.object(this._sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(n),o.object.option({type:"u64",value:s?null:o.pure.u64(r)}),o.object(v.SUI_CLOCK_OBJECT_ID)]});return i?a:(o.transferObjects([a],this.sdk.senderAddress),o)}withdrawReferralFees({marginPool:e}){let t=new C.Transaction,r=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw_referral_fees`,arguments:[t.object(this._sdk.sdkOptions.margin_utils.versioned_id),t.object(e),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object.option({type:"0x1",value:null}),t.object(v.SUI_CLOCK_OBJECT_ID)],typeArguments:[this.deepCoin.coinType]});return t.transferObjects([r],this.sdk.senderAddress),t}async getUserSupplyAmount({marginPool:e,supplyCoin:t,supplierCapId:r}){let n=new C.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::get_user_supply_amount`,typeArguments:[t.coinType],arguments:[n.object(e),n.object(r),n.object(v.SUI_CLOCK_OBJECT_ID)]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:n});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);return this.#e(BigInt(j.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),t.scalar,t.decimals)}async getDeepBookMarginRegistry(){let t=(await this.sdk.fullClient.getObject({id:this._sdk.sdkOptions.margin_utils.margin_registry_id,options:{showContent:!0}})).data.content.fields.inner.fields.id.id,r=await this.sdk.fullClient.getDynamicFieldObject({parentId:t,name:{type:"u64",value:"1"}}),n=r.data.content.fields.value.fields.pool_registry.fields.id.id,i=r.data.content.fields.value.fields.margin_pools.fields.id.id;return{pool_registry_table_id:n,margin_pool_table_id:i}}async getDeepBookPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.pool_registry_table_id}),t=e.map(i=>i.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),n=[];for(let i=0;i<r.length;i++){let s=r[i].data.content.fields;n.push(Se(s))}return n}async getDeepBookMarginPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.margin_pool_table_id}),t=e.map(a=>a.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),n=[],i=[];for(let a=0;a<r.length;a++){let u=r[a].data.content.fields;i.push(u.value),n.push({deposit_coin_type:u.name.fields.name,id:u.id.id})}let s=await this.sdk.fullClient.batchGetObjects(i,{showContent:!0}),o=[];for(let a=0;a<s.length;a++){let u=s[a].data.content.fields;o.push(je(u,n[a]))}return o}async getBaseQuantityOutInput(e,t,r){let n=new C.Transaction;n.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_base_quantity_out":"::pool::get_base_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[n.object(e.address),n.pure.u64(t),n.object(v.SUI_CLOCK_OBJECT_ID)]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:n});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);let s=j.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])),o=j.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0])),a=j.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0]));return{base_amount:s.toString(),quote_amount:o.toString(),deep_fee_amount:a.toString()}}async getQuoteQuantityOutInput(e,t){let r=new C.Transaction;r.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::get_quote_quantity_out`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[r.object(e.address),r.pure.u64(t),r.object(v.SUI_CLOCK_OBJECT_ID)]});let n=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:r});if(!n.results||!n.results[0]||!n.results[0].returnValues||!n.results[0].returnValues[0])throw new Error(`Transaction failed: ${n.effects?.status?.error||"Unknown error"}`);let i=j.bcs.U64.parse(new Uint8Array(n.results[0].returnValues[0][0])),s=j.bcs.U64.parse(new Uint8Array(n.results[0].returnValues[1][0])),o=j.bcs.U64.parse(new Uint8Array(n.results[0].returnValues[2][0]));return{base_amount:i.toString(),quote_amount:s.toString(),deep_fee_amount:o.toString()}}async getAccount(e,t){if(!e||!t)throw new Error("marginManager and poolInfo are required");let r=new C.Transaction,n=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(e)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getAccount(n,[t],r)}async withdrawSettledAmounts({poolInfo:e,marginManager:t},r=new C.Transaction){return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::pool_proxy::withdraw_settled_amounts`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t),r.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}#e(e,t,r){if(t<=0||r<0)throw new Error("Scalar must be positive and decimals must be non-negative");let n=BigInt(t),i=e/n,s=e%n;if(s===0n)return i.toString();let o=t.toString().length-1,p=s.toString().padStart(o,"0").slice(0,r).replace(/0+$/,"");return p?`${i}.${p}`:i.toString()}async getMarginPoolStateForInterest(e){if(!e)throw new Error("marginPoolId is required");let t=await this.sdk.fullClient.getObject({id:e,options:{showContent:!0}});if(!t.data?.content?.fields)throw new Error(`Failed to fetch margin pool: ${e}`);let r=t.data.content.fields,n=r.state.fields,i=r.config.fields,s=i.interest_config.fields,o=i.margin_pool_config.fields;return{poolState:{total_supply:BigInt(n.total_supply),total_borrow:BigInt(n.total_borrow),supply_shares:BigInt(n.supply_shares),borrow_shares:BigInt(n.borrow_shares),last_update_timestamp:BigInt(n.last_update_timestamp)},interestConfig:{base_rate:BigInt(s.base_rate),base_slope:BigInt(s.base_slope),optimal_utilization:BigInt(s.optimal_utilization),excess_slope:BigInt(s.excess_slope)},marginPoolConfig:{protocol_spread:BigInt(o.protocol_spread),max_utilization_rate:BigInt(o.max_utilization_rate),min_borrow:BigInt(o.min_borrow),supply_cap:BigInt(o.supply_cap)}}}async getChainTimestamp(){let e=await this.sdk.fullClient.getLatestCheckpointSequenceNumber(),t=await this.sdk.fullClient.getCheckpoint({id:e});return BigInt(t.timestampMs)}};var Je=require("@mysten/sui/client"),te=class extends Je.SuiClient{async queryEventsByPage(e,t="all"){let r=[],n=!0,i=t==="all",s=i?null:t.cursor;do{let o=await this.queryEvents({query:e,cursor:s,limit:i?null:t.limit});o.data?(r=[...r,...o.data],n=o.hasNextPage,s=o.nextCursor):n=!1}while(i&&n);return{data:r,nextCursor:s,hasNextPage:n}}async getOwnedObjectsByPage(e,t,r="all"){let n=[],i=!0,s=r==="all",o=s?null:r.cursor;do{let a=await this.getOwnedObjects({owner:e,...t,cursor:o,limit:s?null:r.limit});a.data?(n=[...n,...a.data],i=a.hasNextPage,o=a.nextCursor):i=!1}while(s&&i);return{data:n,nextCursor:o,hasNextPage:i}}async getDynamicFieldsByPage(e,t="all"){let r=[],n=!0,i=t==="all",s=i?null:t.cursor;do{let o=await this.getDynamicFields({parentId:e,cursor:s,limit:i?null:t.limit});o.data?(r=[...r,...o.data],n=o.hasNextPage,s=o.nextCursor):n=!1}while(i&&n);return{data:r,nextCursor:s,hasNextPage:n}}async batchGetObjects(e,t,r=50){let n=[];try{for(let i=0;i<Math.ceil(e.length/r);i++){let s=await this.multiGetObjects({ids:e.slice(i*r,r*(i+1)),options:t});n=[...n,...s]}}catch{}return n}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let r=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:n}=r.effects;return Number(n.computationCost)+Number(n.storageCost)-Number(n.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};var ve=qe(require("decimal.js"));ve.default.config({precision:64,rounding:ve.default.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var $=1000000000n,Ye=365n*24n*60n*60n*1000n;function Xe(c,e){return e===0n?0n:c*$/e}function et(c,e){let{base_rate:t,base_slope:r,optimal_utilization:n,excess_slope:i}=e;if(c<n)return t+c*r/$;{let s=c-n,o=n*r/$,a=s*i/$;return t+o+a}}function Me(c,e){let t=c*e,r=t/$;return t%$>0n?r+1n:r}function tt(c,e,t,r){let n=e.borrow_shares===0n?$:e.total_borrow*$/e.borrow_shares,i=Me(c,n),s=Xe(e.total_borrow,e.total_supply),o=et(s,t),a=r-e.last_update_timestamp,u=e.total_borrow*o/$*a/Ye,p=e.borrow_shares===0n?0n:Me(u,c*$/e.borrow_shares),l=i+p;return{confirmedDebt:i,estimatedInterest:p,totalDebt:l,annualInterestRate:o}}function er(c,e,t,r,n=60000n){let i=r+n,{totalDebt:s}=tt(c,e,t,i);return s}var re=class{_cache={};_rpcModule;_deepbookUtils;_marginUtils;_pythPrice;_graphqlClient;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new te({url:e.fullRpcUrl}),this._deepbookUtils=new X(this),this._marginUtils=new ee(this),this._pythPrice=new Z(this),this._graphqlClient=new rt.SuiGraphQLClient({url:e.graphqlUrl}),oe(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get MarginUtils(){return this._marginUtils}get PythPrice(){return this._pythPrice}get fullClient(){return this._rpcModule}get graphqlClient(){return this._graphqlClient}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,r=!0){let n=[],i=null,s=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,o=this.getCache(s,r);if(o)return o;for(;;){let a=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:i}):this.fullClient.getAllCoins({owner:e,cursor:i}));if(a.data.forEach(u=>{BigInt(u.balance)>0&&n.push({coinAddress:R(u.coinType).source_address,coinObjectId:u.coinObjectId,balance:BigInt(u.balance)})}),i=a.nextCursor,!a.hasNextPage)break}return this.updateCache(s,n,30*1e3),n}async getOwnerCoinBalances(e,t){let r=[];return t?r=[await this.fullClient.getBalance({owner:e,coinType:t})]:r=[...await this.fullClient.getAllBalances({owner:e})],r}updateCache(e,t,r=864e5){let n=this._cache[e];n?(n.overdueTime=z(r),n.value=t):n=new K(t,z(r)),this._cache[e]=n}getCache(e,t=!1){let r=this._cache[e],n=r?.isValid();if(!t&&n)return r.value;n||delete this._cache[e]}};var tr="0x0000000000000000000000000000000000000000000000000000000000000006",rr="pool_script",nr="pool_script_v2",sr="router",ir="router_with_partner",or="fetcher_script",ar="expect_swap",cr="utils",ur="0x1::coin::CoinInfo",dr="0x1::coin::CoinStore",lr="custodian_v2",pr="clob_v2",gr="endpoints_v2",mr=c=>{if(typeof c=="string"&&c.startsWith("0x"))return"object";if(typeof c=="number"||typeof c=="bigint")return"u64";if(typeof c=="boolean")return"bool";throw new Error(`Unknown type for value: ${c}`)};var nt=(n=>(n[n.NO_RESTRICTION=0]="NO_RESTRICTION",n[n.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",n[n.FILL_OR_KILL=2]="FILL_OR_KILL",n[n.POST_ONLY=3]="POST_ONLY",n))(nt||{}),st=(r=>(r[r.SELF_MATCHING_ALLOWED=0]="SELF_MATCHING_ALLOWED",r[r.CANCEL_TAKER=1]="CANCEL_TAKER",r[r.CANCEL_MAKER=2]="CANCEL_MAKER",r))(st||{});var br=re;0&&(module.exports={CLOCK_ADDRESS,CachedContent,CetusClmmSDK,ClmmExpectSwapModule,ClmmFetcherModule,ClmmIntegratePoolModule,ClmmIntegratePoolV2Module,ClmmIntegrateRouterModule,ClmmIntegrateRouterWithPartnerModule,ClmmIntegrateUtilsModule,CoinAssist,CoinInfoAddress,CoinStoreAddress,DEEP_SCALAR,DEFAULT_GAS_BUDGET_FOR_MERGE,DEFAULT_GAS_BUDGET_FOR_SPLIT,DEFAULT_GAS_BUDGET_FOR_STAKE,DEFAULT_GAS_BUDGET_FOR_TRANSFER,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,DEFAULT_NFT_TRANSFER_GAS_FEE,DeepbookClobV2Moudle,DeepbookCustodianV2Moudle,DeepbookEndpointsV2Moudle,DeepbookUtilsModule,FLOAT_SCALAR,FLOAT_SCALING,GAS_SYMBOL,GAS_TYPE_ARG,GAS_TYPE_ARG_LONG,MarginUtilsModule,NORMALIZED_SUI_COIN_TYPE,OrderType,RpcModule,SUI_SYSTEM_STATE_OBJECT_ID,SelfMatchingOption,TransactionUtil,YEAR_MS,addHexPrefix,asIntN,asUintN,bufferToHex,cacheTime1min,cacheTime24h,cacheTime5min,calc100PercentRepay,calcDebtDetail,calcInterestRate,calcUtilizationRate,calculateRiskRatio,checkAddress,composeType,d,decimalsMultiplier,extractAddressFromType,extractStructTagFromType,fixCoinType,fixDown,fixSuiObjectId,fromDecimalsAmount,getDefaultSuiInputType,getFutureTime,getMoveObject,getMoveObjectType,getMovePackageContent,getObjectDeletedResponse,getObjectDisplay,getObjectFields,getObjectId,getObjectNotExistsResponse,getObjectOwner,getObjectPreviousTransactionDigest,getObjectReference,getObjectType,getObjectVersion,getSuiObjectData,hasPublicTransfer,hexToNumber,hexToString,isSortedSymbols,isSuiObjectResponse,maxDecimal,mulRoundUp,normalizeCoinType,patchFixSuiObjectId,printTransaction,removeHexPrefix,secretKeyToEd25519Keypair,secretKeyToSecp256k1Keypair,shortAddress,shortString,sleepTime,toBuffer,toDecimalsAmount,utf8to16,wrapDeepBookMarginPoolInfo,wrapDeepBookPoolInfo});