@0xmonaco/mcp-server 0.7.2 → 0.7.3

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.
Files changed (2) hide show
  1. package/dist/bin.js +1 -1
  2. package/package.json +1 -1
package/dist/bin.js CHANGED
@@ -115,5 +115,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
115
115
  - `).slice(1);return{...Y,...V,...X?{chainId:Number(X)}:{},...G?{expirationTime:new Date(G)}:{},...W?{issuedAt:new Date(W)}:{},...D?{notBefore:new Date(D)}:{},...U?{requestId:U}:{},...O?{resources:O}:{},...J?{scheme:J}:{},...Q?{statement:Q}:{}}}var x9$=/^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\/\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\n)(?<address>0x[a-fA-F0-9]{40})\n\n(?:(?<statement>.*)\n\n)?/,f9$=/(?:URI: (?<uri>.+))\n(?:Version: (?<version>.+))\n(?:Chain ID: (?<chainId>\d+))\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\n(?:Issued At: (?<issuedAt>.+))(?:\nExpiration Time: (?<expirationTime>.+))?(?:\nNot Before: (?<notBefore>.+))?(?:\nRequest ID: (?<requestId>.+))?/;g1();E8();function xu($){let{address:J,domain:Q,message:Y,nonce:X,scheme:G,time:W=new Date}=$;if(Q&&Y.domain!==Q)return!1;if(X&&Y.nonce!==X)return!1;if(G&&Y.scheme!==G)return!1;if(Y.expirationTime&&W>=Y.expirationTime)return!1;if(Y.notBefore&&W<Y.notBefore)return!1;try{if(!Y.address)return!1;if(!X4(Y.address,{strict:!1}))return!1;if(J&&!d1(Y.address,J))return!1}catch{return!1}return!0}async function fu($,J){let{address:Q,domain:Y,message:X,nonce:G,scheme:W,signature:D,time:U=new Date,...V}=J,O=ku(X);if(!O.address)return!1;if(!xu({address:Q,domain:Y,message:O,nonce:G,scheme:W,time:U}))return!1;let N=P5(X);return LX($,{address:O.address,hash:N,signature:D,...V})}async function v5($,{serializedTransaction:J}){return $.request({method:"eth_sendRawTransaction",params:[J]},{retryCount:0})}u1();async function R5($,{serializedTransaction:J,throwOnReceiptRevert:Q,timeout:Y}){let X=await $.request({method:"eth_sendRawTransactionSync",params:Y?[J,y(Y)]:[J]},{retryCount:0}),W=($.chain?.formatters?.transactionReceipt?.format||tM)(X);if(W.status==="reverted"&&Q)throw new SW({receipt:W});return W}function bu($){return{call:(J)=>r0($,J),createAccessList:(J)=>TM($,J),createBlockFilter:()=>zy($),createContractEventFilter:(J)=>CM($,J),createEventFilter:(J)=>kM($,J),createPendingTransactionFilter:()=>xM($),estimateContractGas:(J)=>Mh($,J),estimateGas:(J)=>B5($,J),getBalance:(J)=>zh($,J),getBlobBaseFee:()=>Nh($),getBlock:(J)=>X6($,J),getBlockNumber:(J)=>s0($,J),getBlockTransactionCount:(J)=>wh($,J),getBytecode:(J)=>JD($,J),getChainId:()=>j6($),getCode:(J)=>JD($,J),getContractEvents:(J)=>rM($,J),getEip712Domain:(J)=>Ih($,J),getEnsAddress:(J)=>Yy($,J),getEnsAvatar:(J)=>Vy($,J),getEnsName:(J)=>Oy($,J),getEnsResolver:(J)=>My($,J),getEnsText:(J)=>RM($,J),getFeeHistory:(J)=>Bh($,J),estimateFeesPerGas:(J)=>Xh($,J),getFilterChanges:(J)=>HX($,J),getFilterLogs:(J)=>Zh($,J),getGasPrice:()=>H5($),getLogs:(J)=>F5($,J),getProof:(J)=>jh($,J),estimateMaxPriorityFeePerGas:(J)=>Qh($,J),fillTransaction:(J)=>L5($,J),getStorageAt:(J)=>Sh($,J),getTransaction:(J)=>j5($,J),getTransactionConfirmations:(J)=>_h($,J),getTransactionCount:(J)=>w5($,J),getTransactionReceipt:(J)=>S5($,J),multicall:(J)=>Eh($,J),prepareTransactionRequest:(J)=>a0($,J),readContract:(J)=>i4($,J),sendRawTransaction:(J)=>v5($,J),sendRawTransactionSync:(J)=>R5($,J),simulate:(J)=>QD($,J),simulateBlocks:(J)=>QD($,J),simulateCalls:(J)=>Ju($,J),simulateContract:(J)=>Qu($,J),verifyHash:(J)=>LX($,J),verifyMessage:(J)=>Bu($,J),verifySiweMessage:(J)=>fu($,J),verifyTypedData:(J)=>Eu($,J),uninstallFilter:(J)=>AX($,J),waitForTransactionReceipt:(J)=>Hz($,J),watchBlocks:(J)=>vu($,J),watchBlockNumber:(J)=>qz($,J),watchContractEvent:(J)=>Ru($,J),watchEvent:(J)=>Tu($,J),watchPendingTransactions:(J)=>Cu($,J)}}function OF($){let{key:J="public",name:Q="Public Client"}=$;return E3({...$,key:J,name:Q,type:"publicClient"}).extend(bu)}w$();async function gu($,{chain:J}){let{id:Q,name:Y,nativeCurrency:X,rpcUrls:G,blockExplorers:W}=J;await $.request({method:"wallet_addEthereumChain",params:[{chainId:y(Q),chainName:Y,nativeCurrency:X,rpcUrls:G.default.http,blockExplorerUrls:W?Object.values(W).map(({url:D})=>D):void 0}]},{dedupe:!0,retryCount:0})}SM();x$();class H6 extends R{constructor({docsPath:$}={}){super(["Could not find an Account to execute with this Action.","Please provide an Account with the `account` argument on the Action, or by supplying an `account` to the Client."].join(`
116
116
  `),{docsPath:$,docsSlug:"account",name:"AccountNotFoundError"})}}class A0 extends R{constructor({docsPath:$,metaMessages:J,type:Q}){super(`Account type "${Q}" is not supported.`,{docsPath:$,metaMessages:J,name:"AccountTypeNotSupportedError"})}}x$();ZW();function T5({chain:$,currentChainId:J}){if(!$)throw new JB;if(J!==$.id)throw new $B({chain:$,currentChainId:J})}rJ();N8();o0();var MF=new q1(128);async function BX($,J){let{account:Q=$.account,assertChainId:Y=!0,chain:X=$.chain,accessList:G,authorizationList:W,blobs:D,data:U,dataSuffix:V=typeof $.dataSuffix==="string"?$.dataSuffix:$.dataSuffix?.value,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,type:Z,value:L,..._}=J;if(typeof Q>"u")throw new H6({docsPath:"/docs/actions/wallet/sendTransaction"});let B=Q?_$(Q):null;try{Q6(J);let F=await(async()=>{if(J.to)return J.to;if(J.to===null)return;if(W&&W.length>0)return await NX({authorization:W[0]}).catch(()=>{throw new R("`to` is required. Could not infer from `authorizationList`.")});return})();if(B?.type==="json-rpc"||B===null){let S;if(X!==null){if(S=await p($,j6,"getChainId")({}),Y)T5({currentChainId:S,chain:X})}let v=$.chain?.formatters?.transactionRequest?.format,h=(v||Z6)({...n1(_,{format:v}),accessList:G,account:B,authorizationList:W,blobs:D,chainId:S,data:U?Z4([U,V??"0x"]):U,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,to:F,type:Z,value:L},"sendTransaction"),o=MF.get($.uid),g=o?"wallet_sendTransaction":"eth_sendTransaction";try{return await $.request({method:g,params:[h]},{retryCount:0})}catch(Q$){if(o===!1)throw Q$;let t=Q$;if(t.name==="InvalidInputRpcError"||t.name==="InvalidParamsRpcError"||t.name==="MethodNotFoundRpcError"||t.name==="MethodNotSupportedRpcError")return await $.request({method:"wallet_sendTransaction",params:[h]},{retryCount:0}).then((K$)=>{return MF.set($.uid,!0),K$}).catch((K$)=>{let m=K$;if(m.name==="MethodNotFoundRpcError"||m.name==="MethodNotSupportedRpcError")throw MF.set($.uid,!1),t;throw m});throw t}}if(B?.type==="local"){let S=await p($,a0,"prepareTransactionRequest")({account:B,accessList:G,authorizationList:W,blobs:D,chain:X,data:U?Z4([U,V??"0x"]):U,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,nonceManager:B.nonceManager,parameters:[...$D,"sidecars"],type:Z,value:L,..._,to:F}),v=X?.serializers?.transaction,k=await B.signTransaction(S,{serializer:v});return await p($,v5,"sendRawTransaction")({serializedTransaction:k})}if(B?.type==="smart")throw new A0({metaMessages:["Consider using the `sendUserOperation` Action instead."],docsPath:"/docs/actions/bundler/sendUserOperation",type:"smart"});throw new A0({docsPath:"/docs/actions/wallet/sendTransaction",type:B?.type})}catch(F){if(F instanceof A0)throw F;throw qX(F,{...J,account:B,chain:J.chain||void 0})}}function yu($,J){let{abi:Q,args:Y,bytecode:X,...G}=J,W=_8({abi:Q,args:Y,bytecode:X});return BX($,{...G,...G.authorizationList?{to:null}:{},data:W})}oQ();async function hu($){if($.account?.type==="local")return[$.account.address];return(await $.request({method:"eth_accounts"},{dedupe:!0})).map((Q)=>xJ(Q))}rQ();e4();x$();aY();w1();e4();w$();var zF="0x5792579257925792579257925792579257925792579257925792579257925792",NF=y(0,{size:32});async function wz($,J){let{account:Q=$.account,chain:Y=$.chain,experimental_fallback:X,experimental_fallbackDelay:G=32,forceAtomic:W=!1,id:D,version:U="2.0.0"}=J,V=Q?_$(Q):null,O=J.capabilities;if($.dataSuffix&&!J.capabilities?.dataSuffix)if(typeof $.dataSuffix==="string")O={...J.capabilities,dataSuffix:{value:$.dataSuffix,optional:!0}};else O={...J.capabilities,dataSuffix:{value:$.dataSuffix.value,...$.dataSuffix.required?{}:{optional:!0}}};let M=J.calls.map((N)=>{let q=N,w=q.abi?S4({abi:q.abi,functionName:q.functionName,args:q.args}):q.data;return{data:q.dataSuffix&&w?Z4([w,q.dataSuffix]):w,to:q.to,value:q.value?y(q.value):void 0}});try{let N=await $.request({method:"wallet_sendCalls",params:[{atomicRequired:W,calls:M,capabilities:O,chainId:y(Y.id),from:V?.address,id:D,version:U}]},{retryCount:0});if(typeof N==="string")return{id:N};return N}catch(N){let q=N;if(X&&(q.name==="MethodNotFoundRpcError"||q.name==="MethodNotSupportedRpcError"||q.name==="UnknownRpcError"||q.details.toLowerCase().includes("does not exist / is not available")||q.details.toLowerCase().includes("missing or invalid. request()")||q.details.toLowerCase().includes("did not match any variant of untagged enum")||q.details.toLowerCase().includes("account upgraded to unsupported contract")||q.details.toLowerCase().includes("eip-7702 not supported")||q.details.toLowerCase().includes("unsupported wc_ method")||q.details.toLowerCase().includes("feature toggled misconfigured")||q.details.toLowerCase().includes("jsonrpcengine: response has no error or result for request"))){if(O){if(Object.values(O).some((_)=>!_.optional))throw new QX(new R("non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`.",{details:"non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`."}))}if(W&&M.length>1)throw new XX(new R("`forceAtomic` is not supported on fallback to `eth_sendTransaction`.",{details:"`forceAtomic` is not supported on fallback to `eth_sendTransaction`."}));let w=[];for(let L of M){let _=BX($,{account:V,chain:Y,data:L.data,to:L.to,value:L.value?g4(L.value):void 0});if(w.push(_),G>0)await new Promise((B)=>setTimeout(B,G))}let I=await Promise.allSettled(w);if(I.every((L)=>L.status==="rejected"))throw I[0].reason;let Z=I.map((L)=>{if(L.status==="fulfilled")return L.value;return NF});return{id:Z4([...Z,y(Y.id,{size:32}),zF])}}throw qX(N,{...J,account:V,chain:J.chain})}}async function Az($,J){async function Q(O){if(O.endsWith(zF.slice(2))){let N=s4(o3(O,-64,-32)),q=o3(O,0,-64).slice(2).match(/.{1,64}/g),w=await Promise.all(q.map((Z)=>NF.slice(2)!==Z?$.request({method:"eth_getTransactionReceipt",params:[`0x${Z}`]},{dedupe:!0}):void 0)),I=(()=>{if(w.some((Z)=>Z===null))return 100;if(w.every((Z)=>Z?.status==="0x1"))return 200;if(w.every((Z)=>Z?.status==="0x0"))return 500;return 600})();return{atomic:!1,chainId:C4(N),receipts:w.filter(Boolean),status:I,version:"2.0.0"}}return $.request({method:"wallet_getCallsStatus",params:[O]})}let{atomic:Y=!1,chainId:X,receipts:G,version:W="2.0.0",...D}=await Q(J.id),[U,V]=(()=>{let O=D.status;if(O>=100&&O<200)return["pending",O];if(O>=200&&O<300)return["success",O];if(O>=300&&O<700)return["failure",O];if(O==="CONFIRMED")return["success",200];if(O==="PENDING")return["pending",100];return[void 0,O]})();return{...D,atomic:Y,chainId:X?C4(X):void 0,receipts:G?.map((O)=>({...O,blockNumber:g4(O.blockNumber),gasUsed:g4(O.gasUsed),status:kZ[O.status]}))??[],statusCode:V,status:U,version:W}}w$();async function uu($,J={}){let{account:Q=$.account,chainId:Y}=J,X=Q?_$(Q):void 0,G=Y?[X?.address,[y(Y)]]:[X?.address],W=await $.request({method:"wallet_getCapabilities",params:G}),D={};for(let[U,V]of Object.entries(W)){D[Number(U)]={};for(let[O,M]of Object.entries(V)){if(O==="addSubAccount")O="unstable_addSubAccount";D[Number(U)][O]=M}}return typeof Y==="number"?D[Y]:D}async function mu($){return await $.request({method:"wallet_getPermissions"},{dedupe:!0})}E8();async function Iz($,J){let{account:Q=$.account,chainId:Y,nonce:X}=J;if(!Q)throw new H6({docsPath:"/docs/eip7702/prepareAuthorization"});let G=_$(Q),W=(()=>{if(!J.executor)return;if(J.executor==="self")return J.executor;return _$(J.executor)})(),D={address:J.contractAddress??J.address,chainId:Y,nonce:X};if(typeof D.chainId>"u")D.chainId=$.chain?.id??await p($,j6,"getChainId")({});if(typeof D.nonce>"u"){if(D.nonce=await p($,w5,"getTransactionCount")({address:G.address,blockTag:"pending"}),W==="self"||W?.address&&d1(W.address,G.address))D.nonce+=1}return D}oQ();async function lu($){return(await $.request({method:"eth_requestAccounts"},{dedupe:!0,retryCount:0})).map((Q)=>wY(Q))}async function nu($,J){return $.request({method:"wallet_requestPermissions",params:[J]},{retryCount:0})}x$();x$();class qF extends R{constructor($){super(`Call bundle failed with status: ${$.statusCode}`,{name:"BundleFailedError"});Object.defineProperty(this,"result",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.result=$}}async function Lz($,J){let{id:Q,pollingInterval:Y=$.pollingInterval,status:X=({statusCode:I})=>I===200||I>=300,retryCount:G=4,retryDelay:W=({count:I})=>~~(1<<I)*200,timeout:D=60000,throwOnFailure:U=!1}=J,V=i$(["waitForCallsStatus",$.uid,Q]),{promise:O,resolve:M,reject:N}=U5(),q,w=_6(V,{resolve:M,reject:N},(I)=>{let Z=p1(async()=>{let L=(_)=>{clearTimeout(q),Z(),_(),w()};try{let _=await y8(async()=>{let B=await p($,Az,"getCallsStatus")({id:Q});if(U&&B.status==="failure")throw new qF(B);return B},{retryCount:G,delay:W});if(!X(_))return;L(()=>I.resolve(_))}catch(_){L(()=>I.reject(_))}},{interval:Y,emitOnBegin:!0});return Z});return q=D?setTimeout(()=>{w(),clearTimeout(q),N(new du({id:Q}))},D):void 0,await O}class du extends R{constructor({id:$}){super(`Timed out while waiting for call bundle with id "${$}" to be confirmed.`,{name:"WaitForCallsStatusTimeoutError"})}}async function pu($,J){let{chain:Q=$.chain}=J,Y=J.timeout??Math.max((Q?.blockTime??0)*3,5000),X=await p($,wz,"sendCalls")(J);return await p($,Lz,"waitForCallsStatus")({...J,id:X.id,timeout:Y})}x$();u1();rJ();N8();o0();var HF=new q1(128);async function Bz($,J){let{account:Q=$.account,assertChainId:Y=!0,chain:X=$.chain,accessList:G,authorizationList:W,blobs:D,data:U,dataSuffix:V=typeof $.dataSuffix==="string"?$.dataSuffix:$.dataSuffix?.value,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,pollingInterval:Z,throwOnReceiptRevert:L,type:_,value:B,...F}=J,S=J.timeout??Math.max((X?.blockTime??0)*3,5000);if(typeof Q>"u")throw new H6({docsPath:"/docs/actions/wallet/sendTransactionSync"});let v=Q?_$(Q):null;try{Q6(J);let k=await(async()=>{if(J.to)return J.to;if(J.to===null)return;if(W&&W.length>0)return await NX({authorization:W[0]}).catch(()=>{throw new R("`to` is required. Could not infer from `authorizationList`.")});return})();if(v?.type==="json-rpc"||v===null){let h;if(X!==null){if(h=await p($,j6,"getChainId")({}),Y)T5({currentChainId:h,chain:X})}let o=$.chain?.formatters?.transactionRequest?.format,Q$=(o||Z6)({...n1(F,{format:o}),accessList:G,account:v,authorizationList:W,blobs:D,chainId:h,data:U?Z4([U,V??"0x"]):U,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,to:k,type:_,value:B},"sendTransaction"),t=HF.get($.uid),K$=t?"wallet_sendTransaction":"eth_sendTransaction",m=await(async()=>{try{return await $.request({method:K$,params:[Q$]},{retryCount:0})}catch(u){if(t===!1)throw u;let d=u;if(d.name==="InvalidInputRpcError"||d.name==="InvalidParamsRpcError"||d.name==="MethodNotFoundRpcError"||d.name==="MethodNotSupportedRpcError")return await $.request({method:"wallet_sendTransaction",params:[Q$]},{retryCount:0}).then((b)=>{return HF.set($.uid,!0),b}).catch((b)=>{let i=b;if(i.name==="MethodNotFoundRpcError"||i.name==="MethodNotSupportedRpcError")throw HF.set($.uid,!1),d;throw i});throw d}})(),T=await p($,Hz,"waitForTransactionReceipt")({checkReplacement:!1,hash:m,pollingInterval:Z,timeout:S});if(L&&T.status==="reverted")throw new SW({receipt:T});return T}if(v?.type==="local"){let h=await p($,a0,"prepareTransactionRequest")({account:v,accessList:G,authorizationList:W,blobs:D,chain:X,data:U?Z4([U,V??"0x"]):U,gas:O,gasPrice:M,maxFeePerBlobGas:N,maxFeePerGas:q,maxPriorityFeePerGas:w,nonce:I,nonceManager:v.nonceManager,parameters:[...$D,"sidecars"],type:_,value:B,...F,to:k}),o=X?.serializers?.transaction,g=await v.signTransaction(h,{serializer:o});return await p($,R5,"sendRawTransactionSync")({serializedTransaction:g,throwOnReceiptRevert:L,timeout:J.timeout})}if(v?.type==="smart")throw new A0({metaMessages:["Consider using the `sendUserOperation` Action instead."],docsPath:"/docs/actions/bundler/sendUserOperation",type:"smart"});throw new A0({docsPath:"/docs/actions/wallet/sendTransactionSync",type:v?.type})}catch(k){if(k instanceof A0)throw k;throw qX(k,{...J,account:v,chain:J.chain||void 0})}}async function iu($,J){let{id:Q}=J;await $.request({method:"wallet_showCallsStatus",params:[Q]});return}async function cu($,J){let{account:Q=$.account}=J;if(!Q)throw new H6({docsPath:"/docs/eip7702/signAuthorization"});let Y=_$(Q);if(!Y.signAuthorization)throw new A0({docsPath:"/docs/eip7702/signAuthorization",metaMessages:["The `signAuthorization` Action does not support JSON-RPC Accounts."],type:Y.type});let X=await Iz($,J);return Y.signAuthorization(X)}w$();async function ou($,{account:J=$.account,message:Q}){if(!J)throw new H6({docsPath:"/docs/actions/wallet/signMessage"});let Y=_$(J);if(Y.signMessage)return Y.signMessage({message:Q});let X=(()=>{if(typeof Q==="string")return V0(Q);if(Q.raw instanceof Uint8Array)return P4(Q.raw);return Q.raw})();return $.request({method:"personal_sign",params:[X,Y.address]},{retryCount:0})}w$();rJ();o0();async function ru($,J){let{account:Q=$.account,chain:Y=$.chain,...X}=J;if(!Q)throw new H6({docsPath:"/docs/actions/wallet/signTransaction"});let G=_$(Q);Q6({account:G,...J});let W=await p($,j6,"getChainId")({});if(Y!==null)T5({currentChainId:W,chain:Y});let U=(Y?.formatters||$.chain?.formatters)?.transactionRequest?.format||Z6;if(G.signTransaction)return G.signTransaction({...X,chainId:W},{serializer:$.chain?.serializers?.transaction});return await $.request({method:"eth_signTransaction",params:[{...U({...X,account:G},"signTransaction"),chainId:y(W),from:G.address}]},{retryCount:0})}async function tu($,J){let{account:Q=$.account,domain:Y,message:X,primaryType:G}=J;if(!Q)throw new H6({docsPath:"/docs/actions/wallet/signTypedData"});let W=_$(Q),D={EIP712Domain:zz({domain:Y}),...J.types};if(Mz({domain:Y,message:X,primaryType:G,types:D}),W.signTypedData)return W.signTypedData({domain:Y,message:X,primaryType:G,types:D});let U=Zu({domain:Y,message:X,primaryType:G,types:D});return $.request({method:"eth_signTypedData_v4",params:[W.address,U]},{retryCount:0})}w$();async function au($,{id:J}){await $.request({method:"wallet_switchEthereumChain",params:[{chainId:y(J)}]},{retryCount:0})}async function su($,J){return await $.request({method:"wallet_watchAsset",params:J},{retryCount:0})}w1();async function h8($,J){return h8.internal($,BX,"sendTransaction",J)}(function($){async function J(Q,Y,X,G){let{abi:W,account:D=Q.account,address:U,args:V,functionName:O,...M}=G;if(typeof D>"u")throw new H6({docsPath:"/docs/contract/writeContract"});let N=D?_$(D):null,q=S4({abi:W,args:V,functionName:O});try{return await p(Q,Y,X)({data:q,to:U,account:N,...M})}catch(w){throw A1(w,{abi:W,address:U,args:V,docsPath:"/docs/contract/writeContract",functionName:O,sender:N?.address})}}$.internal=J})(h8||(h8={}));async function eu($,J){return h8.internal($,Bz,"sendTransactionSync",J)}function $m($){return{addChain:(J)=>gu($,J),deployContract:(J)=>yu($,J),fillTransaction:(J)=>L5($,J),getAddresses:()=>hu($),getCallsStatus:(J)=>Az($,J),getCapabilities:(J)=>uu($,J),getChainId:()=>j6($),getPermissions:()=>mu($),prepareAuthorization:(J)=>Iz($,J),prepareTransactionRequest:(J)=>a0($,J),requestAddresses:()=>lu($),requestPermissions:(J)=>nu($,J),sendCalls:(J)=>wz($,J),sendCallsSync:(J)=>pu($,J),sendRawTransaction:(J)=>v5($,J),sendRawTransactionSync:(J)=>R5($,J),sendTransaction:(J)=>BX($,J),sendTransactionSync:(J)=>Bz($,J),showCallsStatus:(J)=>iu($,J),signAuthorization:(J)=>cu($,J),signMessage:(J)=>ou($,J),signTransaction:(J)=>ru($,J),signTypedData:(J)=>tu($,J),switchChain:(J)=>au($,J),waitForCallsStatus:(J)=>Lz($,J),watchAsset:(J)=>su($,J),writeContract:(J)=>h8($,J),writeContractSync:(J)=>eu($,J)}}function wF($){let{key:J="wallet",name:Q="Wallet Client",transport:Y}=$;return E3({...$,key:J,name:Q,transport:Y,type:"walletClient"}).extend($m)}L8();x$();class AF extends R{constructor(){super("No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.",{docsPath:"/docs/clients/intro",name:"UrlRequiredError"})}}dB();L8();function Jm($,{errorInstance:J=Error("timed out"),timeout:Q,signal:Y}){return new Promise((X,G)=>{(async()=>{let W;try{let D=new AbortController;if(Q>0)W=setTimeout(()=>{if(Y)D.abort();else G(J)},Q);X(await $({signal:D?.signal||null}))}catch(D){if(D?.name==="AbortError")G(J);G(D)}finally{clearTimeout(W)}})()})}function b9$(){return{current:0,take(){return this.current++},reset(){this.current=0}}}var IF=b9$();function Qm($,J={}){let{url:Q,headers:Y}=g9$($);return{async request(X){let{body:G,fetchFn:W=J.fetchFn??fetch,onRequest:D=J.onRequest,onResponse:U=J.onResponse,timeout:V=J.timeout??1e4}=X,O={...J.fetchOptions??{},...X.fetchOptions??{}},{headers:M,method:N,signal:q}=O;try{let w=await Jm(async({signal:Z})=>{let L={...O,body:Array.isArray(G)?i$(G.map((S)=>({jsonrpc:"2.0",id:S.id??IF.take(),...S}))):i$({jsonrpc:"2.0",id:G.id??IF.take(),...G}),headers:{...Y,"Content-Type":"application/json",...M},method:N||"POST",signal:q||(V>0?Z:null)},_=new Request(Q,L),B=await D?.(_,L)??{...L,url:Q};return await W(B.url??Q,B)},{errorInstance:new qM({body:G,url:Q}),timeout:V,signal:!0});if(U)await U(w);let I;if(w.headers.get("Content-Type")?.startsWith("application/json"))I=await w.json();else{I=await w.text();try{I=JSON.parse(I||"{}")}catch(Z){if(w.ok)throw Z;I={error:I}}}if(!w.ok)throw new N0({body:G,details:i$(I.error)||w.statusText,headers:w.headers,status:w.status,url:Q});return I}catch(w){if(w instanceof N0)throw w;if(w instanceof qM)throw w;throw new N0({body:G,cause:w,url:Q})}}}}function g9$($){try{let J=new URL($),Q=(()=>{if(J.username){let Y=`${decodeURIComponent(J.username)}:${decodeURIComponent(J.password)}`;return J.username="",J.password="",{url:J.toString(),headers:{Authorization:`Basic ${btoa(Y)}`}}}return})();return{url:J.toString(),...Q}}catch{return{url:$}}}x$();L8();aY();w$();N8();var Zz=new q1(8192);function Xm($,{enabled:J=!0,id:Q}){if(!J||!Q)return $();if(Zz.get(Q))return Zz.get(Q);let Y=$().finally(()=>Zz.delete(Q));return Zz.set(Q,Y),Y}function Ym($,J={}){return async(Q,Y={})=>{let{dedupe:X=!1,methods:G,retryDelay:W=150,retryCount:D=3,uid:U}={...J,...Y},{method:V}=Q;if(G?.exclude?.includes(V))throw new JX(Error("method not supported"),{method:V});if(G?.include&&!G.include.includes(V))throw new JX(Error("method not supported"),{method:V});let O=X?V0(`${U}.${i$(Q)}`):void 0;return Xm(()=>y8(async()=>{try{return await $(Q)}catch(M){let N=M;switch(N.code){case CY.code:throw new CY(N);case kY.code:throw new kY(N);case xY.code:throw new xY(N,{method:Q.method});case fY.code:throw new fY(N);case mJ.code:throw new mJ(N);case m1.code:throw new m1(N);case bY.code:throw new bY(N);case gY.code:throw new gY(N);case yY.code:throw new yY(N);case JX.code:throw new JX(N,{method:Q.method});case B8.code:throw new B8(N);case hY.code:throw new hY(N);case Z8.code:throw new Z8(N);case uY.code:throw new uY(N);case mY.code:throw new mY(N);case lY.code:throw new lY(N);case nY.code:throw new nY(N);case dY.code:throw new dY(N);case QX.code:throw new QX(N);case pY.code:throw new pY(N);case iY.code:throw new iY(N);case cY.code:throw new cY(N);case oY.code:throw new oY(N);case rY.code:throw new rY(N);case XX.code:throw new XX(N);case 5000:throw new Z8(N);case tY.code:throw new tY(N);default:if(M instanceof R)throw M;throw new IB(N)}}},{delay:({count:M,error:N})=>{if(N&&N instanceof N0){let q=N?.headers?.get("Retry-After");if(q?.match(/\d/))return Number.parseInt(q,10)*1000}return~~(1<<M)*W},retryCount:D,shouldRetry:({error:M})=>y9$(M)}),{enabled:X,id:O})}}function y9$($){if("code"in $&&typeof $.code==="number"){if($.code===-1)return!0;if($.code===B8.code)return!0;if($.code===mJ.code)return!0;return!1}if($ instanceof N0&&$.status){if($.status===403)return!0;if($.status===408)return!0;if($.status===413)return!0;if($.status===429)return!0;if($.status===500)return!0;if($.status===502)return!0;if($.status===503)return!0;if($.status===504)return!0;return!1}return!0}function Gm({key:$,methods:J,name:Q,request:Y,retryCount:X=3,retryDelay:G=150,timeout:W,type:D},U){let V=_3();return{config:{key:$,methods:J,name:Q,request:Y,retryCount:X,retryDelay:G,timeout:W,type:D},request:Ym(Y,{methods:J,retryCount:X,retryDelay:G,uid:V}),value:U}}function OD($,J={}){let{batch:Q,fetchFn:Y,fetchOptions:X,key:G="http",methods:W,name:D="HTTP JSON-RPC",onFetchRequest:U,onFetchResponse:V,retryDelay:O,raw:M}=J;return({chain:N,retryCount:q,timeout:w})=>{let{batchSize:I=1000,wait:Z=0}=typeof Q==="object"?Q:{},L=J.retryCount??q,_=w??J.timeout??1e4,B=$||N?.rpcUrls.default.http[0];if(!B)throw new AF;let F=Qm(B,{fetchFn:Y,fetchOptions:X,onRequest:U,onResponse:V,timeout:_});return Gm({key:G,methods:W,name:D,async request({method:S,params:v}){let k={method:S,params:v},{schedule:h}=EM({id:B,wait:Z,shouldSplitBatch(t){return t.length>I},fn:(t)=>F.request({body:t}),sort:(t,K$)=>t.id-K$.id}),o=async(t)=>Q?h(t):[await F.request({body:t})],[{error:g,result:Q$}]=await o(k);if(M)return{error:g,result:Q$};if(g)throw new I8({body:k,error:g,url:B});return Q$},retryCount:L,retryDelay:O,timeout:_,type:"http"},{fetchOptions:X,url:B})}}PJ();function Fz($){let J={formatters:void 0,fees:void 0,serializers:void 0,...$};function Q(Y){return(X)=>{let G=typeof X==="function"?X(Y):X,W={...Y,...G};return Object.assign(W,{extend:Q(W)})}}return Object.assign(J,{extend:Q(J)})}var MD=Fz({id:1329,name:"Sei Network",nativeCurrency:{name:"Sei",symbol:"SEI",decimals:18},rpcUrls:{default:{http:["https://evm-rpc.sei-apis.com/"],webSocket:["wss://evm-ws.sei-apis.com/"]}},blockExplorers:{default:{name:"Seitrace",url:"https://seitrace.com",apiUrl:"https://seitrace.com/pacific-1/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11"}}});var zD=Fz({id:1328,name:"Sei Testnet",nativeCurrency:{name:"Sei",symbol:"SEI",decimals:18},rpcUrls:{default:{http:["https://evm-rpc-testnet.sei-apis.com"],webSocket:["wss://evm-ws-testnet.sei-apis.com"]}},blockExplorers:{default:{name:"Seitrace",url:"https://seitrace.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:98697651}},testnet:!0});var Wm=S1(F3(),1);class x4{apiUrl;accessToken;retryOptions;constructor($,J){this.apiUrl=$,this.retryOptions={maxRetries:J?.maxRetries??3,baseDelayMs:J?.baseDelayMs??1000}}setAccessToken($){this.accessToken=$}getAccessToken(){return this.accessToken}parseRequestBody($){if(!$)return;if(typeof $==="string")try{return JSON.parse($)}catch{return $}if($ instanceof FormData){let J={};return $.forEach((Q,Y)=>{J[Y]=Q instanceof File?`[File: ${Q.name}]`:Q}),J}if($ instanceof URLSearchParams){let J={};return $.forEach((Q,Y)=>{J[Y]=Q}),J}if($ instanceof Blob)return{type:"[Blob]",size:$.size,contentType:$.type};if($ instanceof ArrayBuffer||ArrayBuffer.isView($))return{type:"[ArrayBuffer]",size:$ instanceof ArrayBuffer?$.byteLength:$.byteLength};if(typeof ReadableStream<"u"&&$ instanceof ReadableStream)return{type:"[ReadableStream]",note:"Stream body not captured for logging"};return{type:"[Unknown]",bodyType:typeof $}}extractResponseMetadata($){if(!$)return{};let J=$.get("x-request-id")||$.get("request-id")||$.get("x-correlation-id")||void 0,Q=$.get("retry-after"),Y;if(Q!==null){let X=Number.parseInt(Q,10);Y=Number.isNaN(X)?void 0:X}return{requestId:J,retryAfter:Y}}async executeRequest($,J,Q,Y){let X;try{X=await fetch($,Q)}catch(U){throw new f6(`Network request failed for ${J}`,{endpoint:$,cause:U instanceof Error?U:Error(String(U)),requestBody:Y})}let G,W=X.headers?.get("content-type")||"unknown",D=X.clone?X.clone():X;try{G=await X.json()}catch(U){let V;try{V=await D.text()}catch{V="[Unable to read response body]"}if(!X.ok){let O=`API request failed: ${X.status}. Response is not JSON (Content-Type: ${W})`,{requestId:M,retryAfter:N}=this.extractResponseMetadata(X.headers);throw new f6(O,{endpoint:$,statusCode:X.status,responseBody:{rawResponse:V.substring(0,500),contentType:W,parseError:U instanceof Error?U.message:String(U)},cause:U instanceof Error?U:void 0,requestBody:Y,requestId:M,retryAfter:N})}throw new f6(`Expected JSON response but received ${W}`,{endpoint:$,statusCode:X.status,responseBody:{rawResponse:V.substring(0,500),contentType:W},cause:U instanceof Error?U:void 0,requestBody:Y})}if(!X.ok){let U=G!==null&&typeof G==="object"?G:void 0,V=(typeof U?.message==="string"?U.message:void 0)||(typeof U?.error==="string"?U.error:void 0)||`API request failed: ${X.status}`,{requestId:O,retryAfter:M}=this.extractResponseMetadata(X.headers);throw new f6(V,{endpoint:$,statusCode:X.status,responseBody:G,requestBody:Y,requestId:O,retryAfter:M})}return G}async makeAuthenticatedRequest($,J={}){if(!this.accessToken)throw new f6("Access token not set. Call setAccessToken() first.",{endpoint:`${this.apiUrl}${$}`,statusCode:Wm.StatusCodes.UNAUTHORIZED});let Q=`${this.apiUrl}${$}`,Y=this.parseRequestBody(J.body);return this.executeRequest(Q,$,{...J,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.accessToken}`,...J.headers}},Y)}async makePublicRequest($,J={}){let Q=`${this.apiUrl}${$}`,Y=this.parseRequestBody(J.body);return this.executeRequest(Q,$,{...J,headers:{"Content-Type":"application/json",...J.headers}},Y)}}class jz extends x4{async getApplicationConfig(){let $=await this.makeAuthenticatedRequest("/api/v1/applications/config",{method:"GET"});return{id:$.id,name:$.name,allowedOrigins:$.allowed_origins,webhookUrl:$.webhook_url,vaultContractAddress:$.vault_contract_address,clientId:$.client_id}}}var LF=A.object({trading_pair_id:A.string().trim().min(1,"Trading pair ID is required and cannot be empty"),side:A.enum(["BUY","SELL"],{message:"Order side is required and must be either 'BUY' or 'SELL'"}),price:A.string().trim().min(1,"Price is required and cannot be empty").refine(($)=>!Number.isNaN(Number($)),"Price must be a valid number").refine(($)=>Number($)>0,"Price must be greater than 0"),quantity:A.string().trim().min(1,"Quantity is required and cannot be empty").refine(($)=>!Number.isNaN(Number($)),"Quantity must be a valid number").refine(($)=>Number($)>0,"Quantity must be greater than 0"),order_type:A.enum(["LIMIT","MARKET"]).optional(),slippage_tolerance_bps:A.number().int().min(0,"Slippage tolerance must be between 0 and 1000 bps").max(1000,"Slippage tolerance must be between 0 and 1000 bps").optional()}).superRefine(($,J)=>{if($.slippage_tolerance_bps!==void 0&&$.order_type!=="MARKET")J.addIssue({code:A.ZodIssueCode.custom,message:"slippage_tolerance_bps is only valid when order_type is MARKET",path:["slippage_tolerance_bps"]})}),h9$=A.object({application_name:A.string().nullable().optional(),application_taker_fee:A.string(),application_taker_fee_bps:A.number(),buy_order_lock_amount:A.string().nullable().optional(),maker_total_receipt:A.string(),monaco_maker_rebate:A.string(),monaco_maker_rebate_bps:A.number(),monaco_taker_fee:A.string(),monaco_taker_fee_bps:A.number(),notional:A.string(),taker_total_payment:A.string(),total_taker_fees:A.string(),max_quantity:A.string().nullable(),max_quantity_raw:A.string().nullable(),slippage_tolerance_bps:A.number().nullable()});var BF=["SUBMITTED","PARTIALLY_FILLED","FILLED","SETTLED_ON_CHAIN","SETTLED","CANCELLED","REJECTED","EXPIRED"];class Dm extends Error{issues;constructor($){let J=$.issues.map((Q)=>{let Y=Q.path.join(".");return`${Y?`${Y}: `:""}${Q.message}`});super(`Validation failed:
117
117
  - ${J.join(`
118
- - `)}`);this.name="ValidationError",this.issues=$.issues}getErrors(){let $={};for(let J of this.issues){let Q=J.path.join(".");$[Q||"root"]=J.message}return $}}function F$($,J){let Q=$.safeParse(J);if(!Q.success)throw new Dm(Q.error);return Q.data}var C5=A.enum(["BUY","SELL"],{message:'Order side must be "BUY" or "SELL"'}),Sz=A.enum(["SPOT","MARGIN"],{message:'Trading mode must be "SPOT" or "MARGIN"'}),ND=A.enum(["LONG","SHORT","NONE"],{message:'Position side must be "LONG", "SHORT", or "NONE"'}),Um=A.enum(["GTC","IOC","FOK"],{message:'Time in force must be "GTC", "IOC", or "FOK"'}),ZF=A.enum(["GTC","IOC"],{message:'Conditional order time in force must be "GTC" or "IOC"'}),z4=A.string().trim().min(1,"Value cannot be empty").regex(/^\d+(\.\d+)?$/,"Value must be a positive decimal number (e.g., '1.5', '100')").refine(($)=>Number.parseFloat($)>0,{message:"Value must be greater than 0"}),f$=A.uuid({message:"Must be a valid UUID (e.g., '123e4567-e89b-12d3-a456-426614174000')"}),qD=A.iso.datetime({message:"Must be a valid ISO 8601 date string (e.g., '2024-12-31T23:59:59Z')"}),Km=A.number().min(0,"Slippage tolerance must be at least 0 (no slippage)").max(1,"Slippage tolerance cannot exceed 1 (100%)").optional(),Vm=A.object({tradingPairId:f$,side:C5,quantity:z4,price:z4,options:A.object({tradingMode:Sz.optional(),useMasterBalance:A.boolean().optional(),expirationDate:qD.optional(),timeInForce:Um.optional(),marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),Om=A.object({tradingPairId:f$,side:C5,quantity:z4,options:A.object({tradingMode:Sz.optional(),slippageTolerance:Km,marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),Mm=A.object({orderId:f$}),zm=A.object({orderId:f$,newOrder:A.object({price:z4.optional(),quantity:z4.optional(),useMasterBalance:A.boolean().optional()})}),Nm=A.object({status:A.enum(BF).optional(),trading_pair_id:f$.optional(),trading_mode:Sz.optional(),margin_account_id:f$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),k5=A.enum(["LIMIT","MARKET"],{message:'Order type must be "LIMIT" or "MARKET"'}),u9$=A.enum(["STOP_LOSS","TAKE_PROFIT"],{message:'conditionType must be "STOP_LOSS" or "TAKE_PROFIT"'}),m9$=A.enum(["MARK_PRICE"],{message:'triggerSource must be "MARK_PRICE"'}),l9$=A.enum(["ACTIVE","TRIGGERING","TRIGGERED","CANCELLED","EXPIRED","FAILED"],{message:"Invalid conditional order state"}),n9$=A.enum(["LONG","SHORT"],{message:'Position side must be "LONG" or "SHORT"'}),_z=A.number().int().min(0,"Slippage tolerance must be at least 0 bps").max(1e4,"Slippage tolerance cannot exceed 10000 bps"),qm=A.object({tradingPairId:f$,marginAccountId:f$,conditionType:u9$,triggerPrice:z4,triggerSource:m9$.optional(),side:C5,positionSide:n9$,orderType:k5,limitPrice:z4.optional(),quantity:z4.optional(),reduceOnly:A.boolean().optional(),timeInForce:ZF.optional(),slippageToleranceBps:_z.optional(),expiresAt:qD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT conditional orders",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET conditional orders",path:["slippageToleranceBps"]}),Hm=A.object({conditionalOrderId:f$}),wm=A.object({margin_account_id:f$.optional(),trading_pair_id:f$.optional(),state:l9$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),d9$=A.object({tradingPairId:f$,orderType:k5,side:C5,price:z4.optional(),quantity:z4,tradingMode:Sz.optional(),slippageTolerance:Km,useMasterBalance:A.boolean().optional(),expirationDate:qD.optional(),timeInForce:Um.optional(),marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).refine(($)=>$.orderType!=="LIMIT"||$.price!==void 0,{message:"Price is required for LIMIT orders",path:["price"]}).refine(($)=>$.orderType!=="MARKET"||$.price===void 0,{message:"Price must not be provided for MARKET orders",path:["price"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["marginAccountId"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["positionSide"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["leverage"]}),Am=A.object({orders:A.array(d9$).min(1,"At least one order is required")}),p9$=A.object({orderId:f$,price:z4.optional(),quantity:z4.optional(),useMasterBalance:A.boolean().optional()}).refine(($)=>$.price!==void 0||$.quantity!==void 0,{message:"At least one of price or quantity must be provided"}),Im=A.object({orders:A.array(p9$).min(1,"At least one order is required")});var Lm=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),Bm=Lm.extend({state:A.string().trim().min(1,"State cannot be empty").optional()}),Zm=A.object({label:A.string().trim().min(1,"Label cannot be empty").optional(),collateralAsset:A.string().trim().min(1,"Collateral asset cannot be empty").optional()}).optional(),Fm=A.object({marginAccountId:f$}),jm=A.object({asset:A.string().trim().min(1,"Asset cannot be empty").optional()}).optional(),FF=A.object({marginAccountId:f$,request:A.object({asset:A.string().trim().min(1,"Asset cannot be empty"),amount:z4})}),Sm=Lm.extend({marginAccountId:f$,movement_type:A.string().trim().min(1,"Movement type cannot be empty").optional()}),_m=A.object({marginAccountId:f$,request:A.object({tradingPairId:f$,side:C5,positionSide:ND,orderType:k5,price:z4.optional(),quantity:z4,leverage:z4,reduceOnly:A.boolean().optional()})}).refine(($)=>$.request.orderType!=="LIMIT"||$.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}).refine(($)=>$.request.orderType!=="MARKET"||$.request.price===void 0,{message:"price must not be provided for MARKET risk simulations",path:["request","price"]});var Em=A.enum(["1m","5m","15m","30m","1h","4h","1d","1w","1M"],{message:'Interval must be one of: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"'}),i9$=31536000000,c9$=946684800000,Ez=A.number().int().positive({message:"Timestamp must be a positive integer (milliseconds since epoch)"}).min(c9$,{message:"Timestamp must be at least Jan 1, 2000 (946684800000 ms). Did you pass seconds instead of milliseconds?"}).max(Number.MAX_SAFE_INTEGER,{message:"Timestamp must not exceed JavaScript's maximum safe integer"}).refine(($)=>$<=Date.now()+i9$,{message:"Timestamp must not be unreasonably far in the future (max 1 year ahead)"}),VH4=A.object({tradingPairId:f$,interval:Em,startTime:Ez,endTime:Ez}).refine(($)=>$.startTime<$.endTime,{message:"startTime must be less than endTime",path:["endTime"]}),OH4=A.string().min(1,"Trading pair symbol cannot be empty").regex(/^[A-Za-z0-9]{1,10}\/[A-Za-z0-9]{1,10}$/,{message:'Trading pair symbol must be in format "BASE/QUOTE" (e.g., "BTC/USDT", "ETH/USD")'}),o9$=A.number().int().positive({message:"Limit must be a positive integer"}).max(500,{message:"Limit cannot exceed 500 bars per request"}).optional(),Pm=A.object({tradingPairId:f$,interval:Em,startTime:Ez.optional(),endTime:Ez.optional(),limit:o9$}).refine(($)=>{if($.startTime!==void 0&&$.endTime!==void 0)return $.startTime<$.endTime;return!0},{message:"startTime must be less than endTime",path:["endTime"]});var MH4=A.object({tradingPairId:f$}),zH4=A.object({query:A.string().min(1,"Search query cannot be empty").optional(),page_size:A.number().int().min(1).max(100).optional(),page:A.number().int().min(1).optional()}),eJ=A.object({tradingPairId:f$});var Rm=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),r9$=A.enum(["OPEN","CLOSED","LIQUIDATING"],{message:'Position status must be "OPEN", "CLOSED", or "LIQUIDATING"'}),t9$=A.enum(["MARKET","LIMIT","IOC"],{message:'Close type must be "MARKET", "LIMIT", or "IOC"'}),x5=A.object({positionId:f$}),Tm=Rm.extend({margin_account_id:f$.optional(),trading_pair_id:f$.optional(),status:r9$.optional()}),Cm=x5,km=x5.extend({request:A.object({closeType:t9$,limitPrice:z4.optional(),slippageToleranceBps:_z.optional(),quantity:z4.optional()})}).refine(($)=>$.request.closeType!=="LIMIT"||$.request.limitPrice!==void 0,{message:"limitPrice is required for LIMIT close requests",path:["request","limitPrice"]}).refine(($)=>$.request.closeType==="LIMIT"||$.request.limitPrice===void 0,{message:"limitPrice is only allowed for LIMIT close requests",path:["request","limitPrice"]}),xm=x5,fm=x5.extend({request:A.object({amount:z4,asset:A.string().trim().min(1,"Asset cannot be empty")})}),bm=x5.extend({request:A.object({amount:z4})}),vm=A.object({triggerPrice:z4,orderType:k5,limitPrice:z4.optional(),quantity:z4.optional(),timeInForce:ZF.optional(),slippageToleranceBps:_z.optional(),expiresAt:qD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT TP/SL legs",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET TP/SL legs",path:["slippageToleranceBps"]}),gm=x5.extend({request:A.object({takeProfit:vm.optional(),stopLoss:vm.optional()}).refine(($)=>$.takeProfit!==void 0||$.stopLoss!==void 0,{message:"At least one of takeProfit or stopLoss is required"})}),ym=Rm.extend({position_id:f$.optional(),margin_account_id:f$.optional(),trading_pair_id:f$.optional()});var a9$=A.enum(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"],{message:'Entry type must be "CREDIT", "DEBIT", "LOCK", "UNLOCK", or "FEE"'}),s9$=A.enum(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"],{message:'Transaction type must be "DEPOSIT", "WITHDRAWAL", "TRADE", "FEE", "FUNDING", "LIQUIDATION", "INTEREST", or "REWARD"'}),hm=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),entry_type:a9$.optional(),transaction_type:s9$.optional(),asset_id:f$.optional()}),um=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),trading_pair_id:f$.optional()});var FH4=A.string().regex(/^0x[a-fA-F0-9]{40}$/,{message:"Must be a valid Ethereum address (e.g., '0x1234...5678')"}),jF=A.union([A.string().regex(/^\d+$/,"Must be a positive integer string").refine(($)=>BigInt($)>0n,{message:"Amount must be greater than 0"}),A.bigint().refine(($)=>$>0n,{message:"Amount must be greater than 0"})]),mm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),lm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),nm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),jH4=A.object({assetId:f$});class Pz extends x4{async simulateFees($){let J=F$(LF,$),Q=new URLSearchParams;if(Q.append("trading_pair_id",J.trading_pair_id),Q.append("side",J.side),Q.append("price",J.price),Q.append("quantity",J.quantity),J.order_type!==void 0)Q.append("order_type",J.order_type);if(J.slippage_tolerance_bps!==void 0)Q.append("slippage_tolerance_bps",String(J.slippage_tolerance_bps));let Y=`/api/v1/fees/simulate?${Q.toString()}`;return await this.makeAuthenticatedRequest(Y,{method:"GET"})}}function N4($){return encodeURIComponent($)}function Z1($,J){if(!J)return $;let Q=new URLSearchParams;for(let[X,G]of Object.entries(J))if(G!==void 0)Q.set(X,String(G));let Y=Q.toString();return Y?`${$}?${Y}`:$}var b$={orders:{create:()=>"/api/v1/orders",list:($)=>Z1("/api/v1/orders",$),get:($)=>`/api/v1/orders/${N4($)}`,replace:($)=>`/api/v1/orders/${N4($)}`,cancel:()=>"/api/v1/orders/cancel",batchCancel:()=>"/api/v1/orders/batch-cancel",batchCancelAll:()=>"/api/v1/orders/batch-cancel-all",batchCancelAllByPair:($)=>`/api/v1/orders/batch-cancel-all/${N4($)}`,batchCreate:()=>"/api/v1/orders/batch-create",batchReplace:()=>"/api/v1/orders/batch-replace",createConditional:()=>"/api/v1/orders/conditional",listConditional:($)=>Z1("/api/v1/orders/conditional",$),cancelConditional:($)=>`/api/v1/orders/conditional/${N4($)}`},market:{listTradingPairs:($)=>Z1("/api/v1/market/pairs",$),getTradingPair:($)=>`/api/v1/market/pairs/${N4($)}`,getCandles:($,J,Q)=>Z1(`/api/v1/market/pairs/charts/candlestick/${N4($)}/${N4(J)}`,Q),getMarketMetadata:($)=>`/api/v1/market/pairs/${N4($)}/metadata`,getPerpMarketConfig:($)=>`/api/v1/market/pairs/${N4($)}/perp/config`,getPerpMarketSummary:($)=>`/api/v1/market/pairs/${N4($)}/perp/summary`,getMarkPrice:($)=>`/api/v1/market/pairs/${N4($)}/mark-price`,getIndexPrice:($)=>`/api/v1/market/pairs/${N4($)}/index-price`,getFundingState:($)=>`/api/v1/market/pairs/${N4($)}/funding`,listFundingHistory:($,J)=>Z1(`/api/v1/market/pairs/${N4($)}/funding/history`,J),getOpenInterest:($)=>`/api/v1/market/pairs/${N4($)}/open-interest`},orderbook:{get:($,J)=>Z1(`/api/v1/orderbook/${N4($)}`,J)},trades:{publicByPair:($,J)=>Z1(`/api/v1/trades/${N4($)}`,J),user:($)=>Z1("/api/v1/accounts/trades",$)},positions:{list:($)=>Z1("/api/v1/positions",$),get:($)=>`/api/v1/positions/${N4($)}`,close:($)=>`/api/v1/positions/${N4($)}/close`,risk:($)=>`/api/v1/positions/${N4($)}/risk`,addMargin:($)=>`/api/v1/positions/${N4($)}/margin/add`,reduceMargin:($)=>`/api/v1/positions/${N4($)}/margin/reduce`,attachTpSl:($)=>`/api/v1/positions/${N4($)}/tp-sl`,history:($)=>Z1("/api/v1/positions/history",$)},marginAccounts:{list:($)=>Z1("/api/v1/margin/accounts",$),create:()=>"/api/v1/margin/accounts",summary:($)=>`/api/v1/margin/accounts/${N4($)}`,availableCollateral:($)=>Z1("/api/v1/margin/collateral/available",$),transferIn:($)=>`/api/v1/margin/accounts/${N4($)}/collateral/transfer-in`,transferOut:($)=>`/api/v1/margin/accounts/${N4($)}/collateral/transfer-out`,movements:($,J)=>Z1(`/api/v1/margin/accounts/${N4($)}/movements`,J),simulateOrderRisk:($)=>`/api/v1/margin/accounts/${N4($)}/simulate-order-risk`},streams:{orderbook:()=>"/api/v1/streaming/orderbook",trades:()=>"/api/v1/streaming/trades",perpMarketSummaries:()=>"/api/v1/streaming/perp-market-summaries",markPrices:()=>"/api/v1/streaming/mark-prices",privateTrades:()=>"/api/v1/streaming/private-trades",orders:()=>"/api/v1/streaming/orders",positions:()=>"/api/v1/streaming/positions",marginAccount:()=>"/api/v1/streaming/margin-account",funding:()=>"/api/v1/streaming/funding",liquidationAlerts:()=>"/api/v1/streaming/liquidation-alerts"}};class vz extends x4{async listMarginAccounts($){if($)F$(Bm,$);return await this.makeAuthenticatedRequest(b$.marginAccounts.list($))}async createMarginAccount($){return F$(Zm,$),await this.makeAuthenticatedRequest(b$.marginAccounts.create(),{method:"POST",body:JSON.stringify({label:$?.label,collateral_asset:$?.collateralAsset})})}async getMarginAccountSummary($){return F$(Fm,{marginAccountId:$}),await this.makeAuthenticatedRequest(b$.marginAccounts.summary($))}async getAvailableCollateral($){return F$(jm,$),await this.makeAuthenticatedRequest(b$.marginAccounts.availableCollateral($))}async transferCollateralToMarginAccount($,J){return F$(FF,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.transferIn($),{method:"POST",body:JSON.stringify({asset:J.asset,amount:J.amount})})}async transferCollateralFromMarginAccount($,J){return F$(FF,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.transferOut($),{method:"POST",body:JSON.stringify({asset:J.asset,amount:J.amount})})}async getMarginAccountMovements($,J){return F$(Sm,{marginAccountId:$,...J}),await this.makeAuthenticatedRequest(b$.marginAccounts.movements($,J))}async simulateOrderRisk($,J){return F$(_m,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.simulateOrderRisk($),{method:"POST",body:JSON.stringify({trading_pair_id:J.tradingPairId,side:J.side,position_side:J.positionSide,order_type:J.orderType,price:J.price,quantity:J.quantity,leverage:J.leverage,reduce_only:J.reduceOnly})})}}class Rz extends x4{async getPaginatedTradingPairs($){let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.market_type)J.append("market_type",$.market_type);if($?.base_token)J.append("base_token",$.base_token);if($?.quote_token)J.append("quote_token",$.quote_token);if($?.is_active!==void 0)J.append("is_active",$.is_active.toString());let Q=J.toString(),Y=Q?`/api/v1/market/pairs?${Q}`:"/api/v1/market/pairs";return await this.makePublicRequest(Y)}async getTradingPairBySymbol($){return(await this.getPaginatedTradingPairs({page_size:100})).trading_pairs.find((Q)=>Q.symbol===$)}async getCandlesticks($,J,Q){F$(Pm,{tradingPairId:$,interval:J,startTime:Q?.startTime,endTime:Q?.endTime,limit:Q?.limit});let Y=new URLSearchParams;if(Q?.startTime!==void 0)Y.append("start_time",Q.startTime.toString());if(Q?.endTime!==void 0)Y.append("end_time",Q.endTime.toString());if(Q?.limit!==void 0)Y.append("limit",Q.limit.toString());let X=Y.toString(),G=X?`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent($)}/${J}?${X}`:`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent($)}/${J}`;return(await this.makePublicRequest(G)).data||[]}async getMarketMetadata($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getMarketMetadata($))}async getPerpMarketConfig($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getPerpMarketConfig($))}async getPerpMarketSummary($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getPerpMarketSummary($))}async getMarkPrice($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getMarkPrice($))}async getIndexPrice($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getIndexPrice($))}async getFundingState($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getFundingState($))}async listFundingHistory($,J){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.listFundingHistory($,J))}async getOpenInterest($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getOpenInterest($))}}class Tz extends x4{async getOrderbook($,J={}){let{depth:Q=10,tradingMode:Y,magnitude:X,denomination:G}=J,W=new URLSearchParams;if(W.set("levels",String(Q)),Y)W.set("trading_mode",Y);if(X!==void 0)W.set("magnitude",String(X));if(G)W.set("denomination",G.toLowerCase());let D=await this.makePublicRequest(`/api/v1/orderbook/${encodeURIComponent($)}?${W.toString()}`);return{tradingPairId:D.symbol,tradingMode:D.trading_mode,bids:D.data.bids.map((U)=>({price:U.price,quantity:U.quantity,orderCount:U.order_count})),asks:D.data.asks.map((U)=>({price:U.price,quantity:U.quantity,orderCount:U.order_count})),bestBid:D.data.best_bid,bestAsk:D.data.best_ask,bidVolume:D.data.bid_volume,askVolume:D.data.ask_volume,baseDecimals:D.base_decimals,quoteDecimals:D.quote_decimals,timestamp:D.timestamp,sequence:D.sequence_number}}}class Cz extends x4{async listPositions($){if($)F$(Tm,$);return await this.makeAuthenticatedRequest(b$.positions.list($))}async getPosition($){return F$(Cm,{positionId:$}),await this.makeAuthenticatedRequest(b$.positions.get($))}async closePosition($,J){return F$(km,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.close($),{method:"POST",body:JSON.stringify({position_id:$,close_type:J.closeType,limit_price:J.limitPrice,slippage_tolerance_bps:J.slippageToleranceBps,quantity:J.quantity})})}async getPositionRisk($){return F$(xm,{positionId:$}),await this.makeAuthenticatedRequest(b$.positions.risk($))}async addPositionMargin($,J){return F$(fm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.addMargin($),{method:"POST",body:JSON.stringify({position_id:$,amount:J.amount,asset:J.asset})})}async reducePositionMargin($,J){return F$(bm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.reduceMargin($),{method:"POST",body:JSON.stringify({position_id:$,amount:J.amount})})}async attachPositionTpSl($,J){return F$(gm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.attachTpSl($),{method:"POST",body:JSON.stringify({take_profit:J.takeProfit?{trigger_price:J.takeProfit.triggerPrice,order_type:J.takeProfit.orderType,limit_price:J.takeProfit.limitPrice,quantity:J.takeProfit.quantity,time_in_force:J.takeProfit.timeInForce,slippage_tolerance_bps:J.takeProfit.slippageToleranceBps,expires_at:J.takeProfit.expiresAt}:void 0,stop_loss:J.stopLoss?{trigger_price:J.stopLoss.triggerPrice,order_type:J.stopLoss.orderType,limit_price:J.stopLoss.limitPrice,quantity:J.stopLoss.quantity,time_in_force:J.stopLoss.timeInForce,slippage_tolerance_bps:J.stopLoss.slippageToleranceBps,expires_at:J.stopLoss.expiresAt}:void 0})})}async listPositionHistory($){if($)F$(ym,$);return await this.makeAuthenticatedRequest(b$.positions.history($))}}class SF extends x4{async getProfile(){return await this.makeAuthenticatedRequest("/api/v1/accounts/me")}async getPaginatedUserMovements($){if($)F$(hm,$);let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.entry_type!==void 0)J.append("entry_type",$.entry_type);if($?.transaction_type!==void 0)J.append("transaction_type",$.transaction_type);if($?.asset_id!==void 0)J.append("asset_id",$.asset_id);let Q=J.toString(),Y=Q?`/api/v1/accounts/movements?${Q}`:"/api/v1/accounts/movements";return await this.makeAuthenticatedRequest(Y)}async getUserBalances($){let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());let Q=J.toString(),Y=Q?`/api/v1/accounts/balances?${Q}`:"/api/v1/accounts/balances";return await this.makeAuthenticatedRequest(Y)}async getUserBalanceByAssetId($){if(!$||$.trim()==="")throw new f6("assetId is required and cannot be empty",{endpoint:"/api/v1/accounts/balances/{asset_id}"});let J=`/api/v1/accounts/balances/${$}`;return await this.makeAuthenticatedRequest(J)}async getPortfolioStats($){let J=new URLSearchParams({period:$});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio?${J}`)}async getPortfolioChart($,J){let Q=new URLSearchParams({period:$,metric:J});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio/chart?${Q}`)}async getUserTrades($){if($)F$(um,$);let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.trading_pair_id!==void 0)J.append("trading_pair_id",$.trading_pair_id);let Q=J.toString(),Y=Q?`/api/v1/accounts/trades?${Q}`:"/api/v1/accounts/trades";return await this.makeAuthenticatedRequest(Y)}}function e9$($){return{eventType:"trade",tradingPairId:$.trading_pair_id,tradingMode:$.trading_mode.toUpperCase(),data:{tradeId:$.data.trade_id,price:$.data.price,quantity:$.data.quantity,makerSide:$.data.maker_side.toUpperCase(),executedAt:$.data.executed_at}}}class _F extends x4{async getTrades($,J={}){let{page:Q=1}=J,Y=J.page_size!=null&&J.page_size>0?Math.min(J.page_size,100):25,X=new URLSearchParams;if(Q>1)X.set("page",String(Q));return X.set("page_size",String(Y)),(await this.makePublicRequest(`/api/v1/trades/${encodeURIComponent($)}?${X.toString()}`)).trades.map(e9$)}}class kz extends x4{async placeLimitOrder($,J,Q,Y,X){F$(Vm,{tradingPairId:$,side:J,quantity:Q,price:Y,options:X});let G={trading_pair_id:$,order_type:"LIMIT",side:J,price:Y,quantity:Q,trading_mode:X?.tradingMode||"SPOT",use_master_balance:X?.useMasterBalance,expiration_date:X?.expirationDate,time_in_force:X?.timeInForce,margin_account_id:X?.marginAccountId,position_side:X?.positionSide,leverage:X?.leverage,reduce_only:X?.reduceOnly};return await this.makeAuthenticatedRequest(b$.orders.create(),{method:"POST",body:JSON.stringify(G)})}async placeMarketOrder($,J,Q,Y){F$(Om,{tradingPairId:$,side:J,quantity:Q,options:Y});let X={trading_pair_id:$,order_type:"MARKET",side:J,slippage_tolerance_bps:Y?.slippageTolerance!==void 0?Math.round(Y.slippageTolerance*1e4):void 0,price:null,quantity:Q,trading_mode:Y?.tradingMode||"SPOT",margin_account_id:Y?.marginAccountId,position_side:Y?.positionSide,leverage:Y?.leverage,reduce_only:Y?.reduceOnly};return await this.makeAuthenticatedRequest(b$.orders.create(),{method:"POST",body:JSON.stringify(X)})}async cancelOrder($){F$(Mm,{orderId:$});let J={order_id:$};return await this.makeAuthenticatedRequest(b$.orders.cancel(),{method:"POST",body:JSON.stringify(J)})}async createConditionalOrder($){F$(qm,$);let J={trading_pair_id:$.tradingPairId,margin_account_id:$.marginAccountId,condition_type:$.conditionType,trigger_price:$.triggerPrice,trigger_source:$.triggerSource??"MARK_PRICE",side:$.side,position_side:$.positionSide,order_type:$.orderType,limit_price:$.limitPrice,quantity:$.quantity,reduce_only:$.reduceOnly??!0,time_in_force:$.timeInForce,slippage_tolerance_bps:$.slippageToleranceBps,expires_at:$.expiresAt};return await this.makeAuthenticatedRequest(b$.orders.createConditional(),{method:"POST",body:JSON.stringify(J)})}async cancelConditionalOrder($){return F$(Hm,{conditionalOrderId:$}),await this.makeAuthenticatedRequest(b$.orders.cancelConditional($),{method:"DELETE"})}async listConditionalOrders($){if($)F$(wm,$);let{page:J=1,page_size:Q=20,margin_account_id:Y,trading_pair_id:X,state:G}=$||{};return await this.makeAuthenticatedRequest(b$.orders.listConditional({page:J,page_size:Math.min(Math.max(Q,1),100),margin_account_id:Y,trading_pair_id:X,state:G}),{method:"GET"})}async batchCancel($){if(!$||$.length===0)throw Error("orderIds is required and must not be empty");return this.makeAuthenticatedRequest(b$.orders.batchCancel(),{method:"POST",body:JSON.stringify({order_ids:$})})}async batchCancelAll($){let J=$?b$.orders.batchCancelAllByPair($):b$.orders.batchCancelAll();return this.makeAuthenticatedRequest(J,{method:"POST"})}async replaceOrder($,J){F$(zm,{orderId:$,newOrder:J});let Q={use_master_balance:J.useMasterBalance??!1};if(J.price!==void 0)Q.price=J.price;if(J.quantity!==void 0)Q.quantity=J.quantity;return await this.makeAuthenticatedRequest(b$.orders.replace($),{method:"PUT",body:JSON.stringify(Q)})}async batchCreate($){F$(Am,{orders:$});let J={orders:$.map((Q)=>({trading_pair_id:Q.tradingPairId,order_type:Q.orderType,side:Q.side,price:Q.price,quantity:Q.quantity,trading_mode:Q.tradingMode||"SPOT",slippage_tolerance_bps:Q.slippageTolerance!==void 0?Math.round(Q.slippageTolerance*1e4):void 0,use_master_balance:Q.useMasterBalance,expiration_date:Q.expirationDate,time_in_force:Q.timeInForce,margin_account_id:Q.marginAccountId,position_side:Q.positionSide,leverage:Q.leverage,reduce_only:Q.reduceOnly}))};return this.makeAuthenticatedRequest(b$.orders.batchCreate(),{method:"POST",body:JSON.stringify(J)})}async batchReplace($){F$(Im,{orders:$});let J={orders:$.map((Q)=>({order_id:Q.orderId,price:Q.price,quantity:Q.quantity,use_master_balance:Q.useMasterBalance}))};return this.makeAuthenticatedRequest(b$.orders.batchReplace(),{method:"POST",body:JSON.stringify(J)})}async getPaginatedOrders($){if($)F$(Nm,$);let{page:J=1,page_size:Q=10,status:Y,trading_pair_id:X,trading_mode:G,margin_account_id:W}=$||{},D=J>0?J:1,U=Q>0?Q:10,V=Math.min(U,100),O=new URLSearchParams;if(O.append("page",D.toString()),O.append("page_size",V.toString()),Y)O.append("status",Y);if(X)O.append("trading_pair_id",X);if(G)O.append("trading_mode",G);if(W)O.append("margin_account_id",W);let M=`/api/v1/orders?${O.toString()}`;return await this.makeAuthenticatedRequest(M,{method:"GET"})}async getOrder($){return await this.makeAuthenticatedRequest(b$.orders.get($),{method:"GET"})}}var EF=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AccessControlBadConfirmation",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"bytes32",name:"neededRole",type:"bytes32"}],name:"AccessControlUnauthorizedAccount",type:"error"},{inputs:[{internalType:"address",name:"target",type:"address"}],name:"AddressEmptyCode",type:"error"},{inputs:[],name:"ECDSAInvalidSignature",type:"error"},{inputs:[{internalType:"uint256",name:"length",type:"uint256"}],name:"ECDSAInvalidSignatureLength",type:"error"},{inputs:[{internalType:"bytes32",name:"s",type:"bytes32"}],name:"ECDSAInvalidSignatureS",type:"error"},{inputs:[{internalType:"address",name:"implementation",type:"address"}],name:"ERC1967InvalidImplementation",type:"error"},{inputs:[],name:"ERC1967NonPayable",type:"error"},{inputs:[],name:"EnforcedPause",type:"error"},{inputs:[],name:"ExpectedPause",type:"error"},{inputs:[],name:"FailedCall",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[],name:"InsufficientBalance",type:"error"},{inputs:[],name:"InvalidAddress",type:"error"},{inputs:[],name:"InvalidInitialization",type:"error"},{inputs:[],name:"InvalidSeed",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"InvalidTimestamp",type:"error"},{inputs:[],name:"NonceAlreadyUsed",type:"error"},{inputs:[],name:"NotInitializing",type:"error"},{inputs:[],name:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[],name:"TransferFailed",type:"error"},{inputs:[],name:"UUPSUnauthorizedCallContext",type:"error"},{inputs:[{internalType:"bytes32",name:"slot",type:"bytes32"}],name:"UUPSUnsupportedProxiableUUID",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newFeeCollector",type:"address"}],name:"FeeCollectorChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"version",type:"uint64"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newSettlementContract",type:"address"}],name:"SettlementContractChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"maker",type:"address"},{indexed:!0,internalType:"address",name:"taker",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SettlementTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"DEBUGGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"FEE_MANAGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"PAUSER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"SETTLEMENT_MANAGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"UPGRADER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"UPGRADE_INTERFACE_VERSION",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"seed",type:"bytes"}],name:"decodeSeed",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"destination",type:"address"},{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"depositERC20",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"destination",type:"address"},{internalType:"string",name:"applicationId",type:"string"}],name:"depositNative",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"feeCollector",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getChainID",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_admin",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"proxiableUUID",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"callerConfirmation",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_newFeeCollector",type:"address"}],name:"setFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_settlementContract",type:"address"}],name:"setSettlementContract",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"settlementContract",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"maker",type:"address"},{internalType:"address",name:"taker",type:"address"},{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"fee",type:"uint256"}],name:"transferOnSettlement",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"seed",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"seed",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"withdrawNative",outputs:[],stateMutability:"nonpayable",type:"function"}];var HD={vault:EF};class xz extends x4{publicClient;chain;applicationsAPI;profileAPI;walletClient;constructor($,J,Q,Y,X,G){super(G);this.publicClient=$,this.chain=Q,this.walletClient=J,this.applicationsAPI=Y,this.profileAPI=X}setWalletClient($){this.walletClient=$}async getVaultAddress(){return(await this.applicationsAPI.getApplicationConfig()).vaultContractAddress}async getClientId(){return(await this.applicationsAPI.getApplicationConfig()).clientId}async resolveAsset($){let J;try{J=(await this.profileAPI.getUserBalanceByAssetId($)).token}catch(Y){if(Y instanceof f6){if(Y.statusCode===404)throw new D8(`Asset ID '${$}' does not exist`,{revertReason:"ASSET_NOT_FOUND",cause:Y});throw new D8(`Failed to resolve asset ID '${$}': ${Y.retryable?"Network error occurred":"API request failed"}`,{revertReason:Y.retryable?"NETWORK_ERROR":"API_ERROR",cause:Y})}throw new D8(`Failed to resolve asset ID '${$}': Unexpected error`,{revertReason:"UNKNOWN_ERROR",cause:Y instanceof Error?Y:void 0})}return{tokenAddress:J,isNativeToken:J===X1}}async approve($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(mm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),{tokenAddress:X}=await this.resolveAsset($),G=this.walletClient.account;if(!G)throw new b4("No account available in wallet client","account");let W=G.getNonce?await G.getNonce():0n,D=await this.walletClient.writeContract({address:X,abi:R3,functionName:"approve",args:[Y,J],chain:this.chain,account:G}),U={nonce:W,hash:D,status:"pending"};return await this.waitForTransaction(U,Q)}async deposit($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(lm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),X=await this.getClientId(),{tokenAddress:G,isNativeToken:W}=await this.resolveAsset($);if(!W){if(await this.needsApproval($,J))throw new D8(`Approval required before deposit. Please invoke approve() first for asset ${$} (token address: ${G}).`,{revertReason:"APPROVAL_REQUIRED"})}let D=this.walletClient.account;if(!D)throw new b4("No account available in wallet client","account");let U;if(W)U=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"depositNative",args:[D.address,X],account:D,chain:this.chain,value:J});else U=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"depositERC20",args:[D.address,X,G,J],account:D,chain:this.chain});let V=D.getNonce?await D.getNonce():0n,O={hash:U,status:"pending",nonce:V};return await this.waitForTransaction(O,Q)}async withdraw($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(nm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),{tokenAddress:X,isNativeToken:G}=await this.resolveAsset($),{seed:W,signature:D}=await this.getWithdrawSignature($,J),U=this.walletClient.account;if(!U)throw new b4("No account available in wallet client","account");let V;if(G)V=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"withdrawNative",args:[J,W,D],account:U,chain:this.chain});else V=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"withdraw",args:[X,J,W,D],account:U,chain:this.chain});let O=U.getNonce?await U.getNonce():0n,M={hash:V,status:"pending",nonce:O};return await this.waitForTransaction(M,Q)}async getBalance($){throw new f6("getBalance() is deprecated and no longer supported. Please use profileAPI.getUserBalances() or profileAPI.getUserBalanceByAssetId() instead for balance data.",{statusCode:410})}async getAllowance($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=await this.getVaultAddress(),Y=(await this.walletClient.getAddresses())[0];if(!Y)throw new b4("No account found in wallet client.","walletClient");let{tokenAddress:X}=await this.resolveAsset($);return await this.publicClient.readContract({address:X,abi:R3,functionName:"allowance",args:[Y,J]})}async needsApproval($,J){return await this.getAllowance($)<J}async getWithdrawSignature($,J){let Q=await this.makeAuthenticatedRequest("/api/v1/withdraw/signature",{method:"POST",body:JSON.stringify({asset_id:$,amount:J.toString()})});return{seed:Q.seed,signature:Q.signature}}async waitForTransaction($,J=!0,Q={}){if(!J)return $;let{confirmations:Y=1,timeout:X=60000}=Q;try{let G=await this.publicClient.waitForTransactionReceipt({hash:$.hash,confirmations:Y,timeout:X});return{...$,status:G.status==="success"?"confirmed":"failed",receipt:G}}catch{return{...$,status:"failed"}}}}class fz extends x4{chain;walletClient;constructor($,J,Q){super(Q);this.chain=J,this.walletClient=$}setWalletClient($){this.walletClient=$}async authenticate($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=this.walletClient.account;if(!J)throw new b4("No account available in wallet client","account");let Q=await this.createChallenge(J.address,$),Y=await this.signChallenge(Q.message);return await this.verifySignature(J.address,Y,Q.nonce,$)}async signChallenge($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=this.walletClient.account;if(!J)throw new b4("No account available in wallet client","account");return await this.walletClient.signMessage({account:J,message:$})}async createChallenge($,J){let Q=await this.makePublicRequest("/api/v1/auth/challenge",{method:"POST",body:JSON.stringify({address:$,client_id:J,chain_id:this.chain.id})});return{nonce:Q.nonce,message:Q.message,expiresAt:Q.expires_at}}async verifySignature($,J,Q,Y){let X=await this.makePublicRequest("/api/v1/auth/verify",{method:"POST",body:JSON.stringify({address:$,signature:J,nonce:Q,client_id:Y,chain_id:this.chain.id})});return{accessToken:X.access_token,refreshToken:X.refresh_token,expiresAt:X.expires_at,user:{id:X.user.id,address:X.user.address,username:X.user.username}}}async authenticateBackend($){let J=await this.makePublicRequest("/api/v1/auth/backend",{method:"POST",body:JSON.stringify({secret_key:$,chain_id:this.chain.id})});return{accessToken:J.access_token,expiresAt:J.expires_at,application:{id:J.application.id,name:J.application.name,clientId:J.application.client_id}}}async refreshToken($){let J=await this.makePublicRequest("/api/v1/auth/refresh",{method:"POST",body:JSON.stringify({refresh_token:$})});return{accessToken:J.access_token,expiresAt:J.expires_at}}async revokeToken(){await this.makeAuthenticatedRequest("/api/v1/auth/revoke",{method:"POST"})}}class PF{auth;applications;fees;vault;trading;market;marginAccounts;positions;profile;orderbook;trades;ws;walletClient;publicClient;authState;network;chain;propagateAccessToken($){this.auth.setAccessToken($),this.applications.setAccessToken($),this.fees.setAccessToken($),this.vault.setAccessToken($),this.trading.setAccessToken($),this.market.setAccessToken($),this.marginAccounts.setAccessToken($),this.positions.setAccessToken($),this.profile.setAccessToken($),this.orderbook.setAccessToken($),this.trades.setAccessToken($),this.ws.setToken($)}constructor($){let J=["mainnet","development","staging","local"];if(!$.network||!J.includes($.network))throw new b4(`network must be one of: ${J.join(", ")}. Got: ${$.network}`,"network");if(this.network=$.network,!$.seiRpcUrl)throw new b4("seiRpcUrl is required","seiRpcUrl");try{new URL($.seiRpcUrl)}catch(W){throw new b4(`seiRpcUrl must be a valid URL, got: ${$.seiRpcUrl}`,"seiRpcUrl")}let Q=aL(this.network),Y=this.network==="mainnet"?MD:zD;this.chain=Y;let X=OD($.seiRpcUrl);this.publicClient=OF({chain:Y,transport:X});let G=WW(this.network);if($.walletClient){if($.walletClient.chain?.id!==Y.id)throw new b4(`Wallet client chain mismatch. Expected ${Y.id}, got ${$.walletClient.chain?.id}`,"walletClient");this.walletClient=$.walletClient}this.applications=new jz(G),this.market=new Rz(G),this.marginAccounts=new vz(G),this.positions=new Cz(G),this.auth=new fz(this.walletClient,this.chain,G),this.fees=new Pz(G),this.profile=new SF(G),this.vault=new xz(this.publicClient,this.walletClient,this.chain,this.applications,this.profile,G),this.trading=new kz(G),this.orderbook=new Tz(G),this.trades=new _F(G),this.ws=dL(Q),this.ws.connect().catch(console.error)}async login($,J){let Q=await this.auth.authenticate($);if(this.authState={accessToken:Q.accessToken,refreshToken:Q.refreshToken,expiresAt:Q.expiresAt,user:Q.user},this.propagateAccessToken(this.authState.accessToken),J?.connectWebSocket)await this.ws.connect();return this.authState}getAuthState(){return this.authState}setAuthState($){this.authState=$,this.propagateAccessToken($.accessToken)}async logout(){if(this.authState?.refreshToken)try{await this.auth.revokeToken()}catch($){console.warn("Failed to revoke token on logout:",$)}this.authState=void 0,this.propagateAccessToken(""),this.ws.disconnect()}async refreshAuth(){if(!this.authState?.refreshToken)throw new f6("No refresh token available",{endpoint:"auth/refresh",statusCode:dm.StatusCodes.UNAUTHORIZED});try{let $=await this.auth.refreshToken(this.authState.refreshToken);return this.authState={...this.authState,accessToken:$.accessToken,expiresAt:$.expiresAt},this.propagateAccessToken(this.authState.accessToken),this.authState}catch($){throw this.authState=void 0,$}}isAuthenticated(){return!!this.authState}isConnected(){return!!this.walletClient&&!!this.publicClient}setWalletClient($){if($.chain?.id!==this.chain.id)throw new b4(`Wallet client chain mismatch. Expected ${this.chain.id}, got ${$.chain?.id}`,"walletClient");this.walletClient=$,this.auth.setWalletClient($),this.vault.setWalletClient($)}getAccountAddress(){if(!this.walletClient)throw new GW("Wallet client not set","walletClient");if(this.walletClient.account)return this.walletClient.account.address;throw new GW("No account available","account")}getNetwork(){return this.network}getChainId(){return this.chain.id}async waitForTransaction($,J,Q){return this.publicClient.waitForTransactionReceipt({hash:$,confirmations:J,timeout:Q})}}function vF($){return new PF($)}N5();w$();u0();g1();function pm($){if(typeof $==="string"){if(!X4($,{strict:!1}))throw new j4({address:$});return{address:$,type:"json-rpc"}}if(!X4($.address,{strict:!1}))throw new j4({address:$.address});return{address:$.address,nonceManager:$.nonceManager,sign:$.sign,signAuthorization:$.signAuthorization,signMessage:$.signMessage,signTransaction:$.signTransaction,signTypedData:$.signTypedData,source:"custom",type:"local"}}N5();$6();w$();var RF=!1;async function e0({hash:$,privateKey:J,to:Q="object"}){let{r:Y,s:X,recovery:G}=B1.sign($.slice(2),J.slice(2),{lowS:!0,extraEntropy:T4(RF,{strict:!1})?o4(RF):RF}),W={r:y(Y,{size:32}),s:y(X,{size:32}),v:G?28n:27n,yParity:G};return(()=>{if(Q==="bytes"||Q==="hex")return Oz({...W,to:Q});return W})()}async function im($){let{chainId:J,nonce:Q,privateKey:Y,to:X="object"}=$,G=$.contractAddress??$.address,W=await e0({hash:lM({address:G,chainId:J,nonce:Q}),privateKey:Y,to:X});if(X==="object")return{address:G,chainId:J,nonce:Q,...W};return W}async function cm({message:$,privateKey:J}){return await e0({hash:P5($),privateKey:J,to:"hex"})}b1();u1();w$();function om($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let{chainId:Y,nonce:X,...G}=Q,W=Q.address;J.push([Y?P4(Y):"0x",W,X?P4(X):"0x",...f5({},G)])}return J}w$();pB();u0();x$();ZW();DX();g1();x1();rQ();e4();function rm($){let{authorizationList:J}=$;if(J)for(let Q of J){let{chainId:Y}=Q,X=Q.address;if(!X4(X))throw new j4({address:X});if(Y<0)throw new _Y({chainId:Y})}bz($)}function tm($){let{blobVersionedHashes:J}=$;if(J){if(J.length===0)throw new eW;for(let Q of J){let Y=t$(Q),X=C4(y1(Q,0,1));if(Y!==32)throw new vZ({hash:Q,size:Y});if(X!==iM)throw new RZ({hash:Q,version:X})}}bz($)}function bz($){let{chainId:J,maxPriorityFeePerGas:Q,maxFeePerGas:Y,to:X}=$;if(J<=0)throw new _Y({chainId:J});if(X&&!X4(X))throw new j4({address:X});if(Y&&Y>V5)throw new q0({maxFeePerGas:Y});if(Q&&Y&&Q>Y)throw new oJ({maxFeePerGas:Y,maxPriorityFeePerGas:Q})}function am($){let{chainId:J,maxPriorityFeePerGas:Q,gasPrice:Y,maxFeePerGas:X,to:G}=$;if(J<=0)throw new _Y({chainId:J});if(G&&!X4(G))throw new j4({address:G});if(Q||X)throw new R("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.");if(Y&&Y>V5)throw new q0({maxFeePerGas:Y})}function sm($){let{chainId:J,maxPriorityFeePerGas:Q,gasPrice:Y,maxFeePerGas:X,to:G}=$;if(G&&!X4(G))throw new j4({address:G});if(typeof J<"u"&&J<=0)throw new _Y({chainId:J});if(Q||X)throw new R("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.");if(Y&&Y>V5)throw new q0({maxFeePerGas:Y})}u0();u1();g1();function wD($){if(!$||$.length===0)return[];let J=[];for(let Q=0;Q<$.length;Q++){let{address:Y,storageKeys:X}=$[Q];for(let G=0;G<X.length;G++)if(X[G].length-2!==64)throw new VB({storageKey:X[G]});if(!X4(Y,{strict:!1}))throw new j4({address:Y});J.push([Y,X])}return J}function em($,J){let Q=oM($);if(Q==="eip1559")return QY$($,J);if(Q==="eip2930")return XY$($,J);if(Q==="eip4844")return JY$($,J);if(Q==="eip7702")return $Y$($,J);return YY$($,J)}function $Y$($,J){let{authorizationList:Q,chainId:Y,gas:X,nonce:G,to:W,value:D,maxFeePerGas:U,maxPriorityFeePerGas:V,accessList:O,data:M}=$;rm($);let N=wD(O),q=om(Q);return B6(["0x04",sJ([y(Y),G?y(G):"0x",V?y(V):"0x",U?y(U):"0x",X?y(X):"0x",W??"0x",D?y(D):"0x",M??"0x",N,q,...f5($,J)])])}function JY$($,J){let{chainId:Q,gas:Y,nonce:X,to:G,value:W,maxFeePerBlobGas:D,maxFeePerGas:U,maxPriorityFeePerGas:V,accessList:O,data:M}=$;tm($);let{blobVersionedHashes:N,sidecars:q}=$;if($.blobs&&(typeof N>"u"||typeof q>"u")){let B=typeof $.blobs[0]==="string"?$.blobs:$.blobs.map((v)=>a$(v)),F=$.kzg,S=A5({blobs:B,kzg:F});if(typeof N>"u")N=pM({commitments:S});if(typeof q>"u"){let v=I5({blobs:B,commitments:S,kzg:F});q=cM({blobs:B,commitments:S,proofs:v})}}let w=wD(O),I=[y(Q),X?y(X):"0x",V?y(V):"0x",U?y(U):"0x",Y?y(Y):"0x",G??"0x",W?y(W):"0x",M??"0x",w,D?y(D):"0x",N??[],...f5($,J)],Z=[],L=[],_=[];if(q)for(let B=0;B<q.length;B++){let{blob:F,commitment:S,proof:v}=q[B];Z.push(F),L.push(S),_.push(v)}return B6(["0x03",q?sJ([I,Z,L,_]):sJ(I)])}function QY$($,J){let{chainId:Q,gas:Y,nonce:X,to:G,value:W,maxFeePerGas:D,maxPriorityFeePerGas:U,accessList:V,data:O}=$;bz($);let M=wD(V),N=[y(Q),X?y(X):"0x",U?y(U):"0x",D?y(D):"0x",Y?y(Y):"0x",G??"0x",W?y(W):"0x",O??"0x",M,...f5($,J)];return B6(["0x02",sJ(N)])}function XY$($,J){let{chainId:Q,gas:Y,data:X,nonce:G,to:W,value:D,accessList:U,gasPrice:V}=$;am($);let O=wD(U),M=[y(Q),G?y(G):"0x",V?y(V):"0x",Y?y(Y):"0x",W??"0x",D?y(D):"0x",X??"0x",O,...f5($,J)];return B6(["0x01",sJ(M)])}function YY$($,J){let{chainId:Q=0,gas:Y,data:X,nonce:G,to:W,value:D,gasPrice:U}=$;sm($);let V=[G?y(G):"0x",U?y(U):"0x",Y?y(Y):"0x",W??"0x",D?y(D):"0x",X??"0x"];if(J){let O=(()=>{if(J.v>=35n){if((J.v-35n)/2n>0)return J.v;return 27n+(J.v===35n?0n:1n)}if(Q>0)return BigInt(Q*2)+BigInt(35n+J.v-27n);let q=27n+(J.v===27n?0n:1n);if(J.v!==q)throw new UB({v:J.v});return q})(),M=s4(J.r),N=s4(J.s);V=[...V,y(O),M==="0x00"?"0x":M,N==="0x00"?"0x":N]}else if(Q>0)V=[...V,y(Q),"0x","0x"];return sJ(V)}function f5($,J){let Q=J??$,{v:Y,yParity:X}=Q;if(typeof Q.r>"u")return[];if(typeof Q.s>"u")return[];if(typeof Y>"u"&&typeof X>"u")return[];let G=s4(Q.r),W=s4(Q.s);return[(()=>{if(typeof X==="number")return X?y(1):"0x";if(Y===0n)return"0x";if(Y===1n)return y(1);return Y===27n?"0x":y(1)})(),G==="0x00"?"0x":G,W==="0x00"?"0x":W]}async function $l($){let{privateKey:J,transaction:Q,serializer:Y=em}=$,X=(()=>{if(Q.type==="eip4844")return{...Q,sidecars:!1};return Q})(),G=await e0({hash:U4(await Y(X)),privateKey:J});return await Y(Q,G)}async function Jl($){let{privateKey:J,...Q}=$;return await e0({hash:Nz(Q),privateKey:J,to:"hex"})}function TF($,J={}){let{nonceManager:Q}=J,Y=P4(B1.getPublicKey($.slice(2),!1)),X=fM(Y);return{...pm({address:X,nonceManager:Q,async sign({hash:W}){return e0({hash:W,privateKey:$,to:"hex"})},async signAuthorization(W){return im({...W,privateKey:$})},async signMessage({message:W}){return cm({message:W,privateKey:$})},async signTransaction(W,{serializer:D}={}){return $l({privateKey:$,transaction:W,serializer:D})},async signTypedData(W){return Jl({...W,privateKey:$})}}),publicKey:Y,source:"privateKey"}}var CF=null;var GY$={privateKeyToAccount:TF,createWalletClient:wF,http:OD,createMonacoSDK:vF,sei:MD,seiTestnet:zD};function WY$($,J=GY$){let Q=$.network==="mainnet"?J.sei:J.seiTestnet,Y;if($.privateKey){let X=J.privateKeyToAccount($.privateKey);Y=J.createWalletClient({account:X,chain:Q,transport:J.http($.seiRpcUrl)})}return J.createMonacoSDK({walletClient:Y,network:$.network,seiRpcUrl:$.seiRpcUrl})}function Y1($){if(!CF){let J=$??mQ();CF=WY$(J)}return CF}async function l$($){let J=Y1($);if(!J.isAuthenticated()){let Q=$??mQ();await J.login(Q.clientId),console.error(`Authenticated as ${J.getAccountAddress()}`)}return J}function I$($){return{content:[{type:"text",text:JSON.stringify($,null,2)}]}}function I0($){return{content:[{type:"text",text:$}]}}function Ql($,J){if(J.network==="mainnet")return;$.registerTool("request_faucet",{description:"Request test funds from the faucet for all active trading pairs. Only available on non-mainnet networks (development, staging, local).",inputSchema:{}},async()=>{let Q=mQ(),Y=await l$(),G=Y.getAuthState()?.accessToken;if(!G)return I0("No access token available. Please authenticate first.");let W=WW(Q.network),D=Y.getAccountAddress();if(W.includes("localhost"))return I0("Faucet is not available for localhost.");let U=new AbortController,V=setTimeout(()=>U.abort(),30000);try{let O=await fetch(`${W}/api/v1/faucet/mint`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${G}`},body:JSON.stringify({address:D}),signal:U.signal});if(clearTimeout(V),O.ok)return I0(`Faucet request successful. Test funds have been minted to ${D} on the ${Q.network} network.`);let M=await O.text().catch(()=>"Unknown error");return I0(`Faucet request failed (${O.status}): ${M}`)}catch(O){if(clearTimeout(V),O instanceof Error&&O.name==="AbortError")return I0("Faucet request timed out after 30 seconds.");return I0(`Faucet error: ${O}`)}})}function Xl($,J){Ql($,J)}function Yl($){$.registerTool("simulate_fees",{description:"Simulate the fees for an order before placing it. Returns Monaco protocol fees, application fees, and total amounts.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),side:A.enum(["BUY","SELL"]).describe("Order side"),price:A.string().describe("Price per unit as a decimal string"),quantity:A.string().describe("Quantity to trade as a decimal string")})},async({trading_pair_id:J,side:Q,price:Y,quantity:X})=>{let W=await(await l$()).fees.simulateFees({trading_pair_id:J,side:Q,price:Y,quantity:X});return I$(W)})}function Gl($){Yl($)}function Wl($){$.registerTool("get_candlesticks",{description:"Get OHLCV candlestick data for a trading pair. Useful for charting and price analysis.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),interval:A.enum(["1m","5m","15m","1h","4h","1d"]).describe("Candlestick interval"),start_time:A.number().optional().describe("Start time as Unix timestamp (seconds)"),end_time:A.number().optional().describe("End time as Unix timestamp (seconds)"),limit:A.number().optional().describe("Max number of candlesticks to return")})},async({trading_pair_id:J,interval:Q,start_time:Y,end_time:X,limit:G})=>{let D=await Y1().market.getCandlesticks(J,Q,{startTime:Y,endTime:X,limit:G});return I$(D)})}function Dl($){$.registerTool("get_market_metadata",{description:"Get metadata for a specific trading pair including tick size, min order size, and trading rules.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID")})},async({trading_pair_id:J})=>{let Y=await Y1().market.getMarketMetadata(J);return I$(Y)})}function Ul($){$.registerTool("get_trading_pair_by_symbol",{description:"Look up a specific trading pair by its symbol (e.g. 'BTC/USDC'). Returns the pair's full details including its UUID.",inputSchema:A.object({symbol:A.string().describe("Trading pair symbol (e.g. 'BTC/USDC')")})},async({symbol:J})=>{let Y=await Y1().market.getTradingPairBySymbol(J);if(!Y)return I0(`Trading pair '${J}' not found.`);return I$(Y)})}function Kl($){$.registerTool("get_trading_pairs",{description:"Get a paginated list of trading pairs available on Monaco. Returns pair IDs, symbols, base/quote tokens, and status.",inputSchema:A.object({page:A.number().optional().describe("Page number (starts from 1)"),limit:A.number().optional().describe("Number of items per page (max 100)"),market_type:A.string().optional().describe("Filter by market type"),base_token:A.string().optional().describe("Filter by base token"),quote_token:A.string().optional().describe("Filter by quote token"),is_active:A.boolean().optional().describe("Filter by active status")})},async(J)=>{let Y=await Y1().market.getPaginatedTradingPairs(J);return I$(Y)})}function Vl($){Kl($),Ul($),Wl($),Dl($)}function Ol($){$.registerTool("get_orderbook",{description:"Get the current orderbook snapshot for a trading pair. Shows bids, asks, best bid/ask, and volumes.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),depth:A.number().optional().describe("Number of price levels to return (max 100, default 10)"),trading_mode:A.enum(["SPOT"]).optional().describe("Trading mode (default: SPOT)"),magnitude:A.number().optional().describe("Price grouping magnitude (e.g. 0.01, 0.1, 1, 10, 100)"),denomination:A.enum(["BASE","QUOTE"]).optional().describe("Quantity denomination: BASE or QUOTE")})},async({trading_pair_id:J,depth:Q,trading_mode:Y,magnitude:X,denomination:G})=>{let D=await Y1().orderbook.getOrderbook(J,{depth:Q,tradingMode:Y,magnitude:X,denomination:G});return I$(D)})}function Ml($){Ol($)}function zl($){$.registerTool("get_balance_by_asset",{description:"Get the authenticated user's balance for a specific asset by its UUID.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID")})},async({asset_id:J})=>{let Y=await(await l$()).profile.getUserBalanceByAssetId(J);return I$(Y)})}function Nl($){$.registerTool("get_balances",{description:"Get the authenticated user's token balances with pagination.",inputSchema:A.object({limit:A.number().optional().describe("Number of items to return (default: 20)"),offset:A.number().optional().describe("Number of items to skip (default: 0)")})},async({limit:J,offset:Q})=>{let X=await(await l$()).profile.getUserBalances({limit:J,offset:Q});return I$(X)})}function ql($){$.registerTool("get_movements",{description:"Get the authenticated user's ledger movements (transaction history) with pagination.",inputSchema:A.object({page:A.number().int().min(1).optional().describe("Page number (starts from 1, default: 1)"),limit:A.number().int().min(1).max(100).optional().describe("Items per page (default: 20, max: 100)"),entry_type:A.enum(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"]).optional().describe("Filter by entry type (e.g. CREDIT, DEBIT, LOCK, UNLOCK, FEE)"),transaction_type:A.enum(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"]).optional().describe("Filter by transaction type (e.g. DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD)"),asset_id:A.string().uuid().optional().describe("Filter by asset ID (UUID)")})},async({page:J,limit:Q,entry_type:Y,transaction_type:X,asset_id:G})=>{let D=await(await l$()).profile.getPaginatedUserMovements({page:J,limit:Q,entry_type:Y,transaction_type:X,asset_id:G});return I$(D)})}function Hl($){$.registerTool("get_profile",{description:"Get the authenticated user's profile including address, username, account type, and withdrawal status. Use get_balances, get_movements, and get_orders for detailed account data."},async()=>{let Q=await(await l$()).profile.getProfile();return I$(Q)})}function wl($){Hl($),Nl($),zl($),ql($)}var DY$="https://docs.0xmonaco.com/mcp",UY$="SearchMonacoDocs",gz=null;async function Al($,J,Q){let Y=await fetch(DY$,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream",...gz?{"Mcp-Session-Id":gz}:{}},body:JSON.stringify({jsonrpc:"2.0",id:Q,method:$,params:J})});if(!Y.ok)throw Error(`Mintlify MCP error: ${Y.status}`);let X=Y.headers.get("mcp-session-id");if(X)gz=X;let W=(await Y.text()).split(`
118
+ - `)}`);this.name="ValidationError",this.issues=$.issues}getErrors(){let $={};for(let J of this.issues){let Q=J.path.join(".");$[Q||"root"]=J.message}return $}}function F$($,J){let Q=$.safeParse(J);if(!Q.success)throw new Dm(Q.error);return Q.data}var C5=A.enum(["BUY","SELL"],{message:'Order side must be "BUY" or "SELL"'}),Sz=A.enum(["SPOT","MARGIN"],{message:'Trading mode must be "SPOT" or "MARGIN"'}),ND=A.enum(["LONG","SHORT","NONE"],{message:'Position side must be "LONG", "SHORT", or "NONE"'}),Um=A.enum(["GTC","IOC","FOK"],{message:'Time in force must be "GTC", "IOC", or "FOK"'}),ZF=A.enum(["GTC","IOC"],{message:'Conditional order time in force must be "GTC" or "IOC"'}),z4=A.string().trim().min(1,"Value cannot be empty").regex(/^\d+(\.\d+)?$/,"Value must be a positive decimal number (e.g., '1.5', '100')").refine(($)=>Number.parseFloat($)>0,{message:"Value must be greater than 0"}),f$=A.uuid({message:"Must be a valid UUID (e.g., '123e4567-e89b-12d3-a456-426614174000')"}),qD=A.iso.datetime({message:"Must be a valid ISO 8601 date string (e.g., '2024-12-31T23:59:59Z')"}),Km=A.number().min(0,"Slippage tolerance must be at least 0 (no slippage)").max(1,"Slippage tolerance cannot exceed 1 (100%)").optional(),Vm=A.object({tradingPairId:f$,side:C5,quantity:z4,price:z4,options:A.object({tradingMode:Sz.optional(),useMasterBalance:A.boolean().optional(),expirationDate:qD.optional(),timeInForce:Um.optional(),marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),Om=A.object({tradingPairId:f$,side:C5,quantity:z4,options:A.object({tradingMode:Sz.optional(),slippageTolerance:Km,marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),Mm=A.object({orderId:f$}),zm=A.object({orderId:f$,newOrder:A.object({price:z4.optional(),quantity:z4.optional(),useMasterBalance:A.boolean().optional()})}),Nm=A.object({status:A.enum(BF).optional(),trading_pair_id:f$.optional(),trading_mode:Sz.optional(),margin_account_id:f$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),k5=A.enum(["LIMIT","MARKET"],{message:'Order type must be "LIMIT" or "MARKET"'}),u9$=A.enum(["STOP_LOSS","TAKE_PROFIT"],{message:'conditionType must be "STOP_LOSS" or "TAKE_PROFIT"'}),m9$=A.enum(["MARK_PRICE"],{message:'triggerSource must be "MARK_PRICE"'}),l9$=A.enum(["ACTIVE","TRIGGERING","TRIGGERED","CANCELLED","EXPIRED","FAILED"],{message:"Invalid conditional order state"}),n9$=A.enum(["LONG","SHORT"],{message:'Position side must be "LONG" or "SHORT"'}),_z=A.number().int().min(0,"Slippage tolerance must be at least 0 bps").max(1e4,"Slippage tolerance cannot exceed 10000 bps"),qm=A.object({tradingPairId:f$,marginAccountId:f$,conditionType:u9$,triggerPrice:z4,triggerSource:m9$.optional(),side:C5,positionSide:n9$,orderType:k5,limitPrice:z4.optional(),quantity:z4.optional(),reduceOnly:A.boolean().optional(),timeInForce:ZF.optional(),slippageToleranceBps:_z.optional(),expiresAt:qD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT conditional orders",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET conditional orders",path:["slippageToleranceBps"]}),Hm=A.object({conditionalOrderId:f$}),wm=A.object({margin_account_id:f$.optional(),trading_pair_id:f$.optional(),state:l9$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),d9$=A.object({tradingPairId:f$,orderType:k5,side:C5,price:z4.optional(),quantity:z4,tradingMode:Sz.optional(),slippageTolerance:Km,useMasterBalance:A.boolean().optional(),expirationDate:qD.optional(),timeInForce:Um.optional(),marginAccountId:f$.optional(),positionSide:ND.optional(),leverage:z4.optional(),reduceOnly:A.boolean().optional()}).refine(($)=>$.orderType!=="LIMIT"||$.price!==void 0,{message:"Price is required for LIMIT orders",path:["price"]}).refine(($)=>$.orderType!=="MARKET"||$.price===void 0,{message:"Price must not be provided for MARKET orders",path:["price"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["marginAccountId"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["positionSide"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["leverage"]}),Am=A.object({orders:A.array(d9$).min(1,"At least one order is required")}),p9$=A.object({orderId:f$,price:z4.optional(),quantity:z4.optional(),useMasterBalance:A.boolean().optional()}).refine(($)=>$.price!==void 0||$.quantity!==void 0,{message:"At least one of price or quantity must be provided"}),Im=A.object({orders:A.array(p9$).min(1,"At least one order is required")});var Lm=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),Bm=Lm.extend({state:A.string().trim().min(1,"State cannot be empty").optional()}),Zm=A.object({label:A.string().trim().min(1,"Label cannot be empty").optional(),collateralAsset:A.string().trim().min(1,"Collateral asset cannot be empty").optional()}).optional(),Fm=A.object({marginAccountId:f$}),jm=A.object({asset:A.string().trim().min(1,"Asset cannot be empty").optional()}).optional(),FF=A.object({marginAccountId:f$,request:A.object({asset:A.string().trim().min(1,"Asset cannot be empty"),amount:z4})}),Sm=Lm.extend({marginAccountId:f$,movement_type:A.string().trim().min(1,"Movement type cannot be empty").optional()}),_m=A.object({marginAccountId:f$,request:A.object({tradingPairId:f$,side:C5,positionSide:ND,orderType:k5,price:z4.optional(),quantity:z4,leverage:z4,reduceOnly:A.boolean().optional()})}).refine(($)=>$.request.orderType!=="LIMIT"||$.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}).refine(($)=>$.request.orderType!=="MARKET"||$.request.price===void 0,{message:"price must not be provided for MARKET risk simulations",path:["request","price"]});var Em=A.enum(["1m","5m","15m","30m","1h","4h","1d","1w","1M"],{message:'Interval must be one of: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"'}),i9$=31536000000,c9$=946684800000,Ez=A.number().int().positive({message:"Timestamp must be a positive integer (milliseconds since epoch)"}).min(c9$,{message:"Timestamp must be at least Jan 1, 2000 (946684800000 ms). Did you pass seconds instead of milliseconds?"}).max(Number.MAX_SAFE_INTEGER,{message:"Timestamp must not exceed JavaScript's maximum safe integer"}).refine(($)=>$<=Date.now()+i9$,{message:"Timestamp must not be unreasonably far in the future (max 1 year ahead)"}),VH4=A.object({tradingPairId:f$,interval:Em,startTime:Ez,endTime:Ez}).refine(($)=>$.startTime<$.endTime,{message:"startTime must be less than endTime",path:["endTime"]}),OH4=A.string().min(1,"Trading pair symbol cannot be empty").regex(/^[A-Za-z0-9]{1,10}\/[A-Za-z0-9]{1,10}$/,{message:'Trading pair symbol must be in format "BASE/QUOTE" (e.g., "BTC/USDT", "ETH/USD")'}),o9$=A.number().int().positive({message:"Limit must be a positive integer"}).max(500,{message:"Limit cannot exceed 500 bars per request"}).optional(),Pm=A.object({tradingPairId:f$,interval:Em,startTime:Ez.optional(),endTime:Ez.optional(),limit:o9$}).refine(($)=>{if($.startTime!==void 0&&$.endTime!==void 0)return $.startTime<$.endTime;return!0},{message:"startTime must be less than endTime",path:["endTime"]});var MH4=A.object({tradingPairId:f$}),zH4=A.object({query:A.string().min(1,"Search query cannot be empty").optional(),page_size:A.number().int().min(1).max(100).optional(),page:A.number().int().min(1).optional()}),eJ=A.object({tradingPairId:f$});var Rm=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),r9$=A.enum(["OPEN","CLOSED","LIQUIDATING"],{message:'Position status must be "OPEN", "CLOSED", or "LIQUIDATING"'}),t9$=A.enum(["MARKET","LIMIT","IOC"],{message:'Close type must be "MARKET", "LIMIT", or "IOC"'}),x5=A.object({positionId:f$}),Tm=Rm.extend({margin_account_id:f$.optional(),trading_pair_id:f$.optional(),status:r9$.optional()}),Cm=x5,km=x5.extend({request:A.object({closeType:t9$,limitPrice:z4.optional(),slippageToleranceBps:_z.optional(),quantity:z4.optional()})}).refine(($)=>$.request.closeType!=="LIMIT"||$.request.limitPrice!==void 0,{message:"limitPrice is required for LIMIT close requests",path:["request","limitPrice"]}).refine(($)=>$.request.closeType==="LIMIT"||$.request.limitPrice===void 0,{message:"limitPrice is only allowed for LIMIT close requests",path:["request","limitPrice"]}),xm=x5,fm=x5.extend({request:A.object({amount:z4,asset:A.string().trim().min(1,"Asset cannot be empty")})}),bm=x5.extend({request:A.object({amount:z4})}),vm=A.object({triggerPrice:z4,orderType:k5,limitPrice:z4.optional(),quantity:z4.optional(),timeInForce:ZF.optional(),slippageToleranceBps:_z.optional(),expiresAt:qD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT TP/SL legs",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET TP/SL legs",path:["slippageToleranceBps"]}),gm=x5.extend({request:A.object({takeProfit:vm.optional(),stopLoss:vm.optional()}).refine(($)=>$.takeProfit!==void 0||$.stopLoss!==void 0,{message:"At least one of takeProfit or stopLoss is required"})}),ym=Rm.extend({position_id:f$.optional(),margin_account_id:f$.optional(),trading_pair_id:f$.optional()});var a9$=A.enum(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"],{message:'Entry type must be "CREDIT", "DEBIT", "LOCK", "UNLOCK", or "FEE"'}),s9$=A.enum(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"],{message:'Transaction type must be "DEPOSIT", "WITHDRAWAL", "TRADE", "FEE", "FUNDING", "LIQUIDATION", "INTEREST", or "REWARD"'}),hm=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),entry_type:a9$.optional(),transaction_type:s9$.optional(),asset_id:f$.optional()}),um=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),trading_pair_id:f$.optional()});var FH4=A.string().regex(/^0x[a-fA-F0-9]{40}$/,{message:"Must be a valid Ethereum address (e.g., '0x1234...5678')"}),jF=A.union([A.string().regex(/^\d+$/,"Must be a positive integer string").refine(($)=>BigInt($)>0n,{message:"Amount must be greater than 0"}),A.bigint().refine(($)=>$>0n,{message:"Amount must be greater than 0"})]),mm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),lm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),nm=A.object({assetId:f$,amount:jF,autoWait:A.boolean().optional()}),jH4=A.object({assetId:f$});class Pz extends x4{async simulateFees($){let J=F$(LF,$),Q=new URLSearchParams;if(Q.append("trading_pair_id",J.trading_pair_id),Q.append("side",J.side),Q.append("price",J.price),Q.append("quantity",J.quantity),J.order_type!==void 0)Q.append("order_type",J.order_type);if(J.slippage_tolerance_bps!==void 0)Q.append("slippage_tolerance_bps",String(J.slippage_tolerance_bps));let Y=`/api/v1/fees/simulate?${Q.toString()}`;return await this.makeAuthenticatedRequest(Y,{method:"GET"})}}function N4($){return encodeURIComponent($)}function Z1($,J){if(!J)return $;let Q=new URLSearchParams;for(let[X,G]of Object.entries(J))if(G!==void 0)Q.set(X,String(G));let Y=Q.toString();return Y?`${$}?${Y}`:$}var b$={orders:{create:()=>"/api/v1/orders",list:($)=>Z1("/api/v1/orders",$),get:($)=>`/api/v1/orders/${N4($)}`,replace:($)=>`/api/v1/orders/${N4($)}`,cancel:()=>"/api/v1/orders/cancel",batchCancel:()=>"/api/v1/orders/batch-cancel",batchCancelAll:()=>"/api/v1/orders/batch-cancel-all",batchCancelAllByPair:($)=>`/api/v1/orders/batch-cancel-all/${N4($)}`,batchCreate:()=>"/api/v1/orders/batch-create",batchReplace:()=>"/api/v1/orders/batch-replace",createConditional:()=>"/api/v1/orders/conditional",listConditional:($)=>Z1("/api/v1/orders/conditional",$),cancelConditional:($)=>`/api/v1/orders/conditional/${N4($)}`},market:{listTradingPairs:($)=>Z1("/api/v1/market/pairs",$),getTradingPair:($)=>`/api/v1/market/pairs/${N4($)}`,getCandles:($,J,Q)=>Z1(`/api/v1/market/pairs/charts/candlestick/${N4($)}/${N4(J)}`,Q),getMarketMetadata:($)=>`/api/v1/market/pairs/${N4($)}/metadata`,getPerpMarketConfig:($)=>`/api/v1/market/pairs/${N4($)}/perp/config`,getPerpMarketSummary:($)=>`/api/v1/market/pairs/${N4($)}/perp/summary`,getMarkPrice:($)=>`/api/v1/market/pairs/${N4($)}/mark-price`,getIndexPrice:($)=>`/api/v1/market/pairs/${N4($)}/index-price`,getFundingState:($)=>`/api/v1/market/pairs/${N4($)}/funding`,listFundingHistory:($,J)=>Z1(`/api/v1/market/pairs/${N4($)}/funding/history`,J),getOpenInterest:($)=>`/api/v1/market/pairs/${N4($)}/open-interest`},orderbook:{get:($,J)=>Z1(`/api/v1/orderbook/${N4($)}`,J)},trades:{publicByPair:($,J)=>Z1(`/api/v1/trades/${N4($)}`,J),user:($)=>Z1("/api/v1/accounts/trades",$)},positions:{list:($)=>Z1("/api/v1/positions",$),get:($)=>`/api/v1/positions/${N4($)}`,close:($)=>`/api/v1/positions/${N4($)}/close`,risk:($)=>`/api/v1/positions/${N4($)}/risk`,addMargin:($)=>`/api/v1/positions/${N4($)}/margin/add`,reduceMargin:($)=>`/api/v1/positions/${N4($)}/margin/reduce`,attachTpSl:($)=>`/api/v1/positions/${N4($)}/tp-sl`,history:($)=>Z1("/api/v1/positions/history",$)},marginAccounts:{list:($)=>Z1("/api/v1/margin/accounts",$),create:()=>"/api/v1/margin/accounts",summary:($)=>`/api/v1/margin/accounts/${N4($)}`,availableCollateral:($)=>Z1("/api/v1/margin/collateral/available",$),transferIn:($)=>`/api/v1/margin/accounts/${N4($)}/collateral/transfer-in`,transferOut:($)=>`/api/v1/margin/accounts/${N4($)}/collateral/transfer-out`,movements:($,J)=>Z1(`/api/v1/margin/accounts/${N4($)}/movements`,J),simulateOrderRisk:($)=>`/api/v1/margin/accounts/${N4($)}/simulate-order-risk`},streams:{orderbook:()=>"/api/v1/streaming/orderbook",trades:()=>"/api/v1/streaming/trades",perpMarketSummaries:()=>"/api/v1/streaming/perp-market-summaries",markPrices:()=>"/api/v1/streaming/mark-prices",privateTrades:()=>"/api/v1/streaming/private-trades",orders:()=>"/api/v1/streaming/orders",positions:()=>"/api/v1/streaming/positions",marginAccount:()=>"/api/v1/streaming/margin-account",funding:()=>"/api/v1/streaming/funding",liquidationAlerts:()=>"/api/v1/streaming/liquidation-alerts"}};class vz extends x4{async listMarginAccounts($){if($)F$(Bm,$);return await this.makeAuthenticatedRequest(b$.marginAccounts.list($))}async createMarginAccount($){return F$(Zm,$),await this.makeAuthenticatedRequest(b$.marginAccounts.create(),{method:"POST",body:JSON.stringify({label:$?.label,collateral_asset:$?.collateralAsset})})}async getMarginAccountSummary($){return F$(Fm,{marginAccountId:$}),await this.makeAuthenticatedRequest(b$.marginAccounts.summary($))}async getAvailableCollateral($){return F$(jm,$),await this.makeAuthenticatedRequest(b$.marginAccounts.availableCollateral($))}async transferCollateralToMarginAccount($,J){return F$(FF,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.transferIn($),{method:"POST",body:JSON.stringify({asset:J.asset,amount:J.amount})})}async transferCollateralFromMarginAccount($,J){return F$(FF,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.transferOut($),{method:"POST",body:JSON.stringify({asset:J.asset,amount:J.amount})})}async getMarginAccountMovements($,J){return F$(Sm,{marginAccountId:$,...J}),await this.makeAuthenticatedRequest(b$.marginAccounts.movements($,J))}async simulateOrderRisk($,J){return F$(_m,{marginAccountId:$,request:J}),await this.makeAuthenticatedRequest(b$.marginAccounts.simulateOrderRisk($),{method:"POST",body:JSON.stringify({trading_pair_id:J.tradingPairId,side:J.side,position_side:J.positionSide,order_type:J.orderType,price:J.price,quantity:J.quantity,leverage:J.leverage,reduce_only:J.reduceOnly})})}}class Rz extends x4{async getPaginatedTradingPairs($){let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.market_type)J.append("market_type",$.market_type);if($?.base_token)J.append("base_token",$.base_token);if($?.quote_token)J.append("quote_token",$.quote_token);if($?.is_active!==void 0)J.append("is_active",$.is_active.toString());let Q=J.toString(),Y=Q?`/api/v1/market/pairs?${Q}`:"/api/v1/market/pairs";return await this.makePublicRequest(Y)}async getTradingPairBySymbol($){return(await this.getPaginatedTradingPairs({page_size:100})).trading_pairs.find((Q)=>Q.symbol===$)}async getCandlesticks($,J,Q){F$(Pm,{tradingPairId:$,interval:J,startTime:Q?.startTime,endTime:Q?.endTime,limit:Q?.limit});let Y=new URLSearchParams;if(Q?.startTime!==void 0)Y.append("start_time",Q.startTime.toString());if(Q?.endTime!==void 0)Y.append("end_time",Q.endTime.toString());if(Q?.limit!==void 0)Y.append("limit",Q.limit.toString());let X=Y.toString(),G=X?`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent($)}/${J}?${X}`:`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent($)}/${J}`;return(await this.makePublicRequest(G)).data||[]}async getMarketMetadata($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getMarketMetadata($))}async getPerpMarketConfig($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getPerpMarketConfig($))}async getPerpMarketSummary($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getPerpMarketSummary($))}async getMarkPrice($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getMarkPrice($))}async getIndexPrice($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getIndexPrice($))}async getFundingState($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getFundingState($))}async listFundingHistory($,J){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.listFundingHistory($,J))}async getOpenInterest($){return F$(eJ,{tradingPairId:$}),await this.makePublicRequest(b$.market.getOpenInterest($))}}class Tz extends x4{async getOrderbook($,J={}){let{depth:Q=10,tradingMode:Y,magnitude:X,denomination:G}=J,W=new URLSearchParams;if(W.set("levels",String(Q)),Y)W.set("trading_mode",Y);if(X!==void 0)W.set("magnitude",String(X));if(G)W.set("denomination",G.toLowerCase());let D=await this.makePublicRequest(`/api/v1/orderbook/${encodeURIComponent($)}?${W.toString()}`);return{tradingPairId:D.symbol,tradingMode:D.trading_mode,bids:D.data.bids.map((U)=>({price:U.price,quantity:U.quantity,orderCount:U.order_count})),asks:D.data.asks.map((U)=>({price:U.price,quantity:U.quantity,orderCount:U.order_count})),bestBid:D.data.best_bid,bestAsk:D.data.best_ask,bidVolume:D.data.bid_volume,askVolume:D.data.ask_volume,baseDecimals:D.base_decimals,quoteDecimals:D.quote_decimals,timestamp:D.timestamp,sequence:D.sequence_number}}}class Cz extends x4{async listPositions($){if($)F$(Tm,$);return await this.makeAuthenticatedRequest(b$.positions.list($))}async getPosition($){return F$(Cm,{positionId:$}),await this.makeAuthenticatedRequest(b$.positions.get($))}async closePosition($,J){return F$(km,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.close($),{method:"POST",body:JSON.stringify({close_type:J.closeType,limit_price:J.limitPrice,slippage_tolerance_bps:J.slippageToleranceBps,quantity:J.quantity})})}async getPositionRisk($){return F$(xm,{positionId:$}),await this.makeAuthenticatedRequest(b$.positions.risk($))}async addPositionMargin($,J){return F$(fm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.addMargin($),{method:"POST",body:JSON.stringify({position_id:$,amount:J.amount,asset:J.asset})})}async reducePositionMargin($,J){return F$(bm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.reduceMargin($),{method:"POST",body:JSON.stringify({position_id:$,amount:J.amount})})}async attachPositionTpSl($,J){return F$(gm,{positionId:$,request:J}),await this.makeAuthenticatedRequest(b$.positions.attachTpSl($),{method:"POST",body:JSON.stringify({take_profit:J.takeProfit?{trigger_price:J.takeProfit.triggerPrice,order_type:J.takeProfit.orderType,limit_price:J.takeProfit.limitPrice,quantity:J.takeProfit.quantity,time_in_force:J.takeProfit.timeInForce,slippage_tolerance_bps:J.takeProfit.slippageToleranceBps,expires_at:J.takeProfit.expiresAt}:void 0,stop_loss:J.stopLoss?{trigger_price:J.stopLoss.triggerPrice,order_type:J.stopLoss.orderType,limit_price:J.stopLoss.limitPrice,quantity:J.stopLoss.quantity,time_in_force:J.stopLoss.timeInForce,slippage_tolerance_bps:J.stopLoss.slippageToleranceBps,expires_at:J.stopLoss.expiresAt}:void 0})})}async listPositionHistory($){if($)F$(ym,$);return await this.makeAuthenticatedRequest(b$.positions.history($))}}class SF extends x4{async getProfile(){return await this.makeAuthenticatedRequest("/api/v1/accounts/me")}async getPaginatedUserMovements($){if($)F$(hm,$);let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.entry_type!==void 0)J.append("entry_type",$.entry_type);if($?.transaction_type!==void 0)J.append("transaction_type",$.transaction_type);if($?.asset_id!==void 0)J.append("asset_id",$.asset_id);let Q=J.toString(),Y=Q?`/api/v1/accounts/movements?${Q}`:"/api/v1/accounts/movements";return await this.makeAuthenticatedRequest(Y)}async getUserBalances($){let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());let Q=J.toString(),Y=Q?`/api/v1/accounts/balances?${Q}`:"/api/v1/accounts/balances";return await this.makeAuthenticatedRequest(Y)}async getUserBalanceByAssetId($){if(!$||$.trim()==="")throw new f6("assetId is required and cannot be empty",{endpoint:"/api/v1/accounts/balances/{asset_id}"});let J=`/api/v1/accounts/balances/${$}`;return await this.makeAuthenticatedRequest(J)}async getPortfolioStats($){let J=new URLSearchParams({period:$});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio?${J}`)}async getPortfolioChart($,J){let Q=new URLSearchParams({period:$,metric:J});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio/chart?${Q}`)}async getUserTrades($){if($)F$(um,$);let J=new URLSearchParams;if($?.page!==void 0)J.append("page",$.page.toString());if($?.page_size!==void 0)J.append("page_size",$.page_size.toString());if($?.trading_pair_id!==void 0)J.append("trading_pair_id",$.trading_pair_id);let Q=J.toString(),Y=Q?`/api/v1/accounts/trades?${Q}`:"/api/v1/accounts/trades";return await this.makeAuthenticatedRequest(Y)}}function e9$($){return{eventType:"trade",tradingPairId:$.trading_pair_id,tradingMode:$.trading_mode.toUpperCase(),data:{tradeId:$.data.trade_id,price:$.data.price,quantity:$.data.quantity,makerSide:$.data.maker_side.toUpperCase(),executedAt:$.data.executed_at}}}class _F extends x4{async getTrades($,J={}){let{page:Q=1}=J,Y=J.page_size!=null&&J.page_size>0?Math.min(J.page_size,100):25,X=new URLSearchParams;if(Q>1)X.set("page",String(Q));return X.set("page_size",String(Y)),(await this.makePublicRequest(`/api/v1/trades/${encodeURIComponent($)}?${X.toString()}`)).trades.map(e9$)}}class kz extends x4{async placeLimitOrder($,J,Q,Y,X){F$(Vm,{tradingPairId:$,side:J,quantity:Q,price:Y,options:X});let G={trading_pair_id:$,order_type:"LIMIT",side:J,price:Y,quantity:Q,trading_mode:X?.tradingMode||"SPOT",use_master_balance:X?.useMasterBalance,expiration_date:X?.expirationDate,time_in_force:X?.timeInForce,margin_account_id:X?.marginAccountId,position_side:X?.positionSide,leverage:X?.leverage,reduce_only:X?.reduceOnly};return await this.makeAuthenticatedRequest(b$.orders.create(),{method:"POST",body:JSON.stringify(G)})}async placeMarketOrder($,J,Q,Y){F$(Om,{tradingPairId:$,side:J,quantity:Q,options:Y});let X={trading_pair_id:$,order_type:"MARKET",side:J,slippage_tolerance_bps:Y?.slippageTolerance!==void 0?Math.round(Y.slippageTolerance*1e4):void 0,price:null,quantity:Q,trading_mode:Y?.tradingMode||"SPOT",margin_account_id:Y?.marginAccountId,position_side:Y?.positionSide,leverage:Y?.leverage,reduce_only:Y?.reduceOnly};return await this.makeAuthenticatedRequest(b$.orders.create(),{method:"POST",body:JSON.stringify(X)})}async cancelOrder($){F$(Mm,{orderId:$});let J={order_id:$};return await this.makeAuthenticatedRequest(b$.orders.cancel(),{method:"POST",body:JSON.stringify(J)})}async createConditionalOrder($){F$(qm,$);let J={trading_pair_id:$.tradingPairId,margin_account_id:$.marginAccountId,condition_type:$.conditionType,trigger_price:$.triggerPrice,trigger_source:$.triggerSource??"MARK_PRICE",side:$.side,position_side:$.positionSide,order_type:$.orderType,limit_price:$.limitPrice,quantity:$.quantity,reduce_only:$.reduceOnly??!0,time_in_force:$.timeInForce,slippage_tolerance_bps:$.slippageToleranceBps,expires_at:$.expiresAt};return await this.makeAuthenticatedRequest(b$.orders.createConditional(),{method:"POST",body:JSON.stringify(J)})}async cancelConditionalOrder($){return F$(Hm,{conditionalOrderId:$}),await this.makeAuthenticatedRequest(b$.orders.cancelConditional($),{method:"DELETE"})}async listConditionalOrders($){if($)F$(wm,$);let{page:J=1,page_size:Q=20,margin_account_id:Y,trading_pair_id:X,state:G}=$||{};return await this.makeAuthenticatedRequest(b$.orders.listConditional({page:J,page_size:Math.min(Math.max(Q,1),100),margin_account_id:Y,trading_pair_id:X,state:G}),{method:"GET"})}async batchCancel($){if(!$||$.length===0)throw Error("orderIds is required and must not be empty");return this.makeAuthenticatedRequest(b$.orders.batchCancel(),{method:"POST",body:JSON.stringify({order_ids:$})})}async batchCancelAll($){let J=$?b$.orders.batchCancelAllByPair($):b$.orders.batchCancelAll();return this.makeAuthenticatedRequest(J,{method:"POST"})}async replaceOrder($,J){F$(zm,{orderId:$,newOrder:J});let Q={use_master_balance:J.useMasterBalance??!1};if(J.price!==void 0)Q.price=J.price;if(J.quantity!==void 0)Q.quantity=J.quantity;return await this.makeAuthenticatedRequest(b$.orders.replace($),{method:"PUT",body:JSON.stringify(Q)})}async batchCreate($){F$(Am,{orders:$});let J={orders:$.map((Q)=>({trading_pair_id:Q.tradingPairId,order_type:Q.orderType,side:Q.side,price:Q.price,quantity:Q.quantity,trading_mode:Q.tradingMode||"SPOT",slippage_tolerance_bps:Q.slippageTolerance!==void 0?Math.round(Q.slippageTolerance*1e4):void 0,use_master_balance:Q.useMasterBalance,expiration_date:Q.expirationDate,time_in_force:Q.timeInForce,margin_account_id:Q.marginAccountId,position_side:Q.positionSide,leverage:Q.leverage,reduce_only:Q.reduceOnly}))};return this.makeAuthenticatedRequest(b$.orders.batchCreate(),{method:"POST",body:JSON.stringify(J)})}async batchReplace($){F$(Im,{orders:$});let J={orders:$.map((Q)=>({order_id:Q.orderId,price:Q.price,quantity:Q.quantity,use_master_balance:Q.useMasterBalance}))};return this.makeAuthenticatedRequest(b$.orders.batchReplace(),{method:"POST",body:JSON.stringify(J)})}async getPaginatedOrders($){if($)F$(Nm,$);let{page:J=1,page_size:Q=10,status:Y,trading_pair_id:X,trading_mode:G,margin_account_id:W}=$||{},D=J>0?J:1,U=Q>0?Q:10,V=Math.min(U,100),O=new URLSearchParams;if(O.append("page",D.toString()),O.append("page_size",V.toString()),Y)O.append("status",Y);if(X)O.append("trading_pair_id",X);if(G)O.append("trading_mode",G);if(W)O.append("margin_account_id",W);let M=`/api/v1/orders?${O.toString()}`;return await this.makeAuthenticatedRequest(M,{method:"GET"})}async getOrder($){return await this.makeAuthenticatedRequest(b$.orders.get($),{method:"GET"})}}var EF=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AccessControlBadConfirmation",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"bytes32",name:"neededRole",type:"bytes32"}],name:"AccessControlUnauthorizedAccount",type:"error"},{inputs:[{internalType:"address",name:"target",type:"address"}],name:"AddressEmptyCode",type:"error"},{inputs:[],name:"ECDSAInvalidSignature",type:"error"},{inputs:[{internalType:"uint256",name:"length",type:"uint256"}],name:"ECDSAInvalidSignatureLength",type:"error"},{inputs:[{internalType:"bytes32",name:"s",type:"bytes32"}],name:"ECDSAInvalidSignatureS",type:"error"},{inputs:[{internalType:"address",name:"implementation",type:"address"}],name:"ERC1967InvalidImplementation",type:"error"},{inputs:[],name:"ERC1967NonPayable",type:"error"},{inputs:[],name:"EnforcedPause",type:"error"},{inputs:[],name:"ExpectedPause",type:"error"},{inputs:[],name:"FailedCall",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[],name:"InsufficientBalance",type:"error"},{inputs:[],name:"InvalidAddress",type:"error"},{inputs:[],name:"InvalidInitialization",type:"error"},{inputs:[],name:"InvalidSeed",type:"error"},{inputs:[],name:"InvalidSignature",type:"error"},{inputs:[],name:"InvalidTimestamp",type:"error"},{inputs:[],name:"NonceAlreadyUsed",type:"error"},{inputs:[],name:"NotInitializing",type:"error"},{inputs:[],name:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[],name:"TransferFailed",type:"error"},{inputs:[],name:"UUPSUnauthorizedCallContext",type:"error"},{inputs:[{internalType:"bytes32",name:"slot",type:"bytes32"}],name:"UUPSUnsupportedProxiableUUID",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newFeeCollector",type:"address"}],name:"FeeCollectorChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"version",type:"uint64"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newSettlementContract",type:"address"}],name:"SettlementContractChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"maker",type:"address"},{indexed:!0,internalType:"address",name:"taker",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SettlementTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"DEBUGGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"FEE_MANAGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"PAUSER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"SETTLEMENT_MANAGER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"UPGRADER_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"UPGRADE_INTERFACE_VERSION",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"seed",type:"bytes"}],name:"decodeSeed",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"destination",type:"address"},{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"depositERC20",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"destination",type:"address"},{internalType:"string",name:"applicationId",type:"string"}],name:"depositNative",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"feeCollector",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getChainID",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_admin",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"proxiableUUID",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"callerConfirmation",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_newFeeCollector",type:"address"}],name:"setFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_settlementContract",type:"address"}],name:"setSettlementContract",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"settlementContract",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"maker",type:"address"},{internalType:"address",name:"taker",type:"address"},{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"fee",type:"uint256"}],name:"transferOnSettlement",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"seed",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"seed",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"withdrawNative",outputs:[],stateMutability:"nonpayable",type:"function"}];var HD={vault:EF};class xz extends x4{publicClient;chain;applicationsAPI;profileAPI;walletClient;constructor($,J,Q,Y,X,G){super(G);this.publicClient=$,this.chain=Q,this.walletClient=J,this.applicationsAPI=Y,this.profileAPI=X}setWalletClient($){this.walletClient=$}async getVaultAddress(){return(await this.applicationsAPI.getApplicationConfig()).vaultContractAddress}async getClientId(){return(await this.applicationsAPI.getApplicationConfig()).clientId}async resolveAsset($){let J;try{J=(await this.profileAPI.getUserBalanceByAssetId($)).token}catch(Y){if(Y instanceof f6){if(Y.statusCode===404)throw new D8(`Asset ID '${$}' does not exist`,{revertReason:"ASSET_NOT_FOUND",cause:Y});throw new D8(`Failed to resolve asset ID '${$}': ${Y.retryable?"Network error occurred":"API request failed"}`,{revertReason:Y.retryable?"NETWORK_ERROR":"API_ERROR",cause:Y})}throw new D8(`Failed to resolve asset ID '${$}': Unexpected error`,{revertReason:"UNKNOWN_ERROR",cause:Y instanceof Error?Y:void 0})}return{tokenAddress:J,isNativeToken:J===X1}}async approve($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(mm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),{tokenAddress:X}=await this.resolveAsset($),G=this.walletClient.account;if(!G)throw new b4("No account available in wallet client","account");let W=G.getNonce?await G.getNonce():0n,D=await this.walletClient.writeContract({address:X,abi:R3,functionName:"approve",args:[Y,J],chain:this.chain,account:G}),U={nonce:W,hash:D,status:"pending"};return await this.waitForTransaction(U,Q)}async deposit($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(lm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),X=await this.getClientId(),{tokenAddress:G,isNativeToken:W}=await this.resolveAsset($);if(!W){if(await this.needsApproval($,J))throw new D8(`Approval required before deposit. Please invoke approve() first for asset ${$} (token address: ${G}).`,{revertReason:"APPROVAL_REQUIRED"})}let D=this.walletClient.account;if(!D)throw new b4("No account available in wallet client","account");let U;if(W)U=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"depositNative",args:[D.address,X],account:D,chain:this.chain,value:J});else U=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"depositERC20",args:[D.address,X,G,J],account:D,chain:this.chain});let V=D.getNonce?await D.getNonce():0n,O={hash:U,status:"pending",nonce:V};return await this.waitForTransaction(O,Q)}async withdraw($,J,Q=!0){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");F$(nm,{assetId:$,amount:J,autoWait:Q});let Y=await this.getVaultAddress(),{tokenAddress:X,isNativeToken:G}=await this.resolveAsset($),{seed:W,signature:D}=await this.getWithdrawSignature($,J),U=this.walletClient.account;if(!U)throw new b4("No account available in wallet client","account");let V;if(G)V=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"withdrawNative",args:[J,W,D],account:U,chain:this.chain});else V=await this.walletClient.writeContract({address:Y,abi:HD.vault,functionName:"withdraw",args:[X,J,W,D],account:U,chain:this.chain});let O=U.getNonce?await U.getNonce():0n,M={hash:V,status:"pending",nonce:O};return await this.waitForTransaction(M,Q)}async getBalance($){throw new f6("getBalance() is deprecated and no longer supported. Please use profileAPI.getUserBalances() or profileAPI.getUserBalanceByAssetId() instead for balance data.",{statusCode:410})}async getAllowance($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=await this.getVaultAddress(),Y=(await this.walletClient.getAddresses())[0];if(!Y)throw new b4("No account found in wallet client.","walletClient");let{tokenAddress:X}=await this.resolveAsset($);return await this.publicClient.readContract({address:X,abi:R3,functionName:"allowance",args:[Y,J]})}async needsApproval($,J){return await this.getAllowance($)<J}async getWithdrawSignature($,J){let Q=await this.makeAuthenticatedRequest("/api/v1/withdraw/signature",{method:"POST",body:JSON.stringify({asset_id:$,amount:J.toString()})});return{seed:Q.seed,signature:Q.signature}}async waitForTransaction($,J=!0,Q={}){if(!J)return $;let{confirmations:Y=1,timeout:X=60000}=Q;try{let G=await this.publicClient.waitForTransactionReceipt({hash:$.hash,confirmations:Y,timeout:X});return{...$,status:G.status==="success"?"confirmed":"failed",receipt:G}}catch{return{...$,status:"failed"}}}}class fz extends x4{chain;walletClient;constructor($,J,Q){super(Q);this.chain=J,this.walletClient=$}setWalletClient($){this.walletClient=$}async authenticate($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=this.walletClient.account;if(!J)throw new b4("No account available in wallet client","account");let Q=await this.createChallenge(J.address,$),Y=await this.signChallenge(Q.message);return await this.verifySignature(J.address,Y,Q.nonce,$)}async signChallenge($){if(!this.walletClient)throw new b4("Wallet client not set. Connect a wallet first.","walletClient");let J=this.walletClient.account;if(!J)throw new b4("No account available in wallet client","account");return await this.walletClient.signMessage({account:J,message:$})}async createChallenge($,J){let Q=await this.makePublicRequest("/api/v1/auth/challenge",{method:"POST",body:JSON.stringify({address:$,client_id:J,chain_id:this.chain.id})});return{nonce:Q.nonce,message:Q.message,expiresAt:Q.expires_at}}async verifySignature($,J,Q,Y){let X=await this.makePublicRequest("/api/v1/auth/verify",{method:"POST",body:JSON.stringify({address:$,signature:J,nonce:Q,client_id:Y,chain_id:this.chain.id})});return{accessToken:X.access_token,refreshToken:X.refresh_token,expiresAt:X.expires_at,user:{id:X.user.id,address:X.user.address,username:X.user.username}}}async authenticateBackend($){let J=await this.makePublicRequest("/api/v1/auth/backend",{method:"POST",body:JSON.stringify({secret_key:$,chain_id:this.chain.id})});return{accessToken:J.access_token,expiresAt:J.expires_at,application:{id:J.application.id,name:J.application.name,clientId:J.application.client_id}}}async refreshToken($){let J=await this.makePublicRequest("/api/v1/auth/refresh",{method:"POST",body:JSON.stringify({refresh_token:$})});return{accessToken:J.access_token,expiresAt:J.expires_at}}async revokeToken(){await this.makeAuthenticatedRequest("/api/v1/auth/revoke",{method:"POST"})}}class PF{auth;applications;fees;vault;trading;market;marginAccounts;positions;profile;orderbook;trades;ws;walletClient;publicClient;authState;network;chain;propagateAccessToken($){this.auth.setAccessToken($),this.applications.setAccessToken($),this.fees.setAccessToken($),this.vault.setAccessToken($),this.trading.setAccessToken($),this.market.setAccessToken($),this.marginAccounts.setAccessToken($),this.positions.setAccessToken($),this.profile.setAccessToken($),this.orderbook.setAccessToken($),this.trades.setAccessToken($),this.ws.setToken($)}constructor($){let J=["mainnet","development","staging","local"];if(!$.network||!J.includes($.network))throw new b4(`network must be one of: ${J.join(", ")}. Got: ${$.network}`,"network");if(this.network=$.network,!$.seiRpcUrl)throw new b4("seiRpcUrl is required","seiRpcUrl");try{new URL($.seiRpcUrl)}catch(W){throw new b4(`seiRpcUrl must be a valid URL, got: ${$.seiRpcUrl}`,"seiRpcUrl")}let Q=aL(this.network),Y=this.network==="mainnet"?MD:zD;this.chain=Y;let X=OD($.seiRpcUrl);this.publicClient=OF({chain:Y,transport:X});let G=WW(this.network);if($.walletClient){if($.walletClient.chain?.id!==Y.id)throw new b4(`Wallet client chain mismatch. Expected ${Y.id}, got ${$.walletClient.chain?.id}`,"walletClient");this.walletClient=$.walletClient}this.applications=new jz(G),this.market=new Rz(G),this.marginAccounts=new vz(G),this.positions=new Cz(G),this.auth=new fz(this.walletClient,this.chain,G),this.fees=new Pz(G),this.profile=new SF(G),this.vault=new xz(this.publicClient,this.walletClient,this.chain,this.applications,this.profile,G),this.trading=new kz(G),this.orderbook=new Tz(G),this.trades=new _F(G),this.ws=dL(Q),this.ws.connect().catch(console.error)}async login($,J){let Q=await this.auth.authenticate($);if(this.authState={accessToken:Q.accessToken,refreshToken:Q.refreshToken,expiresAt:Q.expiresAt,user:Q.user},this.propagateAccessToken(this.authState.accessToken),J?.connectWebSocket)await this.ws.connect();return this.authState}getAuthState(){return this.authState}setAuthState($){this.authState=$,this.propagateAccessToken($.accessToken)}async logout(){if(this.authState?.refreshToken)try{await this.auth.revokeToken()}catch($){console.warn("Failed to revoke token on logout:",$)}this.authState=void 0,this.propagateAccessToken(""),this.ws.disconnect()}async refreshAuth(){if(!this.authState?.refreshToken)throw new f6("No refresh token available",{endpoint:"auth/refresh",statusCode:dm.StatusCodes.UNAUTHORIZED});try{let $=await this.auth.refreshToken(this.authState.refreshToken);return this.authState={...this.authState,accessToken:$.accessToken,expiresAt:$.expiresAt},this.propagateAccessToken(this.authState.accessToken),this.authState}catch($){throw this.authState=void 0,$}}isAuthenticated(){return!!this.authState}isConnected(){return!!this.walletClient&&!!this.publicClient}setWalletClient($){if($.chain?.id!==this.chain.id)throw new b4(`Wallet client chain mismatch. Expected ${this.chain.id}, got ${$.chain?.id}`,"walletClient");this.walletClient=$,this.auth.setWalletClient($),this.vault.setWalletClient($)}getAccountAddress(){if(!this.walletClient)throw new GW("Wallet client not set","walletClient");if(this.walletClient.account)return this.walletClient.account.address;throw new GW("No account available","account")}getNetwork(){return this.network}getChainId(){return this.chain.id}async waitForTransaction($,J,Q){return this.publicClient.waitForTransactionReceipt({hash:$,confirmations:J,timeout:Q})}}function vF($){return new PF($)}N5();w$();u0();g1();function pm($){if(typeof $==="string"){if(!X4($,{strict:!1}))throw new j4({address:$});return{address:$,type:"json-rpc"}}if(!X4($.address,{strict:!1}))throw new j4({address:$.address});return{address:$.address,nonceManager:$.nonceManager,sign:$.sign,signAuthorization:$.signAuthorization,signMessage:$.signMessage,signTransaction:$.signTransaction,signTypedData:$.signTypedData,source:"custom",type:"local"}}N5();$6();w$();var RF=!1;async function e0({hash:$,privateKey:J,to:Q="object"}){let{r:Y,s:X,recovery:G}=B1.sign($.slice(2),J.slice(2),{lowS:!0,extraEntropy:T4(RF,{strict:!1})?o4(RF):RF}),W={r:y(Y,{size:32}),s:y(X,{size:32}),v:G?28n:27n,yParity:G};return(()=>{if(Q==="bytes"||Q==="hex")return Oz({...W,to:Q});return W})()}async function im($){let{chainId:J,nonce:Q,privateKey:Y,to:X="object"}=$,G=$.contractAddress??$.address,W=await e0({hash:lM({address:G,chainId:J,nonce:Q}),privateKey:Y,to:X});if(X==="object")return{address:G,chainId:J,nonce:Q,...W};return W}async function cm({message:$,privateKey:J}){return await e0({hash:P5($),privateKey:J,to:"hex"})}b1();u1();w$();function om($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let{chainId:Y,nonce:X,...G}=Q,W=Q.address;J.push([Y?P4(Y):"0x",W,X?P4(X):"0x",...f5({},G)])}return J}w$();pB();u0();x$();ZW();DX();g1();x1();rQ();e4();function rm($){let{authorizationList:J}=$;if(J)for(let Q of J){let{chainId:Y}=Q,X=Q.address;if(!X4(X))throw new j4({address:X});if(Y<0)throw new _Y({chainId:Y})}bz($)}function tm($){let{blobVersionedHashes:J}=$;if(J){if(J.length===0)throw new eW;for(let Q of J){let Y=t$(Q),X=C4(y1(Q,0,1));if(Y!==32)throw new vZ({hash:Q,size:Y});if(X!==iM)throw new RZ({hash:Q,version:X})}}bz($)}function bz($){let{chainId:J,maxPriorityFeePerGas:Q,maxFeePerGas:Y,to:X}=$;if(J<=0)throw new _Y({chainId:J});if(X&&!X4(X))throw new j4({address:X});if(Y&&Y>V5)throw new q0({maxFeePerGas:Y});if(Q&&Y&&Q>Y)throw new oJ({maxFeePerGas:Y,maxPriorityFeePerGas:Q})}function am($){let{chainId:J,maxPriorityFeePerGas:Q,gasPrice:Y,maxFeePerGas:X,to:G}=$;if(J<=0)throw new _Y({chainId:J});if(G&&!X4(G))throw new j4({address:G});if(Q||X)throw new R("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.");if(Y&&Y>V5)throw new q0({maxFeePerGas:Y})}function sm($){let{chainId:J,maxPriorityFeePerGas:Q,gasPrice:Y,maxFeePerGas:X,to:G}=$;if(G&&!X4(G))throw new j4({address:G});if(typeof J<"u"&&J<=0)throw new _Y({chainId:J});if(Q||X)throw new R("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.");if(Y&&Y>V5)throw new q0({maxFeePerGas:Y})}u0();u1();g1();function wD($){if(!$||$.length===0)return[];let J=[];for(let Q=0;Q<$.length;Q++){let{address:Y,storageKeys:X}=$[Q];for(let G=0;G<X.length;G++)if(X[G].length-2!==64)throw new VB({storageKey:X[G]});if(!X4(Y,{strict:!1}))throw new j4({address:Y});J.push([Y,X])}return J}function em($,J){let Q=oM($);if(Q==="eip1559")return QY$($,J);if(Q==="eip2930")return XY$($,J);if(Q==="eip4844")return JY$($,J);if(Q==="eip7702")return $Y$($,J);return YY$($,J)}function $Y$($,J){let{authorizationList:Q,chainId:Y,gas:X,nonce:G,to:W,value:D,maxFeePerGas:U,maxPriorityFeePerGas:V,accessList:O,data:M}=$;rm($);let N=wD(O),q=om(Q);return B6(["0x04",sJ([y(Y),G?y(G):"0x",V?y(V):"0x",U?y(U):"0x",X?y(X):"0x",W??"0x",D?y(D):"0x",M??"0x",N,q,...f5($,J)])])}function JY$($,J){let{chainId:Q,gas:Y,nonce:X,to:G,value:W,maxFeePerBlobGas:D,maxFeePerGas:U,maxPriorityFeePerGas:V,accessList:O,data:M}=$;tm($);let{blobVersionedHashes:N,sidecars:q}=$;if($.blobs&&(typeof N>"u"||typeof q>"u")){let B=typeof $.blobs[0]==="string"?$.blobs:$.blobs.map((v)=>a$(v)),F=$.kzg,S=A5({blobs:B,kzg:F});if(typeof N>"u")N=pM({commitments:S});if(typeof q>"u"){let v=I5({blobs:B,commitments:S,kzg:F});q=cM({blobs:B,commitments:S,proofs:v})}}let w=wD(O),I=[y(Q),X?y(X):"0x",V?y(V):"0x",U?y(U):"0x",Y?y(Y):"0x",G??"0x",W?y(W):"0x",M??"0x",w,D?y(D):"0x",N??[],...f5($,J)],Z=[],L=[],_=[];if(q)for(let B=0;B<q.length;B++){let{blob:F,commitment:S,proof:v}=q[B];Z.push(F),L.push(S),_.push(v)}return B6(["0x03",q?sJ([I,Z,L,_]):sJ(I)])}function QY$($,J){let{chainId:Q,gas:Y,nonce:X,to:G,value:W,maxFeePerGas:D,maxPriorityFeePerGas:U,accessList:V,data:O}=$;bz($);let M=wD(V),N=[y(Q),X?y(X):"0x",U?y(U):"0x",D?y(D):"0x",Y?y(Y):"0x",G??"0x",W?y(W):"0x",O??"0x",M,...f5($,J)];return B6(["0x02",sJ(N)])}function XY$($,J){let{chainId:Q,gas:Y,data:X,nonce:G,to:W,value:D,accessList:U,gasPrice:V}=$;am($);let O=wD(U),M=[y(Q),G?y(G):"0x",V?y(V):"0x",Y?y(Y):"0x",W??"0x",D?y(D):"0x",X??"0x",O,...f5($,J)];return B6(["0x01",sJ(M)])}function YY$($,J){let{chainId:Q=0,gas:Y,data:X,nonce:G,to:W,value:D,gasPrice:U}=$;sm($);let V=[G?y(G):"0x",U?y(U):"0x",Y?y(Y):"0x",W??"0x",D?y(D):"0x",X??"0x"];if(J){let O=(()=>{if(J.v>=35n){if((J.v-35n)/2n>0)return J.v;return 27n+(J.v===35n?0n:1n)}if(Q>0)return BigInt(Q*2)+BigInt(35n+J.v-27n);let q=27n+(J.v===27n?0n:1n);if(J.v!==q)throw new UB({v:J.v});return q})(),M=s4(J.r),N=s4(J.s);V=[...V,y(O),M==="0x00"?"0x":M,N==="0x00"?"0x":N]}else if(Q>0)V=[...V,y(Q),"0x","0x"];return sJ(V)}function f5($,J){let Q=J??$,{v:Y,yParity:X}=Q;if(typeof Q.r>"u")return[];if(typeof Q.s>"u")return[];if(typeof Y>"u"&&typeof X>"u")return[];let G=s4(Q.r),W=s4(Q.s);return[(()=>{if(typeof X==="number")return X?y(1):"0x";if(Y===0n)return"0x";if(Y===1n)return y(1);return Y===27n?"0x":y(1)})(),G==="0x00"?"0x":G,W==="0x00"?"0x":W]}async function $l($){let{privateKey:J,transaction:Q,serializer:Y=em}=$,X=(()=>{if(Q.type==="eip4844")return{...Q,sidecars:!1};return Q})(),G=await e0({hash:U4(await Y(X)),privateKey:J});return await Y(Q,G)}async function Jl($){let{privateKey:J,...Q}=$;return await e0({hash:Nz(Q),privateKey:J,to:"hex"})}function TF($,J={}){let{nonceManager:Q}=J,Y=P4(B1.getPublicKey($.slice(2),!1)),X=fM(Y);return{...pm({address:X,nonceManager:Q,async sign({hash:W}){return e0({hash:W,privateKey:$,to:"hex"})},async signAuthorization(W){return im({...W,privateKey:$})},async signMessage({message:W}){return cm({message:W,privateKey:$})},async signTransaction(W,{serializer:D}={}){return $l({privateKey:$,transaction:W,serializer:D})},async signTypedData(W){return Jl({...W,privateKey:$})}}),publicKey:Y,source:"privateKey"}}var CF=null;var GY$={privateKeyToAccount:TF,createWalletClient:wF,http:OD,createMonacoSDK:vF,sei:MD,seiTestnet:zD};function WY$($,J=GY$){let Q=$.network==="mainnet"?J.sei:J.seiTestnet,Y;if($.privateKey){let X=J.privateKeyToAccount($.privateKey);Y=J.createWalletClient({account:X,chain:Q,transport:J.http($.seiRpcUrl)})}return J.createMonacoSDK({walletClient:Y,network:$.network,seiRpcUrl:$.seiRpcUrl})}function Y1($){if(!CF){let J=$??mQ();CF=WY$(J)}return CF}async function l$($){let J=Y1($);if(!J.isAuthenticated()){let Q=$??mQ();await J.login(Q.clientId),console.error(`Authenticated as ${J.getAccountAddress()}`)}return J}function I$($){return{content:[{type:"text",text:JSON.stringify($,null,2)}]}}function I0($){return{content:[{type:"text",text:$}]}}function Ql($,J){if(J.network==="mainnet")return;$.registerTool("request_faucet",{description:"Request test funds from the faucet for all active trading pairs. Only available on non-mainnet networks (development, staging, local).",inputSchema:{}},async()=>{let Q=mQ(),Y=await l$(),G=Y.getAuthState()?.accessToken;if(!G)return I0("No access token available. Please authenticate first.");let W=WW(Q.network),D=Y.getAccountAddress();if(W.includes("localhost"))return I0("Faucet is not available for localhost.");let U=new AbortController,V=setTimeout(()=>U.abort(),30000);try{let O=await fetch(`${W}/api/v1/faucet/mint`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${G}`},body:JSON.stringify({address:D}),signal:U.signal});if(clearTimeout(V),O.ok)return I0(`Faucet request successful. Test funds have been minted to ${D} on the ${Q.network} network.`);let M=await O.text().catch(()=>"Unknown error");return I0(`Faucet request failed (${O.status}): ${M}`)}catch(O){if(clearTimeout(V),O instanceof Error&&O.name==="AbortError")return I0("Faucet request timed out after 30 seconds.");return I0(`Faucet error: ${O}`)}})}function Xl($,J){Ql($,J)}function Yl($){$.registerTool("simulate_fees",{description:"Simulate the fees for an order before placing it. Returns Monaco protocol fees, application fees, and total amounts.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),side:A.enum(["BUY","SELL"]).describe("Order side"),price:A.string().describe("Price per unit as a decimal string"),quantity:A.string().describe("Quantity to trade as a decimal string")})},async({trading_pair_id:J,side:Q,price:Y,quantity:X})=>{let W=await(await l$()).fees.simulateFees({trading_pair_id:J,side:Q,price:Y,quantity:X});return I$(W)})}function Gl($){Yl($)}function Wl($){$.registerTool("get_candlesticks",{description:"Get OHLCV candlestick data for a trading pair. Useful for charting and price analysis.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),interval:A.enum(["1m","5m","15m","1h","4h","1d"]).describe("Candlestick interval"),start_time:A.number().optional().describe("Start time as Unix timestamp (seconds)"),end_time:A.number().optional().describe("End time as Unix timestamp (seconds)"),limit:A.number().optional().describe("Max number of candlesticks to return")})},async({trading_pair_id:J,interval:Q,start_time:Y,end_time:X,limit:G})=>{let D=await Y1().market.getCandlesticks(J,Q,{startTime:Y,endTime:X,limit:G});return I$(D)})}function Dl($){$.registerTool("get_market_metadata",{description:"Get metadata for a specific trading pair including tick size, min order size, and trading rules.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID")})},async({trading_pair_id:J})=>{let Y=await Y1().market.getMarketMetadata(J);return I$(Y)})}function Ul($){$.registerTool("get_trading_pair_by_symbol",{description:"Look up a specific trading pair by its symbol (e.g. 'BTC/USDC'). Returns the pair's full details including its UUID.",inputSchema:A.object({symbol:A.string().describe("Trading pair symbol (e.g. 'BTC/USDC')")})},async({symbol:J})=>{let Y=await Y1().market.getTradingPairBySymbol(J);if(!Y)return I0(`Trading pair '${J}' not found.`);return I$(Y)})}function Kl($){$.registerTool("get_trading_pairs",{description:"Get a paginated list of trading pairs available on Monaco. Returns pair IDs, symbols, base/quote tokens, and status.",inputSchema:A.object({page:A.number().optional().describe("Page number (starts from 1)"),limit:A.number().optional().describe("Number of items per page (max 100)"),market_type:A.string().optional().describe("Filter by market type"),base_token:A.string().optional().describe("Filter by base token"),quote_token:A.string().optional().describe("Filter by quote token"),is_active:A.boolean().optional().describe("Filter by active status")})},async(J)=>{let Y=await Y1().market.getPaginatedTradingPairs(J);return I$(Y)})}function Vl($){Kl($),Ul($),Wl($),Dl($)}function Ol($){$.registerTool("get_orderbook",{description:"Get the current orderbook snapshot for a trading pair. Shows bids, asks, best bid/ask, and volumes.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),depth:A.number().optional().describe("Number of price levels to return (max 100, default 10)"),trading_mode:A.enum(["SPOT"]).optional().describe("Trading mode (default: SPOT)"),magnitude:A.number().optional().describe("Price grouping magnitude (e.g. 0.01, 0.1, 1, 10, 100)"),denomination:A.enum(["BASE","QUOTE"]).optional().describe("Quantity denomination: BASE or QUOTE")})},async({trading_pair_id:J,depth:Q,trading_mode:Y,magnitude:X,denomination:G})=>{let D=await Y1().orderbook.getOrderbook(J,{depth:Q,tradingMode:Y,magnitude:X,denomination:G});return I$(D)})}function Ml($){Ol($)}function zl($){$.registerTool("get_balance_by_asset",{description:"Get the authenticated user's balance for a specific asset by its UUID.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID")})},async({asset_id:J})=>{let Y=await(await l$()).profile.getUserBalanceByAssetId(J);return I$(Y)})}function Nl($){$.registerTool("get_balances",{description:"Get the authenticated user's token balances with pagination.",inputSchema:A.object({limit:A.number().optional().describe("Number of items to return (default: 20)"),offset:A.number().optional().describe("Number of items to skip (default: 0)")})},async({limit:J,offset:Q})=>{let X=await(await l$()).profile.getUserBalances({limit:J,offset:Q});return I$(X)})}function ql($){$.registerTool("get_movements",{description:"Get the authenticated user's ledger movements (transaction history) with pagination.",inputSchema:A.object({page:A.number().int().min(1).optional().describe("Page number (starts from 1, default: 1)"),limit:A.number().int().min(1).max(100).optional().describe("Items per page (default: 20, max: 100)"),entry_type:A.enum(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"]).optional().describe("Filter by entry type (e.g. CREDIT, DEBIT, LOCK, UNLOCK, FEE)"),transaction_type:A.enum(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"]).optional().describe("Filter by transaction type (e.g. DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD)"),asset_id:A.string().uuid().optional().describe("Filter by asset ID (UUID)")})},async({page:J,limit:Q,entry_type:Y,transaction_type:X,asset_id:G})=>{let D=await(await l$()).profile.getPaginatedUserMovements({page:J,limit:Q,entry_type:Y,transaction_type:X,asset_id:G});return I$(D)})}function Hl($){$.registerTool("get_profile",{description:"Get the authenticated user's profile including address, username, account type, and withdrawal status. Use get_balances, get_movements, and get_orders for detailed account data."},async()=>{let Q=await(await l$()).profile.getProfile();return I$(Q)})}function wl($){Hl($),Nl($),zl($),ql($)}var DY$="https://docs.0xmonaco.com/mcp",UY$="SearchMonacoDocs",gz=null;async function Al($,J,Q){let Y=await fetch(DY$,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream",...gz?{"Mcp-Session-Id":gz}:{}},body:JSON.stringify({jsonrpc:"2.0",id:Q,method:$,params:J})});if(!Y.ok)throw Error(`Mintlify MCP error: ${Y.status}`);let X=Y.headers.get("mcp-session-id");if(X)gz=X;let W=(await Y.text()).split(`
119
119
  `).find((D)=>D.startsWith("data: "));if(!W)throw Error("No data in Mintlify MCP response");return JSON.parse(W.slice(6))}async function KY$(){if(gz)return;await Al("initialize",{protocolVersion:"2025-03-26",capabilities:{},clientInfo:{name:"monaco-mcp-server",version:B3.version}},0)}async function VY$($){return await KY$(),(await Al("tools/call",{name:UY$,arguments:{query:$}},1))?.result}function Il($){$.registerTool("search_docs",{description:"Search the Monaco documentation for information about the protocol, SDK, trading, and development guides.",inputSchema:A.object({query:A.string().describe("The search query")})},async({query:J})=>{try{let Q=await VY$(J);if(Q?.content&&Array.isArray(Q.content))return{content:Q.content};return I$(Q)}catch(Q){return I0(`Search failed: ${Q instanceof Error?Q.message:String(Q)}`)}})}function Ll($){Il($)}function Bl($){$.registerTool("get_trades",{description:"Get historical trades for a trading pair. Returns recent trades sorted by execution time (newest first).",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),page:A.number().optional().describe("Page number (starts from 1, default: 1)"),page_size:A.number().optional().describe("Max number of records to return (default: 25, max: 100)")})},async({trading_pair_id:J,page:Q,page_size:Y})=>{let G=await Y1().trades.getTrades(J,{page:Q,page_size:Y});return I$(G)})}function Zl($){Bl($)}function Fl($){$.registerTool("batch_cancel_all_orders",{description:"Cancel all active orders, optionally filtered to a specific trading pair.",inputSchema:A.object({trading_pair_id:A.string().optional().describe("Optional trading pair UUID to limit cancellation to")})},async({trading_pair_id:J})=>{let Y=await(await l$()).trading.batchCancelAll(J);return I$(Y)})}function jl($){$.registerTool("batch_cancel_orders",{description:"Cancel multiple orders by their IDs in a single request.",inputSchema:A.object({order_ids:A.array(A.string()).describe("Array of order IDs to cancel")})},async({order_ids:J})=>{let Y=await(await l$()).trading.batchCancel(J);return I$(Y)})}function Sl($){$.registerTool("cancel_order",{description:"Cancel an open order by its ID.",inputSchema:A.object({order_id:A.string().describe("The order ID to cancel")})},async({order_id:J})=>{let Y=await(await l$()).trading.cancelOrder(J);return I$(Y)})}function _l($){$.registerTool("get_order",{description:"Get detailed information about a specific order by its ID.",inputSchema:A.object({order_id:A.string().describe("The order ID to look up")})},async({order_id:J})=>{let Y=await(await l$()).trading.getOrder(J);return I$(Y)})}var OY$=A.object({trading_pair_id:A.string().trim().min(1,"Trading pair ID is required and cannot be empty"),side:A.enum(["BUY","SELL"],{message:"Order side is required and must be either 'BUY' or 'SELL'"}),price:A.string().trim().min(1,"Price is required and cannot be empty").refine(($)=>!Number.isNaN(Number($)),"Price must be a valid number").refine(($)=>Number($)>0,"Price must be greater than 0"),quantity:A.string().trim().min(1,"Quantity is required and cannot be empty").refine(($)=>!Number.isNaN(Number($)),"Quantity must be a valid number").refine(($)=>Number($)>0,"Quantity must be greater than 0"),order_type:A.enum(["LIMIT","MARKET"]).optional(),slippage_tolerance_bps:A.number().int().min(0,"Slippage tolerance must be between 0 and 1000 bps").max(1000,"Slippage tolerance must be between 0 and 1000 bps").optional()}).superRefine(($,J)=>{if($.slippage_tolerance_bps!==void 0&&$.order_type!=="MARKET")J.addIssue({code:A.ZodIssueCode.custom,message:"slippage_tolerance_bps is only valid when order_type is MARKET",path:["slippage_tolerance_bps"]})}),MY$=A.object({application_name:A.string().nullable().optional(),application_taker_fee:A.string(),application_taker_fee_bps:A.number(),buy_order_lock_amount:A.string().nullable().optional(),maker_total_receipt:A.string(),monaco_maker_rebate:A.string(),monaco_maker_rebate_bps:A.number(),monaco_taker_fee:A.string(),monaco_taker_fee_bps:A.number(),notional:A.string(),taker_total_payment:A.string(),total_taker_fees:A.string(),max_quantity:A.string().nullable(),max_quantity_raw:A.string().nullable(),slippage_tolerance_bps:A.number().nullable()});var AD=["SUBMITTED","PARTIALLY_FILLED","FILLED","SETTLED_ON_CHAIN","SETTLED","CANCELLED","REJECTED","EXPIRED"];var b5=A.enum(["BUY","SELL"],{message:'Order side must be "BUY" or "SELL"'}),yz=A.enum(["SPOT","MARGIN"],{message:'Trading mode must be "SPOT" or "MARGIN"'}),ID=A.enum(["LONG","SHORT","NONE"],{message:'Position side must be "LONG", "SHORT", or "NONE"'}),El=A.enum(["GTC","IOC","FOK"],{message:'Time in force must be "GTC", "IOC", or "FOK"'}),kF=A.enum(["GTC","IOC"],{message:'Conditional order time in force must be "GTC" or "IOC"'}),q4=A.string().trim().min(1,"Value cannot be empty").regex(/^\d+(\.\d+)?$/,"Value must be a positive decimal number (e.g., '1.5', '100')").refine(($)=>Number.parseFloat($)>0,{message:"Value must be greater than 0"}),g$=A.uuid({message:"Must be a valid UUID (e.g., '123e4567-e89b-12d3-a456-426614174000')"}),LD=A.iso.datetime({message:"Must be a valid ISO 8601 date string (e.g., '2024-12-31T23:59:59Z')"}),Pl=A.number().min(0,"Slippage tolerance must be at least 0 (no slippage)").max(1,"Slippage tolerance cannot exceed 1 (100%)").optional(),KZ4=A.object({tradingPairId:g$,side:b5,quantity:q4,price:q4,options:A.object({tradingMode:yz.optional(),useMasterBalance:A.boolean().optional(),expirationDate:LD.optional(),timeInForce:El.optional(),marginAccountId:g$.optional(),positionSide:ID.optional(),leverage:q4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),VZ4=A.object({tradingPairId:g$,side:b5,quantity:q4,options:A.object({tradingMode:yz.optional(),slippageTolerance:Pl,marginAccountId:g$.optional(),positionSide:ID.optional(),leverage:q4.optional(),reduceOnly:A.boolean().optional()}).optional()}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["options","marginAccountId"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["options","positionSide"]}).refine(($)=>$.options?.tradingMode!=="MARGIN"||$.options.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["options","leverage"]}),OZ4=A.object({orderId:g$}),MZ4=A.object({orderId:g$,newOrder:A.object({price:q4.optional(),quantity:q4.optional(),useMasterBalance:A.boolean().optional()})}),zZ4=A.object({status:A.enum(AD).optional(),trading_pair_id:g$.optional(),trading_mode:yz.optional(),margin_account_id:g$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),g5=A.enum(["LIMIT","MARKET"],{message:'Order type must be "LIMIT" or "MARKET"'}),zY$=A.enum(["STOP_LOSS","TAKE_PROFIT"],{message:'conditionType must be "STOP_LOSS" or "TAKE_PROFIT"'}),NY$=A.enum(["MARK_PRICE"],{message:'triggerSource must be "MARK_PRICE"'}),qY$=A.enum(["ACTIVE","TRIGGERING","TRIGGERED","CANCELLED","EXPIRED","FAILED"],{message:"Invalid conditional order state"}),HY$=A.enum(["LONG","SHORT"],{message:'Position side must be "LONG" or "SHORT"'}),hz=A.number().int().min(0,"Slippage tolerance must be at least 0 bps").max(1e4,"Slippage tolerance cannot exceed 10000 bps"),NZ4=A.object({tradingPairId:g$,marginAccountId:g$,conditionType:zY$,triggerPrice:q4,triggerSource:NY$.optional(),side:b5,positionSide:HY$,orderType:g5,limitPrice:q4.optional(),quantity:q4.optional(),reduceOnly:A.boolean().optional(),timeInForce:kF.optional(),slippageToleranceBps:hz.optional(),expiresAt:LD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET conditional orders",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT conditional orders",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET conditional orders",path:["slippageToleranceBps"]}),qZ4=A.object({conditionalOrderId:g$}),HZ4=A.object({margin_account_id:g$.optional(),trading_pair_id:g$.optional(),state:qY$.optional(),page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),wY$=A.object({tradingPairId:g$,orderType:g5,side:b5,price:q4.optional(),quantity:q4,tradingMode:yz.optional(),slippageTolerance:Pl,useMasterBalance:A.boolean().optional(),expirationDate:LD.optional(),timeInForce:El.optional(),marginAccountId:g$.optional(),positionSide:ID.optional(),leverage:q4.optional(),reduceOnly:A.boolean().optional()}).refine(($)=>$.orderType!=="LIMIT"||$.price!==void 0,{message:"Price is required for LIMIT orders",path:["price"]}).refine(($)=>$.orderType!=="MARKET"||$.price===void 0,{message:"Price must not be provided for MARKET orders",path:["price"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.marginAccountId!==void 0,{message:"marginAccountId is required for MARGIN orders",path:["marginAccountId"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.positionSide!==void 0,{message:"positionSide is required for MARGIN orders",path:["positionSide"]}).refine(($)=>$.tradingMode!=="MARGIN"||$.leverage!==void 0,{message:"leverage is required for MARGIN orders",path:["leverage"]}),wZ4=A.object({orders:A.array(wY$).min(1,"At least one order is required")}),AY$=A.object({orderId:g$,price:q4.optional(),quantity:q4.optional(),useMasterBalance:A.boolean().optional()}).refine(($)=>$.price!==void 0||$.quantity!==void 0,{message:"At least one of price or quantity must be provided"}),AZ4=A.object({orders:A.array(AY$).min(1,"At least one order is required")});var vl=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),ZZ4=vl.extend({state:A.string().trim().min(1,"State cannot be empty").optional()}),FZ4=A.object({label:A.string().trim().min(1,"Label cannot be empty").optional(),collateralAsset:A.string().trim().min(1,"Collateral asset cannot be empty").optional()}).optional(),jZ4=A.object({marginAccountId:g$}),SZ4=A.object({asset:A.string().trim().min(1,"Asset cannot be empty").optional()}).optional(),_Z4=A.object({marginAccountId:g$,request:A.object({asset:A.string().trim().min(1,"Asset cannot be empty"),amount:q4})}),EZ4=vl.extend({marginAccountId:g$,movement_type:A.string().trim().min(1,"Movement type cannot be empty").optional()}),PZ4=A.object({marginAccountId:g$,request:A.object({tradingPairId:g$,side:b5,positionSide:ID,orderType:g5,price:q4.optional(),quantity:q4,leverage:q4,reduceOnly:A.boolean().optional()})}).refine(($)=>$.request.orderType!=="LIMIT"||$.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}).refine(($)=>$.request.orderType!=="MARKET"||$.request.price===void 0,{message:"price must not be provided for MARKET risk simulations",path:["request","price"]});var Rl=A.enum(["1m","5m","15m","30m","1h","4h","1d","1w","1M"],{message:'Interval must be one of: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"'}),IY$=31536000000,LY$=946684800000,uz=A.number().int().positive({message:"Timestamp must be a positive integer (milliseconds since epoch)"}).min(LY$,{message:"Timestamp must be at least Jan 1, 2000 (946684800000 ms). Did you pass seconds instead of milliseconds?"}).max(Number.MAX_SAFE_INTEGER,{message:"Timestamp must not exceed JavaScript's maximum safe integer"}).refine(($)=>$<=Date.now()+IY$,{message:"Timestamp must not be unreasonably far in the future (max 1 year ahead)"}),CZ4=A.object({tradingPairId:g$,interval:Rl,startTime:uz,endTime:uz}).refine(($)=>$.startTime<$.endTime,{message:"startTime must be less than endTime",path:["endTime"]}),kZ4=A.string().min(1,"Trading pair symbol cannot be empty").regex(/^[A-Za-z0-9]{1,10}\/[A-Za-z0-9]{1,10}$/,{message:'Trading pair symbol must be in format "BASE/QUOTE" (e.g., "BTC/USDT", "ETH/USD")'}),BY$=A.number().int().positive({message:"Limit must be a positive integer"}).max(500,{message:"Limit cannot exceed 500 bars per request"}).optional(),xZ4=A.object({tradingPairId:g$,interval:Rl,startTime:uz.optional(),endTime:uz.optional(),limit:BY$}).refine(($)=>{if($.startTime!==void 0&&$.endTime!==void 0)return $.startTime<$.endTime;return!0},{message:"startTime must be less than endTime",path:["endTime"]});var fZ4=A.object({tradingPairId:g$}),bZ4=A.object({query:A.string().min(1,"Search query cannot be empty").optional(),page_size:A.number().int().min(1).max(100).optional(),page:A.number().int().min(1).optional()}),gZ4=A.object({tradingPairId:g$});var Cl=A.object({page:A.number().int().min(1,"Page must be at least 1").optional(),page_size:A.number().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),ZY$=A.enum(["OPEN","CLOSED","LIQUIDATING"],{message:'Position status must be "OPEN", "CLOSED", or "LIQUIDATING"'}),FY$=A.enum(["MARKET","LIMIT","IOC"],{message:'Close type must be "MARKET", "LIMIT", or "IOC"'}),mz=A.object({positionId:g$}),mZ4=Cl.extend({margin_account_id:g$.optional(),trading_pair_id:g$.optional(),status:ZY$.optional()});var lZ4=mz.extend({request:A.object({closeType:FY$,limitPrice:q4.optional(),slippageToleranceBps:hz.optional(),quantity:q4.optional()})}).refine(($)=>$.request.closeType!=="LIMIT"||$.request.limitPrice!==void 0,{message:"limitPrice is required for LIMIT close requests",path:["request","limitPrice"]}).refine(($)=>$.request.closeType==="LIMIT"||$.request.limitPrice===void 0,{message:"limitPrice is only allowed for LIMIT close requests",path:["request","limitPrice"]});var nZ4=mz.extend({request:A.object({amount:q4,asset:A.string().trim().min(1,"Asset cannot be empty")})}),dZ4=mz.extend({request:A.object({amount:q4})}),Tl=A.object({triggerPrice:q4,orderType:g5,limitPrice:q4.optional(),quantity:q4.optional(),timeInForce:kF.optional(),slippageToleranceBps:hz.optional(),expiresAt:LD.optional()}).refine(($)=>$.orderType!=="LIMIT"||$.limitPrice!==void 0,{message:"limitPrice is required for LIMIT TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET TP/SL legs",path:["limitPrice"]}).refine(($)=>$.orderType!=="MARKET"||$.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT TP/SL legs",path:["timeInForce"]}).refine(($)=>$.orderType!=="LIMIT"||$.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET TP/SL legs",path:["slippageToleranceBps"]}),pZ4=mz.extend({request:A.object({takeProfit:Tl.optional(),stopLoss:Tl.optional()}).refine(($)=>$.takeProfit!==void 0||$.stopLoss!==void 0,{message:"At least one of takeProfit or stopLoss is required"})}),iZ4=Cl.extend({position_id:g$.optional(),margin_account_id:g$.optional(),trading_pair_id:g$.optional()});var jY$=A.enum(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"],{message:'Entry type must be "CREDIT", "DEBIT", "LOCK", "UNLOCK", or "FEE"'}),SY$=A.enum(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"],{message:'Transaction type must be "DEPOSIT", "WITHDRAWAL", "TRADE", "FEE", "FUNDING", "LIQUIDATION", "INTEREST", or "REWARD"'}),tZ4=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),entry_type:jY$.optional(),transaction_type:SY$.optional(),asset_id:g$.optional()}),aZ4=A.object({page:A.number().int("Page must be an integer").min(1,"Page must be at least 1").optional(),page_size:A.number().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),trading_pair_id:g$.optional()});var JF4=A.string().regex(/^0x[a-fA-F0-9]{40}$/,{message:"Must be a valid Ethereum address (e.g., '0x1234...5678')"}),xF=A.union([A.string().regex(/^\d+$/,"Must be a positive integer string").refine(($)=>BigInt($)>0n,{message:"Amount must be greater than 0"}),A.bigint().refine(($)=>$>0n,{message:"Amount must be greater than 0"})]),QF4=A.object({assetId:g$,amount:xF,autoWait:A.boolean().optional()}),XF4=A.object({assetId:g$,amount:xF,autoWait:A.boolean().optional()}),YF4=A.object({assetId:g$,amount:xF,autoWait:A.boolean().optional()}),GF4=A.object({assetId:g$});function kl($){$.registerTool("get_orders",{description:"Get a paginated list of orders with optional filters by status and trading pair.",inputSchema:A.object({status:A.enum(AD).optional().describe("Filter by order status (e.g. SUBMITTED, FILLED, CANCELLED)"),trading_pair_id:A.string().optional().describe("Filter by trading pair UUID"),page:A.number().optional().describe("Page number (default: 1)"),page_size:A.number().optional().describe("Orders per page (default: 10, max: 100)")})},async({status:J,trading_pair_id:Q,page:Y,page_size:X})=>{let W=await(await l$()).trading.getPaginatedOrders({status:J,trading_pair_id:Q,page:Y,page_size:X});return I$(W)})}function xl($){$.registerTool("place_limit_order",{description:"Place a limit order on Monaco. Limit orders execute only when the market reaches the specified price.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),side:A.enum(["BUY","SELL"]).describe("Order side"),quantity:A.string().describe("Order quantity as a decimal string"),price:A.string().describe("Limit price as a decimal string"),trading_mode:A.enum(["SPOT"]).optional().describe("Trading mode (default: SPOT)"),time_in_force:A.enum(["GTC","IOC","FOK"]).optional().describe("Time in force (default: GTC)"),expiration_date:A.string().optional().describe("Expiration date for GTC orders (ISO 8601)")})},async({trading_pair_id:J,side:Q,quantity:Y,price:X,trading_mode:G,time_in_force:W,expiration_date:D})=>{let V=await(await l$()).trading.placeLimitOrder(J,Q,Y,X,{tradingMode:G,timeInForce:W,expirationDate:D});return I$(V)})}function fl($){$.registerTool("place_market_order",{description:"Place a market order on Monaco. Market orders execute immediately at the current market price.",inputSchema:A.object({trading_pair_id:A.string().describe("Trading pair UUID"),side:A.enum(["BUY","SELL"]).describe("Order side"),quantity:A.string().describe("Order quantity as a decimal string"),trading_mode:A.enum(["SPOT"]).optional().describe("Trading mode (default: SPOT)"),slippage_tolerance:A.number().optional().describe("Slippage tolerance as decimal (e.g. 0.01 for 1%)")})},async({trading_pair_id:J,side:Q,quantity:Y,trading_mode:X,slippage_tolerance:G})=>{let D=await(await l$()).trading.placeMarketOrder(J,Q,Y,{tradingMode:X,slippageTolerance:G});return I$(D)})}function bl($){$.registerTool("replace_order",{description:"Replace an existing order with new price and/or quantity. The order must be open.",inputSchema:A.object({order_id:A.string().describe("The order ID to replace"),price:A.string().optional().describe("New price as a decimal string"),quantity:A.string().optional().describe("New quantity as a decimal string")})},async({order_id:J,price:Q,quantity:Y})=>{let G=await(await l$()).trading.replaceOrder(J,{price:Q,quantity:Y});return I$(G)})}function gl($){xl($),fl($),Sl($),jl($),Fl($),bl($),kl($),_l($)}function yl($){$.registerTool("vault_get_allowance",{description:"Check the current token allowance granted to the Monaco vault for a specific asset.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID to check allowance for")})},async({asset_id:J})=>{let Y=await(await l$()).vault.getAllowance(J);return I$({asset_id:J,allowance:Y.toString()})})}function hl($){$.registerTool("vault_approve",{description:"Approve the Monaco vault contract to spend tokens on your behalf. Required before depositing ERC20 tokens.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID to approve"),amount:A.string().regex(/^\d+$/,"Must be a non-negative integer string").describe("Max amount to approve as a raw integer string (e.g. '1000000' for 1 USDC with 6 decimals)")})},async({asset_id:J,amount:Q})=>{let X=await(await l$()).vault.approve(J,BigInt(Q));return I$({hash:X.hash,status:X.status})})}function ul($){$.registerTool("vault_deposit",{description:"Deposit tokens into the Monaco vault. Requires prior approval for ERC20 tokens (use vault_approve first).",inputSchema:A.object({asset_id:A.string().describe("The asset UUID to deposit"),amount:A.string().regex(/^\d+$/,"Must be a non-negative integer string").describe("Amount to deposit as a raw integer string (e.g. '1000000' for 1 USDC with 6 decimals)")})},async({asset_id:J,amount:Q})=>{let X=await(await l$()).vault.deposit(J,BigInt(Q));return I$({hash:X.hash,status:X.status})})}function ml($){$.registerTool("vault_needs_approval",{description:"Check if approval is needed before depositing a specific amount of tokens.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID to check"),amount:A.string().regex(/^\d+$/,"Must be a non-negative integer string").describe("Amount to check as a raw integer string")})},async({asset_id:J,amount:Q})=>{let X=await(await l$()).vault.needsApproval(J,BigInt(Q));return I$({asset_id:J,amount:Q,needs_approval:X})})}function ll($){$.registerTool("vault_withdraw",{description:"Withdraw tokens from the Monaco vault back to your wallet.",inputSchema:A.object({asset_id:A.string().describe("The asset UUID to withdraw"),amount:A.string().regex(/^\d+$/,"Must be a non-negative integer string").describe("Amount to withdraw as a raw integer string (e.g. '1000000' for 1 USDC with 6 decimals)")})},async({asset_id:J,amount:Q})=>{let X=await(await l$()).vault.withdraw(J,BigInt(Q));return I$({hash:X.hash,status:X.status})})}function nl($){hl($),ul($),ll($),yl($),ml($)}function dl($,J){if(Ll($),Vl($),Ml($),Zl($),J.authenticated)gl($),wl($),Gl($),nl($),Xl($,{network:J.network})}if(!globalThis.fetch)globalThis.fetch=XU,globalThis.Headers=P6,globalThis.Request=OJ,globalThis.Response=G6;if(!globalThis.WebSocket)globalThis.WebSocket=dN.default;async function _Y$(){let $=mQ(),J=$.privateKey!==null,Q=new mL({name:"monaco-mcp-server",version:B3.version});dl(Q,{authenticated:J,network:$.network});let Y=new nL;await Q.connect(Y),console.error(J?"Monaco MCP server running on stdio":"Monaco MCP server running on stdio (public-only mode — set MONACO_PRIVATE_KEY and MONACO_CLIENT_ID for full access)")}_Y$().catch(($)=>{console.error("Fatal error:",$),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xmonaco/mcp-server",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",