@msafe/sui3-sdk 0.0.49-pre-5b08fc9.0 → 0.0.49-pre-e95c731.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.cjs CHANGED
@@ -2050,7 +2050,7 @@ zebra
2050
2050
  zero
2051
2051
  zone
2052
2052
  zoo`.split(`
2053
- `);var es=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Zp=new Set,bu=typeof process=="object"&&process?process:{},Xp=(t,e,i,n)=>{typeof bu.emitWarning=="function"?bu.emitWarning(t,e,i,n):console.error(`[${i}] ${e}: ${t}`)},Ma=globalThis.AbortController,Hp=globalThis.AbortSignal;if(typeof Ma>"u"){Hp=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(n,r){this._onabort.push(r)}},Ma=class{constructor(){e()}signal=new Hp;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=!0;for(let r of this.signal._onabort)r(n);this.signal.onabort?.(n)}}};let t=bu.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{t&&(t=!1,Xp("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}var K1=t=>!Zp.has(t),L3=Symbol("type"),Pn=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Jp=t=>Pn(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Jr:null:null,Jr=class extends Array{constructor(e){super(e),this.fill(0)}},wu=class t{heap;length;static#c=!1;static create(e){let i=Jp(e);if(!i)return[];t.#c=!0;let n=new t(e,i);return t.#c=!1,n}constructor(e,i){if(!t.#c)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},ja=class t{#c;#d;#b;#p;#O;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#m;#r;#i;#e;#l;#f;#a;#o;#g;#s;#k;#C;#_;#w;#S;#u;static unsafeExposeInternals(e){return{starts:e.#C,ttls:e.#_,sizes:e.#k,keyMap:e.#r,keyList:e.#i,valList:e.#e,next:e.#l,prev:e.#f,get head(){return e.#a},get tail(){return e.#o},free:e.#g,isBackgroundFetch:i=>e.#t(i),backgroundFetch:(i,n,r,o)=>e.#E(i,n,r,o),moveToTail:i=>e.#I(i),indexes:i=>e.#y(i),rindexes:i=>e.#v(i),isStale:i=>e.#h(i)}}get max(){return this.#c}get maxSize(){return this.#d}get calculatedSize(){return this.#m}get size(){return this.#n}get fetchMethod(){return this.#O}get dispose(){return this.#b}get disposeAfter(){return this.#p}constructor(e){let{max:i=0,ttl:n,ttlResolution:r=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:l,dispose:u,disposeAfter:f,noDisposeOnSet:b,noUpdateTTL:v,maxSize:T=0,maxEntrySize:O=0,sizeCalculation:P,fetchMethod:j,noDeleteOnFetchRejection:B,noDeleteOnStaleGet:D,allowStaleOnFetchRejection:q,allowStaleOnFetchAbort:K,ignoreFetchAbort:Z}=e;if(i!==0&&!Pn(i))throw new TypeError("max option must be a nonnegative integer");let G=i?Jp(i):Array;if(!G)throw new Error("invalid max value: "+i);if(this.#c=i,this.#d=T,this.maxEntrySize=O||this.#d,this.sizeCalculation=P,this.sizeCalculation){if(!this.#d&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(j!==void 0&&typeof j!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#O=j,this.#S=!!j,this.#r=new Map,this.#i=new Array(i).fill(void 0),this.#e=new Array(i).fill(void 0),this.#l=new G(i),this.#f=new G(i),this.#a=0,this.#o=0,this.#g=wu.create(i),this.#n=0,this.#m=0,typeof u=="function"&&(this.#b=u),typeof f=="function"?(this.#p=f,this.#s=[]):(this.#p=void 0,this.#s=void 0),this.#w=!!this.#b,this.#u=!!this.#p,this.noDisposeOnSet=!!b,this.noUpdateTTL=!!v,this.noDeleteOnFetchRejection=!!B,this.allowStaleOnFetchRejection=!!q,this.allowStaleOnFetchAbort=!!K,this.ignoreFetchAbort=!!Z,this.maxEntrySize!==0){if(this.#d!==0&&!Pn(this.#d))throw new TypeError("maxSize must be a positive integer if specified");if(!Pn(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#R()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!D,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Pn(r)||r===0?r:1,this.ttlAutopurge=!!o,this.ttl=n||0,this.ttl){if(!Pn(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#M()}if(this.#c===0&&this.ttl===0&&this.#d===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#c&&!this.#d){let J="LRU_CACHE_UNBOUNDED";K1(J)&&(Zp.add(J),Xp("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",J,t))}}getRemainingTTL(e){return this.#r.has(e)?1/0:0}#M(){let e=new Jr(this.#c),i=new Jr(this.#c);this.#_=e,this.#C=i,this.#j=(o,s,a=es.now())=>{if(i[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#h(o)&&this.delete(this.#i[o])},s+1);l.unref&&l.unref()}},this.#x=o=>{i[o]=e[o]!==0?es.now():0},this.#T=(o,s)=>{if(e[s]){let a=e[s],l=i[s];o.ttl=a,o.start=l,o.now=n||r();let u=o.now-l;o.remainingTTL=a-u}};let n=0,r=()=>{let o=es.now();if(this.ttlResolution>0){n=o;let s=setTimeout(()=>n=0,this.ttlResolution);s.unref&&s.unref()}return o};this.getRemainingTTL=o=>{let s=this.#r.get(o);if(s===void 0)return 0;let a=e[s],l=i[s];if(a===0||l===0)return 1/0;let u=(n||r())-l;return a-u},this.#h=o=>e[o]!==0&&i[o]!==0&&(n||r())-i[o]>e[o]}#x=()=>{};#T=()=>{};#j=()=>{};#h=()=>!1;#R(){let e=new Jr(this.#c);this.#m=0,this.#k=e,this.#A=i=>{this.#m-=e[i],e[i]=0},this.#B=(i,n,r,o)=>{if(this.#t(n))return 0;if(!Pn(r))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(r=o(n,i),!Pn(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return r},this.#P=(i,n,r)=>{if(e[i]=n,this.#d){let o=this.#d-e[i];for(;this.#m>o;)this.#D(!0)}this.#m+=e[i],r&&(r.entrySize=n,r.totalCalculatedSize=this.#m)}}#A=e=>{};#P=(e,i,n)=>{};#B=(e,i,n,r)=>{if(n||r)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#y({allowStale:e=this.allowStale}={}){if(this.#n)for(let i=this.#o;!(!this.#N(i)||((e||!this.#h(i))&&(yield i),i===this.#a));)i=this.#f[i]}*#v({allowStale:e=this.allowStale}={}){if(this.#n)for(let i=this.#a;!(!this.#N(i)||((e||!this.#h(i))&&(yield i),i===this.#o));)i=this.#l[i]}#N(e){return e!==void 0&&this.#r.get(this.#i[e])===e}*entries(){for(let e of this.#y())this.#e[e]!==void 0&&this.#i[e]!==void 0&&!this.#t(this.#e[e])&&(yield[this.#i[e],this.#e[e]])}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#i[e]!==void 0&&!this.#t(this.#e[e])&&(yield[this.#i[e],this.#e[e]])}*keys(){for(let e of this.#y()){let i=this.#i[e];i!==void 0&&!this.#t(this.#e[e])&&(yield i)}}*rkeys(){for(let e of this.#v()){let i=this.#i[e];i!==void 0&&!this.#t(this.#e[e])&&(yield i)}}*values(){for(let e of this.#y())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e])}[Symbol.iterator](){return this.entries()}find(e,i={}){for(let n of this.#y()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;if(o!==void 0&&e(o,this.#i[n],this))return this.get(this.#i[n],i)}}forEach(e,i=this){for(let n of this.#y()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;o!==void 0&&e.call(i,o,this.#i[n],this)}}rforEach(e,i=this){for(let n of this.#v()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;o!==void 0&&e.call(i,o,this.#i[n],this)}}purgeStale(){let e=!1;for(let i of this.#v({allowStale:!0}))this.#h(i)&&(this.delete(this.#i[i]),e=!0);return e}dump(){let e=[];for(let i of this.#y({allowStale:!0})){let n=this.#i[i],r=this.#e[i],o=this.#t(r)?r.__staleWhileFetching:r;if(o===void 0||n===void 0)continue;let s={value:o};if(this.#_&&this.#C){s.ttl=this.#_[i];let a=es.now()-this.#C[i];s.start=Math.floor(Date.now()-a)}this.#k&&(s.size=this.#k[i]),e.unshift([n,s])}return e}load(e){this.clear();for(let[i,n]of e){if(n.start){let r=Date.now()-n.start;n.start=es.now()-r}this.set(i,n.value,n)}}set(e,i,n={}){if(i===void 0)return this.delete(e),this;let{ttl:r=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:l}=n,{noUpdateTTL:u=this.noUpdateTTL}=n,f=this.#B(e,i,n.size||0,a);if(this.maxEntrySize&&f>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=!0),this.delete(e),this;let b=this.#n===0?void 0:this.#r.get(e);if(b===void 0)b=this.#n===0?this.#o:this.#g.length!==0?this.#g.pop():this.#n===this.#c?this.#D(!1):this.#n,this.#i[b]=e,this.#e[b]=i,this.#r.set(e,b),this.#l[this.#o]=b,this.#f[b]=this.#o,this.#o=b,this.#n++,this.#P(b,f,l),l&&(l.set="add"),u=!1;else{this.#I(b);let v=this.#e[b];if(i!==v){if(this.#S&&this.#t(v)?v.__abortController.abort(new Error("replaced")):s||(this.#w&&this.#b?.(v,e,"set"),this.#u&&this.#s?.push([v,e,"set"])),this.#A(b),this.#P(b,f,l),this.#e[b]=i,l){l.set="replace";let T=v&&this.#t(v)?v.__staleWhileFetching:v;T!==void 0&&(l.oldValue=T)}}else l&&(l.set="update")}if(r!==0&&!this.#_&&this.#M(),this.#_&&(u||this.#j(b,r,o),l&&this.#T(l,b)),!s&&this.#u&&this.#s){let v=this.#s,T;for(;T=v?.shift();)this.#p?.(...T)}return this}pop(){try{for(;this.#n;){let e=this.#e[this.#a];if(this.#D(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#u&&this.#s){let e=this.#s,i;for(;i=e?.shift();)this.#p?.(...i)}}}#D(e){let i=this.#a,n=this.#i[i],r=this.#e[i];return this.#S&&this.#t(r)?r.__abortController.abort(new Error("evicted")):(this.#w||this.#u)&&(this.#w&&this.#b?.(r,n,"evict"),this.#u&&this.#s?.push([r,n,"evict"])),this.#A(i),e&&(this.#i[i]=void 0,this.#e[i]=void 0,this.#g.push(i)),this.#n===1?(this.#a=this.#o=0,this.#g.length=0):this.#a=this.#l[i],this.#r.delete(n),this.#n--,i}has(e,i={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:r}=i,o=this.#r.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return!1;if(this.#h(o))r&&(r.has="stale",this.#T(r,o));else return n&&this.#x(o),r&&(r.has="hit",this.#T(r,o)),!0}else r&&(r.has="miss");return!1}peek(e,i={}){let{allowStale:n=this.allowStale}=i,r=this.#r.get(e);if(r!==void 0&&(n||!this.#h(r))){let o=this.#e[r];return this.#t(o)?o.__staleWhileFetching:o}}#E(e,i,n,r){let o=i===void 0?void 0:this.#e[i];if(this.#t(o))return o;let s=new Ma,{signal:a}=n;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let l={signal:s.signal,options:n,context:r},u=(P,j=!1)=>{let{aborted:B}=s.signal,D=n.ignoreFetchAbort&&P!==void 0;if(n.status&&(B&&!j?(n.status.fetchAborted=!0,n.status.fetchError=s.signal.reason,D&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),B&&!D&&!j)return b(s.signal.reason);let q=T;return this.#e[i]===T&&(P===void 0?q.__staleWhileFetching?this.#e[i]=q.__staleWhileFetching:this.delete(e):(n.status&&(n.status.fetchUpdated=!0),this.set(e,P,l.options))),P},f=P=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=P),b(P)),b=P=>{let{aborted:j}=s.signal,B=j&&n.allowStaleOnFetchAbort,D=B||n.allowStaleOnFetchRejection,q=D||n.noDeleteOnFetchRejection,K=T;if(this.#e[i]===T&&(!q||K.__staleWhileFetching===void 0?this.delete(e):B||(this.#e[i]=K.__staleWhileFetching)),D)return n.status&&K.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),K.__staleWhileFetching;if(K.__returned===K)throw P},v=(P,j)=>{let B=this.#O?.(e,o,l);B&&B instanceof Promise&&B.then(D=>P(D),j),s.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(P(),n.allowStaleOnFetchAbort&&(P=D=>u(D,!0)))})};n.status&&(n.status.fetchDispatched=!0);let T=new Promise(v).then(u,f),O=Object.assign(T,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return i===void 0?(this.set(e,O,{...l.options,status:void 0}),i=this.#r.get(e)):this.#e[i]=O,O}#t(e){if(!this.#S)return!1;let i=e;return!!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof Ma}async fetch(e,i={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:u=this.sizeCalculation,noUpdateTTL:f=this.noUpdateTTL,noDeleteOnFetchRejection:b=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:v=this.allowStaleOnFetchRejection,ignoreFetchAbort:T=this.ignoreFetchAbort,allowStaleOnFetchAbort:O=this.allowStaleOnFetchAbort,context:P,forceRefresh:j=!1,status:B,signal:D}=i;if(!this.#S)return B&&(B.fetch="get"),this.get(e,{allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:o,status:B});let q={allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:l,sizeCalculation:u,noUpdateTTL:f,noDeleteOnFetchRejection:b,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:O,ignoreFetchAbort:T,status:B,signal:D},K=this.#r.get(e);if(K===void 0){B&&(B.fetch="miss");let Z=this.#E(e,K,q,P);return Z.__returned=Z}else{let Z=this.#e[K];if(this.#t(Z)){let A=n&&Z.__staleWhileFetching!==void 0;return B&&(B.fetch="inflight",A&&(B.returnedStale=!0)),A?Z.__staleWhileFetching:Z.__returned=Z}let G=this.#h(K);if(!j&&!G)return B&&(B.fetch="hit"),this.#I(K),r&&this.#x(K),B&&this.#T(B,K),Z;let J=this.#E(e,K,q,P),I=J.__staleWhileFetching!==void 0&&n;return B&&(B.fetch=G?"stale":"refresh",I&&G&&(B.returnedStale=!0)),I?J.__staleWhileFetching:J.__returned=J}}get(e,i={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=i,a=this.#r.get(e);if(a!==void 0){let l=this.#e[a],u=this.#t(l);return s&&this.#T(s,a),this.#h(a)?(s&&(s.get="stale"),u?(s&&n&&l.__staleWhileFetching!==void 0&&(s.returnedStale=!0),n?l.__staleWhileFetching:void 0):(o||this.delete(e),s&&n&&(s.returnedStale=!0),n?l:void 0)):(s&&(s.get="hit"),u?l.__staleWhileFetching:(this.#I(a),r&&this.#x(a),l))}else s&&(s.get="miss")}#F(e,i){this.#f[i]=e,this.#l[e]=i}#I(e){e!==this.#o&&(e===this.#a?this.#a=this.#l[e]:this.#F(this.#f[e],this.#l[e]),this.#F(this.#o,e),this.#o=e)}delete(e){let i=!1;if(this.#n!==0){let n=this.#r.get(e);if(n!==void 0)if(i=!0,this.#n===1)this.clear();else{this.#A(n);let r=this.#e[n];this.#t(r)?r.__abortController.abort(new Error("deleted")):(this.#w||this.#u)&&(this.#w&&this.#b?.(r,e,"delete"),this.#u&&this.#s?.push([r,e,"delete"])),this.#r.delete(e),this.#i[n]=void 0,this.#e[n]=void 0,n===this.#o?this.#o=this.#f[n]:n===this.#a?this.#a=this.#l[n]:(this.#l[this.#f[n]]=this.#l[n],this.#f[this.#l[n]]=this.#f[n]),this.#n--,this.#g.push(n)}}if(this.#u&&this.#s?.length){let n=this.#s,r;for(;r=n?.shift();)this.#p?.(...r)}return i}clear(){for(let e of this.#v({allowStale:!0})){let i=this.#e[e];if(this.#t(i))i.__abortController.abort(new Error("deleted"));else{let n=this.#i[e];this.#w&&this.#b?.(i,n,"delete"),this.#u&&this.#s?.push([i,n,"delete"])}}if(this.#r.clear(),this.#e.fill(void 0),this.#i.fill(void 0),this.#_&&this.#C&&(this.#_.fill(0),this.#C.fill(0)),this.#k&&this.#k.fill(0),this.#a=0,this.#o=0,this.#g.length=0,this.#m=0,this.#n=0,this.#u&&this.#s){let e=this.#s,i;for(;i=e?.shift();)this.#p?.(...i)}}};var le=ve(Se(),1);var Ra=ve(Qp(),1),cr=require("@mysten/sui.js/utils"),lr=require("@mysten/sui.js/transactions");var ts=ve(Se(),1),sm=require("@mysten/sui.js/transactions"),ti=ve(Se(),1);var Dn=ve(Se(),1),ki=ve(Se(),1);var rs=ve(Se(),1);var am=require("@mysten/sui.js/utils"),qa=require("@mysten/sui.js/transactions"),La=require("@mysten/sui.js/utils");var Su=ve(Se(),1),V1=Object.defineProperty,W1=(t,e,i)=>e in t?V1(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,Wi=(t,e,i)=>(W1(t,typeof e!="symbol"?e+"":e,i),i);var Ba=443636,Na=-443636,ku="79226673515401279992447579055",Cu="4295048016",z1=14,G1="59543866431248",H1="184467440737095516",Z1="15793534762490258745",X1=class{generateMnemonic(t=24){return zp(Gp,t===12?128:256)}getKeypairFromMnemonics(t,e={}){let i=this.getDerivePath(e);return im.Ed25519Keypair.deriveKeypair(t,i)}getDerivePath(t={}){let{accountIndex:e=0,isExternal:i=!1,addressIndex:n=0}=t;return`m/44'/784'/${e}'/${i?1:0}'/${n}'`}},ns=class{constructor(t){this.sdk=t,Wi(this,"_lru"),Wi(this,"_fetching",{})}async getCacheOrSet(t,e,i=0){var n;let r=this._lru||(this._lru=new ja({max:100}));if(r.has(t))return r.get(t);let s=await((n=this._fetching)[t]||(n[t]=e()));return delete this._fetching[t],r.set(t,s,{ttl:i}),s}get provider(){return this.sdk.provider}get math(){return this.sdk.math}get account(){return this.sdk.account}get network(){return this.sdk.network}get contract(){return this.sdk.contract}get nft(){return this.sdk.nft}get coin(){return this.sdk.coin}get trade(){return this.sdk.trade}get pool(){return this.sdk.pool}};function J1(t){if("reference"in t)return t.reference;let e=Au(t);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:rm(t)}function Yr(t){var e,i;return"objectId"in t?t.objectId:(i=(e=J1(t))==null?void 0:e.objectId)!=null?i:om(t)}function zi(t){var e;return"fields"in t?t.fields:(e=nm(t))==null?void 0:e.fields}function nm(t){let e="data"in t?Au(t):t;if(!(!e||!Q1(e)||e.content.dataType!=="moveObject"))return e.content}function Q1(t){return t.content!==void 0}function Au(t){return t.data}function rm(t){if(t.error&&"object_id"in t.error&&"version"in t.error&&"digest"in t.error){let e=t.error;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function om(t){if(t.error&&"object_id"in t.error&&!("version"in t.error)&&!("digest"in t.error))return t.error.object_id}function Y1(t){return t.data!==void 0}function ek(t){var e;let i=Y1(t)?t.data:t;return!i?.type&&"data"in t?((e=i?.content)==null?void 0:e.dataType)==="package"?"package":$a(t):i?.type}function $a(t){var e;return(e=nm(t))==null?void 0:e.type}function tk(t){var e;return(e=Au(t))==null?void 0:e.owner}var is=async(t,e,i)=>{let r=e.length;if(r>50){let o=[],s=0,a=Math.ceil(r/50);for(s;s<a;s++)o.push(t.multiGetObjects({ids:e.slice(s*50,(s+1)*50),options:i}));return(await Promise.all(o)).flat()}return await t.multiGetObjects({ids:e,options:i})},ik=class extends ns{async getConfig(){return(await this.fetchJSON())[this.network].contract}getFees(){return this.getCacheOrSet("fees",async()=>{let e=(await this.fetchJSON())[this.network].fee;return(await is(this.provider,Object.values(e),{showContent:!0})).map(n=>{let r=zi(n),o=Yr(n),s=$a(n);return{objectId:o,type:s.split("<")[1].slice(0,-1),fee:r.fee,tickSpacing:r.tick_spacing}})})}fetchJSON(){return this.getCacheOrSet("contract-json",async()=>await(await fetch("https://s3.amazonaws.com/app.turbos.finance/sdk/contract.json?t="+Date.now(),{method:"GET"})).json())}},Yp=new le.default(2).pow(new le.default(128)),nk=class{priceToSqrtPriceX64(t,e,i){return new le.default(new U(t).mul(U.pow(10,i-e)).sqrt().mul(U.pow(2,64)).floor().toFixed(0))}sqrtPriceX64ToPrice(t,e,i){return new U(t.toString()).mul(U.pow(2,-64)).pow(2).mul(U.pow(10,e-i))}priceToTickIndex(t,e,i){return this.sqrtPriceX64ToTickIndex(this.priceToSqrtPriceX64(t,e,i))}sqrtPriceX64ToTickIndex(t){if(t.gt(new le.default(ku))||t.lt(new le.default(Cu)))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let e=t.bitLength()-1,i=new le.default(e-64),n=this.signedShiftLeft(i,32,128),r=new le.default("8000000000000000","hex"),o=0,s=new le.default(0),a=e>=64?t.shrn(e-63):t.shln(63-e);for(;r.gt(new le.default(0))&&o<z1;){a=a.mul(a);let T=a.shrn(127);a=a.shrn(63+T.toNumber()),s=s.add(r.mul(T)),r=r.shrn(1),o+=1}let l=s.shrn(32),f=n.add(l).mul(new le.default(G1)),b=this.signedShiftRight(f.sub(new le.default(H1)),64,128).toNumber(),v=this.signedShiftRight(f.add(new le.default(Z1)),64,128).toNumber();return b==v?b:this.tickIndexToSqrtPriceX64(v).lte(t)?v:b}tickIndexToSqrtPriceX64(t){return t>0?new le.default(this.tickIndexToSqrtPricePositive(t)):new le.default(this.tickIndexToSqrtPriceNegative(t))}tickIndexToPrice(t,e,i){return this.sqrtPriceX64ToPrice(this.tickIndexToSqrtPriceX64(t),e,i)}toX64_Decimal(t){return t.mul(U.pow(2,64))}fromX64_Decimal(t){return t.mul(U.pow(2,-64))}scaleDown(t,e){return new U(t).div(U.pow(10,e)).toString()}scaleUp(t,e){return new U(t).mul(U.pow(10,e)).toString()}bitsToNumber(t,e=32){return Ra.default.toNumber(Ra.default.asIntN(e,Ra.default.BigInt(t)))}subUnderflowU128(t,e){return t.add(Yp).sub(e).mod(Yp)}tickIndexToSqrtPricePositive(t){let e;return t&1?e=new le.default("79232123823359799118286999567"):e=new le.default("79228162514264337593543950336"),t&2&&(e=this.signedShiftRight(e.mul(new le.default("79236085330515764027303304731")),96,256)),t&4&&(e=this.signedShiftRight(e.mul(new le.default("79244008939048815603706035061")),96,256)),t&8&&(e=this.signedShiftRight(e.mul(new le.default("79259858533276714757314932305")),96,256)),t&16&&(e=this.signedShiftRight(e.mul(new le.default("79291567232598584799939703904")),96,256)),t&32&&(e=this.signedShiftRight(e.mul(new le.default("79355022692464371645785046466")),96,256)),t&64&&(e=this.signedShiftRight(e.mul(new le.default("79482085999252804386437311141")),96,256)),t&128&&(e=this.signedShiftRight(e.mul(new le.default("79736823300114093921829183326")),96,256)),t&256&&(e=this.signedShiftRight(e.mul(new le.default("80248749790819932309965073892")),96,256)),t&512&&(e=this.signedShiftRight(e.mul(new le.default("81282483887344747381513967011")),96,256)),t&1024&&(e=this.signedShiftRight(e.mul(new le.default("83390072131320151908154831281")),96,256)),t&2048&&(e=this.signedShiftRight(e.mul(new le.default("87770609709833776024991924138")),96,256)),t&4096&&(e=this.signedShiftRight(e.mul(new le.default("97234110755111693312479820773")),96,256)),t&8192&&(e=this.signedShiftRight(e.mul(new le.default("119332217159966728226237229890")),96,256)),t&16384&&(e=this.signedShiftRight(e.mul(new le.default("179736315981702064433883588727")),96,256)),t&32768&&(e=this.signedShiftRight(e.mul(new le.default("407748233172238350107850275304")),96,256)),t&65536&&(e=this.signedShiftRight(e.mul(new le.default("2098478828474011932436660412517")),96,256)),t&131072&&(e=this.signedShiftRight(e.mul(new le.default("55581415166113811149459800483533")),96,256)),t&262144&&(e=this.signedShiftRight(e.mul(new le.default("38992368544603139932233054999993551")),96,256)),this.signedShiftRight(e,32,256)}tickIndexToSqrtPriceNegative(t){let e=Math.abs(t),i;return e&1?i=new le.default("18445821805675392311"):i=new le.default("18446744073709551616"),e&2&&(i=this.signedShiftRight(i.mul(new le.default("18444899583751176498")),64,256)),e&4&&(i=this.signedShiftRight(i.mul(new le.default("18443055278223354162")),64,256)),e&8&&(i=this.signedShiftRight(i.mul(new le.default("18439367220385604838")),64,256)),e&16&&(i=this.signedShiftRight(i.mul(new le.default("18431993317065449817")),64,256)),e&32&&(i=this.signedShiftRight(i.mul(new le.default("18417254355718160513")),64,256)),e&64&&(i=this.signedShiftRight(i.mul(new le.default("18387811781193591352")),64,256)),e&128&&(i=this.signedShiftRight(i.mul(new le.default("18329067761203520168")),64,256)),e&256&&(i=this.signedShiftRight(i.mul(new le.default("18212142134806087854")),64,256)),e&512&&(i=this.signedShiftRight(i.mul(new le.default("17980523815641551639")),64,256)),e&1024&&(i=this.signedShiftRight(i.mul(new le.default("17526086738831147013")),64,256)),e&2048&&(i=this.signedShiftRight(i.mul(new le.default("16651378430235024244")),64,256)),e&4096&&(i=this.signedShiftRight(i.mul(new le.default("15030750278693429944")),64,256)),e&8192&&(i=this.signedShiftRight(i.mul(new le.default("12247334978882834399")),64,256)),e&16384&&(i=this.signedShiftRight(i.mul(new le.default("8131365268884726200")),64,256)),e&32768&&(i=this.signedShiftRight(i.mul(new le.default("3584323654723342297")),64,256)),e&65536&&(i=this.signedShiftRight(i.mul(new le.default("696457651847595233")),64,256)),e&131072&&(i=this.signedShiftRight(i.mul(new le.default("26294789957452057")),64,256)),e&262144&&(i=this.signedShiftRight(i.mul(new le.default("37481735321082")),64,256)),i}signedShiftLeft(t,e,i){let n=t.toTwos(i).shln(e);return n.imaskn(i+1),n.fromTwos(i)}signedShiftRight(t,e,i){let n=t.toTwos(i).shrn(e);return n.imaskn(i-e+1),n.fromTwos(i-e)}},Tu=(t,e)=>{let i=Yr(t);if(rm(t))throw new Error(`${e}(${i}) had been deleted`);if(om(t))throw new Error(`${e}(${i}) is not found`);return!0},Qr=60*1e3,rk=class extends ns{async getPools(t=!1){let e=await this.contract.getConfig(),i=[],n;do n=await this.provider.getDynamicFields({parentId:e.PoolTableId,cursor:n?.nextCursor,limit:15}),i.push(...n.data.map(a=>a.objectId));while(n.hasNextPage);if(!i.length)return[];let o=(await is(this.provider,i,{showContent:!0})).map(a=>zi(a).value.fields.pool_id);if(!o.length)return[];let s=await is(this.provider,o,{showContent:!0});return t||(s=s.filter(a=>zi(a).unlocked)),s.map(a=>this.parsePool(a))}async getPool(t){return this.getCacheOrSet(`pool-${t}`,async()=>{let e=await this.provider.getObject({id:t,options:{showContent:!0}});return Tu(e,"pool"),this.parsePool(e)},1500)}async createPool(t){let{fee:e,address:i,tickLower:n,tickUpper:r,sqrtPrice:o,slippage:s,coinTypeA:a,coinTypeB:l}=t,u=await this.contract.getConfig(),f=new U(t.amountA),b=new U(t.amountB),[v,T]=await Promise.all([this.coin.selectTradeCoins(i,a,f),this.coin.selectTradeCoins(i,l,b)]),O=t.txb||new lr.TransactionBlock,P=v.length>0?this.coin.convertTradeCoins(O,v,a,f):[this.coin.zero(a,O)],j=T.length>0?this.coin.convertTradeCoins(O,T,l,b):[this.coin.zero(l,O)];return O.moveCall({target:`${u.PackageId}::pool_factory::deploy_pool_and_mint`,typeArguments:[a,l,e.type],arguments:[O.object(u.PoolConfig),O.object(e.objectId),O.pure(o,"u128"),O.object(u.Positions),O.makeMoveVec({objects:P}),O.makeMoveVec({objects:j}),O.pure(Math.abs(n).toFixed(0),"u32"),O.pure(n<0,"bool"),O.pure(Math.abs(r).toFixed(0),"u32"),O.pure(r<0,"bool"),O.pure(f.toFixed(0),"u64"),O.pure(b.toFixed(0),"u64"),O.pure(this.getMinimumAmountBySlippage(f,s),"u64"),O.pure(this.getMinimumAmountBySlippage(b,s),"u64"),O.pure(i,"address"),O.pure(Date.now()+(t.deadline||Qr),"u64"),O.object(cr.SUI_CLOCK_OBJECT_ID),O.object(u.Versioned)]}),O}async addLiquidity(t){let{address:e,tickLower:i,tickUpper:n,slippage:r,pool:o}=t,s=await this.contract.getConfig(),a=await this.getPoolTypeArguments(o),[l,u]=a,[f,b]=await Promise.all([this.coin.getMetadata(l),this.coin.getMetadata(u)]);if(!f||!b)throw new Error("Invalid coin type");let v=new U(t.amountA),T=new U(t.amountB),[O,P]=await Promise.all([this.coin.selectTradeCoins(e,l,v),this.coin.selectTradeCoins(e,u,T)]),j=t.txb||new lr.TransactionBlock,B=O.length>0?this.coin.convertTradeCoins(j,O,l,v):[this.coin.zero(l,j)],D=P.length>0?this.coin.convertTradeCoins(j,P,u,T):[this.coin.zero(u,j)];return j.moveCall({target:`${s.PackageId}::position_manager::mint`,typeArguments:a,arguments:[j.object(o),j.object(s.Positions),j.makeMoveVec({objects:B}),j.makeMoveVec({objects:D}),j.pure(Math.abs(i).toFixed(0),"u32"),j.pure(i<0,"bool"),j.pure(Math.abs(n).toFixed(0),"u32"),j.pure(n<0,"bool"),j.pure(v.toFixed(0),"u64"),j.pure(T.toFixed(0),"u64"),j.pure(this.getMinimumAmountBySlippage(v,r),"u64"),j.pure(this.getMinimumAmountBySlippage(T,r),"u64"),j.pure(e,"address"),j.pure(Date.now()+(t.deadline||Qr),"u64"),j.object(cr.SUI_CLOCK_OBJECT_ID),j.object(s.Versioned)]}),j}async increaseLiquidity(t){let{pool:e,slippage:i,address:n,nft:r}=t,o=await this.contract.getConfig(),s=new U(t.amountA),a=new U(t.amountB),l=await this.getPoolTypeArguments(e),[u,f]=l,[b,v]=await Promise.all([this.coin.selectTradeCoins(n,u,s),this.coin.selectTradeCoins(n,f,a)]),T=t.txb||new lr.TransactionBlock,O=b.length>0?this.coin.convertTradeCoins(T,b,u,s):[this.coin.zero(u,T)],P=v.length>0?this.coin.convertTradeCoins(T,v,f,a):[this.coin.zero(f,T)];return T.moveCall({target:`${o.PackageId}::position_manager::increase_liquidity`,typeArguments:l,arguments:[T.object(e),T.object(o.Positions),T.makeMoveVec({objects:O}),T.makeMoveVec({objects:P}),T.object(r),T.pure(s.toFixed(0),"u64"),T.pure(a.toFixed(0),"u64"),T.pure(this.getMinimumAmountBySlippage(s,i),"u64"),T.pure(this.getMinimumAmountBySlippage(a,i),"u64"),T.pure(Date.now()+(t.deadline||Qr*3),"u64"),T.object(cr.SUI_CLOCK_OBJECT_ID),T.object(o.Versioned)]}),T}async decreaseLiquidity(t){let{slippage:e,nft:i,pool:n,decreaseLiquidity:r}=t,o=new U(t.amountA),s=new U(t.amountB),a=await this.contract.getConfig(),l=await this.getPoolTypeArguments(n),u=t.txb||new lr.TransactionBlock;return u.moveCall({target:`${a.PackageId}::position_manager::decrease_liquidity`,typeArguments:l,arguments:[u.object(n),u.object(a.Positions),u.object(i),u.pure(new ts.default(r).toString(),"u128"),u.pure(this.getMinimumAmountBySlippage(o,e),"u64"),u.pure(this.getMinimumAmountBySlippage(s,e),"u64"),u.pure(Date.now()+(t.deadline||Qr*3),"u64"),u.object(cr.SUI_CLOCK_OBJECT_ID),u.object(a.Versioned)]}),u}async removeLiquidity(t){let e=await this.decreaseLiquidity(t);return e=await this.collectFee({txb:e,...t}),e=await this.collectReward({txb:e,...t}),e=await this.nft.burn({txb:e,nft:t.nft,pool:t.pool}),e}async collectFee(t){let{pool:e,nft:i,address:n,collectAmountA:r,collectAmountB:o}=t,s=t.txb||new lr.TransactionBlock;if(Number(r)===0&&Number(o)===0)return s;let a=await this.contract.getConfig(),l=await this.getPoolTypeArguments(e);return s.moveCall({target:`${a.PackageId}::position_manager::collect`,typeArguments:l,arguments:[s.object(e),s.object(a.Positions),s.object(i),s.pure(r,"u64"),s.pure(o,"u64"),s.pure(n),s.pure(Date.now()+(t.deadline||Qr*3),"u64"),s.object(cr.SUI_CLOCK_OBJECT_ID),s.object(a.Versioned)]}),s}async collectReward(t){let{pool:e,nft:i,rewardAmounts:n,address:r}=t,o=t.txb||new lr.TransactionBlock,s=await this.contract.getConfig(),a=await this.getPoolTypeArguments(e);return(await this.getPool(e)).reward_infos.forEach((u,f)=>{o.moveCall({target:`${s.PackageId}::position_manager::collect_reward`,typeArguments:[...a,u.fields.vault_coin_type],arguments:[o.object(e),o.object(s.Positions),o.object(i),o.object(u.fields.vault),o.pure(f,"u64"),o.pure(n[f],"u64"),o.pure(r),o.pure(Date.now()+(t.deadline||Qr*3),"u64"),o.object(cr.SUI_CLOCK_OBJECT_ID),o.object(s.Versioned)]})}),o}getTokenAmountsFromLiquidity(t){let e=new U((t.liquidity||new ts.default(1e8)).toString()),i=new U(t.currentSqrtPrice.toString()),n=new U(t.lowerSqrtPrice.toString()),r=new U(t.upperSqrtPrice.toString()),o,s;t.currentSqrtPrice.lt(t.lowerSqrtPrice)?(o=this.math.toX64_Decimal(e).mul(r.sub(n)).div(n.mul(r)),s=new U(0)):t.currentSqrtPrice.lt(t.upperSqrtPrice)?(o=this.math.toX64_Decimal(e).mul(r.sub(i)).div(i.mul(r)),s=this.math.fromX64_Decimal(e.mul(i.sub(n)))):(o=new U(0),s=this.math.fromX64_Decimal(e.mul(r.sub(n))));let a=t.ceil!==!1?"ceil":"floor";return[new ts.default(o[a]().toString()),new ts.default(s[a]().toString())]}async getPoolTypeArguments(t){return this.getCacheOrSet("pool-type-"+t,async()=>(await this.getPool(t)).types)}parsePoolType(t,e){var i;let n=((i=t.replace(">","").split("<")[1])==null?void 0:i.split(/,\s*/))||[];if(e!==void 0&&e!==n.length)throw new Error("Invalid pool type");return n}async getFixedLiquidity(t){var e,i;let{coinTypeA:n,coinTypeB:r,amountA:o,amountB:s}=t,[a,l]=await Promise.all([this.coin.getMetadata(n),this.coin.getMetadata(r)]),u=new U(this.math.scaleDown(o,a.decimals)).mul((e=t.priceA)!=null?e:1),f=new U(this.math.scaleDown(s,l.decimals)).mul((i=t.priceB)!=null?i:1);return{liquidityA:u.toString(),liquidityB:f.toString(),liquidity:u.plus(f).toString()}}parsePool(t){let e=zi(t),i=Yr(t),n=ek(t),r=this.parsePoolType(n,3);return this.getCacheOrSet("pool-type-"+i,async()=>r),{...e,objectId:i,type:n,types:r}}getMinimumAmountBySlippage(t,e){let i=new U(t),n=new U(1).minus(new U(e).div(100));if(n.lte(0)||n.gt(1))throw new Error("invalid slippage range");return i.mul(n).toFixed(0)}},ok=(t,e)=>{let{pool:i,position:n,tickLowerDetail:r,tickUpperDetail:o}=e,s=new Dn.default(i.fee_growth_global_a),a=new Dn.default(n.fee_growth_inside_a),l=new Dn.default(n.tokens_owed_a),u=new Dn.default(i.fee_growth_global_b),f=new Dn.default(n.fee_growth_inside_b),b=new Dn.default(n.tokens_owed_b),v=new Dn.default(n.liquidity),T,O,P,j,B=t.bitsToNumber(i.tick_current_index.fields.bits),D=t.bitsToNumber(n.tick_lower_index.fields.bits),q=t.bitsToNumber(n.tick_upper_index.fields.bits);B<D?(T=t.subUnderflowU128(s,r.feeGrowthOutsideA),O=t.subUnderflowU128(u,r.feeGrowthOutsideB)):(T=r.feeGrowthOutsideA,O=r.feeGrowthOutsideB),B<q?(P=o.feeGrowthOutsideA,j=o.feeGrowthOutsideB):(P=t.subUnderflowU128(s,o.feeGrowthOutsideA),j=t.subUnderflowU128(u,o.feeGrowthOutsideB));let K=t.subUnderflowU128(t.subUnderflowU128(s,T),P),Z=t.subUnderflowU128(t.subUnderflowU128(u,O),j),G=t.subUnderflowU128(K,a).mul(v).shrn(64),J=t.subUnderflowU128(Z,f).mul(v).shrn(64);return{feeOwedA:l.add(G).toString(),feeOwedB:b.add(J).toString()}},em=new rs.default(0),tm=new rs.default(1),sk=new rs.default(2),ak={mul(t,e,i){let n=t.mul(e);if(this.isOverLimit(n,i))throw new Error(`Mul result higher than u${i}`);return n},mulDiv(t,e,i,n){return this.mulDivRoundUpIf(t,e,i,!1,n)},mulDivRoundUpIf(t,e,i,n,r){if(i.eq(em))throw new Error("mulDiv denominator is zero");let o=this.mul(t,e,r),s=o.div(i);return n&&o.mod(i).gt(em)?s.add(tm):s},isOverLimit(t,e){let i=sk.pow(new rs.default(e)).sub(tm);return t.gt(i)}},ck=(t,e)=>{var i,n,r,o;let{pool:s,position:a,tickLowerDetail:l,tickUpperDetail:u,timeStampInSeconds:f}=e,b=new ki.default(new U(s.reward_last_updated_time_ms).div(1e3).toFixed(0)),T=(f??new ki.default(Date.now()).div(new ki.default(1e3))).sub(new ki.default(b)),O=[],P=new ki.default(s.liquidity),j=new ki.default(a.liquidity);for(let B=0;B<3;++B){let D=s.reward_infos[B],q={emissionsPerSecondX64:new ki.default(D?D.fields.emissions_per_second:"0"),growthGlobalX64:new ki.default(D?D.fields.growth_global:"0")},K={growthInsideCheckpoint:new ki.default((n=(i=a.reward_infos[B])==null?void 0:i.fields.reward_growth_inside)!=null?n:"0"),amountOwed:new ki.default((o=(r=a.reward_infos[B])==null?void 0:r.fields.amount_owed)!=null?o:"0")},Z=q.growthGlobalX64;if(!P.isZero()){let k=ak.mulDiv(T,q.emissionsPerSecondX64,P,128);Z=q.growthGlobalX64.add(k)}let G=l.rewardGrowthsOutside[B],J=u.rewardGrowthsOutside[B],x=Z;l.initialized&&(x=t.bitsToNumber(s.tick_current_index.fields.bits)<t.bitsToNumber(a.tick_lower_index.fields.bits)?t.subUnderflowU128(Z,G):G);let I=new ki.default(0);u.initialized&&(I=t.bitsToNumber(s.tick_current_index.fields.bits)<t.bitsToNumber(a.tick_upper_index.fields.bits)?J:t.subUnderflowU128(Z,J));let A=t.subUnderflowU128(t.subUnderflowU128(Z,x),I),M=K.amountOwed.shln(64);O[B]=M.add(t.subUnderflowU128(A,K.growthInsideCheckpoint).mul(j)).shrn(64).toString()}return O},lk=class extends ns{async getOwner(t){let e=await this.getObject(t),i=tk(e);if(!(!i||typeof i=="string")){if("ObjectOwner"in i)return i.ObjectOwner;if("AddressOwner"in i)return i.AddressOwner}}async getFields(t){let e=await this.getObject(t);return zi(e)}async getPositionFields(t){let e=await this.contract.getConfig(),i=await this.provider.getDynamicFieldObject({parentId:e.Positions,name:{type:"address",value:t}});return zi(i)}async getPositionFieldsByPositionId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}});return Tu(e,"position"),zi(e)}async getPositionTick(t,e){let i=await this.provider.getDynamicFieldObject({parentId:t,name:{type:e.type,value:e.fields}}),n=zi(i);if(n)return{tickIndex:this.math.bitsToNumber(n.name.fields.bits),initialized:n.value.fields.initialized,liquidityNet:new ti.default(this.math.bitsToNumber(n.value.fields.liquidity_net.fields.bits,128).toString()),liquidityGross:new ti.default(n.value.fields.liquidity_gross),feeGrowthOutsideA:new ti.default(n.value.fields.fee_growth_outside_a),feeGrowthOutsideB:new ti.default(n.value.fields.fee_growth_outside_b),rewardGrowthsOutside:n.value.fields.reward_growths_outside.map(r=>new ti.default(r))}}async getPositionAPR(t){let{poolId:e,getPrice:i,fees24h:n,tickLower:r,tickUpper:o}=t,s=await this.pool.getPool(e),a=this.math.bitsToNumber(s.tick_current_index.fields.bits),[l,u,f,b]=await Promise.all([this.coin.getMetadata(s.types[0]),this.coin.getMetadata(s.types[1]),i(s.types[0]),i(s.types[1])]);if(!f||!b||r>=o||a<r||a>=o)return{fees:"0",rewards:"0",total:"0"};let{minTokenA:v,minTokenB:T}=this.getRemoveLiquidityQuote(s,r,o),O=new U(this.math.scaleDown(v.toString(),l.decimals)).mul(f),P=new U(this.math.scaleDown(T.toString(),u.decimals)).mul(b),j=O.add(P),B=j.isZero()?new U(0):new U(n).mul(365).div(j).mul(100),D=new U(0);return await Promise.all(s.reward_infos.map(async q=>{let{emissions_per_second:K}=q.fields,Z=this.coin.formatCoinType(q.fields.vault_coin_type),[G,J]=await Promise.all([i(Z),this.coin.getMetadata(Z)]);!K||K==="0"||!G||(D=D.add(new U(new ti.default(K).shrn(64).toString()).div(10**J.decimals).mul(31536e3).mul(G).div(j).mul(100)))})),{fees:B.toString(),rewards:D.toString(),total:B.plus(D).toString()}}getRemoveLiquidityQuote(t,e,i){let n=new ti.default(0),r=new ti.default(t.liquidity),o=this.math.bitsToNumber(t.tick_current_index.fields.bits),s=this.math.tickIndexToSqrtPriceX64(e),a=this.math.tickIndexToSqrtPriceX64(i);if(o<e){let u=this.getTokenAFromLiquidity(r,s,a);return{minTokenA:this.adjustForSlippage(u),minTokenB:n}}if(o<i){let u=new ti.default(t.sqrt_price),f=this.getTokenAFromLiquidity(r,u,a),b=this.getTokenBFromLiquidity(r,s,u);return{minTokenA:this.adjustForSlippage(f),minTokenB:this.adjustForSlippage(b)}}let l=this.getTokenBFromLiquidity(r,s,a);return{minTokenA:n,minTokenB:this.adjustForSlippage(l)}}adjustForSlippage(t){let e={numerator:new ti.default(0),denominator:new ti.default(1e3)};return t.mul(e.denominator).div(e.denominator.add(e.numerator))}getTokenAFromLiquidity(t,e,i){let n=t.mul(i.sub(e)).shln(64),r=i.mul(e);return n.div(r)}getTokenBFromLiquidity(t,e,i){return t.mul(i.sub(e)).shrn(64)}async burn(t){let{pool:e,nft:i}=t,n=t.txb||new sm.TransactionBlock,r=await this.contract.getConfig(),o=await this.pool.getPoolTypeArguments(e);return n.moveCall({target:`${r.PackageId}::position_manager::burn`,typeArguments:o,arguments:[n.object(r.Positions),n.object(i),n.object(r.Versioned)]}),n}async getPositionLiquidityUSD(t){let{position:e,poolId:i,priceA:n,priceB:r}=t,o=await this.pool.getPool(i),s=this.pool.getTokenAmountsFromLiquidity({currentSqrtPrice:new ti.default(o.sqrt_price),lowerSqrtPrice:this.math.tickIndexToSqrtPriceX64(this.math.bitsToNumber(e.tick_lower_index.fields.bits)),upperSqrtPrice:this.math.tickIndexToSqrtPriceX64(this.math.bitsToNumber(e.tick_upper_index.fields.bits)),liquidity:new ti.default(e.liquidity===void 0?1e8:e.liquidity)}),[a,l]=await Promise.all([this.coin.getMetadata(o.types[0]),this.coin.getMetadata(o.types[1])]),u=new U(s[0].toString()).div(10**a.decimals).mul(n||0),f=new U(s[1].toString()).div(10**l.decimals).mul(r||0);return u.plus(f).toString()}async getUnclaimedFeesAndRewards(t){let{position:e,poolId:i}=t,[n,r,o]=await Promise.all([this.pool.getPool(i),this.nft.getPositionTick(i,e.tick_lower_index),this.nft.getPositionTick(i,e.tick_upper_index)]),s={...t,pool:n,tickLowerDetail:r,tickUpperDetail:o},[a,l]=await Promise.all([this.getUnclaimedFees(s),this.getUnclaimedRewards(s)]),{unclaimedFees:u,...f}=a,{unclaimedRewards:b,...v}=l;return{fees:a.unclaimedFees.toString(),rewards:b.toString(),total:u.plus(b).toString(),fields:{...f,...v}}}async getUnclaimedFees(t){let{position:e,pool:i,getPrice:n,tickLowerDetail:r,tickUpperDetail:o}=t,[s,a,l,u]=await Promise.all([this.coin.getMetadata(i.types[0]),this.coin.getMetadata(i.types[1]),n(i.types[0]),n(i.types[1])]),f=ok(this.math,{pool:i,position:e,tickLowerDetail:r,tickUpperDetail:o}),b=this.math.scaleDown(f.feeOwedA,s.decimals),v=this.math.scaleDown(f.feeOwedB,a.decimals);function T(j,B){return new U(1e6).mul(U.pow(10,B)).lt(j)}T(b,s.decimals)&&(b="0",f.feeOwedA="0"),T(v,a.decimals)&&(v="0",f.feeOwedB="0");let O=l===void 0?new U(0):new U(l).mul(b),P=u===void 0?new U(0):new U(u).mul(v);return{unclaimedFees:O.plus(P),scaledFeeOwedA:b,scaledFeeOwedB:v,...f}}async getUnclaimedRewards(t){let{position:e,pool:i,getPrice:n,tickLowerDetail:r,tickUpperDetail:o}=t,s=ck(this.math,{pool:i,position:e,tickLowerDetail:r,tickUpperDetail:o}),a=[...s],l=i.reward_infos.map(v=>this.coin.formatCoinType(v.fields.vault_coin_type)),u=await Promise.all([...i.reward_infos.map((v,T)=>this.coin.getMetadata(l[T]))]),f=await Promise.all(i.reward_infos.map((v,T)=>n(l[T])));u.forEach((v,T)=>{a[T]=this.math.scaleDown(a[T],v.decimals)});let b=new U(0);return i.reward_infos.some((v,T)=>{let O=f[T];return O?(b=b.plus(new U(O).mul(a[T])),!1):(b=b.plus(1),!0)}),{unclaimedRewards:b,collectRewards:s,scaledCollectRewards:a}}getObject(t){return this.getCacheOrSet("nft-object-"+t,async()=>{let e=await this.provider.getObject({id:t,options:{showContent:!0,showOwner:!0}});return Tu(e,"nft"),e})}},uk=class extends ns{isSUI(t){return(0,am.normalizeSuiAddress)(t)==="0x000000000000000000000000000000000000000000000000000002::sui::sui"}async getMetadata(t){return this.getCacheOrSet(`coin-metadata-${t}`,async()=>{let e=await this.provider.getCoinMetadata({coinType:t});if(!e)throw new Error(`Coin "${t}" is not found`);return e})}async selectTradeCoins(t,e,i){if(i.eq(0))return[];let n=[],r=[],o=new U(0),s;do s=await this.provider.getCoins({owner:t,coinType:e,cursor:s?.nextCursor}),n.push(...s.data);while(s.hasNextPage);n.sort((a,l)=>Number(l.balance)-Number(a.balance));for(let a of n)if(r.push(a.coinObjectId),o=o.add(a.balance),o.gte(i))break;return r}convertTradeCoins(t,e,i,n){return this.isSUI(i)?[t.splitCoins(t.gas,[t.pure(n.toNumber())])[0]]:e.map(r=>t.object(r))}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}formatCoinType(t,e=!1){let n=t.replace(/^0x/i,"");return n=n.replace(/^0+(2::sui::SUI)$/,"$1"),"0x"+(e&&n.length<64&&t!=="2::sui:SUI"?"0".repeat(64-n.length):"")+n}},dk=60*1e3,Fa=100,fk=class extends ns{async swap(t){let{coinTypeA:e,coinTypeB:i,address:n,amountSpecifiedIsInput:r,slippage:o}=t,s=new U(t.amountA),a=new U(t.amountB),l=await this.contract.getConfig(),u=await Promise.all(t.routes.map(async P=>{let j=await this.pool.getPoolTypeArguments(P.pool),[B,D]=await Promise.all([this.coin.getMetadata(j[0]),this.coin.getMetadata(j[1])]);return{...P,coinA:B,coinB:D,typeArguments:j}})),f=await this.coin.selectTradeCoins(n,e,s),{functionName:b,typeArguments:v}=this.getFunctionNameAndTypeArguments(u.map(({typeArguments:P})=>P),e,i),T=u.map(({nextTickIndex:P,coinA:j,coinB:B,a2b:D})=>{let q=this.math.tickIndexToPrice(P,j.decimals,B.decimals);return this.sqrtPriceWithSlippage(q,o,D,j.decimals,B.decimals)}),O=t.txb||new qa.TransactionBlock;return O.moveCall({target:`${l.PackageId}::swap_router::${b}`,typeArguments:v,arguments:[...u.map(({pool:P})=>O.object(P)),O.makeMoveVec({objects:this.coin.convertTradeCoins(O,f,e,s)}),O.pure((r?s:a).toFixed(0),"u64"),O.pure(this.amountOutWithSlippage(r?a:s,o,r),"u64"),...T.map(P=>O.pure(P,"u128")),O.pure(r,"bool"),O.pure(n,"address"),O.pure(Date.now()+(t.deadline||dk*3),"u64"),O.object(La.SUI_CLOCK_OBJECT_ID),O.object(l.Versioned)]}),O}async computeSwapResult(t){let{pools:e,amountSpecified:i,amountSpecifiedIsInput:n,address:r,tickStep:o}=t,s=await this.contract.getConfig(),a=e.map(b=>b.pool),l=await is(this.provider,a,{showContent:!0}),u=new qa.TransactionBlock;l.map(async b=>{let v=zi(b),T=e.find(D=>D.pool===v.id.id),O=this.math.bitsToNumber(v.tick_current_index.fields.bits),P=O-v.tick_spacing*(o||Fa),j=O+v.tick_spacing*(o||Fa);P=P<Na?Na:P,j=j>Ba?Ba:j;let B=this.pool.parsePoolType($a(b));u.moveCall({target:`${s.PackageId}::pool_fetcher::compute_swap_result`,typeArguments:B,arguments:[u.object(v.id.id),u.pure(T.a2b,"bool"),u.pure(new U(i).toFixed(0),"u128"),u.pure(n,"bool"),u.pure(this.math.tickIndexToSqrtPriceX64(T.a2b?P:j).toString(),"u128"),u.object(La.SUI_CLOCK_OBJECT_ID),u.object(s.Versioned)]})});let f=await this.provider.devInspectTransactionBlock({transactionBlock:u,sender:r});if(f.error)throw new Error(f.error);return f.events.map(b=>b.parsedJson)}async computeSwapResultV2(t){let{pools:e,amountSpecifiedIsInput:i,address:n,tickStep:r}=t,o=await this.contract.getConfig(),s=e.map(f=>f.pool),a=await is(this.provider,Array.from(new Set(s)),{showContent:!0}),l=new qa.TransactionBlock;e.forEach(async f=>{let b=a.find(B=>Yr(B)===f.pool),v=zi(b),T=this.math.bitsToNumber(v.tick_current_index.fields.bits),O=T-v.tick_spacing*(r||Fa),P=T+v.tick_spacing*(r||Fa);O=O<Na?Na:O,P=P>Ba?Ba:P;let j=this.pool.parsePoolType($a(b));l.moveCall({target:`${o.PackageId}::pool_fetcher::compute_swap_result`,typeArguments:j,arguments:[l.object(v.id.id),l.pure(f.a2b,"bool"),l.pure(new U(f.amountSpecified).toFixed(0),"u128"),l.pure(i,"bool"),l.pure(this.math.tickIndexToSqrtPriceX64(f.a2b?O:P).toString(),"u128"),l.object(La.SUI_CLOCK_OBJECT_ID),l.object(o.Versioned)]})});let u=await this.provider.devInspectTransactionBlock({transactionBlock:l,sender:n});if(u.error)throw new Error(u.error);return u.events.map(f=>f.parsedJson)}getFunctionNameAndTypeArguments(t,e,i){let n=[],r=["swap"];if(t.length===1)n=t[0],e===n[0]?r.push("a","b"):r.push("b","a");else{let o=t[0],s=t[1];e===o[0]?(r.push("a","b"),n.push(o[0],o[2],o[1])):(r.push("b","a"),n.push(o[1],o[2],o[0])),n.push(s[2],i),i===s[0]?r.push("c","b"):r.push("b","c")}return{functionName:r.join("_"),typeArguments:n}}amountOutWithSlippage(t,e,i){if(i){let r=new U(100).minus(e).div(100);return new U(t).mul(r).toFixed(0)}let n=new U(100).plus(e).div(100);return new U(t).mul(n).toFixed(0)}sqrtPriceWithSlippage(t,e,i,n,r){let o=new U(t).mul(i?new U(100).minus(e).div(100):new U(100).plus(e).div(100)),s=this.math.priceToSqrtPriceX64(o,n,r);return s.lt(new Su.BN(Cu))?Cu:s.gt(new Su.BN(ku))?ku:s.toString()}},Le=class{constructor(t,e){this.network=t,Wi(this,"pool"),Wi(this,"contract"),Wi(this,"math",new nk),Wi(this,"account",new X1),Wi(this,"coin"),Wi(this,"nft"),Wi(this,"trade"),Wi(this,"provider"),this.provider=e?e instanceof ur.SuiClient?e:new ur.SuiClient(e):new ur.SuiClient({url:t==="mainnet"?(0,ur.getFullnodeUrl)("mainnet"):(0,ur.getFullnodeUrl)("testnet")}),this.contract=new ik(this),this.pool=new rk(this),this.nft=new lk(this),this.coin=new uk(this),this.trade=new fk(this)}};var li=require("@msafe/sui3-utils"),Wu=require("@mysten/sui.js/bcs"),Fn=require("@mysten/sui.js/utils");var C_=require("@mysten/sui.js/transactions"),T_=require("@mysten/sui.js/utils"),x_=require("@mysten/sui.js/transactions"),I_=require("@mysten/sui.js/transactions");var Yu=require("@mysten/sui.js/utils"),ed=require("@mysten/sui.js/transactions");var N_=require("@msafe/sui3-utils"),Ja=require("@msafe/sui3-utils"),zu=require("@mysten/sui.js/bcs"),Rn=require("@mysten/sui.js/utils"),F_=require("@mysten/sui.js/transactions"),q_=require("@mysten/sui.js/transactions"),$_=require("@mysten/sui.js/transactions"),hk=Object.defineProperty,Rm=(t,e)=>{for(var i in e)hk(t,i,{get:e[i],enumerable:!0})},ne=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify((0,$m.default)(this.data))}},pk={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0xc33c3e937e5aa2009cc0c3fdb3f345a0c3193d4ee663ffc601fe8b894fbc4ba6",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0xd43348b8879c1457f882b02555ba862f2bc87bcc31b16294ca14a82f608875d2",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},mk={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0xcec352932edc6663a118e8d64ed54da6b8107e8719603bf728f80717592cd9e8",version:3,config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"",dividend_settle_id:""}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{support_stakings:[{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}]}}},gk={fullRpcUrl:"https://fullnode.testnet.sui.io/",simulationAccount:{address:"0xcd0247d0b67e53dde69b285e7a748e3dc390e8a5244eb9dd9c5c53d95e4cf0aa"},cetus_config:{package_id:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",published_at:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",config:{coin_list_id:"0x257eb2ba592a5480bba0a97d05338fab17cc3283f8df6998a0e12e4ab9b84478",launchpad_pools_id:"0xdc3a7bd66a6dcff73c77c866e87d73826e446e9171f34e1c1b656377314f94da",clmm_pools_id:"0x26c85500f5dd2983bf35123918a144de24e18936d0b234ef2b49fbb2d3d6307d",admin_cap_id:"0x1a496f6c67668eb2c27c99e07e1d61754715c1acf86dac45020c886ac601edb8",global_config_id:"0xe1f3db327e75f7ec30585fa52241edf66f7e359ef550b533f89aa1528dd1be52",coin_list_handle:"0x3204350fc603609c91675e07b8f9ac0999b9607d83845086321fca7f469de235",launchpad_pools_handle:"0xae67ff87c34aceea4d28107f9c6c62e297a111e9f8e70b9abbc2f4c9f5ec20fd",clmm_pools_handle:"0xd28736923703342b4752f5ed8c2f2a5c0cb2336c30e1fed42b387234ce8408ec"}},clmm_pool:{package_id:"0x0868b71c0cba55bf0faf6c40df8c179c67a4d0ba0e79965b68b3d72d7dfbf666",published_at:"0x1c29d658882c40eeb39a8bb8fe58f71a216a918acb3e3eb3b47d24efd07257f2",config:{pools_id:"0xc090b101978bd6370def2666b7a31d7d07704f84e833e108a969eda86150e8cf",global_config_id:"0x6f4149091a5aea0e818e7243a13adcfb403842d670b9a2089de058512620687a",global_vault_id:"0xf3114a74d54cbe56b3e68f9306661c043ede8c6615f0351b0c3a93ce895e1699",admin_cap_id:""}},integrate:{package_id:"0x8627c5cdcd8b63bc3daa09a6ab7ed81a829a90cafce6003ae13372d611fbb1a9",published_at:"0xf1a5d0c5b0593e41d13f9684ca91365bdfe54a98836c1d33c90e361a031fac74",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6",published_at:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6"},aggregatorUrl:"https://api-sui.devcetus.com/router",swapCountUrl:"https://api-sui.devcetus.com/v2/sui/swap/count"},_k={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4"}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},haedal:{package_id:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472",published_at:"0x9dac9c5770e5f930d2223ff68782958701acfaee9337e8d8363978ce7670dffb",config:{support_stakings:[{staking_id:"0x6e384d2da5b040b27f973155e25bbe4beb0ad5ca8ee0a36e20dff356094c9fc0",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472::hasui::HASUI"}]}}},uo=(t,e)=>{let i=t==="sui:mainnet"?pk:gk,n=new wh(i);return n.senderAddress=e.address,n},ii=(t,e)=>{let i=uo(t,e),n=t==="sui:mainnet"?mk:_k;return new Ah(n,i)},bk=async(t,e,i)=>await uo(i,e).Position.createAddLiquidityFixTokenPayload(t?.parameter,t?.gasEstimateArg),wk=async(t,e,i)=>await uo(i,e).Position.createAddLiquidityFixTokenPayload(t?.parameter,t?.gasEstimateArg),yk=async(t,e,i)=>await uo(i,e).Position.closePositionTransactionPayload(t),vk=async(t,e,i)=>await uo(i,e).Position.removeLiquidityTransactionPayload(t),kk=async(t,e,i)=>await uo(i,e).Rewarder.collectRewarderTransactionPayload(t),Ck=class Um extends ne{constructor(e){super(e),this.data=e}txType=Lm.TransactionType.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await bk(r,i,n)}static fromData(e){return new Um(e)}},Tk=class Vm extends ne{constructor(e){super(e),this.data=e}txType=Km.TransactionType.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await kk(r,i,n)}static fromData(e){return new Vm(e)}},Sk=class zm extends ne{constructor(e){super(e),this.data=e}txType=Wm.TransactionType.Other;txSubType="DecreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await vk(r,i,n)}static fromData(e){return new zm(e)}},xk=async(t,e,i)=>await ii(i,e).Farms.openPositionAddLiquidityStakePaylod(t),Ak=async(t,e,i)=>await ii(i,e).Farms.addLiquidityFixCoinPayload(t),Ik=async(t,e,i)=>await ii(i,e).Farms.removeLiquidityPayload(t),Ok=async(t,e,i)=>await ii(i,e).Farms.removeLiquidityPayload(t),Pk=async(t,e,i)=>await ii(i,e).Farms.claimFeeAndClmmReward(t),Dk=async(t,e,i)=>{let n=ii(i,e);return console.log("getFarmingHarvest txbParams: ",t),await n.Farms.harvestPayload(t)},Ek=async(t,e,i)=>{let n=ii(i,e),r=Object.values(t);return console.log("getFarmingBatchHarvest params: ",r),await n.Farms.batchHarvestPayload(r)},Mk=async(t,e,i)=>await ii(i,e).Farms.depositPayload(t),jk=async(t,e,i)=>await ii(i,e).Farms.withdrawPayload(t),Bk=class Hm extends ne{constructor(e){super(e),this.data=e}txType=Gm.TransactionType.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await xk(r,i,n)}static fromData(e){return new Hm(e)}},Nk=class Xm extends ne{constructor(e){super(e),this.data=e}txType=Zm.TransactionType.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ek(r,i,n)}static fromData(e){return new Xm(e)}},Fk=class Qm extends ne{constructor(e){super(e),this.data=e}txType=Jm.TransactionType.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Pk(r,i,n)}static fromData(e){return new Qm(e)}},Rk=class eg extends ne{constructor(e){super(e),this.data=e}txType=Ym.TransactionType.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ik(r,i,n)}static fromData(e){return new eg(e)}},qk=class ig extends ne{constructor(e){super(e),this.data=e}txType=tg.TransactionType.Other;txSubType="FarmingHarvest";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Dk(r,i,n)}static fromData(e){return new ig(e)}},Lk=class rg extends ne{constructor(e){super(e),this.data=e}txType=ng.TransactionType.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ak(r,i,n)}static fromData(e){return new rg(e)}},$k=class sg extends ne{constructor(e){super(e),this.data=e}txType=og.TransactionType.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ok(r,i,n)}static fromData(e){return new sg(e)}},Uk=class cg extends ne{constructor(e){super(e),this.data=e}txType=ag.TransactionType.Other;txSubType="FarmingStake";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Mk(r,i,n)}static fromData(e){return new cg(e)}},Kk=class ug extends ne{constructor(e){super(e),this.data=e}txType=lg.TransactionType.Other;txSubType="FarmingUnstake";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await jk(r,i,n)}static fromData(e){return new ug(e)}},Vk=class fg extends ne{constructor(e){super(e),this.data=e}txType=dg.TransactionType.Other;txSubType="IncreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await wk(r,i,n)}static fromData(e){return new fg(e)}},Wk=class pg extends ne{constructor(e){super(e),this.data=e}txType=hg.TransactionType.Other;txSubType="RemoveLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await yk(r,i,n)}static fromData(e){return new pg(e)}},zk=async(t,e,i)=>await ii(i,e).XCetusModule.convertPayload(t),Gk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemLockPayload(t),Hk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemDividendV2Payload(t.venft_id,t.bonus_types,t.xTokenType),Zk=async(t,e,i)=>await ii(i,e).XCetusModule.cancelRedeemPayload(t),Xk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemPayload(t),Jk=class gg extends ne{constructor(e){super(e),this.data=e}txType=mg.TransactionType.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Zk(r,i,n)}static fromData(e){return new gg(e)}},Qk=class bg extends ne{constructor(e){super(e),this.data=e}txType=_g.TransactionType.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Hk(r,i,n)}static fromData(e){return new bg(e)}},Yk=class yg extends ne{constructor(e){super(e),this.data=e}txType=wg.TransactionType.Other;txSubType="xCETUSConvert";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await zk(r,i,n)}static fromData(e){return new yg(e)}},eC=class kg extends ne{constructor(e){super(e),this.data=e}txType=vg.TransactionType.Other;txSubType="xCETUSRedeem";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Xk(r,i,n)}static fromData(e){return new kg(e)}},tC=class Tg extends ne{constructor(e){super(e),this.data=e}txType=Cg.TransactionType.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Gk(r,i,n)}static fromData(e){return new Tg(e)}},iC=class{application="cetus";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:i}=t;return{txType:qm.TransactionType.Other,txSubType:i,intentionData:{txbParams:{...e},action:i}}}async build(t){let{suiClient:e,account:i,network:n}=t;console.log("helper build input: ",t),console.log("helper build input.intentionData: ",t.intentionData),console.log("helper build input.intentionData JSON: ",JSON.stringify(t.intentionData));let r;switch(t.txSubType){case"OpenAndAddLiquidity":r=Ck.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Vk.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Sk.fromData(t.intentionData);break;case"RemoveLiquidity":r=Wk.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=Tk.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=Bk.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=Lk.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=Rk.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=$k.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=Fk.fromData(t.intentionData);break;case"FarmingHarvest":r=qk.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=Nk.fromData(t.intentionData);break;case"FarmingStake":r=Uk.fromData(t.intentionData);break;case"FarmingUnstake":r=Kk.fromData(t.intentionData);break;case"xCETUSConvert":r=Yk.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=tC.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=Qk.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Jk.fromData(t.intentionData);break;case"xCETUSRedeem":r=eC.fromData(t.intentionData);break;default:throw new Error("not implemented")}return console.log("helper build intention: ",r),console.log("helper build account: ",i),console.log("helper build network: ",n),r.build({suiClient:e,account:i,network:n})}},xg={};Rm(xg,{contractId:()=>Og,default:()=>nC,feeObjId:()=>Eg,roleObjId:()=>Pg,status:()=>Ig,transaction:()=>Ag,upgradeCapObjId:()=>Mg,vaultObjId:()=>Dg});var Ag="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Ig="success",Og="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Pg="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Dg="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Eg="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Mg="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",nC={transaction:Ag,status:Ig,contractId:Og,roleObjId:Pg,vaultObjId:Dg,feeObjId:Eg,upgradeCapObjId:Mg},jg={};Rm(jg,{contractId:()=>Fg,default:()=>rC,feeObjId:()=>Lg,roleObjId:()=>Rg,status:()=>Ng,transaction:()=>Bg,upgradeCapObjId:()=>$g,vaultObjId:()=>qg});var Bg="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Ng="success",Fg="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Rg="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",qg="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Lg="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",$g="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",rC={transaction:Bg,status:Ng,contractId:Fg,roleObjId:Rg,vaultObjId:qg,feeObjId:Lg,upgradeCapObjId:$g},oC="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",sC="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",aC="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",cC="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",lC="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",uC="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",dC="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",fC="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",cm=xg,lm=jg,hC=new Map([["dev",{env:"dev",rpc:{url:oC},backend:{url:lC},contract:cm}],["stg",{env:"stg",rpc:{url:sC},backend:{url:uC},contract:cm}],["prev",{env:"prev",rpc:{url:aC},backend:{url:dC},contract:lm}],["prod",{env:"prod",rpc:{url:cC},backend:{url:fC},contract:lm}]]);function pC(t,e){let i=hC.get(t);if(!i)throw new Error(`Env not supported: ${t}`);return e&&e.rpc&&(i.rpc=e.rpc),e&&e.backend&&(i.backend=e.backend),e&&e.contract&&(i.contract=e.contract),i}var di=class extends Error{mpayErrorCode;context;constructor(t,e,i={}){let{cause:n,context:r}=i;n?super(`[MPay] ${e}: ${n}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}},mC=class extends di{constructor(){super(11,"Backend is not specified")}},gC=class extends di{constructor(){super(1,"Wallet not connected")}},Iu=class extends di{constructor(t,e){super(10,t,{context:e})}},_C=class fr{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof ln.AxiosError)throw new Iu(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Iu(e.data.code)}throw new Iu(e.status.toString())}async getIncomingStreams(e,i){let n=await ln.default.post(`${this.apiURL}/stream`,{recipient:e,...i});return fr.parseResponseData(n)}async getOutgoingStreams(e,i){let n=await ln.default.post(`${this.apiURL}/stream`,{sender:e,...i});return fr.parseResponseData(n)}async getStreamHistory(e){let i=await ln.default.post(`${this.apiURL}/stream-events`,e),n=fr.parseResponseData(i);return n.data.forEach(r=>{let o=r;return o.data.type==="create_stream"?o.data.balance=BigInt(o.data.balance):o.data.type==="cancel_stream"?o.data.withdrawAmount=BigInt(o.data.withdrawAmount):o.data.type==="claim"||o.data.type==="auto_claim"?o.data.claimAmount=BigInt(o.data.claimAmount):o.data.type==="set_auto_claim"&&(o.data.enabled=!!o.data.enabled),o.createdAt=new Date(o.createdAt),o}),n}async getAllCoinTypes(e){let i=await ln.default.post(`${this.apiURL}/stream-info`,{address:e});return fr.parseResponseData(i)}async getAllRecipients(e,i){let n=await ln.default.post(`${this.apiURL}/stream-info`,{sender:e,status:i});return fr.parseResponseData(n)}async getAllSenders(e,i){let n=await ln.default.post(`${this.apiURL}/stream-info`,{recipient:e,status:i});return fr.parseResponseData(n)}},Kg=class Vg{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Ug.SuiClient({url:e.rpc.url}),e.backend&&(this._backend=new _C(e.backend.url))}static new(e,i){let n=pC(e,i);return new Vg(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new mC;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new gC;return this.signer}async walletAddress(){return this.wallet.address()}},um=50n,Ou=10000n,bC=25n,dm=100000000n,dr=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},fm=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},Ya=class Wg{constructor(e){return this.result=e,new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(i,n){if(n in i)return Reflect.get(i,n);let r=s=>new Wg(i.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield r(s),s++};if(typeof n=="symbol")return;let o=parseInt(n,10);if(!(Number.isNaN(o)||o<0))return r(o)}})}moveArg(){return this.result}},hm=class extends di{constructor(t,e){super(3,t,{context:e})}},wC=class{constructor(t){this.results=t}callResult(t){return this.results.results[t]}returnValue(t,e){return t.returnValues[e]}getValue(t=0,e=0){let i=this.callResult(t);return this.returnValue(i,e)}getAddress(t=0,e=0){let[i,n]=this.getValue(t,e);if(n!=="address")throw new hm("Invalid contract return type.",{ctx:{expectType:"address",gotType:n}});return(0,zg.normalizeSuiAddress)(Bu.Buffer.from(i).toString("hex"))}getU64(t=0,e=0){let[i,n]=this.getValue(t,e);if(n!=="u64")throw new hm("Invalid contract return type.",{ctx:{expectType:"u64",gotType:n}});return Bu.Buffer.from(i).readBigInt64LE()}},ui=class extends di{constructor(t,e,i){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:i}})}},Gg={groupId:"string",name:"string"},yC=64;function vC(t){return Hg(t),Gu.bcs.ser(Gg,t).toString("base64")}function Nu(t){let e=Gu.bcs.de(Gg,t,"base64");return Hg(e),e}function Hg(t){if(!pm(t.name))throw new ui("Invalid metadata: Name contains unknown character");if(!pm(t.groupId))throw new ui("Invalid metadata: Group ID contains unknown character");if(t.name.length>yC)throw new ui("Invalid metadata: Name exceed max length 64")}function pm(t){return/^[\x00-\x7F]+$/.test(t)}function Zg(t,e){return(0,us.normalizeStructTag)(t)===(0,us.normalizeStructTag)(e)}function no(t,e){return(0,us.normalizeStructTag)(t)===(0,us.normalizeStructTag)(e)}var Xg="txn.gas";function kC(){return Ih()}var Fu=class Jg{constructor(e,i,n){this.globals=e,this.feeContract=i,this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:vC({name:e.name,groupId:kC()}),coinType:(0,ls.normalizeStructTag)(e.coinType),recipients:e.recipients.map(i=>({address:i.address,cliffAmount:i.cliffAmount,amountPerEpoch:i.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let i=new ju.TransactionBlock,n=this.calculateFeesInternal(e),r=this.getCreateStreamCoinRequests(e,n),o=await this.wallet.requestCoins(r),s=await this.addMergeCoins(i,o[0]),a;r.length>1?a=await this.addMergeCoins(i,o[1]):a=s;for(let l=0;l<e.recipients.length;l++){let u=e.recipients[l],f=this.amountForRecipient(u,e.numberEpoch),b=this.getStreamFeeLocal(f),[v]=i.splitCoins(s,[i.pure(f+b,"u64")]),[T]=i.splitCoins(a,[i.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(i,{paymentCoin:new Ya(v),flatFeeCoin:new Ya(T),metadata:e.metadata,recipient:u.address,timeStart:e.startTime,cliff:u.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:u.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return i}calculateCreateStreamFees(e){let i=Jg.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(i)}feeParams(){return{createFeePercent:{numerator:um,denominator:Ou},claimFeePercent:{numerator:bC,denominator:Ou},flatFeePerStream:dm}}async addMergeCoins(e,i){let n;return i.mergedCoins&&i.mergedCoins.length?(e.mergeCoins(e.object(i.primaryCoin),i.mergedCoins.map(r=>e.object(r))),n=e.object(i.primaryCoin)):i.primaryCoin===Xg?n=e.gas:n=e.object(i.primaryCoin),n}getCreateStreamCoinRequests(e,i){let n=e.coinType;return Zg(n,ls.SUI_TYPE_ARG)?[{coinType:n,amount:i.totalAmount+i.streamFeeAmount+i.flatFeeAmount}]:[{coinType:n,amount:i.totalAmount+i.streamFeeAmount},{coinType:ls.SUI_TYPE_ARG,amount:i.flatFeeAmount}]}calculateFeesInternal(e){let i=e.recipients.reduce((n,r)=>{let o=this.amountForRecipient(r,e.numberEpoch),s=this.getStreamFeeLocal(o);return{totalAmount:n.totalAmount+o,streamFeeAmount:n.streamFeeAmount+s}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...i}}amountForRecipient(e,i){return BigInt(e.amountPerEpoch)*BigInt(i)+BigInt(e.cliffAmount)}get flatSuiFee(){return dm}getStreamFeeLocal(e){return e*um/Ou}async getStreamFeeRemote(e){let i=this.feeContract.streamingFee(new ju.TransactionBlock,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:i});return new wC(n).getU64()}get wallet(){return this.globals.wallet}},CC="0x0000000000000000000000000000000000000000000000000000000000000006",Qg=class{constructor(t,e,i){this.moduleName=t,this.config=e,this.globals=i}addContractCall(t,e){let i=`${this.config.contractId}::${this.moduleName}::${e.method}`;return t.add(Ru.Transactions.MoveCall({target:i,arguments:e.arguments.map(n=>n instanceof fm?n.moveArgs(t):n instanceof dr?n.moveArg(t):n instanceof Ya?n.moveArg():t.pure(n)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,i=[],n=[]){t.add(Ru.Transactions.MoveCall({target:e,arguments:i.map(r=>r instanceof fm?r.moveArgs(t):r instanceof dr?r.moveArg(t):r instanceof Ya?r.moveArg():t.pure(r)),typeArguments:n}))}makeObject(t){return typeof t=="string"?new dr(t):t}vaultObject(){return new dr(this.config.vaultObjId)}roleObject(){return new dr(this.config.roleObjId)}feeObject(){return new dr(this.config.feeObjId)}clockObject(){return new dr(CC)}},Yg=class En extends Qg{constructor(e,i){super(En.ModuleName,e,i),this.config=e,this.globals=i}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_streaming_fee,arguments:[n,r,i],typeArgs:[]})}setStreamingFlatFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_streaming_flat_fee,arguments:[n,r,i],typeArgs:[]})}setClaimFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_claim_fee,arguments:[n,r,i],typeArgs:[]})}streamingFee(e,i){let n=this.feeObject();return this.addContractCall(e,{method:En.MethodName.streaming_fee,arguments:[n,i],typeArgs:[]})}claimFee(e,i){return this.addContractCall(e,{method:En.MethodName.claim_fee,arguments:[this.feeObject(),i],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:En.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}},ic=class Vt extends Qg{constructor(e,i){super(Vt.ModuleName,e,i),this.config=e,this.globals=i}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(e,i){let n=this.feeObject(),r=this.vaultObject(),o=this.makeObject(i.paymentCoin),s=this.makeObject(i.flatFeeCoin),a=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.create_stream,arguments:[n,r,o,s,i.metadata,i.recipient,i.timeStart,i.cliff,i.epochInterval,i.numEpoch,i.amountPerEpoch,i.cancelable,a],typeArgs:[i.coinType]})}setAutoClaim(e,i){let n=this.makeObject(i.streamId);return this.addContractCall(e,{method:Vt.MethodName.set_auto_claim,arguments:[n,i.enabled],typeArgs:[i.coinType]})}cancelStream(e,i){let n=this.makeObject(i.streamId),r=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.cancel_stream,arguments:[n,r],typeArgs:[i.coinType]})}claimStream(e,i){let n=this.makeObject(i.streamId),r=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.claim_stream,arguments:[n,r],typeArgs:[i.coinType]})}claimStreamByProxy(e,i){let n=this.makeObject(i.streamId),r=this.vaultObject(),o=this.feeObject(),s=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.claim_stream_by_proxy,arguments:[n,r,o,s],typeArgs:[i.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.claim_stream_by_proxy}`}},e0=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Yg(e,t),this.streamContract=new ic(e,t)}feeContract;streamContract;async createStreams(t){let e=Fu.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new Fu(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,i){let n=new os.TransactionBlock;return this.streamContract.setAutoClaim(n,{streamId:t,enabled:e,coinType:i})}claimStream(t,e){let i=new os.TransactionBlock;return this.streamContract.claimStream(i,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let i=new os.TransactionBlock;return this.streamContract.claimStreamByProxy(i,{streamId:t,coinType:e})}cancelStream(t,e){let i=new os.TransactionBlock;return this.streamContract.cancelStream(i,{streamId:t,coinType:e}),i}},Ri=class extends di{constructor(t,e={}){super(0,t,e)}};async function TC(t){let e=[];for(;await t.hasNext();){let i=await t.next();e.push(i)}return e&&Array.isArray(e[0])?e.flat(1):e}var SC=class{constructor(t){this.requester=t,this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},t0=class{constructor(t){this.requester=t,this.pager=new SC(t),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}},xC=class extends di{constructor(t,e,i){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:e,gotAmount:i}}),this.coinType=t,this.requestAmount=e,this.gotAmount=i}},AC=25;async function IC(t,e,i,n="0x2::sui::SUI",r=AC){let o=new OC(t,e,n,r),s=BigInt(0),a=[];for(;await o.hasNext()&&s<i;){let l=await o.next();l&&(a.push(l),s+=BigInt(l.balance))}if(s<i)throw new xC(n,i,s);return a}var OC=class extends t0{constructor(t,e,i,n){super(new PC(t,e,i,n)),this.suiClient=t,this.owner=e,this.coinType=i,this.reqPageSize=n}},PC=class{constructor(t,e,i,n){if(this.suiClient=t,this.owner=e,this.coinType=i,this.reqPageSize=n,n<=0)throw new Ri("Invalid reqPageSize")}nextCursor;async doNextRequest(){let t=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=t.nextCursor,{data:t.data,hasNext:t.hasNextPage}}},DC=class extends di{constructor(){super(7,"Connected wallet is not creator")}},mm=class extends di{constructor(){super(8,"Connected wallet is not recipient")}},gm=class extends di{constructor(t,e){super(6,t,{context:e})}},EC=class extends di{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}},MC=(1n<<64n)-1n,ec=1e3;function _m(t){let e;typeof t=="number"?e=t:typeof t=="bigint"?e=Number(t):e=t.toMillis();let i=Math.round(e/ec);return Te.fromMillis(i*ec)}function bm(t){let e;typeof t=="number"?e=t:typeof t=="bigint"?e=Number(t):e=t.toMillis();let i=Math.round(e/ec);return je.fromMillis(i*ec)}var Hu=class Mn{constructor(e,i,n){this.globals=e,this.streamId=i,this.rawData=n,this.streamContract=new ic(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,i){let n=await Mn.fetchStreamData(e,i);return new Mn(e,i,n)}static fromObjectData(e,i,n){let r=Mn.parseRawStreamData(i,n);return new Mn(e,i,r)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await Mn.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new Ri("Object Id does not align");this.rawData=Mn.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new DC;let e=new ss.TransactionBlock;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new mm;let e=new ss.TransactionBlock;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new mm;let i=new ss.TransactionBlock;return this.streamContract.setAutoClaim(i,{streamId:this.streamId,coinType:this.coinType,enabled:e}),i}async claimByProxy(){let e=new ss.TransactionBlock;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return(0,ds.normalizeStructTag)(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return bm(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Nu(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Nu(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return _m(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,i=e.epochInterval*e.totalEpoch;return bm(i)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:_m((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===MC?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Te.now().toMillis(),i=this.timeStart.toMillis();if(e<i)return-1n;let n=Math.floor((e-i)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,i){let n=await e.suiClient.getObject({id:i,options:{showContent:!0,showType:!0}});return Mn.parseRawStreamData(i,n)}static parseRawStreamData(e,i){if(i.error)throw i.error.code==="notExists"?new EC(e):new gm(`get stream data: ${i.error.code}`,{streamId:e,...i.error});let n=i.data.content;if(n.dataType!=="moveObject")throw new gm("Unexpected object type",{gotType:n.dataType});let{typeParams:r}=(0,ds.parseStructTag)(n.type),o=(0,ds.normalizeStructTag)(r[0]),s=n.fields,a=s.config.fields,l=s.status.fields;return{coinType:o,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(a.amount_per_epoch),cancelable:a.cancelable,cliff:BigInt(a.cliff),creator:a.creator,epochInterval:BigInt(a.epoch_interval),metadata:a.metadata,recipient:a.recipient,timeStart:BigInt(a.time_start),totalEpoch:BigInt(a.total_epoch)},status:{status:l.status,epochCanceled:BigInt(l.epoch_canceled),epochClaimed:BigInt(l.epoch_claimed)}}}},jC=class extends di{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}},BC=1e3,NC=class{constructor(t){this.globals=t,this.coinMetaHelper=new FC(t.suiClient),this.createStreamHelper=new e0(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new jC(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},i=t.totalAmount*e.numerator/e.denominator,n=(t.totalAmount-i)/t.steps,r={realTotalAmount:n*t.steps+i,cliffAmount:i,amountPerStep:n};return this.validateStreamAmount(r,t.totalAmount),r}calculateTimelineByInterval(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),i={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(i),i}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,i=t.timeStart.plus(je.fromMillis(Number(e*t.steps))),n={timeStart:t.timeStart,timeEnd:i,interval:je.fromMillis(Number(e)),steps:t.steps};return this.validateTimeline(n),n}async getBalance(t,e){let i=await this.globals.suiClient.getBalance({owner:t,coinType:e}),n=await this.getCoinMeta(e);return{...i,coinType:(0,lo.normalizeStructTag)(i.coinType),coinMeta:n}}async getAllBalance(t){let e=await this.globals.suiClient.getAllBalances({owner:t}),i=await Promise.all(e.map(n=>this.getCoinMeta(n.coinType)));return e.map((n,r)=>({...n,coinType:(0,lo.normalizeStructTag)(n.coinType),coinMeta:i[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new ui("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new ui("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<BC)throw new ui("Interval shall be at least 1 second","interval",t.interval)}},FC=class{constructor(t){this.suiClient=t,this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=(0,lo.normalizeStructTag)(t||lo.SUI_TYPE_ARG);if(this.coinMetaReg.has(e))return this.coinMetaReg.get(e);let i=await this.queryCoinMeta(e);return i&&this.coinMetaReg.set(e,i),i}async queryCoinMeta(t){return await this.suiClient.getCoinMetadata({coinType:t})||void 0}},Pu=class extends di{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}},RC=25;async function wm(t,e,i){let n=new i0(e),r=new n0(t,n,i);return await TC(r)}var i0=class{constructor(t){this.ids=t,this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},n0=class extends t0{constructor(t,e,i){super(new qC(t,e,i)),this.suiClient=t,this.idIter=e,this.options=i}},qC=class{constructor(t,e,i){this.suiClient=t,this.stringIter=e,this.options=i,this.filter=i?.filter,this.pageSize=i?.pageSize||RC,this.objectOptions=i?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let t=[];for(;t.length<this.pageSize&&await this.stringIter.hasNext();){let n=await this.stringIter.next();n&&t.push(n)}let e=await this.suiClient.multiGetObjects({ids:t,options:this.objectOptions}),i;if(this.filter){let{filter:n}=this;i=e.filter(r=>n?.(r))}else i=e;return{data:i,hasNext:await this.stringIter.hasNext()}}},LC=class Ka{constructor(e,i){if(this.globals=e,this.streams=i,i.length===0)throw new Pu("stream size 0");let n=i.map(r=>r.groupId);if(new Set(n).size!==1)throw new ui("Stream does not have same group ID")}type="StreamGroup";static async new(e,i){let n=await wm(e.suiClient,i);return n.forEach(r=>{if(!r)throw new Ri("stream group object data undefined")}),Ka.newFromObjectResponse(e,i,n)}static async newFromObjectResponse(e,i,n){let r=await Ka.parseGroupStreams(e,i,n);return new Ka(e,r)}static checkStreamGroup(e){let i=e.map(o=>o.groupCommonInfo),n=i[0],r=!0;return i.forEach(o=>{$C(n,o)||(r=!1)}),r}async refresh(){let e=await wm(this.globals.suiClient,this.streams.map(i=>i.streamId));this.streams.forEach((i,n)=>{i.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,i)=>e+i.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,i)=>e+i.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,i)=>i.nextReleaseAmount===null?e:e+i.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,i)=>e+i.totalAmount,0n),streamed:this.streams.reduce((e,i)=>e+i.streamedAmount,0n),claimed:this.streams.reduce((e,i)=>e+i.claimedAmount,0n),claimable:this.streams.reduce((e,i)=>e+i.claimable,0n),canceled:this.streams.reduce((e,i)=>e+i.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,i,n){let r=n.map((o,s)=>Hu.fromObjectData(e,i[s],o)).filter(o=>!!o);if(new Set(r.map(o=>o.groupId)).size!==1)throw new Pu("Not same group ID");if(!this.checkStreamGroup(r))throw new Pu("Not same stream settings");return r}};function $C(t,e){return t.name===e.name&&t.groupId===e.groupId&&t.creator===e.creator&&t.start.toMillis()===e.start.toMillis()&&t.interval.toMillis()===e.interval.toMillis()&&t.steps===e.steps&&t.cancelable===e.cancelable}var ym=class qu{constructor(e,i){this.it=e,this.pageSize=i}static async newIncoming(e){let i=await vm.newIncoming(e);return new qu(i,e.pageSize)}static async newOutgoing(e){let i=await vm.newOutgoing(e);return new qu(i,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},vm=class Lu{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let i=await km.newIncomingQuery(e);return new Lu(i)}static async newOutgoing(e){let i=await km.newOutgoingQuery(e);return new Lu(i)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let i=await this.requester.doNextRequest();if(i===null)throw new Ri("No more results");return i}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Ri("No more results");return e}},km=class $u{constructor(e,i,n,r){this.globals=e,this.recipient=i,this.groupRefs=n,this.query=r,this.current=0;let o=new i0(n.flat().map(s=>s.streamId));this.objectIter=new n0(e.suiClient,o)}current=0;objectIter;static async newIncomingQuery(e){let i=zC(e.query),n=await e.globals.walletAddress(),r=(await e.globals.backend.getIncomingStreams(n,i)).filter(s=>(0,$n.normalizeSuiAddress)(s.recipient)===(0,$n.normalizeSuiAddress)(n)),o=Cm(r);return new $u(e.globals,n,o,e.query)}static async newOutgoingQuery(e){let i=GC(e.query),n=await e.globals.walletAddress(),r=await e.globals.backend.getOutgoingStreams(n,i),o=Cm(r);return new $u(e.globals,n,o,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let i=await VC(this.globals,e[0].streamId,this.objectIter);return this.current++,r0(i,this.query)?i:this.doNextRequest()}if(e.length>1){let i=await WC(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,KC(i,this.query)?i:this.doNextRequest()}throw new Ri("Stream group with no stream")}};function Cm(t){let e=new Map;return t.forEach(i=>{let n=e.get(i.groupId);n?(n.push(i),e.set(i.groupId,n)):e.set(i.groupId,[i])}),Array.from(e.values()).sort((i,n)=>Te.fromISO(n[0].createDate).toMillis()-Te.fromISO(i[0].createDate).toMillis())}function r0(t,e){if(e===void 0)return!0;let i=UC(t,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?t.progress.claimable!==0n:t.progress.claimable===0n;return i&&n}return i}function UC(t,e){return e===void 0?!0:Array.isArray(e)?e.includes(t.progress.status):t.progress.status===e}function KC(t,e){if(!e)return!0;let i=!1;return t.streams.forEach(n=>{r0(n,e)&&(i=!0)}),i}async function VC(t,e,i){let n=await o0(i,e);return Hu.fromObjectData(t,e,n)}async function WC(t,e,i){let n=[];for(;n.length<e.length;){let r=await o0(i,e[n.length]);n.push(r)}return LC.newFromObjectResponse(t,e,n)}async function o0(t,e){if(!await t.hasNext())throw new Ri("object iterator has been consumed");let i=await t.next();if(!i||i.error||i.data===void 0||i.data===null)throw new Ri("object iterator undefined response",{cause:i?.error});if(i?.data?.objectId!==e)throw new Ri("stream id not aligned");return i}function zC(t){return{status:Zu(t?.status),coinType:s0(t?.coinType),sender:a0(t?.sender)}}function GC(t){return{status:Zu(t?.status),coinType:s0(t?.coinType),recipient:a0(t?.recipient)}}function Zu(t){return t===void 0||t.length===0?"all":Array.isArray(t)?t.reduce((e,i)=>{let n=Zu(i);return!e||e===n?n:"all"},void 0):HC(t)}function HC(t){switch(t){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new ui("Unknown stream filtered status")}}function s0(t){if(t)return Array.isArray(t)?t.length!==0?t.map(e=>(0,$n.normalizeStructTag)(e)):void 0:(0,$n.normalizeStructTag)(t)}function a0(t){if(t)return Array.isArray(t)?t.length!==0?t.map(e=>(0,$n.normalizeSuiAddress)(e)):void 0:(0,$n.normalizeSuiAddress)(t)}var ZC=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},XC=class{constructor(t){this.account=t}async address(){return this.account.address}},JC=class{constructor(t,e){this.singleWallet=t,this.suiClient=e}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(t){return Promise.all(t.map(e=>this.requestCoin(e)))}async requestCoin(t){if(Zg(t.coinType,hr.SUI_TYPE_ARG))return{primaryCoin:Xg};if(t.amount<=0)throw new ui("Invalid coin request","coinAmount",t.amount);let e=await IC(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new Ri("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(i=>i.coinObjectId)}}},QC=class{globals;helper;constructor(t,e){this.globals=Kg.new(t,e),this.helper=new NC(this.globals)}connectSingleWallet(t){let e=new JC(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new ZC(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return Hu.new(this.globals,t)}async getIncomingStreams(t,e=10){return ym.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return ym.newOutgoing({globals:this.globals,query:t,pageSize:e})}async getCoinTypesForStreamFilter(){let t=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(t)).map(e=>(0,hr.normalizeStructTag)(e))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(i=>(0,hr.normalizeSuiAddress)(i))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(i=>(0,hr.normalizeSuiAddress)(i))}get wallet(){return this.globals.wallet}builder(){return new e0(this.globals)}},YC=class{constructor(t){this.data=t}serialize(){return JSON.stringify((0,c0.default)(this.data))}},hs=class extends YC{application="mpay";getClient(t,e){let i=new QC(t==="sui:mainnet"?"prod":"dev");return i.connectSingleWallet(new XC(e)),i}},Tm=class extends hs{constructor(t){super(t),this.data=t}txType=Sg.TransactionType.Stream;txSubType="Cancel";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).cancel()}},Sm=class extends hs{constructor(t){super(t),this.data=t}txType=l0.TransactionType.Stream;txSubType="ClaimByProxy";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).claimByProxy()}},xm=class extends hs{constructor(t){super(t),this.data=t}txType=u0.TransactionType.Stream;txSubType="Claim";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).claim()}},Am=class extends hs{constructor(t){super(t),this.data=t}txType=d0.TransactionType.Stream;txSubType="CreateStream";async build(t){let{network:e,account:i}=t;return this.getClient(e,i).createStream(this.data)}},f0=class Va{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Va.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Va.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return BigInt(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,jn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Va.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Uu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,jn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,jn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,jn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,jn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Uu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,jn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},eT=class{constructor(t,e){this.globals=t,this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(e=>this.getCreationInfoFromMoveCall(e));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&no(e.target,this.contract.createStreamTarget));if(t.length===0)throw new Ri("No create stream transactions");return t.map(e=>new f0(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:i,groupId:n}=Nu(e),r=t.decodeInputAddress(5),o=t.decodeInputU64(6),s=t.decodeInputU64(7),a=t.decodeInputU64(8),l=t.decodeInputU64(9),u=t.decodeInputU64(10),f=t.decodeInputBool(11),b=t.typeArg(0);return{name:i,groupId:n,recipient:r,timeStart:o,cliff:s,epochInterval:a,totalEpoch:l,amountPerEpoch:u,cancelable:f,coinType:b}}aggregateGroupStreamInfo(t){if(new Set(t.map(i=>JSON.stringify({name:i.name,groupId:i.groupId,timeStart:String(i.timeStart),epochInterval:String(i.epochInterval),totalEpoch:String(i.totalEpoch),cancelable:i.cancelable,coinType:i.coinType}))).size!==1)throw new ui("Stream group not have common info");let e=t.map(i=>({address:i.recipient,amountPerStep:i.amountPerEpoch,cliffAmount:i.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:e,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new ic(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Yg(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new Fu(this.globals,this.feeContract,this.contract)}getInputArg(t){if(t.kind!=="Input")throw new Error("not input type");return"value"in t?t:this.txb.blockData.inputs[t.index]}},tT=class{constructor(t,e){this.globals=t,this.txb=e,this.contract=new ic(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&no(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new eT(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:t,enabled:e}}decodeClaimTransaction(){return{type:"Claim",streamId:this.helper.decodeSharedObjectId(0)}}decodeClaimByProxyTransaction(){return{type:"ClaimByProxy",streamId:this.helper.decodeSharedObjectId(0)}}decodeCancelStreamTransaction(){return{type:"Cancel",streamId:this.helper.decodeSharedObjectId(0)}}get helper(){let t=this.transactions[0];return new f0(t,this.txb)}},Im=class extends hs{constructor(t){super(t),this.data=t}txType=h0.TransactionType.Stream;txSubType="SetAutoClaim";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}},iT=class{application="mpay";async deserialize(t){let{network:e,transactionBlock:i}=t,n=Kg.new(e==="sui:mainnet"?"prod":"dev"),r=new tT(n,i).decode(),o;switch(r.type){case"CreateStream":o=new Am(r.info);break;case"SetAutoClaim":o=new Im({streamId:r.streamId,enabled:r.enabled});break;case"Claim":o=new xm({streamId:r.streamId});break;case"ClaimByProxy":o=new Sm({streamId:r.streamId});break;case"Cancel":o=new Tm({streamId:r.streamId});break;default:throw new Error(`Unknown transaction type: ${r}`)}return{txType:o.txType,txSubType:o.txSubType,intentionData:o.data}}async build(t){let{intentionData:e}=t,i;switch(t.txSubType){case"CreateStream":i=new Am(e);break;case"Claim":i=new xm(e);break;case"ClaimByProxy":i=new Sm(e);break;case"SetAutoClaim":i=new Im(e);break;case"Cancel":i=new Tm(e);break;default:throw new Error("not implemented")}return i.build({...t})}},nT=class m0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e;return(0,p0.buildCoinTransferTxb)(i,this.data,n.address)}static fromData(e){return new m0(e)}},rT=class _0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e;return(0,g0.buildObjectTransferTxb)(i,this.data,n.address)}static fromData(e){return new _0(e)}},oT=class y0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{account:i}=e,n=w0.TransactionBlock.from(this.data.content);if(!(0,b0.isSameAddress)(n.blockData.sender,i.address))throw new Error("Invalid sender address");return n}static fromData(e){return new y0(e)}},sT=class{application;constructor(){this.application=ao.TransactionDefaultApplication}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case ao.TransactionSubTypes.assets.coin.send:n=nT.fromData(t.intentionData);break;case ao.TransactionSubTypes.assets.object.send:n=rT.fromData(t.intentionData);break;case ao.TransactionSubTypes.others.plain:n=oT.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},aT={ProtocolPackage:"0x2c256d2ae030db12c7015aa1617ad928e60cc99d460b279fe76bbb9f82fa7063",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},usdc:{name:"USDC",assetId:1,coinType:"usdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"}}},ye=aT,cT=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(ye.pool).find(i=>i.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${ye.ProtocolPackage}::incentive_v2::claim_reward`){let i=new Om(e,this.txb),n=i.decodeInputU8(4),r=i.decodeInputU8(5),o=i.decodeSharedObjectId(2),s=this.findPoolByAssetId(n),a=[...e.typeArguments];t.push({coinType:s.coinType,option:r,typeArguments:a,assetId:n,poolId:o})}}),console.log("decode claims",t),{txType:ro.TransactionType.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryDeposit",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryRepay",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:i.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(ye.ProtocolPackage));return new Om(t,this.txb)}},Om=class Wa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Wa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Wa.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Bn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Wa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Ku.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Bn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Bn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Bn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Bn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Ku.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Bn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};function Pm(t,e,i,n){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[t.object("0x06"),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),i,t.pure(n),t.object(ye.Incentive),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function lT(t,e,i){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),t.pure(i),t.object(ye.Incentive),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function uT(t,e,i){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_borrow`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),t.pure(i),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function Dm(t,e,i,n){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),i,t.pure(n),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function dT(t,e,i,n,r){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[t.object("0x06"),t.object(ye.IncentiveV2),t.object(i),t.object(ye.StorageId),t.pure(e),t.pure(n)],typeArguments:r}),t}var fT=class C0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,i=new k0.TransactionBlock;return e.forEach(n=>{let{assetId:r,poolId:o,option:s,typeArguments:a}=n;dT(i,r,o,s,a)}),i.setGasBudget(ye.gasBudget),i}static fromData(e){return new C0(e)}},hT=class S0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{coinType:e,amount:i}=this.data,n=new T0.TransactionBlock;n.setGasBudget(ye.gasBudget),console.log("build",this.data);let r=ye.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(ye.pool).join(", ")}.`);return uT(n,r,i)}static fromData(e){return new S0(e)}};async function A0(t,e,i){let n=await t.getCoins({owner:e,coinType:i});return console.log("getTokenObjs",e,n),n}var pT=class I0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e,{coinType:r,amount:o}=this.data,s=new x0.TransactionBlock;if(s.setGasBudget(ye.gasBudget),console.log("build",this.data),r==="sui"){let[f]=s.splitCoins(s.gas,[o]);return Pm(s,ye.pool.sui,f,o)}let a=ye.pool[r];if(!a)throw new Error(`${r} not support, please use ${Object.keys(ye.pool).join(", ")}.`);let l=await A0(i,n.address,a.type);if(!l.data[0])throw new Error(`Insufficient balance for ${a.name} Token`);let u=l.data[0].coinObjectId;if(l.data.length>=2){let f=1;for(;f<l.data.length;)s.mergeCoins(u,[l.data[f].coinObjectId]),f++}return Pm(s,a,s.object(u),o)}static fromData(e){return new I0(e)}},mT=class P0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e,{coinType:r,amount:o}=this.data,s=new O0.TransactionBlock;if(s.setGasBudget(ye.gasBudget),console.log("build",this.data),r==="sui"){let[f]=s.splitCoins(s.gas,[o]);return Dm(s,ye.pool.sui,f,o)}let a=ye.pool[r];if(!a)throw new Error(`${r} not support, please use ${Object.keys(ye.pool).join(", ")}.`);let l=await A0(i,n.address,a.type);if(!l.data[0])throw new Error(`Insufficient balance for ${a.name} Token`);let u=l.data[0].coinObjectId;if(l.data.length>=2){let f=1;for(;f<l.data.length;)s.mergeCoins(u,[l.data[f].coinObjectId]),f++}return Dm(s,a,s.object(u),o)}static fromData(e){return new P0(e)}},gT=class E0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{coinType:e,amount:i}=this.data,n=new D0.TransactionBlock;console.log("build",this.data),n.setGasBudget(ye.gasBudget);let r=ye.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(ye.pool).join(", ")}.`);return lT(n,r,i)}static fromData(e){return new E0(e)}},_T=class{application="navi";async deserialize(t){let{transactionBlock:e}=t,i=new cT(e).decode();return{txType:v0.TransactionType.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case"EntryDeposit":n=pT.fromData(t.intentionData);break;case"EntryBorrow":n=hT.fromData(t.intentionData);break;case"EntryRepay":n=mT.fromData(t.intentionData);break;case"EntryWithdraw":n=gT.fromData(t.intentionData);break;case"ClaimReward":n=fT.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},bT="msafe-plain-tx",wT=nc.TransactionSubTypes.others.plain,yT=class{application;constructor(){this.application=bT}async deserialize(t){let{transactionBlock:e,suiClient:i}=t,n=await e.build({client:i});return{txType:nc.TransactionType.Other,txSubType:wT,intentionData:{content:(0,rc.toHEX)(n)}}}async build(t){let{suiClient:e,account:i}=t,n=M0.TransactionBlock.from((0,rc.fromHEX)(t.intentionData.content)),r=await e.devInspectTransactionBlock({transactionBlock:n,sender:i.address});if(r.effects.status.status!=="success")throw new Error(r.effects.status.error);return n}},vT=class{apps;constructor(t){this.apps=new Map(t.map(e=>[e.application,e]))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},oc="6601955b8b0024600a917079",B0="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",za="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",co="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",sc=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],N0=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],Vu=["seth","ssui","susdc","susdt","scetus","safsui","shasui","svsui"],kT=["sui"],Ga=["sui","usdc","usdt"],CT={eth:8,btc:8,usdc:6,usdt:6,sui:9,apt:8,sol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,seth:8,sbtc:8,susdc:6,susdt:6,ssui:9,sapt:8,ssol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9},F0={seth:"sui",ssui:"sui",susdc:"sui",susdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui"},TT={sui:["sui","sca"],usdc:["sui","sca"],usdt:["sui","sca"]},ST={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"},Ci={eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},Em={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},xT=class{constructor(t,e){this.txb=t,this._builder=e}_builder;decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();throw new Error("Unknown transaction type")}get coreId(){return{protocolPkg:this._builder.address.get("core.packages.protocol.id"),market:this._builder.address.get("core.market"),version:this._builder.address.get("core.version"),coinDecimalsRegistry:this._builder.address.get("core.coinDecimalsRegistry"),xOracle:this._builder.address.get("core.oracles.xOracle"),spoolPkg:this._builder.address.get("spool.id"),borrowIncentivePkg:this._builder.address.get("borrowIncentive.id"),veScaPkgId:this._builder.address.get("vesca.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation_entry`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${za}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}decodeMigrateAndClaim(){let t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),e=this.helperClaimBorrowReward[0].decodeSharedObjectId(2),i=this.helperClaimBorrowReward[0].decodeOwnedObjectId(3),n=this._builder.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:It.TransactionType.Other,type:"MigrateAndClaim",intentionData:{veScaKey:t,obligationKey:e,obligationId:i,rewardCoinName:n}}}decodeOpenObligation(){return{txType:It.TransactionType.Other,type:"OpenObligation",intentionData:{}}}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:It.TransactionType.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),i=new Gi(t,this.txb).getAmountInput().reduce((T,O)=>T+O,0),n=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,o=[],s=[],a=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(a=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,u=!1,f,b,v=[{condition:o,isOld:!0},{condition:s,isOld:!1},{condition:a,isOld:!1}];for(let T=0;T<v.length;T++)v[T].condition.length>1&&([b,f]=v[T].condition,l=!0,u=v[T].isOld);return{txType:It.TransactionType.Other,type:"RenewExpStakePeriod",intentionData:{amount:i,lockPeriodInDays:e,obligationId:f,obligationKey:b,veScaKey:n,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:u}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),i=[],n=[],r=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(n=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let o=!1,s=!1,a,l,u=[{condition:i,isOld:!0},{condition:n,isOld:!1},{condition:r,isOld:!1}];for(let f=0;f<u.length;f++)u[f].condition.length>1&&([l,a]=u[f].condition,o=!0,s=u[f].isOld);return{txType:It.TransactionType.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:a,obligationKey:l,veScaKey:e,isObligationLocked:o,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),i=new Gi(t,this.txb).getAmountInput().reduce((v,T)=>v+T,0),n=[],r=[],o,s=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(o=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let a=!1,l=!1,u,f,b=[{condition:n,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let v=0;v<b.length;v++)b[v].condition.length>1&&([f,u]=b[v].condition,a=!0,l=b[v].isOld);return{txType:It.TransactionType.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:i,veScaKey:o,lockPeriodInDays:e,obligationId:u,obligationKey:f,isOldBorrowIncentive:l,isObligationLocked:a}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):(t=this.helperStakeMoreSca.getNestedInputParam(4),console.log(t));let i=new Gi(t,this.txb).getAmountInput().reduce((v,T)=>v+T,0),n=[],r=[],o,s=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(o=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let a=!1,l=!1,u,f,b=[{condition:n,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let v=0;v<b.length;v++)b[v].condition.length>1&&([f,u]=b[v].condition,a=!0,l=b[v].isOld);return{txType:It.TransactionType.Other,type:"StakeSca",intentionData:{amount:i,lockPeriodInDays:e,obligationId:u,obligationKey:f,veScaKey:o,isObligationLocked:a,isOldBorrowIncentive:l}}}decodeSupplyLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((n,r)=>n+r,0);return{txType:It.TransactionType.Other,type:"SupplyLending",intentionData:{amount:i,coinName:t}}}decodeWithdrawLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((n,r)=>n+r,0);return{txType:It.TransactionType.Other,type:"WithdrawLending",intentionData:{amount:i,coinName:t}}}decodeDepositCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:It.TransactionType.Other,type:"DepositCollateral",intentionData:{amount:i,obligationId:n,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),i=this.helperWithdrawCollateral.decodeSharedObjectId(1),n=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:n,obligationId:i}}}decodeBorrow(){let t=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),i=this.helperBorrow.decodeSharedObjectId(1),n=this.helperBorrow.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:n,obligationId:i}}}decodeBorrowWithBoost(){let t=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),i=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"BorrowWithBoost",intentionData:{amount:i,coinName:t,obligationKey:r,obligationId:n,veScaKey:e}}}decodeRepay(){let t=this._builder.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n=this.helperRepay.decodeSharedObjectId(1);return{txType:It.TransactionType.Other,type:"Repay",intentionData:{amount:i,obligationId:n,coinName:t}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=this.helperStake.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((o,s)=>o+s,0),n=this.helperStake.typeArg(0),r=this._builder.utils.parseCoinNameFromType(n);return{txType:It.TransactionType.Other,type:"StakeSpool",intentionData:{amount:i,marketCoinName:r,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),i=this.helperUnstake.typeArg(0),n=this._builder.utils.parseCoinNameFromType(i);return{txType:It.TransactionType.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:n,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n;return this.isCreateStakeAccountTransaction()||(n=this.helperStake.decodeOwnedObjectId(1)),{txType:It.TransactionType.Other,type:"SupplyAndStakeLending",intentionData:{amount:i,coinName:t,stakeAccountId:n}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(r=>{let o=r.decodeOwnedObjectId(1),s=r.decodeInputU64(2);t.push({id:o,coin:s})});let e=this._builder.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),i=this.helperRedeems.find(r=>r.isHaveNestedInput(2)),n;return i&&(n=new Gi(i.getNestedInputParam(2),this.txb).getAmountInput().reduce((r,o)=>r+o,0)),{txType:It.TransactionType.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],i=[];return this.helperClaimLendingReward.forEach(n=>{let r=n.decodeOwnedObjectId(2),o=n.typeArg(0),s=this._builder.utils.parseCoinNameFromType(o);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(n=>{let r=n.decodeSharedObjectId(3),o=n.decodeOwnedObjectId(4),s=this._builder.utils.parseCoinNameFromType(n.typeArg(0));e.push({obligationId:o,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(n=>{let r=n.decodeSharedObjectId(2),o=n.decodeOwnedObjectId(3),s=this._builder.utils.parseCoinNameFromType(n.typeArg(0));i.push({obligationId:o,obligationKey:r,rewardCoinName:s})}),{txType:It.TransactionType.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:i}}}get helperClaimLendingReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new He(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new He(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new He(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new He(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new He(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${za}::user::unstake`));return new He(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new He(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new He(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${za}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new He(t,this.txb)}get helperUnstakes(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new He(t,this.txb))}get helperRedeems(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new He(t,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new He(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new He(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new He(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new He(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new He(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new He(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new He(t,this.txb)}},Gi=class{constructor(t,e){this.splitCoin=t,this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(He.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let i=t.value.Pure;return tc.bcs.de(e,new Uint8Array(i))}return t.value}},He=class Ha{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Ha.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Ha.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Nn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Ha.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}getNestedInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="NestedResult")throw new Error("not input type");return this.txb.blockData.transactions[i.index]}isHaveNestedInput(e){return this.moveCall.arguments[e].kind==="NestedResult"}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return tc.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Nn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Nn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Nn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Nn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return tc.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Nn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},AT={mainnet:{core:{version:"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",market:"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9",coins:{cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},apt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},sol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},btc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},eth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},usdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},usdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}}},oracles:{xOracle:"0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",registryCap:"0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0x38fe42a5a69f7eb3635404389e8003be9457b1a5c873f133184648c7e9bd47b7",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f",upgradeCap:"0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"},supra:{id:"",upgradeCap:""},pyth:{id:"0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",upgradeCap:"0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0xec1ac7f4d01c5bf178ff4e62e523e7df7721453d81d4904a42a0ffc2686c843d",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{seth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},susdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},version:"",versionCap:""},borrowIncentive:{id:"0x874f1d43d81e2256e120bab2485938fe07ba0cc21d87129a99a1db11cacb382d",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",query:"0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",incentivePools:"0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",incentiveAccounts:"0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",config:"0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7",version:"",versionCap:""},vesca:{id:"0xcfe2d87aa5712b67cad2732edb6a2201bfdf592377e5c0968b7cb02099bd8e21",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",table:"0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",treasury:"0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",config:"0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"}}},ac=class{_auth;_id;_network;_currentAddresses;_addressesMap;constructor(t){let{id:e,auth:i,network:n}=t;i&&(this._auth=i),this._id=e,this._network=n||"mainnet",this._addressesMap=new Map}getId(){return this._id||void 0}get(t){if(this._currentAddresses)return t.split(".").reduce((e,i)=>typeof e=="object"?e[i]:e,this._currentAddresses)||void 0}set(t,e){if(this._currentAddresses){let i=t.split(".");i.reduce((n,r,o)=>{if(o===i.length-1){let s=n;s[r]=e}return n[r]},this._currentAddresses)}return this._currentAddresses}switchCurrentAddresses(t){return this._addressesMap.has(t)&&(this._currentAddresses=this._addressesMap.get(t),this._network=t),this._currentAddresses}getAddresses(t){return t?this._addressesMap.get(t):this._currentAddresses??this._addressesMap.get(this._network)}setAddresses(t,e){let i=e||this._network;i===this._network&&(this._currentAddresses=t),this._addressesMap.set(i,t)}getAllAddresses(){return Object.fromEntries(this._addressesMap)}read(){return Object.entries(AT).forEach(([t,e])=>{["localnet","devnet","testnet","mainnet"].includes(t)&&(t===this._network&&(this._currentAddresses=e),this._addressesMap.set(t,e))}),this.getAllAddresses()}},Ti=t=>{let{sender:e}=t.blockData;if(!e)throw new Error("Sender is required");return e},IT=(t,e,i,n)=>{let r=!n,o=!r&&n*1e3<=new Date().getTime();if(r||o)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${o?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error("Maximum lock period is ~4 years (1460 days)")}else throw new Error(`SCA amount and lock period is required for ${o?"renewing expired veSca":"initial lock"}`);else{if(ps(n),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(i&&n&&i-n>126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")}},OT=(t,e,i)=>{if(ps(i),t<=0)throw new Error("Lock period must be greater than 0");if(i&&i*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(i&&e-(i??0)>126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")},PT=(t,e)=>{if(ps(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},DT=(t,e,i)=>{if(ps(i),t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")},ps=t=>{if(t===void 0)throw new Error("veSca not found")},ET=t=>({pointType:(0,ms.normalizeStructTag)(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),MT=t=>({poolType:(0,ms.normalizeStructTag)(t.pool_type.name),debtAmount:Number(t.debt_amount),pointList:t.points_list.reduce((e,i)=>{let n=ET(i),r=(0,ms.parseStructTag)(n.pointType).name.toLowerCase();return e[r]=n,e},{})}),Mm=t=>{let e=t.slice(1).toLowerCase();return t.charAt(0).toLowerCase()==="s"&&[...new Set([...sc,...N0,...kT])].includes(e)},jm=t=>{switch(t){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return t.toUpperCase()}},jT=t=>{let e=new Date(t*1e3),i=new Date(t*1e3);i.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&i.setUTCDate(i.getUTCDate()+1);let n=new Date().getTime();return i.getTime()-n>126144e3*1e3&&i.setUTCDate(i.getUTCDate()-1),Math.floor(i.getTime()/1e3)},Xu=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this._address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.isTestnet=t.networkType?t.networkType==="testnet":!1,this.client=t.client}init(t=!1,e){t||!this._address.getAddresses()||!e?.getAddresses()?this._address.read():this._address=e}parseSymbol(t){if(Mm(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+jm(e)}return jm(t)}parseCoinType(t){let e=Mm(t)?this.parseCoinName(t):t,i=this._address.get(`core.coins.${e}.id`)||ST[t]||void 0;if(!i)throw Error(`Coin ${t} is not supported`);if(t==="sui")return(0,fs.normalizeStructTag)(`${i}::sui::SUI`);let n=[this._address.get("core.coins.usdc.id")??Ci.usdc,this._address.get("core.coins.usdt.id")??Ci.usdt,this._address.get("core.coins.eth.id")??Ci.eth,this._address.get("core.coins.btc.id")??Ci.btc,this._address.get("core.coins.sol.id")??Ci.sol,this._address.get("core.coins.apt.id")??Ci.apt],r=[this._address.get("core.coins.vsui.id")??Em.vsui];return n.includes(i)?`${i}::coin::COIN`:r.includes(i)?`${i}::cert::CERT`:`${i}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||B0,i=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${i}>`}parseCoinNameFromType(t){let e=(0,fs.normalizeStructTag)(t),i=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,n=t.match(i),r=t.includes("reserve::MarketCoin");e=n?.[1]||t;let o={[`${this._address.get("core.coins.usdc.id")??Ci.usdc}::coin::COIN`]:"usdc",[`${this._address.get("core.coins.usdt.id")??Ci.usdt}::coin::COIN`]:"usdt",[`${this._address.get("core.coins.eth.id")??Ci.eth}::coin::COIN`]:"eth",[`${this._address.get("core.coins.btc.id")??Ci.btc}::coin::COIN`]:"btc",[`${this._address.get("core.coins.sol.id")??Ci.sol}::coin::COIN`]:"sol",[`${this._address.get("core.coins.apt.id")??Ci.apt}::coin::COIN`]:"apt"},s={[`${this._address.get("core.coins.vsui.id")??Em.vsui}::cert::CERT`]:"vsui"},a=o[e]||s[e]||e.split("::")[2].toLowerCase();return r?this.parseMarketCoinName(a):a}parseCoinName(t){return t.slice(1)}parseMarketCoinName(t){return`s${t}`}getSpoolRewardCoinName=t=>F0[t];getBorrowIncentiveRewardCoinName=t=>TT[t];getCoinDecimal(t){return CT[t]}getCoinWrappedType(t){return t==="usdc"||t==="usdt"||t==="eth"||t==="btc"||t==="apt"||t==="sol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}async selectCoinIds(t,e=fs.SUI_TYPE_ARG,i){let n=i,r=[],o=0,s=!0,a=null;for(;s&&o<t;){let l=await this.client.getCoins({owner:n,coinType:e,cursor:a});l.data.sort((u,f)=>parseInt(f.balance,10)-parseInt(u.balance,10));for(let u=0;u<l.data.length&&(r.push({objectId:l.data[u].coinObjectId,digest:l.data[u].digest,version:l.data[u].version}),o+=parseInt(l.data[u].balance,10),!(o>=t));u++);a=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r.map(l=>l.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,i){let n=e.map(s=>t.object(s)),r=n[0];n.length>1&&t.mergeCoins(r,n.slice(1));let[o]=t.splitCoins(r,[t.pure(i)]);return[o,r]}getUnlockAt(t,e){let i=Math.floor(new Date().getTime()/1e3),n=e?Math.max(e-i,0):0,r=0;if(n===0){let o=(t??1)*86400;r=Math.min(i+o,i+126144e3)}else{let o=Math.min(t?t*86400+n:n,126144e3);r=i+o}return jT(r)}},Ju=async(t,e)=>{let i=e,n=t.address.get("core.object")||B0,r=[],o=!1,s=null;do{let f=await t.client.getOwnedObjects({owner:i,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:s});r.push(...f.data),f.hasNextPage&&f.nextCursor?(o=!0,s=f.nextCursor):o=!1}while(o);let a=r.map(f=>f?.data?.objectId).filter(f=>f!==void 0),l=await t.client.multiGetObjects({ids:a,options:{showContent:!0,showType:!0}}),u=[];for(let f=0;f<l.length;f++){let b=l[f].data.objectId,{content:v}=l[f].data;if(v&&"fields"in v){let T=v.fields,O=String(T.ownership.fields.of),P=await U0(t,O);u.push({id:O,keyId:b,locked:P})}}return u},U0=async(t,e)=>{let i=await t.client.getObject({id:e,options:{showContent:!0}}),n=!1;return i.data&&i?.data?.content?.dataType==="moveObject"&&"lock_key"in i.data.content.fields&&(n=!!i.data.content.fields.lock_key),n},BT=async(t,e,i)=>{let n=i||[...sc],r=e,o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:r,filter:{MatchAny:n.map(f=>({StructType:`0x2::coin::Coin<${t.utils.parseCoinType(f)}>`}))},options:{showType:!0,showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l={};return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{let f=u.type;if(u.content&&"fields"in u.content){let b=u.content.fields,v=t.utils.parseCoinNameFromType(f);v&&(l[v]=vi(l[v]??0).plus(b.balance).toNumber())}}),l},NT=async(t,e,i)=>{let n=i,r=t.utils.parseCoinType(e),o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${r}>`},options:{showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l=0;return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{if(u.content&&"fields"in u.content){let f=u.content.fields;l=vi(l).plus(f.balance).toNumber()}}),l},FT=async(t,e,i)=>{let n=i||[...sc].map(u=>t.utils.parseMarketCoinName(u)),r=e,o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:r,filter:{MatchAny:n.map(f=>({StructType:`0x2::coin::Coin<${t.utils.parseMarketCoinType(f)}>`}))},options:{showType:!0,showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l={};return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{let f=u.type;if(u.content&&"fields"in u.content){let b=u.content.fields,v=t.utils.parseCoinNameFromType(f);v&&(l[v]=vi(l[v]??0).plus(b.balance).toNumber())}}),l},RT=async(t,e,i)=>{let n=i,r=t.utils.parseMarketCoinType(e),o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${r}>`},options:{showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l=0;return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{if(u.content&&"fields"in u.content){let f=u.content.fields;l=vi(l).plus(f.balance).toNumber()}}),l},qT=async(t,e)=>{let i=`${t.address.get("core.packages.query.id")}::obligation_query::obligation_data`,n=new $0.TransactionBlock;return n.moveCall({target:i,arguments:[n.object(e)]}),(await t.client.devInspectTransactionBlock({transactionBlock:n,sender:t.walletAddress})).events[0].parsedJson},Qu=async(t,e)=>{let i=e,n=t.address.get("spool.object"),r=`${n}::spool_account::SpoolAccount`,o=[],s=!1,a=null;do{let b=await t.client.getOwnedObjects({owner:i,filter:{StructType:r},options:{showContent:!0,showType:!0},cursor:a});o.push(...b.data),b.hasNextPage&&b.nextCursor?(s=!0,a=b.nextCursor):s=!1}while(s);let l={seth:[],ssui:[],susdc:[],susdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},u=Object.keys(l).reduce((b,v)=>{let T=t.utils.parseCoinName(v),O=t.utils.parseMarketCoinType(T),P={...b},j=`${n}::spool_account::SpoolAccount<${O}>`;return P[v]=j,P},{}),f=o.map(b=>b?.data?.objectId).filter(b=>b!==void 0);return(await t.client.multiGetObjects({ids:f,options:{showContent:!0,showType:!0}})).forEach(b=>{let v=b.data.objectId,T=b.data.type;if(b.data.content&&"fields"in b.data.content){let O=b.data.content.fields,P=String(O.spool_id),j=String(O.stake_type.fields.name),B=Number(O.stakes),D=Number(O.index),q=Number(O.points),K=Number(O.total_points);(0,Be.normalizeStructTag)(T)===u.seth?l.seth.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.ssui?l.ssui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.susdc?l.susdc.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.susdt?l.susdt.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.scetus?l.scetus.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.safsui?l.safsui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.shasui?l.shasui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.svsui&&l.svsui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K})}}),l},Bm=async(t,e)=>{let i=t.address.get(`spool.pools.${e}.id`),n,r=await t.client.getObject({id:i,options:{showContent:!0,showType:!0}});if(r.data){let o=r.data,s=o.objectId,a=o.type;if(o.content&&"fields"in o.content){let l=o.content.fields,u=Number(l.max_distributed_point),f=Number(l.distributed_point),b=Number(l.distributed_point_per_period),v=Number(l.point_distribution_time),T=Number(l.max_stakes),O=String(l.stake_type.fields.name),P=Number(l.stakes),j=Number(l.index),B=Number(l.created_at),D=Number(l.last_update);n={id:s,type:(0,Be.normalizeStructTag)(a),maxPoint:u,distributedPoint:f,pointPerPeriod:b,period:v,maxStake:T,stakeType:(0,Be.normalizeStructTag)(O),totalStaked:P,index:j,createdAt:B,lastUpdate:D}}}return n},Nm=async(t,e)=>{let i=t.address.get(`spool.pools.${e}.rewardPoolId`),n,r=await t.client.getObject({id:i,options:{showContent:!0,showType:!0}});if(r.data){let o=r.data,s=o.objectId,a=o.type;if(o.content&&"fields"in o.content){let l=o.content.fields,u=String(l.spool_id),f=Number(l.exchange_rate_numerator),b=Number(l.exchange_rate_denominator),v=Number(l.rewards),T=Number(l.claimed_rewards);n={id:s,type:(0,Be.normalizeStructTag)(a),stakePoolId:u,ratioNumerator:f,ratioDenominator:b,rewards:v,claimedRewards:T}}}return n},LT=async(t,e,i,n)=>{let r=n||[...Ga],o=t.address.get("borrowIncentive.query"),s=t.address.get("borrowIncentive.incentiveAccounts"),a=`${o}::incentive_account_query::incentive_account_data`,l=new K0.TransactionBlock;l.moveCall({target:a,arguments:[l.object(s),l.object(e)]});let u=(await t.client.devInspectTransactionBlock({transactionBlock:l,sender:i})).events[0].parsedJson,f={};return u.pool_records.forEach(b=>{let v=MT(b),{poolType:T}=v,O=t.utils.parseCoinNameFromType(T);r.length>=1&&r.includes(O)&&(f[O]=v)},{}),f},$T=async(t,e)=>{let i=t.address.get(`core.coins.${e}.oracle.pyth.feedObject`),n=await t.client.getObject({id:i,options:{showContent:!0}});if(n.data){let r=n.data;if(r.content&&"fields"in r.content){let o=r.content.fields,s=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),a=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),l=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),u=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return l*10**((a?-1:1)*s)*(u?-1:1)}}return 0},V0=async(t,e)=>{let i=e,n=`${t.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],o=!1,s=null;do{let a=await t.client.getOwnedObjects({owner:i,filter:{StructType:n},cursor:s});r.push(...a.data),a.hasNextPage&&a.nextCursor?(o=!0,s=a.nextCursor):o=!1}while(o);return r.map(a=>a.data).filter(a=>!!a)},UT=async(t,e)=>{let i=(await V0(t,e)).map(r=>r.objectId),n=[];for(let r=0;r<i.length;r++){let o=await W0(t,i[r]);o&&n.push(o)}return n},W0=async(t,e,i)=>{let n=t.address.get("vesca.tableId"),r=e||(await V0(t,i))[0].objectId,o,s=(await t.client.getDynamicFieldObject({parentId:n,name:{type:"0x2::object::ID",value:r}})).data;if(s&&s.content&&s.content.dataType==="moveObject"&&"fields"in s.content){let a=s.content.fields.value.fields;o={id:s.objectId,keyId:r,lockedScaAmount:vi(a.locked_sca_amount).toNumber(),lockedScaCoin:vi(a.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:vi(a.unlock_at).toNumber()}}return o},z0=class{params;address;client;utils;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.client=t.client,this.utils=e?.utils??new Xu(this.params,{address:this.address}),this.walletAddress=t.walletAddress}init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e}async getObligations(t){return Ju(this,t)}async getCoinAmounts(t,e){return BT(this,t,e)}async getCoinAmount(t,e){return NT(this,t,e)}async getMarketCoinAmounts(t,e){return FT(this,t,e)}async getMarketCoinAmount(t,e){return RT(this,t,e)}async getPriceFromPyth(t){return $T(this,t)}async getAllStakeAccounts(t){return Qu(this,t)}async getStakeAccounts(t,e){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t){let e=t??[...Vu],i={};for(let n=0;n<e.length;n++){let r=e[n],o=await Bm(this,r);o&&(i[r]=o)}return i}async getStakePool(t){return Bm(this,t)}async getStakeRewardPools(t){let e=t??[...Vu],i={};for(let n=0;n<e.length;n++){let r=await Nm(this,e[n]);r&&(i[e[n]]=r)}return i}async getStakeRewardPool(t){return Nm(this,t)}async getBorrowIncentiveAccounts(t,e,i){return LT(this,t,e||this.walletAddress,i)}async getObligationCoinNames(t){let e=await qT(this,t),i=e.collaterals.map(r=>`0x${r.type.name}`),n=e.debts.map(r=>`0x${r.type.name}`);return[...new Set([...i,...n])].map(r=>this.utils.parseCoinNameFromType(r))}},G0=class{params;isTestnet;address;query;utils;client;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.query=e?.query??new z0(t,{address:this.address}),this.utils=e?.utils??new Xu(this.params,{address:this.address,query:this.query}),this.client=t.client,this.walletAddress=(0,L0.normalizeSuiAddress)(t.walletAddress),this.isTestnet=t.networkType?t.networkType==="testnet":!1}async init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e,this.query.init(t,this.address),this.utils.init(t,this.address)}createTxBlock(t){return new q0.TransactionBlock(t)}async selectCoin(t,e,i,n){let r=this.utils.parseCoinType(e),o=await this.utils.selectCoinIds(i,r,n),[s,a]=this.utils.takeAmountFromCoins(t,o,i);return{takeCoin:s,leftCoin:a}}async selectMarketCoin(t,e,i,n){let r=this.utils.parseMarketCoinType(e),o=await this.utils.selectCoinIds(i,r,n),[s,a]=this.utils.takeAmountFromCoins(t,o,i);return{takeCoin:s,leftCoin:a}}},oo=async(...t)=>{let[e,i,n]=t;if(t.length===3&&n&&typeof n=="string")return await W0(e.query,n)||void 0;let r=Ti(i),o=await UT(e.query,r);if(o.length!==0)return o[0]},KT=async(t,e)=>{let i=t.address.get("borrowIncentive.object"),n=t.address.get("borrowIncentive.incentivePools"),r=t.address.get("vesca.id"),{client:o}=t,s=await o.getObject({id:n,options:{showContent:!0}});if(s.data?.content?.dataType!=="moveObject")return!1;let a=s.data.content.fields.ve_sca_bind.fields.id.id,l=`${i}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,u=await o.getDynamicFieldObject({parentId:a,name:{type:l,value:e}});return u.data?.content?.dataType!=="moveObject"?!1:u.data.content.fields.value.fields.id},Du=async(...t)=>{let[e,i,n,r]=t;if(t.length===4&&n&&r&&typeof n=="string"){let a=await U0(e.query,n);return{obligationId:n,obligationKey:r,obligationLocked:a}}let o=Ti(i),s=await Ju(e.query,o);if(s.length===0)throw new Error(`No obligation found for sender ${o}`);return{obligationId:s[0].id,obligationKey:s[0].keyId,obligationLocked:s[0].locked}},VT=({builder:t,txBlock:e})=>{let i={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore"),config:t.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},r={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")};return{stakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::stake`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(i.obligationAccessStore),e.object(un.SUI_CLOCK_OBJECT_ID)]})},stakeObligationWithVesca:(o,s,a)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::stake_with_ve_sca`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(i.obligationAccessStore),e.object(r.config),e.object(r.treasury),e.object(r.table),e.object(a),e.object(un.SUI_CLOCK_OBJECT_ID)]})},unstakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::unstake`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)]})},oldUnstakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::unstake`,arguments:[e.object(n.incentivePools),e.object(n.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[un.SUI_TYPE_ARG]})},claimBorrowIncentive:(o,s,a)=>{let l=t.utils.parseCoinType(a);return e.moveCall({target:`${i.borrowIncentivePkg}::user::redeem_rewards`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[l]})},oldClaimBorrowIncentive(o,s,a){let l=t.utils.parseCoinType(a);return e.moveCall({target:`${n.id}::user::redeem_rewards`,arguments:[e.object(n.incentivePools),e.object(n.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[l]})}}},Fi=({builder:t,txBlock:e})=>{let i=VT({builder:t,txBlock:e});return{normalMethod:i,stakeObligationQuick:async(n,r)=>{let{obligationId:o,obligationKey:s,obligationLocked:a}=await Du(t,e,n,r),l=!!e.blockData.transactions.find(u=>u.kind==="MoveCall"&&u.target===`${t.address.get("borrowIncentive.id")}::user::unstake`);(!a||l)&&i.stakeObligation(o,s)},unstakeObligationQuick:async(n,r)=>{let{obligationId:o,obligationKey:s,obligationLocked:a}=await Du(t,e,n,r);a&&i.unstakeObligation(o,s)},stakeObligationWithVeScaQuick:async(n,r,o)=>{let{obligationId:s,obligationKey:a,obligationLocked:l}=await Du(t,e,n,r),u=!!e.blockData.transactions.find(f=>f.kind==="MoveCall"&&(f.target===`${za}::user::unstake`||f.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!l||u){let f=await oo(t,e,o);if(f){let b=await KT(t,f.keyId);!b||b===s?i.stakeObligationWithVesca(s,a,f.keyId):i.stakeObligation(s,a)}else i.stakeObligation(s,a)}},claimBorrowIncentiveQuick:(n,r,o)=>i.claimBorrowIncentive(r,o,n)}},WT={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]},Eu=16*1024,zT=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,i){this.provider=t,this.pythStateId=e,this.wormholeStateId=i,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(i=>{if(i.data?.content?.dataType==="moveObject")return i.data.content.fields;throw console.log(i.data?.content),new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let i=await this.getWormholePackageId(),n=[];return t.forEach(r=>{let[o]=e.moveCall({target:`${i}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Za.bcs.ser("vector<u8>",Array.from(r),{maxSize:Eu}).toBytes()),e.object(as.SUI_CLOCK_OBJECT_ID)]});n.push(o)}),n}async updatePriceFeeds(t,e,i){let n=await this.getPythPackageId(),r;if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let o=this.extractVaaBytesFromAccumulatorMessage(e[0]),s=await this.verifyVaas([o],t);[r]=t.moveCall({target:`${n}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Za.bcs.ser("vector<u8>",Array.from(e[0]),{maxSize:Eu}).toBytes()),s[0],t.object(as.SUI_CLOCK_OBJECT_ID)]});let a=[],l=await this.getBaseUpdateFee(),u=t.splitCoins(t.gas,i.map(()=>t.pure(l))),f=0;for(let b=0;b<i.length;b++){let v=await this.getPriceFeedObjectId(i[b]);if(!v)throw new Error(`Price feed ${i[0]} not found, please create it first`);a.push(v),[r]=t.moveCall({target:`${n}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(v),u[f],t.object(as.SUI_CLOCK_OBJECT_ID)]}),f++}return t.moveCall({target:`${n}::hot_potato_vector::destroy`,arguments:[r],typeArguments:[`${n}::price_info::PriceInfo`]}),a}async createPriceFeed(t,e){let i=await this.getPythPackageId();if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let n=this.extractVaaBytesFromAccumulatorMessage(e[0]),r=await this.verifyVaas([n],t);t.moveCall({target:`${i}::pyth::create_price_feeds_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Za.bcs.ser("vector<u8>",Array.from(e[0]),{maxSize:Eu}).toBytes()),r[0],t.object(as.SUI_CLOCK_OBJECT_ID)]})}async getWormholePackageId(){return this.wormholePackageId||(this.wormholePackageId=await this.getPackageId(this.wormholeStateId)),this.wormholePackageId}async getPythPackageId(){return this.pythPackageId||(this.pythPackageId=await this.getPackageId(this.pythStateId)),this.pythPackageId}async getPriceFeedObjectId(t){let e=t.replace("0x","");if(!this.priceFeedObjectIdCache.has(e)){let{id:i,fieldType:n}=await this.getPriceTableInfo(),r=await this.provider.getDynamicFieldObject({parentId:i,name:{type:`${n}::price_identifier::PriceIdentifier`,value:{bytes:Array.from(Buffer.from(e,"hex"))}}});if(!r.data||!r.data.content)return;if(r.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");this.priceFeedObjectIdCache.set(e,r.data.content.fields.value)}return this.priceFeedObjectIdCache.get(e)}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let t=await this.provider.getDynamicFieldObject({parentId:this.pythStateId,name:{type:"vector<u8>",value:"price_info"}});if(!t.data||!t.data.type)throw new Error("Price Table not found, contract may not be initialized");let e=t.data.type.replace("0x2::table::Table<","");e=e.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:t.data.objectId,fieldType:e}}return this.priceTableInfo}extractVaaBytesFromAccumulatorMessage(t){let e=7+t.readUint8(6)+1,i=t.readUint16BE(e),n=e+2;return t.subarray(n,n+i)}},GT=async(t,e)=>(await H0.default.get(`${t}/api/latest_vaas`,{params:{ids:e}})).data.map(i=>Buffer.from(i,"base64")),Mu=async(t,e,i)=>{let n=i??[...new Set([...sc,...N0])],r=t.isTestnet?["pyth"]:["pyth"];if(r.includes("pyth")){let s=new zT(t.client,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState")),a=n.map(u=>t.address.get(`core.coins.${u}.oracle.pyth.feed`)),l=t.params.pythEndpoints??WT[t.isTestnet?"testnet":"mainnet"];try{let u=await GT(l[0],a);await s.updatePriceFeeds(e,u,a)}catch(u){console.warn(`Failed to update price feeds with endpoint ${l[0]}: ${u}`)}}let o=[...new Set(n)];for(let s=0;s<o.length;s++)await HT(t,e,o[s],r)},HT=async(t,e,i,n)=>{let r=t.utils.parseCoinType(i);ZT(e,n,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${i}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${i}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),r)},ZT=(t,e,i,n,r,o,s,a,l,u,f,b,v,T,O)=>{let P=XT(t,i,n,O);return e.includes("pyth")&&eS(t,r,P,s,a,o,O),e.includes("switchboard")&&YT(t,l,P,f,u,O),e.includes("supra")&&QT(t,b,P,T,v,O),JT(t,i,n,P,O),t},XT=(t,e,i,n)=>{let r=typeof i=="string"?t.object(i):i,o=`${e}::x_oracle::price_update_request`,s=[n];return t.moveCall({target:o,arguments:[r],typeArguments:s})},JT=(t,e,i,n,r)=>{let o=`${e}::x_oracle::confirm_price_update_request`,s=[r],a=typeof i=="string"?t.object(i):i;return t.moveCall({target:o,arguments:[a,n,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:s}),t},QT=(t,e,i,n,r,o)=>{let s=typeof n=="string"?t.object(n):n,a=typeof r=="string"?t.object(r):r;t.moveCall({target:`${e}::rule::set_price`,arguments:[i,s,a,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},YT=(t,e,i,n,r,o)=>{let s=typeof n=="string"?t.object(n):n,a=typeof r=="string"?t.object(r):r;t.moveCall({target:`${e}::rule::set_price`,arguments:[i,s,a,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},eS=(t,e,i,n,r,o,s)=>{let a=typeof i=="string"?t.object(i):i,l=typeof n=="string"?t.object(n):n,u=typeof r=="string"?t.object(r):r,f=typeof o=="string"?t.object(o):o;t.moveCall({target:`${e}::rule::set_price`,arguments:[a,l,u,f,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},Ua=async(...t)=>{let[e,i,n,r]=t;if(t.length===3&&n)return{obligationId:n};if(t.length===4&&n&&r)return{obligationId:n,obligationKey:r};let o=Ti(e),s=await Ju(i.query,o);if(s.length===0)throw new Error(`No obligation found for sender ${o}`);return{obligationId:s[0].id,obligationKey:s[0].keyId}},tS=({builder:t,txBlock:e})=>{let i={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")};return{openObligation:()=>e.moveCall({target:`${i.protocolPkg}::open_obligation::open_obligation`,arguments:[e.pure(i.version)]}),returnObligation:(n,r)=>e.moveCall({target:`${i.protocolPkg}::open_obligation::return_obligation`,arguments:[e.object(i.version),e.object(n),e.object(r)]}),openObligationEntry:()=>e.moveCall({target:`${i.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[e.object(i.version)]}),addCollateral:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[e.object(i.version),e.object(n),e.object(i.market),typeof r!="string"?r:e.pure(r)],typeArguments:[s]})},takeCollateral:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},deposit:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::mint::mint`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},depositEntry:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::mint::mint_entry`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},withdraw:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::redeem::redeem`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},withdrawEntry:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::redeem::redeem_entry`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},borrow:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::borrow::borrow`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},borrowEntry:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::borrow::borrow_entry`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},repay:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::repay::repay`,arguments:[e.object(i.version),e.object(n),e.object(i.market),typeof r!="string"?r:e.pure(r),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},borrowFlashLoan:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[e.object(i.version),e.object(i.market),e.pure(n)],typeArguments:[o]})},repayFlashLoan:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[e.object(i.version),e.object(i.market),e.pure(n),e.object(r)],typeArguments:[s]})}}},Hi=({builder:t,txBlock:e})=>{let i=tS({builder:t,txBlock:e});return{normalMethod:i,addCollateralQuick:async(n,r,o)=>{let s=Ti(e),{obligationId:a}=await Ua(e,t,o);if(r==="sui"){let[l]=e.splitCoins(e.gas,[n]);i.addCollateral(a,l,r)}else{let{leftCoin:l,takeCoin:u}=await t.selectCoin(e,r,n,s);i.addCollateral(a,u,r),e.transferObjects([l],s)}},takeCollateralQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o,s),l=await t.query.getObligationCoinNames(a.obligationId);return await Mu(t,e,l),i.takeCollateral(a.obligationId,a.obligationKey,n,r)},depositQuick:async(n,r,o)=>{if(r==="sui"){let[l]=e.splitCoins(e.gas,[n]);return i.deposit(l,r)}let{leftCoin:s,takeCoin:a}=await t.selectCoin(e,r,n,o);return e.transferObjects([s],o),i.deposit(a,r)},withdrawQuick:async(n,r)=>{let o=Ti(e),s=t.utils.parseMarketCoinName(r),{leftCoin:a,takeCoin:l}=await t.selectMarketCoin(e,s,n,o);return e.transferObjects([a],o),i.withdraw(l,r)},borrowQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o,s),l=[...await t.query.getObligationCoinNames(a.obligationId),r];return await Mu(t,e,l),i.borrow(a.obligationId,a.obligationKey,n,r)},repayQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o);if(r==="sui"){let[f]=e.splitCoins(e.gas,[n]);return i.repay(a.obligationId,f,r)}let{leftCoin:l,takeCoin:u}=await t.selectCoin(e,r,n,s);return e.transferObjects([l],s),i.repay(a.obligationId,u,r)},updateAssetPricesQuick:async n=>Mu(t,e,n)}},Fm=async(...t)=>{let[e,i,n,r]=t;if(t.length===4&&r)return[r];let o=Ti(i),s=await Qu(e.query,o);if(s[n].length===0)throw new Error(`No stake account id found for sender ${o}`);return s[n].map(a=>a.id)},iS=async(...t)=>{let[e,i,n,r]=t,o=Ti(i),s=await Qu(e.query,o);if(s[n].length===0)throw new Error(`No stake account found for sender ${o}`);return r?s[n].filter(a=>a.id===r):s[n]},nS=({builder:t,txBlock:e})=>{let i={spoolPkg:t.address.get("spool.id")};return{createStakeAccount:n=>{let r=t.utils.parseMarketCoinType(n),o=t.address.get(`spool.pools.${n}.id`);return e.moveCall({target:`${i.spoolPkg}::user::new_spool_account`,arguments:[e.object(o),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[r]})},stake:(n,r,o)=>{let s=t.utils.parseMarketCoinType(o),a=t.address.get(`spool.pools.${o}.id`);e.moveCall({target:`${i.spoolPkg}::user::stake`,arguments:[e.object(a),e.object(n),typeof r=="string"?e.pure(r):r,e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},unstake:(n,r,o)=>{let s=t.utils.parseMarketCoinType(o),a=t.address.get(`spool.pools.${o}.id`);return e.moveCall({target:`${i.spoolPkg}::user::unstake`,arguments:[e.object(a),e.object(n),e.pure(r),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},claim:(n,r)=>{let o=t.address.get(`spool.pools.${r}.id`),s=t.address.get(`spool.pools.${r}.rewardPoolId`),a=t.utils.parseMarketCoinType(r),l=F0[r],u=t.utils.parseCoinType(l);return e.moveCall({target:`${i.spoolPkg}::user::redeem_rewards`,arguments:[e.object(o),e.object(s),e.object(n),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[a,u]})}}},eo=({builder:t,txBlock:e})=>{let i=nS({builder:t,txBlock:e});return{normalMethod:i,stakeQuick:async(n,r,o)=>{let s=Ti(e),a=await Fm(t,e,r,o),l=t.utils.parseMarketCoinType(r);if(typeof n=="number"){let u=await t.utils.selectCoinIds(n,l,s),[f,b]=t.utils.takeAmountFromCoins(e,u,n);i.stake(a[0],f,r),e.transferObjects([b],s)}else i.stake(a[0],n,r)},unstakeQuick:async(n,r,o)=>{let s=n,a=await iS(t,e,r,o),l=[];for(let u=0;u<a.length;u++){if(a[u].staked===0)continue;let f=Math.min(s,a[u].staked),b=i.unstake(a[u].id,f,r);if(l.push(b),s-=f,s===0)break}return l},claimQuick:async(n,r)=>{let o=await Fm(t,e,n,r),s=[];return o.forEach(a=>{let l=i.claim(a,n);s.push(l)}),s}}},rS=({builder:t,txBlock:e})=>{let i={pkgId:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")};return{lockSca:(n,r)=>e.moveCall({target:`${i.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[e.object(i.config),e.object(i.table),e.object(i.treasury),typeof n=="string"?e.pure(n):n,e.pure(r),e.object(so.SUI_CLOCK_OBJECT_ID)]}),extendLockPeriod:(n,r)=>{e.moveCall({target:`${i.pkgId}::ve_sca::extend_lock_period`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),e.pure(r),e.object(so.SUI_CLOCK_OBJECT_ID)]})},extendLockAmount:(n,r)=>{e.moveCall({target:`${i.pkgId}::ve_sca::lock_more_sca`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),typeof r=="string"?e.pure(r):r,e.object(so.SUI_CLOCK_OBJECT_ID)]})},renewExpiredVeSca:(n,r,o)=>{e.moveCall({target:`${i.pkgId}::ve_sca::renew_expired_ve_sca`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),typeof r=="string"?e.pure(r):r,e.pure(o),e.object(so.SUI_CLOCK_OBJECT_ID)]})},redeemSca:n=>e.moveCall({target:`${i.pkgId}::ve_sca::redeem`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),e.object(so.SUI_CLOCK_OBJECT_ID)]})}},to=({builder:t,txBlock:e})=>{let i=rS({builder:t,txBlock:e});return{normalMethod:i,lockScaQuick:async(n,r,o=!0)=>{let s=Ti(e),a=await oo(t,e),l,u=[];if(n!==void 0&&typeof n=="number"){let T=await t.utils.selectCoinIds(n,co,s),[O,P]=t.utils.takeAmountFromCoins(e,T,n);l=O,u.push(P)}else l=n;let f=t.utils.getUnlockAt(r,a?.unlockAt);o&&IT(n,r,f,a?.unlockAt),console.log(new Date(f*1e3).toLocaleString("en-CA",{hour12:!0}));let b=!a?.unlockAt,v=!b&&a.unlockAt*1e3<=new Date().getTime();if(b||v){if(l)if(b){let T=i.lockSca(l,f);u.push(T)}else{if(a.lockedScaAmount!==0){let T=i.redeemSca(a.keyId);u.push(T)}i.renewExpiredVeSca(a.keyId,l,f)}}else l&&r?(i.extendLockPeriod(a.keyId,f),i.extendLockAmount(a.keyId,l)):r?i.extendLockPeriod(a.keyId,f):l&&i.extendLockAmount(a.keyId,l);u.length>0&&e.transferObjects(u,s)},extendLockPeriodQuick:async(n,r,o=!0)=>{let s=await oo(t,e,r),a=t.utils.getUnlockAt(n);o&&OT(n,a,s?.unlockAt),s&&i.extendLockPeriod(s.keyId,a)},extendLockAmountQuick:async(n,r,o=!0)=>{let s=Ti(e),a=await oo(t,e,r);if(o&&PT(n,a?.unlockAt),a){let l=await t.utils.selectCoinIds(n,co,s),[u,f]=t.utils.takeAmountFromCoins(e,l,n);i.extendLockAmount(a.keyId,u),e.transferObjects([f],s)}},renewExpiredVeScaQuick:async(n,r,o,s=!0)=>{let a=Ti(e),l=await oo(t,e,o),u=t.utils.getUnlockAt(r,l?.unlockAt);if(s&&DT(n,r,l?.unlockAt),l){let f=[];if(l.lockedScaAmount!==0){let O=i.redeemSca(l.keyId);f.push(O)}let b=await t.utils.selectCoinIds(n,co,a),[v,T]=t.utils.takeAmountFromCoins(e,b,n);f.push(T),i.renewExpiredVeSca(l.keyId,v,u),e.transferObjects(f,a)}},redeemScaQuick:async n=>{let r=Ti(e),o=await oo(t,e,n);if(ps(o?.unlockAt),o){let s=i.redeemSca(o.keyId);e.transferObjects([s],r)}}}},Ot=class{params;client;address;builder;query;utils;walletAddress;constructor(t,e){this.params=t,this.client=t.client,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.query=e?.query??new z0(t,{address:this.address}),this.utils=e?.utils??new Xu(t,{address:this.address,query:this.query}),this.builder=e?.builder??new G0(t,{address:this.address,query:this.query,utils:this.utils}),this.walletAddress=(0,R0.normalizeSuiAddress)(t.walletAddress)}init(t=!1){(t||!this.address.getAddresses())&&this.address.read(),this.builder.init(t,this.address),this.query.init(t,this.address),this.utils.init(t,this.address)}async getObligations(t){let e=t||this.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let i=e||this.walletAddress;return this.query.getStakeAccounts(t,i)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new ze.TransactionBlock,i=Hi({builder:this.builder,txBlock:e}),n=t||this.walletAddress;return e.setSender(n),i.normalMethod.openObligationEntry(),e}async depositCollateral(t,e,i,n){let r=new ze.TransactionBlock,o=n||this.walletAddress;r.setSender(o);let s=Hi({builder:this.builder,txBlock:r}),a=await this.query.getObligations(o),l=i||a?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[u,f,b]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,u),s.normalMethod.returnObligation(u,b),r.transferObjects([f],o)}return r}async withdrawCollateral(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=r||this.walletAddress;o.setSender(a);let l=await s.takeCollateralQuick(e,t,i,n);return o.transferObjects([l],a),o}async deposit(t,e,i){let n=new ze.TransactionBlock,r=Hi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;n.setSender(o);let s=await r.depositQuick(e,t,i);return n.transferObjects([s],o),n}async withdraw(t,e,i){let n=new ze.TransactionBlock,r=i||this.walletAddress,o=Hi({builder:this.builder,txBlock:n});n.setSender(r);let s=await o.withdrawQuick(e,t);return n.transferObjects([s],r),n}async borrow(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=Fi({builder:this.builder,txBlock:o}),l=r||this.walletAddress;o.setSender(l);let u=Ga.includes(t);u&&await a.unstakeObligationQuick(i,n);let f=await s.borrowQuick(e,t,i,n);return o.transferObjects([f],l),u&&await a.stakeObligationQuick(i,n),o}async borrowWithBoost(t,e,i,n,r,o){let s=new ze.TransactionBlock,a=Hi({builder:this.builder,txBlock:s}),l=Fi({builder:this.builder,txBlock:s}),u=o||this.walletAddress;s.setSender(u);let f=Ga.includes(t);f&&await l.unstakeObligationQuick(i,n);let b=await a.borrowQuick(e,t,i,n);return s.transferObjects([b],u),f&&await l.stakeObligationWithVeScaQuick(i,n,r),s}async repay(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=Fi({builder:this.builder,txBlock:o}),l=r||this.walletAddress;o.setSender(l);let u=Ga.includes(t);return u&&await a.unstakeObligationQuick(i,n),await s.repayQuick(e,t,i,l),u&&await a.stakeObligationQuick(i,n),o}async createStakeAccount(t,e){let i=new ze.TransactionBlock,n=eo({builder:this.builder,txBlock:i}),r=e||this.walletAddress;i.setSender(r);let o=n.normalMethod.createStakeAccount(t);return i.transferObjects([o],r),i}async supplyAndStake(t,e,i,n){let r=new ze.TransactionBlock,o=Hi({builder:this.builder,txBlock:r}),s=eo({builder:this.builder,txBlock:r}),a=n||this.walletAddress;r.setSender(a);let l=await o.depositQuick(e,t,n),u=this.utils.parseMarketCoinName(t);if(!Vu.find(v=>v===u))return r;let f=await this.query.getStakeAccounts(u,a),b=i||(f.length>0?f[0].id:void 0);if(b)await s.stakeQuick(l,u,b);else{let v=s.normalMethod.createStakeAccount(u);await s.stakeQuick(l,u,v),r.transferObjects([v],a)}return r}async unstakeAndWithdraw(t,e,i){let n=new ze.TransactionBlock,r=Hi({builder:this.builder,txBlock:n}),o=eo({builder:this.builder,txBlock:n}),s=this.walletAddress,a=[];n.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let u=0;u<i.length;u++){let f=i[u],[b]=await o.unstakeQuick(f.coin,l,f.id);if(b){let v=r.normalMethod.withdraw(b,t);a.push(v)}}if(e>0){let u=await r.withdrawQuick(e,t);a.push(u)}return n.transferObjects(a,s),n}async stake(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=n||this.walletAddress;r.setSender(s);let a=await this.query.getStakeAccounts(t,s),l=i||(a.length>0?a[0].id:void 0);if(l)await o.stakeQuick(e,t,l);else{let u=o.normalMethod.createStakeAccount(t);await o.stakeQuick(e,t,u),r.transferObjects([u],s)}return r}async unstake(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=n||this.walletAddress;r.setSender(s);let a=await o.unstakeQuick(e,t,i);return r.transferObjects(a,s),r}async claim(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=Fi({builder:this.builder,txBlock:r}),a=n||this.walletAddress;r.setSender(a);let l={sui:[],sca:[]};for(let u=0;u<t.length;u++){let{stakeMarketCoinName:f,stakeAccountId:b}=t[u],v=o.normalMethod.claim(b,f);l.sui.push(v)}for(let u=0;u<e.length;u++){let{obligationId:f,obligationKey:b,rewardCoinName:v}=e[u],T=s.normalMethod.claimBorrowIncentive(f,b,v);l[v].push(T)}for(let u=0;u<i.length;u++){let{obligationId:f,obligationKey:b,rewardCoinName:v}=i[u],T=s.normalMethod.oldClaimBorrowIncentive(f,b,v);l[v].push(T)}return l.sui.length>0&&(l.sui.length>1&&r.mergeCoins(l.sui[0],l.sui.slice(1)),r.transferObjects([l.sui[0]],r.pure(a))),l.sca.length>0&&(l.sca.length>1&&r.mergeCoins(l.sca[0],l.sca.slice(1)),r.transferObjects([l.sca[0]],r.pure(a))),r}async stakeObligation(t,e,i){let n=this.builder.createTxBlock(),r=Fi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;return n.setSender(o),await r.stakeObligationQuick(t,e),n}async unstakeObligation(t,e,i){let n=this.builder.createTxBlock(),r=Fi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;return n.setSender(o),await r.unstakeObligationQuick(t,e),n}async stakeSca(t,e=!1,i=!1,n,r,o,s,a){let l=new ze.TransactionBlock,u=to({builder:this.builder,txBlock:l}),f=Fi({builder:this.builder,txBlock:l}),b=a||this.walletAddress;l.setSender(b);let v=await this.builder.utils.selectCoinIds(t,co,b),[T,O]=this.builder.utils.takeAmountFromCoins(l,v,t),P;return s?u.normalMethod.extendLockAmount(s,T):P=u.normalMethod.lockSca(T,o),n&&r&&(e&&(i?f.normalMethod.oldUnstakeObligation(n,r):f.normalMethod.unstakeObligation(n,r)),f.normalMethod.stakeObligationWithVesca(n,r,s||P)),s||l.transferObjects([P,O],b),l}async stakeMoreSca(t,e,i){let n=new ze.TransactionBlock,r=i||this.walletAddress;return n.setSender(r),n}async extendStakeScaLockPeriod(t,e,i,n,r=!1,o=!1,s){let a=new ze.TransactionBlock,l=to({builder:this.builder,txBlock:a}),u=Fi({builder:this.builder,txBlock:a}),f=s||this.walletAddress;return a.setSender(f),l.normalMethod.extendLockPeriod(e,t),i&&n&&(r&&(o?u.normalMethod.oldUnstakeObligation(i,n):u.normalMethod.unstakeObligation(i,n)),u.normalMethod.stakeObligationWithVesca(i,n,e)),a}async extendPeriodAndStakeMoreSca(t,e,i,n,r,o=!1,s=!1,a){let l=new ze.TransactionBlock,u=to({builder:this.builder,txBlock:l}),f=Fi({builder:this.builder,txBlock:l}),b=a||this.walletAddress;l.setSender(b);let v=await this.builder.utils.selectCoinIds(t,co,b),[T,O]=this.builder.utils.takeAmountFromCoins(l,v,t);return u.normalMethod.extendLockPeriod(e,i),u.normalMethod.extendLockAmount(e,T),l.transferObjects([O],b),!n||!r||(o&&(s?f.normalMethod.oldUnstakeObligation(n,r):f.normalMethod.unstakeObligation(n,r)),f.normalMethod.stakeObligationWithVesca(n,r,e)),l}async renewExpiredStakeSca(t,e,i,n=!1,r,o,s=!1,a=!1,l){let u=new ze.TransactionBlock,f=to({builder:this.builder,txBlock:u}),b=Fi({builder:this.builder,txBlock:u}),v=l||this.walletAddress;if(u.setSender(v),n){let j=f.normalMethod.redeemSca(i);u.transferObjects([j],v)}let T=await this.builder.utils.selectCoinIds(t,co,v),[O,P]=this.builder.utils.takeAmountFromCoins(u,T,t);return u.transferObjects([P],v),f.normalMethod.renewExpiredVeSca(i,O,e),!r||!o||(s&&(a?b.normalMethod.oldUnstakeObligation(r,o):b.normalMethod.unstakeObligation(r,o)),b.normalMethod.stakeObligationWithVesca(r,o,i)),u}async redeemSca(t){let e=new ze.TransactionBlock,i=to({builder:this.builder,txBlock:e}),n=this.walletAddress;return e.setSender(n),await i.redeemScaQuick(t),e}async migrateAndClaim(t,e,i,n){let r=new ze.TransactionBlock,o=Fi({builder:this.builder,txBlock:r}),s=this.walletAddress;r.setSender(s);let a=o.normalMethod.oldClaimBorrowIncentive(i,e,n);return r.transferObjects([a],s),o.stakeObligationWithVeScaQuick(i,e,t),r}async withdrawUnlockedSca(t,e){let i=new ze.TransactionBlock,n=to({builder:this.builder,txBlock:i}),r=e||this.walletAddress;return i.setSender(r),await n.redeemScaQuick(t),i}calculateAvailableClaimCoin(t,e){let i=new vi(t.weightedAmount),n=e.currentPointIndex?vi(e.currentPointIndex-t.index).dividedBy(1e9):1;return i.multipliedBy(n).plus(t.points).shiftedBy(-1*e.coinDecimal)}},oS=class Z0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new Z0(e)}},sS=class X0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await i.init(),i.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new X0(e)}},aS=class J0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new J0(e)}},cS=class Q0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new Q0(e)}},lS=class Y0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new Y0(e)}},uS=class e_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new e_(e)}},dS=class t_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await i.init(),i.migrateAndClaim(this.data.veScaKey,this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName)}static fromData(e){return new t_(e)}},fS=class i_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.openObligation()}static fromData(e){return new i_(e)}},hS=class n_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.redeemSca(this.data.veScaKey)}static fromData(e){return new n_(e)}},pS=class r_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new r_(e)}},mS=class o_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new o_(e)}},gS=class s_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new s_(e)}},_S=class a_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a_(e)}},bS=class c_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new c_(e)}},wS=class l_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new l_(e)}},yS=class u_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new u_(e)}},vS=class d_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new d_(e)}},kS=class f_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new f_(e)}},CS=class h_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new h_(e)}},TS=class p_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new p_(e)}},SS=class{application="scallop";async deserialize(t){let e=new G0({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});await e.init();let{transactionBlock:i}=t,n=new xT(i,e).decode();return{txType:j0.TransactionType.Other,txSubType:n.type,intentionData:n.intentionData}}async build(t){let{suiClient:e,account:i,network:n}=t,r;switch(t.txSubType){case"SupplyLending":r=wS.fromData(t.intentionData);break;case"WithdrawLending":r=CS.fromData(t.intentionData);break;case"Borrow":r=oS.fromData(t.intentionData);break;case"Repay":r=mS.fromData(t.intentionData);break;case"DepositCollateral":r=cS.fromData(t.intentionData);break;case"WithdrawCollateral":r=kS.fromData(t.intentionData);break;case"OpenObligation":r=fS.fromData(t.intentionData);break;case"StakeSpool":r=_S.fromData(t.intentionData);break;case"UnstakeSpool":r=yS.fromData(t.intentionData);break;case"ClaimIncentiveReward":r=aS.fromData(t.intentionData);break;case"BorrowWithBoost":r=sS.fromData(t.intentionData);break;case"StakeSca":r=gS.fromData(t.intentionData);break;case"ExtendStakePeriod":r=uS.fromData(t.intentionData);break;case"ExtendPeriodAndStakeMore":r=lS.fromData(t.intentionData);break;case"RenewExpStakePeriod":r=pS.fromData(t.intentionData);break;case"WithdrawStakedSca":r=TS.fromData(t.intentionData);break;case"SupplyAndStakeLending":r=bS.fromData(t.intentionData);break;case"WithdrawAndUnstakeLending":r=vS.fromData(t.intentionData);break;case"RedeemSca":r=hS.fromData(t.intentionData);break;case"MigrateAndClaim":r=dS.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:i,network:n})}},Ln={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},qn={PackageId:"0xdee9"},xS=(t,e,i,n)=>{if(t===1)switch(n.findIndex(r=>r===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(i.findIndex(r=>r===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},AS=class{constructor(t,e,i){this.txb=t,this.turbosSdk=e,this.config=i}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}decode(t){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(i=>i.kind==="MoveCall"&&i.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Ln.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Ln.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`)}decodeSwap(){let t=this.transactions.find(b=>b.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let i=xS(e,t.target,this.swap1Layer,this.swap2Layer),n=i.map((b,v)=>{let T=this.helper.decodeSharedObjectId(v),O=this.helper.decodeInputU128(4+v+e),P=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new xu.default(O.toString()));return{pool:T,a2b:b,nextTickIndex:P}}),r=i[0]||e===1?t.typeArguments[0]:t.typeArguments[1],o=e===1?t.typeArguments[4]:i[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),a=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),u=this.helper.decodeInputU64(2+e),f=this.helper.decodeInputU64(3+e);return{txType:li.TransactionType.Other,type:"Swap",intentionData:{routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:l?u:f,amountB:l?f:u,amountSpecifiedIsInput:l,slippage:"0.1",deadline:a}}}decodeAddLiquidity(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),i=this.helper.decodeInputU64(8),n=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),o=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),a=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:li.TransactionType.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:i,amountB:n,tickLower:o?-r:r,tickUpper:a?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){let e=this.helper.decodeSharedObjectId(0),i=this.helper.decodeSharedObjectId(4),n=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),o=this.helper.decodeInputU64(9);return{txType:li.TransactionType.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:n,amountB:r,nft:i,deadline:o}}}decodeDecreaseLiquidity(t){let e=this.helper.decodeSharedObjectId(0),i=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),o=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:li.TransactionType.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:n,nft:i,amountA:r,amountB:o,slippage:10,address:t,deadline:s}}}decodeCollectFee(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),i=this.helper.decodeInputAddress(5),n=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),o=this.helper.decodeInputU64(6);return{txType:li.TransactionType.Other,type:"CollectFee",intentionData:{pool:t,address:i,collectAmountA:n,collectAmountB:r,nft:e,deadline:o}}}decodeCollectReward(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),i=this.helper.decodeInputAddress(6),n=this.collectRewardHelper.map(o=>o.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:li.TransactionType.Other,type:"CollectReward",intentionData:{pool:t,address:i,rewardAmounts:n,nft:e,deadline:r}}}decodeBurn(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:li.TransactionType.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),i=this.decreaseLiquidityHelper.decodeSharedObjectId(2),n=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),o=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),a=this.collectRewardHelper.map(f=>f.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,u=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:li.TransactionType.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:n,nft:i,amountA:r,amountB:o,slippage:10,address:t,collectAmountA:l,collectAmountB:u,rewardAmounts:a,deadline:s}}}decodePrixClaim(){return{txType:li.TransactionType.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:li.TransactionType.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),i=this.swapExactBaseForQuoteHelper.shortTypeArg(0),n=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:li.TransactionType.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:i,token2:n}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),i=this.swapExactQuoteForBaseHelper.shortTypeArg(0),n=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:li.TransactionType.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:i,token2:n}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero");return new io(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect_reward`).map(t=>new io(t,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new io(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new io(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`);return new io(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`);return new io(t,this.txb)}},io=class Xa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Xa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Xa.getOwnedObjectId(i)}decodeInputU128(e){let i=this.decodePureArg(e,"u128");return Number(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU32(e){let i=this.decodePureArg(e,"u32");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Fn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Xa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Wu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Fn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Fn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Fn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Fn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Wu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Fn.normalizeStructTag)(this.moveCall.typeArguments[e])}shortTypeArg(e){return this.moveCall.typeArguments[e]}txArg(e){return this.moveCall.arguments[e]}},IS=class g_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,tickLower:l,tickUpper:u,deadline:f,txb:b}=this.data;return i.pool.addLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,tickLower:l,tickUpper:u,deadline:f,txb:b})}static fromData(e){return new g_(e)}},OS=class __ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,nft:r,txb:o}=this.data;return i.nft.burn({pool:n,nft:r,txb:o})}static fromData(e){return new __(e)}},PS=class b_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,nft:o,collectAmountA:s,collectAmountB:a,deadline:l,txb:u}=this.data;return i.pool.collectFee({pool:n,address:r,collectAmountA:s,collectAmountB:a,nft:o,deadline:l,txb:u})}static fromData(e){return new b_(e)}},DS=class w_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,nft:o,rewardAmounts:s,deadline:a,txb:l}=this.data;return i.pool.collectReward({pool:n,address:r,rewardAmounts:s,nft:o,deadline:a,txb:l})}static fromData(e){return new w_(e)}},ES=class y_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{fee:n,address:r,tickLower:o,tickUpper:s,sqrtPrice:a,slippage:l,coinTypeA:u,coinTypeB:f,amountA:b,amountB:v,deadline:T,txb:O}=this.data;return i.pool.createPool({fee:n,amountA:b,amountB:v,address:r,tickLower:o,tickUpper:s,sqrtPrice:a,slippage:l,coinTypeA:u,coinTypeB:f,deadline:T,txb:O})}static fromData(e){return new y_(e)}},MS=class v_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,nft:l,decreaseLiquidity:u,deadline:f,txb:b}=this.data;return i.pool.decreaseLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,nft:l,decreaseLiquidity:u,deadline:f,txb:b})}static fromData(e){return new v_(e)}},jS=class k_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,nft:l,deadline:u,txb:f}=this.data;return i.pool.increaseLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,nft:l,deadline:u,txb:f})}static fromData(e){return new k_(e)}},BS=class S_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new C_.TransactionBlock;return i.moveCall({target:`${Ln.PackageId}::claim::claim`,typeArguments:[Ln.turbosCoinType],arguments:[i.object(Ln.Claim),i.object(T_.SUI_CLOCK_OBJECT_ID)]}),i}static fromData(e){return new S_(e)}},NS=class A_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new x_.TransactionBlock;return i.moveCall({target:`${Ln.PackageId}::claim::join`,typeArguments:[Ln.turbosCoinType],arguments:[i.object(Ln.Claim)]}),i}static fromData(e){return new A_(e)}},FS=class O_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),n=new I_.TransactionBlock;return n=await i.pool.collectFee({txb:n,...this.data}),n=await i.pool.collectReward({txb:n,...this.data}),n=await i.pool.decreaseLiquidity({txb:n,...this.data}),n=await i.nft.burn({txb:n,nft:this.data.nft,pool:this.data.pool}),n}static fromData(e){return new O_(e)}},RS=class P_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:a,amountB:l,slippage:u,amountSpecifiedIsInput:f,deadline:b,txb:v}=this.data;return i.trade.swap({routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:a,amountB:l,amountSpecifiedIsInput:f,slippage:u,deadline:b,txb:v})}static fromData(e){return new P_(e)}},D_=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,i){let n=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),n.push(...r.data);while(r.hasNextPage);let o=[],s=0;return n.sort((a,l)=>Number(l.balance)-Number(a.balance)).some(a=>s>=i?!0:(s+=Number(a.balance),o.push(a),!1)),o}splitAndMergeCoin(t,e,i){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[o]=i.splitCoins(i.gas,[i.pure(e)]);return[o,void 0]}let n=i.object(t[0].coinObjectId);t.length>1&&i.mergeCoins(n,t.slice(1).map(o=>i.object(o.coinObjectId)));let[r]=i.splitCoins(n,[i.pure(e)]);return[r,n]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${qn.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Yr(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${qn.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}},E_=89,M_=1e6,qS=async t=>{let{token1:e,token2:i,poolId:n,amountIn:r,currentAddress:o,turbosSdk:s}=t,a=new ed.TransactionBlock,l=new D_(s),u=await l.getCoinsData(o,i,r),[f,b]=l.splitAndMergeCoin(u,r,a);if(!f)throw new Error(`Not enough balance: ${i}`);let v=await l.IsAccountCap(o),T=v?a.object(v):l.createAccount(a),[O,P,j]=a.moveCall({typeArguments:[e,i],target:`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[a.object(String(n)),a.pure(E_),T,a.pure(r),a.object((0,Yu.normalizeSuiObjectId)("0x6")),f]});return b&&a.transferObjects([b],a.pure(o)),a.transferObjects([O],a.pure(o)),a.transferObjects([P],a.pure(o)),v||a.transferObjects([T],a.pure(o)),a.setSenderIfNotSet(o),a.setGasBudget(M_),a},LS=async t=>{let{token1:e,token2:i,poolId:n,amountIn:r,currentAddress:o,turbosSdk:s}=t,a=new ed.TransactionBlock,l=new D_(s),u=await l.getCoinsData(o,e,r),[f,b]=l.splitAndMergeCoin(u,r,a);if(!f)throw new Error(`Not enough balance: ${e}`);let v=await l.IsAccountCap(o),T=v?a.object(v):l.createAccount(a),O=l.zero(i,a),[P,j,B]=a.moveCall({typeArguments:[e,i],target:`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[a.object(String(n)),a.pure(E_),T,a.pure(r),f,O,a.object((0,Yu.normalizeSuiObjectId)("0x6"))]});return b&&a.transferObjects([b],a.pure(o)),a.transferObjects([P],a.pure(o)),a.transferObjects([j],a.pure(o)),v||a.transferObjects([T],a.pure(o)),a.setSenderIfNotSet(o),a.setGasBudget(M_),a},$S=class j_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient);return await LS({...this.data,turbosSdk:i,currentAddress:e.account.address})}static fromData(e){return new j_(e)}},US=class B_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient);return await qS({...this.data,turbosSdk:i,currentAddress:e.account.address})}static fromData(e){return new B_(e)}},KS=class{application="turbos";async deserialize(t){let e=new Le(t.network.replace("sui:",""),t.suiClient),i=await e.contract.getConfig(),{transactionBlock:n,account:r}=t,o=new AS(n,e,i).decode(r.address);return{txType:m_.TransactionType.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:i,network:n}=t,r;switch(t.txSubType){case"CreatePool":r=ES.fromData(t.intentionData);break;case"AddLiquidity":r=IS.fromData(t.intentionData);break;case"IncreaseLiquidity":r=jS.fromData(t.intentionData);break;case"DecreaseLiquidity":r=MS.fromData(t.intentionData);break;case"RemoveLiquidity":r=FS.fromData(t.intentionData);break;case"CollectFee":r=PS.fromData(t.intentionData);break;case"CollectReward":r=DS.fromData(t.intentionData);break;case"Burn":r=OS.fromData(t.intentionData);break;case"Swap":r=RS.fromData(t.intentionData);break;case"PrixJoin":r=NS.fromData(t.intentionData);break;case"PrixClaim":r=BS.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=$S.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=US.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:i,network:n})}},VS={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Et=VS,WS=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Ja.TransactionType.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let t=this.transactions.find(e=>e.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Ja.TransactionType.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Ja.TransactionType.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(Et.packageId));return new zS(t,this.txb)}},zS=class Qa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Qa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Qa.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Rn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Qa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return zu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Rn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Rn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Rn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Rn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return zu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Rn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},GS=class R_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new F_.TransactionBlock,{ticketId:n}=this.data;return i.moveCall({target:`${Et.packageId}::native_pool::burn_ticket`,arguments:[i.object(Et.poolObjectId),i.object(Et.systemStateObjectId),i.object(n)]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new R_(e)}},HS=class L_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new q_.TransactionBlock,{amount:n}=this.data,[r]=i.splitCoins(i.gas,[i.pure(n)]);return i.moveCall({target:`${Et.packageId}::native_pool::stake`,arguments:[i.object(Et.poolObjectId),i.object(Et.metadataObjectId),i.object(Et.systemStateObjectId),r]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new L_(e)}},ZS=class U_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new $_.TransactionBlock,{amount:n}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[o,...s]=r.filter(u=>u.coinType.split("::")[0]===Et.certType.split("::")[0]),a=i.object(o.coinObjectId);s.length&&i.mergeCoins(a,s.map(u=>i.object(u.coinObjectId)));let l=i.splitCoins(i.object(o.coinObjectId),[i.pure(n)]);return i.moveCall({target:`${Et.packageId}::native_pool::unstake`,arguments:[i.object(Et.poolObjectId),i.object(Et.metadataObjectId),i.object(Et.systemStateObjectId),l]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new U_(e)}},XS=class{application="volo";async deserialize(t){let{transactionBlock:e}=t,i=new WS(e).decode();return{txType:N_.TransactionType.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case"Stake":n=HS.fromData(t.intentionData);break;case"UnStake":n=ZS.fromData(t.intentionData);break;case"ClaimTicket":n=GS.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},cc=new vT([new sT,new _T,new iT,new yT,new iC,new KS,new SS,new XS]);var Pe=require("@msafe/sui3-utils"),ld=require("@mysten/sui.js/transactions"),mc=require("@mysten/sui.js/utils");var K_=require("@mysten/sui.js/transactions"),JS=1000n,QS=120n,YS=100n,e2={multiplier:{numerator:QS,denominator:YS}};var lc=class{constructor(e){this.globals=e}async simulate(e,i=e2){let n=this.copyTransactionBlock(e.txb),{suiClient:r}=this.globals,o=await this.getGasPrice(i);n.setGasPrice(o);let s=await r.devInspectTransactionBlock({transactionBlock:n,sender:e.sender}),{gasUsed:a}=s.effects,l=this.toGasBudget(a,o),u=s.effects.status.status==="success",f;return u||(f=s.effects.status.error),{success:u,gasPrice:o,gasObject:s.effects.gasObject.reference,gasUsed:a,gasBudget:l,simulationError:f}}async getGasPrice(e){if(this.isFixedValue(e))return e.fixedVal;let i=await this.globals.suiClient.getReferenceGasPrice();return this.applyGasOption(i,e)}toGasBudget(e,i){let{computationCost:n,storageCost:r}=e,o=JS*i,s=BigInt(n)+o,a=s+BigInt(r);return a>s?a:s}isFixedValue(e){return"fixedVal"in e}isMultiplier(e){return"multiplier"in e}applyGasOption(e,i){if(this.isFixedValue(i))return i.fixedVal;if(this.isMultiplier(i)){let{multiplier:n}=i;return e*n.numerator/n.denominator}throw new Error("Sanity: Unknown gas price option")}copyTransactionBlock(e){return K_.TransactionBlock.from(e.serialize())}};var td=require("buffer");function uc(t){return td.Buffer.from(t,"utf-8")}function t2(t){return`0x${Array.prototype.map.call(t,e=>`0${e.toString(16)}`.slice(-2)).join("")}`}function dc(t){return Uint8Array.from(td.Buffer.from(t.startsWith("0x")?t.slice(2):t,"hex"))}var hc=require("@mysten/sui.js/verify");var Un=require("@mysten/sui.js/utils");var fc=require("@mysten/sui.js/utils"),_s=class{_client;_coinMetaReg;constructor(e){this._client=e,this._coinMetaReg=new Map}async getCoinMeta(e){let i=(0,fc.normalizeStructTag)(e);if(this._coinMetaReg.has(i))return this._coinMetaReg.get(i);let n=await this.queryCoinMeta(i);return n&&this._coinMetaReg.set(i,n),n}async queryCoinMeta(e){return await this._client.getCoinMetadata({coinType:e})||void 0}},id=/^0x0000000000000000000000000000000000000000000000000000000000000002::coin::Coin<(.+)>$/,bs=class t{static isCoin(e){return e?(0,fc.normalizeStructTag)(e).match(id)!=null:!1}static getCoinType(e){let[,i]=(0,fc.normalizeStructTag)(e).match(id)??[];return i||null}static getBalance(e){if(!t.isCoin(e.type)||e.content?.dataType!=="moveObject")return;let{balance:i}=e.content?.fields;if(i!==void 0)return BigInt(i)}};var dn=class{static normalizeSuiAddress(e){return(0,Un.normalizeSuiAddress)(e)}static normalizeStructTag(e){return(0,Un.normalizeStructTag)(e)}static isSuiAddressEqual(e,i){return(0,Un.normalizeSuiAddress)(e)===(0,Un.normalizeSuiAddress)(i)}static isSuiStructEqual(e,i){return(0,Un.normalizeStructTag)(e)===(0,Un.normalizeStructTag)(i)}static isCoinObjectType(e){return bs.isCoin(e)}};function nd(t,e){return t.startsWith(e)?t:e+t}var rd=class t{static async getPublicKeyFromSignature(e){return e.messageType==="TransactionBlock"?(0,hc.verifyTransactionBlock)(e.message,e.signature):(0,hc.verifyPersonalMessage)(e.message,e.signature)}static async getPublicKeyFromPersonalSignature(e){let i=uc(e.messageStr);return this.getPublicKeyFromSignature({message:i,messageType:"Personal",signature:e.signature})}static async verifySignature(e){let i=await t.getPublicKeyFromSignature(e);return dn.isSuiAddressEqual(i.toSuiAddress(),e.targetAddress)}static async verifyPersonalSignature(e){let i=uc(e.messageStr);return this.verifySignature({message:i,messageType:"Personal",signature:e.signature,targetAddress:e.targetAddress})}static async verifyTransactionSignature(e){return this.verifySignature({messageType:"TransactionBlock",message:e.payload,signature:e.signature,targetAddress:e.targetAddress})}};var V_=require("@msafe/sui3-utils"),W_=require("@mysten/sui.js/cryptography"),z_=require("@mysten/sui.js/multisig");var i2="0x2::sui::SUI";async function od(t,e){let i;try{i=await t.queryTransactionBlocks({filter:{FromAddress:e},options:{showInput:!0},limit:2})}catch{return}if(i.data.length===0||!i.data[0].transaction?.txSignatures)return;let r=i.data[0].transaction?.txSignatures;for(let o=0;o!==r.length;o++){let s=r[o],a=n2(s,e);if(a)return a}}function n2(t,e){let i=(0,W_.parseSerializedSignature)(t);switch(i.signatureScheme){case"MultiSig":{let n=new z_.MultiSigPublicKey(i.multisig.multisig_pk).toSuiAddress();if(dn.isSuiAddressEqual(n,e))throw new Error("multi-sig wallet cannot be owner");return}case"ZkLogin":{if(dn.isSuiAddressEqual(i.zkLogin.address,e))throw new Error("ZkLogin wallet cannot be owner");return}case"ED25519":case"Secp256k1":case"Secp256r1":{let n=V_.PublicKeySerde.de({publicKeyEncoded:i.publicKey,schema:i.signatureScheme});return dn.isSuiAddressEqual(n.toSuiAddress(),e)?n:void 0}default:throw new Error("Unknown schema")}}async function r2(t){let e=!0,i,n=[];for(;e;){let r=await t.suiClient.getCoins({owner:t.owner,coinType:t.coinType,cursor:i});n.push(...r.data),e=r.hasNextPage,i=r.nextCursor}return n}var G_=25;async function H_(t){let e=[];for(;await t.hasNext();){let i=await t.next();e.push(i)}return e&&Array.isArray(e[0])?e.flat(1):e}var sd=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},pc=class{constructor(e){this.requester=e;this.pager=new sd(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};async function Z_(t,e,i){let n=new ad(t,e,i);return await H_(n)}var ad=class extends pc{constructor(i,n,r){super(new cd(i,n,r));this.provider=i;this.owner=n;this.options=r}},cd=class{constructor(e,i,n){this.provider=e;this.owner=i;this.options=n;this.nextCursor=null,this.filter=n?.filter,this.pageSize=n?.pageSize||G_,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}nextCursor;filter;pageSize;objectOptions;async doNextRequest(){let e=await this.provider.getOwnedObjects({owner:this.owner,options:this.objectOptions,cursor:this.nextCursor,limit:this.pageSize});this.nextCursor=e.nextCursor;let i;if(this.filter){let{filter:n}=this;i=e.data.filter(r=>n?.(r))}else i=e.data;return{data:i.map(n=>n.data).filter(n=>n),hasNext:e.hasNextPage}}};var pr=class t{constructor(e,i){this.globals=e;this.info=i;this.multiSig=new Pe.MultiSigAccount({threshold:i.threshold,ownersWithWeight:i.owners,creationNonce:i.creationNonce}),this.coinHelper=new _s(this.suiClient),this.simulator=new lc(e)}multiSig;coinHelper;simulator;static async New(e,i){let n=await e.backend.getMSafeAccountInfo(i);if(new t(e,n).address!==i)throw new Error("Invalid msafe config with address")}async ownedCoins(){let e=await this.suiClient.getAllBalances({owner:this.address});return Promise.all(e.map(async i=>{let n=await this.coinHelper.getCoinMeta(i.coinType),r=i.lockedBalance.number?BigInt(i.totalBalance)-BigInt(i.lockedBalance.number):BigInt(i.totalBalance);return{type:(0,mc.normalizeStructTag)(i.coinType),balance:BigInt(r),metadata:n}}))}async ownedObjects(e){let i={filter:n=>!n?.data?.type?.startsWith("0x2::coin::Coin"),...e};return Z_(this.suiClient,this.address,i)}async pendingTransaction(){let e=await this.backend.getPendingTransactions({msafeAddress:this.address});if(!e.pending)return;let i=e.pending,n=e.reject;return{application:i.application,txType:i.txType,txSubType:i.txSubType,createdAt:i.createdAt,creator:i.creator,digest:i.digest,intention:i.intention,sequenceNumber:i.sequenceNumber,payload:i.payload,votes:i.votes,approvalWeight:this.calculateWeightFromVotes(i.votes),msafeAddress:i.msafeAddress,rejectDigest:n?.digest??"",rejectPayload:n?.payload??"",rejectVotes:n?.votes??[],rejectWeight:this.calculateWeightFromVotes(n?.votes??[])}}async historyTransaction(e){return this.backend.getHistoryTransactions({msafeAddress:this.address,...e})}async futureIntentions(e){return this.backend.getFutureIntentions({msafeAddress:this.address,...e})}async currentSequenceNumber(){return this.backend.getCurrentSequenceNumber(this.address)}async nextSequenceNumber(){return this.backend.getNextSequenceNumber(this.address)}async simulateIntention(e){let i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});return this.simulator.simulate({txb:n,sender:this.address})}async proposeIntention(e){let i=Pe.SigningMessageHelper.proposeIntentionMessage({msafeAddress:this.address,intention:e.intention,sn:e.sequenceNumber}),n=await this.wallet.signPersonalMessage({messageStr:i});return this.backend.proposeIntention({...e,msafeAddress:this.address,signature:n.signature})}async proposeIntentionAndBuildVote(e){let i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});n.setGasPrice(e.gasPrice),n.setGasBudget(e.gasBudget),n.setSender(this.address);let r=await n.build({client:this.globals.suiClient}),o=await n.getDigest({client:this.globals.suiClient}),s=await this.wallet.signTransactionBlock({transactionBlock:r});return this.backend.proposeIntentionAndBuildVote({...e,payload:(0,mc.toHEX)(r),digest:o,msafeAddress:this.address,signature:s.signature})}async simulateCoinTransferIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.coin.send,sequenceNumber:i,intention:e})}async proposeCoinTransferIntention(e){let i=await this.nextSequenceNumber();return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.coin.send,sequenceNumber:i,intention:e})}async simulateObjectTransferIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.object.send,sequenceNumber:i,intention:e})}async proposeObjectTransferIntention(e){let i=await this.nextSequenceNumber();return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.object.send,sequenceNumber:i,intention:e})}async simulatePlainPayloadIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Other,txSubType:Pe.TransactionSubTypes.others.plain,sequenceNumber:i,intention:e})}async proposePlainPayloadIntention(e){let i=await this.nextSequenceNumber(),n=ld.TransactionBlock.from(e.payload);if(!n.blockData.sender||!(0,Pe.isSameAddress)(n.blockData.sender,this.address))throw new Error("Transaction sender is not same as the multisig address");return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Other,txSubType:Pe.TransactionSubTypes.others.plain,sequenceNumber:i,intention:e})}async voteForTransaction(e,i){let n=dc(i),r=await this.wallet.signTransactionBlock({transactionBlock:n});return this.backend.voteForTransaction({msafeAddress:this.address,digest:e,signature:r.signature})}async proposePendingTransaction(e){let i=new ld.TransactionBlock,n=await i.build({client:this.suiClient}),r=await i.getDigest({client:this.suiClient}),o=await this.wallet.signTransactionBlock({transactionBlock:n});return this.backend.proposePendingTransaction({msafeAddress:this.address,userAddress:await this.userAddress(),intention:e,digest:r,signature:o.signature})}async simulateRejectTx(){let e=await this.pendingTransaction();if(!e||e.rejectDigest!=="")throw new Error("Already rejected");let i=e.payload,n=(0,Pe.buildRejectTxb)(this.address,i);return this.simulator.simulate({txb:n,sender:this.address})}async rejectCurrentTx(e){let i=await this.pendingTransaction();if(!i||i.rejectDigest!=="")throw new Error("Already rejected");let n=i.payload,r=(0,Pe.buildRejectTxb)(this.address,n),o=await r.getDigest({client:this.suiClient}),s=await r.build({client:this.suiClient}),a=await this.wallet.signTransactionBlock({transactionBlock:s});return this.backend.rejectCurrentTx({msafeAddress:this.address,digest:o,signature:a.signature,...e})}async simulateBuildTransaction(){let e=await this.backend.getNextIntention({msafeAddress:this.address}),i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);console.log("\u{1F680} ~ MSafeAccount ~ simulateBuildTransaction ~ intention:",e);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});return this.simulator.simulate({txb:n,sender:this.address})}async buildNextIntentionAndAddToPending(e){return this.backend.buildNextIntentionAndAddToPending({msafeAddress:this.address,forceBuild:e.forceBuild,gasPrice:e.gasPrice,gasBudget:e.gasBudget})}async skipNextFailedIntention(){return this.backend.skipNextFailedIntention({msafeAddress:this.address})}async executePendingTx(e,i=!1){let n=i?e.rejectVotes:e.votes,r=i?e.rejectPayload:e.payload;if(this.calculateWeightFromVotes(n)<this.info.threshold)throw new Error("Not enough signature");let o=[],s=new Map(n.map(l=>[l.userAddress,l.signature]));for(let l=0;l<this.info.owners.length;l++){let u=this.info.owners[l],f=s.get(u.address);f&&o.push(f)}let a=this.multiSig.combinePartialSignatures(o);return this.suiClient.executeTransactionBlock({transactionBlock:dc(r),signature:a,options:{showEffects:!0,showEvents:!0}})}async dashboard(){return this.backend.getDashboard({msafeAddress:this.address})}calculateWeightFromVotes(e){return this.calculateWeight(e.map(i=>i.userAddress))}calculateWeight(e){let i=0;for(let n=0;n<e.length;n++){let r=this.info.owners.find(o=>(0,Pe.isSameAddress)(o.address,e[n]));r&&(i+=r.weight)}return i}get address(){return this.multiSig.address}get backend(){return this.globals.backend}get wallet(){return this.globals.wallet}async userAddress(){return this.globals.wallet.address()}get suiClient(){return this.globals.suiClient}};var X_=require("@msafe/sui3-utils"),J_=require("@mysten/sui.js/utils");var gc=class{constructor(e){this.globals=e;this.knownPublicKeys=new Map}knownPublicKeys;async getPublicKey(e){let i=this.knownPublicKeys.get(e);if(i)return i;let n=await this._getPublicKey(e);return n&&this.knownPublicKeys.set(e,n),n}async getPublicKeyBatch(e){let i=new Array(e.length).fill(void 0);for(let o=0;o<e.length;o++){let s=e[o];i[o]=this.knownPublicKeys.get(s)}let n=i.map((o,s)=>o===void 0?s:-1).filter(o=>o!==-1);if(n.length===0)return i;let r=await this.globals.backend.getPublicKeyBatch(n.map(o=>e[o]));for(let o=0;o<n.length;o++){let s=n[o];i[s]=r[o]}for(let o=0;o<i.length;o++)i[o]===void 0&&(i[o]=await this.getPublicKeyFromChain(e[o]));for(let o=0;o<e.length;o++)i[o]&&this.knownPublicKeys.set(e[o],i[o]);return i}addPublicKey(e,i){if(!(0,X_.isSameAddress)(e,i.toSuiAddress()))throw new Error("Invalid public key");this.knownPublicKeys.set((0,J_.normalizeSuiAddress)(e),i)}async _getPublicKey(e){let i=await this.getPublicKeyFromBackend(e);if(i)return i;let n=await this.getPublicKeyFromChain(e);if(n)return n}async getPublicKeyFromBackend(e){try{return await this.globals.backend.getPublicKey(e)}catch{return}}async getPublicKeyFromChain(e){return od(this.globals.suiClient,e)}};var _c=class{constructor(e){this.globals=e}async create(e){return this.globals.backend.submitReport(e)}};var rb=require("@mysten/sui.js/client");var ys=require("@msafe/sui3-utils"),ws=ve(require("axios"),1);var bc=class t{constructor(e){this.apiURL=e}_token;async authSign(e){let i=await this.post("/auth/login",e);return this._token=i.data.accessToken,this._token}async verifyToken(e){try{return(await this.get("/auth",{headers:this.headers(e)})).status===200}catch{return!1}}setJWTToken(e){this._token=e}async getPublicKey(e){return(await this.getPublicKeyBatch([e]))[0]}async getPublicKeyBatch(e){let i={userAddressList:e};return(await this.get("/user/public-keys",{params:i,headers:this.headers()})).data?.map(r=>r?ys.PublicKeySerde.de(r):void 0)}async getMSafeAccountInfo(e){let i={msafeAddress:e},n=await this.get("/msafe",{params:i,headers:this.headers()});return t.toMSafeConfig(n.data)}async getUserInfo(){return(await this.get("/user",{headers:this.headers()})).data}async getOwnedMSafeByStatus(e){let i={status:e.status??ys.UserMSafeStatus.active,...e.pagination?{page:e.pagination.page.toString(),limit:e.pagination.limit.toString()}:{}},n=await this.get("/msafe/owned",{params:i,headers:this.headers()});return{data:n.data.data.map(t.toMSafeConfig),meta:n.data.meta}}async updateMSafeStatus(e){let i=e;await this.post("/msafe/status",i,{headers:this.headers()})}async getPendingTransactions(e){return(await this.get("/transaction/pending",{params:e,headers:this.headers()})).data}async getHistoryTransactions(e){return(await this.get("/transaction/history",{params:e,headers:this.headers()})).data}async getFutureIntentions(e){return(await this.get("/transaction/intention",{params:e,headers:this.headers()})).data}async getNextIntention(e){return(await this.get("/transaction/intention/next",{params:e,headers:this.headers()})).data}async getCurrentSequenceNumber(e){return(await this.get("/transaction/sn/current",{params:{msafeAddress:e},headers:this.headers()})).data}async getNextSequenceNumber(e){return(await this.get("/transaction/sn/next",{params:{msafeAddress:e},headers:this.headers()})).data}async createMSafeAccount(e){await this.post("/msafe/create",e,{headers:this.headers()})}async proposeIntention(e){await this.post("/transaction/intention",e,{headers:this.headers()})}async proposePendingTransaction(e){}async rejectCurrentTx(e){await this.post("/transaction/pending/reject",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async voteForTransaction(e){await this.post("/transaction/pending/vote",e,{headers:this.headers()})}async buildNextIntentionAndAddToPending(e){await this.post("/transaction/pending/build",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async proposeIntentionAndBuildVote(e){await this.post("/transaction/intention/build",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async skipNextFailedIntention(e){await this.post("/transaction/pending/skip",e,{headers:this.headers()})}async getAddressBookEntries(e){return(await this.get("/address-book",{headers:this.headers(),params:e})).data}async updateAddressBook(e){await this.post("/address-book",e,{headers:this.headers()})}async getAddressBookMode(){return(await this.get("/address-book/mode",{headers:this.headers()})).data}async setAddressBookMode(e){await this.post("/address-book/mode",{mode:e.mode},{headers:this.headers()})}async submitReport(e){await this.post("/report",e)}async getDashboard(e){return(await this.get("/dashboard",{params:e,headers:this.headers()})).data}headers(e){return{Authorization:`Bearer ${e||this._token}`}}static toMSafeConfig(e){return{...e,owners:e.owners.map(i=>({address:i.address,weight:i.weight,publicKey:ys.PublicKeySerde.de({publicKeyEncoded:i.publicKeyEncoded,schema:i.schema})}))}}async get(e,i){let n=this.getFullUrl(e);try{return await ws.default.get(n,i)}catch(r){throw wc.fromError(r)??r}}async post(e,i,n){let r=this.getFullUrl(e);try{return await ws.default.post(r,i,{...n,transformRequest:this.getTransformRequest()})}catch(o){throw wc.fromError(o)??o}}getFullUrl(e){return e.startsWith(this.apiURL)?e:`${this.apiURL}${nd(e,"/")}`}getTransformRequest(){let e=[],{transformRequest:i}=ws.default.defaults;return i?i instanceof Array?e=i:e=[i]:e=[],[n=>JSON.parse(JSON.stringify(n,(r,o)=>typeof o=="bigint"?`${o.toString()}n`:o)),...e]}},wc=class t extends Error{constructor(i){super();this.e=i;Error.captureStackTrace(this,this.constructor)}name;static fromError(i){if(ws.default.isAxiosError(i)&&i?.response?.data&&"message"in i.response.data)return new t(i)}get status(){return this.e.response?.status??void 0}get message(){return`${this.respMessage()??"Unknown resp"}`}respMessage(){if(this.e.response?.data)return(this.e.response?.data).message??void 0}get endpoint(){return this.e.config?.url??""}toString(){return this.message}};var Q_=(o=>(o.local="local",o.unit="unit",o.dev="dev",o.prev="prev",o.prod="prod",o))(Q_||{}),yc="https://fullnode.testnet.sui.io",ud="https://fullnode.mainnet.sui.io",dd="http://127.0.0.1:3000",fd="http://127.0.0.1:3001",Y_="https://sui-dev.m-safe.link",eb="http://13.56.226.148:81",tb="https://sui-preview.m-safe.link",ib="https://sui.m-safe.link",nb=new Map([["unit",{suiClient:{url:yc},backend:{url:dd},syncingURL:fd,network:"sui:testnet"}],["local",{suiClient:{url:yc},backend:{url:dd},syncingURL:fd,network:"sui:testnet"}],["dev",{suiClient:{url:yc},backend:{url:Y_},syncingURL:eb,network:"sui:testnet"}],["prev",{suiClient:{url:ud},backend:{url:tb},syncingURL:"",network:"sui:mainnet"}],["prod",{suiClient:{url:ud},backend:{url:ib},syncingURL:"",network:"sui:mainnet"}]]);function hd(t,e){let i=nb.get(t);if(!i)throw new Error("Unknown environment");return e?.suiClient?.url&&(i.suiClient.url=e.suiClient.url),e?.backend?.url&&(i.backend.url=e.backend.url),i}var vs=class t{backend;suiClient;config;_wallet;constructor(e){this.backend=e.backend,this.suiClient=e.suiClient,this.config=e.config}static async New(e,i){let n=hd(e,i),r=new rb.SuiClient(n.suiClient),o=new bc(n.backend.url);return new t({backend:o,suiClient:r,config:n})}connectWallet(e){this._wallet=e}get wallet(){if(!this._wallet)throw new Error("wallet not connected");return this._wallet}set wallet(e){this._wallet=e}};var vc=class t{constructor(e){this.globals=e}_creationHelper;_publicKeyHelper;static async New(e,i){let n=await vs.New(e,i);return new t(n)}async connectWallet(e){if(e.jwtToken&&await this.backend.verifyToken(e.jwtToken))return this.globals.wallet=e.wallet,this.backend.setJWTToken(e.jwtToken),e.jwtToken;let i=await this.authSign(e.wallet);return this.globals.wallet=e.wallet,this.backend.setJWTToken(i),i}async authSign(e){let i=kc.SigningMessageHelper.loginMessageWithTimestamp(new Date().toUTCString()),n=await e.signPersonalMessage({messageStr:i});return this.backend.authSign({address:await e.address(),message:i,signature:n.signature,walletType:e.walletType})}async userInfo(){return this.globals.backend.getUserInfo()}async ownedMSafe(e){return this.globals.backend.getOwnedMSafeByStatus({status:kc.UserMSafeStatus.active,pagination:e})}async createAccount(e){return this.creationHelper.submitMSafeCreation(e)}getMSafeAccount(e){return new pr(this.globals,e)}async getMSafeAccountFromAddress(e){let i=await this.backend.getMSafeAccountInfo(e);return new pr(this.globals,i)}get creationHelper(){return this._creationHelper||(this._creationHelper=new gr(this.globals,this.publicKeyHelper)),this._creationHelper}get publicKeyHelper(){return this._publicKeyHelper||(this._publicKeyHelper=new gc(this.globals)),this._publicKeyHelper}get config(){return this.globals.config}get backend(){return this.globals.backend}get wallet(){return this.globals.wallet}get AddressBook(){return new _r(this.globals)}get Invitation(){return new Ts(this.globals)}get Report(){return new _c(this.globals)}async walletAddress(){return this.wallet.address()}};
2053
+ `);var es=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Zp=new Set,bu=typeof process=="object"&&process?process:{},Xp=(t,e,i,n)=>{typeof bu.emitWarning=="function"?bu.emitWarning(t,e,i,n):console.error(`[${i}] ${e}: ${t}`)},Ma=globalThis.AbortController,Hp=globalThis.AbortSignal;if(typeof Ma>"u"){Hp=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(n,r){this._onabort.push(r)}},Ma=class{constructor(){e()}signal=new Hp;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=!0;for(let r of this.signal._onabort)r(n);this.signal.onabort?.(n)}}};let t=bu.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{t&&(t=!1,Xp("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}var K1=t=>!Zp.has(t),L3=Symbol("type"),Pn=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Jp=t=>Pn(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Jr:null:null,Jr=class extends Array{constructor(e){super(e),this.fill(0)}},wu=class t{heap;length;static#c=!1;static create(e){let i=Jp(e);if(!i)return[];t.#c=!0;let n=new t(e,i);return t.#c=!1,n}constructor(e,i){if(!t.#c)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},ja=class t{#c;#d;#b;#p;#O;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#m;#r;#i;#e;#l;#f;#a;#o;#g;#s;#k;#C;#_;#w;#S;#u;static unsafeExposeInternals(e){return{starts:e.#C,ttls:e.#_,sizes:e.#k,keyMap:e.#r,keyList:e.#i,valList:e.#e,next:e.#l,prev:e.#f,get head(){return e.#a},get tail(){return e.#o},free:e.#g,isBackgroundFetch:i=>e.#t(i),backgroundFetch:(i,n,r,o)=>e.#E(i,n,r,o),moveToTail:i=>e.#I(i),indexes:i=>e.#y(i),rindexes:i=>e.#v(i),isStale:i=>e.#h(i)}}get max(){return this.#c}get maxSize(){return this.#d}get calculatedSize(){return this.#m}get size(){return this.#n}get fetchMethod(){return this.#O}get dispose(){return this.#b}get disposeAfter(){return this.#p}constructor(e){let{max:i=0,ttl:n,ttlResolution:r=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:l,dispose:u,disposeAfter:f,noDisposeOnSet:b,noUpdateTTL:v,maxSize:T=0,maxEntrySize:O=0,sizeCalculation:P,fetchMethod:j,noDeleteOnFetchRejection:B,noDeleteOnStaleGet:D,allowStaleOnFetchRejection:q,allowStaleOnFetchAbort:K,ignoreFetchAbort:Z}=e;if(i!==0&&!Pn(i))throw new TypeError("max option must be a nonnegative integer");let G=i?Jp(i):Array;if(!G)throw new Error("invalid max value: "+i);if(this.#c=i,this.#d=T,this.maxEntrySize=O||this.#d,this.sizeCalculation=P,this.sizeCalculation){if(!this.#d&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(j!==void 0&&typeof j!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#O=j,this.#S=!!j,this.#r=new Map,this.#i=new Array(i).fill(void 0),this.#e=new Array(i).fill(void 0),this.#l=new G(i),this.#f=new G(i),this.#a=0,this.#o=0,this.#g=wu.create(i),this.#n=0,this.#m=0,typeof u=="function"&&(this.#b=u),typeof f=="function"?(this.#p=f,this.#s=[]):(this.#p=void 0,this.#s=void 0),this.#w=!!this.#b,this.#u=!!this.#p,this.noDisposeOnSet=!!b,this.noUpdateTTL=!!v,this.noDeleteOnFetchRejection=!!B,this.allowStaleOnFetchRejection=!!q,this.allowStaleOnFetchAbort=!!K,this.ignoreFetchAbort=!!Z,this.maxEntrySize!==0){if(this.#d!==0&&!Pn(this.#d))throw new TypeError("maxSize must be a positive integer if specified");if(!Pn(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#R()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!D,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Pn(r)||r===0?r:1,this.ttlAutopurge=!!o,this.ttl=n||0,this.ttl){if(!Pn(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#M()}if(this.#c===0&&this.ttl===0&&this.#d===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#c&&!this.#d){let J="LRU_CACHE_UNBOUNDED";K1(J)&&(Zp.add(J),Xp("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",J,t))}}getRemainingTTL(e){return this.#r.has(e)?1/0:0}#M(){let e=new Jr(this.#c),i=new Jr(this.#c);this.#_=e,this.#C=i,this.#j=(o,s,a=es.now())=>{if(i[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#h(o)&&this.delete(this.#i[o])},s+1);l.unref&&l.unref()}},this.#x=o=>{i[o]=e[o]!==0?es.now():0},this.#T=(o,s)=>{if(e[s]){let a=e[s],l=i[s];o.ttl=a,o.start=l,o.now=n||r();let u=o.now-l;o.remainingTTL=a-u}};let n=0,r=()=>{let o=es.now();if(this.ttlResolution>0){n=o;let s=setTimeout(()=>n=0,this.ttlResolution);s.unref&&s.unref()}return o};this.getRemainingTTL=o=>{let s=this.#r.get(o);if(s===void 0)return 0;let a=e[s],l=i[s];if(a===0||l===0)return 1/0;let u=(n||r())-l;return a-u},this.#h=o=>e[o]!==0&&i[o]!==0&&(n||r())-i[o]>e[o]}#x=()=>{};#T=()=>{};#j=()=>{};#h=()=>!1;#R(){let e=new Jr(this.#c);this.#m=0,this.#k=e,this.#A=i=>{this.#m-=e[i],e[i]=0},this.#B=(i,n,r,o)=>{if(this.#t(n))return 0;if(!Pn(r))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(r=o(n,i),!Pn(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return r},this.#P=(i,n,r)=>{if(e[i]=n,this.#d){let o=this.#d-e[i];for(;this.#m>o;)this.#D(!0)}this.#m+=e[i],r&&(r.entrySize=n,r.totalCalculatedSize=this.#m)}}#A=e=>{};#P=(e,i,n)=>{};#B=(e,i,n,r)=>{if(n||r)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#y({allowStale:e=this.allowStale}={}){if(this.#n)for(let i=this.#o;!(!this.#N(i)||((e||!this.#h(i))&&(yield i),i===this.#a));)i=this.#f[i]}*#v({allowStale:e=this.allowStale}={}){if(this.#n)for(let i=this.#a;!(!this.#N(i)||((e||!this.#h(i))&&(yield i),i===this.#o));)i=this.#l[i]}#N(e){return e!==void 0&&this.#r.get(this.#i[e])===e}*entries(){for(let e of this.#y())this.#e[e]!==void 0&&this.#i[e]!==void 0&&!this.#t(this.#e[e])&&(yield[this.#i[e],this.#e[e]])}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#i[e]!==void 0&&!this.#t(this.#e[e])&&(yield[this.#i[e],this.#e[e]])}*keys(){for(let e of this.#y()){let i=this.#i[e];i!==void 0&&!this.#t(this.#e[e])&&(yield i)}}*rkeys(){for(let e of this.#v()){let i=this.#i[e];i!==void 0&&!this.#t(this.#e[e])&&(yield i)}}*values(){for(let e of this.#y())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e])}[Symbol.iterator](){return this.entries()}find(e,i={}){for(let n of this.#y()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;if(o!==void 0&&e(o,this.#i[n],this))return this.get(this.#i[n],i)}}forEach(e,i=this){for(let n of this.#y()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;o!==void 0&&e.call(i,o,this.#i[n],this)}}rforEach(e,i=this){for(let n of this.#v()){let r=this.#e[n],o=this.#t(r)?r.__staleWhileFetching:r;o!==void 0&&e.call(i,o,this.#i[n],this)}}purgeStale(){let e=!1;for(let i of this.#v({allowStale:!0}))this.#h(i)&&(this.delete(this.#i[i]),e=!0);return e}dump(){let e=[];for(let i of this.#y({allowStale:!0})){let n=this.#i[i],r=this.#e[i],o=this.#t(r)?r.__staleWhileFetching:r;if(o===void 0||n===void 0)continue;let s={value:o};if(this.#_&&this.#C){s.ttl=this.#_[i];let a=es.now()-this.#C[i];s.start=Math.floor(Date.now()-a)}this.#k&&(s.size=this.#k[i]),e.unshift([n,s])}return e}load(e){this.clear();for(let[i,n]of e){if(n.start){let r=Date.now()-n.start;n.start=es.now()-r}this.set(i,n.value,n)}}set(e,i,n={}){if(i===void 0)return this.delete(e),this;let{ttl:r=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:l}=n,{noUpdateTTL:u=this.noUpdateTTL}=n,f=this.#B(e,i,n.size||0,a);if(this.maxEntrySize&&f>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=!0),this.delete(e),this;let b=this.#n===0?void 0:this.#r.get(e);if(b===void 0)b=this.#n===0?this.#o:this.#g.length!==0?this.#g.pop():this.#n===this.#c?this.#D(!1):this.#n,this.#i[b]=e,this.#e[b]=i,this.#r.set(e,b),this.#l[this.#o]=b,this.#f[b]=this.#o,this.#o=b,this.#n++,this.#P(b,f,l),l&&(l.set="add"),u=!1;else{this.#I(b);let v=this.#e[b];if(i!==v){if(this.#S&&this.#t(v)?v.__abortController.abort(new Error("replaced")):s||(this.#w&&this.#b?.(v,e,"set"),this.#u&&this.#s?.push([v,e,"set"])),this.#A(b),this.#P(b,f,l),this.#e[b]=i,l){l.set="replace";let T=v&&this.#t(v)?v.__staleWhileFetching:v;T!==void 0&&(l.oldValue=T)}}else l&&(l.set="update")}if(r!==0&&!this.#_&&this.#M(),this.#_&&(u||this.#j(b,r,o),l&&this.#T(l,b)),!s&&this.#u&&this.#s){let v=this.#s,T;for(;T=v?.shift();)this.#p?.(...T)}return this}pop(){try{for(;this.#n;){let e=this.#e[this.#a];if(this.#D(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#u&&this.#s){let e=this.#s,i;for(;i=e?.shift();)this.#p?.(...i)}}}#D(e){let i=this.#a,n=this.#i[i],r=this.#e[i];return this.#S&&this.#t(r)?r.__abortController.abort(new Error("evicted")):(this.#w||this.#u)&&(this.#w&&this.#b?.(r,n,"evict"),this.#u&&this.#s?.push([r,n,"evict"])),this.#A(i),e&&(this.#i[i]=void 0,this.#e[i]=void 0,this.#g.push(i)),this.#n===1?(this.#a=this.#o=0,this.#g.length=0):this.#a=this.#l[i],this.#r.delete(n),this.#n--,i}has(e,i={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:r}=i,o=this.#r.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return!1;if(this.#h(o))r&&(r.has="stale",this.#T(r,o));else return n&&this.#x(o),r&&(r.has="hit",this.#T(r,o)),!0}else r&&(r.has="miss");return!1}peek(e,i={}){let{allowStale:n=this.allowStale}=i,r=this.#r.get(e);if(r!==void 0&&(n||!this.#h(r))){let o=this.#e[r];return this.#t(o)?o.__staleWhileFetching:o}}#E(e,i,n,r){let o=i===void 0?void 0:this.#e[i];if(this.#t(o))return o;let s=new Ma,{signal:a}=n;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let l={signal:s.signal,options:n,context:r},u=(P,j=!1)=>{let{aborted:B}=s.signal,D=n.ignoreFetchAbort&&P!==void 0;if(n.status&&(B&&!j?(n.status.fetchAborted=!0,n.status.fetchError=s.signal.reason,D&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),B&&!D&&!j)return b(s.signal.reason);let q=T;return this.#e[i]===T&&(P===void 0?q.__staleWhileFetching?this.#e[i]=q.__staleWhileFetching:this.delete(e):(n.status&&(n.status.fetchUpdated=!0),this.set(e,P,l.options))),P},f=P=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=P),b(P)),b=P=>{let{aborted:j}=s.signal,B=j&&n.allowStaleOnFetchAbort,D=B||n.allowStaleOnFetchRejection,q=D||n.noDeleteOnFetchRejection,K=T;if(this.#e[i]===T&&(!q||K.__staleWhileFetching===void 0?this.delete(e):B||(this.#e[i]=K.__staleWhileFetching)),D)return n.status&&K.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),K.__staleWhileFetching;if(K.__returned===K)throw P},v=(P,j)=>{let B=this.#O?.(e,o,l);B&&B instanceof Promise&&B.then(D=>P(D),j),s.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(P(),n.allowStaleOnFetchAbort&&(P=D=>u(D,!0)))})};n.status&&(n.status.fetchDispatched=!0);let T=new Promise(v).then(u,f),O=Object.assign(T,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return i===void 0?(this.set(e,O,{...l.options,status:void 0}),i=this.#r.get(e)):this.#e[i]=O,O}#t(e){if(!this.#S)return!1;let i=e;return!!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof Ma}async fetch(e,i={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:u=this.sizeCalculation,noUpdateTTL:f=this.noUpdateTTL,noDeleteOnFetchRejection:b=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:v=this.allowStaleOnFetchRejection,ignoreFetchAbort:T=this.ignoreFetchAbort,allowStaleOnFetchAbort:O=this.allowStaleOnFetchAbort,context:P,forceRefresh:j=!1,status:B,signal:D}=i;if(!this.#S)return B&&(B.fetch="get"),this.get(e,{allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:o,status:B});let q={allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:l,sizeCalculation:u,noUpdateTTL:f,noDeleteOnFetchRejection:b,allowStaleOnFetchRejection:v,allowStaleOnFetchAbort:O,ignoreFetchAbort:T,status:B,signal:D},K=this.#r.get(e);if(K===void 0){B&&(B.fetch="miss");let Z=this.#E(e,K,q,P);return Z.__returned=Z}else{let Z=this.#e[K];if(this.#t(Z)){let A=n&&Z.__staleWhileFetching!==void 0;return B&&(B.fetch="inflight",A&&(B.returnedStale=!0)),A?Z.__staleWhileFetching:Z.__returned=Z}let G=this.#h(K);if(!j&&!G)return B&&(B.fetch="hit"),this.#I(K),r&&this.#x(K),B&&this.#T(B,K),Z;let J=this.#E(e,K,q,P),I=J.__staleWhileFetching!==void 0&&n;return B&&(B.fetch=G?"stale":"refresh",I&&G&&(B.returnedStale=!0)),I?J.__staleWhileFetching:J.__returned=J}}get(e,i={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=i,a=this.#r.get(e);if(a!==void 0){let l=this.#e[a],u=this.#t(l);return s&&this.#T(s,a),this.#h(a)?(s&&(s.get="stale"),u?(s&&n&&l.__staleWhileFetching!==void 0&&(s.returnedStale=!0),n?l.__staleWhileFetching:void 0):(o||this.delete(e),s&&n&&(s.returnedStale=!0),n?l:void 0)):(s&&(s.get="hit"),u?l.__staleWhileFetching:(this.#I(a),r&&this.#x(a),l))}else s&&(s.get="miss")}#F(e,i){this.#f[i]=e,this.#l[e]=i}#I(e){e!==this.#o&&(e===this.#a?this.#a=this.#l[e]:this.#F(this.#f[e],this.#l[e]),this.#F(this.#o,e),this.#o=e)}delete(e){let i=!1;if(this.#n!==0){let n=this.#r.get(e);if(n!==void 0)if(i=!0,this.#n===1)this.clear();else{this.#A(n);let r=this.#e[n];this.#t(r)?r.__abortController.abort(new Error("deleted")):(this.#w||this.#u)&&(this.#w&&this.#b?.(r,e,"delete"),this.#u&&this.#s?.push([r,e,"delete"])),this.#r.delete(e),this.#i[n]=void 0,this.#e[n]=void 0,n===this.#o?this.#o=this.#f[n]:n===this.#a?this.#a=this.#l[n]:(this.#l[this.#f[n]]=this.#l[n],this.#f[this.#l[n]]=this.#f[n]),this.#n--,this.#g.push(n)}}if(this.#u&&this.#s?.length){let n=this.#s,r;for(;r=n?.shift();)this.#p?.(...r)}return i}clear(){for(let e of this.#v({allowStale:!0})){let i=this.#e[e];if(this.#t(i))i.__abortController.abort(new Error("deleted"));else{let n=this.#i[e];this.#w&&this.#b?.(i,n,"delete"),this.#u&&this.#s?.push([i,n,"delete"])}}if(this.#r.clear(),this.#e.fill(void 0),this.#i.fill(void 0),this.#_&&this.#C&&(this.#_.fill(0),this.#C.fill(0)),this.#k&&this.#k.fill(0),this.#a=0,this.#o=0,this.#g.length=0,this.#m=0,this.#n=0,this.#u&&this.#s){let e=this.#s,i;for(;i=e?.shift();)this.#p?.(...i)}}};var le=ve(Se(),1);var Ra=ve(Qp(),1),cr=require("@mysten/sui.js/utils"),lr=require("@mysten/sui.js/transactions");var ts=ve(Se(),1),sm=require("@mysten/sui.js/transactions"),ti=ve(Se(),1);var Dn=ve(Se(),1),ki=ve(Se(),1);var rs=ve(Se(),1);var am=require("@mysten/sui.js/utils"),qa=require("@mysten/sui.js/transactions"),La=require("@mysten/sui.js/utils");var Su=ve(Se(),1),V1=Object.defineProperty,W1=(t,e,i)=>e in t?V1(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,Wi=(t,e,i)=>(W1(t,typeof e!="symbol"?e+"":e,i),i);var Ba=443636,Na=-443636,ku="79226673515401279992447579055",Cu="4295048016",z1=14,G1="59543866431248",H1="184467440737095516",Z1="15793534762490258745",X1=class{generateMnemonic(t=24){return zp(Gp,t===12?128:256)}getKeypairFromMnemonics(t,e={}){let i=this.getDerivePath(e);return im.Ed25519Keypair.deriveKeypair(t,i)}getDerivePath(t={}){let{accountIndex:e=0,isExternal:i=!1,addressIndex:n=0}=t;return`m/44'/784'/${e}'/${i?1:0}'/${n}'`}},ns=class{constructor(t){this.sdk=t,Wi(this,"_lru"),Wi(this,"_fetching",{})}async getCacheOrSet(t,e,i=0){var n;let r=this._lru||(this._lru=new ja({max:100}));if(r.has(t))return r.get(t);let s=await((n=this._fetching)[t]||(n[t]=e()));return delete this._fetching[t],r.set(t,s,{ttl:i}),s}get provider(){return this.sdk.provider}get math(){return this.sdk.math}get account(){return this.sdk.account}get network(){return this.sdk.network}get contract(){return this.sdk.contract}get nft(){return this.sdk.nft}get coin(){return this.sdk.coin}get trade(){return this.sdk.trade}get pool(){return this.sdk.pool}};function J1(t){if("reference"in t)return t.reference;let e=Au(t);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:rm(t)}function Yr(t){var e,i;return"objectId"in t?t.objectId:(i=(e=J1(t))==null?void 0:e.objectId)!=null?i:om(t)}function zi(t){var e;return"fields"in t?t.fields:(e=nm(t))==null?void 0:e.fields}function nm(t){let e="data"in t?Au(t):t;if(!(!e||!Q1(e)||e.content.dataType!=="moveObject"))return e.content}function Q1(t){return t.content!==void 0}function Au(t){return t.data}function rm(t){if(t.error&&"object_id"in t.error&&"version"in t.error&&"digest"in t.error){let e=t.error;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function om(t){if(t.error&&"object_id"in t.error&&!("version"in t.error)&&!("digest"in t.error))return t.error.object_id}function Y1(t){return t.data!==void 0}function ek(t){var e;let i=Y1(t)?t.data:t;return!i?.type&&"data"in t?((e=i?.content)==null?void 0:e.dataType)==="package"?"package":$a(t):i?.type}function $a(t){var e;return(e=nm(t))==null?void 0:e.type}function tk(t){var e;return(e=Au(t))==null?void 0:e.owner}var is=async(t,e,i)=>{let r=e.length;if(r>50){let o=[],s=0,a=Math.ceil(r/50);for(s;s<a;s++)o.push(t.multiGetObjects({ids:e.slice(s*50,(s+1)*50),options:i}));return(await Promise.all(o)).flat()}return await t.multiGetObjects({ids:e,options:i})},ik=class extends ns{async getConfig(){return(await this.fetchJSON())[this.network].contract}getFees(){return this.getCacheOrSet("fees",async()=>{let e=(await this.fetchJSON())[this.network].fee;return(await is(this.provider,Object.values(e),{showContent:!0})).map(n=>{let r=zi(n),o=Yr(n),s=$a(n);return{objectId:o,type:s.split("<")[1].slice(0,-1),fee:r.fee,tickSpacing:r.tick_spacing}})})}fetchJSON(){return this.getCacheOrSet("contract-json",async()=>await(await fetch("https://s3.amazonaws.com/app.turbos.finance/sdk/contract.json?t="+Date.now(),{method:"GET"})).json())}},Yp=new le.default(2).pow(new le.default(128)),nk=class{priceToSqrtPriceX64(t,e,i){return new le.default(new U(t).mul(U.pow(10,i-e)).sqrt().mul(U.pow(2,64)).floor().toFixed(0))}sqrtPriceX64ToPrice(t,e,i){return new U(t.toString()).mul(U.pow(2,-64)).pow(2).mul(U.pow(10,e-i))}priceToTickIndex(t,e,i){return this.sqrtPriceX64ToTickIndex(this.priceToSqrtPriceX64(t,e,i))}sqrtPriceX64ToTickIndex(t){if(t.gt(new le.default(ku))||t.lt(new le.default(Cu)))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let e=t.bitLength()-1,i=new le.default(e-64),n=this.signedShiftLeft(i,32,128),r=new le.default("8000000000000000","hex"),o=0,s=new le.default(0),a=e>=64?t.shrn(e-63):t.shln(63-e);for(;r.gt(new le.default(0))&&o<z1;){a=a.mul(a);let T=a.shrn(127);a=a.shrn(63+T.toNumber()),s=s.add(r.mul(T)),r=r.shrn(1),o+=1}let l=s.shrn(32),f=n.add(l).mul(new le.default(G1)),b=this.signedShiftRight(f.sub(new le.default(H1)),64,128).toNumber(),v=this.signedShiftRight(f.add(new le.default(Z1)),64,128).toNumber();return b==v?b:this.tickIndexToSqrtPriceX64(v).lte(t)?v:b}tickIndexToSqrtPriceX64(t){return t>0?new le.default(this.tickIndexToSqrtPricePositive(t)):new le.default(this.tickIndexToSqrtPriceNegative(t))}tickIndexToPrice(t,e,i){return this.sqrtPriceX64ToPrice(this.tickIndexToSqrtPriceX64(t),e,i)}toX64_Decimal(t){return t.mul(U.pow(2,64))}fromX64_Decimal(t){return t.mul(U.pow(2,-64))}scaleDown(t,e){return new U(t).div(U.pow(10,e)).toString()}scaleUp(t,e){return new U(t).mul(U.pow(10,e)).toString()}bitsToNumber(t,e=32){return Ra.default.toNumber(Ra.default.asIntN(e,Ra.default.BigInt(t)))}subUnderflowU128(t,e){return t.add(Yp).sub(e).mod(Yp)}tickIndexToSqrtPricePositive(t){let e;return t&1?e=new le.default("79232123823359799118286999567"):e=new le.default("79228162514264337593543950336"),t&2&&(e=this.signedShiftRight(e.mul(new le.default("79236085330515764027303304731")),96,256)),t&4&&(e=this.signedShiftRight(e.mul(new le.default("79244008939048815603706035061")),96,256)),t&8&&(e=this.signedShiftRight(e.mul(new le.default("79259858533276714757314932305")),96,256)),t&16&&(e=this.signedShiftRight(e.mul(new le.default("79291567232598584799939703904")),96,256)),t&32&&(e=this.signedShiftRight(e.mul(new le.default("79355022692464371645785046466")),96,256)),t&64&&(e=this.signedShiftRight(e.mul(new le.default("79482085999252804386437311141")),96,256)),t&128&&(e=this.signedShiftRight(e.mul(new le.default("79736823300114093921829183326")),96,256)),t&256&&(e=this.signedShiftRight(e.mul(new le.default("80248749790819932309965073892")),96,256)),t&512&&(e=this.signedShiftRight(e.mul(new le.default("81282483887344747381513967011")),96,256)),t&1024&&(e=this.signedShiftRight(e.mul(new le.default("83390072131320151908154831281")),96,256)),t&2048&&(e=this.signedShiftRight(e.mul(new le.default("87770609709833776024991924138")),96,256)),t&4096&&(e=this.signedShiftRight(e.mul(new le.default("97234110755111693312479820773")),96,256)),t&8192&&(e=this.signedShiftRight(e.mul(new le.default("119332217159966728226237229890")),96,256)),t&16384&&(e=this.signedShiftRight(e.mul(new le.default("179736315981702064433883588727")),96,256)),t&32768&&(e=this.signedShiftRight(e.mul(new le.default("407748233172238350107850275304")),96,256)),t&65536&&(e=this.signedShiftRight(e.mul(new le.default("2098478828474011932436660412517")),96,256)),t&131072&&(e=this.signedShiftRight(e.mul(new le.default("55581415166113811149459800483533")),96,256)),t&262144&&(e=this.signedShiftRight(e.mul(new le.default("38992368544603139932233054999993551")),96,256)),this.signedShiftRight(e,32,256)}tickIndexToSqrtPriceNegative(t){let e=Math.abs(t),i;return e&1?i=new le.default("18445821805675392311"):i=new le.default("18446744073709551616"),e&2&&(i=this.signedShiftRight(i.mul(new le.default("18444899583751176498")),64,256)),e&4&&(i=this.signedShiftRight(i.mul(new le.default("18443055278223354162")),64,256)),e&8&&(i=this.signedShiftRight(i.mul(new le.default("18439367220385604838")),64,256)),e&16&&(i=this.signedShiftRight(i.mul(new le.default("18431993317065449817")),64,256)),e&32&&(i=this.signedShiftRight(i.mul(new le.default("18417254355718160513")),64,256)),e&64&&(i=this.signedShiftRight(i.mul(new le.default("18387811781193591352")),64,256)),e&128&&(i=this.signedShiftRight(i.mul(new le.default("18329067761203520168")),64,256)),e&256&&(i=this.signedShiftRight(i.mul(new le.default("18212142134806087854")),64,256)),e&512&&(i=this.signedShiftRight(i.mul(new le.default("17980523815641551639")),64,256)),e&1024&&(i=this.signedShiftRight(i.mul(new le.default("17526086738831147013")),64,256)),e&2048&&(i=this.signedShiftRight(i.mul(new le.default("16651378430235024244")),64,256)),e&4096&&(i=this.signedShiftRight(i.mul(new le.default("15030750278693429944")),64,256)),e&8192&&(i=this.signedShiftRight(i.mul(new le.default("12247334978882834399")),64,256)),e&16384&&(i=this.signedShiftRight(i.mul(new le.default("8131365268884726200")),64,256)),e&32768&&(i=this.signedShiftRight(i.mul(new le.default("3584323654723342297")),64,256)),e&65536&&(i=this.signedShiftRight(i.mul(new le.default("696457651847595233")),64,256)),e&131072&&(i=this.signedShiftRight(i.mul(new le.default("26294789957452057")),64,256)),e&262144&&(i=this.signedShiftRight(i.mul(new le.default("37481735321082")),64,256)),i}signedShiftLeft(t,e,i){let n=t.toTwos(i).shln(e);return n.imaskn(i+1),n.fromTwos(i)}signedShiftRight(t,e,i){let n=t.toTwos(i).shrn(e);return n.imaskn(i-e+1),n.fromTwos(i-e)}},Tu=(t,e)=>{let i=Yr(t);if(rm(t))throw new Error(`${e}(${i}) had been deleted`);if(om(t))throw new Error(`${e}(${i}) is not found`);return!0},Qr=60*1e3,rk=class extends ns{async getPools(t=!1){let e=await this.contract.getConfig(),i=[],n;do n=await this.provider.getDynamicFields({parentId:e.PoolTableId,cursor:n?.nextCursor,limit:15}),i.push(...n.data.map(a=>a.objectId));while(n.hasNextPage);if(!i.length)return[];let o=(await is(this.provider,i,{showContent:!0})).map(a=>zi(a).value.fields.pool_id);if(!o.length)return[];let s=await is(this.provider,o,{showContent:!0});return t||(s=s.filter(a=>zi(a).unlocked)),s.map(a=>this.parsePool(a))}async getPool(t){return this.getCacheOrSet(`pool-${t}`,async()=>{let e=await this.provider.getObject({id:t,options:{showContent:!0}});return Tu(e,"pool"),this.parsePool(e)},1500)}async createPool(t){let{fee:e,address:i,tickLower:n,tickUpper:r,sqrtPrice:o,slippage:s,coinTypeA:a,coinTypeB:l}=t,u=await this.contract.getConfig(),f=new U(t.amountA),b=new U(t.amountB),[v,T]=await Promise.all([this.coin.selectTradeCoins(i,a,f),this.coin.selectTradeCoins(i,l,b)]),O=t.txb||new lr.TransactionBlock,P=v.length>0?this.coin.convertTradeCoins(O,v,a,f):[this.coin.zero(a,O)],j=T.length>0?this.coin.convertTradeCoins(O,T,l,b):[this.coin.zero(l,O)];return O.moveCall({target:`${u.PackageId}::pool_factory::deploy_pool_and_mint`,typeArguments:[a,l,e.type],arguments:[O.object(u.PoolConfig),O.object(e.objectId),O.pure(o,"u128"),O.object(u.Positions),O.makeMoveVec({objects:P}),O.makeMoveVec({objects:j}),O.pure(Math.abs(n).toFixed(0),"u32"),O.pure(n<0,"bool"),O.pure(Math.abs(r).toFixed(0),"u32"),O.pure(r<0,"bool"),O.pure(f.toFixed(0),"u64"),O.pure(b.toFixed(0),"u64"),O.pure(this.getMinimumAmountBySlippage(f,s),"u64"),O.pure(this.getMinimumAmountBySlippage(b,s),"u64"),O.pure(i,"address"),O.pure(Date.now()+(t.deadline||Qr),"u64"),O.object(cr.SUI_CLOCK_OBJECT_ID),O.object(u.Versioned)]}),O}async addLiquidity(t){let{address:e,tickLower:i,tickUpper:n,slippage:r,pool:o}=t,s=await this.contract.getConfig(),a=await this.getPoolTypeArguments(o),[l,u]=a,[f,b]=await Promise.all([this.coin.getMetadata(l),this.coin.getMetadata(u)]);if(!f||!b)throw new Error("Invalid coin type");let v=new U(t.amountA),T=new U(t.amountB),[O,P]=await Promise.all([this.coin.selectTradeCoins(e,l,v),this.coin.selectTradeCoins(e,u,T)]),j=t.txb||new lr.TransactionBlock,B=O.length>0?this.coin.convertTradeCoins(j,O,l,v):[this.coin.zero(l,j)],D=P.length>0?this.coin.convertTradeCoins(j,P,u,T):[this.coin.zero(u,j)];return j.moveCall({target:`${s.PackageId}::position_manager::mint`,typeArguments:a,arguments:[j.object(o),j.object(s.Positions),j.makeMoveVec({objects:B}),j.makeMoveVec({objects:D}),j.pure(Math.abs(i).toFixed(0),"u32"),j.pure(i<0,"bool"),j.pure(Math.abs(n).toFixed(0),"u32"),j.pure(n<0,"bool"),j.pure(v.toFixed(0),"u64"),j.pure(T.toFixed(0),"u64"),j.pure(this.getMinimumAmountBySlippage(v,r),"u64"),j.pure(this.getMinimumAmountBySlippage(T,r),"u64"),j.pure(e,"address"),j.pure(Date.now()+(t.deadline||Qr),"u64"),j.object(cr.SUI_CLOCK_OBJECT_ID),j.object(s.Versioned)]}),j}async increaseLiquidity(t){let{pool:e,slippage:i,address:n,nft:r}=t,o=await this.contract.getConfig(),s=new U(t.amountA),a=new U(t.amountB),l=await this.getPoolTypeArguments(e),[u,f]=l,[b,v]=await Promise.all([this.coin.selectTradeCoins(n,u,s),this.coin.selectTradeCoins(n,f,a)]),T=t.txb||new lr.TransactionBlock,O=b.length>0?this.coin.convertTradeCoins(T,b,u,s):[this.coin.zero(u,T)],P=v.length>0?this.coin.convertTradeCoins(T,v,f,a):[this.coin.zero(f,T)];return T.moveCall({target:`${o.PackageId}::position_manager::increase_liquidity`,typeArguments:l,arguments:[T.object(e),T.object(o.Positions),T.makeMoveVec({objects:O}),T.makeMoveVec({objects:P}),T.object(r),T.pure(s.toFixed(0),"u64"),T.pure(a.toFixed(0),"u64"),T.pure(this.getMinimumAmountBySlippage(s,i),"u64"),T.pure(this.getMinimumAmountBySlippage(a,i),"u64"),T.pure(Date.now()+(t.deadline||Qr*3),"u64"),T.object(cr.SUI_CLOCK_OBJECT_ID),T.object(o.Versioned)]}),T}async decreaseLiquidity(t){let{slippage:e,nft:i,pool:n,decreaseLiquidity:r}=t,o=new U(t.amountA),s=new U(t.amountB),a=await this.contract.getConfig(),l=await this.getPoolTypeArguments(n),u=t.txb||new lr.TransactionBlock;return u.moveCall({target:`${a.PackageId}::position_manager::decrease_liquidity`,typeArguments:l,arguments:[u.object(n),u.object(a.Positions),u.object(i),u.pure(new ts.default(r).toString(),"u128"),u.pure(this.getMinimumAmountBySlippage(o,e),"u64"),u.pure(this.getMinimumAmountBySlippage(s,e),"u64"),u.pure(Date.now()+(t.deadline||Qr*3),"u64"),u.object(cr.SUI_CLOCK_OBJECT_ID),u.object(a.Versioned)]}),u}async removeLiquidity(t){let e=await this.decreaseLiquidity(t);return e=await this.collectFee({txb:e,...t}),e=await this.collectReward({txb:e,...t}),e=await this.nft.burn({txb:e,nft:t.nft,pool:t.pool}),e}async collectFee(t){let{pool:e,nft:i,address:n,collectAmountA:r,collectAmountB:o}=t,s=t.txb||new lr.TransactionBlock;if(Number(r)===0&&Number(o)===0)return s;let a=await this.contract.getConfig(),l=await this.getPoolTypeArguments(e);return s.moveCall({target:`${a.PackageId}::position_manager::collect`,typeArguments:l,arguments:[s.object(e),s.object(a.Positions),s.object(i),s.pure(r,"u64"),s.pure(o,"u64"),s.pure(n),s.pure(Date.now()+(t.deadline||Qr*3),"u64"),s.object(cr.SUI_CLOCK_OBJECT_ID),s.object(a.Versioned)]}),s}async collectReward(t){let{pool:e,nft:i,rewardAmounts:n,address:r}=t,o=t.txb||new lr.TransactionBlock,s=await this.contract.getConfig(),a=await this.getPoolTypeArguments(e);return(await this.getPool(e)).reward_infos.forEach((u,f)=>{o.moveCall({target:`${s.PackageId}::position_manager::collect_reward`,typeArguments:[...a,u.fields.vault_coin_type],arguments:[o.object(e),o.object(s.Positions),o.object(i),o.object(u.fields.vault),o.pure(f,"u64"),o.pure(n[f],"u64"),o.pure(r),o.pure(Date.now()+(t.deadline||Qr*3),"u64"),o.object(cr.SUI_CLOCK_OBJECT_ID),o.object(s.Versioned)]})}),o}getTokenAmountsFromLiquidity(t){let e=new U((t.liquidity||new ts.default(1e8)).toString()),i=new U(t.currentSqrtPrice.toString()),n=new U(t.lowerSqrtPrice.toString()),r=new U(t.upperSqrtPrice.toString()),o,s;t.currentSqrtPrice.lt(t.lowerSqrtPrice)?(o=this.math.toX64_Decimal(e).mul(r.sub(n)).div(n.mul(r)),s=new U(0)):t.currentSqrtPrice.lt(t.upperSqrtPrice)?(o=this.math.toX64_Decimal(e).mul(r.sub(i)).div(i.mul(r)),s=this.math.fromX64_Decimal(e.mul(i.sub(n)))):(o=new U(0),s=this.math.fromX64_Decimal(e.mul(r.sub(n))));let a=t.ceil!==!1?"ceil":"floor";return[new ts.default(o[a]().toString()),new ts.default(s[a]().toString())]}async getPoolTypeArguments(t){return this.getCacheOrSet("pool-type-"+t,async()=>(await this.getPool(t)).types)}parsePoolType(t,e){var i;let n=((i=t.replace(">","").split("<")[1])==null?void 0:i.split(/,\s*/))||[];if(e!==void 0&&e!==n.length)throw new Error("Invalid pool type");return n}async getFixedLiquidity(t){var e,i;let{coinTypeA:n,coinTypeB:r,amountA:o,amountB:s}=t,[a,l]=await Promise.all([this.coin.getMetadata(n),this.coin.getMetadata(r)]),u=new U(this.math.scaleDown(o,a.decimals)).mul((e=t.priceA)!=null?e:1),f=new U(this.math.scaleDown(s,l.decimals)).mul((i=t.priceB)!=null?i:1);return{liquidityA:u.toString(),liquidityB:f.toString(),liquidity:u.plus(f).toString()}}parsePool(t){let e=zi(t),i=Yr(t),n=ek(t),r=this.parsePoolType(n,3);return this.getCacheOrSet("pool-type-"+i,async()=>r),{...e,objectId:i,type:n,types:r}}getMinimumAmountBySlippage(t,e){let i=new U(t),n=new U(1).minus(new U(e).div(100));if(n.lte(0)||n.gt(1))throw new Error("invalid slippage range");return i.mul(n).toFixed(0)}},ok=(t,e)=>{let{pool:i,position:n,tickLowerDetail:r,tickUpperDetail:o}=e,s=new Dn.default(i.fee_growth_global_a),a=new Dn.default(n.fee_growth_inside_a),l=new Dn.default(n.tokens_owed_a),u=new Dn.default(i.fee_growth_global_b),f=new Dn.default(n.fee_growth_inside_b),b=new Dn.default(n.tokens_owed_b),v=new Dn.default(n.liquidity),T,O,P,j,B=t.bitsToNumber(i.tick_current_index.fields.bits),D=t.bitsToNumber(n.tick_lower_index.fields.bits),q=t.bitsToNumber(n.tick_upper_index.fields.bits);B<D?(T=t.subUnderflowU128(s,r.feeGrowthOutsideA),O=t.subUnderflowU128(u,r.feeGrowthOutsideB)):(T=r.feeGrowthOutsideA,O=r.feeGrowthOutsideB),B<q?(P=o.feeGrowthOutsideA,j=o.feeGrowthOutsideB):(P=t.subUnderflowU128(s,o.feeGrowthOutsideA),j=t.subUnderflowU128(u,o.feeGrowthOutsideB));let K=t.subUnderflowU128(t.subUnderflowU128(s,T),P),Z=t.subUnderflowU128(t.subUnderflowU128(u,O),j),G=t.subUnderflowU128(K,a).mul(v).shrn(64),J=t.subUnderflowU128(Z,f).mul(v).shrn(64);return{feeOwedA:l.add(G).toString(),feeOwedB:b.add(J).toString()}},em=new rs.default(0),tm=new rs.default(1),sk=new rs.default(2),ak={mul(t,e,i){let n=t.mul(e);if(this.isOverLimit(n,i))throw new Error(`Mul result higher than u${i}`);return n},mulDiv(t,e,i,n){return this.mulDivRoundUpIf(t,e,i,!1,n)},mulDivRoundUpIf(t,e,i,n,r){if(i.eq(em))throw new Error("mulDiv denominator is zero");let o=this.mul(t,e,r),s=o.div(i);return n&&o.mod(i).gt(em)?s.add(tm):s},isOverLimit(t,e){let i=sk.pow(new rs.default(e)).sub(tm);return t.gt(i)}},ck=(t,e)=>{var i,n,r,o;let{pool:s,position:a,tickLowerDetail:l,tickUpperDetail:u,timeStampInSeconds:f}=e,b=new ki.default(new U(s.reward_last_updated_time_ms).div(1e3).toFixed(0)),T=(f??new ki.default(Date.now()).div(new ki.default(1e3))).sub(new ki.default(b)),O=[],P=new ki.default(s.liquidity),j=new ki.default(a.liquidity);for(let B=0;B<3;++B){let D=s.reward_infos[B],q={emissionsPerSecondX64:new ki.default(D?D.fields.emissions_per_second:"0"),growthGlobalX64:new ki.default(D?D.fields.growth_global:"0")},K={growthInsideCheckpoint:new ki.default((n=(i=a.reward_infos[B])==null?void 0:i.fields.reward_growth_inside)!=null?n:"0"),amountOwed:new ki.default((o=(r=a.reward_infos[B])==null?void 0:r.fields.amount_owed)!=null?o:"0")},Z=q.growthGlobalX64;if(!P.isZero()){let k=ak.mulDiv(T,q.emissionsPerSecondX64,P,128);Z=q.growthGlobalX64.add(k)}let G=l.rewardGrowthsOutside[B],J=u.rewardGrowthsOutside[B],x=Z;l.initialized&&(x=t.bitsToNumber(s.tick_current_index.fields.bits)<t.bitsToNumber(a.tick_lower_index.fields.bits)?t.subUnderflowU128(Z,G):G);let I=new ki.default(0);u.initialized&&(I=t.bitsToNumber(s.tick_current_index.fields.bits)<t.bitsToNumber(a.tick_upper_index.fields.bits)?J:t.subUnderflowU128(Z,J));let A=t.subUnderflowU128(t.subUnderflowU128(Z,x),I),M=K.amountOwed.shln(64);O[B]=M.add(t.subUnderflowU128(A,K.growthInsideCheckpoint).mul(j)).shrn(64).toString()}return O},lk=class extends ns{async getOwner(t){let e=await this.getObject(t),i=tk(e);if(!(!i||typeof i=="string")){if("ObjectOwner"in i)return i.ObjectOwner;if("AddressOwner"in i)return i.AddressOwner}}async getFields(t){let e=await this.getObject(t);return zi(e)}async getPositionFields(t){let e=await this.contract.getConfig(),i=await this.provider.getDynamicFieldObject({parentId:e.Positions,name:{type:"address",value:t}});return zi(i)}async getPositionFieldsByPositionId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}});return Tu(e,"position"),zi(e)}async getPositionTick(t,e){let i=await this.provider.getDynamicFieldObject({parentId:t,name:{type:e.type,value:e.fields}}),n=zi(i);if(n)return{tickIndex:this.math.bitsToNumber(n.name.fields.bits),initialized:n.value.fields.initialized,liquidityNet:new ti.default(this.math.bitsToNumber(n.value.fields.liquidity_net.fields.bits,128).toString()),liquidityGross:new ti.default(n.value.fields.liquidity_gross),feeGrowthOutsideA:new ti.default(n.value.fields.fee_growth_outside_a),feeGrowthOutsideB:new ti.default(n.value.fields.fee_growth_outside_b),rewardGrowthsOutside:n.value.fields.reward_growths_outside.map(r=>new ti.default(r))}}async getPositionAPR(t){let{poolId:e,getPrice:i,fees24h:n,tickLower:r,tickUpper:o}=t,s=await this.pool.getPool(e),a=this.math.bitsToNumber(s.tick_current_index.fields.bits),[l,u,f,b]=await Promise.all([this.coin.getMetadata(s.types[0]),this.coin.getMetadata(s.types[1]),i(s.types[0]),i(s.types[1])]);if(!f||!b||r>=o||a<r||a>=o)return{fees:"0",rewards:"0",total:"0"};let{minTokenA:v,minTokenB:T}=this.getRemoveLiquidityQuote(s,r,o),O=new U(this.math.scaleDown(v.toString(),l.decimals)).mul(f),P=new U(this.math.scaleDown(T.toString(),u.decimals)).mul(b),j=O.add(P),B=j.isZero()?new U(0):new U(n).mul(365).div(j).mul(100),D=new U(0);return await Promise.all(s.reward_infos.map(async q=>{let{emissions_per_second:K}=q.fields,Z=this.coin.formatCoinType(q.fields.vault_coin_type),[G,J]=await Promise.all([i(Z),this.coin.getMetadata(Z)]);!K||K==="0"||!G||(D=D.add(new U(new ti.default(K).shrn(64).toString()).div(10**J.decimals).mul(31536e3).mul(G).div(j).mul(100)))})),{fees:B.toString(),rewards:D.toString(),total:B.plus(D).toString()}}getRemoveLiquidityQuote(t,e,i){let n=new ti.default(0),r=new ti.default(t.liquidity),o=this.math.bitsToNumber(t.tick_current_index.fields.bits),s=this.math.tickIndexToSqrtPriceX64(e),a=this.math.tickIndexToSqrtPriceX64(i);if(o<e){let u=this.getTokenAFromLiquidity(r,s,a);return{minTokenA:this.adjustForSlippage(u),minTokenB:n}}if(o<i){let u=new ti.default(t.sqrt_price),f=this.getTokenAFromLiquidity(r,u,a),b=this.getTokenBFromLiquidity(r,s,u);return{minTokenA:this.adjustForSlippage(f),minTokenB:this.adjustForSlippage(b)}}let l=this.getTokenBFromLiquidity(r,s,a);return{minTokenA:n,minTokenB:this.adjustForSlippage(l)}}adjustForSlippage(t){let e={numerator:new ti.default(0),denominator:new ti.default(1e3)};return t.mul(e.denominator).div(e.denominator.add(e.numerator))}getTokenAFromLiquidity(t,e,i){let n=t.mul(i.sub(e)).shln(64),r=i.mul(e);return n.div(r)}getTokenBFromLiquidity(t,e,i){return t.mul(i.sub(e)).shrn(64)}async burn(t){let{pool:e,nft:i}=t,n=t.txb||new sm.TransactionBlock,r=await this.contract.getConfig(),o=await this.pool.getPoolTypeArguments(e);return n.moveCall({target:`${r.PackageId}::position_manager::burn`,typeArguments:o,arguments:[n.object(r.Positions),n.object(i),n.object(r.Versioned)]}),n}async getPositionLiquidityUSD(t){let{position:e,poolId:i,priceA:n,priceB:r}=t,o=await this.pool.getPool(i),s=this.pool.getTokenAmountsFromLiquidity({currentSqrtPrice:new ti.default(o.sqrt_price),lowerSqrtPrice:this.math.tickIndexToSqrtPriceX64(this.math.bitsToNumber(e.tick_lower_index.fields.bits)),upperSqrtPrice:this.math.tickIndexToSqrtPriceX64(this.math.bitsToNumber(e.tick_upper_index.fields.bits)),liquidity:new ti.default(e.liquidity===void 0?1e8:e.liquidity)}),[a,l]=await Promise.all([this.coin.getMetadata(o.types[0]),this.coin.getMetadata(o.types[1])]),u=new U(s[0].toString()).div(10**a.decimals).mul(n||0),f=new U(s[1].toString()).div(10**l.decimals).mul(r||0);return u.plus(f).toString()}async getUnclaimedFeesAndRewards(t){let{position:e,poolId:i}=t,[n,r,o]=await Promise.all([this.pool.getPool(i),this.nft.getPositionTick(i,e.tick_lower_index),this.nft.getPositionTick(i,e.tick_upper_index)]),s={...t,pool:n,tickLowerDetail:r,tickUpperDetail:o},[a,l]=await Promise.all([this.getUnclaimedFees(s),this.getUnclaimedRewards(s)]),{unclaimedFees:u,...f}=a,{unclaimedRewards:b,...v}=l;return{fees:a.unclaimedFees.toString(),rewards:b.toString(),total:u.plus(b).toString(),fields:{...f,...v}}}async getUnclaimedFees(t){let{position:e,pool:i,getPrice:n,tickLowerDetail:r,tickUpperDetail:o}=t,[s,a,l,u]=await Promise.all([this.coin.getMetadata(i.types[0]),this.coin.getMetadata(i.types[1]),n(i.types[0]),n(i.types[1])]),f=ok(this.math,{pool:i,position:e,tickLowerDetail:r,tickUpperDetail:o}),b=this.math.scaleDown(f.feeOwedA,s.decimals),v=this.math.scaleDown(f.feeOwedB,a.decimals);function T(j,B){return new U(1e6).mul(U.pow(10,B)).lt(j)}T(b,s.decimals)&&(b="0",f.feeOwedA="0"),T(v,a.decimals)&&(v="0",f.feeOwedB="0");let O=l===void 0?new U(0):new U(l).mul(b),P=u===void 0?new U(0):new U(u).mul(v);return{unclaimedFees:O.plus(P),scaledFeeOwedA:b,scaledFeeOwedB:v,...f}}async getUnclaimedRewards(t){let{position:e,pool:i,getPrice:n,tickLowerDetail:r,tickUpperDetail:o}=t,s=ck(this.math,{pool:i,position:e,tickLowerDetail:r,tickUpperDetail:o}),a=[...s],l=i.reward_infos.map(v=>this.coin.formatCoinType(v.fields.vault_coin_type)),u=await Promise.all([...i.reward_infos.map((v,T)=>this.coin.getMetadata(l[T]))]),f=await Promise.all(i.reward_infos.map((v,T)=>n(l[T])));u.forEach((v,T)=>{a[T]=this.math.scaleDown(a[T],v.decimals)});let b=new U(0);return i.reward_infos.some((v,T)=>{let O=f[T];return O?(b=b.plus(new U(O).mul(a[T])),!1):(b=b.plus(1),!0)}),{unclaimedRewards:b,collectRewards:s,scaledCollectRewards:a}}getObject(t){return this.getCacheOrSet("nft-object-"+t,async()=>{let e=await this.provider.getObject({id:t,options:{showContent:!0,showOwner:!0}});return Tu(e,"nft"),e})}},uk=class extends ns{isSUI(t){return(0,am.normalizeSuiAddress)(t)==="0x000000000000000000000000000000000000000000000000000002::sui::sui"}async getMetadata(t){return this.getCacheOrSet(`coin-metadata-${t}`,async()=>{let e=await this.provider.getCoinMetadata({coinType:t});if(!e)throw new Error(`Coin "${t}" is not found`);return e})}async selectTradeCoins(t,e,i){if(i.eq(0))return[];let n=[],r=[],o=new U(0),s;do s=await this.provider.getCoins({owner:t,coinType:e,cursor:s?.nextCursor}),n.push(...s.data);while(s.hasNextPage);n.sort((a,l)=>Number(l.balance)-Number(a.balance));for(let a of n)if(r.push(a.coinObjectId),o=o.add(a.balance),o.gte(i))break;return r}convertTradeCoins(t,e,i,n){return this.isSUI(i)?[t.splitCoins(t.gas,[t.pure(n.toNumber())])[0]]:e.map(r=>t.object(r))}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}formatCoinType(t,e=!1){let n=t.replace(/^0x/i,"");return n=n.replace(/^0+(2::sui::SUI)$/,"$1"),"0x"+(e&&n.length<64&&t!=="2::sui:SUI"?"0".repeat(64-n.length):"")+n}},dk=60*1e3,Fa=100,fk=class extends ns{async swap(t){let{coinTypeA:e,coinTypeB:i,address:n,amountSpecifiedIsInput:r,slippage:o}=t,s=new U(t.amountA),a=new U(t.amountB),l=await this.contract.getConfig(),u=await Promise.all(t.routes.map(async P=>{let j=await this.pool.getPoolTypeArguments(P.pool),[B,D]=await Promise.all([this.coin.getMetadata(j[0]),this.coin.getMetadata(j[1])]);return{...P,coinA:B,coinB:D,typeArguments:j}})),f=await this.coin.selectTradeCoins(n,e,s),{functionName:b,typeArguments:v}=this.getFunctionNameAndTypeArguments(u.map(({typeArguments:P})=>P),e,i),T=u.map(({nextTickIndex:P,coinA:j,coinB:B,a2b:D})=>{let q=this.math.tickIndexToPrice(P,j.decimals,B.decimals);return this.sqrtPriceWithSlippage(q,o,D,j.decimals,B.decimals)}),O=t.txb||new qa.TransactionBlock;return O.moveCall({target:`${l.PackageId}::swap_router::${b}`,typeArguments:v,arguments:[...u.map(({pool:P})=>O.object(P)),O.makeMoveVec({objects:this.coin.convertTradeCoins(O,f,e,s)}),O.pure((r?s:a).toFixed(0),"u64"),O.pure(this.amountOutWithSlippage(r?a:s,o,r),"u64"),...T.map(P=>O.pure(P,"u128")),O.pure(r,"bool"),O.pure(n,"address"),O.pure(Date.now()+(t.deadline||dk*3),"u64"),O.object(La.SUI_CLOCK_OBJECT_ID),O.object(l.Versioned)]}),O}async computeSwapResult(t){let{pools:e,amountSpecified:i,amountSpecifiedIsInput:n,address:r,tickStep:o}=t,s=await this.contract.getConfig(),a=e.map(b=>b.pool),l=await is(this.provider,a,{showContent:!0}),u=new qa.TransactionBlock;l.map(async b=>{let v=zi(b),T=e.find(D=>D.pool===v.id.id),O=this.math.bitsToNumber(v.tick_current_index.fields.bits),P=O-v.tick_spacing*(o||Fa),j=O+v.tick_spacing*(o||Fa);P=P<Na?Na:P,j=j>Ba?Ba:j;let B=this.pool.parsePoolType($a(b));u.moveCall({target:`${s.PackageId}::pool_fetcher::compute_swap_result`,typeArguments:B,arguments:[u.object(v.id.id),u.pure(T.a2b,"bool"),u.pure(new U(i).toFixed(0),"u128"),u.pure(n,"bool"),u.pure(this.math.tickIndexToSqrtPriceX64(T.a2b?P:j).toString(),"u128"),u.object(La.SUI_CLOCK_OBJECT_ID),u.object(s.Versioned)]})});let f=await this.provider.devInspectTransactionBlock({transactionBlock:u,sender:r});if(f.error)throw new Error(f.error);return f.events.map(b=>b.parsedJson)}async computeSwapResultV2(t){let{pools:e,amountSpecifiedIsInput:i,address:n,tickStep:r}=t,o=await this.contract.getConfig(),s=e.map(f=>f.pool),a=await is(this.provider,Array.from(new Set(s)),{showContent:!0}),l=new qa.TransactionBlock;e.forEach(async f=>{let b=a.find(B=>Yr(B)===f.pool),v=zi(b),T=this.math.bitsToNumber(v.tick_current_index.fields.bits),O=T-v.tick_spacing*(r||Fa),P=T+v.tick_spacing*(r||Fa);O=O<Na?Na:O,P=P>Ba?Ba:P;let j=this.pool.parsePoolType($a(b));l.moveCall({target:`${o.PackageId}::pool_fetcher::compute_swap_result`,typeArguments:j,arguments:[l.object(v.id.id),l.pure(f.a2b,"bool"),l.pure(new U(f.amountSpecified).toFixed(0),"u128"),l.pure(i,"bool"),l.pure(this.math.tickIndexToSqrtPriceX64(f.a2b?O:P).toString(),"u128"),l.object(La.SUI_CLOCK_OBJECT_ID),l.object(o.Versioned)]})});let u=await this.provider.devInspectTransactionBlock({transactionBlock:l,sender:n});if(u.error)throw new Error(u.error);return u.events.map(f=>f.parsedJson)}getFunctionNameAndTypeArguments(t,e,i){let n=[],r=["swap"];if(t.length===1)n=t[0],e===n[0]?r.push("a","b"):r.push("b","a");else{let o=t[0],s=t[1];e===o[0]?(r.push("a","b"),n.push(o[0],o[2],o[1])):(r.push("b","a"),n.push(o[1],o[2],o[0])),n.push(s[2],i),i===s[0]?r.push("c","b"):r.push("b","c")}return{functionName:r.join("_"),typeArguments:n}}amountOutWithSlippage(t,e,i){if(i){let r=new U(100).minus(e).div(100);return new U(t).mul(r).toFixed(0)}let n=new U(100).plus(e).div(100);return new U(t).mul(n).toFixed(0)}sqrtPriceWithSlippage(t,e,i,n,r){let o=new U(t).mul(i?new U(100).minus(e).div(100):new U(100).plus(e).div(100)),s=this.math.priceToSqrtPriceX64(o,n,r);return s.lt(new Su.BN(Cu))?Cu:s.gt(new Su.BN(ku))?ku:s.toString()}},Le=class{constructor(t,e){this.network=t,Wi(this,"pool"),Wi(this,"contract"),Wi(this,"math",new nk),Wi(this,"account",new X1),Wi(this,"coin"),Wi(this,"nft"),Wi(this,"trade"),Wi(this,"provider"),this.provider=e?e instanceof ur.SuiClient?e:new ur.SuiClient(e):new ur.SuiClient({url:t==="mainnet"?(0,ur.getFullnodeUrl)("mainnet"):(0,ur.getFullnodeUrl)("testnet")}),this.contract=new ik(this),this.pool=new rk(this),this.nft=new lk(this),this.coin=new uk(this),this.trade=new fk(this)}};var li=require("@msafe/sui3-utils"),Wu=require("@mysten/sui.js/bcs"),Fn=require("@mysten/sui.js/utils");var C_=require("@mysten/sui.js/transactions"),T_=require("@mysten/sui.js/utils"),x_=require("@mysten/sui.js/transactions"),I_=require("@mysten/sui.js/transactions");var Yu=require("@mysten/sui.js/utils"),ed=require("@mysten/sui.js/transactions");var N_=require("@msafe/sui3-utils"),Ja=require("@msafe/sui3-utils"),zu=require("@mysten/sui.js/bcs"),Rn=require("@mysten/sui.js/utils"),F_=require("@mysten/sui.js/transactions"),q_=require("@mysten/sui.js/transactions"),$_=require("@mysten/sui.js/transactions"),hk=Object.defineProperty,Rm=(t,e)=>{for(var i in e)hk(t,i,{get:e[i],enumerable:!0})},ne=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify((0,$m.default)(this.data))}},pk={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0xc33c3e937e5aa2009cc0c3fdb3f345a0c3193d4ee663ffc601fe8b894fbc4ba6",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0xd43348b8879c1457f882b02555ba862f2bc87bcc31b16294ca14a82f608875d2",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},mk={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0xcec352932edc6663a118e8d64ed54da6b8107e8719603bf728f80717592cd9e8",version:3,config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"",dividend_settle_id:""}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{support_stakings:[{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}]}}},gk={fullRpcUrl:"https://fullnode.testnet.sui.io/",simulationAccount:{address:"0xcd0247d0b67e53dde69b285e7a748e3dc390e8a5244eb9dd9c5c53d95e4cf0aa"},cetus_config:{package_id:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",published_at:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",config:{coin_list_id:"0x257eb2ba592a5480bba0a97d05338fab17cc3283f8df6998a0e12e4ab9b84478",launchpad_pools_id:"0xdc3a7bd66a6dcff73c77c866e87d73826e446e9171f34e1c1b656377314f94da",clmm_pools_id:"0x26c85500f5dd2983bf35123918a144de24e18936d0b234ef2b49fbb2d3d6307d",admin_cap_id:"0x1a496f6c67668eb2c27c99e07e1d61754715c1acf86dac45020c886ac601edb8",global_config_id:"0xe1f3db327e75f7ec30585fa52241edf66f7e359ef550b533f89aa1528dd1be52",coin_list_handle:"0x3204350fc603609c91675e07b8f9ac0999b9607d83845086321fca7f469de235",launchpad_pools_handle:"0xae67ff87c34aceea4d28107f9c6c62e297a111e9f8e70b9abbc2f4c9f5ec20fd",clmm_pools_handle:"0xd28736923703342b4752f5ed8c2f2a5c0cb2336c30e1fed42b387234ce8408ec"}},clmm_pool:{package_id:"0x0868b71c0cba55bf0faf6c40df8c179c67a4d0ba0e79965b68b3d72d7dfbf666",published_at:"0x1c29d658882c40eeb39a8bb8fe58f71a216a918acb3e3eb3b47d24efd07257f2",config:{pools_id:"0xc090b101978bd6370def2666b7a31d7d07704f84e833e108a969eda86150e8cf",global_config_id:"0x6f4149091a5aea0e818e7243a13adcfb403842d670b9a2089de058512620687a",global_vault_id:"0xf3114a74d54cbe56b3e68f9306661c043ede8c6615f0351b0c3a93ce895e1699",admin_cap_id:""}},integrate:{package_id:"0x8627c5cdcd8b63bc3daa09a6ab7ed81a829a90cafce6003ae13372d611fbb1a9",published_at:"0xf1a5d0c5b0593e41d13f9684ca91365bdfe54a98836c1d33c90e361a031fac74",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6",published_at:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6"},aggregatorUrl:"https://api-sui.devcetus.com/router",swapCountUrl:"https://api-sui.devcetus.com/v2/sui/swap/count"},_k={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4"}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},haedal:{package_id:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472",published_at:"0x9dac9c5770e5f930d2223ff68782958701acfaee9337e8d8363978ce7670dffb",config:{support_stakings:[{staking_id:"0x6e384d2da5b040b27f973155e25bbe4beb0ad5ca8ee0a36e20dff356094c9fc0",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472::hasui::HASUI"}]}}},uo=(t,e)=>{let i=t==="sui:mainnet"?pk:gk,n=new wh(i);return n.senderAddress=e.address,n},ii=(t,e)=>{let i=uo(t,e),n=t==="sui:mainnet"?mk:_k;return new Ah(n,i)},bk=async(t,e,i)=>await uo(i,e).Position.createAddLiquidityFixTokenPayload(t?.parameter,t?.gasEstimateArg),wk=async(t,e,i)=>await uo(i,e).Position.createAddLiquidityFixTokenPayload(t?.parameter,t?.gasEstimateArg),yk=async(t,e,i)=>await uo(i,e).Position.closePositionTransactionPayload(t),vk=async(t,e,i)=>await uo(i,e).Position.removeLiquidityTransactionPayload(t),kk=async(t,e,i)=>await uo(i,e).Rewarder.collectRewarderTransactionPayload(t),Ck=class Um extends ne{constructor(e){super(e),this.data=e}txType=Lm.TransactionType.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await bk(r,i,n)}static fromData(e){return new Um(e)}},Tk=class Vm extends ne{constructor(e){super(e),this.data=e}txType=Km.TransactionType.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await kk(r,i,n)}static fromData(e){return new Vm(e)}},Sk=class zm extends ne{constructor(e){super(e),this.data=e}txType=Wm.TransactionType.Other;txSubType="DecreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await vk(r,i,n)}static fromData(e){return new zm(e)}},xk=async(t,e,i)=>await ii(i,e).Farms.openPositionAddLiquidityStakePaylod(t),Ak=async(t,e,i)=>await ii(i,e).Farms.addLiquidityFixCoinPayload(t),Ik=async(t,e,i)=>await ii(i,e).Farms.removeLiquidityPayload(t),Ok=async(t,e,i)=>await ii(i,e).Farms.removeLiquidityPayload(t),Pk=async(t,e,i)=>await ii(i,e).Farms.claimFeeAndClmmReward(t),Dk=async(t,e,i)=>{let n=ii(i,e);return console.log("getFarmingHarvest txbParams: ",t),await n.Farms.harvestPayload(t)},Ek=async(t,e,i)=>{let n=ii(i,e),r=Object.values(t);return console.log("getFarmingBatchHarvest params: ",r),await n.Farms.batchHarvestPayload(r)},Mk=async(t,e,i)=>await ii(i,e).Farms.depositPayload(t),jk=async(t,e,i)=>await ii(i,e).Farms.withdrawPayload(t),Bk=class Hm extends ne{constructor(e){super(e),this.data=e}txType=Gm.TransactionType.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await xk(r,i,n)}static fromData(e){return new Hm(e)}},Nk=class Xm extends ne{constructor(e){super(e),this.data=e}txType=Zm.TransactionType.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ek(r,i,n)}static fromData(e){return new Xm(e)}},Fk=class Qm extends ne{constructor(e){super(e),this.data=e}txType=Jm.TransactionType.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Pk(r,i,n)}static fromData(e){return new Qm(e)}},Rk=class eg extends ne{constructor(e){super(e),this.data=e}txType=Ym.TransactionType.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ik(r,i,n)}static fromData(e){return new eg(e)}},qk=class ig extends ne{constructor(e){super(e),this.data=e}txType=tg.TransactionType.Other;txSubType="FarmingHarvest";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Dk(r,i,n)}static fromData(e){return new ig(e)}},Lk=class rg extends ne{constructor(e){super(e),this.data=e}txType=ng.TransactionType.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ak(r,i,n)}static fromData(e){return new rg(e)}},$k=class sg extends ne{constructor(e){super(e),this.data=e}txType=og.TransactionType.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Ok(r,i,n)}static fromData(e){return new sg(e)}},Uk=class cg extends ne{constructor(e){super(e),this.data=e}txType=ag.TransactionType.Other;txSubType="FarmingStake";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Mk(r,i,n)}static fromData(e){return new cg(e)}},Kk=class ug extends ne{constructor(e){super(e),this.data=e}txType=lg.TransactionType.Other;txSubType="FarmingUnstake";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await jk(r,i,n)}static fromData(e){return new ug(e)}},Vk=class fg extends ne{constructor(e){super(e),this.data=e}txType=dg.TransactionType.Other;txSubType="IncreaseLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await wk(r,i,n)}static fromData(e){return new fg(e)}},Wk=class pg extends ne{constructor(e){super(e),this.data=e}txType=hg.TransactionType.Other;txSubType="RemoveLiquidity";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await yk(r,i,n)}static fromData(e){return new pg(e)}},zk=async(t,e,i)=>await ii(i,e).XCetusModule.convertPayload(t),Gk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemLockPayload(t),Hk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemDividendV2Payload(t.venft_id,t.bonus_types,t.xTokenType),Zk=async(t,e,i)=>await ii(i,e).XCetusModule.cancelRedeemPayload(t),Xk=async(t,e,i)=>await ii(i,e).XCetusModule.redeemPayload(t),Jk=class gg extends ne{constructor(e){super(e),this.data=e}txType=mg.TransactionType.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Zk(r,i,n)}static fromData(e){return new gg(e)}},Qk=class bg extends ne{constructor(e){super(e),this.data=e}txType=_g.TransactionType.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Hk(r,i,n)}static fromData(e){return new bg(e)}},Yk=class yg extends ne{constructor(e){super(e),this.data=e}txType=wg.TransactionType.Other;txSubType="xCETUSConvert";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await zk(r,i,n)}static fromData(e){return new yg(e)}},eC=class kg extends ne{constructor(e){super(e),this.data=e}txType=vg.TransactionType.Other;txSubType="xCETUSRedeem";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Xk(r,i,n)}static fromData(e){return new kg(e)}},tC=class Tg extends ne{constructor(e){super(e),this.data=e}txType=Cg.TransactionType.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:i,network:n}=e,{txbParams:r}=this.data;return await Gk(r,i,n)}static fromData(e){return new Tg(e)}},iC=class{application="cetus";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:i}=t;return{txType:qm.TransactionType.Other,txSubType:i,intentionData:{txbParams:{...e},action:i}}}async build(t){let{suiClient:e,account:i,network:n}=t;console.log("helper build input: ",t),console.log("helper build input.intentionData: ",t.intentionData),console.log("helper build input.intentionData JSON: ",JSON.stringify(t.intentionData));let r;switch(t.txSubType){case"OpenAndAddLiquidity":r=Ck.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Vk.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Sk.fromData(t.intentionData);break;case"RemoveLiquidity":r=Wk.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=Tk.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=Bk.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=Lk.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=Rk.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=$k.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=Fk.fromData(t.intentionData);break;case"FarmingHarvest":r=qk.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=Nk.fromData(t.intentionData);break;case"FarmingStake":r=Uk.fromData(t.intentionData);break;case"FarmingUnstake":r=Kk.fromData(t.intentionData);break;case"xCETUSConvert":r=Yk.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=tC.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=Qk.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Jk.fromData(t.intentionData);break;case"xCETUSRedeem":r=eC.fromData(t.intentionData);break;default:throw new Error("not implemented")}return console.log("helper build intention: ",r),console.log("helper build account: ",i),console.log("helper build network: ",n),r.build({suiClient:e,account:i,network:n})}},xg={};Rm(xg,{contractId:()=>Og,default:()=>nC,feeObjId:()=>Eg,roleObjId:()=>Pg,status:()=>Ig,transaction:()=>Ag,upgradeCapObjId:()=>Mg,vaultObjId:()=>Dg});var Ag="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Ig="success",Og="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Pg="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Dg="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Eg="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Mg="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",nC={transaction:Ag,status:Ig,contractId:Og,roleObjId:Pg,vaultObjId:Dg,feeObjId:Eg,upgradeCapObjId:Mg},jg={};Rm(jg,{contractId:()=>Fg,default:()=>rC,feeObjId:()=>Lg,roleObjId:()=>Rg,status:()=>Ng,transaction:()=>Bg,upgradeCapObjId:()=>$g,vaultObjId:()=>qg});var Bg="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Ng="success",Fg="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Rg="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",qg="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Lg="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",$g="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",rC={transaction:Bg,status:Ng,contractId:Fg,roleObjId:Rg,vaultObjId:qg,feeObjId:Lg,upgradeCapObjId:$g},oC="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",sC="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",aC="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",cC="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",lC="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",uC="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",dC="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",fC="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",cm=xg,lm=jg,hC=new Map([["dev",{env:"dev",rpc:{url:oC},backend:{url:lC},contract:cm}],["stg",{env:"stg",rpc:{url:sC},backend:{url:uC},contract:cm}],["prev",{env:"prev",rpc:{url:aC},backend:{url:dC},contract:lm}],["prod",{env:"prod",rpc:{url:cC},backend:{url:fC},contract:lm}]]);function pC(t,e){let i=hC.get(t);if(!i)throw new Error(`Env not supported: ${t}`);return e&&e.rpc&&(i.rpc=e.rpc),e&&e.backend&&(i.backend=e.backend),e&&e.contract&&(i.contract=e.contract),i}var di=class extends Error{mpayErrorCode;context;constructor(t,e,i={}){let{cause:n,context:r}=i;n?super(`[MPay] ${e}: ${n}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}},mC=class extends di{constructor(){super(11,"Backend is not specified")}},gC=class extends di{constructor(){super(1,"Wallet not connected")}},Iu=class extends di{constructor(t,e){super(10,t,{context:e})}},_C=class fr{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof ln.AxiosError)throw new Iu(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new Iu(e.data.code)}throw new Iu(e.status.toString())}async getIncomingStreams(e,i){let n=await ln.default.post(`${this.apiURL}/stream`,{recipient:e,...i});return fr.parseResponseData(n)}async getOutgoingStreams(e,i){let n=await ln.default.post(`${this.apiURL}/stream`,{sender:e,...i});return fr.parseResponseData(n)}async getStreamHistory(e){let i=await ln.default.post(`${this.apiURL}/stream-events`,e),n=fr.parseResponseData(i);return n.data.forEach(r=>{let o=r;return o.data.type==="create_stream"?o.data.balance=BigInt(o.data.balance):o.data.type==="cancel_stream"?o.data.withdrawAmount=BigInt(o.data.withdrawAmount):o.data.type==="claim"||o.data.type==="auto_claim"?o.data.claimAmount=BigInt(o.data.claimAmount):o.data.type==="set_auto_claim"&&(o.data.enabled=!!o.data.enabled),o.createdAt=new Date(o.createdAt),o}),n}async getAllCoinTypes(e){let i=await ln.default.post(`${this.apiURL}/stream-info`,{address:e});return fr.parseResponseData(i)}async getAllRecipients(e,i){let n=await ln.default.post(`${this.apiURL}/stream-info`,{sender:e,status:i});return fr.parseResponseData(n)}async getAllSenders(e,i){let n=await ln.default.post(`${this.apiURL}/stream-info`,{recipient:e,status:i});return fr.parseResponseData(n)}},Kg=class Vg{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Ug.SuiClient({url:e.rpc.url}),e.backend&&(this._backend=new _C(e.backend.url))}static new(e,i){let n=pC(e,i);return new Vg(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new mC;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new gC;return this.signer}async walletAddress(){return this.wallet.address()}},um=50n,Ou=10000n,bC=25n,dm=100000000n,dr=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},fm=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},Ya=class Wg{constructor(e){return this.result=e,new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(i,n){if(n in i)return Reflect.get(i,n);let r=s=>new Wg(i.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield r(s),s++};if(typeof n=="symbol")return;let o=parseInt(n,10);if(!(Number.isNaN(o)||o<0))return r(o)}})}moveArg(){return this.result}},hm=class extends di{constructor(t,e){super(3,t,{context:e})}},wC=class{constructor(t){this.results=t}callResult(t){return this.results.results[t]}returnValue(t,e){return t.returnValues[e]}getValue(t=0,e=0){let i=this.callResult(t);return this.returnValue(i,e)}getAddress(t=0,e=0){let[i,n]=this.getValue(t,e);if(n!=="address")throw new hm("Invalid contract return type.",{ctx:{expectType:"address",gotType:n}});return(0,zg.normalizeSuiAddress)(Bu.Buffer.from(i).toString("hex"))}getU64(t=0,e=0){let[i,n]=this.getValue(t,e);if(n!=="u64")throw new hm("Invalid contract return type.",{ctx:{expectType:"u64",gotType:n}});return Bu.Buffer.from(i).readBigInt64LE()}},ui=class extends di{constructor(t,e,i){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:i}})}},Gg={groupId:"string",name:"string"},yC=64;function vC(t){return Hg(t),Gu.bcs.ser(Gg,t).toString("base64")}function Nu(t){let e=Gu.bcs.de(Gg,t,"base64");return Hg(e),e}function Hg(t){if(!pm(t.name))throw new ui("Invalid metadata: Name contains unknown character");if(!pm(t.groupId))throw new ui("Invalid metadata: Group ID contains unknown character");if(t.name.length>yC)throw new ui("Invalid metadata: Name exceed max length 64")}function pm(t){return/^[\x00-\x7F]+$/.test(t)}function Zg(t,e){return(0,us.normalizeStructTag)(t)===(0,us.normalizeStructTag)(e)}function no(t,e){return(0,us.normalizeStructTag)(t)===(0,us.normalizeStructTag)(e)}var Xg="txn.gas";function kC(){return Ih()}var Fu=class Jg{constructor(e,i,n){this.globals=e,this.feeContract=i,this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:vC({name:e.name,groupId:kC()}),coinType:(0,ls.normalizeStructTag)(e.coinType),recipients:e.recipients.map(i=>({address:i.address,cliffAmount:i.cliffAmount,amountPerEpoch:i.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let i=new ju.TransactionBlock,n=this.calculateFeesInternal(e),r=this.getCreateStreamCoinRequests(e,n),o=await this.wallet.requestCoins(r),s=await this.addMergeCoins(i,o[0]),a;r.length>1?a=await this.addMergeCoins(i,o[1]):a=s;for(let l=0;l<e.recipients.length;l++){let u=e.recipients[l],f=this.amountForRecipient(u,e.numberEpoch),b=this.getStreamFeeLocal(f),[v]=i.splitCoins(s,[i.pure(f+b,"u64")]),[T]=i.splitCoins(a,[i.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(i,{paymentCoin:new Ya(v),flatFeeCoin:new Ya(T),metadata:e.metadata,recipient:u.address,timeStart:e.startTime,cliff:u.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:u.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return i}calculateCreateStreamFees(e){let i=Jg.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(i)}feeParams(){return{createFeePercent:{numerator:um,denominator:Ou},claimFeePercent:{numerator:bC,denominator:Ou},flatFeePerStream:dm}}async addMergeCoins(e,i){let n;return i.mergedCoins&&i.mergedCoins.length?(e.mergeCoins(e.object(i.primaryCoin),i.mergedCoins.map(r=>e.object(r))),n=e.object(i.primaryCoin)):i.primaryCoin===Xg?n=e.gas:n=e.object(i.primaryCoin),n}getCreateStreamCoinRequests(e,i){let n=e.coinType;return Zg(n,ls.SUI_TYPE_ARG)?[{coinType:n,amount:i.totalAmount+i.streamFeeAmount+i.flatFeeAmount}]:[{coinType:n,amount:i.totalAmount+i.streamFeeAmount},{coinType:ls.SUI_TYPE_ARG,amount:i.flatFeeAmount}]}calculateFeesInternal(e){let i=e.recipients.reduce((n,r)=>{let o=this.amountForRecipient(r,e.numberEpoch),s=this.getStreamFeeLocal(o);return{totalAmount:n.totalAmount+o,streamFeeAmount:n.streamFeeAmount+s}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...i}}amountForRecipient(e,i){return BigInt(e.amountPerEpoch)*BigInt(i)+BigInt(e.cliffAmount)}get flatSuiFee(){return dm}getStreamFeeLocal(e){return e*um/Ou}async getStreamFeeRemote(e){let i=this.feeContract.streamingFee(new ju.TransactionBlock,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:i});return new wC(n).getU64()}get wallet(){return this.globals.wallet}},CC="0x0000000000000000000000000000000000000000000000000000000000000006",Qg=class{constructor(t,e,i){this.moduleName=t,this.config=e,this.globals=i}addContractCall(t,e){let i=`${this.config.contractId}::${this.moduleName}::${e.method}`;return t.add(Ru.Transactions.MoveCall({target:i,arguments:e.arguments.map(n=>n instanceof fm?n.moveArgs(t):n instanceof dr?n.moveArg(t):n instanceof Ya?n.moveArg():t.pure(n)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,i=[],n=[]){t.add(Ru.Transactions.MoveCall({target:e,arguments:i.map(r=>r instanceof fm?r.moveArgs(t):r instanceof dr?r.moveArg(t):r instanceof Ya?r.moveArg():t.pure(r)),typeArguments:n}))}makeObject(t){return typeof t=="string"?new dr(t):t}vaultObject(){return new dr(this.config.vaultObjId)}roleObject(){return new dr(this.config.roleObjId)}feeObject(){return new dr(this.config.feeObjId)}clockObject(){return new dr(CC)}},Yg=class En extends Qg{constructor(e,i){super(En.ModuleName,e,i),this.config=e,this.globals=i}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_streaming_fee,arguments:[n,r,i],typeArgs:[]})}setStreamingFlatFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_streaming_flat_fee,arguments:[n,r,i],typeArgs:[]})}setClaimFee(e,i){let n=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:En.MethodName.set_claim_fee,arguments:[n,r,i],typeArgs:[]})}streamingFee(e,i){let n=this.feeObject();return this.addContractCall(e,{method:En.MethodName.streaming_fee,arguments:[n,i],typeArgs:[]})}claimFee(e,i){return this.addContractCall(e,{method:En.MethodName.claim_fee,arguments:[this.feeObject(),i],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:En.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}},ic=class Vt extends Qg{constructor(e,i){super(Vt.ModuleName,e,i),this.config=e,this.globals=i}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(e,i){let n=this.feeObject(),r=this.vaultObject(),o=this.makeObject(i.paymentCoin),s=this.makeObject(i.flatFeeCoin),a=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.create_stream,arguments:[n,r,o,s,i.metadata,i.recipient,i.timeStart,i.cliff,i.epochInterval,i.numEpoch,i.amountPerEpoch,i.cancelable,a],typeArgs:[i.coinType]})}setAutoClaim(e,i){let n=this.makeObject(i.streamId);return this.addContractCall(e,{method:Vt.MethodName.set_auto_claim,arguments:[n,i.enabled],typeArgs:[i.coinType]})}cancelStream(e,i){let n=this.makeObject(i.streamId),r=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.cancel_stream,arguments:[n,r],typeArgs:[i.coinType]})}claimStream(e,i){let n=this.makeObject(i.streamId),r=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.claim_stream,arguments:[n,r],typeArgs:[i.coinType]})}claimStreamByProxy(e,i){let n=this.makeObject(i.streamId),r=this.vaultObject(),o=this.feeObject(),s=this.clockObject();return this.addContractCall(e,{method:Vt.MethodName.claim_stream_by_proxy,arguments:[n,r,o,s],typeArgs:[i.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${Vt.ModuleName}::${Vt.MethodName.claim_stream_by_proxy}`}},e0=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Yg(e,t),this.streamContract=new ic(e,t)}feeContract;streamContract;async createStreams(t){let e=Fu.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new Fu(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,i){let n=new os.TransactionBlock;return this.streamContract.setAutoClaim(n,{streamId:t,enabled:e,coinType:i})}claimStream(t,e){let i=new os.TransactionBlock;return this.streamContract.claimStream(i,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let i=new os.TransactionBlock;return this.streamContract.claimStreamByProxy(i,{streamId:t,coinType:e})}cancelStream(t,e){let i=new os.TransactionBlock;return this.streamContract.cancelStream(i,{streamId:t,coinType:e}),i}},Ri=class extends di{constructor(t,e={}){super(0,t,e)}};async function TC(t){let e=[];for(;await t.hasNext();){let i=await t.next();e.push(i)}return e&&Array.isArray(e[0])?e.flat(1):e}var SC=class{constructor(t){this.requester=t,this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},t0=class{constructor(t){this.requester=t,this.pager=new SC(t),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}},xC=class extends di{constructor(t,e,i){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:e,gotAmount:i}}),this.coinType=t,this.requestAmount=e,this.gotAmount=i}},AC=25;async function IC(t,e,i,n="0x2::sui::SUI",r=AC){let o=new OC(t,e,n,r),s=BigInt(0),a=[];for(;await o.hasNext()&&s<i;){let l=await o.next();l&&(a.push(l),s+=BigInt(l.balance))}if(s<i)throw new xC(n,i,s);return a}var OC=class extends t0{constructor(t,e,i,n){super(new PC(t,e,i,n)),this.suiClient=t,this.owner=e,this.coinType=i,this.reqPageSize=n}},PC=class{constructor(t,e,i,n){if(this.suiClient=t,this.owner=e,this.coinType=i,this.reqPageSize=n,n<=0)throw new Ri("Invalid reqPageSize")}nextCursor;async doNextRequest(){let t=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=t.nextCursor,{data:t.data,hasNext:t.hasNextPage}}},DC=class extends di{constructor(){super(7,"Connected wallet is not creator")}},mm=class extends di{constructor(){super(8,"Connected wallet is not recipient")}},gm=class extends di{constructor(t,e){super(6,t,{context:e})}},EC=class extends di{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}},MC=(1n<<64n)-1n,ec=1e3;function _m(t){let e;typeof t=="number"?e=t:typeof t=="bigint"?e=Number(t):e=t.toMillis();let i=Math.round(e/ec);return Te.fromMillis(i*ec)}function bm(t){let e;typeof t=="number"?e=t:typeof t=="bigint"?e=Number(t):e=t.toMillis();let i=Math.round(e/ec);return je.fromMillis(i*ec)}var Hu=class Mn{constructor(e,i,n){this.globals=e,this.streamId=i,this.rawData=n,this.streamContract=new ic(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,i){let n=await Mn.fetchStreamData(e,i);return new Mn(e,i,n)}static fromObjectData(e,i,n){let r=Mn.parseRawStreamData(i,n);return new Mn(e,i,r)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await Mn.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new Ri("Object Id does not align");this.rawData=Mn.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new DC;let e=new ss.TransactionBlock;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new mm;let e=new ss.TransactionBlock;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new mm;let i=new ss.TransactionBlock;return this.streamContract.setAutoClaim(i,{streamId:this.streamId,coinType:this.coinType,enabled:e}),i}async claimByProxy(){let e=new ss.TransactionBlock;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return(0,ds.normalizeStructTag)(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return bm(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Nu(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Nu(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return _m(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,i=e.epochInterval*e.totalEpoch;return bm(i)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:_m((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===MC?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Te.now().toMillis(),i=this.timeStart.toMillis();if(e<i)return-1n;let n=Math.floor((e-i)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,i){let n=await e.suiClient.getObject({id:i,options:{showContent:!0,showType:!0}});return Mn.parseRawStreamData(i,n)}static parseRawStreamData(e,i){if(i.error)throw i.error.code==="notExists"?new EC(e):new gm(`get stream data: ${i.error.code}`,{streamId:e,...i.error});let n=i.data.content;if(n.dataType!=="moveObject")throw new gm("Unexpected object type",{gotType:n.dataType});let{typeParams:r}=(0,ds.parseStructTag)(n.type),o=(0,ds.normalizeStructTag)(r[0]),s=n.fields,a=s.config.fields,l=s.status.fields;return{coinType:o,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(a.amount_per_epoch),cancelable:a.cancelable,cliff:BigInt(a.cliff),creator:a.creator,epochInterval:BigInt(a.epoch_interval),metadata:a.metadata,recipient:a.recipient,timeStart:BigInt(a.time_start),totalEpoch:BigInt(a.total_epoch)},status:{status:l.status,epochCanceled:BigInt(l.epoch_canceled),epochClaimed:BigInt(l.epoch_claimed)}}}},jC=class extends di{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}},BC=1e3,NC=class{constructor(t){this.globals=t,this.coinMetaHelper=new FC(t.suiClient),this.createStreamHelper=new e0(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new jC(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},i=t.totalAmount*e.numerator/e.denominator,n=(t.totalAmount-i)/t.steps,r={realTotalAmount:n*t.steps+i,cliffAmount:i,amountPerStep:n};return this.validateStreamAmount(r,t.totalAmount),r}calculateTimelineByInterval(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),i={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(i),i}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new ui("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,i=t.timeStart.plus(je.fromMillis(Number(e*t.steps))),n={timeStart:t.timeStart,timeEnd:i,interval:je.fromMillis(Number(e)),steps:t.steps};return this.validateTimeline(n),n}async getBalance(t,e){let i=await this.globals.suiClient.getBalance({owner:t,coinType:e}),n=await this.getCoinMeta(e);return{...i,coinType:(0,lo.normalizeStructTag)(i.coinType),coinMeta:n}}async getAllBalance(t){let e=await this.globals.suiClient.getAllBalances({owner:t}),i=await Promise.all(e.map(n=>this.getCoinMeta(n.coinType)));return e.map((n,r)=>({...n,coinType:(0,lo.normalizeStructTag)(n.coinType),coinMeta:i[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new ui("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new ui("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<BC)throw new ui("Interval shall be at least 1 second","interval",t.interval)}},FC=class{constructor(t){this.suiClient=t,this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=(0,lo.normalizeStructTag)(t||lo.SUI_TYPE_ARG);if(this.coinMetaReg.has(e))return this.coinMetaReg.get(e);let i=await this.queryCoinMeta(e);return i&&this.coinMetaReg.set(e,i),i}async queryCoinMeta(t){return await this.suiClient.getCoinMetadata({coinType:t})||void 0}},Pu=class extends di{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}},RC=25;async function wm(t,e,i){let n=new i0(e),r=new n0(t,n,i);return await TC(r)}var i0=class{constructor(t){this.ids=t,this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},n0=class extends t0{constructor(t,e,i){super(new qC(t,e,i)),this.suiClient=t,this.idIter=e,this.options=i}},qC=class{constructor(t,e,i){this.suiClient=t,this.stringIter=e,this.options=i,this.filter=i?.filter,this.pageSize=i?.pageSize||RC,this.objectOptions=i?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let t=[];for(;t.length<this.pageSize&&await this.stringIter.hasNext();){let n=await this.stringIter.next();n&&t.push(n)}let e=await this.suiClient.multiGetObjects({ids:t,options:this.objectOptions}),i;if(this.filter){let{filter:n}=this;i=e.filter(r=>n?.(r))}else i=e;return{data:i,hasNext:await this.stringIter.hasNext()}}},LC=class Ka{constructor(e,i){if(this.globals=e,this.streams=i,i.length===0)throw new Pu("stream size 0");let n=i.map(r=>r.groupId);if(new Set(n).size!==1)throw new ui("Stream does not have same group ID")}type="StreamGroup";static async new(e,i){let n=await wm(e.suiClient,i);return n.forEach(r=>{if(!r)throw new Ri("stream group object data undefined")}),Ka.newFromObjectResponse(e,i,n)}static async newFromObjectResponse(e,i,n){let r=await Ka.parseGroupStreams(e,i,n);return new Ka(e,r)}static checkStreamGroup(e){let i=e.map(o=>o.groupCommonInfo),n=i[0],r=!0;return i.forEach(o=>{$C(n,o)||(r=!1)}),r}async refresh(){let e=await wm(this.globals.suiClient,this.streams.map(i=>i.streamId));this.streams.forEach((i,n)=>{i.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,i)=>e+i.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,i)=>e+i.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,i)=>i.nextReleaseAmount===null?e:e+i.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,i)=>e+i.totalAmount,0n),streamed:this.streams.reduce((e,i)=>e+i.streamedAmount,0n),claimed:this.streams.reduce((e,i)=>e+i.claimedAmount,0n),claimable:this.streams.reduce((e,i)=>e+i.claimable,0n),canceled:this.streams.reduce((e,i)=>e+i.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,i,n){let r=n.map((o,s)=>Hu.fromObjectData(e,i[s],o)).filter(o=>!!o);if(new Set(r.map(o=>o.groupId)).size!==1)throw new Pu("Not same group ID");if(!this.checkStreamGroup(r))throw new Pu("Not same stream settings");return r}};function $C(t,e){return t.name===e.name&&t.groupId===e.groupId&&t.creator===e.creator&&t.start.toMillis()===e.start.toMillis()&&t.interval.toMillis()===e.interval.toMillis()&&t.steps===e.steps&&t.cancelable===e.cancelable}var ym=class qu{constructor(e,i){this.it=e,this.pageSize=i}static async newIncoming(e){let i=await vm.newIncoming(e);return new qu(i,e.pageSize)}static async newOutgoing(e){let i=await vm.newOutgoing(e);return new qu(i,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},vm=class Lu{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let i=await km.newIncomingQuery(e);return new Lu(i)}static async newOutgoing(e){let i=await km.newOutgoingQuery(e);return new Lu(i)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let i=await this.requester.doNextRequest();if(i===null)throw new Ri("No more results");return i}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Ri("No more results");return e}},km=class $u{constructor(e,i,n,r){this.globals=e,this.recipient=i,this.groupRefs=n,this.query=r,this.current=0;let o=new i0(n.flat().map(s=>s.streamId));this.objectIter=new n0(e.suiClient,o)}current=0;objectIter;static async newIncomingQuery(e){let i=zC(e.query),n=await e.globals.walletAddress(),r=(await e.globals.backend.getIncomingStreams(n,i)).filter(s=>(0,$n.normalizeSuiAddress)(s.recipient)===(0,$n.normalizeSuiAddress)(n)),o=Cm(r);return new $u(e.globals,n,o,e.query)}static async newOutgoingQuery(e){let i=GC(e.query),n=await e.globals.walletAddress(),r=await e.globals.backend.getOutgoingStreams(n,i),o=Cm(r);return new $u(e.globals,n,o,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let i=await VC(this.globals,e[0].streamId,this.objectIter);return this.current++,r0(i,this.query)?i:this.doNextRequest()}if(e.length>1){let i=await WC(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,KC(i,this.query)?i:this.doNextRequest()}throw new Ri("Stream group with no stream")}};function Cm(t){let e=new Map;return t.forEach(i=>{let n=e.get(i.groupId);n?(n.push(i),e.set(i.groupId,n)):e.set(i.groupId,[i])}),Array.from(e.values()).sort((i,n)=>Te.fromISO(n[0].createDate).toMillis()-Te.fromISO(i[0].createDate).toMillis())}function r0(t,e){if(e===void 0)return!0;let i=UC(t,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?t.progress.claimable!==0n:t.progress.claimable===0n;return i&&n}return i}function UC(t,e){return e===void 0?!0:Array.isArray(e)?e.includes(t.progress.status):t.progress.status===e}function KC(t,e){if(!e)return!0;let i=!1;return t.streams.forEach(n=>{r0(n,e)&&(i=!0)}),i}async function VC(t,e,i){let n=await o0(i,e);return Hu.fromObjectData(t,e,n)}async function WC(t,e,i){let n=[];for(;n.length<e.length;){let r=await o0(i,e[n.length]);n.push(r)}return LC.newFromObjectResponse(t,e,n)}async function o0(t,e){if(!await t.hasNext())throw new Ri("object iterator has been consumed");let i=await t.next();if(!i||i.error||i.data===void 0||i.data===null)throw new Ri("object iterator undefined response",{cause:i?.error});if(i?.data?.objectId!==e)throw new Ri("stream id not aligned");return i}function zC(t){return{status:Zu(t?.status),coinType:s0(t?.coinType),sender:a0(t?.sender)}}function GC(t){return{status:Zu(t?.status),coinType:s0(t?.coinType),recipient:a0(t?.recipient)}}function Zu(t){return t===void 0||t.length===0?"all":Array.isArray(t)?t.reduce((e,i)=>{let n=Zu(i);return!e||e===n?n:"all"},void 0):HC(t)}function HC(t){switch(t){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new ui("Unknown stream filtered status")}}function s0(t){if(t)return Array.isArray(t)?t.length!==0?t.map(e=>(0,$n.normalizeStructTag)(e)):void 0:(0,$n.normalizeStructTag)(t)}function a0(t){if(t)return Array.isArray(t)?t.length!==0?t.map(e=>(0,$n.normalizeSuiAddress)(e)):void 0:(0,$n.normalizeSuiAddress)(t)}var ZC=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},XC=class{constructor(t){this.account=t}async address(){return this.account.address}},JC=class{constructor(t,e){this.singleWallet=t,this.suiClient=e}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(t){return Promise.all(t.map(e=>this.requestCoin(e)))}async requestCoin(t){if(Zg(t.coinType,hr.SUI_TYPE_ARG))return{primaryCoin:Xg};if(t.amount<=0)throw new ui("Invalid coin request","coinAmount",t.amount);let e=await IC(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new Ri("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(i=>i.coinObjectId)}}},QC=class{globals;helper;constructor(t,e){this.globals=Kg.new(t,e),this.helper=new NC(this.globals)}connectSingleWallet(t){let e=new JC(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new ZC(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return Hu.new(this.globals,t)}async getIncomingStreams(t,e=10){return ym.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return ym.newOutgoing({globals:this.globals,query:t,pageSize:e})}async getCoinTypesForStreamFilter(){let t=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(t)).map(e=>(0,hr.normalizeStructTag)(e))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(i=>(0,hr.normalizeSuiAddress)(i))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(i=>(0,hr.normalizeSuiAddress)(i))}get wallet(){return this.globals.wallet}builder(){return new e0(this.globals)}},YC=class{constructor(t){this.data=t}serialize(){return JSON.stringify((0,c0.default)(this.data))}},hs=class extends YC{application="mpay";getClient(t,e){let i=new QC(t==="sui:mainnet"?"prod":"dev");return i.connectSingleWallet(new XC(e)),i}},Tm=class extends hs{constructor(t){super(t),this.data=t}txType=Sg.TransactionType.Stream;txSubType="Cancel";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).cancel()}},Sm=class extends hs{constructor(t){super(t),this.data=t}txType=l0.TransactionType.Stream;txSubType="ClaimByProxy";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).claimByProxy()}},xm=class extends hs{constructor(t){super(t),this.data=t}txType=u0.TransactionType.Stream;txSubType="Claim";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).claim()}},Am=class extends hs{constructor(t){super(t),this.data=t}txType=d0.TransactionType.Stream;txSubType="CreateStream";async build(t){let{network:e,account:i}=t;return this.getClient(e,i).createStream(this.data)}},f0=class Va{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Va.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Va.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return BigInt(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,jn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Va.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Uu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,jn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,jn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,jn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,jn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Uu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,jn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},eT=class{constructor(t,e){this.globals=t,this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(e=>this.getCreationInfoFromMoveCall(e));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&no(e.target,this.contract.createStreamTarget));if(t.length===0)throw new Ri("No create stream transactions");return t.map(e=>new f0(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:i,groupId:n}=Nu(e),r=t.decodeInputAddress(5),o=t.decodeInputU64(6),s=t.decodeInputU64(7),a=t.decodeInputU64(8),l=t.decodeInputU64(9),u=t.decodeInputU64(10),f=t.decodeInputBool(11),b=t.typeArg(0);return{name:i,groupId:n,recipient:r,timeStart:o,cliff:s,epochInterval:a,totalEpoch:l,amountPerEpoch:u,cancelable:f,coinType:b}}aggregateGroupStreamInfo(t){if(new Set(t.map(i=>JSON.stringify({name:i.name,groupId:i.groupId,timeStart:String(i.timeStart),epochInterval:String(i.epochInterval),totalEpoch:String(i.totalEpoch),cancelable:i.cancelable,coinType:i.coinType}))).size!==1)throw new ui("Stream group not have common info");let e=t.map(i=>({address:i.recipient,amountPerStep:i.amountPerEpoch,cliffAmount:i.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:e,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new ic(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Yg(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new Fu(this.globals,this.feeContract,this.contract)}getInputArg(t){if(t.kind!=="Input")throw new Error("not input type");return"value"in t?t:this.txb.blockData.inputs[t.index]}},tT=class{constructor(t,e){this.globals=t,this.txb=e,this.contract=new ic(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&no(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&no(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new eT(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:t,enabled:e}}decodeClaimTransaction(){return{type:"Claim",streamId:this.helper.decodeSharedObjectId(0)}}decodeClaimByProxyTransaction(){return{type:"ClaimByProxy",streamId:this.helper.decodeSharedObjectId(0)}}decodeCancelStreamTransaction(){return{type:"Cancel",streamId:this.helper.decodeSharedObjectId(0)}}get helper(){let t=this.transactions[0];return new f0(t,this.txb)}},Im=class extends hs{constructor(t){super(t),this.data=t}txType=h0.TransactionType.Stream;txSubType="SetAutoClaim";async build(t){let{network:e,account:i}=t;return(await this.getClient(e,i).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}},iT=class{application="mpay";async deserialize(t){let{network:e,transactionBlock:i}=t,n=Kg.new(e==="sui:mainnet"?"prod":"dev"),r=new tT(n,i).decode(),o;switch(r.type){case"CreateStream":o=new Am(r.info);break;case"SetAutoClaim":o=new Im({streamId:r.streamId,enabled:r.enabled});break;case"Claim":o=new xm({streamId:r.streamId});break;case"ClaimByProxy":o=new Sm({streamId:r.streamId});break;case"Cancel":o=new Tm({streamId:r.streamId});break;default:throw new Error(`Unknown transaction type: ${r}`)}return{txType:o.txType,txSubType:o.txSubType,intentionData:o.data}}async build(t){let{intentionData:e}=t,i;switch(t.txSubType){case"CreateStream":i=new Am(e);break;case"Claim":i=new xm(e);break;case"ClaimByProxy":i=new Sm(e);break;case"SetAutoClaim":i=new Im(e);break;case"Cancel":i=new Tm(e);break;default:throw new Error("not implemented")}return i.build({...t})}},nT=class m0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e;return(0,p0.buildCoinTransferTxb)(i,this.data,n.address)}static fromData(e){return new m0(e)}},rT=class _0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e;return(0,g0.buildObjectTransferTxb)(i,this.data,n.address)}static fromData(e){return new _0(e)}},oT=class y0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{account:i}=e,n=w0.TransactionBlock.from(this.data.content);if(!(0,b0.isSameAddress)(n.blockData.sender,i.address))throw new Error("Invalid sender address");return n}static fromData(e){return new y0(e)}},sT=class{application;constructor(){this.application=ao.TransactionDefaultApplication}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case ao.TransactionSubTypes.assets.coin.send:n=nT.fromData(t.intentionData);break;case ao.TransactionSubTypes.assets.object.send:n=rT.fromData(t.intentionData);break;case ao.TransactionSubTypes.others.plain:n=oT.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},aT={ProtocolPackage:"0xc6374c7da60746002bfee93014aeb607e023b2d6b25c9e55a152b826dbc8c1ce",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},usdc:{name:"USDC",assetId:1,coinType:"usdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"}}},ye=aT,cT=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${ye.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(ye.pool).find(i=>i.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${ye.ProtocolPackage}::incentive_v2::claim_reward`){let i=new Om(e,this.txb),n=i.decodeInputU8(4),r=i.decodeInputU8(5),o=i.decodeSharedObjectId(2),s=this.findPoolByAssetId(n),a=[...e.typeArguments];t.push({coinType:s.coinType,option:r,typeArguments:a,assetId:n,poolId:o})}}),console.log("decode claims",t),{txType:ro.TransactionType.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryDeposit",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryRepay",intentionData:{amount:e,coinType:i.coinType}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),i=this.findPoolByAssetId(t);return{txType:ro.TransactionType.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:i.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(ye.ProtocolPackage));return new Om(t,this.txb)}},Om=class Wa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Wa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Wa.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Bn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Wa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Ku.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Bn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Bn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Bn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Bn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Ku.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Bn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};function Pm(t,e,i,n){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[t.object("0x06"),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),i,t.pure(n),t.object(ye.Incentive),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function lT(t,e,i){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),t.pure(i),t.object(ye.Incentive),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function uT(t,e,i){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_borrow`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),t.pure(i),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function Dm(t,e,i,n){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[t.object("0x06"),t.object(ye.PriceOracle),t.object(ye.StorageId),t.object(e.poolId),t.pure(e.assetId),i,t.pure(n),t.object(ye.IncentiveV2)],typeArguments:[e.type]}),t}function dT(t,e,i,n,r){return t.moveCall({target:`${ye.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[t.object("0x06"),t.object(ye.IncentiveV2),t.object(i),t.object(ye.StorageId),t.pure(e),t.pure(n)],typeArguments:r}),t}var fT=class C0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,i=new k0.TransactionBlock;return e.forEach(n=>{let{assetId:r,poolId:o,option:s,typeArguments:a}=n;dT(i,r,o,s,a)}),i.setGasBudget(ye.gasBudget),i}static fromData(e){return new C0(e)}},hT=class S0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{coinType:e,amount:i}=this.data,n=new T0.TransactionBlock;n.setGasBudget(ye.gasBudget),console.log("build",this.data);let r=ye.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(ye.pool).join(", ")}.`);return uT(n,r,i)}static fromData(e){return new S0(e)}};async function A0(t,e,i){let n=await t.getCoins({owner:e,coinType:i});return console.log("getTokenObjs",e,n),n}var pT=class I0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e,{coinType:r,amount:o}=this.data,s=new x0.TransactionBlock;if(s.setGasBudget(ye.gasBudget),console.log("build",this.data),r==="sui"){let[f]=s.splitCoins(s.gas,[o]);return Pm(s,ye.pool.sui,f,o)}let a=ye.pool[r];if(!a)throw new Error(`${r} not support, please use ${Object.keys(ye.pool).join(", ")}.`);let l=await A0(i,n.address,a.type);if(!l.data[0])throw new Error(`Insufficient balance for ${a.name} Token`);let u=l.data[0].coinObjectId;if(l.data.length>=2){let f=1;for(;f<l.data.length;)s.mergeCoins(u,[l.data[f].coinObjectId]),f++}return Pm(s,a,s.object(u),o)}static fromData(e){return new I0(e)}},mT=class P0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let{suiClient:i,account:n}=e,{coinType:r,amount:o}=this.data,s=new O0.TransactionBlock;if(s.setGasBudget(ye.gasBudget),console.log("build",this.data),r==="sui"){let[f]=s.splitCoins(s.gas,[o]);return Dm(s,ye.pool.sui,f,o)}let a=ye.pool[r];if(!a)throw new Error(`${r} not support, please use ${Object.keys(ye.pool).join(", ")}.`);let l=await A0(i,n.address,a.type);if(!l.data[0])throw new Error(`Insufficient balance for ${a.name} Token`);let u=l.data[0].coinObjectId;if(l.data.length>=2){let f=1;for(;f<l.data.length;)s.mergeCoins(u,[l.data[f].coinObjectId]),f++}return Dm(s,a,s.object(u),o)}static fromData(e){return new P0(e)}},gT=class E0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(){let{coinType:e,amount:i}=this.data,n=new D0.TransactionBlock;console.log("build",this.data),n.setGasBudget(ye.gasBudget);let r=ye.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(ye.pool).join(", ")}.`);return lT(n,r,i)}static fromData(e){return new E0(e)}},_T=class{application="navi";async deserialize(t){let{transactionBlock:e}=t,i=new cT(e).decode();return{txType:v0.TransactionType.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case"EntryDeposit":n=pT.fromData(t.intentionData);break;case"EntryBorrow":n=hT.fromData(t.intentionData);break;case"EntryRepay":n=mT.fromData(t.intentionData);break;case"EntryWithdraw":n=gT.fromData(t.intentionData);break;case"ClaimReward":n=fT.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},bT="msafe-plain-tx",wT=nc.TransactionSubTypes.others.plain,yT=class{application;constructor(){this.application=bT}async deserialize(t){let{transactionBlock:e,suiClient:i}=t,n=await e.build({client:i});return{txType:nc.TransactionType.Other,txSubType:wT,intentionData:{content:(0,rc.toHEX)(n)}}}async build(t){let{suiClient:e,account:i}=t,n=M0.TransactionBlock.from((0,rc.fromHEX)(t.intentionData.content)),r=await e.devInspectTransactionBlock({transactionBlock:n,sender:i.address});if(r.effects.status.status!=="success")throw new Error(r.effects.status.error);return n}},vT=class{apps;constructor(t){this.apps=new Map(t.map(e=>[e.application,e]))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},oc="6601955b8b0024600a917079",B0="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",za="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",co="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",sc=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],N0=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],Vu=["seth","ssui","susdc","susdt","scetus","safsui","shasui","svsui"],kT=["sui"],Ga=["sui","usdc","usdt"],CT={eth:8,btc:8,usdc:6,usdt:6,sui:9,apt:8,sol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,seth:8,sbtc:8,susdc:6,susdt:6,ssui:9,sapt:8,ssol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9},F0={seth:"sui",ssui:"sui",susdc:"sui",susdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui"},TT={sui:["sui","sca"],usdc:["sui","sca"],usdt:["sui","sca"]},ST={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"},Ci={eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},Em={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},xT=class{constructor(t,e){this.txb=t,this._builder=e}_builder;decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();throw new Error("Unknown transaction type")}get coreId(){return{protocolPkg:this._builder.address.get("core.packages.protocol.id"),market:this._builder.address.get("core.market"),version:this._builder.address.get("core.version"),coinDecimalsRegistry:this._builder.address.get("core.coinDecimalsRegistry"),xOracle:this._builder.address.get("core.oracles.xOracle"),spoolPkg:this._builder.address.get("spool.id"),borrowIncentivePkg:this._builder.address.get("borrowIncentive.id"),veScaPkgId:this._builder.address.get("vesca.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation_entry`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${za}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}decodeMigrateAndClaim(){let t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),e=this.helperClaimBorrowReward[0].decodeSharedObjectId(2),i=this.helperClaimBorrowReward[0].decodeOwnedObjectId(3),n=this._builder.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:It.TransactionType.Other,type:"MigrateAndClaim",intentionData:{veScaKey:t,obligationKey:e,obligationId:i,rewardCoinName:n}}}decodeOpenObligation(){return{txType:It.TransactionType.Other,type:"OpenObligation",intentionData:{}}}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:It.TransactionType.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),i=new Gi(t,this.txb).getAmountInput().reduce((T,O)=>T+O,0),n=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,o=[],s=[],a=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(a=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,u=!1,f,b,v=[{condition:o,isOld:!0},{condition:s,isOld:!1},{condition:a,isOld:!1}];for(let T=0;T<v.length;T++)v[T].condition.length>1&&([b,f]=v[T].condition,l=!0,u=v[T].isOld);return{txType:It.TransactionType.Other,type:"RenewExpStakePeriod",intentionData:{amount:i,lockPeriodInDays:e,obligationId:f,obligationKey:b,veScaKey:n,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:u}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),i=[],n=[],r=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(n=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let o=!1,s=!1,a,l,u=[{condition:i,isOld:!0},{condition:n,isOld:!1},{condition:r,isOld:!1}];for(let f=0;f<u.length;f++)u[f].condition.length>1&&([l,a]=u[f].condition,o=!0,s=u[f].isOld);return{txType:It.TransactionType.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:a,obligationKey:l,veScaKey:e,isObligationLocked:o,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),i=new Gi(t,this.txb).getAmountInput().reduce((v,T)=>v+T,0),n=[],r=[],o,s=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(o=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let a=!1,l=!1,u,f,b=[{condition:n,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let v=0;v<b.length;v++)b[v].condition.length>1&&([f,u]=b[v].condition,a=!0,l=b[v].isOld);return{txType:It.TransactionType.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:i,veScaKey:o,lockPeriodInDays:e,obligationId:u,obligationKey:f,isOldBorrowIncentive:l,isObligationLocked:a}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):(t=this.helperStakeMoreSca.getNestedInputParam(4),console.log(t));let i=new Gi(t,this.txb).getAmountInput().reduce((v,T)=>v+T,0),n=[],r=[],o,s=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(o=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let a=!1,l=!1,u,f,b=[{condition:n,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let v=0;v<b.length;v++)b[v].condition.length>1&&([f,u]=b[v].condition,a=!0,l=b[v].isOld);return{txType:It.TransactionType.Other,type:"StakeSca",intentionData:{amount:i,lockPeriodInDays:e,obligationId:u,obligationKey:f,veScaKey:o,isObligationLocked:a,isOldBorrowIncentive:l}}}decodeSupplyLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((n,r)=>n+r,0);return{txType:It.TransactionType.Other,type:"SupplyLending",intentionData:{amount:i,coinName:t}}}decodeWithdrawLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((n,r)=>n+r,0);return{txType:It.TransactionType.Other,type:"WithdrawLending",intentionData:{amount:i,coinName:t}}}decodeDepositCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:It.TransactionType.Other,type:"DepositCollateral",intentionData:{amount:i,obligationId:n,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),i=this.helperWithdrawCollateral.decodeSharedObjectId(1),n=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:n,obligationId:i}}}decodeBorrow(){let t=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),i=this.helperBorrow.decodeSharedObjectId(1),n=this.helperBorrow.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:n,obligationId:i}}}decodeBorrowWithBoost(){let t=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),i=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:It.TransactionType.Other,type:"BorrowWithBoost",intentionData:{amount:i,coinName:t,obligationKey:r,obligationId:n,veScaKey:e}}}decodeRepay(){let t=this._builder.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n=this.helperRepay.decodeSharedObjectId(1);return{txType:It.TransactionType.Other,type:"Repay",intentionData:{amount:i,obligationId:n,coinName:t}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=this.helperStake.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((o,s)=>o+s,0),n=this.helperStake.typeArg(0),r=this._builder.utils.parseCoinNameFromType(n);return{txType:It.TransactionType.Other,type:"StakeSpool",intentionData:{amount:i,marketCoinName:r,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),i=this.helperUnstake.typeArg(0),n=this._builder.utils.parseCoinNameFromType(i);return{txType:It.TransactionType.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:n,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),i=new Gi(e,this.txb).getAmountInput().reduce((r,o)=>r+o,0),n;return this.isCreateStakeAccountTransaction()||(n=this.helperStake.decodeOwnedObjectId(1)),{txType:It.TransactionType.Other,type:"SupplyAndStakeLending",intentionData:{amount:i,coinName:t,stakeAccountId:n}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(r=>{let o=r.decodeOwnedObjectId(1),s=r.decodeInputU64(2);t.push({id:o,coin:s})});let e=this._builder.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),i=this.helperRedeems.find(r=>r.isHaveNestedInput(2)),n;return i&&(n=new Gi(i.getNestedInputParam(2),this.txb).getAmountInput().reduce((r,o)=>r+o,0)),{txType:It.TransactionType.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],i=[];return this.helperClaimLendingReward.forEach(n=>{let r=n.decodeOwnedObjectId(2),o=n.typeArg(0),s=this._builder.utils.parseCoinNameFromType(o);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(n=>{let r=n.decodeSharedObjectId(3),o=n.decodeOwnedObjectId(4),s=this._builder.utils.parseCoinNameFromType(n.typeArg(0));e.push({obligationId:o,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(n=>{let r=n.decodeSharedObjectId(2),o=n.decodeOwnedObjectId(3),s=this._builder.utils.parseCoinNameFromType(n.typeArg(0));i.push({obligationId:o,obligationKey:r,rewardCoinName:s})}),{txType:It.TransactionType.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:i}}}get helperClaimLendingReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new He(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new He(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new He(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new He(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new He(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${za}::user::unstake`));return new He(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new He(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new He(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${za}::user::redeem_rewards`)).map(t=>new He(t,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new He(t,this.txb)}get helperUnstakes(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new He(t,this.txb))}get helperRedeems(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new He(t,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new He(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new He(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new He(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new He(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new He(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new He(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new He(t,this.txb)}},Gi=class{constructor(t,e){this.splitCoin=t,this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(He.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let i=t.value.Pure;return tc.bcs.de(e,new Uint8Array(i))}return t.value}},He=class Ha{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Ha.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Ha.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Nn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Ha.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}getNestedInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="NestedResult")throw new Error("not input type");return this.txb.blockData.transactions[i.index]}isHaveNestedInput(e){return this.moveCall.arguments[e].kind==="NestedResult"}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return tc.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Nn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Nn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Nn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Nn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return tc.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Nn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},AT={mainnet:{core:{version:"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",market:"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9",coins:{cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},apt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},sol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},btc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},eth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},usdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},usdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}}},oracles:{xOracle:"0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",registryCap:"0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0x38fe42a5a69f7eb3635404389e8003be9457b1a5c873f133184648c7e9bd47b7",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f",upgradeCap:"0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"},supra:{id:"",upgradeCap:""},pyth:{id:"0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",upgradeCap:"0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0xec1ac7f4d01c5bf178ff4e62e523e7df7721453d81d4904a42a0ffc2686c843d",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{seth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},susdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},version:"",versionCap:""},borrowIncentive:{id:"0x874f1d43d81e2256e120bab2485938fe07ba0cc21d87129a99a1db11cacb382d",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",query:"0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",incentivePools:"0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",incentiveAccounts:"0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",config:"0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7",version:"",versionCap:""},vesca:{id:"0xcfe2d87aa5712b67cad2732edb6a2201bfdf592377e5c0968b7cb02099bd8e21",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",table:"0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",treasury:"0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",config:"0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"}}},ac=class{_auth;_id;_network;_currentAddresses;_addressesMap;constructor(t){let{id:e,auth:i,network:n}=t;i&&(this._auth=i),this._id=e,this._network=n||"mainnet",this._addressesMap=new Map}getId(){return this._id||void 0}get(t){if(this._currentAddresses)return t.split(".").reduce((e,i)=>typeof e=="object"?e[i]:e,this._currentAddresses)||void 0}set(t,e){if(this._currentAddresses){let i=t.split(".");i.reduce((n,r,o)=>{if(o===i.length-1){let s=n;s[r]=e}return n[r]},this._currentAddresses)}return this._currentAddresses}switchCurrentAddresses(t){return this._addressesMap.has(t)&&(this._currentAddresses=this._addressesMap.get(t),this._network=t),this._currentAddresses}getAddresses(t){return t?this._addressesMap.get(t):this._currentAddresses??this._addressesMap.get(this._network)}setAddresses(t,e){let i=e||this._network;i===this._network&&(this._currentAddresses=t),this._addressesMap.set(i,t)}getAllAddresses(){return Object.fromEntries(this._addressesMap)}read(){return Object.entries(AT).forEach(([t,e])=>{["localnet","devnet","testnet","mainnet"].includes(t)&&(t===this._network&&(this._currentAddresses=e),this._addressesMap.set(t,e))}),this.getAllAddresses()}},Ti=t=>{let{sender:e}=t.blockData;if(!e)throw new Error("Sender is required");return e},IT=(t,e,i,n)=>{let r=!n,o=!r&&n*1e3<=new Date().getTime();if(r||o)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${o?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error("Maximum lock period is ~4 years (1460 days)")}else throw new Error(`SCA amount and lock period is required for ${o?"renewing expired veSca":"initial lock"}`);else{if(ps(n),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(i&&n&&i-n>126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")}},OT=(t,e,i)=>{if(ps(i),t<=0)throw new Error("Lock period must be greater than 0");if(i&&i*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(i&&e-(i??0)>126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")},PT=(t,e)=>{if(ps(e),t<1e9)throw new Error("Minimum top up amount is 1 SCA");if(e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},DT=(t,e,i)=>{if(ps(i),t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error("Maximum lock period is ~4 years (1459 days)")},ps=t=>{if(t===void 0)throw new Error("veSca not found")},ET=t=>({pointType:(0,ms.normalizeStructTag)(t.point_type.name),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),MT=t=>({poolType:(0,ms.normalizeStructTag)(t.pool_type.name),debtAmount:Number(t.debt_amount),pointList:t.points_list.reduce((e,i)=>{let n=ET(i),r=(0,ms.parseStructTag)(n.pointType).name.toLowerCase();return e[r]=n,e},{})}),Mm=t=>{let e=t.slice(1).toLowerCase();return t.charAt(0).toLowerCase()==="s"&&[...new Set([...sc,...N0,...kT])].includes(e)},jm=t=>{switch(t){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return t.toUpperCase()}},jT=t=>{let e=new Date(t*1e3),i=new Date(t*1e3);i.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&i.setUTCDate(i.getUTCDate()+1);let n=new Date().getTime();return i.getTime()-n>126144e3*1e3&&i.setUTCDate(i.getUTCDate()-1),Math.floor(i.getTime()/1e3)},Xu=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this._address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.isTestnet=t.networkType?t.networkType==="testnet":!1,this.client=t.client}init(t=!1,e){t||!this._address.getAddresses()||!e?.getAddresses()?this._address.read():this._address=e}parseSymbol(t){if(Mm(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+jm(e)}return jm(t)}parseCoinType(t){let e=Mm(t)?this.parseCoinName(t):t,i=this._address.get(`core.coins.${e}.id`)||ST[t]||void 0;if(!i)throw Error(`Coin ${t} is not supported`);if(t==="sui")return(0,fs.normalizeStructTag)(`${i}::sui::SUI`);let n=[this._address.get("core.coins.usdc.id")??Ci.usdc,this._address.get("core.coins.usdt.id")??Ci.usdt,this._address.get("core.coins.eth.id")??Ci.eth,this._address.get("core.coins.btc.id")??Ci.btc,this._address.get("core.coins.sol.id")??Ci.sol,this._address.get("core.coins.apt.id")??Ci.apt],r=[this._address.get("core.coins.vsui.id")??Em.vsui];return n.includes(i)?`${i}::coin::COIN`:r.includes(i)?`${i}::cert::CERT`:`${i}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||B0,i=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${i}>`}parseCoinNameFromType(t){let e=(0,fs.normalizeStructTag)(t),i=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,n=t.match(i),r=t.includes("reserve::MarketCoin");e=n?.[1]||t;let o={[`${this._address.get("core.coins.usdc.id")??Ci.usdc}::coin::COIN`]:"usdc",[`${this._address.get("core.coins.usdt.id")??Ci.usdt}::coin::COIN`]:"usdt",[`${this._address.get("core.coins.eth.id")??Ci.eth}::coin::COIN`]:"eth",[`${this._address.get("core.coins.btc.id")??Ci.btc}::coin::COIN`]:"btc",[`${this._address.get("core.coins.sol.id")??Ci.sol}::coin::COIN`]:"sol",[`${this._address.get("core.coins.apt.id")??Ci.apt}::coin::COIN`]:"apt"},s={[`${this._address.get("core.coins.vsui.id")??Em.vsui}::cert::CERT`]:"vsui"},a=o[e]||s[e]||e.split("::")[2].toLowerCase();return r?this.parseMarketCoinName(a):a}parseCoinName(t){return t.slice(1)}parseMarketCoinName(t){return`s${t}`}getSpoolRewardCoinName=t=>F0[t];getBorrowIncentiveRewardCoinName=t=>TT[t];getCoinDecimal(t){return CT[t]}getCoinWrappedType(t){return t==="usdc"||t==="usdt"||t==="eth"||t==="btc"||t==="apt"||t==="sol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}async selectCoinIds(t,e=fs.SUI_TYPE_ARG,i){let n=i,r=[],o=0,s=!0,a=null;for(;s&&o<t;){let l=await this.client.getCoins({owner:n,coinType:e,cursor:a});l.data.sort((u,f)=>parseInt(f.balance,10)-parseInt(u.balance,10));for(let u=0;u<l.data.length&&(r.push({objectId:l.data[u].coinObjectId,digest:l.data[u].digest,version:l.data[u].version}),o+=parseInt(l.data[u].balance,10),!(o>=t));u++);a=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r.map(l=>l.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,i){let n=e.map(s=>t.object(s)),r=n[0];n.length>1&&t.mergeCoins(r,n.slice(1));let[o]=t.splitCoins(r,[t.pure(i)]);return[o,r]}getUnlockAt(t,e){let i=Math.floor(new Date().getTime()/1e3),n=e?Math.max(e-i,0):0,r=0;if(n===0){let o=(t??1)*86400;r=Math.min(i+o,i+126144e3)}else{let o=Math.min(t?t*86400+n:n,126144e3);r=i+o}return jT(r)}},Ju=async(t,e)=>{let i=e,n=t.address.get("core.object")||B0,r=[],o=!1,s=null;do{let f=await t.client.getOwnedObjects({owner:i,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:s});r.push(...f.data),f.hasNextPage&&f.nextCursor?(o=!0,s=f.nextCursor):o=!1}while(o);let a=r.map(f=>f?.data?.objectId).filter(f=>f!==void 0),l=await t.client.multiGetObjects({ids:a,options:{showContent:!0,showType:!0}}),u=[];for(let f=0;f<l.length;f++){let b=l[f].data.objectId,{content:v}=l[f].data;if(v&&"fields"in v){let T=v.fields,O=String(T.ownership.fields.of),P=await U0(t,O);u.push({id:O,keyId:b,locked:P})}}return u},U0=async(t,e)=>{let i=await t.client.getObject({id:e,options:{showContent:!0}}),n=!1;return i.data&&i?.data?.content?.dataType==="moveObject"&&"lock_key"in i.data.content.fields&&(n=!!i.data.content.fields.lock_key),n},BT=async(t,e,i)=>{let n=i||[...sc],r=e,o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:r,filter:{MatchAny:n.map(f=>({StructType:`0x2::coin::Coin<${t.utils.parseCoinType(f)}>`}))},options:{showType:!0,showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l={};return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{let f=u.type;if(u.content&&"fields"in u.content){let b=u.content.fields,v=t.utils.parseCoinNameFromType(f);v&&(l[v]=vi(l[v]??0).plus(b.balance).toNumber())}}),l},NT=async(t,e,i)=>{let n=i,r=t.utils.parseCoinType(e),o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${r}>`},options:{showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l=0;return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{if(u.content&&"fields"in u.content){let f=u.content.fields;l=vi(l).plus(f.balance).toNumber()}}),l},FT=async(t,e,i)=>{let n=i||[...sc].map(u=>t.utils.parseMarketCoinName(u)),r=e,o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:r,filter:{MatchAny:n.map(f=>({StructType:`0x2::coin::Coin<${t.utils.parseMarketCoinType(f)}>`}))},options:{showType:!0,showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l={};return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{let f=u.type;if(u.content&&"fields"in u.content){let b=u.content.fields,v=t.utils.parseCoinNameFromType(f);v&&(l[v]=vi(l[v]??0).plus(b.balance).toNumber())}}),l},RT=async(t,e,i)=>{let n=i,r=t.utils.parseMarketCoinType(e),o=[],s=!1,a=null;do{let u=await t.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${r}>`},options:{showContent:!0},cursor:a});o.push(...u.data),u.hasNextPage&&u.nextCursor?(s=!0,a=u.nextCursor):s=!1}while(s);let l=0;return o.map(u=>u.data).filter(u=>u!=null).forEach(u=>{if(u.content&&"fields"in u.content){let f=u.content.fields;l=vi(l).plus(f.balance).toNumber()}}),l},qT=async(t,e)=>{let i=`${t.address.get("core.packages.query.id")}::obligation_query::obligation_data`,n=new $0.TransactionBlock;return n.moveCall({target:i,arguments:[n.object(e)]}),(await t.client.devInspectTransactionBlock({transactionBlock:n,sender:t.walletAddress})).events[0].parsedJson},Qu=async(t,e)=>{let i=e,n=t.address.get("spool.object"),r=`${n}::spool_account::SpoolAccount`,o=[],s=!1,a=null;do{let b=await t.client.getOwnedObjects({owner:i,filter:{StructType:r},options:{showContent:!0,showType:!0},cursor:a});o.push(...b.data),b.hasNextPage&&b.nextCursor?(s=!0,a=b.nextCursor):s=!1}while(s);let l={seth:[],ssui:[],susdc:[],susdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},u=Object.keys(l).reduce((b,v)=>{let T=t.utils.parseCoinName(v),O=t.utils.parseMarketCoinType(T),P={...b},j=`${n}::spool_account::SpoolAccount<${O}>`;return P[v]=j,P},{}),f=o.map(b=>b?.data?.objectId).filter(b=>b!==void 0);return(await t.client.multiGetObjects({ids:f,options:{showContent:!0,showType:!0}})).forEach(b=>{let v=b.data.objectId,T=b.data.type;if(b.data.content&&"fields"in b.data.content){let O=b.data.content.fields,P=String(O.spool_id),j=String(O.stake_type.fields.name),B=Number(O.stakes),D=Number(O.index),q=Number(O.points),K=Number(O.total_points);(0,Be.normalizeStructTag)(T)===u.seth?l.seth.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.ssui?l.ssui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.susdc?l.susdc.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.susdt?l.susdt.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.scetus?l.scetus.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.safsui?l.safsui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.shasui?l.shasui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K}):(0,Be.normalizeStructTag)(T)===u.svsui&&l.svsui.push({id:v,type:(0,Be.normalizeStructTag)(T),stakePoolId:P,stakeType:(0,Be.normalizeStructTag)(j),staked:B,index:D,points:q,totalPoints:K})}}),l},Bm=async(t,e)=>{let i=t.address.get(`spool.pools.${e}.id`),n,r=await t.client.getObject({id:i,options:{showContent:!0,showType:!0}});if(r.data){let o=r.data,s=o.objectId,a=o.type;if(o.content&&"fields"in o.content){let l=o.content.fields,u=Number(l.max_distributed_point),f=Number(l.distributed_point),b=Number(l.distributed_point_per_period),v=Number(l.point_distribution_time),T=Number(l.max_stakes),O=String(l.stake_type.fields.name),P=Number(l.stakes),j=Number(l.index),B=Number(l.created_at),D=Number(l.last_update);n={id:s,type:(0,Be.normalizeStructTag)(a),maxPoint:u,distributedPoint:f,pointPerPeriod:b,period:v,maxStake:T,stakeType:(0,Be.normalizeStructTag)(O),totalStaked:P,index:j,createdAt:B,lastUpdate:D}}}return n},Nm=async(t,e)=>{let i=t.address.get(`spool.pools.${e}.rewardPoolId`),n,r=await t.client.getObject({id:i,options:{showContent:!0,showType:!0}});if(r.data){let o=r.data,s=o.objectId,a=o.type;if(o.content&&"fields"in o.content){let l=o.content.fields,u=String(l.spool_id),f=Number(l.exchange_rate_numerator),b=Number(l.exchange_rate_denominator),v=Number(l.rewards),T=Number(l.claimed_rewards);n={id:s,type:(0,Be.normalizeStructTag)(a),stakePoolId:u,ratioNumerator:f,ratioDenominator:b,rewards:v,claimedRewards:T}}}return n},LT=async(t,e,i,n)=>{let r=n||[...Ga],o=t.address.get("borrowIncentive.query"),s=t.address.get("borrowIncentive.incentiveAccounts"),a=`${o}::incentive_account_query::incentive_account_data`,l=new K0.TransactionBlock;l.moveCall({target:a,arguments:[l.object(s),l.object(e)]});let u=(await t.client.devInspectTransactionBlock({transactionBlock:l,sender:i})).events[0].parsedJson,f={};return u.pool_records.forEach(b=>{let v=MT(b),{poolType:T}=v,O=t.utils.parseCoinNameFromType(T);r.length>=1&&r.includes(O)&&(f[O]=v)},{}),f},$T=async(t,e)=>{let i=t.address.get(`core.coins.${e}.oracle.pyth.feedObject`),n=await t.client.getObject({id:i,options:{showContent:!0}});if(n.data){let r=n.data;if(r.content&&"fields"in r.content){let o=r.content.fields,s=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),a=Number(o.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),l=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),u=Number(o.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return l*10**((a?-1:1)*s)*(u?-1:1)}}return 0},V0=async(t,e)=>{let i=e,n=`${t.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],o=!1,s=null;do{let a=await t.client.getOwnedObjects({owner:i,filter:{StructType:n},cursor:s});r.push(...a.data),a.hasNextPage&&a.nextCursor?(o=!0,s=a.nextCursor):o=!1}while(o);return r.map(a=>a.data).filter(a=>!!a)},UT=async(t,e)=>{let i=(await V0(t,e)).map(r=>r.objectId),n=[];for(let r=0;r<i.length;r++){let o=await W0(t,i[r]);o&&n.push(o)}return n},W0=async(t,e,i)=>{let n=t.address.get("vesca.tableId"),r=e||(await V0(t,i))[0].objectId,o,s=(await t.client.getDynamicFieldObject({parentId:n,name:{type:"0x2::object::ID",value:r}})).data;if(s&&s.content&&s.content.dataType==="moveObject"&&"fields"in s.content){let a=s.content.fields.value.fields;o={id:s.objectId,keyId:r,lockedScaAmount:vi(a.locked_sca_amount).toNumber(),lockedScaCoin:vi(a.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:vi(a.unlock_at).toNumber()}}return o},z0=class{params;address;client;utils;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.client=t.client,this.utils=e?.utils??new Xu(this.params,{address:this.address}),this.walletAddress=t.walletAddress}init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e}async getObligations(t){return Ju(this,t)}async getCoinAmounts(t,e){return BT(this,t,e)}async getCoinAmount(t,e){return NT(this,t,e)}async getMarketCoinAmounts(t,e){return FT(this,t,e)}async getMarketCoinAmount(t,e){return RT(this,t,e)}async getPriceFromPyth(t){return $T(this,t)}async getAllStakeAccounts(t){return Qu(this,t)}async getStakeAccounts(t,e){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t){let e=t??[...Vu],i={};for(let n=0;n<e.length;n++){let r=e[n],o=await Bm(this,r);o&&(i[r]=o)}return i}async getStakePool(t){return Bm(this,t)}async getStakeRewardPools(t){let e=t??[...Vu],i={};for(let n=0;n<e.length;n++){let r=await Nm(this,e[n]);r&&(i[e[n]]=r)}return i}async getStakeRewardPool(t){return Nm(this,t)}async getBorrowIncentiveAccounts(t,e,i){return LT(this,t,e||this.walletAddress,i)}async getObligationCoinNames(t){let e=await qT(this,t),i=e.collaterals.map(r=>`0x${r.type.name}`),n=e.debts.map(r=>`0x${r.type.name}`);return[...new Set([...i,...n])].map(r=>this.utils.parseCoinNameFromType(r))}},G0=class{params;isTestnet;address;query;utils;client;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.query=e?.query??new z0(t,{address:this.address}),this.utils=e?.utils??new Xu(this.params,{address:this.address,query:this.query}),this.client=t.client,this.walletAddress=(0,L0.normalizeSuiAddress)(t.walletAddress),this.isTestnet=t.networkType?t.networkType==="testnet":!1}async init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e,this.query.init(t,this.address),this.utils.init(t,this.address)}createTxBlock(t){return new q0.TransactionBlock(t)}async selectCoin(t,e,i,n){let r=this.utils.parseCoinType(e),o=await this.utils.selectCoinIds(i,r,n),[s,a]=this.utils.takeAmountFromCoins(t,o,i);return{takeCoin:s,leftCoin:a}}async selectMarketCoin(t,e,i,n){let r=this.utils.parseMarketCoinType(e),o=await this.utils.selectCoinIds(i,r,n),[s,a]=this.utils.takeAmountFromCoins(t,o,i);return{takeCoin:s,leftCoin:a}}},oo=async(...t)=>{let[e,i,n]=t;if(t.length===3&&n&&typeof n=="string")return await W0(e.query,n)||void 0;let r=Ti(i),o=await UT(e.query,r);if(o.length!==0)return o[0]},KT=async(t,e)=>{let i=t.address.get("borrowIncentive.object"),n=t.address.get("borrowIncentive.incentivePools"),r=t.address.get("vesca.id"),{client:o}=t,s=await o.getObject({id:n,options:{showContent:!0}});if(s.data?.content?.dataType!=="moveObject")return!1;let a=s.data.content.fields.ve_sca_bind.fields.id.id,l=`${i}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,u=await o.getDynamicFieldObject({parentId:a,name:{type:l,value:e}});return u.data?.content?.dataType!=="moveObject"?!1:u.data.content.fields.value.fields.id},Du=async(...t)=>{let[e,i,n,r]=t;if(t.length===4&&n&&r&&typeof n=="string"){let a=await U0(e.query,n);return{obligationId:n,obligationKey:r,obligationLocked:a}}let o=Ti(i),s=await Ju(e.query,o);if(s.length===0)throw new Error(`No obligation found for sender ${o}`);return{obligationId:s[0].id,obligationKey:s[0].keyId,obligationLocked:s[0].locked}},VT=({builder:t,txBlock:e})=>{let i={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore"),config:t.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},r={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")};return{stakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::stake`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(i.obligationAccessStore),e.object(un.SUI_CLOCK_OBJECT_ID)]})},stakeObligationWithVesca:(o,s,a)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::stake_with_ve_sca`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(i.obligationAccessStore),e.object(r.config),e.object(r.treasury),e.object(r.table),e.object(a),e.object(un.SUI_CLOCK_OBJECT_ID)]})},unstakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::unstake`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)]})},oldUnstakeObligation:(o,s)=>{e.moveCall({target:`${i.borrowIncentivePkg}::user::unstake`,arguments:[e.object(n.incentivePools),e.object(n.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[un.SUI_TYPE_ARG]})},claimBorrowIncentive:(o,s,a)=>{let l=t.utils.parseCoinType(a);return e.moveCall({target:`${i.borrowIncentivePkg}::user::redeem_rewards`,arguments:[e.object(i.config),e.object(i.incentivePools),e.object(i.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[l]})},oldClaimBorrowIncentive(o,s,a){let l=t.utils.parseCoinType(a);return e.moveCall({target:`${n.id}::user::redeem_rewards`,arguments:[e.object(n.incentivePools),e.object(n.incentiveAccounts),e.object(s),e.object(o),e.object(un.SUI_CLOCK_OBJECT_ID)],typeArguments:[l]})}}},Fi=({builder:t,txBlock:e})=>{let i=VT({builder:t,txBlock:e});return{normalMethod:i,stakeObligationQuick:async(n,r)=>{let{obligationId:o,obligationKey:s,obligationLocked:a}=await Du(t,e,n,r),l=!!e.blockData.transactions.find(u=>u.kind==="MoveCall"&&u.target===`${t.address.get("borrowIncentive.id")}::user::unstake`);(!a||l)&&i.stakeObligation(o,s)},unstakeObligationQuick:async(n,r)=>{let{obligationId:o,obligationKey:s,obligationLocked:a}=await Du(t,e,n,r);a&&i.unstakeObligation(o,s)},stakeObligationWithVeScaQuick:async(n,r,o)=>{let{obligationId:s,obligationKey:a,obligationLocked:l}=await Du(t,e,n,r),u=!!e.blockData.transactions.find(f=>f.kind==="MoveCall"&&(f.target===`${za}::user::unstake`||f.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!l||u){let f=await oo(t,e,o);if(f){let b=await KT(t,f.keyId);!b||b===s?i.stakeObligationWithVesca(s,a,f.keyId):i.stakeObligation(s,a)}else i.stakeObligation(s,a)}},claimBorrowIncentiveQuick:(n,r,o)=>i.claimBorrowIncentive(r,o,n)}},WT={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]},Eu=16*1024,zT=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,i){this.provider=t,this.pythStateId=e,this.wormholeStateId=i,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(i=>{if(i.data?.content?.dataType==="moveObject")return i.data.content.fields;throw console.log(i.data?.content),new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let i=await this.getWormholePackageId(),n=[];return t.forEach(r=>{let[o]=e.moveCall({target:`${i}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Za.bcs.ser("vector<u8>",Array.from(r),{maxSize:Eu}).toBytes()),e.object(as.SUI_CLOCK_OBJECT_ID)]});n.push(o)}),n}async updatePriceFeeds(t,e,i){let n=await this.getPythPackageId(),r;if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let o=this.extractVaaBytesFromAccumulatorMessage(e[0]),s=await this.verifyVaas([o],t);[r]=t.moveCall({target:`${n}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Za.bcs.ser("vector<u8>",Array.from(e[0]),{maxSize:Eu}).toBytes()),s[0],t.object(as.SUI_CLOCK_OBJECT_ID)]});let a=[],l=await this.getBaseUpdateFee(),u=t.splitCoins(t.gas,i.map(()=>t.pure(l))),f=0;for(let b=0;b<i.length;b++){let v=await this.getPriceFeedObjectId(i[b]);if(!v)throw new Error(`Price feed ${i[0]} not found, please create it first`);a.push(v),[r]=t.moveCall({target:`${n}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(v),u[f],t.object(as.SUI_CLOCK_OBJECT_ID)]}),f++}return t.moveCall({target:`${n}::hot_potato_vector::destroy`,arguments:[r],typeArguments:[`${n}::price_info::PriceInfo`]}),a}async createPriceFeed(t,e){let i=await this.getPythPackageId();if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let n=this.extractVaaBytesFromAccumulatorMessage(e[0]),r=await this.verifyVaas([n],t);t.moveCall({target:`${i}::pyth::create_price_feeds_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Za.bcs.ser("vector<u8>",Array.from(e[0]),{maxSize:Eu}).toBytes()),r[0],t.object(as.SUI_CLOCK_OBJECT_ID)]})}async getWormholePackageId(){return this.wormholePackageId||(this.wormholePackageId=await this.getPackageId(this.wormholeStateId)),this.wormholePackageId}async getPythPackageId(){return this.pythPackageId||(this.pythPackageId=await this.getPackageId(this.pythStateId)),this.pythPackageId}async getPriceFeedObjectId(t){let e=t.replace("0x","");if(!this.priceFeedObjectIdCache.has(e)){let{id:i,fieldType:n}=await this.getPriceTableInfo(),r=await this.provider.getDynamicFieldObject({parentId:i,name:{type:`${n}::price_identifier::PriceIdentifier`,value:{bytes:Array.from(Buffer.from(e,"hex"))}}});if(!r.data||!r.data.content)return;if(r.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");this.priceFeedObjectIdCache.set(e,r.data.content.fields.value)}return this.priceFeedObjectIdCache.get(e)}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let t=await this.provider.getDynamicFieldObject({parentId:this.pythStateId,name:{type:"vector<u8>",value:"price_info"}});if(!t.data||!t.data.type)throw new Error("Price Table not found, contract may not be initialized");let e=t.data.type.replace("0x2::table::Table<","");e=e.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:t.data.objectId,fieldType:e}}return this.priceTableInfo}extractVaaBytesFromAccumulatorMessage(t){let e=7+t.readUint8(6)+1,i=t.readUint16BE(e),n=e+2;return t.subarray(n,n+i)}},GT=async(t,e)=>(await H0.default.get(`${t}/api/latest_vaas`,{params:{ids:e}})).data.map(i=>Buffer.from(i,"base64")),Mu=async(t,e,i)=>{let n=i??[...new Set([...sc,...N0])],r=t.isTestnet?["pyth"]:["pyth"];if(r.includes("pyth")){let s=new zT(t.client,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState")),a=n.map(u=>t.address.get(`core.coins.${u}.oracle.pyth.feed`)),l=t.params.pythEndpoints??WT[t.isTestnet?"testnet":"mainnet"];try{let u=await GT(l[0],a);await s.updatePriceFeeds(e,u,a)}catch(u){console.warn(`Failed to update price feeds with endpoint ${l[0]}: ${u}`)}}let o=[...new Set(n)];for(let s=0;s<o.length;s++)await HT(t,e,o[s],r)},HT=async(t,e,i,n)=>{let r=t.utils.parseCoinType(i);ZT(e,n,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${i}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${i}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),r)},ZT=(t,e,i,n,r,o,s,a,l,u,f,b,v,T,O)=>{let P=XT(t,i,n,O);return e.includes("pyth")&&eS(t,r,P,s,a,o,O),e.includes("switchboard")&&YT(t,l,P,f,u,O),e.includes("supra")&&QT(t,b,P,T,v,O),JT(t,i,n,P,O),t},XT=(t,e,i,n)=>{let r=typeof i=="string"?t.object(i):i,o=`${e}::x_oracle::price_update_request`,s=[n];return t.moveCall({target:o,arguments:[r],typeArguments:s})},JT=(t,e,i,n,r)=>{let o=`${e}::x_oracle::confirm_price_update_request`,s=[r],a=typeof i=="string"?t.object(i):i;return t.moveCall({target:o,arguments:[a,n,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:s}),t},QT=(t,e,i,n,r,o)=>{let s=typeof n=="string"?t.object(n):n,a=typeof r=="string"?t.object(r):r;t.moveCall({target:`${e}::rule::set_price`,arguments:[i,s,a,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},YT=(t,e,i,n,r,o)=>{let s=typeof n=="string"?t.object(n):n,a=typeof r=="string"?t.object(r):r;t.moveCall({target:`${e}::rule::set_price`,arguments:[i,s,a,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},eS=(t,e,i,n,r,o,s)=>{let a=typeof i=="string"?t.object(i):i,l=typeof n=="string"?t.object(n):n,u=typeof r=="string"?t.object(r):r,f=typeof o=="string"?t.object(o):o;t.moveCall({target:`${e}::rule::set_price`,arguments:[a,l,u,f,t.object(gs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},Ua=async(...t)=>{let[e,i,n,r]=t;if(t.length===3&&n)return{obligationId:n};if(t.length===4&&n&&r)return{obligationId:n,obligationKey:r};let o=Ti(e),s=await Ju(i.query,o);if(s.length===0)throw new Error(`No obligation found for sender ${o}`);return{obligationId:s[0].id,obligationKey:s[0].keyId}},tS=({builder:t,txBlock:e})=>{let i={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")};return{openObligation:()=>e.moveCall({target:`${i.protocolPkg}::open_obligation::open_obligation`,arguments:[e.pure(i.version)]}),returnObligation:(n,r)=>e.moveCall({target:`${i.protocolPkg}::open_obligation::return_obligation`,arguments:[e.object(i.version),e.object(n),e.object(r)]}),openObligationEntry:()=>e.moveCall({target:`${i.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[e.object(i.version)]}),addCollateral:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[e.object(i.version),e.object(n),e.object(i.market),typeof r!="string"?r:e.pure(r)],typeArguments:[s]})},takeCollateral:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},deposit:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::mint::mint`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},depositEntry:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::mint::mint_entry`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},withdraw:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::redeem::redeem`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},withdrawEntry:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::redeem::redeem_entry`,arguments:[e.object(i.version),e.object(i.market),typeof n!="string"?n:e.pure(n),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[o]})},borrow:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::borrow::borrow`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},borrowEntry:(n,r,o,s)=>{let a=t.utils.parseCoinType(s);return e.moveCall({target:`${i.protocolPkg}::borrow::borrow_entry`,arguments:[e.object(i.version),e.object(n),e.object(r),e.object(i.market),e.object(i.coinDecimalsRegistry),e.pure(o),e.object(i.xOracle),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[a]})},repay:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::repay::repay`,arguments:[e.object(i.version),e.object(n),e.object(i.market),typeof r!="string"?r:e.pure(r),e.object(cn.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},borrowFlashLoan:(n,r)=>{let o=t.utils.parseCoinType(r);return e.moveCall({target:`${i.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[e.object(i.version),e.object(i.market),e.pure(n)],typeArguments:[o]})},repayFlashLoan:(n,r,o)=>{let s=t.utils.parseCoinType(o);return e.moveCall({target:`${i.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[e.object(i.version),e.object(i.market),e.pure(n),e.object(r)],typeArguments:[s]})}}},Hi=({builder:t,txBlock:e})=>{let i=tS({builder:t,txBlock:e});return{normalMethod:i,addCollateralQuick:async(n,r,o)=>{let s=Ti(e),{obligationId:a}=await Ua(e,t,o);if(r==="sui"){let[l]=e.splitCoins(e.gas,[n]);i.addCollateral(a,l,r)}else{let{leftCoin:l,takeCoin:u}=await t.selectCoin(e,r,n,s);i.addCollateral(a,u,r),e.transferObjects([l],s)}},takeCollateralQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o,s),l=await t.query.getObligationCoinNames(a.obligationId);return await Mu(t,e,l),i.takeCollateral(a.obligationId,a.obligationKey,n,r)},depositQuick:async(n,r,o)=>{if(r==="sui"){let[l]=e.splitCoins(e.gas,[n]);return i.deposit(l,r)}let{leftCoin:s,takeCoin:a}=await t.selectCoin(e,r,n,o);return e.transferObjects([s],o),i.deposit(a,r)},withdrawQuick:async(n,r)=>{let o=Ti(e),s=t.utils.parseMarketCoinName(r),{leftCoin:a,takeCoin:l}=await t.selectMarketCoin(e,s,n,o);return e.transferObjects([a],o),i.withdraw(l,r)},borrowQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o,s),l=[...await t.query.getObligationCoinNames(a.obligationId),r];return await Mu(t,e,l),i.borrow(a.obligationId,a.obligationKey,n,r)},repayQuick:async(n,r,o,s)=>{let a=await Ua(e,t,o);if(r==="sui"){let[f]=e.splitCoins(e.gas,[n]);return i.repay(a.obligationId,f,r)}let{leftCoin:l,takeCoin:u}=await t.selectCoin(e,r,n,s);return e.transferObjects([l],s),i.repay(a.obligationId,u,r)},updateAssetPricesQuick:async n=>Mu(t,e,n)}},Fm=async(...t)=>{let[e,i,n,r]=t;if(t.length===4&&r)return[r];let o=Ti(i),s=await Qu(e.query,o);if(s[n].length===0)throw new Error(`No stake account id found for sender ${o}`);return s[n].map(a=>a.id)},iS=async(...t)=>{let[e,i,n,r]=t,o=Ti(i),s=await Qu(e.query,o);if(s[n].length===0)throw new Error(`No stake account found for sender ${o}`);return r?s[n].filter(a=>a.id===r):s[n]},nS=({builder:t,txBlock:e})=>{let i={spoolPkg:t.address.get("spool.id")};return{createStakeAccount:n=>{let r=t.utils.parseMarketCoinType(n),o=t.address.get(`spool.pools.${n}.id`);return e.moveCall({target:`${i.spoolPkg}::user::new_spool_account`,arguments:[e.object(o),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[r]})},stake:(n,r,o)=>{let s=t.utils.parseMarketCoinType(o),a=t.address.get(`spool.pools.${o}.id`);e.moveCall({target:`${i.spoolPkg}::user::stake`,arguments:[e.object(a),e.object(n),typeof r=="string"?e.pure(r):r,e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},unstake:(n,r,o)=>{let s=t.utils.parseMarketCoinType(o),a=t.address.get(`spool.pools.${o}.id`);return e.moveCall({target:`${i.spoolPkg}::user::unstake`,arguments:[e.object(a),e.object(n),e.pure(r),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[s]})},claim:(n,r)=>{let o=t.address.get(`spool.pools.${r}.id`),s=t.address.get(`spool.pools.${r}.rewardPoolId`),a=t.utils.parseMarketCoinType(r),l=F0[r],u=t.utils.parseCoinType(l);return e.moveCall({target:`${i.spoolPkg}::user::redeem_rewards`,arguments:[e.object(o),e.object(s),e.object(n),e.object(cs.SUI_CLOCK_OBJECT_ID)],typeArguments:[a,u]})}}},eo=({builder:t,txBlock:e})=>{let i=nS({builder:t,txBlock:e});return{normalMethod:i,stakeQuick:async(n,r,o)=>{let s=Ti(e),a=await Fm(t,e,r,o),l=t.utils.parseMarketCoinType(r);if(typeof n=="number"){let u=await t.utils.selectCoinIds(n,l,s),[f,b]=t.utils.takeAmountFromCoins(e,u,n);i.stake(a[0],f,r),e.transferObjects([b],s)}else i.stake(a[0],n,r)},unstakeQuick:async(n,r,o)=>{let s=n,a=await iS(t,e,r,o),l=[];for(let u=0;u<a.length;u++){if(a[u].staked===0)continue;let f=Math.min(s,a[u].staked),b=i.unstake(a[u].id,f,r);if(l.push(b),s-=f,s===0)break}return l},claimQuick:async(n,r)=>{let o=await Fm(t,e,n,r),s=[];return o.forEach(a=>{let l=i.claim(a,n);s.push(l)}),s}}},rS=({builder:t,txBlock:e})=>{let i={pkgId:t.address.get("vesca.id"),table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")};return{lockSca:(n,r)=>e.moveCall({target:`${i.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[e.object(i.config),e.object(i.table),e.object(i.treasury),typeof n=="string"?e.pure(n):n,e.pure(r),e.object(so.SUI_CLOCK_OBJECT_ID)]}),extendLockPeriod:(n,r)=>{e.moveCall({target:`${i.pkgId}::ve_sca::extend_lock_period`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),e.pure(r),e.object(so.SUI_CLOCK_OBJECT_ID)]})},extendLockAmount:(n,r)=>{e.moveCall({target:`${i.pkgId}::ve_sca::lock_more_sca`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),typeof r=="string"?e.pure(r):r,e.object(so.SUI_CLOCK_OBJECT_ID)]})},renewExpiredVeSca:(n,r,o)=>{e.moveCall({target:`${i.pkgId}::ve_sca::renew_expired_ve_sca`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),typeof r=="string"?e.pure(r):r,e.pure(o),e.object(so.SUI_CLOCK_OBJECT_ID)]})},redeemSca:n=>e.moveCall({target:`${i.pkgId}::ve_sca::redeem`,arguments:[e.object(i.config),e.object(n),e.object(i.table),e.object(i.treasury),e.object(so.SUI_CLOCK_OBJECT_ID)]})}},to=({builder:t,txBlock:e})=>{let i=rS({builder:t,txBlock:e});return{normalMethod:i,lockScaQuick:async(n,r,o=!0)=>{let s=Ti(e),a=await oo(t,e),l,u=[];if(n!==void 0&&typeof n=="number"){let T=await t.utils.selectCoinIds(n,co,s),[O,P]=t.utils.takeAmountFromCoins(e,T,n);l=O,u.push(P)}else l=n;let f=t.utils.getUnlockAt(r,a?.unlockAt);o&&IT(n,r,f,a?.unlockAt),console.log(new Date(f*1e3).toLocaleString("en-CA",{hour12:!0}));let b=!a?.unlockAt,v=!b&&a.unlockAt*1e3<=new Date().getTime();if(b||v){if(l)if(b){let T=i.lockSca(l,f);u.push(T)}else{if(a.lockedScaAmount!==0){let T=i.redeemSca(a.keyId);u.push(T)}i.renewExpiredVeSca(a.keyId,l,f)}}else l&&r?(i.extendLockPeriod(a.keyId,f),i.extendLockAmount(a.keyId,l)):r?i.extendLockPeriod(a.keyId,f):l&&i.extendLockAmount(a.keyId,l);u.length>0&&e.transferObjects(u,s)},extendLockPeriodQuick:async(n,r,o=!0)=>{let s=await oo(t,e,r),a=t.utils.getUnlockAt(n);o&&OT(n,a,s?.unlockAt),s&&i.extendLockPeriod(s.keyId,a)},extendLockAmountQuick:async(n,r,o=!0)=>{let s=Ti(e),a=await oo(t,e,r);if(o&&PT(n,a?.unlockAt),a){let l=await t.utils.selectCoinIds(n,co,s),[u,f]=t.utils.takeAmountFromCoins(e,l,n);i.extendLockAmount(a.keyId,u),e.transferObjects([f],s)}},renewExpiredVeScaQuick:async(n,r,o,s=!0)=>{let a=Ti(e),l=await oo(t,e,o),u=t.utils.getUnlockAt(r,l?.unlockAt);if(s&&DT(n,r,l?.unlockAt),l){let f=[];if(l.lockedScaAmount!==0){let O=i.redeemSca(l.keyId);f.push(O)}let b=await t.utils.selectCoinIds(n,co,a),[v,T]=t.utils.takeAmountFromCoins(e,b,n);f.push(T),i.renewExpiredVeSca(l.keyId,v,u),e.transferObjects(f,a)}},redeemScaQuick:async n=>{let r=Ti(e),o=await oo(t,e,n);if(ps(o?.unlockAt),o){let s=i.redeemSca(o.keyId);e.transferObjects([s],r)}}}},Ot=class{params;client;address;builder;query;utils;walletAddress;constructor(t,e){this.params=t,this.client=t.client,this.address=e?.address??new ac({id:t?.addressesId||oc,network:t?.networkType}),this.query=e?.query??new z0(t,{address:this.address}),this.utils=e?.utils??new Xu(t,{address:this.address,query:this.query}),this.builder=e?.builder??new G0(t,{address:this.address,query:this.query,utils:this.utils}),this.walletAddress=(0,R0.normalizeSuiAddress)(t.walletAddress)}init(t=!1){(t||!this.address.getAddresses())&&this.address.read(),this.builder.init(t,this.address),this.query.init(t,this.address),this.utils.init(t,this.address)}async getObligations(t){let e=t||this.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let i=e||this.walletAddress;return this.query.getStakeAccounts(t,i)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new ze.TransactionBlock,i=Hi({builder:this.builder,txBlock:e}),n=t||this.walletAddress;return e.setSender(n),i.normalMethod.openObligationEntry(),e}async depositCollateral(t,e,i,n){let r=new ze.TransactionBlock,o=n||this.walletAddress;r.setSender(o);let s=Hi({builder:this.builder,txBlock:r}),a=await this.query.getObligations(o),l=i||a?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[u,f,b]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,u),s.normalMethod.returnObligation(u,b),r.transferObjects([f],o)}return r}async withdrawCollateral(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=r||this.walletAddress;o.setSender(a);let l=await s.takeCollateralQuick(e,t,i,n);return o.transferObjects([l],a),o}async deposit(t,e,i){let n=new ze.TransactionBlock,r=Hi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;n.setSender(o);let s=await r.depositQuick(e,t,i);return n.transferObjects([s],o),n}async withdraw(t,e,i){let n=new ze.TransactionBlock,r=i||this.walletAddress,o=Hi({builder:this.builder,txBlock:n});n.setSender(r);let s=await o.withdrawQuick(e,t);return n.transferObjects([s],r),n}async borrow(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=Fi({builder:this.builder,txBlock:o}),l=r||this.walletAddress;o.setSender(l);let u=Ga.includes(t);u&&await a.unstakeObligationQuick(i,n);let f=await s.borrowQuick(e,t,i,n);return o.transferObjects([f],l),u&&await a.stakeObligationQuick(i,n),o}async borrowWithBoost(t,e,i,n,r,o){let s=new ze.TransactionBlock,a=Hi({builder:this.builder,txBlock:s}),l=Fi({builder:this.builder,txBlock:s}),u=o||this.walletAddress;s.setSender(u);let f=Ga.includes(t);f&&await l.unstakeObligationQuick(i,n);let b=await a.borrowQuick(e,t,i,n);return s.transferObjects([b],u),f&&await l.stakeObligationWithVeScaQuick(i,n,r),s}async repay(t,e,i,n,r){let o=new ze.TransactionBlock,s=Hi({builder:this.builder,txBlock:o}),a=Fi({builder:this.builder,txBlock:o}),l=r||this.walletAddress;o.setSender(l);let u=Ga.includes(t);return u&&await a.unstakeObligationQuick(i,n),await s.repayQuick(e,t,i,l),u&&await a.stakeObligationQuick(i,n),o}async createStakeAccount(t,e){let i=new ze.TransactionBlock,n=eo({builder:this.builder,txBlock:i}),r=e||this.walletAddress;i.setSender(r);let o=n.normalMethod.createStakeAccount(t);return i.transferObjects([o],r),i}async supplyAndStake(t,e,i,n){let r=new ze.TransactionBlock,o=Hi({builder:this.builder,txBlock:r}),s=eo({builder:this.builder,txBlock:r}),a=n||this.walletAddress;r.setSender(a);let l=await o.depositQuick(e,t,n),u=this.utils.parseMarketCoinName(t);if(!Vu.find(v=>v===u))return r;let f=await this.query.getStakeAccounts(u,a),b=i||(f.length>0?f[0].id:void 0);if(b)await s.stakeQuick(l,u,b);else{let v=s.normalMethod.createStakeAccount(u);await s.stakeQuick(l,u,v),r.transferObjects([v],a)}return r}async unstakeAndWithdraw(t,e,i){let n=new ze.TransactionBlock,r=Hi({builder:this.builder,txBlock:n}),o=eo({builder:this.builder,txBlock:n}),s=this.walletAddress,a=[];n.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let u=0;u<i.length;u++){let f=i[u],[b]=await o.unstakeQuick(f.coin,l,f.id);if(b){let v=r.normalMethod.withdraw(b,t);a.push(v)}}if(e>0){let u=await r.withdrawQuick(e,t);a.push(u)}return n.transferObjects(a,s),n}async stake(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=n||this.walletAddress;r.setSender(s);let a=await this.query.getStakeAccounts(t,s),l=i||(a.length>0?a[0].id:void 0);if(l)await o.stakeQuick(e,t,l);else{let u=o.normalMethod.createStakeAccount(t);await o.stakeQuick(e,t,u),r.transferObjects([u],s)}return r}async unstake(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=n||this.walletAddress;r.setSender(s);let a=await o.unstakeQuick(e,t,i);return r.transferObjects(a,s),r}async claim(t,e,i,n){let r=new ze.TransactionBlock,o=eo({builder:this.builder,txBlock:r}),s=Fi({builder:this.builder,txBlock:r}),a=n||this.walletAddress;r.setSender(a);let l={sui:[],sca:[]};for(let u=0;u<t.length;u++){let{stakeMarketCoinName:f,stakeAccountId:b}=t[u],v=o.normalMethod.claim(b,f);l.sui.push(v)}for(let u=0;u<e.length;u++){let{obligationId:f,obligationKey:b,rewardCoinName:v}=e[u],T=s.normalMethod.claimBorrowIncentive(f,b,v);l[v].push(T)}for(let u=0;u<i.length;u++){let{obligationId:f,obligationKey:b,rewardCoinName:v}=i[u],T=s.normalMethod.oldClaimBorrowIncentive(f,b,v);l[v].push(T)}return l.sui.length>0&&(l.sui.length>1&&r.mergeCoins(l.sui[0],l.sui.slice(1)),r.transferObjects([l.sui[0]],r.pure(a))),l.sca.length>0&&(l.sca.length>1&&r.mergeCoins(l.sca[0],l.sca.slice(1)),r.transferObjects([l.sca[0]],r.pure(a))),r}async stakeObligation(t,e,i){let n=this.builder.createTxBlock(),r=Fi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;return n.setSender(o),await r.stakeObligationQuick(t,e),n}async unstakeObligation(t,e,i){let n=this.builder.createTxBlock(),r=Fi({builder:this.builder,txBlock:n}),o=i||this.walletAddress;return n.setSender(o),await r.unstakeObligationQuick(t,e),n}async stakeSca(t,e=!1,i=!1,n,r,o,s,a){let l=new ze.TransactionBlock,u=to({builder:this.builder,txBlock:l}),f=Fi({builder:this.builder,txBlock:l}),b=a||this.walletAddress;l.setSender(b);let v=await this.builder.utils.selectCoinIds(t,co,b),[T,O]=this.builder.utils.takeAmountFromCoins(l,v,t),P;return s?u.normalMethod.extendLockAmount(s,T):P=u.normalMethod.lockSca(T,o),n&&r&&(e&&(i?f.normalMethod.oldUnstakeObligation(n,r):f.normalMethod.unstakeObligation(n,r)),f.normalMethod.stakeObligationWithVesca(n,r,s||P)),s||l.transferObjects([P,O],b),l}async stakeMoreSca(t,e,i){let n=new ze.TransactionBlock,r=i||this.walletAddress;return n.setSender(r),n}async extendStakeScaLockPeriod(t,e,i,n,r=!1,o=!1,s){let a=new ze.TransactionBlock,l=to({builder:this.builder,txBlock:a}),u=Fi({builder:this.builder,txBlock:a}),f=s||this.walletAddress;return a.setSender(f),l.normalMethod.extendLockPeriod(e,t),i&&n&&(r&&(o?u.normalMethod.oldUnstakeObligation(i,n):u.normalMethod.unstakeObligation(i,n)),u.normalMethod.stakeObligationWithVesca(i,n,e)),a}async extendPeriodAndStakeMoreSca(t,e,i,n,r,o=!1,s=!1,a){let l=new ze.TransactionBlock,u=to({builder:this.builder,txBlock:l}),f=Fi({builder:this.builder,txBlock:l}),b=a||this.walletAddress;l.setSender(b);let v=await this.builder.utils.selectCoinIds(t,co,b),[T,O]=this.builder.utils.takeAmountFromCoins(l,v,t);return u.normalMethod.extendLockPeriod(e,i),u.normalMethod.extendLockAmount(e,T),l.transferObjects([O],b),!n||!r||(o&&(s?f.normalMethod.oldUnstakeObligation(n,r):f.normalMethod.unstakeObligation(n,r)),f.normalMethod.stakeObligationWithVesca(n,r,e)),l}async renewExpiredStakeSca(t,e,i,n=!1,r,o,s=!1,a=!1,l){let u=new ze.TransactionBlock,f=to({builder:this.builder,txBlock:u}),b=Fi({builder:this.builder,txBlock:u}),v=l||this.walletAddress;if(u.setSender(v),n){let j=f.normalMethod.redeemSca(i);u.transferObjects([j],v)}let T=await this.builder.utils.selectCoinIds(t,co,v),[O,P]=this.builder.utils.takeAmountFromCoins(u,T,t);return u.transferObjects([P],v),f.normalMethod.renewExpiredVeSca(i,O,e),!r||!o||(s&&(a?b.normalMethod.oldUnstakeObligation(r,o):b.normalMethod.unstakeObligation(r,o)),b.normalMethod.stakeObligationWithVesca(r,o,i)),u}async redeemSca(t){let e=new ze.TransactionBlock,i=to({builder:this.builder,txBlock:e}),n=this.walletAddress;return e.setSender(n),await i.redeemScaQuick(t),e}async migrateAndClaim(t,e,i,n){let r=new ze.TransactionBlock,o=Fi({builder:this.builder,txBlock:r}),s=this.walletAddress;r.setSender(s);let a=o.normalMethod.oldClaimBorrowIncentive(i,e,n);return r.transferObjects([a],s),o.stakeObligationWithVeScaQuick(i,e,t),r}async withdrawUnlockedSca(t,e){let i=new ze.TransactionBlock,n=to({builder:this.builder,txBlock:i}),r=e||this.walletAddress;return i.setSender(r),await n.redeemScaQuick(t),i}calculateAvailableClaimCoin(t,e){let i=new vi(t.weightedAmount),n=e.currentPointIndex?vi(e.currentPointIndex-t.index).dividedBy(1e9):1;return i.multipliedBy(n).plus(t.points).shiftedBy(-1*e.coinDecimal)}},oS=class Z0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new Z0(e)}},sS=class X0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await i.init(),i.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new X0(e)}},aS=class J0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new J0(e)}},cS=class Q0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new Q0(e)}},lS=class Y0 extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new Y0(e)}},uS=class e_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new e_(e)}},dS=class t_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await i.init(),i.migrateAndClaim(this.data.veScaKey,this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName)}static fromData(e){return new t_(e)}},fS=class i_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.openObligation()}static fromData(e){return new i_(e)}},hS=class n_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.redeemSca(this.data.veScaKey)}static fromData(e){return new n_(e)}},pS=class r_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new r_(e)}},mS=class o_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new o_(e)}},gS=class s_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new s_(e)}},_S=class a_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a_(e)}},bS=class c_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new c_(e)}},wS=class l_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new l_(e)}},yS=class u_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new u_(e)}},vS=class d_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new d_(e)}},kS=class f_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new f_(e)}},CS=class h_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=e.network.split(":")[1],n=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:i});return n.init(),n.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new h_(e)}},TS=class p_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Ot({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return i.init(),i.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new p_(e)}},SS=class{application="scallop";async deserialize(t){let e=new G0({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});await e.init();let{transactionBlock:i}=t,n=new xT(i,e).decode();return{txType:j0.TransactionType.Other,txSubType:n.type,intentionData:n.intentionData}}async build(t){let{suiClient:e,account:i,network:n}=t,r;switch(t.txSubType){case"SupplyLending":r=wS.fromData(t.intentionData);break;case"WithdrawLending":r=CS.fromData(t.intentionData);break;case"Borrow":r=oS.fromData(t.intentionData);break;case"Repay":r=mS.fromData(t.intentionData);break;case"DepositCollateral":r=cS.fromData(t.intentionData);break;case"WithdrawCollateral":r=kS.fromData(t.intentionData);break;case"OpenObligation":r=fS.fromData(t.intentionData);break;case"StakeSpool":r=_S.fromData(t.intentionData);break;case"UnstakeSpool":r=yS.fromData(t.intentionData);break;case"ClaimIncentiveReward":r=aS.fromData(t.intentionData);break;case"BorrowWithBoost":r=sS.fromData(t.intentionData);break;case"StakeSca":r=gS.fromData(t.intentionData);break;case"ExtendStakePeriod":r=uS.fromData(t.intentionData);break;case"ExtendPeriodAndStakeMore":r=lS.fromData(t.intentionData);break;case"RenewExpStakePeriod":r=pS.fromData(t.intentionData);break;case"WithdrawStakedSca":r=TS.fromData(t.intentionData);break;case"SupplyAndStakeLending":r=bS.fromData(t.intentionData);break;case"WithdrawAndUnstakeLending":r=vS.fromData(t.intentionData);break;case"RedeemSca":r=hS.fromData(t.intentionData);break;case"MigrateAndClaim":r=dS.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:i,network:n})}},Ln={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},qn={PackageId:"0xdee9"},xS=(t,e,i,n)=>{if(t===1)switch(n.findIndex(r=>r===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(i.findIndex(r=>r===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},AS=class{constructor(t,e,i){this.txb=t,this.turbosSdk=e,this.config=i}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}decode(t){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(i=>i.kind==="MoveCall"&&i.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Ln.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Ln.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`)}decodeSwap(){let t=this.transactions.find(b=>b.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let i=xS(e,t.target,this.swap1Layer,this.swap2Layer),n=i.map((b,v)=>{let T=this.helper.decodeSharedObjectId(v),O=this.helper.decodeInputU128(4+v+e),P=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new xu.default(O.toString()));return{pool:T,a2b:b,nextTickIndex:P}}),r=i[0]||e===1?t.typeArguments[0]:t.typeArguments[1],o=e===1?t.typeArguments[4]:i[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),a=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),u=this.helper.decodeInputU64(2+e),f=this.helper.decodeInputU64(3+e);return{txType:li.TransactionType.Other,type:"Swap",intentionData:{routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:l?u:f,amountB:l?f:u,amountSpecifiedIsInput:l,slippage:"0.1",deadline:a}}}decodeAddLiquidity(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),i=this.helper.decodeInputU64(8),n=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),o=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),a=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:li.TransactionType.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:i,amountB:n,tickLower:o?-r:r,tickUpper:a?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){let e=this.helper.decodeSharedObjectId(0),i=this.helper.decodeSharedObjectId(4),n=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),o=this.helper.decodeInputU64(9);return{txType:li.TransactionType.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:n,amountB:r,nft:i,deadline:o}}}decodeDecreaseLiquidity(t){let e=this.helper.decodeSharedObjectId(0),i=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),o=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:li.TransactionType.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:n,nft:i,amountA:r,amountB:o,slippage:10,address:t,deadline:s}}}decodeCollectFee(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),i=this.helper.decodeInputAddress(5),n=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),o=this.helper.decodeInputU64(6);return{txType:li.TransactionType.Other,type:"CollectFee",intentionData:{pool:t,address:i,collectAmountA:n,collectAmountB:r,nft:e,deadline:o}}}decodeCollectReward(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),i=this.helper.decodeInputAddress(6),n=this.collectRewardHelper.map(o=>o.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:li.TransactionType.Other,type:"CollectReward",intentionData:{pool:t,address:i,rewardAmounts:n,nft:e,deadline:r}}}decodeBurn(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:li.TransactionType.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),i=this.decreaseLiquidityHelper.decodeSharedObjectId(2),n=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),o=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),a=this.collectRewardHelper.map(f=>f.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,u=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:li.TransactionType.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:n,nft:i,amountA:r,amountB:o,slippage:10,address:t,collectAmountA:l,collectAmountB:u,rewardAmounts:a,deadline:s}}}decodePrixClaim(){return{txType:li.TransactionType.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:li.TransactionType.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),i=this.swapExactBaseForQuoteHelper.shortTypeArg(0),n=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:li.TransactionType.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:i,token2:n}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),i=this.swapExactQuoteForBaseHelper.shortTypeArg(0),n=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:li.TransactionType.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:i,token2:n}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero");return new io(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target===`${this.config.PackageId}::position_manager::collect_reward`).map(t=>new io(t,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new io(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new io(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`);return new io(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`);return new io(t,this.txb)}},io=class Xa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Xa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Xa.getOwnedObjectId(i)}decodeInputU128(e){let i=this.decodePureArg(e,"u128");return Number(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU32(e){let i=this.decodePureArg(e,"u32");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Fn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Xa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Wu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Fn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Fn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Fn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Fn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Wu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Fn.normalizeStructTag)(this.moveCall.typeArguments[e])}shortTypeArg(e){return this.moveCall.typeArguments[e]}txArg(e){return this.moveCall.arguments[e]}},IS=class g_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,tickLower:l,tickUpper:u,deadline:f,txb:b}=this.data;return i.pool.addLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,tickLower:l,tickUpper:u,deadline:f,txb:b})}static fromData(e){return new g_(e)}},OS=class __ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,nft:r,txb:o}=this.data;return i.nft.burn({pool:n,nft:r,txb:o})}static fromData(e){return new __(e)}},PS=class b_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,nft:o,collectAmountA:s,collectAmountB:a,deadline:l,txb:u}=this.data;return i.pool.collectFee({pool:n,address:r,collectAmountA:s,collectAmountB:a,nft:o,deadline:l,txb:u})}static fromData(e){return new b_(e)}},DS=class w_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,nft:o,rewardAmounts:s,deadline:a,txb:l}=this.data;return i.pool.collectReward({pool:n,address:r,rewardAmounts:s,nft:o,deadline:a,txb:l})}static fromData(e){return new w_(e)}},ES=class y_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{fee:n,address:r,tickLower:o,tickUpper:s,sqrtPrice:a,slippage:l,coinTypeA:u,coinTypeB:f,amountA:b,amountB:v,deadline:T,txb:O}=this.data;return i.pool.createPool({fee:n,amountA:b,amountB:v,address:r,tickLower:o,tickUpper:s,sqrtPrice:a,slippage:l,coinTypeA:u,coinTypeB:f,deadline:T,txb:O})}static fromData(e){return new y_(e)}},MS=class v_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,nft:l,decreaseLiquidity:u,deadline:f,txb:b}=this.data;return i.pool.decreaseLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,nft:l,decreaseLiquidity:u,deadline:f,txb:b})}static fromData(e){return new v_(e)}},jS=class k_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{pool:n,address:r,amountA:o,amountB:s,slippage:a,nft:l,deadline:u,txb:f}=this.data;return i.pool.increaseLiquidity({pool:n,slippage:a,address:r,amountA:o,amountB:s,nft:l,deadline:u,txb:f})}static fromData(e){return new k_(e)}},BS=class S_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new C_.TransactionBlock;return i.moveCall({target:`${Ln.PackageId}::claim::claim`,typeArguments:[Ln.turbosCoinType],arguments:[i.object(Ln.Claim),i.object(T_.SUI_CLOCK_OBJECT_ID)]}),i}static fromData(e){return new S_(e)}},NS=class A_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new x_.TransactionBlock;return i.moveCall({target:`${Ln.PackageId}::claim::join`,typeArguments:[Ln.turbosCoinType],arguments:[i.object(Ln.Claim)]}),i}static fromData(e){return new A_(e)}},FS=class O_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),n=new I_.TransactionBlock;return n=await i.pool.collectFee({txb:n,...this.data}),n=await i.pool.collectReward({txb:n,...this.data}),n=await i.pool.decreaseLiquidity({txb:n,...this.data}),n=await i.nft.burn({txb:n,nft:this.data.nft,pool:this.data.pool}),n}static fromData(e){return new O_(e)}},RS=class P_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient),{routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:a,amountB:l,slippage:u,amountSpecifiedIsInput:f,deadline:b,txb:v}=this.data;return i.trade.swap({routes:n,coinTypeA:r,coinTypeB:o,address:s,amountA:a,amountB:l,amountSpecifiedIsInput:f,slippage:u,deadline:b,txb:v})}static fromData(e){return new P_(e)}},D_=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,i){let n=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),n.push(...r.data);while(r.hasNextPage);let o=[],s=0;return n.sort((a,l)=>Number(l.balance)-Number(a.balance)).some(a=>s>=i?!0:(s+=Number(a.balance),o.push(a),!1)),o}splitAndMergeCoin(t,e,i){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[o]=i.splitCoins(i.gas,[i.pure(e)]);return[o,void 0]}let n=i.object(t[0].coinObjectId);t.length>1&&i.mergeCoins(n,t.slice(1).map(o=>i.object(o.coinObjectId)));let[r]=i.splitCoins(n,[i.pure(e)]);return[r,n]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${qn.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Yr(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${qn.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}},E_=89,M_=1e6,qS=async t=>{let{token1:e,token2:i,poolId:n,amountIn:r,currentAddress:o,turbosSdk:s}=t,a=new ed.TransactionBlock,l=new D_(s),u=await l.getCoinsData(o,i,r),[f,b]=l.splitAndMergeCoin(u,r,a);if(!f)throw new Error(`Not enough balance: ${i}`);let v=await l.IsAccountCap(o),T=v?a.object(v):l.createAccount(a),[O,P,j]=a.moveCall({typeArguments:[e,i],target:`${qn.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[a.object(String(n)),a.pure(E_),T,a.pure(r),a.object((0,Yu.normalizeSuiObjectId)("0x6")),f]});return b&&a.transferObjects([b],a.pure(o)),a.transferObjects([O],a.pure(o)),a.transferObjects([P],a.pure(o)),v||a.transferObjects([T],a.pure(o)),a.setSenderIfNotSet(o),a.setGasBudget(M_),a},LS=async t=>{let{token1:e,token2:i,poolId:n,amountIn:r,currentAddress:o,turbosSdk:s}=t,a=new ed.TransactionBlock,l=new D_(s),u=await l.getCoinsData(o,e,r),[f,b]=l.splitAndMergeCoin(u,r,a);if(!f)throw new Error(`Not enough balance: ${e}`);let v=await l.IsAccountCap(o),T=v?a.object(v):l.createAccount(a),O=l.zero(i,a),[P,j,B]=a.moveCall({typeArguments:[e,i],target:`${qn.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[a.object(String(n)),a.pure(E_),T,a.pure(r),f,O,a.object((0,Yu.normalizeSuiObjectId)("0x6"))]});return b&&a.transferObjects([b],a.pure(o)),a.transferObjects([P],a.pure(o)),a.transferObjects([j],a.pure(o)),v||a.transferObjects([T],a.pure(o)),a.setSenderIfNotSet(o),a.setGasBudget(M_),a},$S=class j_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient);return await LS({...this.data,turbosSdk:i,currentAddress:e.account.address})}static fromData(e){return new j_(e)}},US=class B_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){let i=new Le(e.network.replace("sui:",""),e.suiClient);return await qS({...this.data,turbosSdk:i,currentAddress:e.account.address})}static fromData(e){return new B_(e)}},KS=class{application="turbos";async deserialize(t){let e=new Le(t.network.replace("sui:",""),t.suiClient),i=await e.contract.getConfig(),{transactionBlock:n,account:r}=t,o=new AS(n,e,i).decode(r.address);return{txType:m_.TransactionType.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:i,network:n}=t,r;switch(t.txSubType){case"CreatePool":r=ES.fromData(t.intentionData);break;case"AddLiquidity":r=IS.fromData(t.intentionData);break;case"IncreaseLiquidity":r=jS.fromData(t.intentionData);break;case"DecreaseLiquidity":r=MS.fromData(t.intentionData);break;case"RemoveLiquidity":r=FS.fromData(t.intentionData);break;case"CollectFee":r=PS.fromData(t.intentionData);break;case"CollectReward":r=DS.fromData(t.intentionData);break;case"Burn":r=OS.fromData(t.intentionData);break;case"Swap":r=RS.fromData(t.intentionData);break;case"PrixJoin":r=NS.fromData(t.intentionData);break;case"PrixClaim":r=BS.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=$S.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=US.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:i,network:n})}},VS={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},Et=VS,WS=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${Et.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Ja.TransactionType.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let t=this.transactions.find(e=>e.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Ja.TransactionType.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Ja.TransactionType.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(Et.packageId));return new zS(t,this.txb)}},zS=class Qa{constructor(e,i){this.moveCall=e,this.txb=i}decodeSharedObjectId(e){let i=this.getInputParam(e);return Qa.getSharedObjectId(i)}decodeOwnedObjectId(e){let i=this.getInputParam(e);return Qa.getOwnedObjectId(i)}decodeInputU64(e){let i=this.decodePureArg(e,"u64");return Number(i)}decodeInputU8(e){let i=this.decodePureArg(e,"u8");return Number(i)}decodeInputAddress(e){let i=this.decodePureArg(e,"address");return(0,Rn.normalizeSuiAddress)(i)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,i){let n=this.getInputParam(e);return Qa.getPureInputValue(n,i)}getInputParam(e){let i=this.moveCall.arguments[e];if(i.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[i.index]}static getPureInputValue(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return zu.bcs.de(i,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return(0,Rn.normalizeSuiAddress)(e.value.Object.ImmOrOwned.objectId)}return(0,Rn.normalizeSuiAddress)(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return(0,Rn.normalizeSuiAddress)(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return(0,Rn.normalizeSuiAddress)(e.value.Object.Shared.objectId)}static getPureInput(e,i){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return zu.bcs.de(i,new Uint8Array(n))}typeArg(e){return(0,Rn.normalizeStructTag)(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}},GS=class R_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new F_.TransactionBlock,{ticketId:n}=this.data;return i.moveCall({target:`${Et.packageId}::native_pool::burn_ticket`,arguments:[i.object(Et.poolObjectId),i.object(Et.systemStateObjectId),i.object(n)]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new R_(e)}},HS=class L_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new q_.TransactionBlock,{amount:n}=this.data,[r]=i.splitCoins(i.gas,[i.pure(n)]);return i.moveCall({target:`${Et.packageId}::native_pool::stake`,arguments:[i.object(Et.poolObjectId),i.object(Et.metadataObjectId),i.object(Et.systemStateObjectId),r]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new L_(e)}},ZS=class U_ extends ne{constructor(e){super(e),this.data=e}txType;txSubType;async build(e){console.log(e);let i=new $_.TransactionBlock,{amount:n}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[o,...s]=r.filter(u=>u.coinType.split("::")[0]===Et.certType.split("::")[0]),a=i.object(o.coinObjectId);s.length&&i.mergeCoins(a,s.map(u=>i.object(u.coinObjectId)));let l=i.splitCoins(i.object(o.coinObjectId),[i.pure(n)]);return i.moveCall({target:`${Et.packageId}::native_pool::unstake`,arguments:[i.object(Et.poolObjectId),i.object(Et.metadataObjectId),i.object(Et.systemStateObjectId),l]}),i.setGasBudget(Et.gasBudget),i}static fromData(e){return new U_(e)}},XS=class{application="volo";async deserialize(t){let{transactionBlock:e}=t,i=new WS(e).decode();return{txType:N_.TransactionType.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:i}=t,n;switch(t.txSubType){case"Stake":n=HS.fromData(t.intentionData);break;case"UnStake":n=ZS.fromData(t.intentionData);break;case"ClaimTicket":n=GS.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({suiClient:e,account:i})}},cc=new vT([new sT,new _T,new iT,new yT,new iC,new KS,new SS,new XS]);var Pe=require("@msafe/sui3-utils"),ld=require("@mysten/sui.js/transactions"),mc=require("@mysten/sui.js/utils");var K_=require("@mysten/sui.js/transactions"),JS=1000n,QS=120n,YS=100n,e2={multiplier:{numerator:QS,denominator:YS}};var lc=class{constructor(e){this.globals=e}async simulate(e,i=e2){let n=this.copyTransactionBlock(e.txb),{suiClient:r}=this.globals,o=await this.getGasPrice(i);n.setGasPrice(o);let s=await r.devInspectTransactionBlock({transactionBlock:n,sender:e.sender}),{gasUsed:a}=s.effects,l=this.toGasBudget(a,o),u=s.effects.status.status==="success",f;return u||(f=s.effects.status.error),{success:u,gasPrice:o,gasObject:s.effects.gasObject.reference,gasUsed:a,gasBudget:l,simulationError:f}}async getGasPrice(e){if(this.isFixedValue(e))return e.fixedVal;let i=await this.globals.suiClient.getReferenceGasPrice();return this.applyGasOption(i,e)}toGasBudget(e,i){let{computationCost:n,storageCost:r}=e,o=JS*i,s=BigInt(n)+o,a=s+BigInt(r);return a>s?a:s}isFixedValue(e){return"fixedVal"in e}isMultiplier(e){return"multiplier"in e}applyGasOption(e,i){if(this.isFixedValue(i))return i.fixedVal;if(this.isMultiplier(i)){let{multiplier:n}=i;return e*n.numerator/n.denominator}throw new Error("Sanity: Unknown gas price option")}copyTransactionBlock(e){return K_.TransactionBlock.from(e.serialize())}};var td=require("buffer");function uc(t){return td.Buffer.from(t,"utf-8")}function t2(t){return`0x${Array.prototype.map.call(t,e=>`0${e.toString(16)}`.slice(-2)).join("")}`}function dc(t){return Uint8Array.from(td.Buffer.from(t.startsWith("0x")?t.slice(2):t,"hex"))}var hc=require("@mysten/sui.js/verify");var Un=require("@mysten/sui.js/utils");var fc=require("@mysten/sui.js/utils"),_s=class{_client;_coinMetaReg;constructor(e){this._client=e,this._coinMetaReg=new Map}async getCoinMeta(e){let i=(0,fc.normalizeStructTag)(e);if(this._coinMetaReg.has(i))return this._coinMetaReg.get(i);let n=await this.queryCoinMeta(i);return n&&this._coinMetaReg.set(i,n),n}async queryCoinMeta(e){return await this._client.getCoinMetadata({coinType:e})||void 0}},id=/^0x0000000000000000000000000000000000000000000000000000000000000002::coin::Coin<(.+)>$/,bs=class t{static isCoin(e){return e?(0,fc.normalizeStructTag)(e).match(id)!=null:!1}static getCoinType(e){let[,i]=(0,fc.normalizeStructTag)(e).match(id)??[];return i||null}static getBalance(e){if(!t.isCoin(e.type)||e.content?.dataType!=="moveObject")return;let{balance:i}=e.content?.fields;if(i!==void 0)return BigInt(i)}};var dn=class{static normalizeSuiAddress(e){return(0,Un.normalizeSuiAddress)(e)}static normalizeStructTag(e){return(0,Un.normalizeStructTag)(e)}static isSuiAddressEqual(e,i){return(0,Un.normalizeSuiAddress)(e)===(0,Un.normalizeSuiAddress)(i)}static isSuiStructEqual(e,i){return(0,Un.normalizeStructTag)(e)===(0,Un.normalizeStructTag)(i)}static isCoinObjectType(e){return bs.isCoin(e)}};function nd(t,e){return t.startsWith(e)?t:e+t}var rd=class t{static async getPublicKeyFromSignature(e){return e.messageType==="TransactionBlock"?(0,hc.verifyTransactionBlock)(e.message,e.signature):(0,hc.verifyPersonalMessage)(e.message,e.signature)}static async getPublicKeyFromPersonalSignature(e){let i=uc(e.messageStr);return this.getPublicKeyFromSignature({message:i,messageType:"Personal",signature:e.signature})}static async verifySignature(e){let i=await t.getPublicKeyFromSignature(e);return dn.isSuiAddressEqual(i.toSuiAddress(),e.targetAddress)}static async verifyPersonalSignature(e){let i=uc(e.messageStr);return this.verifySignature({message:i,messageType:"Personal",signature:e.signature,targetAddress:e.targetAddress})}static async verifyTransactionSignature(e){return this.verifySignature({messageType:"TransactionBlock",message:e.payload,signature:e.signature,targetAddress:e.targetAddress})}};var V_=require("@msafe/sui3-utils"),W_=require("@mysten/sui.js/cryptography"),z_=require("@mysten/sui.js/multisig");var i2="0x2::sui::SUI";async function od(t,e){let i;try{i=await t.queryTransactionBlocks({filter:{FromAddress:e},options:{showInput:!0},limit:2})}catch{return}if(i.data.length===0||!i.data[0].transaction?.txSignatures)return;let r=i.data[0].transaction?.txSignatures;for(let o=0;o!==r.length;o++){let s=r[o],a=n2(s,e);if(a)return a}}function n2(t,e){let i=(0,W_.parseSerializedSignature)(t);switch(i.signatureScheme){case"MultiSig":{let n=new z_.MultiSigPublicKey(i.multisig.multisig_pk).toSuiAddress();if(dn.isSuiAddressEqual(n,e))throw new Error("multi-sig wallet cannot be owner");return}case"ZkLogin":{if(dn.isSuiAddressEqual(i.zkLogin.address,e))throw new Error("ZkLogin wallet cannot be owner");return}case"ED25519":case"Secp256k1":case"Secp256r1":{let n=V_.PublicKeySerde.de({publicKeyEncoded:i.publicKey,schema:i.signatureScheme});return dn.isSuiAddressEqual(n.toSuiAddress(),e)?n:void 0}default:throw new Error("Unknown schema")}}async function r2(t){let e=!0,i,n=[];for(;e;){let r=await t.suiClient.getCoins({owner:t.owner,coinType:t.coinType,cursor:i});n.push(...r.data),e=r.hasNextPage,i=r.nextCursor}return n}var G_=25;async function H_(t){let e=[];for(;await t.hasNext();){let i=await t.next();e.push(i)}return e&&Array.isArray(e[0])?e.flat(1):e}var sd=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},pc=class{constructor(e){this.requester=e;this.pager=new sd(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};async function Z_(t,e,i){let n=new ad(t,e,i);return await H_(n)}var ad=class extends pc{constructor(i,n,r){super(new cd(i,n,r));this.provider=i;this.owner=n;this.options=r}},cd=class{constructor(e,i,n){this.provider=e;this.owner=i;this.options=n;this.nextCursor=null,this.filter=n?.filter,this.pageSize=n?.pageSize||G_,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}nextCursor;filter;pageSize;objectOptions;async doNextRequest(){let e=await this.provider.getOwnedObjects({owner:this.owner,options:this.objectOptions,cursor:this.nextCursor,limit:this.pageSize});this.nextCursor=e.nextCursor;let i;if(this.filter){let{filter:n}=this;i=e.data.filter(r=>n?.(r))}else i=e.data;return{data:i.map(n=>n.data).filter(n=>n),hasNext:e.hasNextPage}}};var pr=class t{constructor(e,i){this.globals=e;this.info=i;this.multiSig=new Pe.MultiSigAccount({threshold:i.threshold,ownersWithWeight:i.owners,creationNonce:i.creationNonce}),this.coinHelper=new _s(this.suiClient),this.simulator=new lc(e)}multiSig;coinHelper;simulator;static async New(e,i){let n=await e.backend.getMSafeAccountInfo(i);if(new t(e,n).address!==i)throw new Error("Invalid msafe config with address")}async ownedCoins(){let e=await this.suiClient.getAllBalances({owner:this.address});return Promise.all(e.map(async i=>{let n=await this.coinHelper.getCoinMeta(i.coinType),r=i.lockedBalance.number?BigInt(i.totalBalance)-BigInt(i.lockedBalance.number):BigInt(i.totalBalance);return{type:(0,mc.normalizeStructTag)(i.coinType),balance:BigInt(r),metadata:n}}))}async ownedObjects(e){let i={filter:n=>!n?.data?.type?.startsWith("0x2::coin::Coin"),...e};return Z_(this.suiClient,this.address,i)}async pendingTransaction(){let e=await this.backend.getPendingTransactions({msafeAddress:this.address});if(!e.pending)return;let i=e.pending,n=e.reject;return{application:i.application,txType:i.txType,txSubType:i.txSubType,createdAt:i.createdAt,creator:i.creator,digest:i.digest,intention:i.intention,sequenceNumber:i.sequenceNumber,payload:i.payload,votes:i.votes,approvalWeight:this.calculateWeightFromVotes(i.votes),msafeAddress:i.msafeAddress,rejectDigest:n?.digest??"",rejectPayload:n?.payload??"",rejectVotes:n?.votes??[],rejectWeight:this.calculateWeightFromVotes(n?.votes??[])}}async historyTransaction(e){return this.backend.getHistoryTransactions({msafeAddress:this.address,...e})}async futureIntentions(e){return this.backend.getFutureIntentions({msafeAddress:this.address,...e})}async currentSequenceNumber(){return this.backend.getCurrentSequenceNumber(this.address)}async nextSequenceNumber(){return this.backend.getNextSequenceNumber(this.address)}async simulateIntention(e){let i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});return this.simulator.simulate({txb:n,sender:this.address})}async proposeIntention(e){let i=Pe.SigningMessageHelper.proposeIntentionMessage({msafeAddress:this.address,intention:e.intention,sn:e.sequenceNumber}),n=await this.wallet.signPersonalMessage({messageStr:i});return this.backend.proposeIntention({...e,msafeAddress:this.address,signature:n.signature})}async proposeIntentionAndBuildVote(e){let i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});n.setGasPrice(e.gasPrice),n.setGasBudget(e.gasBudget),n.setSender(this.address);let r=await n.build({client:this.globals.suiClient}),o=await n.getDigest({client:this.globals.suiClient}),s=await this.wallet.signTransactionBlock({transactionBlock:r});return this.backend.proposeIntentionAndBuildVote({...e,payload:(0,mc.toHEX)(r),digest:o,msafeAddress:this.address,signature:s.signature})}async simulateCoinTransferIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.coin.send,sequenceNumber:i,intention:e})}async proposeCoinTransferIntention(e){let i=await this.nextSequenceNumber();return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.coin.send,sequenceNumber:i,intention:e})}async simulateObjectTransferIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.object.send,sequenceNumber:i,intention:e})}async proposeObjectTransferIntention(e){let i=await this.nextSequenceNumber();return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Assets,txSubType:Pe.TransactionSubTypes.assets.object.send,sequenceNumber:i,intention:e})}async simulatePlainPayloadIntention(e){let i=await this.nextSequenceNumber();return this.simulateIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Other,txSubType:Pe.TransactionSubTypes.others.plain,sequenceNumber:i,intention:e})}async proposePlainPayloadIntention(e){let i=await this.nextSequenceNumber(),n=ld.TransactionBlock.from(e.payload);if(!n.blockData.sender||!(0,Pe.isSameAddress)(n.blockData.sender,this.address))throw new Error("Transaction sender is not same as the multisig address");return this.proposeIntention({application:Pe.TransactionDefaultApplication,txType:Pe.TransactionType.Other,txSubType:Pe.TransactionSubTypes.others.plain,sequenceNumber:i,intention:e})}async voteForTransaction(e,i){let n=dc(i),r=await this.wallet.signTransactionBlock({transactionBlock:n});return this.backend.voteForTransaction({msafeAddress:this.address,digest:e,signature:r.signature})}async proposePendingTransaction(e){let i=new ld.TransactionBlock,n=await i.build({client:this.suiClient}),r=await i.getDigest({client:this.suiClient}),o=await this.wallet.signTransactionBlock({transactionBlock:n});return this.backend.proposePendingTransaction({msafeAddress:this.address,userAddress:await this.userAddress(),intention:e,digest:r,signature:o.signature})}async simulateRejectTx(){let e=await this.pendingTransaction();if(!e||e.rejectDigest!=="")throw new Error("Already rejected");let i=e.payload,n=(0,Pe.buildRejectTxb)(this.address,i);return this.simulator.simulate({txb:n,sender:this.address})}async rejectCurrentTx(e){let i=await this.pendingTransaction();if(!i||i.rejectDigest!=="")throw new Error("Already rejected");let n=i.payload,r=(0,Pe.buildRejectTxb)(this.address,n),o=await r.getDigest({client:this.suiClient}),s=await r.build({client:this.suiClient}),a=await this.wallet.signTransactionBlock({transactionBlock:s});return this.backend.rejectCurrentTx({msafeAddress:this.address,digest:o,signature:a.signature,...e})}async simulateBuildTransaction(){let e=await this.backend.getNextIntention({msafeAddress:this.address}),i=cc.getAppHelper(e.application);if(!i)throw new Error(`Can't find app helper for application ${e.application}`);console.log("\u{1F680} ~ MSafeAccount ~ simulateBuildTransaction ~ intention:",e);let n=await i.build({network:this.globals.config.network,intentionData:e.intention,txType:e.txType,txSubType:e.txSubType,suiClient:this.globals.suiClient,account:{address:this.address}});return this.simulator.simulate({txb:n,sender:this.address})}async buildNextIntentionAndAddToPending(e){return this.backend.buildNextIntentionAndAddToPending({msafeAddress:this.address,forceBuild:e.forceBuild,gasPrice:e.gasPrice,gasBudget:e.gasBudget})}async skipNextFailedIntention(){return this.backend.skipNextFailedIntention({msafeAddress:this.address})}async executePendingTx(e,i=!1){let n=i?e.rejectVotes:e.votes,r=i?e.rejectPayload:e.payload;if(this.calculateWeightFromVotes(n)<this.info.threshold)throw new Error("Not enough signature");let o=[],s=new Map(n.map(l=>[l.userAddress,l.signature]));for(let l=0;l<this.info.owners.length;l++){let u=this.info.owners[l],f=s.get(u.address);f&&o.push(f)}let a=this.multiSig.combinePartialSignatures(o);return this.suiClient.executeTransactionBlock({transactionBlock:dc(r),signature:a,options:{showEffects:!0,showEvents:!0}})}async dashboard(){return this.backend.getDashboard({msafeAddress:this.address})}calculateWeightFromVotes(e){return this.calculateWeight(e.map(i=>i.userAddress))}calculateWeight(e){let i=0;for(let n=0;n<e.length;n++){let r=this.info.owners.find(o=>(0,Pe.isSameAddress)(o.address,e[n]));r&&(i+=r.weight)}return i}get address(){return this.multiSig.address}get backend(){return this.globals.backend}get wallet(){return this.globals.wallet}async userAddress(){return this.globals.wallet.address()}get suiClient(){return this.globals.suiClient}};var X_=require("@msafe/sui3-utils"),J_=require("@mysten/sui.js/utils");var gc=class{constructor(e){this.globals=e;this.knownPublicKeys=new Map}knownPublicKeys;async getPublicKey(e){let i=this.knownPublicKeys.get(e);if(i)return i;let n=await this._getPublicKey(e);return n&&this.knownPublicKeys.set(e,n),n}async getPublicKeyBatch(e){let i=new Array(e.length).fill(void 0);for(let o=0;o<e.length;o++){let s=e[o];i[o]=this.knownPublicKeys.get(s)}let n=i.map((o,s)=>o===void 0?s:-1).filter(o=>o!==-1);if(n.length===0)return i;let r=await this.globals.backend.getPublicKeyBatch(n.map(o=>e[o]));for(let o=0;o<n.length;o++){let s=n[o];i[s]=r[o]}for(let o=0;o<i.length;o++)i[o]===void 0&&(i[o]=await this.getPublicKeyFromChain(e[o]));for(let o=0;o<e.length;o++)i[o]&&this.knownPublicKeys.set(e[o],i[o]);return i}addPublicKey(e,i){if(!(0,X_.isSameAddress)(e,i.toSuiAddress()))throw new Error("Invalid public key");this.knownPublicKeys.set((0,J_.normalizeSuiAddress)(e),i)}async _getPublicKey(e){let i=await this.getPublicKeyFromBackend(e);if(i)return i;let n=await this.getPublicKeyFromChain(e);if(n)return n}async getPublicKeyFromBackend(e){try{return await this.globals.backend.getPublicKey(e)}catch{return}}async getPublicKeyFromChain(e){return od(this.globals.suiClient,e)}};var _c=class{constructor(e){this.globals=e}async create(e){return this.globals.backend.submitReport(e)}};var rb=require("@mysten/sui.js/client");var ys=require("@msafe/sui3-utils"),ws=ve(require("axios"),1);var bc=class t{constructor(e){this.apiURL=e}_token;async authSign(e){let i=await this.post("/auth/login",e);return this._token=i.data.accessToken,this._token}async verifyToken(e){try{return(await this.get("/auth",{headers:this.headers(e)})).status===200}catch{return!1}}setJWTToken(e){this._token=e}async getPublicKey(e){return(await this.getPublicKeyBatch([e]))[0]}async getPublicKeyBatch(e){let i={userAddressList:e};return(await this.get("/user/public-keys",{params:i,headers:this.headers()})).data?.map(r=>r?ys.PublicKeySerde.de(r):void 0)}async getMSafeAccountInfo(e){let i={msafeAddress:e},n=await this.get("/msafe",{params:i,headers:this.headers()});return t.toMSafeConfig(n.data)}async getUserInfo(){return(await this.get("/user",{headers:this.headers()})).data}async getOwnedMSafeByStatus(e){let i={status:e.status??ys.UserMSafeStatus.active,...e.pagination?{page:e.pagination.page.toString(),limit:e.pagination.limit.toString()}:{}},n=await this.get("/msafe/owned",{params:i,headers:this.headers()});return{data:n.data.data.map(t.toMSafeConfig),meta:n.data.meta}}async updateMSafeStatus(e){let i=e;await this.post("/msafe/status",i,{headers:this.headers()})}async getPendingTransactions(e){return(await this.get("/transaction/pending",{params:e,headers:this.headers()})).data}async getHistoryTransactions(e){return(await this.get("/transaction/history",{params:e,headers:this.headers()})).data}async getFutureIntentions(e){return(await this.get("/transaction/intention",{params:e,headers:this.headers()})).data}async getNextIntention(e){return(await this.get("/transaction/intention/next",{params:e,headers:this.headers()})).data}async getCurrentSequenceNumber(e){return(await this.get("/transaction/sn/current",{params:{msafeAddress:e},headers:this.headers()})).data}async getNextSequenceNumber(e){return(await this.get("/transaction/sn/next",{params:{msafeAddress:e},headers:this.headers()})).data}async createMSafeAccount(e){await this.post("/msafe/create",e,{headers:this.headers()})}async proposeIntention(e){await this.post("/transaction/intention",e,{headers:this.headers()})}async proposePendingTransaction(e){}async rejectCurrentTx(e){await this.post("/transaction/pending/reject",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async voteForTransaction(e){await this.post("/transaction/pending/vote",e,{headers:this.headers()})}async buildNextIntentionAndAddToPending(e){await this.post("/transaction/pending/build",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async proposeIntentionAndBuildVote(e){await this.post("/transaction/intention/build",{...e,gasPrice:e.gasPrice.toString(),gasBudget:e.gasBudget.toString()},{headers:this.headers()})}async skipNextFailedIntention(e){await this.post("/transaction/pending/skip",e,{headers:this.headers()})}async getAddressBookEntries(e){return(await this.get("/address-book",{headers:this.headers(),params:e})).data}async updateAddressBook(e){await this.post("/address-book",e,{headers:this.headers()})}async getAddressBookMode(){return(await this.get("/address-book/mode",{headers:this.headers()})).data}async setAddressBookMode(e){await this.post("/address-book/mode",{mode:e.mode},{headers:this.headers()})}async submitReport(e){await this.post("/report",e)}async getDashboard(e){return(await this.get("/dashboard",{params:e,headers:this.headers()})).data}headers(e){return{Authorization:`Bearer ${e||this._token}`}}static toMSafeConfig(e){return{...e,owners:e.owners.map(i=>({address:i.address,weight:i.weight,publicKey:ys.PublicKeySerde.de({publicKeyEncoded:i.publicKeyEncoded,schema:i.schema})}))}}async get(e,i){let n=this.getFullUrl(e);try{return await ws.default.get(n,i)}catch(r){throw wc.fromError(r)??r}}async post(e,i,n){let r=this.getFullUrl(e);try{return await ws.default.post(r,i,{...n,transformRequest:this.getTransformRequest()})}catch(o){throw wc.fromError(o)??o}}getFullUrl(e){return e.startsWith(this.apiURL)?e:`${this.apiURL}${nd(e,"/")}`}getTransformRequest(){let e=[],{transformRequest:i}=ws.default.defaults;return i?i instanceof Array?e=i:e=[i]:e=[],[n=>JSON.parse(JSON.stringify(n,(r,o)=>typeof o=="bigint"?`${o.toString()}n`:o)),...e]}},wc=class t extends Error{constructor(i){super();this.e=i;Error.captureStackTrace(this,this.constructor)}name;static fromError(i){if(ws.default.isAxiosError(i)&&i?.response?.data&&"message"in i.response.data)return new t(i)}get status(){return this.e.response?.status??void 0}get message(){return`${this.respMessage()??"Unknown resp"}`}respMessage(){if(this.e.response?.data)return(this.e.response?.data).message??void 0}get endpoint(){return this.e.config?.url??""}toString(){return this.message}};var Q_=(o=>(o.local="local",o.unit="unit",o.dev="dev",o.prev="prev",o.prod="prod",o))(Q_||{}),yc="https://fullnode.testnet.sui.io",ud="https://fullnode.mainnet.sui.io",dd="http://127.0.0.1:3000",fd="http://127.0.0.1:3001",Y_="https://sui-dev.m-safe.link",eb="http://13.56.226.148:81",tb="https://sui-preview.m-safe.link",ib="https://sui.m-safe.link",nb=new Map([["unit",{suiClient:{url:yc},backend:{url:dd},syncingURL:fd,network:"sui:testnet"}],["local",{suiClient:{url:yc},backend:{url:dd},syncingURL:fd,network:"sui:testnet"}],["dev",{suiClient:{url:yc},backend:{url:Y_},syncingURL:eb,network:"sui:testnet"}],["prev",{suiClient:{url:ud},backend:{url:tb},syncingURL:"",network:"sui:mainnet"}],["prod",{suiClient:{url:ud},backend:{url:ib},syncingURL:"",network:"sui:mainnet"}]]);function hd(t,e){let i=nb.get(t);if(!i)throw new Error("Unknown environment");return e?.suiClient?.url&&(i.suiClient.url=e.suiClient.url),e?.backend?.url&&(i.backend.url=e.backend.url),i}var vs=class t{backend;suiClient;config;_wallet;constructor(e){this.backend=e.backend,this.suiClient=e.suiClient,this.config=e.config}static async New(e,i){let n=hd(e,i),r=new rb.SuiClient(n.suiClient),o=new bc(n.backend.url);return new t({backend:o,suiClient:r,config:n})}connectWallet(e){this._wallet=e}get wallet(){if(!this._wallet)throw new Error("wallet not connected");return this._wallet}set wallet(e){this._wallet=e}};var vc=class t{constructor(e){this.globals=e}_creationHelper;_publicKeyHelper;static async New(e,i){let n=await vs.New(e,i);return new t(n)}async connectWallet(e){if(e.jwtToken&&await this.backend.verifyToken(e.jwtToken))return this.globals.wallet=e.wallet,this.backend.setJWTToken(e.jwtToken),e.jwtToken;let i=await this.authSign(e.wallet);return this.globals.wallet=e.wallet,this.backend.setJWTToken(i),i}async authSign(e){let i=kc.SigningMessageHelper.loginMessageWithTimestamp(new Date().toUTCString()),n=await e.signPersonalMessage({messageStr:i});return this.backend.authSign({address:await e.address(),message:i,signature:n.signature,walletType:e.walletType})}async userInfo(){return this.globals.backend.getUserInfo()}async ownedMSafe(e){return this.globals.backend.getOwnedMSafeByStatus({status:kc.UserMSafeStatus.active,pagination:e})}async createAccount(e){return this.creationHelper.submitMSafeCreation(e)}getMSafeAccount(e){return new pr(this.globals,e)}async getMSafeAccountFromAddress(e){let i=await this.backend.getMSafeAccountInfo(e);return new pr(this.globals,i)}get creationHelper(){return this._creationHelper||(this._creationHelper=new gr(this.globals,this.publicKeyHelper)),this._creationHelper}get publicKeyHelper(){return this._publicKeyHelper||(this._publicKeyHelper=new gc(this.globals)),this._publicKeyHelper}get config(){return this.globals.config}get backend(){return this.globals.backend}get wallet(){return this.globals.wallet}get AddressBook(){return new _r(this.globals)}get Invitation(){return new Ts(this.globals)}get Report(){return new _c(this.globals)}async walletAddress(){return this.wallet.address()}};
2054
2054
  /*! Bundled license information:
2055
2055
 
2056
2056
  @syntsugar/cc-graph/dist/index.umd.js: